Hi Biju, On Fri, Mar 17, 2023 at 2:47 PM Biju Das <biju.das.jz@xxxxxxxxxxxxxx> wrote: > > Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit end interrupt handler > > On Fri, Mar 17, 2023 at 10:15 AM Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > > wrote: > > > > Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit end interrupt > > > > handler On Fri, Mar 17, 2023 at 9:08 AM Biju Das > > <biju.das.jz@xxxxxxxxxxxxxx> wrote: > > > > > > Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit end > > > > > > interrupt handler On Fri, Mar 17, 2023 at 8:59 AM Biju Das > > > > <biju.das.jz@xxxxxxxxxxxxxx> wrote: > > > > > > > > Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit end > > > > > > > > interrupt handler On Thu, Mar 16, 2023 at 5:34 PM Biju Das > > > > > > <biju.das.jz@xxxxxxxxxxxxxx> wrote: > > > > > > > > > > Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit > > > > > > > > > > end interrupt handler > > > > > > > > > > > > > > > > > > On Thu, Mar 16, 2023 at 5:01 PM Biju Das > > > > > > > > > > <biju.das.jz@xxxxxxxxxxxxxx> > > > > > > > > wrote: > > > > > > > > > > > The RZ SCI/ RZ/A1 SCIF has only 4 interrupts. The > > > > > > > > > > > fourth interrupt is transmit end interrupt, so shuffle > > > > > > > > > > > the interrupts to fix the transmit end interrupt > > > > > > > > > > > handler for these > > > > IPs. > > > > > > > > > > > > > > > > > > > > > > Fixes: 392fb8df528b ("serial: sh-sci: Use > > > > > > > > > > > platform_get_irq_optional() for optional interrupts") > > > > > > > > > > > > > > > > > > > > I don't think that's the right bad commit. > > > > > > > > > > > > > > > > > > OK. I will use below commit as fixes one, that is the > > > > > > > > > commit which added RZ/A1 SCIF with 4 interrupts. > > > > > > > > > > > > > > > > > > commit 8b0bbd956228ae87 ("serial: sh-sci: Add support for > > > > > > > > > R7S9210") > > > > > > > > > > > > > > > > That one added support for RZ/A2, and is also not the bad > > commit? > > > > > > > > > > > > > > OK will use below one, > > > > > > > > > > > > > > Fixes: 4c84c1b3acca ("ARM: shmobile: r7s72100: add scif nodes > > > > > > > to > > > > > > > dtsi") > > > > > > > > > > > > This really starts to look like a guessing game... Beep ;-) > > > > > > > > > > Already there is a generic compatible in driver, where we started > > > > > introducing RZ/A1 SoC With 4 interrupts. So addition of this SoC > > > > > has this > > > > issue. Am I missing anything here? > > > > > > > > The rabbit hole seems to be deeper than I thought... > > > > > > > > Looking at the code, the driver always assumed the fourth interrupt > > > > is BRI, which matches the RZ/A1 datasheet for SCIF. > > > > So the 4 IRQ case is really a subset of the 6 IRQ case, and > > > > Documentation/devicetree/bindings/serial/renesas,scif.yaml > > > > is wrong. > > > > > > OK. > > > > > > > > > > > However, SCI(g) is the odd one (also on SH): it has TEI as the > > > > fourth IRQ, which I probably missed when doing the json-schema > > > > conversion in commit 384d00fae8e51f8f ("dt-bindings: serial: sh-sci: > > > > Convert to json-schema"), leading to the bug in scif.yaml. > > > > > > > > Note that the driver never looks at the interrupt names, but uses > > > > indices exclusively. > > > > > > > > So I guess SCI has been broken on SH since forever, too? > > > > > > I think so, by looking at the changes done in tx to make it work on > > RZ/G2UL. > > > On RZ/G2UL both rx and tx is broken. > > > > > > Not sure SCI is tested ever on SH platform?? > > > > > > Can any SH platform person confirm this? > > > > SCI is only supported on > > - sh770x, > > - sh7750 (excluding rts7751r2d) > > I know it's not exposed on my landisk, > > - sh7760, for the SIM-port, which I doubt anyone uses. > > > > FTR, I tried the "obvious" thing (remove the rts7751r2d-checks in > > arch/sh/kernel/cpu/sh4/setup-sh7750.c, and replace sci_br_interrupt as the > > interrupt handler by sci_tx_interrupt in sh-sci.c), but that didn't make > > ttySC0 work on qemu/rts7751r2d. > > I am not seeing any SH platform SoCs in[1] and RZ/A2 does not have any SCI nodes > defined in dts, Most SH platforms have not been converted to DT yet: $ git grep -w PORT_SCI -- arch/sh arch/sh/kernel/cpu/sh3/setup-sh770x.c: .type = PORT_SCI, arch/sh/kernel/cpu/sh4/setup-sh7750.c: .type = PORT_SCI, arch/sh/kernel/cpu/sh4/setup-sh7760.c: .type = PORT_SCI, But I just realized the above are not affected, as they define either 1 or 3 interrupts for the SCI port instead of. > So Shall I use the below fixes tag instead, as it is documented in dt bindings and is the first > SoC with broken irq handler?? > > Fixes: f9a2adcc9e90 ("arm64: dts: renesas: r9a07g044: Add SCI[0-1] nodes") That's a DTS change, while the bug is in the driver? The bug seems to be present in all versions since modern git of the sh-sci serial driver. More archaeology shows early versions used hardcoded lists of 3 interrupts for SCI, avoiding the issue. The even older sh-sci character device driver registered only 3 interrupt handlers when built with SCI support only. So the issue only started to appear (if anyone noticed at all) with the (removed) DT-based H8/300 architecture, which described 4 interrupts in DT, which the sh-sci driver handles incorrectly. So if you insist on a Fixes line: Fixes: e1d0be616186906d ("sh-sci: Add h8300 SCI") > With below check in driver. > > + /* > + * The fourth interrupt on SCI port is transmit end interrupt, so > + * shuffle the interrupts. > + */ > + if (p->type == PORT_SCI) > + swap(sci_port->irqs[SCIx_BRI_IRQ], sci_port->irqs[SCIx_TEI_IRQ]); Thanks, LGTM. Now back to the present time, I had enough archaeology ;-) Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds