mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00
serial: qcom-geni: fix polled console initialisation
commit4bef7c6f29
upstream. The polled console (KGDB/KDB) implementation must not call port setup unconditionally as the port may already be in use by the console or a getty. Only make sure that the receiver is enabled, but do not enable any device interrupts. Fixes:d8851a96ba
("tty: serial: qcom-geni-serial: Add a poll_init() function") Cc: stable@vger.kernel.org # 6.4 Cc: Douglas Anderson <dianders@chromium.org> Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Reviewed-by: Douglas Anderson <dianders@chromium.org> Link: https://lore.kernel.org/r/20241009145110.16847-2-johan+linaro@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6acd19ad3a
commit
90e3f819e6
|
@ -144,6 +144,8 @@ static const struct uart_ops qcom_geni_uart_pops;
|
||||||
static struct uart_driver qcom_geni_console_driver;
|
static struct uart_driver qcom_geni_console_driver;
|
||||||
static struct uart_driver qcom_geni_uart_driver;
|
static struct uart_driver qcom_geni_uart_driver;
|
||||||
|
|
||||||
|
static int qcom_geni_serial_port_setup(struct uart_port *uport);
|
||||||
|
|
||||||
static inline struct qcom_geni_serial_port *to_dev_port(struct uart_port *uport)
|
static inline struct qcom_geni_serial_port *to_dev_port(struct uart_port *uport)
|
||||||
{
|
{
|
||||||
return container_of(uport, struct qcom_geni_serial_port, uport);
|
return container_of(uport, struct qcom_geni_serial_port, uport);
|
||||||
|
@ -385,6 +387,23 @@ static void qcom_geni_serial_poll_put_char(struct uart_port *uport,
|
||||||
writel(M_TX_FIFO_WATERMARK_EN, uport->membase + SE_GENI_M_IRQ_CLEAR);
|
writel(M_TX_FIFO_WATERMARK_EN, uport->membase + SE_GENI_M_IRQ_CLEAR);
|
||||||
qcom_geni_serial_poll_tx_done(uport);
|
qcom_geni_serial_poll_tx_done(uport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int qcom_geni_serial_poll_init(struct uart_port *uport)
|
||||||
|
{
|
||||||
|
struct qcom_geni_serial_port *port = to_dev_port(uport);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!port->setup) {
|
||||||
|
ret = qcom_geni_serial_port_setup(uport);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!qcom_geni_serial_secondary_active(uport))
|
||||||
|
geni_se_setup_s_cmd(&port->se, UART_START_READ, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_QCOM_GENI_CONSOLE
|
#ifdef CONFIG_SERIAL_QCOM_GENI_CONSOLE
|
||||||
|
@ -1544,7 +1563,7 @@ static const struct uart_ops qcom_geni_console_pops = {
|
||||||
#ifdef CONFIG_CONSOLE_POLL
|
#ifdef CONFIG_CONSOLE_POLL
|
||||||
.poll_get_char = qcom_geni_serial_get_char,
|
.poll_get_char = qcom_geni_serial_get_char,
|
||||||
.poll_put_char = qcom_geni_serial_poll_put_char,
|
.poll_put_char = qcom_geni_serial_poll_put_char,
|
||||||
.poll_init = qcom_geni_serial_port_setup,
|
.poll_init = qcom_geni_serial_poll_init,
|
||||||
#endif
|
#endif
|
||||||
.pm = qcom_geni_serial_pm,
|
.pm = qcom_geni_serial_pm,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user