summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cudmore <alan.cudmore@gmail.com>2022-09-29 12:11:59 -0400
committerJoel Sherrill <joel@rtems.org>2022-10-14 08:15:14 -0500
commit1d2fab8a79c963cdb88e6616031984b18db81191 (patch)
tree97c9930d86be477060b49358fe1d39149e8d60a8
parentriscv: Move functions to avoid build issues (diff)
downloadrtems-1d2fab8a79c963cdb88e6616031984b18db81191.tar.bz2
bsps: Improve riscv console FDT parsing
This fixes a problem with parsing the FDT compatible property by replacing the RISCV_CONSOLE_IS_COMPATIBLE macro with calls to the fdt_stringlist_contains function. The macro only works when the compatible FDT entry is a single string and not a list of strings. The new call will compare each item in the string list. Close #4728.
-rw-r--r--bsps/riscv/riscv/console/console-config.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/bsps/riscv/riscv/console/console-config.c b/bsps/riscv/riscv/console/console-config.c
index d962a5a418..7908c2f325 100644
--- a/bsps/riscv/riscv/console/console-config.c
+++ b/bsps/riscv/riscv/console/console-config.c
@@ -139,10 +139,6 @@ static void riscv_console_set_reg_32(uintptr_t addr, uint8_t i, uint8_t val)
}
#endif
-#define RISCV_CONSOLE_IS_COMPATIBLE(actual, actual_len, desired) \
- (actual_len == sizeof(desired) \
- && memcmp(actual, desired, sizeof(desired) - 1) == 0)
-
static void riscv_console_probe(void)
{
const void *fdt;
@@ -170,7 +166,7 @@ static void riscv_console_probe(void)
}
#if RISCV_ENABLE_HTIF_SUPPORT != 0
- if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ucb,htif0")) {
+ if (fdt_stringlist_contains(compat, compat_len, "ucb,htif0")) {
htif_console_context_init(&htif_console_instance.base, node);
riscv_console.context = &htif_console_instance.base;
@@ -181,8 +177,8 @@ static void riscv_console_probe(void)
#if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0
if (
- (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16550a")
- || RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16750"))
+ (fdt_stringlist_contains(compat, compat_len, "ns16550a")
+ || fdt_stringlist_contains(compat, compat_len, "ns16750"))
&& ns16550_devices < RISCV_CONSOLE_MAX_NS16550_DEVICES
) {
ns16550_context *ctx;
@@ -203,7 +199,7 @@ static void riscv_console_probe(void)
ctx->set_reg = riscv_console_set_reg_8;
}
- if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16750")) {
+ if (fdt_stringlist_contains(compat, compat_len, "ns16750")) {
ctx->has_precision_clock_synthesizer = true;
}
@@ -243,7 +239,7 @@ static void riscv_console_probe(void)
#endif
#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
- if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "sifive,uart0")) {
+ if (fdt_stringlist_contains(compat, compat_len, "sifive,uart0")) {
fe310_uart_context *ctx;
ctx = &fe310_uart_instance;