diff mbox series

[2/4] firmware: Add relocatable FW_PAYLOAD_FDT_ADDR

Message ID IA1PR20MB49539A729C9350C1714D7DA4BB422@IA1PR20MB4953.namprd20.prod.outlook.com
State Superseded
Headers show
Series Add relocatable address support for jump and payload firmware | expand

Commit Message

Inochi Amaoto Feb. 2, 2024, 4:05 a.m. UTC
The fw_payload.bin has the same issue as described in commit 80129c2.
But only FW_PAYLOAD_FDT_ADDR is affected.

Add FW_PAYLOAD_FDT_OFFSET to identify relocatable payload fdt address.

Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
---
 firmware/fw_payload.S | 4 ++++
 firmware/objects.mk   | 6 ++++++
 2 files changed, 10 insertions(+)

Comments

Anup Patel Feb. 23, 2024, 5:01 a.m. UTC | #1
On Fri, Feb 2, 2024 at 9:35 AM Inochi Amaoto <inochiama@outlook.com> wrote:
>
> The fw_payload.bin has the same issue as described in commit 80129c2.

Can't find commit 80129c2 in upstream OpenSBI. Improve commit description.

> But only FW_PAYLOAD_FDT_ADDR is affected.
>
> Add FW_PAYLOAD_FDT_OFFSET to identify relocatable payload fdt address.
>
> Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
> ---
>  firmware/fw_payload.S | 4 ++++
>  firmware/objects.mk   | 6 ++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/firmware/fw_payload.S b/firmware/fw_payload.S
> index c53a3bb..3c8433e 100644
> --- a/firmware/fw_payload.S
> +++ b/firmware/fw_payload.S
> @@ -46,6 +46,10 @@ fw_save_info:
>  fw_next_arg1:
>  #ifdef FW_PAYLOAD_FDT_ADDR
>         li      a0, FW_PAYLOAD_FDT_ADDR
> +#elif defined(FW_PAYLOAD_FDT_OFFSET)
> +       lla     a0, _fw_start
> +       li      a1, FW_PAYLOAD_FDT_OFFSET
> +       add     a0, a0, a1
>  #else
>         add     a0, a1, zero
>  #endif
> diff --git a/firmware/objects.mk b/firmware/objects.mk
> index 248706d..a761b9e 100644
> --- a/firmware/objects.mk
> +++ b/firmware/objects.mk
> @@ -42,6 +42,9 @@ ifeq ($(FW_PIC),n)
>    ifndef FW_JUMP_FDT_ADDR
>      FW_JUMP_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_JUMP_FDT_OFFSET))))
>    endif
> +  ifndef FW_PAYLOAD_FDT_ADDR
> +    FW_PAYLOAD_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_PAYLOAD_FDT_OFFSET))))
> +  endif
>  endif
>
>  firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
> @@ -74,6 +77,9 @@ ifdef FW_PAYLOAD_ALIGN
>  firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_ALIGN=$(FW_PAYLOAD_ALIGN)
>  endif
>
> +ifdef FW_PAYLOAD_FDT_OFFSET
> +firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_OFFSET=$(FW_PAYLOAD_FDT_OFFSET)
> +endif
>  ifdef FW_PAYLOAD_FDT_ADDR
>  firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_ADDR=$(FW_PAYLOAD_FDT_ADDR)
>  endif
> --
> 2.43.0
>

Regards,
Anup
Inochi Amaoto Feb. 23, 2024, 7:23 a.m. UTC | #2
On Fri, Feb 23, 2024 at 10:31:32AM +0530, Anup Patel wrote:
> On Fri, Feb 2, 2024 at 9:35 AM Inochi Amaoto <inochiama@outlook.com> wrote:
> >
> > The fw_payload.bin has the same issue as described in commit 80129c2.
> 
> Can't find commit 80129c2 in upstream OpenSBI. Improve commit description.
> 

In fact, commit 80129c2 is patch 1. I will fix this.

> > But only FW_PAYLOAD_FDT_ADDR is affected.
> >
> > Add FW_PAYLOAD_FDT_OFFSET to identify relocatable payload fdt address.
> >
> > Signed-off-by: Inochi Amaoto <inochiama@outlook.com>
> > ---
> >  firmware/fw_payload.S | 4 ++++
> >  firmware/objects.mk   | 6 ++++++
> >  2 files changed, 10 insertions(+)
> >
> > diff --git a/firmware/fw_payload.S b/firmware/fw_payload.S
> > index c53a3bb..3c8433e 100644
> > --- a/firmware/fw_payload.S
> > +++ b/firmware/fw_payload.S
> > @@ -46,6 +46,10 @@ fw_save_info:
> >  fw_next_arg1:
> >  #ifdef FW_PAYLOAD_FDT_ADDR
> >         li      a0, FW_PAYLOAD_FDT_ADDR
> > +#elif defined(FW_PAYLOAD_FDT_OFFSET)
> > +       lla     a0, _fw_start
> > +       li      a1, FW_PAYLOAD_FDT_OFFSET
> > +       add     a0, a0, a1
> >  #else
> >         add     a0, a1, zero
> >  #endif
> > diff --git a/firmware/objects.mk b/firmware/objects.mk
> > index 248706d..a761b9e 100644
> > --- a/firmware/objects.mk
> > +++ b/firmware/objects.mk
> > @@ -42,6 +42,9 @@ ifeq ($(FW_PIC),n)
> >    ifndef FW_JUMP_FDT_ADDR
> >      FW_JUMP_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_JUMP_FDT_OFFSET))))
> >    endif
> > +  ifndef FW_PAYLOAD_FDT_ADDR
> > +    FW_PAYLOAD_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_PAYLOAD_FDT_OFFSET))))
> > +  endif
> >  endif
> >
> >  firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
> > @@ -74,6 +77,9 @@ ifdef FW_PAYLOAD_ALIGN
> >  firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_ALIGN=$(FW_PAYLOAD_ALIGN)
> >  endif
> >
> > +ifdef FW_PAYLOAD_FDT_OFFSET
> > +firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_OFFSET=$(FW_PAYLOAD_FDT_OFFSET)
> > +endif
> >  ifdef FW_PAYLOAD_FDT_ADDR
> >  firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_ADDR=$(FW_PAYLOAD_FDT_ADDR)
> >  endif
> > --
> > 2.43.0
> >
> 
> Regards,
> Anup
diff mbox series

Patch

diff --git a/firmware/fw_payload.S b/firmware/fw_payload.S
index c53a3bb..3c8433e 100644
--- a/firmware/fw_payload.S
+++ b/firmware/fw_payload.S
@@ -46,6 +46,10 @@  fw_save_info:
 fw_next_arg1:
 #ifdef FW_PAYLOAD_FDT_ADDR
 	li	a0, FW_PAYLOAD_FDT_ADDR
+#elif defined(FW_PAYLOAD_FDT_OFFSET)
+	lla	a0, _fw_start
+	li	a1, FW_PAYLOAD_FDT_OFFSET
+	add	a0, a0, a1
 #else
 	add	a0, a1, zero
 #endif
diff --git a/firmware/objects.mk b/firmware/objects.mk
index 248706d..a761b9e 100644
--- a/firmware/objects.mk
+++ b/firmware/objects.mk
@@ -42,6 +42,9 @@  ifeq ($(FW_PIC),n)
   ifndef FW_JUMP_FDT_ADDR
     FW_JUMP_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_JUMP_FDT_OFFSET))))
   endif
+  ifndef FW_PAYLOAD_FDT_ADDR
+    FW_PAYLOAD_FDT_ADDR=$(shell printf "0x%X" $$(($(FW_TEXT_START) + $(FW_PAYLOAD_FDT_OFFSET))))
+  endif
 endif
 
 firmware-bins-$(FW_DYNAMIC) += fw_dynamic.bin
@@ -74,6 +77,9 @@  ifdef FW_PAYLOAD_ALIGN
 firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_ALIGN=$(FW_PAYLOAD_ALIGN)
 endif
 
+ifdef FW_PAYLOAD_FDT_OFFSET
+firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_OFFSET=$(FW_PAYLOAD_FDT_OFFSET)
+endif
 ifdef FW_PAYLOAD_FDT_ADDR
 firmware-genflags-$(FW_PAYLOAD) += -DFW_PAYLOAD_FDT_ADDR=$(FW_PAYLOAD_FDT_ADDR)
 endif