<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Hi Padmarao,</p><p class=MsoNormal>Could you try this patch on your Polarfire board? It works on the generic QEMU BSP and the BSP I am working on which uses the FRDME310ARTY/SiFive UART. It builds with the Polarfire BSP, but I am not able to test it. I downloaded and built QEMU that has Polarfire support, but I need to download and install SoftConsole to get the rest of the parts I need to prepare the binary.</p><p class=MsoNormal>Thanks!</p><p class=MsoNormal>Alan </p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:alan.cudmore@gmail.com">Alan Cudmore</a><br><b>Sent: </b>Thursday, September 29, 2022 12:12 PM<br><b>To: </b><a href="mailto:devel@rtems.org">devel@rtems.org</a><br><b>Cc: </b><a href="mailto:alan.cudmore@gmail.com">Alan Cudmore</a><br><b>Subject: </b>[PATCH] bsps: Improve riscv console FDT parsing</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>This fixes a problem with parsing the FDT compatible property by</p><p class=MsoNormal>replacing the RISCV_CONSOLE_IS_COMPATIBLE macro with calls to</p><p class=MsoNormal>the fdt_stringlist_contains function. The macro only works when</p><p class=MsoNormal>the compatible FDT entry is a single string and not a list of</p><p class=MsoNormal>strings. The new call will compare each item in the string list.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Close #4728.</p><p class=MsoNormal>---</p><p class=MsoNormal> bsps/riscv/riscv/console/console-config.c | 14 +++++---------</p><p class=MsoNormal> 1 file changed, 5 insertions(+), 9 deletions(-)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>diff --git a/bsps/riscv/riscv/console/console-config.c b/bsps/riscv/riscv/console/console-config.c</p><p class=MsoNormal>index d962a5a418..7908c2f325 100644</p><p class=MsoNormal>--- a/bsps/riscv/riscv/console/console-config.c</p><p class=MsoNormal>+++ b/bsps/riscv/riscv/console/console-config.c</p><p class=MsoNormal>@@ -139,10 +139,6 @@ static void riscv_console_set_reg_32(uintptr_t addr, uint8_t i, uint8_t val)</p><p class=MsoNormal> }</p><p class=MsoNormal> #endif</p><p class=MsoNormal> </p><p class=MsoNormal>-#define RISCV_CONSOLE_IS_COMPATIBLE(actual, actual_len, desired) \</p><p class=MsoNormal>-  (actual_len == sizeof(desired) \</p><p class=MsoNormal>-     && memcmp(actual, desired, sizeof(desired) - 1) == 0)</p><p class=MsoNormal>-</p><p class=MsoNormal> static void riscv_console_probe(void)</p><p class=MsoNormal> {</p><p class=MsoNormal>   const void *fdt;</p><p class=MsoNormal>@@ -170,7 +166,7 @@ static void riscv_console_probe(void)</p><p class=MsoNormal>     }</p><p class=MsoNormal> </p><p class=MsoNormal> #if RISCV_ENABLE_HTIF_SUPPORT != 0</p><p class=MsoNormal>-    if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ucb,htif0")) {</p><p class=MsoNormal>+    if (fdt_stringlist_contains(compat, compat_len, "ucb,htif0")) {</p><p class=MsoNormal>       htif_console_context_init(&htif_console_instance.base, node);</p><p class=MsoNormal> </p><p class=MsoNormal>       riscv_console.context = &htif_console_instance.base;</p><p class=MsoNormal>@@ -181,8 +177,8 @@ static void riscv_console_probe(void)</p><p class=MsoNormal> </p><p class=MsoNormal> #if RISCV_CONSOLE_MAX_NS16550_DEVICES > 0</p><p class=MsoNormal>     if (</p><p class=MsoNormal>-      (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16550a")</p><p class=MsoNormal>-          || RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16750"))</p><p class=MsoNormal>+        (fdt_stringlist_contains(compat, compat_len, "ns16550a")</p><p class=MsoNormal>+        || fdt_stringlist_contains(compat, compat_len, "ns16750"))</p><p class=MsoNormal>         && ns16550_devices < RISCV_CONSOLE_MAX_NS16550_DEVICES</p><p class=MsoNormal>     ) {</p><p class=MsoNormal>       ns16550_context *ctx;</p><p class=MsoNormal>@@ -203,7 +199,7 @@ static void riscv_console_probe(void)</p><p class=MsoNormal>         ctx->set_reg = riscv_console_set_reg_8;</p><p class=MsoNormal>       }</p><p class=MsoNormal> </p><p class=MsoNormal>-      if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "ns16750")) {</p><p class=MsoNormal>+      if (fdt_stringlist_contains(compat, compat_len, "ns16750")) {</p><p class=MsoNormal>         ctx->has_precision_clock_synthesizer = true;</p><p class=MsoNormal>       }</p><p class=MsoNormal> </p><p class=MsoNormal>@@ -243,7 +239,7 @@ static void riscv_console_probe(void)</p><p class=MsoNormal> #endif</p><p class=MsoNormal> </p><p class=MsoNormal> #if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0</p><p class=MsoNormal>-    if (RISCV_CONSOLE_IS_COMPATIBLE(compat, compat_len, "sifive,uart0")) {</p><p class=MsoNormal>+    if (fdt_stringlist_contains(compat, compat_len, "sifive,uart0")) {</p><p class=MsoNormal>       fe310_uart_context *ctx;</p><p class=MsoNormal> </p><p class=MsoNormal>       ctx = &fe310_uart_instance;</p><p class=MsoNormal>-- </p><p class=MsoNormal>2.34.1</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>