Thread (77 messages) flat view 77 messages, 11 authors, 2012-07-06
STALE5169d

[PATCH 16/16] ARM: imx: enable SPARSE_IRQ for imx platform

From: Dong Aisheng <hidden>
Date: 2012-06-19 06:16:38

On Mon, Jun 18, 2012 at 11:04:24PM +0800, Shawn Guo wrote:
On Mon, Jun 18, 2012 at 04:48:53PM +0800, Dong Aisheng wrote:
quoted
On Thu, Jun 14, 2012 at 01:59:47PM +0800, Shawn Guo wrote:
quoted
As all irqchips on imx have been changed to allocate their irq_descs,
and all unneeded mach/irqs.h inclusions on imx have been cleaned up,
now it's time to select SPARSE_IRQ for imx/mxc.

The SPARSE_IRQ support forces irqs allocation starting from 16.  All
those static irq number definition for SoCs need to shift 16 to keep
non-DT boot works.
It seems shift 16 is to get the correct linux virt irq, right?
Yes.
quoted
If yes, i do not like this approach very much since it's an implicit way
based on users know how legacy irqdomain works internally.
I do not quite follow on this.  Users do not need to know how legacy
irqdomain works internally.  They are still using those static MX*_INT_*
macros.  All they need to know is there is a 16 shift between hardware
irq and Linux irq number when they look at /proc/interrupts.
Hmm, i mean 'users' driver onwers here.
You shift 16 because you know after irqdomain map the virt irq will be shifting 16
according current status.
It may not always correct if something changes.
For example, if more irq ranges were pre-allocated except NR_IRQS_LEGACY by
someone else or if the irq domain type is changed by the driver.
In above case, i wonder the manual shifting may not work anymore.

With irqdomain support, i think we should always using the standard way
to get the virt irq number rather than assuming how virt irq ranges is used and what's the
irqdomain reverse map type is and using the virt irq directly.
quoted
Ideally i would see we keep the code as before that still using hw irqs
for device resource definition, but convert to linux virt irq in a standard
irqdomain map way when adding devices by calling imx_add_platform_device.
What's the point of hiding this irq number conversion in
imx_add_platform_device?  
It's standard and safe way.
The irq number used in resource definition
should simply just be Linux irq.  Doing what you suggest here will
No, it's should be hw irq.
Like you did for gpio driver:
generic_handle_irq(irq_find_mapping(port->domain, irqoffset));

Using irq_find_mapping to get the correct linux virt irq number.
only confuse users when they look at /proc/interrupts and those static
IRQ definitions.
I think we may need more information about irqdomain in /proc/inerrupts
or some where else to make people understand easily when have irq domain
support.
BTW, not all the platform_devices are added by calling
imx_add_platform_device on imx.
Then, we may need find way to do same thing for them too.

Regards
Dong Aisheng
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help