Hi All, > -----Original Message----- > From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > Sent: Friday, March 31, 2023 12:34 PM > To: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>; Jiri Slaby > <jirislaby@xxxxxxxxxx>; Geert Uytterhoeven <geert+renesas@xxxxxxxxx>; > Yoshinori Sato <ysato@xxxxxxxxxxxxxxxxxxxx>; linux-serial@xxxxxxxxxxxxxxx; > Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>; linux- > renesas-soc@xxxxxxxxxxxxxxx; stable@xxxxxxxxxxxxxxx > Subject: [PATCH v3 3/5] tty: serial: sh-sci: Fix TE setting on SCI IP > > As per the RZ/G2L users hardware manual (Rev.1.20 Sep, 2022), section > 23.3.7 Serial Data Transmission (Asynchronous Mode) it is mentioned that the > TE (transmit enable) must be set after setting TIE (transmit interrupt > enable) or these 2 bits are set to 1 simultaneously by a single instruction. > So set these 2 bits in single instruction. > > Fixes: 93bcefd4c6ba ("serial: sh-sci: Fix setting SCSCR_TIE while > transferring data") > Cc: stable@xxxxxxxxxxxxxxx I rechecked and the fixes tag is wrong. So, I would like to remove fixes tag for this patch in next version. Cheers, Biju > Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > --- > v3: > * New patch moved here from Renesas SCI fixes patch series > * Updated commit description > * Moved handling of clearing TE bit as separate patch#5. > --- > drivers/tty/serial/sh-sci.c | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index > 15743c2f3d3d..32f5c1f7d697 100644 > --- a/drivers/tty/serial/sh-sci.c > +++ b/drivers/tty/serial/sh-sci.c > @@ -601,6 +601,15 @@ static void sci_start_tx(struct uart_port *port) > port->type == PORT_SCIFA || port->type == PORT_SCIFB) { > /* Set TIE (Transmit Interrupt Enable) bit in SCSCR */ > ctrl = serial_port_in(port, SCSCR); > + > + /* > + * For SCI, TE (transmit enable) must be set after setting TIE > + * (transmit interrupt enable) or in the same instruction to > start > + * the transmit process. > + */ > + if (port->type == PORT_SCI) > + ctrl |= SCSCR_TE; > + > serial_port_out(port, SCSCR, ctrl | SCSCR_TIE); > } > } > @@ -2600,8 +2609,14 @@ static void sci_set_termios(struct uart_port *port, > struct ktermios *termios, > sci_set_mctrl(port, port->mctrl); > } > > - scr_val |= SCSCR_RE | SCSCR_TE | > - (s->cfg->scscr & ~(SCSCR_CKE1 | SCSCR_CKE0)); > + /* > + * For SCI, TE (transmit enable) must be set after setting TIE > + * (transmit interrupt enable) or in the same instruction to > + * start the transmitting process. So skip setting TE here for SCI. > + */ > + if (port->type != PORT_SCI) > + scr_val |= SCSCR_TE; > + scr_val |= SCSCR_RE | (s->cfg->scscr & ~(SCSCR_CKE1 | SCSCR_CKE0)); > serial_port_out(port, SCSCR, scr_val | s->hscif_tot); > if ((srr + 1 == 5) && > (port->type == PORT_SCIFA || port->type == PORT_SCIFB)) { > -- > 2.25.1