RE: [PATCH] tty: serial: sh-sci: Fix transmit end interrupt handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Geert,

> Subject: Re: [PATCH] tty: serial: sh-sci: Fix transmit end interrupt handler
> 
> 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.

OK.

> 
> > 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")

Thanks, I will use this.

> 
> > 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.

OK, Will send next version with these changes.

Cheers,
Biju




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux