IRQ0 is no longer returned by platform_get_irq() and its ilk -- they now
return -EINVAL instead.  However, the kernel code supporting SH3/4-based
SoCs still 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 are using IRQ0 for the SMSC911x compatible Ethernet chip.
Fixes: ce753ad1549c ("platform: finally disallow IRQ0 in platform_get_irq() and its ilk")
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>
Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Link: https://lore.kernel.org/r/71105dbf-cdb0-72e1-f9eb-eeda8e321696@omp.ru
Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
 
 #define IVDR_CK_ON     4               /* iVDR Clock ON */
 #endif
 
-#define HL_FPGA_IRQ_BASE       200
+#define HL_FPGA_IRQ_BASE       (200 + 16)
 #define HL_NR_IRL              15
 
 #define IRQ_AX88796            (HL_FPGA_IRQ_BASE + 0)
 
 
 #define IRLCNTR1       (PA_BCR + 0)    /* Interrupt Control Register1 */
 
-#define R2D_FPGA_IRQ_BASE      100
+#define R2D_FPGA_IRQ_BASE      (100 + 16)
 
 #define IRQ_VOYAGER            (R2D_FPGA_IRQ_BASE + 0)
 #define IRQ_EXT                        (R2D_FPGA_IRQ_BASE + 1)
 
    takes.
 */
 
-#define HW_EVENT_IRQ_BASE  48
+#define HW_EVENT_IRQ_BASE  (48 + 16)
 
 /* IRQ 13 */
 #define HW_EVENT_VSYNC     (HW_EVENT_IRQ_BASE +  5) /* VSync */
 
 #define IRQ2_IRQ        evt2irq(0x640)
 
 /* Bits in IRQ012 registers */
-#define SE7724_FPGA_IRQ_BASE   220
+#define SE7724_FPGA_IRQ_BASE   (220 + 16)
 
 /* IRQ0 */
 #define IRQ0_BASE      SE7724_FPGA_IRQ_BASE
 
        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
 
        /*
 
 /*
  * 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)