22 May, 2012

1 commit

  • At present reserving the IRLs in the IRQ bitmap in addition to the
    dropping of the legacy IRQ pre-allocation prevent IRL IRQs from being
    allocated for the x3proto board.

    The only reason to permit reservations was to lock down possible hardware
    vectors prior to dynamic IRQ scanning, but this doesn't matter much given
    that the hardware controller configuration is sorted before we get around
    to doing any dynamic IRQ allocation anyways. Beyond that, all of the
    tables are __init annotated, so quite a bit more work would need to be
    done to support reconfiguring things like IRL controllers on the fly,
    much more than would ever make it worth the hassle.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

26 Jan, 2012

2 commits


26 Dec, 2011

1 commit

  • Since the SH7372's INTCS in included into syscore suspend/resume,
    which causes the chip to be accessed when PM domains have been
    turned off during system suspend, the A4R domain containing the
    INTCS has to stay on during system sleep, which is suboptimal
    from the power consumption point of view.

    For this reason, add a new INTC flag, skip_syscore_suspend, to mark
    the INTCS for intc_suspend() and intc_resume(), so that they don't
    touch it. This allows the A4R domain to be turned off during
    system suspend and the INTCS state is resrored during system
    resume by the A4R's "power on" code.

    Suggested-by: Magnus Damm
    Signed-off-by: Rafael J. Wysocki
    Acked-by: Magnus Damm

    Rafael J. Wysocki
     

09 Nov, 2010

1 commit


26 Oct, 2010

1 commit

  • Now that the genirq code provides an IRQ bitmap of its own and the
    necessary API to manipulate it, there's no need to keep our own version
    around anymore.

    In the process we kill off some unused IRQ reservation code, with future
    users now having to tie in to the genirq API as normal.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

05 Oct, 2010

4 commits

  • This splits up the sh intc core in to something more vaguely resembling
    a subsystem. Most of the functionality was alread fairly well
    compartmentalized, and there were only a handful of interdependencies
    that needed to be resolved in the process.

    This also serves as future-proofing for the genirq and sparseirq rework,
    which will make some of the split out functionality wholly generic,
    allowing things to be killed off in place with minimal migration pain.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • If lookups happen while the radix node still points to a subgroup
    mapping, an IRQ hasn't yet been made available for the specified id, so
    error out accordingly. Once the slot is replaced with an IRQ mapping and
    the tag is discarded, lookup can commence as normal.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • Many interrupts that share a single mask source but are on different
    hardware vectors will have an associated register tied to an INTEVT that
    denotes the precise cause for the interrupt exception being triggered.

    This introduces the concept of IRQ subgroups in the intc core, where
    a virtual IRQ map is constructed for each of the pre-defined cause bits,
    and a higher level chained handler takes control of the parent INTEVT.
    This enables CPUs with heavily muxed IRQ vectors (especially across
    disjoint blocks) to break things out in to a series of managed chained
    handlers while being able to dynamically lookup and adopt the IRQs
    created for them.

    This is largely an opt-in interface, requiring CPUs to manually submit
    IRQs for subgroup splitting, in addition to providing identifiers in
    their enum maps that can be used for lazy lookup via the radix tree.

    Signed-off-by: Paul Mundt

    Paul Mundt
     
  • This implements a scheme roughly analogous to the PowerPC virtual to
    hardware IRQ mapping, which we use for IRQ to per-controller ID mapping.
    This makes it possible for drivers to use the IDs directly for lookup
    instead of hardcoding the vector.

    The main motivation for this work is as a building block for dynamically
    allocating virtual IRQs for demuxing INTC events sharing a single INTEVT
    in addition to a common masking source.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

02 Oct, 2010

1 commit


15 Apr, 2010

1 commit

  • This implements support for hardware-managed IRQ balancing as implemented
    by SH-X3 cores (presently only hooked up for SH7786, but can probably be
    carried over to other SH-X3 cores, too).

    CPUs need to specify their distribution register along with the mask
    definitions, as these follow the same format. Peripheral IRQs that don't
    opt out of balancing will be automatically distributed at the whim of the
    hardware block, while each CPU needs to verify whether it is handling the
    IRQ or not, especially before clearing the mask.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

13 Apr, 2010

1 commit

  • This adds support for hardware-assisted userspace irq masking for
    special priority levels. Due to the SR.IMASK interactivity, only some
    platforms implement this in hardware (including but not limited to
    SH-4A interrupt controllers, and ARM-based SH-Mobile CPUs). Each CPU
    needs to wire this up on its own, for now only SH7786 is wired up as an
    example.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

19 Mar, 2010

2 commits

  • Extend the INTC code with ioremap() support V2.

    Support INTC controllers that are not accessible through
    a 1:1 virt:phys window. Needed by SH-Mobile ARM INTCS.

    The INTC code behaves as usual if the io window resource
    is omitted. The slow phys->virt lookup only happens during
    setup. The fast path code operates on virtual addresses.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     
  • Extend the INTC code to warn and return an error code
    in the case of memory allocation failure.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

16 Feb, 2010

1 commit

  • Extend the shared INTC code with force_disable support to
    allow keeping mask bits statically disabled. Needed for
    SDHI support to mask out unsupported interrupt sources.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

09 Feb, 2010

2 commits

  • Extend the shared INTC code with force_enable support to
    allow keeping mask bits statically enabled. Needed by
    upcoming INTC SDHI patches that mux together a bunch of
    vectors to a single linux interrupt which is masked by
    a priority register, but needs individual mask bits
    constantly enabled.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     
  • This patch updates the INTC code by moving all vectors,
    groups and registers from struct intc_desc to struct
    intc_hw_desc.

    The idea is that INTC tables should go from using the
    macro(s) DECLARE_INTC_DESC..() only to using struct
    intc_desc with name and hw initialized using the macro
    INTC_HW_DESC(). This move makes it easy to initialize
    an extended struct intc_desc in the future.

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

02 Nov, 2009

1 commit

  • Different CPUs will have different starting vectors, with varying
    amounts of reserved or unusable vector space prior to the first slot.
    This introduces a legacy vector reservation system that inserts itself in
    between the CPU vector map registration and the platform specific IRQ
    setup. This works fine in practice as the only new vectors that boards
    need to establish on their own should be dynamically allocated rather
    than arbitrarily assigned. As a plus, this also makes all of the
    converted platforms sparseirq ready.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

27 Oct, 2009

1 commit

  • Currently this is ifdef'ed under SH-3 and SH-4A, but there are other CPUs
    that will need this as well. Given the size of the existing data
    structures, this doesn't cause any additional cacheline utilization for
    the existing users, so has no direct impact on the data structures.

    Signed-off-by: Paul Mundt

    Paul Mundt
     

24 Aug, 2009

1 commit

  • This patch changes the way in which "multi-evt" interrups are handled.
    The intc_evt2irq_table and related intc_evt2irq() have been removed and
    the "redirecting" handler is installed for the coupled interrupts.

    Thanks to that the do_IRQ() function don't have to use another level
    of indirection for all the interrupts...

    Signed-off-by: Pawel Moll
    Signed-off-by: Stuart Menefy
    Signed-off-by: Paul Mundt

    Pawel Moll
     

27 Feb, 2009

1 commit

  • Instead of keeping the single vector -> single linux irq mapping
    we extend the intc code to support merging of vectors to a single
    linux irq. This helps processors such as sh7750, sh7780 and sh7785
    which have more vectors than masking ability. With this patch in
    place we can modify the intc tables to use one irq per maskable
    irq source. Please note the following:

    - If multiple vectors share the same enum then only the
    first vector will be available as a linux irq.

    - Drivers may need to be rewritten to get pending irq
    source from the hardware block instead of irq number.

    This patch together with the sh7785 specific intc tables solves
    DMA controller irq issues related to buggy interrupt masking.

    Reported-by: Yoshihiro Shimoda
    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

01 Oct, 2008

1 commit