xen/serial: scif: add support for HSCIF
authorVolodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Tue, 8 Feb 2022 11:23:55 +0000 (11:23 +0000)
committerJulien Grall <jgrall@amazon.com>
Wed, 9 Feb 2022 12:24:49 +0000 (12:24 +0000)
HSCIF is a high-speed variant of Renesas SCIF serial interface. From
Xen point of view, they almost the same, only difference is in FIFO
size.

Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@epam.com>
Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Acked-by: Julien Grall <jgrall@amazon.com>
xen/drivers/char/scif-uart.c

index ee204a11a471bb4b079a2d384b811cc2505cdc09..2fccafe3407d5fa4517aec94bc4c58f8429858f4 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * xen/drivers/char/scif-uart.c
  *
- * Driver for SCIF(A) (Serial communication interface with FIFO (A))
- * compatible UART.
+ * Driver for (H)SCIF(A) ((High-speed) Serial communication interface
+ * with FIFO (A)) compatible UART.
  *
  * Oleksandr Tyshchenko <oleksandr.tyshchenko@globallogic.com>
  * Copyright (C) 2014, Globallogic.
@@ -47,6 +47,7 @@ enum port_types
 {
     SCIF_PORT,
     SCIFA_PORT,
+    HSCIF_PORT,
     NR_PORTS,
 };
 
@@ -88,6 +89,17 @@ static const struct port_params port_params[NR_PORTS] =
                         SCASCR_BRIE,
         .fifo_size    = 64,
     },
+    [HSCIF_PORT] =
+    {
+        .status_reg   = SCIF_SCFSR,
+        .tx_fifo_reg  = SCIF_SCFTDR,
+        .rx_fifo_reg  = SCIF_SCFRDR,
+        .overrun_reg  = SCIF_SCLSR,
+        .overrun_mask = SCLSR_ORER,
+        .error_mask   = SCFSR_PER | SCFSR_FER | SCFSR_BRK | SCFSR_ER,
+        .irq_flags    = SCSCR_RIE | SCSCR_TIE | SCSCR_REIE,
+        .fifo_size    = 128,
+    },
 };
 
 static void scif_uart_interrupt(int irq, void *data, struct cpu_user_regs *regs)
@@ -288,6 +300,7 @@ static const struct dt_device_match scif_uart_dt_match[] __initconst =
 {
     { .compatible = "renesas,scif",  .data = &port_params[SCIF_PORT] },
     { .compatible = "renesas,scifa", .data = &port_params[SCIFA_PORT] },
+    { .compatible = "renesas,hscif", .data = &port_params[HSCIF_PORT] },
     { /* sentinel */ },
 };