Message ID | 20221129110012.224685-12-brgl@bgdev.pl |
---|---|
State | New |
Headers | show |
Series | serial: qcom-geni-serial: implement support for SE DMA | expand |
On 29. 11. 22, 12:00, Bartosz Golaszewski wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > We don't stop transmissions in progress at shutdown. This is fine with > FIFO SE mode but with DMA it causes trouble so fix it now. > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> > --- > drivers/tty/serial/qcom_geni_serial.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c > index fe15fc0e1345..c0270eec2a66 100644 > --- a/drivers/tty/serial/qcom_geni_serial.c > +++ b/drivers/tty/serial/qcom_geni_serial.c > @@ -864,6 +864,9 @@ static void get_tx_fifo_size(struct qcom_geni_serial_port *port) > > static void qcom_geni_serial_shutdown(struct uart_port *uport) > { > + qcom_geni_serial_stop_tx(uport); > + qcom_geni_serial_stop_rx(uport); > + > disable_irq(uport->irq); I'm just asking without actually looking into the code: cannot the interrupt reschedule/restart the above? thanks,
On Wed, Nov 30, 2022 at 10:37 AM Jiri Slaby <jirislaby@kernel.org> wrote: > > On 29. 11. 22, 12:00, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > > > We don't stop transmissions in progress at shutdown. This is fine with > > FIFO SE mode but with DMA it causes trouble so fix it now. > > > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> > > --- > > drivers/tty/serial/qcom_geni_serial.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c > > index fe15fc0e1345..c0270eec2a66 100644 > > --- a/drivers/tty/serial/qcom_geni_serial.c > > +++ b/drivers/tty/serial/qcom_geni_serial.c > > @@ -864,6 +864,9 @@ static void get_tx_fifo_size(struct qcom_geni_serial_port *port) > > > > static void qcom_geni_serial_shutdown(struct uart_port *uport) > > { > > + qcom_geni_serial_stop_tx(uport); > > + qcom_geni_serial_stop_rx(uport); > > + > > disable_irq(uport->irq); > > I'm just asking without actually looking into the code: cannot the > interrupt reschedule/restart the above? > It can actually, good catch, thanks. Bart
diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c index fe15fc0e1345..c0270eec2a66 100644 --- a/drivers/tty/serial/qcom_geni_serial.c +++ b/drivers/tty/serial/qcom_geni_serial.c @@ -864,6 +864,9 @@ static void get_tx_fifo_size(struct qcom_geni_serial_port *port) static void qcom_geni_serial_shutdown(struct uart_port *uport) { + qcom_geni_serial_stop_tx(uport); + qcom_geni_serial_stop_rx(uport); + disable_irq(uport->irq); }