[PATCH] bsps: Improve riscv console FDT parsing

Alan Cudmore alan.cudmore at gmail.com
Tue Oct 11 03:37:24 UTC 2022


Ping for this RISC-V console fix - it builds without error on 310ARTY,
Polarfire, and generic RISCV variants. I tested it on the generic QEMU
riscv platform and Padmarao tested it on the PolarFire.
Thanks,
Alan

On Thu, Sep 29, 2022 at 12:12 PM Alan Cudmore <alan.cudmore at gmail.com>
wrote:

> 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;
> --
> 2.34.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20221010/aa147f4b/attachment.htm>


More information about the devel mailing list