[PATCH] risc-v: Resurrect RISCV_ENABLE_HTIF_SUPPORT

Sebastian Huber sebastian.huber at embedded-brains.de
Wed Jan 11 07:45:19 UTC 2023


Low-end configurations may want to have the HTIF support removed.
Enable the option by default.  Fix formatting.  Fix node validity
checks.

Updates #4779.
---
 bsps/riscv/noel/include/bsp/riscv.h       |  2 --
 bsps/riscv/riscv/console/console-config.c |  9 ++++++++-
 bsps/riscv/riscv/console/htif.c           |  4 ++++
 bsps/riscv/riscv/include/bsp/riscv.h      |  2 ++
 bsps/riscv/riscv/irq/irq.c                | 18 +++++++++++-------
 bsps/riscv/riscv/start/bsp_fatal_halt.c   |  7 +++++--
 spec/build/bsps/riscv/riscv/opthtif.yml   |  4 ++--
 7 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/bsps/riscv/noel/include/bsp/riscv.h b/bsps/riscv/noel/include/bsp/riscv.h
index 3ab75573f0..0fdf64747b 100644
--- a/bsps/riscv/noel/include/bsp/riscv.h
+++ b/bsps/riscv/noel/include/bsp/riscv.h
@@ -50,8 +50,6 @@ extern uint32_t riscv_hart_count;
 
 uint32_t riscv_get_hart_index_by_phandle(uint32_t phandle);
 
-void htif_poweroff(void);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/bsps/riscv/riscv/console/console-config.c b/bsps/riscv/riscv/console/console-config.c
index fe339c2353..4916191e0b 100644
--- a/bsps/riscv/riscv/console/console-config.c
+++ b/bsps/riscv/riscv/console/console-config.c
@@ -60,7 +60,9 @@
 static fe310_uart_context fe310_uart_instance;
 #endif
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
 static htif_console_context htif_console_instance;
+#endif
 
 #if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0
 static ns16550_context ns16550_instances[RISCV_CONSOLE_MAX_NS16550_DEVICES];
@@ -163,6 +165,7 @@ static void riscv_console_probe(void)
       compat_len = 0;
     }
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
     /* Search for HTIF (eg. on Spike) and use it if found */
     if (fdt_stringlist_contains(compat, compat_len, "ucb,htif0")) {
       htif_console_context_init(&htif_console_instance.base, node);
@@ -171,6 +174,7 @@ static void riscv_console_probe(void)
       riscv_console.putchar = htif_console_putchar;
       riscv_console.getchar = htif_console_getchar;
     };
+#endif
 
 #if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0
     if (
@@ -277,9 +281,10 @@ rtems_status_code console_initialize(
   void *arg
 )
 {
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
   rtems_termios_device_context *base;
   char htif_path[] = "/dev/ttyShtif";
-
+#endif
 #if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0
   char path[] = "/dev/ttyS?";
   size_t i;
@@ -292,12 +297,14 @@ rtems_status_code console_initialize(
 
   rtems_termios_initialize();
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
   base = &htif_console_instance.base;
   rtems_termios_device_install(htif_path, &htif_console_handler, NULL, base);
 
   if (base == riscv_console.context) {
     link(htif_path, CONSOLE_DEVICE_NAME);
   }
+#endif
 
 #if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0
   for (i = 0; i < RISCV_CONSOLE_MAX_NS16550_DEVICES; ++i) {
diff --git a/bsps/riscv/riscv/console/htif.c b/bsps/riscv/riscv/console/htif.c
index 750abe6e3e..159d9d72fb 100644
--- a/bsps/riscv/riscv/console/htif.c
+++ b/bsps/riscv/riscv/console/htif.c
@@ -29,6 +29,8 @@
 
 #include <bsp/riscv.h>
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
+
 #include <dev/serial/htif.h>
 
 #include <assert.h>
@@ -137,3 +139,5 @@ const rtems_termios_device_handler htif_console_handler = {
   .poll_read = htif_console_getchar,
   .mode = TERMIOS_POLLED
 };
+
+#endif /* RISCV_ENABLE_HTIF_SUPPORT */
diff --git a/bsps/riscv/riscv/include/bsp/riscv.h b/bsps/riscv/riscv/include/bsp/riscv.h
index a11ae4291e..bbaaa246c1 100644
--- a/bsps/riscv/riscv/include/bsp/riscv.h
+++ b/bsps/riscv/riscv/include/bsp/riscv.h
@@ -52,7 +52,9 @@ extern uint32_t riscv_hart_count;
 
 uint32_t riscv_get_hart_index_by_phandle(uint32_t phandle);
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
 void htif_poweroff(void);
+#endif
 
 #ifdef __cplusplus
 }
diff --git a/bsps/riscv/riscv/irq/irq.c b/bsps/riscv/riscv/irq/irq.c
index f0ccc6f5f0..e8d297052b 100644
--- a/bsps/riscv/riscv/irq/irq.c
+++ b/bsps/riscv/riscv/irq/irq.c
@@ -249,14 +249,18 @@ static void riscv_plic_init(const void *fdt)
   plic = riscv_fdt_get_address(fdt, node);
 
   if (plic == NULL) {
-      node = fdt_node_offset_by_compatible(fdt, -1, "ucb,htif0");
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
+    node = fdt_node_offset_by_compatible(fdt, -1, "ucb,htif0");
 
-      /* Spike platform has HTIF and does not have a PLIC */
-      if (node != -1) {
-          return;
-      } else {
-          bsp_fatal(RISCV_FATAL_NO_PLIC_REG_IN_DEVICE_TREE);
-      }
+    /* Spike platform has HTIF and does not have a PLIC */
+    if (node >= 0) {
+      return;
+    } else {
+      bsp_fatal(RISCV_FATAL_NO_PLIC_REG_IN_DEVICE_TREE);
+    }
+#else
+    bsp_fatal(RISCV_FATAL_NO_PLIC_REG_IN_DEVICE_TREE);
+#endif
   }
 
   riscv_plic = plic;
diff --git a/bsps/riscv/riscv/start/bsp_fatal_halt.c b/bsps/riscv/riscv/start/bsp_fatal_halt.c
index cd7c5f20c5..e4db1f03ca 100644
--- a/bsps/riscv/riscv/start/bsp_fatal_halt.c
+++ b/bsps/riscv/riscv/start/bsp_fatal_halt.c
@@ -40,10 +40,13 @@ void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error )
 
   fdt = bsp_fdt_get();
 
+#ifdef RISCV_ENABLE_HTIF_SUPPORT
   node = fdt_node_offset_by_compatible(fdt, -1, "ucb,htif0");
 
-  if (node != -1)
-      htif_poweroff();
+  if (node >= 0) {
+    htif_poweroff();
+  }
+#endif
 
 #if RISCV_ENABLE_MPFS_SUPPORT != 0
   for(;;);
diff --git a/spec/build/bsps/riscv/riscv/opthtif.yml b/spec/build/bsps/riscv/riscv/opthtif.yml
index 9161716869..af174f82ea 100644
--- a/spec/build/bsps/riscv/riscv/opthtif.yml
+++ b/spec/build/bsps/riscv/riscv/opthtif.yml
@@ -5,10 +5,10 @@ actions:
 build-type: option
 copyrights:
 - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-default: false
+default: true
 default-by-variant: []
 description: |
-  enables the HTIF support if defined to a non-zero value, otherwise it is disabled (disabled by default)
+  Enable the Host/Target Interface (HTIF) support.
 enabled-by: true
 links: []
 name: RISCV_ENABLE_HTIF_SUPPORT
-- 
2.35.3



More information about the devel mailing list