From 1d2fab8a79c963cdb88e6616031984b18db81191 Mon Sep 17 00:00:00 2001 From: Alan Cudmore Date: Thu, 29 Sep 2022 12:11:59 -0400 Subject: 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. --- bsps/riscv/riscv/console/console-config.c | 14 +++++--------- 1 file 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; -- cgit v1.2.3