diff mbox series

[1/5] riscv: lib: Add a default implementation of board_fdt_blob_setup

Message ID 20250227144734.61458-2-ziyao@disroot.org
State Superseded
Delegated to: Andes
Headers show
Series Simplifiy retrieving FDT from SBI in S-Mode | expand

Commit Message

Yao Zi Feb. 27, 2025, 2:47 p.m. UTC
It's common for S-Mode U-Boot to retrieve a FDT blob along with taking
control from SBI firmware. Add a weak version of board_fdt_blob_setup to
make use of it by default and avoid copy-pasting similar functions among
boards.

Signed-off-by: Yao Zi <ziyao@disroot.org>
---
 arch/riscv/lib/Makefile |  1 +
 arch/riscv/lib/board.c  | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 arch/riscv/lib/board.c

Comments

Leo Liang March 6, 2025, 4:05 a.m. UTC | #1
On Thu, Feb 27, 2025 at 02:47:29PM +0000, Yao Zi wrote:
> It's common for S-Mode U-Boot to retrieve a FDT blob along with taking
> control from SBI firmware. Add a weak version of board_fdt_blob_setup to
> make use of it by default and avoid copy-pasting similar functions among
> boards.
> 
> Signed-off-by: Yao Zi <ziyao@disroot.org>
> ---
>  arch/riscv/lib/Makefile |  1 +
>  arch/riscv/lib/board.c  | 19 +++++++++++++++++++
>  2 files changed, 20 insertions(+)
>  create mode 100644 arch/riscv/lib/board.c

Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
diff mbox series

Patch

diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile
index 268116f3757..b33f9c646dd 100644
--- a/arch/riscv/lib/Makefile
+++ b/arch/riscv/lib/Makefile
@@ -27,6 +27,7 @@  obj-$(CONFIG_$(XPL_)SMP) += smp.o
 obj-$(CONFIG_XPL_BUILD)	+= spl.o
 obj-y   += fdt_fixup.o
 obj-$(CONFIG_$(SPL)CMD_BDI) += bdinfo.o
+obj-$(CONFIG_OF_BOARD) += board.o
 
 # For building EFI apps
 CFLAGS_NON_EFI := -fstack-protector-strong
diff --git a/arch/riscv/lib/board.c b/arch/riscv/lib/board.c
new file mode 100644
index 00000000000..77bc174b047
--- /dev/null
+++ b/arch/riscv/lib/board.c
@@ -0,0 +1,19 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * RISC-V-specific handling of firmware FDT
+ */
+
+#include <asm/global_data.h>
+#include <linux/errno.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+__weak int board_fdt_blob_setup(void **fdtp)
+{
+	if (!gd->arch.firmware_fdt_addr)
+		return -EEXIST;
+
+	*fdtp = (void *)gd->arch.firmware_fdt_addr;
+
+	return 0;
+}