All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware
@ 2020-09-30 16:39 Andre Przywara
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

U-Boot on QEMU-arm64 can be used in two configurations: Loaded directly
via QEMU's -bios option, or as a non-secure payload (BL33) via
ARM Trusted Firmware-A (TF-A).
In the latter case we need to define CONFIG_TFABOOT, to accommodate
the first flash bank being secure only, and manually set SYS_TEXT_BASE
to the address configured in TF-A (currently 0x60000000).

To avoid this poorly documented adventure, we enable a position
independent build, and also let the flash regions be always detected
through the DTB. This results in a single build to work under both
scenarios, and also allows to move the BL33 load address in TF-A to
something lower in the future.

For this to work, we have to first make PIE work when booted from ROM.
While writing to ROM should not hurt, it might trigger CFI flash
sequences, and indeed crashes for me in the middle of the fixup routine.
This is covered by patch 2/6, which skips the whole fixup routine if the
offset is actually 0 (as it is in our case). To support older toolchains
(including the popular Linaro builds), we need to ensure we do the
static RELA fixups, even with PIE enabled (patch 1/6).
Also we have to decouple the relative initial stack pointer from the
PIE option, as we always need to use the fixed version, pointing to
RAM (patch 3/6).
Patch 4/6 drops the hard-coded flash address, instead U-Boot can already
read all required information from QEMU's DTB.
Patch 5/6 is a cleanup, while the last patch enables the PIE build.

With this series the very same u-boot.bin file works when directly loaded
from the QEMU command line (-bios), but also when embedded into TF-A's
fip.bin, removing the need for case-specific build options.

Please have a look!

Cheers,
Andre

Changelog v1 .. v2:
- Always do STATIC_RELA static fixups (new first patch)
- Reword commit messages for 3/6 and 5/6

Andre Przywara (5):
  arm64: PIE: Skip fixups if distance is zero
  arm64: PIE: Allow fixed stack pointer
  qemu-arm: Remove need to specify flash banks
  qemu: Drop ARCH_SUPPORT_TFABOOT
  qemu/arm64: Enable POSITION_INDEPENDENT

 arch/arm/Kconfig             | 4 ++--
 arch/arm/cpu/armv8/start.S   | 3 ++-
 configs/qemu_arm64_defconfig | 1 +
 include/configs/qemu-arm.h   | 8 +-------
 4 files changed, 6 insertions(+), 10 deletions(-)

-- 
2.17.5


*** BLURB HERE ***

Andre Przywara (6):
  arm64: PIE: Do not skip static relocation
  arm64: PIE: Skip fixups if distance is zero
  arm64: PIE: Allow fixed stack pointer
  qemu-arm: Remove need to specify flash banks
  qemu-arm: Drop ARCH_SUPPORT_TFABOOT
  qemu-arm64: Enable POSITION_INDEPENDENT

 arch/arm/Kconfig             | 6 +++---
 arch/arm/cpu/armv8/start.S   | 3 ++-
 configs/qemu_arm64_defconfig | 1 +
 include/configs/qemu-arm.h   | 8 +-------
 4 files changed, 7 insertions(+), 11 deletions(-)

-- 
2.17.5

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/6] arm64: PIE: Do not skip static relocation
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-09-30 17:11   ` Stephen Warren
                     ` (2 more replies)
  2020-09-30 16:39 ` [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero Andre Przywara
                   ` (5 subsequent siblings)
  6 siblings, 3 replies; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

When we build an arm64 target and enable POSITION_INDEPENDENT, we were
skipping our build-time dynamic relocation fixup routine (STATIC_RELA).

This was probably done because we didn't need it in this case, as the
PIE fixup routine in start.S would take care of that at runtime.

However when we now skip this routine (upon detecting that the fixup
offset is 0), this might lead to uninitialised pointers.

Remove the exception, so that we always do the build-time relocation.

NOTE: GNU binutils starting with v2.27.1 do this build-time relocation
automatically, to be in-line with other architecures. So on newer
toolchains our manual fixup is actually not needed. It doesn't hurt to
have it, though, so that we keep compatibility with the popular Linaro
toolchains, which lack this feature.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 arch/arm/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 80702c23d34..b6fb276b6f8 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -76,7 +76,7 @@ config GIC_V3_ITS
 
 config STATIC_RELA
 	bool
-	default y if ARM64 && !POSITION_INDEPENDENT
+	default y if ARM64
 
 config DMA_ADDR_T_64BIT
 	bool
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-10-09 13:02   ` Tom Rini
  2020-09-30 16:39 ` [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer Andre Przywara
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

When the actual offset between link and runtime address is zero, there
is no need for patching up U-Boot early when running with
CONFIG_POSITION_INDEPENDENT.

Skip the whole routine when the distance is 0.

This helps when U-Boot is loaded into ROM, or in otherwise sensitive
memory locations.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/cpu/armv8/start.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm/cpu/armv8/start.S b/arch/arm/cpu/armv8/start.S
index 002698b501c..02b952bb328 100644
--- a/arch/arm/cpu/armv8/start.S
+++ b/arch/arm/cpu/armv8/start.S
@@ -66,7 +66,8 @@ save_boot_params_ret:
 pie_fixup:
 	adr	x0, _start		/* x0 <- Runtime value of _start */
 	ldr	x1, _TEXT_BASE		/* x1 <- Linked value of _start */
-	sub	x9, x0, x1		/* x9 <- Run-vs-link offset */
+	subs	x9, x0, x1		/* x9 <- Run-vs-link offset */
+	beq	pie_fixup_done
 	adr	x2, __rel_dyn_start	/* x2 <- Runtime &__rel_dyn_start */
 	adr	x3, __rel_dyn_end	/* x3 <- Runtime &__rel_dyn_end */
 pie_fix_loop:
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
  2020-09-30 16:39 ` [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-10-09 13:02   ` Tom Rini
  2020-09-30 16:39 ` [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks Andre Przywara
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

Currently selecting CONFIG_POSITION_INDEPENDENT also forces us to use an
initial stack pointer relative to the beginning of the BSS section.
This makes some sense, because this should be writable memory anyway.

However the BSS section is not cleared or used until later in the
setup process (after relocation), so memory nearby might not be
available early enough to host the initial stack. This is an issue if
U-Boot is loaded from (Flash-)ROM, for instance.

Allow CONFIG_INIT_SP_RELATIVE to be turned off by a board's config, to
be able to select a fixed stack pointer, for instance in known good
DRAM.

This will help QEMU utilising PIE, when it's loaded to (Flash-)ROM.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index b6fb276b6f8..486141478ce 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -12,7 +12,6 @@ config ARM64
 if ARM64
 config POSITION_INDEPENDENT
 	bool "Generate position-independent pre-relocation code"
-	select INIT_SP_RELATIVE
 	help
 	  U-Boot expects to be linked to a specific hard-coded address, and to
 	  be loaded to and run from that address. This option lifts that
@@ -23,6 +22,7 @@ config POSITION_INDEPENDENT
 
 config INIT_SP_RELATIVE
 	bool "Specify the early stack pointer relative to the .bss section"
+	default y if POSITION_INDEPENDENT
 	help
 	  U-Boot typically uses a hard-coded value for the stack pointer
 	  before relocation. Enable this option to instead calculate the
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
                   ` (2 preceding siblings ...)
  2020-09-30 16:39 ` [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-10-09 13:02   ` Tom Rini
  2020-09-30 16:39 ` [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT Andre Przywara
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

Currently we hard-code the number and initial addresses of QEMU's flash
banks, even though our code is perfectly able to gather the same
information from the DTB provided by QEMU.
This is especially annoying, since we have two slightly different
U-Boot configurations ("bare-metal" vs. loaded via Arm Trusted
Firmware), which need to be selected at build time.

Drop the two hard coded alternatives, and use
CONFIG_SYS_MAX_FLASH_BANKS_DETECT instead, which relies on the DTB to
figure out the actual flash configuration at runtime.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 include/configs/qemu-arm.h | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/include/configs/qemu-arm.h b/include/configs/qemu-arm.h
index bc8b7c5c123..273fa1a7d7b 100644
--- a/include/configs/qemu-arm.h
+++ b/include/configs/qemu-arm.h
@@ -45,13 +45,7 @@
 #define CONFIG_SYS_CBSIZE 512
 
 #define CONFIG_SYS_MONITOR_BASE		CONFIG_SYS_TEXT_BASE
-#ifdef CONFIG_TFABOOT
-#define CONFIG_SYS_FLASH_BASE		0x4000000
-#define CONFIG_SYS_MAX_FLASH_BANKS	1
-#else
-#define CONFIG_SYS_FLASH_BASE		0x0
-#define CONFIG_SYS_MAX_FLASH_BANKS	2
-#endif
+#define CONFIG_SYS_MAX_FLASH_BANKS_DETECT	2
 #define CONFIG_SYS_MAX_FLASH_SECT	256 /* Sector: 256K, Bank: 64M */
 #define CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS
 
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
                   ` (3 preceding siblings ...)
  2020-09-30 16:39 ` [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-09-30 17:40   ` Tom Rini
  2020-10-09 13:02   ` Tom Rini
  2020-09-30 16:39 ` [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT Andre Przywara
  2020-09-30 17:39 ` [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Tom Rini
  6 siblings, 2 replies; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

CONFIG_ARCH_SUPPORT_TFABOOT was used on the qemu-arm64 platform to
guard a tweak to the flash bank configuration. U-Boot now reads the
current flash setup from the devicetree, so there is no need for
this option anymore.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 arch/arm/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 486141478ce..5ffa84c1d98 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -929,7 +929,6 @@ config ARCH_OWL
 
 config ARCH_QEMU
 	bool "QEMU Virtual Platform"
-	select ARCH_SUPPORT_TFABOOT
 	select DM
 	select DM_SERIAL
 	select OF_CONTROL
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
                   ` (4 preceding siblings ...)
  2020-09-30 16:39 ` [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT Andre Przywara
@ 2020-09-30 16:39 ` Andre Przywara
  2020-10-09 13:03   ` Tom Rini
  2020-09-30 17:39 ` [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Tom Rini
  6 siblings, 1 reply; 17+ messages in thread
From: Andre Przywara @ 2020-09-30 16:39 UTC (permalink / raw)
  To: u-boot

Now that PIE works when U-Boot is started from ROM, let's enable
CONFIG_POSITION_INDEPENDENT, which allows to load U-Boot also via
ARM Trusted-Firmware's fip.bin to DRAM, without tweaking the
configuration.

To get a writable initial stack, we need to keep the fixed initial
stack pointer, which points to DRAM in our case.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/Kconfig             | 1 +
 configs/qemu_arm64_defconfig | 1 +
 2 files changed, 2 insertions(+)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5ffa84c1d98..8ba73680699 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -22,6 +22,7 @@ config POSITION_INDEPENDENT
 
 config INIT_SP_RELATIVE
 	bool "Specify the early stack pointer relative to the .bss section"
+	default n if ARCH_QEMU
 	default y if POSITION_INDEPENDENT
 	help
 	  U-Boot typically uses a hard-coded value for the stack pointer
diff --git a/configs/qemu_arm64_defconfig b/configs/qemu_arm64_defconfig
index 31ea2d342fc..4450e7ced42 100644
--- a/configs/qemu_arm64_defconfig
+++ b/configs/qemu_arm64_defconfig
@@ -1,6 +1,7 @@
 CONFIG_ARM=y
 CONFIG_ARCH_QEMU=y
 CONFIG_NR_DRAM_BANKS=1
+CONFIG_POSITION_INDEPENDENT=y
 CONFIG_ENV_SIZE=0x40000
 CONFIG_ENV_SECT_SIZE=0x40000
 CONFIG_AHCI=y
-- 
2.17.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v2 1/6] arm64: PIE: Do not skip static relocation
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
@ 2020-09-30 17:11   ` Stephen Warren
  2020-10-01  8:33   ` Amit Tomar
  2020-10-09 13:02   ` Tom Rini
  2 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2020-09-30 17:11 UTC (permalink / raw)
  To: u-boot

On 9/30/20 10:39 AM, Andre Przywara wrote:
> When we build an arm64 target and enable POSITION_INDEPENDENT, we were
> skipping our build-time dynamic relocation fixup routine (STATIC_RELA).
> 
> This was probably done because we didn't need it in this case, as the
> PIE fixup routine in start.S would take care of that at runtime.
> 
> However when we now skip this routine (upon detecting that the fixup
> offset is 0), this might lead to uninitialised pointers.
> 
> Remove the exception, so that we always do the build-time relocation.
> 
> NOTE: GNU binutils starting with v2.27.1 do this build-time relocation
> automatically, to be in-line with other architecures. So on newer
> toolchains our manual fixup is actually not needed. It doesn't hurt to
> have it, though, so that we keep compatibility with the popular Linaro
> toolchains, which lack this feature.

Reviewed-by: Stephen Warren <swarren@nvidia.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware
  2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
                   ` (5 preceding siblings ...)
  2020-09-30 16:39 ` [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT Andre Przywara
@ 2020-09-30 17:39 ` Tom Rini
  6 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-09-30 17:39 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:12PM +0100, Andre Przywara wrote:

> U-Boot on QEMU-arm64 can be used in two configurations: Loaded directly
> via QEMU's -bios option, or as a non-secure payload (BL33) via
> ARM Trusted Firmware-A (TF-A).
> In the latter case we need to define CONFIG_TFABOOT, to accommodate
> the first flash bank being secure only, and manually set SYS_TEXT_BASE
> to the address configured in TF-A (currently 0x60000000).
> 
> To avoid this poorly documented adventure, we enable a position
> independent build, and also let the flash regions be always detected
> through the DTB. This results in a single build to work under both
> scenarios, and also allows to move the BL33 load address in TF-A to
> something lower in the future.
> 
> For this to work, we have to first make PIE work when booted from ROM.
> While writing to ROM should not hurt, it might trigger CFI flash
> sequences, and indeed crashes for me in the middle of the fixup routine.
> This is covered by patch 2/6, which skips the whole fixup routine if the
> offset is actually 0 (as it is in our case). To support older toolchains
> (including the popular Linaro builds), we need to ensure we do the
> static RELA fixups, even with PIE enabled (patch 1/6).
> Also we have to decouple the relative initial stack pointer from the
> PIE option, as we always need to use the fixed version, pointing to
> RAM (patch 3/6).
> Patch 4/6 drops the hard-coded flash address, instead U-Boot can already
> read all required information from QEMU's DTB.
> Patch 5/6 is a cleanup, while the last patch enables the PIE build.
> 
> With this series the very same u-boot.bin file works when directly loaded
> from the QEMU command line (-bios), but also when embedded into TF-A's
> fip.bin, removing the need for case-specific build options.
> 
> Please have a look!

Can you please also update doc/board/emulation/qemu-arm.rst with
instructions / example of using this configuration?  Thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200930/ac3f1c5b/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT
  2020-09-30 16:39 ` [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT Andre Przywara
@ 2020-09-30 17:40   ` Tom Rini
  2020-10-09 13:02   ` Tom Rini
  1 sibling, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-09-30 17:40 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:17PM +0100, Andre Przywara wrote:

> CONFIG_ARCH_SUPPORT_TFABOOT was used on the qemu-arm64 platform to
> guard a tweak to the flash bank configuration. U-Boot now reads the
> current flash setup from the devicetree, so there is no need for
> this option anymore.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200930/7d64645b/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/6] arm64: PIE: Do not skip static relocation
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
  2020-09-30 17:11   ` Stephen Warren
@ 2020-10-01  8:33   ` Amit Tomar
  2020-10-09 13:02   ` Tom Rini
  2 siblings, 0 replies; 17+ messages in thread
From: Amit Tomar @ 2020-10-01  8:33 UTC (permalink / raw)
  To: u-boot

Hi,

>
> NOTE: GNU binutils starting with v2.27.1 do this build-time relocation
> automatically, to be in-line with other architecures. So on newer
> toolchains our manual fixup is actually not needed. It doesn't hurt to
> have it, though, so that we keep compatibility with the popular Linaro
> toolchains, which lack this feature.
>
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---
>
> With this, U-Boot now runs well from ROM when compiled with
> "gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu".
>
> Tested-by: Amit Singh Tomar <amittomer25@gmail.com>
>

Thanks
-Amit

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 1/6] arm64: PIE: Do not skip static relocation
  2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
  2020-09-30 17:11   ` Stephen Warren
  2020-10-01  8:33   ` Amit Tomar
@ 2020-10-09 13:02   ` Tom Rini
  2 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:02 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:13PM +0100, Andre Przywara wrote:

> When we build an arm64 target and enable POSITION_INDEPENDENT, we were
> skipping our build-time dynamic relocation fixup routine (STATIC_RELA).
> 
> This was probably done because we didn't need it in this case, as the
> PIE fixup routine in start.S would take care of that at runtime.
> 
> However when we now skip this routine (upon detecting that the fixup
> offset is 0), this might lead to uninitialised pointers.
> 
> Remove the exception, so that we always do the build-time relocation.
> 
> NOTE: GNU binutils starting with v2.27.1 do this build-time relocation
> automatically, to be in-line with other architecures. So on newer
> toolchains our manual fixup is actually not needed. It doesn't hurt to
> have it, though, so that we keep compatibility with the popular Linaro
> toolchains, which lack this feature.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/b6df8103/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero
  2020-09-30 16:39 ` [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero Andre Przywara
@ 2020-10-09 13:02   ` Tom Rini
  0 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:02 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:14PM +0100, Andre Przywara wrote:

> When the actual offset between link and runtime address is zero, there
> is no need for patching up U-Boot early when running with
> CONFIG_POSITION_INDEPENDENT.
> 
> Skip the whole routine when the distance is 0.
> 
> This helps when U-Boot is loaded into ROM, or in otherwise sensitive
> memory locations.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/3697064f/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer
  2020-09-30 16:39 ` [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer Andre Przywara
@ 2020-10-09 13:02   ` Tom Rini
  0 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:02 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:15PM +0100, Andre Przywara wrote:

> Currently selecting CONFIG_POSITION_INDEPENDENT also forces us to use an
> initial stack pointer relative to the beginning of the BSS section.
> This makes some sense, because this should be writable memory anyway.
> 
> However the BSS section is not cleared or used until later in the
> setup process (after relocation), so memory nearby might not be
> available early enough to host the initial stack. This is an issue if
> U-Boot is loaded from (Flash-)ROM, for instance.
> 
> Allow CONFIG_INIT_SP_RELATIVE to be turned off by a board's config, to
> be able to select a fixed stack pointer, for instance in known good
> DRAM.
> 
> This will help QEMU utilising PIE, when it's loaded to (Flash-)ROM.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/c0440675/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks
  2020-09-30 16:39 ` [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks Andre Przywara
@ 2020-10-09 13:02   ` Tom Rini
  0 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:02 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:16PM +0100, Andre Przywara wrote:
> Currently we hard-code the number and initial addresses of QEMU's flash

> banks, even though our code is perfectly able to gather the same
> information from the DTB provided by QEMU.
> This is especially annoying, since we have two slightly different
> U-Boot configurations ("bare-metal" vs. loaded via Arm Trusted
> Firmware), which need to be selected at build time.
> 
> Drop the two hard coded alternatives, and use
> CONFIG_SYS_MAX_FLASH_BANKS_DETECT instead, which relies on the DTB to
> figure out the actual flash configuration at runtime.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/67d613bf/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT
  2020-09-30 16:39 ` [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT Andre Przywara
  2020-09-30 17:40   ` Tom Rini
@ 2020-10-09 13:02   ` Tom Rini
  1 sibling, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:02 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:17PM +0100, Andre Przywara wrote:

> CONFIG_ARCH_SUPPORT_TFABOOT was used on the qemu-arm64 platform to
> guard a tweak to the flash bank configuration. U-Boot now reads the
> current flash setup from the devicetree, so there is no need for
> this option anymore.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Tom Rini <trini@konsulko.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/0032ff4b/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT
  2020-09-30 16:39 ` [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT Andre Przywara
@ 2020-10-09 13:03   ` Tom Rini
  0 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2020-10-09 13:03 UTC (permalink / raw)
  To: u-boot

On Wed, Sep 30, 2020 at 05:39:18PM +0100, Andre Przywara wrote:

> Now that PIE works when U-Boot is started from ROM, let's enable
> CONFIG_POSITION_INDEPENDENT, which allows to load U-Boot also via
> ARM Trusted-Firmware's fip.bin to DRAM, without tweaking the
> configuration.
> 
> To get a writable initial stack, we need to keep the fixed initial
> stack pointer, which points to DRAM in our case.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>

Applied to u-boot/master, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20201009/035af7f6/attachment.sig>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2020-10-09 13:03 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-30 16:39 [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Andre Przywara
2020-09-30 16:39 ` [PATCH v2 1/6] arm64: PIE: Do not skip static relocation Andre Przywara
2020-09-30 17:11   ` Stephen Warren
2020-10-01  8:33   ` Amit Tomar
2020-10-09 13:02   ` Tom Rini
2020-09-30 16:39 ` [PATCH v2 2/6] arm64: PIE: Skip fixups if distance is zero Andre Przywara
2020-10-09 13:02   ` Tom Rini
2020-09-30 16:39 ` [PATCH v2 3/6] arm64: PIE: Allow fixed stack pointer Andre Przywara
2020-10-09 13:02   ` Tom Rini
2020-09-30 16:39 ` [PATCH v2 4/6] qemu-arm: Remove need to specify flash banks Andre Przywara
2020-10-09 13:02   ` Tom Rini
2020-09-30 16:39 ` [PATCH v2 5/6] qemu-arm: Drop ARCH_SUPPORT_TFABOOT Andre Przywara
2020-09-30 17:40   ` Tom Rini
2020-10-09 13:02   ` Tom Rini
2020-09-30 16:39 ` [PATCH v2 6/6] qemu-arm64: Enable POSITION_INDEPENDENT Andre Przywara
2020-10-09 13:03   ` Tom Rini
2020-09-30 17:39 ` [PATCH v2 0/6] qemu-arm64: Allow booting via Trusted Firmware Tom Rini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.