<div dir="ltr">Hi Padmarao,<div>I am working on a RISC-V bsp variant for the Kendryte K210 and I am also using an included DTB. For my k210 bsp, I changed riscv/shared/start/start.S to set the address of the DTB array before calling bsp_fdt_copy. If we change start.S to handle the following three cases, we would not have to change the bsp_fdt_copy function. The three cases are:</div><div>- no FDT, I assume griscv bsp</div><div>- uboot - a0 in contains the address of the u-boot loaded DTB</div><div>- polarfire, k210 and others - set a0 to the address of the included DTB array</div><div>I think it's better to keep this function generic and not have to conditionally ignore the input parameter.</div><div><br></div><div>Thanks,<br></div><div>Alan</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Sep 8, 2022 at 11:44 AM Padmarao Begari <<a href="mailto:padmarao.begari@microchip.com">padmarao.begari@microchip.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">If the bsp is integrated and supported a device tree<br>
blob(dtb) then use dtb instead of using it from the U-Boot.<br>
---<br>
 bsps/shared/start/bsp-fdt.c | 11 ++++++++++-<br>
 1 file changed, 10 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/bsps/shared/start/bsp-fdt.c b/bsps/shared/start/bsp-fdt.c<br>
index 75a1ea41c9..7e1a698896 100644<br>
--- a/bsps/shared/start/bsp-fdt.c<br>
+++ b/bsps/shared/start/bsp-fdt.c<br>
@@ -32,6 +32,10 @@<br>
 #include <bsp/fdt.h><br>
 #include <bsp/linker-symbols.h><br>
<br>
+#ifdef BSP_DTB_IS_SUPPORTED<br>
+#include BSP_DTB_HEADER_PATH<br>
+#endif<br>
+<br>
 #ifndef BSP_FDT_IS_SUPPORTED<br>
 #warning "BSP FDT support indication not defined"<br>
 #endif<br>
@@ -51,7 +55,12 @@ bsp_fdt_blob[BSP_FDT_BLOB_SIZE_MAX / sizeof(uint32_t)];<br>
<br>
 void bsp_fdt_copy(const void *src)<br>
 {<br>
+#ifdef BSP_DTB_IS_SUPPORTED<br>
+const volatile uint32_t *s = (const uint32_t *) system_dtb;<br>
+#else<br>
   const volatile uint32_t *s = (const uint32_t *) src;<br>
+#endif<br>
+<br>
 #ifdef BSP_FDT_BLOB_COPY_TO_READ_ONLY_LOAD_AREA<br>
   uint32_t *d = (uint32_t *) ((uintptr_t) &bsp_fdt_blob[0]<br>
     - (uintptr_t) bsp_section_rodata_begin<br>
@@ -61,7 +70,7 @@ void bsp_fdt_copy(const void *src)<br>
 #endif<br>
<br>
   if (s != d) {<br>
-    size_t m = MIN(sizeof(bsp_fdt_blob), fdt_totalsize(src));<br>
+    size_t m = MIN(sizeof(bsp_fdt_blob), fdt_totalsize(s));<br>
     size_t aligned_size = roundup2(m, CPU_CACHE_LINE_BYTES);<br>
     size_t n = (m + sizeof(*d) - 1) / sizeof(*d);<br>
     size_t i;<br>
-- <br>
2.25.1<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div>