On 07.08.25 08:16, Mykola Kvach wrote:
Hello Mykola,
In general patch looks good to me, just one question below ...
From: Volodymyr Babchuk <[email protected]>
Implement suspend and resume callbacks for the SCIF UART driver,
enabled when CONFIG_SYSTEM_SUSPEND is set. This allows proper
handling of UART state across system suspend/resume cycles.
Tested on Renesas R-Car H3 Starter Kit.
Signed-off-by: Volodymyr Babchuk <[email protected]>
Signed-off-by: Oleksandr Andrushchenko <[email protected]>
Signed-off-by: Mykola Kvach <[email protected]>
---
In patch v5, there are no changes at all;
it was done just to trigger a review.
I think, you could ping on V4.
In patch v4, enhance commit message, no functional changes
In patch v2, I just added a CONFIG_SYSTEM_SUSPEND check around
the suspend/resume functions in the SCIF driver.
---
xen/drivers/char/scif-uart.c | 40 ++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/xen/drivers/char/scif-uart.c b/xen/drivers/char/scif-uart.c
index 757793ca45..888821a3b8 100644
--- a/xen/drivers/char/scif-uart.c
+++ b/xen/drivers/char/scif-uart.c
@@ -139,9 +139,8 @@ static void scif_uart_interrupt(int irq, void *data)
}
}
-static void __init scif_uart_init_preirq(struct serial_port *port)
+static void scif_uart_disable(struct scif_uart *uart)
{
- struct scif_uart *uart = port->uart;
const struct port_params *params = uart->params;
/*
@@ -155,6 +154,14 @@ static void __init scif_uart_init_preirq(struct
serial_port *port)
/* Reset TX/RX FIFOs */
scif_writew(uart, SCIF_SCFCR, SCFCR_RFRST | SCFCR_TFRST);
+}
+
+static void scif_uart_init_preirq(struct serial_port *port)
+{
+ struct scif_uart *uart = port->uart;
+ const struct port_params *params = uart->params;
+
+ scif_uart_disable(uart);
/* Clear all errors and flags */
scif_readw(uart, params->status_reg);
@@ -271,6 +278,31 @@ static void scif_uart_stop_tx(struct serial_port *port)
scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) & ~SCSCR_TIE);
}
+#ifdef CONFIG_SYSTEM_SUSPEND
+
+static void scif_uart_suspend(struct serial_port *port)
+{
+ struct scif_uart *uart = port->uart;
+
+ scif_uart_stop_tx(port);
... I wonder, whether the call above (that disables Transmit
interrupt) is really needed as the call below disables all interrupts
anyway?
+ scif_uart_disable(uart);
+}
[snip]