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