Re: [Qemu-devel] [PATCH] imx_serial: Generate interrupt on tx empty if enabled
13.09.2015 23:17, Peter Crosthwaite wrote: > On Fri, Sep 11, 2015 at 12:37 AM, Michael Tokarev wrote: >> >> Can we please have some r-b or ACK for this? :) >> >> 20.08.2015 18:52, Guenter Roeck wrote: >>> Generate an interrupt if the tx buffer is empty and the tx empty interrupt >>> is enabled. This fixes a problem seen when running a Linux image since >>> Linux commit 55c3cb1358e ("serial: imx: remove unneeded >>> imx_transmit_buffer() >>> from imx_start_tx()"). Linux now waits for the tx empty interrupt before >>> starting to send data, causing transmit stalls until there is an interrupt >>> for another reason. >>> >>> Signed-off-by: Guenter Roeck > > Looks right, Jean-Christophe may know more though. Thanks, applied to the trivial-patches tree :) /mjt
Re: [Qemu-devel] [PATCH] imx_serial: Generate interrupt on tx empty if enabled
On Fri, Sep 11, 2015 at 12:37 AM, Michael Tokarev wrote: > > Can we please have some r-b or ACK for this? :) > > 20.08.2015 18:52, Guenter Roeck wrote: >> Generate an interrupt if the tx buffer is empty and the tx empty interrupt >> is enabled. This fixes a problem seen when running a Linux image since >> Linux commit 55c3cb1358e ("serial: imx: remove unneeded imx_transmit_buffer() >> from imx_start_tx()"). Linux now waits for the tx empty interrupt before >> starting to send data, causing transmit stalls until there is an interrupt >> for another reason. >> >> Signed-off-by: Guenter Roeck Looks right, Jean-Christophe may know more though. Reviewed-by: Peter Crosthwaite >> --- >> hw/char/imx_serial.c | 4 +++- >> 1 file changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c >> index f3fbc77..8dc791d 100644 >> --- a/hw/char/imx_serial.c >> +++ b/hw/char/imx_serial.c >> @@ -145,7 +145,9 @@ static void imx_update(IMXSerialState *s) >> uint32_t flags; >> >> flags = (s->usr1 & s->ucr1) & (USR1_TRDY|USR1_RRDY); >> -if (!(s->ucr1 & UCR1_TXMPTYEN)) { >> +if (s->ucr1 & UCR1_TXMPTYEN) { >> +flags |= (s->uts1 & UTS1_TXEMPTY); >> +} else { >> flags &= ~USR1_TRDY; Out of scope, but this conditional looks wrong (in original code too). Why does TXMPTYEN gate TRDY? Regards, Peter >> } >> >> > >
Re: [Qemu-devel] [PATCH] imx_serial: Generate interrupt on tx empty if enabled
Can we please have some r-b or ACK for this? :) 20.08.2015 18:52, Guenter Roeck wrote: > Generate an interrupt if the tx buffer is empty and the tx empty interrupt > is enabled. This fixes a problem seen when running a Linux image since > Linux commit 55c3cb1358e ("serial: imx: remove unneeded imx_transmit_buffer() > from imx_start_tx()"). Linux now waits for the tx empty interrupt before > starting to send data, causing transmit stalls until there is an interrupt > for another reason. > > Signed-off-by: Guenter Roeck > --- > hw/char/imx_serial.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c > index f3fbc77..8dc791d 100644 > --- a/hw/char/imx_serial.c > +++ b/hw/char/imx_serial.c > @@ -145,7 +145,9 @@ static void imx_update(IMXSerialState *s) > uint32_t flags; > > flags = (s->usr1 & s->ucr1) & (USR1_TRDY|USR1_RRDY); > -if (!(s->ucr1 & UCR1_TXMPTYEN)) { > +if (s->ucr1 & UCR1_TXMPTYEN) { > +flags |= (s->uts1 & UTS1_TXEMPTY); > +} else { > flags &= ~USR1_TRDY; > } > >
[Qemu-devel] [PATCH] imx_serial: Generate interrupt on tx empty if enabled
Generate an interrupt if the tx buffer is empty and the tx empty interrupt is enabled. This fixes a problem seen when running a Linux image since Linux commit 55c3cb1358e ("serial: imx: remove unneeded imx_transmit_buffer() from imx_start_tx()"). Linux now waits for the tx empty interrupt before starting to send data, causing transmit stalls until there is an interrupt for another reason. Signed-off-by: Guenter Roeck --- hw/char/imx_serial.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index f3fbc77..8dc791d 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -145,7 +145,9 @@ static void imx_update(IMXSerialState *s) uint32_t flags; flags = (s->usr1 & s->ucr1) & (USR1_TRDY|USR1_RRDY); -if (!(s->ucr1 & UCR1_TXMPTYEN)) { +if (s->ucr1 & UCR1_TXMPTYEN) { +flags |= (s->uts1 & UTS1_TXEMPTY); +} else { flags &= ~USR1_TRDY; } -- 2.1.4