[PATCH] platform: support starriver 9530
362800175
362800175 at qq.com
Tue Feb 24 06:03:47 PST 2026
From f93376ac9420836b1c23e885c2dafa30da96aeb3 Mon Sep 17 00:00:00 2001
From: nwumengfei <362800175 at qq.com>
Date: Tue, 24 Feb 2026 21:34:09 +0800
Subject: [PATCH] platform: support starriver 9530
---
lib/utils/serial/Kconfig | 3 +
lib/utils/serial/objects.mk | 1 +
lib/utils/serial/starriver_uart.c | 55 ++++++++
platform/generic/Kconfig | 4 +
platform/generic/configs/defconfig | 1 +
platform/generic/starriver/9530/9530.c | 141 +++++++++++++++++++++
platform/generic/starriver/9530/objects.mk | 3 +
7 files changed, 208 insertions(+)
create mode 100755 lib/utils/serial/starriver_uart.c
create mode 100755 platform/generic/starriver/9530/9530.c
create mode 100755 platform/generic/starriver/9530/objects.mk
diff --git a/lib/utils/serial/Kconfig b/lib/utils/serial/Kconfig
index 21619d0d..75334425 100644
--- a/lib/utils/serial/Kconfig
+++ b/lib/utils/serial/Kconfig
@@ -101,4 +101,7 @@ config SERIAL_SEMIHOSTING
bool "Semihosting support"
default n
+config SERIAL_STARRIVER
+ bool "Starriver support"
+ default y
endmenu
diff --git a/lib/utils/serial/objects.mk b/lib/utils/serial/objects.mk
index 94cf3a4b..24b57133 100644
--- a/lib/utils/serial/objects.mk
+++ b/lib/utils/serial/objects.mk
@@ -50,3 +50,4 @@ libsbiutils-objs-$(CONFIG_SERIAL_LITEX) += serial/litex-uart.o
libsbiutils-objs-$(CONFIG_SERIAL_UART8250) += serial/uart8250.o
libsbiutils-objs-$(CONFIG_SERIAL_XILINX_UARTLITE) += serial/xlnx-uartlite.o
libsbiutils-objs-$(CONFIG_SERIAL_SEMIHOSTING) += serial/semihosting.o
+libsbiutils-objs-$(CONFIG_SERIAL_STARRIVER) += serial/starriver_uart.o
diff --git a/lib/utils/serial/starriver_uart.c b/lib/utils/serial/starriver_uart.c
new file mode 100755
index 00000000..47247a93
--- /dev/null
+++ b/lib/utils/serial/starriver_uart.c
@@ -0,0 +1,55 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Authors:
+ * 362800175 <362800175 at qq.com>
+ *
+ */
+
+#include <sbi/riscv_io.h>
+#include <sbi/sbi_types.h>
+#include <sbi/sbi_console.h>
+
+#define UART0_BASE 0x9000000UL
+#define PADDR_UARTCR (UART0_BASE + 0x030)
+#define PADDR_UARTDR (UART0_BASE + 0x000)
+#define PADDR_UARTSR (UART0_BASE + 0x4)
+#define PADDR_UARTFR (UART0_BASE + 0x18)
+#define UART0 PADDR_UARTDR
+#define STAR_UART_TXFIFO_FULL (1<<3)
+
+void starriver_uart_putc(char c)
+{
+ volatile uint64_t *dr_addr = (volatile uint64_t *)PADDR_UARTDR;
+ volatile uint64_t *fr_addr = (volatile uint64_t *)PADDR_UARTFR;
+
+ while(*(fr_addr) & STAR_UART_TXFIFO_FULL);
+
+ *dr_addr = c & 0xff;
+}
+
+unsigned long starriver_uart_puts(const char *str, unsigned long len)
+{
+ unsigned long i;
+ for (i = 0; i < len; i++) {
+ if (str[i] == '\n')
+ starriver_uart_putc('\r');
+ starriver_uart_putc(str[i]);
+ }
+
+ return len;
+}
+
+
+struct sbi_console_device starriver_console = {
+ .name = "starriver_uart",
+ .console_putc = starriver_uart_putc,
+ .console_puts = starriver_uart_puts,
+};
+
+int starriver_uart_init(void)
+{
+ sbi_console_set_device(&starriver_console);
+
+ return 0;
+}
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
index 0c11fbd2..4a783bff 100644
--- a/platform/generic/Kconfig
+++ b/platform/generic/Kconfig
@@ -99,6 +99,10 @@ config PLATFORM_SPACEMIT_K1
bool "Spacemit K1 support"
select FDT_HSM_SPACEMIT
default n
+
+config PLATFORM_STARRIVER_9530
+ bool "StarRiver 9530 support"
+ default n
source "$(OPENSBI_SRC_DIR)/platform/generic/andes/Kconfig"
source "$(OPENSBI_SRC_DIR)/platform/generic/eswin/Kconfig"
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
index 727c5f4a..b531b73e 100644
--- a/platform/generic/configs/defconfig
+++ b/platform/generic/configs/defconfig
@@ -12,6 +12,7 @@ CONFIG_PLATFORM_STARFIVE_JH7110=y
CONFIG_PLATFORM_THEAD=y
CONFIG_PLATFORM_MIPS_P8700=y
CONFIG_PLATFORM_SPACEMIT_K1=y
+CONFIG_PLATFORM_STARRIVER_9530=y
CONFIG_FDT_CACHE=y
CONFIG_FDT_CACHE_ANDES_LLCACHE=y
CONFIG_FDT_CACHE_SIFIVE_CCACHE=y
diff --git a/platform/generic/starriver/9530/9530.c b/platform/generic/starriver/9530/9530.c
new file mode 100755
index 00000000..37705692
--- /dev/null
+++ b/platform/generic/starriver/9530/9530.c
@@ -0,0 +1,141 @@
+/*
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Authors:
+ * 362800175 <362800175 at qq.com>
+ *
+ */
+#include <platform_override.h>
+#include <sbi/riscv_io.h>
+#include <sbi/sbi_console.h>
+
+#include <sbi_utils/irqchip/plic.h>
+#include <sbi_utils/timer/aclint_mtimer.h>
+
+#define STARRIVER_HART_COUNT 2
+#define STARRIVER_TIMER_FREQ 375000
+#define STARRIVER_TIMER_ADDR 0x2000000
+
+#define STARRIVER_ACLINT_MSWI_ADDR (STARRIVER_TIMER_ADDR + CLINT_MSWI_OFFSET)
+#define STARRIVER_ACLINT_MTIMER_ADDR (STARRIVER_TIMER_ADDR + 0xbff8)
+#define STARRIVER_ACLINT_MTIMECMP_ADDR (STARRIVER_TIMER_ADDR + 0x4000)
+
+#define STARRIVER_PLIC_ADDR 0xc000000
+#define STARRIVER_PLIC_SIZE 0x10000000
+
+#define STARRIVER_PLIC_NUM_SOURCES 0x35
+#define STARRIVER_PLIC_NUM_PRIORITIES 7
+
+#define STARRIVER_MTIMECMP_SIZE 0xbff8
+#define STARRIVER_MTIME_SIZE 0x8
+
+#define UART0_BASE (0x09000000UL) /*!< (UART0) Base Address */
+#define PADDR_UARTCR (UART0_BASE + 0x030)
+#define PADDR_UARTDR (UART0_BASE + 0x000)
+#define SOC_DEBUG_UART PADDR_UARTDR
+#define PADDR_UARTIBRD (UART0_BASE + 0x024)
+#define PADDR_UARTFBRD (UART0_BASE + 0x028)
+#define PADDR_UUARTLCR_H (UART0_BASE + 0x02c)
+
+#define STARRIVER_TIMER_VALUE() readl((void *)STARRIVER_ACLINT_MTIMER_ADDR)
+
+static struct plic_data plic = {
+ .addr = STARRIVER_PLIC_ADDR,
+ .size = STARRIVER_PLIC_SIZE,
+ .num_src = STARRIVER_PLIC_NUM_SOURCES,
+};
+
+static struct aclint_mtimer_data mtimer = {
+ .mtime_freq = STARRIVER_TIMER_FREQ,
+ .mtime_addr = STARRIVER_ACLINT_MTIMER_ADDR,
+ .mtime_size = STARRIVER_MTIME_SIZE,
+ .mtimecmp_addr = STARRIVER_ACLINT_MTIMECMP_ADDR,
+ .mtimecmp_size = STARRIVER_MTIMECMP_SIZE,
+ .first_hartid = 0,
+ .hart_count = STARRIVER_HART_COUNT,
+ .has_64bit_mmio = true,
+};
+
+static u32 measure_cpu_freq(u32 n)
+{
+ u32 start_mtime, delta_mtime;
+ u32 mtime_freq = STARRIVER_TIMER_FREQ;
+ u32 tmp = (u32)STARRIVER_TIMER_VALUE();
+ u32 start_mcycle, delta_mcycle, freq;
+ /* Don't start measuring until we see an mtime tick */
+ do {
+ start_mtime = (u32)STARRIVER_TIMER_VALUE();
+ } while (start_mtime == tmp);
+ start_mcycle = csr_read(mcycle);
+ do {
+ delta_mtime = (u32)STARRIVER_TIMER_VALUE() - start_mtime;
+ } while (delta_mtime < n);
+
+ delta_mcycle = csr_read(mcycle) - start_mcycle;
+
+ freq = (delta_mcycle / delta_mtime) * mtime_freq
+ + ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime;
+
+ sbi_printf("%s: delta_mcycle = %u delta_mtime = %u mtime_freq = %u freq = %u\n",
+ __func__, delta_mcycle, delta_mtime, mtime_freq, freq);
+
+ return freq;
+}
+
+extern int starriver_uart_init(void);
+
+static int starriver_console_init(void)
+{
+ return starriver_uart_init();
+}
+
+static int starriver_irqchip_init(bool cold_boot)
+{
+ int rc = 0;
+
+ if (cold_boot) {
+ rc = plic_cold_irqchip_init(&plic);
+ }
+
+ return rc;
+}
+
+static int starriver_timer_init(bool cold_boot)
+{
+ int rc = 0;
+
+ if (cold_boot) {
+ measure_cpu_freq(100);
+ rc = aclint_mtimer_cold_init(&mtimer, NULL);
+ }
+
+ return rc;
+}
+
+static int starriver_early_init(bool cold_boot)
+{
+ starriver_console_init();
+
+ starriver_irqchip_init(cold_boot);
+
+ starriver_timer_init(cold_boot);
+
+ return 0;
+}
+
+static int starriver_9530_platform_init(const void *fdt, int nodeoff, const struct fdt_match *match)
+{
+ generic_platform_ops.final_init = starriver_early_init;
+
+ return 0;
+}
+
+static const struct fdt_match starriver_9530_match[] = {
+ { .compatible = "starriver,9530" },
+ { },
+};
+
+const struct fdt_driver starriver_9530 = {
+ .match_table = starriver_9530_match,
+ .init = starriver_9530_platform_init,
+};
\ No newline at end of file
diff --git a/platform/generic/starriver/9530/objects.mk b/platform/generic/starriver/9530/objects.mk
new file mode 100755
index 00000000..b88af7cd
--- /dev/null
+++ b/platform/generic/starriver/9530/objects.mk
@@ -0,0 +1,3 @@
+carray-platform_override_modules-$(CONFIG_PLATFORM_STARRIVER_9530) += starriver_9530
+
+platform-objs-$(CONFIG_PLATFORM_STARRIVER_9530) += starriver/9530/9530.o
--
2.34.1
More information about the opensbi
mailing list