lkml.org 
[lkml]   [2022]   [Apr]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3] sh: avoid using IRQ0 on SH3/4
    Date
    Using IRQ0 by the platform devices is going to be disallowed soon (see [1])
    and even now, when IRQ0 is about to be returned by platfrom_get_irq(), you
    see a big warning. The code supporting SH3/4 SoCs maps the IRQ #s starting
    at 0 -- modify that code to start the IRQ #s from 16 instead.

    The patch should mostly affect the AP-SH4A-3A/AP-SH4AD-0A boards as they
    indeed use IRQ0 for the SMSC911x compatible Ethernet chip...

    [1] https://lore.kernel.org/all/025679e1-1f0a-ae4b-4369-01164f691511@omp.ru/

    Fixes: a85a6c86c25b ("driver core: platform: Clarify that IRQ 0 is invalid")
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>

    ---
    The patch is against Linus Torvalds' 'linux.git' repo.

    Changes in version 3:
    - added an appropriate Fixes: tag and added a passage about it to the patch
    description;
    - added actual cases of the boards using IRQ0 to the patch description;
    - added Geert Uytterhoeven's and John Paul Adrian Glaubitz's tags;
    - updated the link to point to the version 2 of the patch.

    Changes in version 2:
    - changed cmp/ge to cmp/hs in the assembly code.

    arch/sh/kernel/cpu/sh3/entry.S | 4 ++--
    include/linux/sh_intc.h | 6 +++---
    2 files changed, 5 insertions(+), 5 deletions(-)

    Index: linux/arch/sh/kernel/cpu/sh3/entry.S
    ===================================================================
    --- linux.orig/arch/sh/kernel/cpu/sh3/entry.S
    +++ linux/arch/sh/kernel/cpu/sh3/entry.S
    @@ -470,9 +470,9 @@ ENTRY(handle_interrupt)
    mov r4, r0 ! save vector->jmp table offset for later

    shlr2 r4 ! vector to IRQ# conversion
    - add #-0x10, r4

    - cmp/pz r4 ! is it a valid IRQ?
    + mov #0x10, r5
    + cmp/hs r5, r4 ! is it a valid IRQ?
    bt 10f

    /*
    Index: linux/include/linux/sh_intc.h
    ===================================================================
    --- linux.orig/include/linux/sh_intc.h
    +++ linux/include/linux/sh_intc.h
    @@ -13,9 +13,9 @@
    /*
    * Convert back and forth between INTEVT and IRQ values.
    */
    -#ifdef CONFIG_CPU_HAS_INTEVT
    -#define evt2irq(evt) (((evt) >> 5) - 16)
    -#define irq2evt(irq) (((irq) + 16) << 5)
    +#ifdef CONFIG_CPU_HAS_INTEVT /* Avoid IRQ0 (invalid for platform devices) */
    +#define evt2irq(evt) ((evt) >> 5)
    +#define irq2evt(irq) ((irq) << 5)
    #else
    #define evt2irq(evt) (evt)
    #define irq2evt(irq) (irq)
    \
     
     \ /
      Last update: 2022-04-27 20:58    [W:3.257 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site