diff mbox series

[2/5] firmware: Add common FW_FDT_PATH compile-time option

Message ID 20201015081211.1956554-3-anup.patel@wdc.com
State Superseded
Headers show
Series Builtin DTB improvements | expand

Commit Message

Anup Patel Oct. 15, 2020, 8:12 a.m. UTC
Currently, only FW_PAYLOAD has mechanism to embed external FDT
using FW_PAYLOAD_FDT_PATH compile-time option.

This patch adds a commong FW_FDT_PATH compile-time option to
embed external FDT for all OpenSBI firmwares (i.e FW_JUMP,
FW_PAYLOAD, and FW_DYNAMIC).

Signed-off-by: Anup Patel <anup.patel@wdc.com>
---
 docs/firmware/fw.md       | 14 +++++++++-----
 firmware/external_deps.mk |  4 ++++
 firmware/fw_base.S        | 16 ++++++++++++++++
 firmware/objects.mk       |  7 +++++++
 4 files changed, 36 insertions(+), 5 deletions(-)

Comments

Atish Patra Oct. 16, 2020, 11:08 p.m. UTC | #1
On Thu, Oct 15, 2020 at 1:12 AM Anup Patel <anup.patel@wdc.com> wrote:
>
> Currently, only FW_PAYLOAD has mechanism to embed external FDT
> using FW_PAYLOAD_FDT_PATH compile-time option.
>
> This patch adds a commong FW_FDT_PATH compile-time option to
> embed external FDT for all OpenSBI firmwares (i.e FW_JUMP,
> FW_PAYLOAD, and FW_DYNAMIC).
>

/s/commong/common

> Signed-off-by: Anup Patel <anup.patel@wdc.com>
> ---
>  docs/firmware/fw.md       | 14 +++++++++-----
>  firmware/external_deps.mk |  4 ++++
>  firmware/fw_base.S        | 16 ++++++++++++++++
>  firmware/objects.mk       |  7 +++++++
>  4 files changed, 36 insertions(+), 5 deletions(-)
>
> diff --git a/docs/firmware/fw.md b/docs/firmware/fw.md
> index 4133c23..1efdadf 100644
> --- a/docs/firmware/fw.md
> +++ b/docs/firmware/fw.md
> @@ -51,11 +51,15 @@ case, a *FW_PAYLOAD* firmware allows embedding a flattened device tree in the
>  Firmware Configuration and Compilation
>  --------------------------------------
>
> -All firmware types mandate the definition of the following compile time
> -configuration parameter.
> -
> -* **FW_TEXT_ADDR** - Defines the address at which the previous booting stage
> -  loads OpenSBI firmware.
> +All firmware types support the following common compile time configuration
> +parameters:
> +
> +* **FW_TEXT_ADDR** - Defines the execution address of the OpenSBI firmware.
> +  This configuration parameter is mandatory.
> +* **FW_FDT_PATH** - Path to an external flattened device tree binary file to
> +  be embedded in the *.rodata* section of the final firmware. If this option
> +  is not provided then the firmware will expect the FDT to be passed as an
> +  argument by the prior booting stage.
>
>  Additionally, each firmware type as a set of type specific configuration
>  parameters. Detailed information for each firmware type can be found in the
> diff --git a/firmware/external_deps.mk b/firmware/external_deps.mk
> index 2b8f9f6..f43ac06 100644
> --- a/firmware/external_deps.mk
> +++ b/firmware/external_deps.mk
> @@ -7,5 +7,9 @@
>  #   Anup Patel <anup.patel@wdc.com>
>  #
>
> +$(platform_build_dir)/firmware/fw_dynamic.o: $(FW_FDT_PATH)
> +$(platform_build_dir)/firmware/fw_jump.o: $(FW_FDT_PATH)
> +$(platform_build_dir)/firmware/fw_payload.o: $(FW_FDT_PATH)
> +
>  $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_PATH_FINAL)
>  $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_FDT_PATH)
> diff --git a/firmware/fw_base.S b/firmware/fw_base.S
> index 0271d9a..95197da 100644
> --- a/firmware/fw_base.S
> +++ b/firmware/fw_base.S
> @@ -182,6 +182,11 @@ _bss_zero:
>         call    fw_save_info
>         MOV_5R  a0, s0, a1, s1, a2, s2, a3, s3, a4, s4
>
> +#ifdef FW_FDT_PATH
> +       /* Override previous arg1 */
> +       la      a1, fw_fdt_bin
> +#endif
> +
>         /* Override previous arg1 */
>         MOV_3R  s0, a0, s1, a1, s2, a2
>         call    fw_prev_arg1
> @@ -668,3 +673,14 @@ _reset_regs:
>         csrw CSR_MSCRATCH, 0
>
>         ret
> +
> +#ifdef FW_FDT_PATH
> +       .section .rodata
> +       .align 4
> +       .globl fw_fdt_bin
> +fw_fdt_bin:
> +       .incbin FW_FDT_PATH
> +#ifdef FW_FDT_PADDING
> +       .fill FW_FDT_PADDING, 1, 0
> +#endif
> +#endif
> diff --git a/firmware/objects.mk b/firmware/objects.mk
> index c980362..2eea54c 100644
> --- a/firmware/objects.mk
> +++ b/firmware/objects.mk
> @@ -17,6 +17,13 @@ ifdef FW_TEXT_START
>  firmware-genflags-y += -DFW_TEXT_START=$(FW_TEXT_START)
>  endif
>
> +ifdef FW_FDT_PATH
> +firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\"
> +ifdef FW_FDT_PADDING
> +firmware-genflags-y += -DFW_FDT_PADDING=$(FW_FDT_PADDING)
> +endif
> +endif
> +
>  firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
>
>  firmware-bins-$(FW_JUMP) += fw_jump.bin
> --
> 2.25.1
>
>
> --
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi

I think we should document FW_FDT_PADDING as well.

Other than that, looks good.

Reviewed-by: Atish Patra <atish.patra@wdc.com>
Anup Patel Oct. 18, 2020, 4:06 a.m. UTC | #2
> -----Original Message-----
> From: Atish Patra <atishp@atishpatra.org>
> Sent: 17 October 2020 04:39
> To: Anup Patel <Anup.Patel@wdc.com>
> Cc: Atish Patra <Atish.Patra@wdc.com>; Alistair Francis
> <Alistair.Francis@wdc.com>; Anup Patel <anup@brainfault.org>; Damien Le
> Moal <Damien.LeMoal@wdc.com>; OpenSBI <opensbi@lists.infradead.org>
> Subject: Re: [PATCH 2/5] firmware: Add common FW_FDT_PATH compile-
> time option
> 
> On Thu, Oct 15, 2020 at 1:12 AM Anup Patel <anup.patel@wdc.com> wrote:
> >
> > Currently, only FW_PAYLOAD has mechanism to embed external FDT using
> > FW_PAYLOAD_FDT_PATH compile-time option.
> >
> > This patch adds a commong FW_FDT_PATH compile-time option to embed
> > external FDT for all OpenSBI firmwares (i.e FW_JUMP, FW_PAYLOAD, and
> > FW_DYNAMIC).
> >
> 
> /s/commong/common

Okay, will update.

> 
> > Signed-off-by: Anup Patel <anup.patel@wdc.com>
> > ---
> >  docs/firmware/fw.md       | 14 +++++++++-----
> >  firmware/external_deps.mk |  4 ++++
> >  firmware/fw_base.S        | 16 ++++++++++++++++
> >  firmware/objects.mk       |  7 +++++++
> >  4 files changed, 36 insertions(+), 5 deletions(-)
> >
> > diff --git a/docs/firmware/fw.md b/docs/firmware/fw.md index
> > 4133c23..1efdadf 100644
> > --- a/docs/firmware/fw.md
> > +++ b/docs/firmware/fw.md
> > @@ -51,11 +51,15 @@ case, a *FW_PAYLOAD* firmware allows
> embedding a
> > flattened device tree in the  Firmware Configuration and Compilation
> >  --------------------------------------
> >
> > -All firmware types mandate the definition of the following compile
> > time -configuration parameter.
> > -
> > -* **FW_TEXT_ADDR** - Defines the address at which the previous
> > booting stage
> > -  loads OpenSBI firmware.
> > +All firmware types support the following common compile time
> > +configuration
> > +parameters:
> > +
> > +* **FW_TEXT_ADDR** - Defines the execution address of the OpenSBI
> firmware.
> > +  This configuration parameter is mandatory.
> > +* **FW_FDT_PATH** - Path to an external flattened device tree binary
> > +file to
> > +  be embedded in the *.rodata* section of the final firmware. If this
> > +option
> > +  is not provided then the firmware will expect the FDT to be passed
> > +as an
> > +  argument by the prior booting stage.
> >
> >  Additionally, each firmware type as a set of type specific
> > configuration  parameters. Detailed information for each firmware type
> > can be found in the diff --git a/firmware/external_deps.mk
> > b/firmware/external_deps.mk index 2b8f9f6..f43ac06 100644
> > --- a/firmware/external_deps.mk
> > +++ b/firmware/external_deps.mk
> > @@ -7,5 +7,9 @@
> >  #   Anup Patel <anup.patel@wdc.com>
> >  #
> >
> > +$(platform_build_dir)/firmware/fw_dynamic.o: $(FW_FDT_PATH)
> > +$(platform_build_dir)/firmware/fw_jump.o: $(FW_FDT_PATH)
> > +$(platform_build_dir)/firmware/fw_payload.o: $(FW_FDT_PATH)
> > +
> >  $(platform_build_dir)/firmware/fw_payload.o:
> $(FW_PAYLOAD_PATH_FINAL)
> >  $(platform_build_dir)/firmware/fw_payload.o:
> $(FW_PAYLOAD_FDT_PATH)
> > diff --git a/firmware/fw_base.S b/firmware/fw_base.S index
> > 0271d9a..95197da 100644
> > --- a/firmware/fw_base.S
> > +++ b/firmware/fw_base.S
> > @@ -182,6 +182,11 @@ _bss_zero:
> >         call    fw_save_info
> >         MOV_5R  a0, s0, a1, s1, a2, s2, a3, s3, a4, s4
> >
> > +#ifdef FW_FDT_PATH
> > +       /* Override previous arg1 */
> > +       la      a1, fw_fdt_bin
> > +#endif
> > +
> >         /* Override previous arg1 */
> >         MOV_3R  s0, a0, s1, a1, s2, a2
> >         call    fw_prev_arg1
> > @@ -668,3 +673,14 @@ _reset_regs:
> >         csrw CSR_MSCRATCH, 0
> >
> >         ret
> > +
> > +#ifdef FW_FDT_PATH
> > +       .section .rodata
> > +       .align 4
> > +       .globl fw_fdt_bin
> > +fw_fdt_bin:
> > +       .incbin FW_FDT_PATH
> > +#ifdef FW_FDT_PADDING
> > +       .fill FW_FDT_PADDING, 1, 0
> > +#endif
> > +#endif
> > diff --git a/firmware/objects.mk b/firmware/objects.mk index
> > c980362..2eea54c 100644
> > --- a/firmware/objects.mk
> > +++ b/firmware/objects.mk
> > @@ -17,6 +17,13 @@ ifdef FW_TEXT_START  firmware-genflags-y +=
> > -DFW_TEXT_START=$(FW_TEXT_START)  endif
> >
> > +ifdef FW_FDT_PATH
> > +firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\"
> > +ifdef FW_FDT_PADDING
> > +firmware-genflags-y += -DFW_FDT_PADDING=$(FW_FDT_PADDING)
> > +endif
> > +endif
> > +
> >  firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
> >
> >  firmware-bins-$(FW_JUMP) += fw_jump.bin
> > --
> > 2.25.1
> >
> >
> > --
> > opensbi mailing list
> > opensbi@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/opensbi
> 
> I think we should document FW_FDT_PADDING as well.

Sure, I will add documentation for FW_FDT_PADDING.

> 
> Other than that, looks good.
> 
> Reviewed-by: Atish Patra <atish.patra@wdc.com>
> 
> 
> --
> Regards,
> Atish

Regards,
Anup
diff mbox series

Patch

diff --git a/docs/firmware/fw.md b/docs/firmware/fw.md
index 4133c23..1efdadf 100644
--- a/docs/firmware/fw.md
+++ b/docs/firmware/fw.md
@@ -51,11 +51,15 @@  case, a *FW_PAYLOAD* firmware allows embedding a flattened device tree in the
 Firmware Configuration and Compilation
 --------------------------------------
 
-All firmware types mandate the definition of the following compile time
-configuration parameter.
-
-* **FW_TEXT_ADDR** - Defines the address at which the previous booting stage
-  loads OpenSBI firmware.
+All firmware types support the following common compile time configuration
+parameters:
+
+* **FW_TEXT_ADDR** - Defines the execution address of the OpenSBI firmware.
+  This configuration parameter is mandatory.
+* **FW_FDT_PATH** - Path to an external flattened device tree binary file to
+  be embedded in the *.rodata* section of the final firmware. If this option
+  is not provided then the firmware will expect the FDT to be passed as an
+  argument by the prior booting stage.
 
 Additionally, each firmware type as a set of type specific configuration
 parameters. Detailed information for each firmware type can be found in the
diff --git a/firmware/external_deps.mk b/firmware/external_deps.mk
index 2b8f9f6..f43ac06 100644
--- a/firmware/external_deps.mk
+++ b/firmware/external_deps.mk
@@ -7,5 +7,9 @@ 
 #   Anup Patel <anup.patel@wdc.com>
 #
 
+$(platform_build_dir)/firmware/fw_dynamic.o: $(FW_FDT_PATH)
+$(platform_build_dir)/firmware/fw_jump.o: $(FW_FDT_PATH)
+$(platform_build_dir)/firmware/fw_payload.o: $(FW_FDT_PATH)
+
 $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_PATH_FINAL)
 $(platform_build_dir)/firmware/fw_payload.o: $(FW_PAYLOAD_FDT_PATH)
diff --git a/firmware/fw_base.S b/firmware/fw_base.S
index 0271d9a..95197da 100644
--- a/firmware/fw_base.S
+++ b/firmware/fw_base.S
@@ -182,6 +182,11 @@  _bss_zero:
 	call	fw_save_info
 	MOV_5R	a0, s0, a1, s1, a2, s2, a3, s3, a4, s4
 
+#ifdef FW_FDT_PATH
+	/* Override previous arg1 */
+	la	a1, fw_fdt_bin
+#endif
+
 	/* Override previous arg1 */
 	MOV_3R	s0, a0, s1, a1, s2, a2
 	call	fw_prev_arg1
@@ -668,3 +673,14 @@  _reset_regs:
 	csrw CSR_MSCRATCH, 0
 
 	ret
+
+#ifdef FW_FDT_PATH
+	.section .rodata
+	.align 4
+	.globl fw_fdt_bin
+fw_fdt_bin:
+	.incbin FW_FDT_PATH
+#ifdef FW_FDT_PADDING
+	.fill FW_FDT_PADDING, 1, 0
+#endif
+#endif
diff --git a/firmware/objects.mk b/firmware/objects.mk
index c980362..2eea54c 100644
--- a/firmware/objects.mk
+++ b/firmware/objects.mk
@@ -17,6 +17,13 @@  ifdef FW_TEXT_START
 firmware-genflags-y += -DFW_TEXT_START=$(FW_TEXT_START)
 endif
 
+ifdef FW_FDT_PATH
+firmware-genflags-y += -DFW_FDT_PATH=\"$(FW_FDT_PATH)\"
+ifdef FW_FDT_PADDING
+firmware-genflags-y += -DFW_FDT_PADDING=$(FW_FDT_PADDING)
+endif
+endif
+
 firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
 
 firmware-bins-$(FW_JUMP) += fw_jump.bin