[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 07/16] xen/char: implement suspend/resume calls for SCIF driver


  • To: Mykola Kvach <xakep.amatop@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Grygorii Strashko <grygorii_strashko@xxxxxxxx>
  • Date: Wed, 19 Mar 2025 19:21:27 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sfN9l2LZfv70+xw8IcdoD2HbsQlJ7ZXEg9TVBCrEC1g=; b=NPLzbxo1k9kidvR8rRfLZefS82xz4S0t5RikdAYe/89NlbGLInlnH6yo97TpHdA6dl0Un5zMTPoTh87QJ2DDpJJoDsQx4bOVygw/JV+rv+BOnfdGQOyd+3dG2caWDB2VcTNxWRVv5xFemH1Dcn1U2a+uOc5CHb2DPW4Kzu8LQtG35uoaQSi4jHvsr6ItTFWBTqsw5dSDyLCKxaGGLRsCTCW0ULv35AU4SkxA2cP5m0U7O41dV13oClqe/c96WMjWmdOLvln2Lhn5im5PPxYpPvvutceXfR/Q2KEXbUr7I55cahouiuLU8iw/QvyePZml3grGXOBXwTHZBY3LT7QEvQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UQn2sP+p9VjrzNTWVoXsy4xaasdJMPnO899AWWXL+ZRYCgMG1xHsH51j9DtiydwWQS9NL3OvF4DxFJlhwJtBCMhVcVS9QcDhq91FLS8TAMUpNSoF3EfpK5TltNRwdYGJyUQS6d+fQgNbWbecRWX88eHJtVFmVPHFTAKPtBglV234Fe6z6wXyGDoOUGL0yV5vU+bm9LM3mEDtx2J37C0vMNmGuSxMXZpkjCaBNHmDXIYuwURu+93a8rmv2nh8J0Q1hwfTcVxuKJybThRH6PvNSd9L1WKysWnKDjtu8gpI2Mko9UMRZVmJIzjuT0+9KXzXvQtNBZQ0iqogIGixh94GpQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Mykola Kvach <mykola_kvach@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
  • Delivery-date: Wed, 19 Mar 2025 17:21:33 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>



On 05.03.25 11:11, Mykola Kvach wrote:
From: Mykola Kvach <mykola_kvach@xxxxxxxx>

The changes have been tested only on the Renesas R-Car-H3 Starter Kit board.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>
Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>
Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
---
  xen/drivers/char/scif-uart.c | 31 ++++++++++++++++++++++++++++++-
  1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/xen/drivers/char/scif-uart.c b/xen/drivers/char/scif-uart.c
index 757793ca45..e166fb0f36 100644
--- a/xen/drivers/char/scif-uart.c
+++ b/xen/drivers/char/scif-uart.c
@@ -139,7 +139,7 @@ static void scif_uart_interrupt(int irq, void *data)
      }
  }
-static void __init scif_uart_init_preirq(struct serial_port *port)
+static void scif_uart_init_preirq(struct serial_port *port)
  {
      struct scif_uart *uart = port->uart;
      const struct port_params *params = uart->params;
@@ -271,6 +271,33 @@ static void scif_uart_stop_tx(struct serial_port *port)
      scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) & ~SCSCR_TIE);
  }

I assume you want ifdef CONFIG_SYSTEM_SUSPEND here also


+static void scif_uart_suspend(struct serial_port *port)
+{
+    struct scif_uart *uart = port->uart;
+
+    scif_uart_stop_tx(port);
+
+    /* Wait until last bit has been transmitted. */
+    while ( !(scif_readw(uart, SCIF_SCFSR) & SCFSR_TEND) );
+
+    /* Disable TX/RX parts and all interrupts */
+    scif_writew(uart, SCIF_SCSCR, 0);
+
+    /* Reset TX/RX FIFOs */
+    scif_writew(uart, SCIF_SCFCR, SCFCR_RFRST | SCFCR_TFRST);
+}
+
+static void scif_uart_resume(struct serial_port *port)
+{
+    struct scif_uart *uart = port->uart;
+
+    scif_uart_init_preirq(port);
+
+    /* Enable TX/RX and Error Interrupts  */
+    scif_writew(uart, SCIF_SCSCR, scif_readw(uart, SCIF_SCSCR) |
+                SCSCR_TIE | SCSCR_RIE | SCSCR_REIE);
+}
+
  static struct uart_driver __read_mostly scif_uart_driver = {
      .init_preirq  = scif_uart_init_preirq,
      .init_postirq = scif_uart_init_postirq,
@@ -281,6 +308,8 @@ static struct uart_driver __read_mostly scif_uart_driver = {
      .start_tx     = scif_uart_start_tx,
      .stop_tx      = scif_uart_stop_tx,
      .vuart_info   = scif_vuart_info,
+    .suspend      = scif_uart_suspend,
+    .resume       = scif_uart_resume,
  };
static const struct dt_device_match scif_uart_dt_match[] __initconst =

--
Best regards,
-grygorii



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.