14 Oct, 2016

1 commit

  • The J-Core AIC does not have separate interrupt numbers reserved for
    cpu-local vs global interrupts. Instead, the driver requesting the irq
    is expected to know whether its device uses per-cpu interrupts or not.
    Previously it was assumed that handle_simple_irq could work for both
    cases, but it intentionally drops interrupts for an irq number that
    already has a handler running. This resulted in the timer interrupt
    for one cpu being lost when multiple cpus' timers were set for
    approximately the same expiration time, leading to stalls. In theory
    the same could also happen with IPIs.

    To solve the problem, instead of registering handle_simple_irq as the
    handler, register a wrapper function which checks whether the irq to
    be handled was requested as per-cpu or not, and passes it to
    handle_simple_irq or handle_percpu_irq accordingly.

    Fixes: 981b58f66cfc ("irqchip/jcore-aic: Add J-Core AIC driver")
    Signed-off-by: Rich Felker
    Cc: Marc Zyngier
    Cc: Jason Cooper
    Cc: linux-sh@vger.kernel.org
    Link: http://lkml.kernel.org/r/f18cec30bc17e3f52e478dd9f6714bfab02f227f.1476390724.git.dalias@libc.org
    Signed-off-by: Thomas Gleixner

    Rich Felker
     

23 Aug, 2016

1 commit

  • Fixes the following sparse warning:

    drivers/irqchip/irq-jcore-aic.c:47:12: warning:
    symbol 'aic_irq_of_init' was not declared. Should it be static?

    Signed-off-by: Wei Yongjun
    Link: https://lkml.kernel.org/r/1471706788-27587-1-git-send-email-weiyj.lk@gmail.com
    Signed-off-by: Jason Cooper

    Wei Yongjun
     

09 Aug, 2016

1 commit

  • There are two versions of the J-Core interrupt controller in use, aic1
    which generates interrupts with programmable priorities, but only
    supports 8 irq lines and maps them to cpu traps in the range 17 to 24,
    and aic2 which uses traps in the range 64-127 and supports up to 128
    irqs, with priorities dependent on the interrupt number. The Linux
    driver does not make use of priorities anyway.

    For simplicity, there is no aic1-specific logic in the driver beyond
    setting the priority register, which is necessary for interrupts to
    work at all. Eventually aic1 will likely be phased out, but it's
    currently in use in deployments and all released bitstream binaries.

    Signed-off-by: Rich Felker
    Link: https://lkml.kernel.org/r/c3b89ef74aaa6477575dbe2d410eb1d182503243.147018b6529.git.dalias@libc.org
    Signed-off-by: Jason Cooper

    Rich Felker