• Grant Likely's avatar
    irqdomain: Support for static IRQ mapping and association. · 98aa468e
    Grant Likely authored
    This adds a new strict mapping API for supporting creation of linux IRQs
    at existing positions within the domain. The new routines are as follows:
    
    For dynamic allocation and insertion to specified ranges:
    
    	- irq_create_identity_mapping()
    	- irq_create_strict_mappings()
    
    These will allocate and associate a range of linux IRQs at the specified
    location. This can be used by controllers that have their own static linux IRQ
    definitions to map a hwirq range to, as well as for platforms that wish to
    establish 1:1 identity mapping between linux and hwirq space.
    
    For insertion to specified ranges by platforms that do their own irq_desc
    management:
    
    	- irq_domain_associate()
    	- irq_domain_associate_many()
    
    These in turn call back in to the domain's ->map() routine, for further
    processing by the platform. Disassociation of IRQs get handled through
    irq_dispose_mapping() as normal.
    
    With these in place it should be possible to begin migration of legacy IRQ
    domains to linear ones, without requiring special handling for static vs
    dynamic IRQ definitions in DT vs non-DT paths. This also makes it possible
    for domains with static mappings to adopt whichever tree model best fits
    their needs, rather than simply restricting them to linear revmaps.
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    [grant.likely: Reorganized irq_domain_associate{,_many} to have all logic in one place]
    [grant.likely: Add error checking for unallocated irq_descs at associate time]
    Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Rob Herring <rob.herring@calxeda.com>
    98aa468e
irqdomain.c 26.9 KB