* [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build @ 2022-02-15 19:02 Pali Rohár 2022-02-16 10:08 ` Stefan Roese 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár 0 siblings, 2 replies; 11+ messages in thread From: Pali Rohár @ 2022-02-15 19:02 UTC (permalink / raw) To: Stefan Roese, Marek Behún, Andre Przywara, Chia-Wei Wang; +Cc: u-boot U-Boot SPL is executed by the BootROM. And BootROM expects that U-Boot SPL code returns back to the BootROM. Reset vectors during execution of U-Boot SPL should not be changed as BootROM does not expect it and uses its own reset vectors. Add ifdefs which disable overwriting reset vectors for 32-bit mvebu platforms on which U-Boot SPL should returns back to the BootROM. Signed-off-by: Pali Rohár <pali@kernel.org> --- arch/arm/cpu/armv7/start.S | 7 ++++--- arch/arm/lib/vectors.S | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index af87a5432ae5..b8175ea3808b 100644 --- a/arch/arm/cpu/armv7/start.S +++ b/arch/arm/cpu/armv7/start.S @@ -99,10 +99,11 @@ switch_to_hypervisor_ret: /* * Setup vector: - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. - * Continue to use ROM code vector only in OMAP4 spl) + * OMAP4 spl TEXT_BASE is not 32 byte aligned. + * 32-bit mvebu spl returns execution back to BootROM and should not change vectors. + * Continue to use ROM code vector only in OMAP4 or 32-bit mvebu spl. */ -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) +#if !((defined(CONFIG_OMAP44XX) || (defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT))) && defined(CONFIG_SPL_BUILD)) /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register bic r0, #CR_V @ V = 0 diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S index 56f36815582b..a0646e213b6d 100644 --- a/arch/arm/lib/vectors.S +++ b/arch/arm/lib/vectors.S @@ -24,6 +24,7 @@ #else b reset #endif +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort @@ -31,6 +32,7 @@ ldr pc, _not_used ldr pc, _irq ldr pc, _fiq +#endif .endm @@ -87,6 +89,7 @@ _start: ARM_VECTORS #endif /* !defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) */ +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) /* ************************************************************************* * @@ -118,6 +121,7 @@ _irq: .word irq _fiq: .word fiq .balignl 16,0xdeadbeef +#endif /* ************************************************************************* @@ -131,6 +135,7 @@ _fiq: .word fiq #ifdef CONFIG_SPL_BUILD +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) .align 5 undefined_instruction: software_interrupt: @@ -141,6 +146,7 @@ irq: fiq: 1: b 1b /* hang and never return */ +#endif #else /* !CONFIG_SPL_BUILD */ -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build 2022-02-15 19:02 [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build Pali Rohár @ 2022-02-16 10:08 ` Stefan Roese 2022-02-16 10:17 ` Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár 1 sibling, 1 reply; 11+ messages in thread From: Stefan Roese @ 2022-02-16 10:08 UTC (permalink / raw) To: Pali Rohár, Marek Behún, Andre Przywara, Chia-Wei Wang; +Cc: u-boot On 2/15/22 20:02, Pali Rohár wrote: > U-Boot SPL is executed by the BootROM. And BootROM expects that U-Boot SPL > code returns back to the BootROM. Reset vectors during execution of > U-Boot SPL should not be changed as BootROM does not expect it and uses its > own reset vectors. Just curious: How did you detect this problem? What actually happens when the reset vectors are overwritten here? > Add ifdefs which disable overwriting reset vectors for 32-bit mvebu > platforms on which U-Boot SPL should returns back to the BootROM. > > Signed-off-by: Pali Rohár <pali@kernel.org> > --- > arch/arm/cpu/armv7/start.S | 7 ++++--- > arch/arm/lib/vectors.S | 6 ++++++ > 2 files changed, 10 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > index af87a5432ae5..b8175ea3808b 100644 > --- a/arch/arm/cpu/armv7/start.S > +++ b/arch/arm/cpu/armv7/start.S > @@ -99,10 +99,11 @@ switch_to_hypervisor_ret: > > /* > * Setup vector: > - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. > - * Continue to use ROM code vector only in OMAP4 spl) > + * OMAP4 spl TEXT_BASE is not 32 byte aligned. > + * 32-bit mvebu spl returns execution back to BootROM and should not change vectors. > + * Continue to use ROM code vector only in OMAP4 or 32-bit mvebu spl. > */ > -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) > +#if !((defined(CONFIG_OMAP44XX) || (defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT))) && defined(CONFIG_SPL_BUILD)) Will this file ever be compiled for (defined(CONFIG_ARCH_MVEBU) && !defined(CONFIG_ARMADA_32BIT))? Meaning cpu/armv7 pretty much means 32bit, or did I miss something? If this is correct, you can probably drop one of the checks making this line a bit easier to read (again). Perhaps it's better to introduce a new Kconfig option for this instead and select it for the necessary platforms/targets? Thanks, Stefan > /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ > mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register > bic r0, #CR_V @ V = 0 > diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S > index 56f36815582b..a0646e213b6d 100644 > --- a/arch/arm/lib/vectors.S > +++ b/arch/arm/lib/vectors.S > @@ -24,6 +24,7 @@ > #else > b reset > #endif > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > ldr pc, _undefined_instruction > ldr pc, _software_interrupt > ldr pc, _prefetch_abort > @@ -31,6 +32,7 @@ > ldr pc, _not_used > ldr pc, _irq > ldr pc, _fiq > +#endif > .endm > > > @@ -87,6 +89,7 @@ _start: > ARM_VECTORS > #endif /* !defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) */ > > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > /* > ************************************************************************* > * > @@ -118,6 +121,7 @@ _irq: .word irq > _fiq: .word fiq > > .balignl 16,0xdeadbeef > +#endif > > /* > ************************************************************************* > @@ -131,6 +135,7 @@ _fiq: .word fiq > > #ifdef CONFIG_SPL_BUILD > > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > .align 5 > undefined_instruction: > software_interrupt: > @@ -141,6 +146,7 @@ irq: > fiq: > 1: > b 1b /* hang and never return */ > +#endif > > #else /* !CONFIG_SPL_BUILD */ > Viele Grüße, Stefan Roese -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build 2022-02-16 10:08 ` Stefan Roese @ 2022-02-16 10:17 ` Pali Rohár 0 siblings, 0 replies; 11+ messages in thread From: Pali Rohár @ 2022-02-16 10:17 UTC (permalink / raw) To: Stefan Roese; +Cc: Marek Behún, Andre Przywara, Chia-Wei Wang, u-boot On Wednesday 16 February 2022 11:08:19 Stefan Roese wrote: > On 2/15/22 20:02, Pali Rohár wrote: > > U-Boot SPL is executed by the BootROM. And BootROM expects that U-Boot SPL > > code returns back to the BootROM. Reset vectors during execution of > > U-Boot SPL should not be changed as BootROM does not expect it and uses its > > own reset vectors. > > Just curious: How did you detect this problem? What actually happens > when the reset vectors are overwritten here? BootROM loose ability to detect / count issues with unbootable sources which crashes. Nothing important when SPI source is fully bootable without any issue. There are registers into which BootROM stores reset information, so during _early_ debugging it could be useful to have it filled. > > Add ifdefs which disable overwriting reset vectors for 32-bit mvebu > > platforms on which U-Boot SPL should returns back to the BootROM. > > > > Signed-off-by: Pali Rohár <pali@kernel.org> > > --- > > arch/arm/cpu/armv7/start.S | 7 ++++--- > > arch/arm/lib/vectors.S | 6 ++++++ > > 2 files changed, 10 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > > index af87a5432ae5..b8175ea3808b 100644 > > --- a/arch/arm/cpu/armv7/start.S > > +++ b/arch/arm/cpu/armv7/start.S > > @@ -99,10 +99,11 @@ switch_to_hypervisor_ret: > > /* > > * Setup vector: > > - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. > > - * Continue to use ROM code vector only in OMAP4 spl) > > + * OMAP4 spl TEXT_BASE is not 32 byte aligned. > > + * 32-bit mvebu spl returns execution back to BootROM and should not change vectors. > > + * Continue to use ROM code vector only in OMAP4 or 32-bit mvebu spl. > > */ > > -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) > > +#if !((defined(CONFIG_OMAP44XX) || (defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT))) && defined(CONFIG_SPL_BUILD)) > > Will this file ever be compiled for (defined(CONFIG_ARCH_MVEBU) && > !defined(CONFIG_ARMADA_32BIT))? Meaning cpu/armv7 pretty much means > 32bit, or did I miss something? If this is correct, you can probably > drop one of the checks making this line a bit easier to read (again). First I added just CONFIG_ARCH_MVEBU and realized that it is enabled also for 64-bit mvebu platforms. So later I added CONFIG_ARMADA_32BIT and forgot about it. And you are right CONFIG_ARMADA_32BIT should be enough. > Perhaps it's better to introduce a new Kconfig option for this instead > and select it for the necessary platforms/targets? This should be possible, but I do not know how to do this config symbol magic correctly when it should be applied only for SPL builds... > Thanks, > Stefan > > > /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ > > mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register > > bic r0, #CR_V @ V = 0 > > diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S > > index 56f36815582b..a0646e213b6d 100644 > > --- a/arch/arm/lib/vectors.S > > +++ b/arch/arm/lib/vectors.S > > @@ -24,6 +24,7 @@ > > #else > > b reset > > #endif > > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > > ldr pc, _undefined_instruction > > ldr pc, _software_interrupt > > ldr pc, _prefetch_abort > > @@ -31,6 +32,7 @@ > > ldr pc, _not_used > > ldr pc, _irq > > ldr pc, _fiq > > +#endif > > .endm > > @@ -87,6 +89,7 @@ _start: > > ARM_VECTORS > > #endif /* !defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) */ > > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > > /* > > ************************************************************************* > > * > > @@ -118,6 +121,7 @@ _irq: .word irq > > _fiq: .word fiq > > .balignl 16,0xdeadbeef > > +#endif > > /* > > ************************************************************************* > > @@ -131,6 +135,7 @@ _fiq: .word fiq > > #ifdef CONFIG_SPL_BUILD > > +#if !(defined(CONFIG_ARCH_MVEBU) && defined(CONFIG_ARMADA_32BIT) && defined(CONFIG_SPL_BUILD)) > > .align 5 > > undefined_instruction: > > software_interrupt: > > @@ -141,6 +146,7 @@ irq: > > fiq: > > 1: > > b 1b /* hang and never return */ > > +#endif > > #else /* !CONFIG_SPL_BUILD */ > > Viele Grüße, > Stefan Roese > > -- > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option 2022-02-15 19:02 [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build Pali Rohár 2022-02-16 10:08 ` Stefan Roese @ 2022-04-06 14:20 ` Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled Pali Rohár ` (3 more replies) 1 sibling, 4 replies; 11+ messages in thread From: Pali Rohár @ 2022-04-06 14:20 UTC (permalink / raw) To: Stefan Roese, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot Move OMAP4 specific option for disabling overwriting vector table into config option CONFIG_SPL_SYS_NO_VECTOR_TABLE. Signed-off-by: Pali Rohár <pali@kernel.org> --- arch/arm/Kconfig | 4 ++++ arch/arm/cpu/armv7/start.S | 4 +--- arch/arm/mach-omap2/Kconfig | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 4567c183fb84..1be8d4470ec1 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -57,6 +57,10 @@ config SYS_INIT_SP_BSS_OFFSET that the early malloc region, global data (gd), and early stack usage do not overlap any appended DTB. +config SPL_SYS_NO_VECTOR_TABLE + depends on SPL + bool + config LINUX_KERNEL_IMAGE_HEADER depends on ARM64 bool diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S index af87a5432ae5..37036128a785 100644 --- a/arch/arm/cpu/armv7/start.S +++ b/arch/arm/cpu/armv7/start.S @@ -97,12 +97,10 @@ switch_to_hypervisor_ret: orr r0, r0, #0xc0 @ disable FIQ and IRQ msr cpsr,r0 +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) /* * Setup vector: - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. - * Continue to use ROM code vector only in OMAP4 spl) */ -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register bic r0, #CR_V @ V = 0 diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 263142683b04..e1b9180a3bb3 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -32,6 +32,7 @@ config OMAP34XX config OMAP44XX bool "OMAP44XX SoC" select SPL_USE_TINY_PRINTF + select SPL_SYS_NO_VECTOR_TABLE if SPL imply NAND_OMAP_ELM imply NAND_OMAP_GPMC imply SPL_DISPLAY_PRINT -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár @ 2022-04-06 14:20 ` Pali Rohár 2022-04-21 14:09 ` Stefan Roese 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu Pali Rohár ` (2 subsequent siblings) 3 siblings, 1 reply; 11+ messages in thread From: Pali Rohár @ 2022-04-06 14:20 UTC (permalink / raw) To: Stefan Roese, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot Vector table is not used when SYS_NO_VECTOR_TABLE is enabled. So do not compile it and reduce image size. Signed-off-by: Pali Rohár <pali@kernel.org> --- arch/arm/lib/vectors.S | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S index 56f36815582b..a54c84b062b1 100644 --- a/arch/arm/lib/vectors.S +++ b/arch/arm/lib/vectors.S @@ -24,6 +24,7 @@ #else b reset #endif +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort @@ -31,6 +32,7 @@ ldr pc, _not_used ldr pc, _irq ldr pc, _fiq +#endif .endm @@ -87,6 +89,7 @@ _start: ARM_VECTORS #endif /* !defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) */ +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) /* ************************************************************************* * @@ -118,6 +121,7 @@ _irq: .word irq _fiq: .word fiq .balignl 16,0xdeadbeef +#endif /* ************************************************************************* @@ -131,6 +135,7 @@ _fiq: .word fiq #ifdef CONFIG_SPL_BUILD +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) .align 5 undefined_instruction: software_interrupt: @@ -141,6 +146,7 @@ irq: fiq: 1: b 1b /* hang and never return */ +#endif #else /* !CONFIG_SPL_BUILD */ -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled Pali Rohár @ 2022-04-21 14:09 ` Stefan Roese 0 siblings, 0 replies; 11+ messages in thread From: Stefan Roese @ 2022-04-21 14:09 UTC (permalink / raw) To: Pali Rohár, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot On 4/6/22 16:20, Pali Rohár wrote: > Vector table is not used when SYS_NO_VECTOR_TABLE is enabled. > So do not compile it and reduce image size. > > Signed-off-by: Pali Rohár <pali@kernel.org> Applied to u-boot-marvell/master Thanks, Stefan > --- > arch/arm/lib/vectors.S | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/arm/lib/vectors.S b/arch/arm/lib/vectors.S > index 56f36815582b..a54c84b062b1 100644 > --- a/arch/arm/lib/vectors.S > +++ b/arch/arm/lib/vectors.S > @@ -24,6 +24,7 @@ > #else > b reset > #endif > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > ldr pc, _undefined_instruction > ldr pc, _software_interrupt > ldr pc, _prefetch_abort > @@ -31,6 +32,7 @@ > ldr pc, _not_used > ldr pc, _irq > ldr pc, _fiq > +#endif > .endm > > > @@ -87,6 +89,7 @@ _start: > ARM_VECTORS > #endif /* !defined(CONFIG_ENABLE_ARM_SOC_BOOT0_HOOK) */ > > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > /* > ************************************************************************* > * > @@ -118,6 +121,7 @@ _irq: .word irq > _fiq: .word fiq > > .balignl 16,0xdeadbeef > +#endif > > /* > ************************************************************************* > @@ -131,6 +135,7 @@ _fiq: .word fiq > > #ifdef CONFIG_SPL_BUILD > > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > .align 5 > undefined_instruction: > software_interrupt: > @@ -141,6 +146,7 @@ irq: > fiq: > 1: > b 1b /* hang and never return */ > +#endif > > #else /* !CONFIG_SPL_BUILD */ > Viele Grüße, Stefan Roese -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled Pali Rohár @ 2022-04-06 14:20 ` Pali Rohár 2022-04-21 14:09 ` Stefan Roese 2022-04-21 14:09 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Stefan Roese 2022-08-03 0:02 ` Heinrich Schuchardt 3 siblings, 1 reply; 11+ messages in thread From: Pali Rohár @ 2022-04-06 14:20 UTC (permalink / raw) To: Stefan Roese, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot U-Boot SPL is on 32-bit mvebu executed by the BootROM. And BootROM expects that U-Boot SPL returns execution back to the BootROM. Vectors during execution of U-Boot SPL should not be changed as BootROM does not expect it and uses its own vectors. So do not overwrite vectors in SPL build. Signed-off-by: Pali Rohár <pali@kernel.org> --- arch/arm/mach-mvebu/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index fa83ae712eb1..c8e792306872 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig @@ -16,6 +16,7 @@ config ARMADA_32BIT select SUPPORT_SPL select TRANSLATION_OFFSET select TOOLS_KWBIMAGE if SPL + select SPL_SYS_NO_VECTOR_TABLE if SPL config ARMADA_64BIT bool -- 2.20.1 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu Pali Rohár @ 2022-04-21 14:09 ` Stefan Roese 0 siblings, 0 replies; 11+ messages in thread From: Stefan Roese @ 2022-04-21 14:09 UTC (permalink / raw) To: Pali Rohár, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot On 4/6/22 16:20, Pali Rohár wrote: > U-Boot SPL is on 32-bit mvebu executed by the BootROM. And BootROM expects > that U-Boot SPL returns execution back to the BootROM. Vectors during > execution of U-Boot SPL should not be changed as BootROM does not expect it > and uses its own vectors. So do not overwrite vectors in SPL build. > > Signed-off-by: Pali Rohár <pali@kernel.org> Applied to u-boot-marvell/master Thanks, Stefan > --- > arch/arm/mach-mvebu/Kconfig | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig > index fa83ae712eb1..c8e792306872 100644 > --- a/arch/arm/mach-mvebu/Kconfig > +++ b/arch/arm/mach-mvebu/Kconfig > @@ -16,6 +16,7 @@ config ARMADA_32BIT > select SUPPORT_SPL > select TRANSLATION_OFFSET > select TOOLS_KWBIMAGE if SPL > + select SPL_SYS_NO_VECTOR_TABLE if SPL > > config ARMADA_64BIT > bool Viele Grüße, Stefan Roese -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu Pali Rohár @ 2022-04-21 14:09 ` Stefan Roese 2022-08-03 0:02 ` Heinrich Schuchardt 3 siblings, 0 replies; 11+ messages in thread From: Stefan Roese @ 2022-04-21 14:09 UTC (permalink / raw) To: Pali Rohár, Andre Przywara, Chia-Wei Wang; +Cc: Marek Behún, u-boot On 4/6/22 16:20, Pali Rohár wrote: > Move OMAP4 specific option for disabling overwriting vector table into > config option CONFIG_SPL_SYS_NO_VECTOR_TABLE. > > Signed-off-by: Pali Rohár <pali@kernel.org> Applied to u-boot-marvell/master Thanks, Stefan > --- > arch/arm/Kconfig | 4 ++++ > arch/arm/cpu/armv7/start.S | 4 +--- > arch/arm/mach-omap2/Kconfig | 1 + > 3 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 4567c183fb84..1be8d4470ec1 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -57,6 +57,10 @@ config SYS_INIT_SP_BSS_OFFSET > that the early malloc region, global data (gd), and early stack usage > do not overlap any appended DTB. > > +config SPL_SYS_NO_VECTOR_TABLE > + depends on SPL > + bool > + > config LINUX_KERNEL_IMAGE_HEADER > depends on ARM64 > bool > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > index af87a5432ae5..37036128a785 100644 > --- a/arch/arm/cpu/armv7/start.S > +++ b/arch/arm/cpu/armv7/start.S > @@ -97,12 +97,10 @@ switch_to_hypervisor_ret: > orr r0, r0, #0xc0 @ disable FIQ and IRQ > msr cpsr,r0 > > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > /* > * Setup vector: > - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. > - * Continue to use ROM code vector only in OMAP4 spl) > */ > -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) > /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ > mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register > bic r0, #CR_V @ V = 0 > diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig > index 263142683b04..e1b9180a3bb3 100644 > --- a/arch/arm/mach-omap2/Kconfig > +++ b/arch/arm/mach-omap2/Kconfig > @@ -32,6 +32,7 @@ config OMAP34XX > config OMAP44XX > bool "OMAP44XX SoC" > select SPL_USE_TINY_PRINTF > + select SPL_SYS_NO_VECTOR_TABLE if SPL > imply NAND_OMAP_ELM > imply NAND_OMAP_GPMC > imply SPL_DISPLAY_PRINT Viele Grüße, Stefan Roese -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár ` (2 preceding siblings ...) 2022-04-21 14:09 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Stefan Roese @ 2022-08-03 0:02 ` Heinrich Schuchardt 2022-08-05 12:39 ` Pali Rohár 3 siblings, 1 reply; 11+ messages in thread From: Heinrich Schuchardt @ 2022-08-03 0:02 UTC (permalink / raw) To: Pali Rohár Cc: Marek Behún, u-boot, Stefan Roese, Andre Przywara, Chia-Wei Wang, Tom Rini On 4/6/22 16:20, Pali Rohár wrote: > Move OMAP4 specific option for disabling overwriting vector table into > config option CONFIG_SPL_SYS_NO_VECTOR_TABLE. > > Signed-off-by: Pali Rohár <pali@kernel.org> > --- > arch/arm/Kconfig | 4 ++++ > arch/arm/cpu/armv7/start.S | 4 +--- > arch/arm/mach-omap2/Kconfig | 1 + > 3 files changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index 4567c183fb84..1be8d4470ec1 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -57,6 +57,10 @@ config SYS_INIT_SP_BSS_OFFSET > that the early malloc region, global data (gd), and early stack usage > do not overlap any appended DTB. > > +config SPL_SYS_NO_VECTOR_TABLE > + depends on SPL > + bool > + ARMv8 has symbol CONFIG_ARMV8_SPL_EXCEPTION_VECTORS. Why do we need two separate setting which have the same usage (but with inverse logic)? Can't we consolidate the two? Why should this symbol not be editable? I guess it needs the same warning as for ARMv8 that if you set it there will be no crash dump in SPL. Best regards Heinrich > config LINUX_KERNEL_IMAGE_HEADER > depends on ARM64 > bool > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > index af87a5432ae5..37036128a785 100644 > --- a/arch/arm/cpu/armv7/start.S > +++ b/arch/arm/cpu/armv7/start.S > @@ -97,12 +97,10 @@ switch_to_hypervisor_ret: > orr r0, r0, #0xc0 @ disable FIQ and IRQ > msr cpsr,r0 > > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > /* > * Setup vector: > - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. > - * Continue to use ROM code vector only in OMAP4 spl) > */ > -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) > /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ > mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register > bic r0, #CR_V @ V = 0 > diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig > index 263142683b04..e1b9180a3bb3 100644 > --- a/arch/arm/mach-omap2/Kconfig > +++ b/arch/arm/mach-omap2/Kconfig > @@ -32,6 +32,7 @@ config OMAP34XX > config OMAP44XX > bool "OMAP44XX SoC" > select SPL_USE_TINY_PRINTF > + select SPL_SYS_NO_VECTOR_TABLE if SPL > imply NAND_OMAP_ELM > imply NAND_OMAP_GPMC > imply SPL_DISPLAY_PRINT ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option 2022-08-03 0:02 ` Heinrich Schuchardt @ 2022-08-05 12:39 ` Pali Rohár 0 siblings, 0 replies; 11+ messages in thread From: Pali Rohár @ 2022-08-05 12:39 UTC (permalink / raw) To: Heinrich Schuchardt Cc: Marek Behún, u-boot, Stefan Roese, Andre Przywara, Chia-Wei Wang, Tom Rini On Wednesday 03 August 2022 02:02:22 Heinrich Schuchardt wrote: > On 4/6/22 16:20, Pali Rohár wrote: > > Move OMAP4 specific option for disabling overwriting vector table into > > config option CONFIG_SPL_SYS_NO_VECTOR_TABLE. > > > > Signed-off-by: Pali Rohár <pali@kernel.org> > > --- > > arch/arm/Kconfig | 4 ++++ > > arch/arm/cpu/armv7/start.S | 4 +--- > > arch/arm/mach-omap2/Kconfig | 1 + > > 3 files changed, 6 insertions(+), 3 deletions(-) > > > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > > index 4567c183fb84..1be8d4470ec1 100644 > > --- a/arch/arm/Kconfig > > +++ b/arch/arm/Kconfig > > @@ -57,6 +57,10 @@ config SYS_INIT_SP_BSS_OFFSET > > that the early malloc region, global data (gd), and early stack usage > > do not overlap any appended DTB. > > > > +config SPL_SYS_NO_VECTOR_TABLE > > + depends on SPL > > + bool > > + > > ARMv8 has symbol CONFIG_ARMV8_SPL_EXCEPTION_VECTORS. > > Why do we need two separate setting which have the same usage (but with > inverse logic)? Can't we consolidate the two? > > Why should this symbol not be editable? These two symbols are different. CONFIG_ARMV8_SPL_EXCEPTION_VECTORS describes that it is there for ARMv8 and its usage is if user wants to save space, to decrease U-Boot binary. This new SPL_SYS_NO_VECTOR_TABLE is there for ARMv7 and as you pointed correctly it is not user editable. This symbol is there for platforms which _require_ that SPL does not modify exception tables. If platform sets it as needed then user must not be able to disable this symbol. I hope that I explained it in commit message, SPL on 32-bit mvebu boards is started by BootROM "as a function". SPL must returns control to BootROM and BootROM expects that vector table is not modified. > I guess it needs the same warning as for ARMv8 that if you set it there > will be no crash dump in SPL. As this symbol is not user editable, it does not have description (requirement by Kconfig language). If crash happens then it is handled by BootROM itself. But I think that description is not needed if symbol is not user editable. It is up to the maintainer of architecture to decide if this option must be enabled or disabled (default) based on other things. Probably what could make sense is to "lift" CONFIG_ARMV8_SPL_EXCEPTION_VECTORS option to be user selectable and for both ARMv7 and ARMv8. To allow user to disable generating vectors on ARMv7 too (but not to enable them if architecture has to have them disabled). > Best regards > > Heinrich > > > config LINUX_KERNEL_IMAGE_HEADER > > depends on ARM64 > > bool > > diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S > > index af87a5432ae5..37036128a785 100644 > > --- a/arch/arm/cpu/armv7/start.S > > +++ b/arch/arm/cpu/armv7/start.S > > @@ -97,12 +97,10 @@ switch_to_hypervisor_ret: > > orr r0, r0, #0xc0 @ disable FIQ and IRQ > > msr cpsr,r0 > > > > +#if !CONFIG_IS_ENABLED(SYS_NO_VECTOR_TABLE) > > /* > > * Setup vector: > > - * (OMAP4 spl TEXT_BASE is not 32 byte aligned. > > - * Continue to use ROM code vector only in OMAP4 spl) > > */ > > -#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD)) > > /* Set V=0 in CP15 SCTLR register - for VBAR to point to vector */ > > mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTLR Register > > bic r0, #CR_V @ V = 0 > > diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig > > index 263142683b04..e1b9180a3bb3 100644 > > --- a/arch/arm/mach-omap2/Kconfig > > +++ b/arch/arm/mach-omap2/Kconfig > > @@ -32,6 +32,7 @@ config OMAP34XX > > config OMAP44XX > > bool "OMAP44XX SoC" > > select SPL_USE_TINY_PRINTF > > + select SPL_SYS_NO_VECTOR_TABLE if SPL > > imply NAND_OMAP_ELM > > imply NAND_OMAP_GPMC > > imply SPL_DISPLAY_PRINT > ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2022-08-05 12:39 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-02-15 19:02 [PATCH u-boot-marvell] arm: mvebu: Do not define or overwrite vectors in SPL build Pali Rohár 2022-02-16 10:08 ` Stefan Roese 2022-02-16 10:17 ` Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Pali Rohár 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 2/3] arm: Do not compile vector table when SYS_NO_VECTOR_TABLE is enabled Pali Rohár 2022-04-21 14:09 ` Stefan Roese 2022-04-06 14:20 ` [PATCH u-boot-marvell v2 3/3] arm: mvebu: Enable CONFIG_SPL_SYS_NO_VECTOR_TABLE for 32-bit mvebu Pali Rohár 2022-04-21 14:09 ` Stefan Roese 2022-04-21 14:09 ` [PATCH u-boot-marvell v2 1/3] arm: Introduce new CONFIG_SPL_SYS_NO_VECTOR_TABLE option Stefan Roese 2022-08-03 0:02 ` Heinrich Schuchardt 2022-08-05 12:39 ` Pali Rohár
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox