* [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation @ 2023-04-05 14:27 Andre Przywara 2023-04-05 14:27 ` [PATCH 2/2] sunxi: remove support for boot0 header reservation Andre Przywara 2023-04-08 6:14 ` [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Jernej Škrabec 0 siblings, 2 replies; 5+ messages in thread From: Andre Przywara @ 2023-04-05 14:27 UTC (permalink / raw) To: Jagan Teki Cc: Samuel Holland, Jernej Skrabec, Piotr Oniszczuk, Mikhail Kalashnikov, u-boot, linux-sunxi To switch the ARMv8 Allwinner SoCs into the 64-bit AArch64 ISA, we need to program the 64-bit start code address into an MMIO mapped register that shadows the architectural RVBAR register. This address is SoC specific, with just two versions out there so far. Now a third address emerged, on a *variant* of an existing SoC (H616). Change the boot0.h start code to make this address a Kconfig selectable option, to allow easier maintenance. We make this address user-visible (even though it shouldn't be), to allow putting this in defconfig. This is needed because there are apparently revisions of the H616 SoC out there using different addresses, so this becomes a per-board decision. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arch/arm/include/asm/arch-sunxi/boot0.h | 7 ++----- arch/arm/mach-sunxi/Kconfig | 12 ++++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/arch/arm/include/asm/arch-sunxi/boot0.h b/arch/arm/include/asm/arch-sunxi/boot0.h index 46b7e073b59..59ea75a96b5 100644 --- a/arch/arm/include/asm/arch-sunxi/boot0.h +++ b/arch/arm/include/asm/arch-sunxi/boot0.h @@ -39,11 +39,8 @@ .word 0xf57ff06f // isb sy .word 0xe320f003 // wfi .word 0xeafffffd // b @wfi -#ifndef CONFIG_SUN50I_GEN_H6 - .word 0x017000a0 // writeable RVBAR mapping address -#else - .word 0x09010040 // writeable RVBAR mapping address -#endif + + .word CONFIG_SUNXI_RVBAR_ADDRESS // writable RVBAR mapping addr #ifdef CONFIG_SPL_BUILD .word CONFIG_SPL_TEXT_BASE #else diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index 6417aee944b..b46667ce01e 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -110,6 +110,18 @@ config SUNXI_SRAM_ADDRESS Some newer SoCs map the boot ROM at address 0 instead and move the SRAM to a different address. +config SUNXI_RVBAR_ADDRESS + hex "RVBAR address" + depends on ARM64 + default 0x09010040 if SUN50I_GEN_H6 + default 0x017000a0 + ---help--- + The read-only RVBAR system register holds the address of the first + instruction to execute after a reset. Allwinner cores provide a + writable MMIO backing store for this register, to allow to set the + entry point when switching to AArch64. This store is on different + addresses, depending on the SoC. + config SUNXI_A64_TIMER_ERRATUM bool -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] sunxi: remove support for boot0 header reservation 2023-04-05 14:27 [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Andre Przywara @ 2023-04-05 14:27 ` Andre Przywara 2023-04-08 6:19 ` Jernej Škrabec 2023-04-08 6:14 ` [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Jernej Škrabec 1 sibling, 1 reply; 5+ messages in thread From: Andre Przywara @ 2023-04-05 14:27 UTC (permalink / raw) To: Jagan Teki Cc: Samuel Holland, Jernej Skrabec, Piotr Oniszczuk, Mikhail Kalashnikov, u-boot, linux-sunxi In the early days of the Allwinner A64 U-Boot support, we relied on a vendor provided "boot0" binary to perform the DRAM initialisation. This replaced the SPL, and required to equip the U-Boot (proper) binary with a vendor specific header to be recognised as a valid boot0 payload. Fortunately these days are long gone (we gained SPL and DRAM support in early 2017!), and we never needed to use that hack on any later 64-bit Allwinner SoC. Since this is highly obsolete by now, remove the Kconfig option and the small pieces of "code" associated with it. Provide some comments about the purpose of the remaining boot0 code on the way. Signed-off-by: Andre Przywara <andre.przywara@arm.com> --- arch/arm/include/asm/arch-sunxi/boot0.h | 18 +++++++++++------- arch/arm/mach-sunxi/Kconfig | 9 --------- configs/a64-olinuxino-emmc_defconfig | 1 - configs/a64-olinuxino_defconfig | 1 - configs/amarula_a64_relic_defconfig | 1 - configs/bananapi_m64_defconfig | 1 - configs/nanopi_a64_defconfig | 1 - configs/oceanic_5205_5inmfd_defconfig | 1 - configs/orangepi_win_defconfig | 1 - configs/pine64_plus_defconfig | 1 - configs/sopine_baseboard_defconfig | 1 - 11 files changed, 11 insertions(+), 25 deletions(-) diff --git a/arch/arm/include/asm/arch-sunxi/boot0.h b/arch/arm/include/asm/arch-sunxi/boot0.h index 59ea75a96b5..1a396f78488 100644 --- a/arch/arm/include/asm/arch-sunxi/boot0.h +++ b/arch/arm/include/asm/arch-sunxi/boot0.h @@ -1,13 +1,17 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* - * Configuration settings for the Allwinner A64 (sun50i) CPU + * Very early code for Allwinner 64-bit CPUs. + * + * The BROM runs entirely in AArch32 state, so the SPL is entered using this + * ISA. Depending on the rest of the firmware stack, this may also be true + * for U-Boot proper. + * Provide the "RMR reset into 64-bit" sequence, in AArch32 machine language, + * so that we can have all of U-Boot in AArch64. The first instruction is + * chosen so that if the CPU is already using AArch64, it will skip the code + * and jump straight to the reset vector. */ -#if defined(CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER) && !defined(CONFIG_SPL_BUILD) -/* reserve space for BOOT0 header information */ - b reset - .space 1532 -#elif defined(CONFIG_ARM_BOOT_HOOK_RMR) +#ifdef CONFIG_ARM_BOOT_HOOK_RMR /* * Switch into AArch64 if needed. * Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source. @@ -47,7 +51,7 @@ .word CONFIG_TEXT_BASE #endif .word fel_stash - . -#else +#else /* !CONFIG_ARM_BOOT_HOOK_RMR */ /* normal execution */ b reset #endif diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index b46667ce01e..0527b3863a7 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -386,15 +386,6 @@ config MACH_SUN8I default y if MACH_SUN8I_R40 default y if MACH_SUN8I_V3S -config RESERVE_ALLWINNER_BOOT0_HEADER - bool "reserve space for Allwinner boot0 header" - select ENABLE_ARM_SOC_BOOT0_HOOK - ---help--- - Prepend a 1536 byte (empty) header to the U-Boot image file, to be - filled with magic values post build. The Allwinner provided boot0 - blob relies on this information to load and execute U-Boot. - Only needed on 64-bit Allwinner boards so far when using boot0. - config ARM_BOOT_HOOK_RMR bool depends on ARM64 diff --git a/configs/a64-olinuxino-emmc_defconfig b/configs/a64-olinuxino-emmc_defconfig index 8ec9eb3e9c2..a5989fab1c6 100644 --- a/configs/a64-olinuxino-emmc_defconfig +++ b/configs/a64-olinuxino-emmc_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino-emmc" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_MMC_SUNXI_SLOT_EXTRA=2 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_SUPPORT_EMMC_BOOT=y diff --git a/configs/a64-olinuxino_defconfig b/configs/a64-olinuxino_defconfig index 16cef18beef..0b469c25d0d 100644 --- a/configs/a64-olinuxino_defconfig +++ b/configs/a64-olinuxino_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_MMC_SUNXI_SLOT_EXTRA=2 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_SUN8I_EMAC=y diff --git a/configs/amarula_a64_relic_defconfig b/configs/amarula_a64_relic_defconfig index ae44b66d109..292af6e372e 100644 --- a/configs/amarula_a64_relic_defconfig +++ b/configs/amarula_a64_relic_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-amarula-relic" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_MMC_SUNXI_SLOT_EXTRA=2 # CONFIG_VIDEO_DE2 is not set # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set diff --git a/configs/bananapi_m64_defconfig b/configs/bananapi_m64_defconfig index 99dc2f7d209..d957071cb13 100644 --- a/configs/bananapi_m64_defconfig +++ b/configs/bananapi_m64_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-bananapi-m64" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_MMC_SUNXI_SLOT_EXTRA=2 # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_SUPPORT_EMMC_BOOT=y diff --git a/configs/nanopi_a64_defconfig b/configs/nanopi_a64_defconfig index 70fc257eebd..608238757ba 100644 --- a/configs/nanopi_a64_defconfig +++ b/configs/nanopi_a64_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-nanopi-a64" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_SUN8I_EMAC=y CONFIG_USB_EHCI_HCD=y diff --git a/configs/oceanic_5205_5inmfd_defconfig b/configs/oceanic_5205_5inmfd_defconfig index 2ebca673808..6cdcf782bee 100644 --- a/configs/oceanic_5205_5inmfd_defconfig +++ b/configs/oceanic_5205_5inmfd_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-oceanic-5205-5inmfd" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y CONFIG_DRAM_CLK=552 CONFIG_DRAM_ZQ=3881949 diff --git a/configs/orangepi_win_defconfig b/configs/orangepi_win_defconfig index 3b78ad7e52d..df11ad8c8fd 100644 --- a/configs/orangepi_win_defconfig +++ b/configs/orangepi_win_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-orangepi-win" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_MACPWR="PD14" CONFIG_SPL_SPI_SUNXI=y # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set diff --git a/configs/pine64_plus_defconfig b/configs/pine64_plus_defconfig index f42f4e5923a..08c13b58a1e 100644 --- a/configs/pine64_plus_defconfig +++ b/configs/pine64_plus_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pine64-plus" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_PINE64_DT_SELECTION=y # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set CONFIG_OF_LIST="sun50i-a64-pine64 sun50i-a64-pine64-plus" diff --git a/configs/sopine_baseboard_defconfig b/configs/sopine_baseboard_defconfig index a5e1478c117..d9b0eb37c54 100644 --- a/configs/sopine_baseboard_defconfig +++ b/configs/sopine_baseboard_defconfig @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-sopine-baseboard" CONFIG_SPL=y CONFIG_MACH_SUN50I=y -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y CONFIG_DRAM_CLK=552 CONFIG_DRAM_ZQ=3881949 -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] sunxi: remove support for boot0 header reservation 2023-04-05 14:27 ` [PATCH 2/2] sunxi: remove support for boot0 header reservation Andre Przywara @ 2023-04-08 6:19 ` Jernej Škrabec 2023-04-11 22:16 ` Andre Przywara 0 siblings, 1 reply; 5+ messages in thread From: Jernej Škrabec @ 2023-04-08 6:19 UTC (permalink / raw) To: Jagan Teki, Andre Przywara Cc: Samuel Holland, Piotr Oniszczuk, Mikhail Kalashnikov, u-boot, linux-sunxi Dne sreda, 05. april 2023 ob 16:27:31 CEST je Andre Przywara napisal(a): > In the early days of the Allwinner A64 U-Boot support, we relied on a > vendor provided "boot0" binary to perform the DRAM initialisation. This > replaced the SPL, and required to equip the U-Boot (proper) binary with > a vendor specific header to be recognised as a valid boot0 payload. > Fortunately these days are long gone (we gained SPL and DRAM support in > early 2017!), and we never needed to use that hack on any later 64-bit > Allwinner SoC. > > Since this is highly obsolete by now, remove the Kconfig option and the > small pieces of "code" associated with it. > > Provide some comments about the purpose of the remaining boot0 code on > the way. > > Signed-off-by: Andre Przywara <andre.przywara@arm.com> I think it's time to remove this code too. Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com> Best regards, Jernej > --- > arch/arm/include/asm/arch-sunxi/boot0.h | 18 +++++++++++------- > arch/arm/mach-sunxi/Kconfig | 9 --------- > configs/a64-olinuxino-emmc_defconfig | 1 - > configs/a64-olinuxino_defconfig | 1 - > configs/amarula_a64_relic_defconfig | 1 - > configs/bananapi_m64_defconfig | 1 - > configs/nanopi_a64_defconfig | 1 - > configs/oceanic_5205_5inmfd_defconfig | 1 - > configs/orangepi_win_defconfig | 1 - > configs/pine64_plus_defconfig | 1 - > configs/sopine_baseboard_defconfig | 1 - > 11 files changed, 11 insertions(+), 25 deletions(-) > > diff --git a/arch/arm/include/asm/arch-sunxi/boot0.h > b/arch/arm/include/asm/arch-sunxi/boot0.h index 59ea75a96b5..1a396f78488 > 100644 > --- a/arch/arm/include/asm/arch-sunxi/boot0.h > +++ b/arch/arm/include/asm/arch-sunxi/boot0.h > @@ -1,13 +1,17 @@ > /* SPDX-License-Identifier: GPL-2.0+ */ > /* > - * Configuration settings for the Allwinner A64 (sun50i) CPU > + * Very early code for Allwinner 64-bit CPUs. > + * > + * The BROM runs entirely in AArch32 state, so the SPL is entered using > this + * ISA. Depending on the rest of the firmware stack, this may also be > true + * for U-Boot proper. > + * Provide the "RMR reset into 64-bit" sequence, in AArch32 machine > language, + * so that we can have all of U-Boot in AArch64. The first > instruction is + * chosen so that if the CPU is already using AArch64, it > will skip the code + * and jump straight to the reset vector. > */ > > -#if defined(CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER) && > !defined(CONFIG_SPL_BUILD) -/* reserve space for BOOT0 header information > */ > - b reset > - .space 1532 > -#elif defined(CONFIG_ARM_BOOT_HOOK_RMR) > +#ifdef CONFIG_ARM_BOOT_HOOK_RMR > /* > * Switch into AArch64 if needed. > * Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source. > @@ -47,7 +51,7 @@ > .word CONFIG_TEXT_BASE > #endif > .word fel_stash - . > -#else > +#else /* !CONFIG_ARM_BOOT_HOOK_RMR */ > /* normal execution */ > b reset > #endif > diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig > index b46667ce01e..0527b3863a7 100644 > --- a/arch/arm/mach-sunxi/Kconfig > +++ b/arch/arm/mach-sunxi/Kconfig > @@ -386,15 +386,6 @@ config MACH_SUN8I > default y if MACH_SUN8I_R40 > default y if MACH_SUN8I_V3S > > -config RESERVE_ALLWINNER_BOOT0_HEADER > - bool "reserve space for Allwinner boot0 header" > - select ENABLE_ARM_SOC_BOOT0_HOOK > - ---help--- > - Prepend a 1536 byte (empty) header to the U-Boot image file, to be > - filled with magic values post build. The Allwinner provided boot0 > - blob relies on this information to load and execute U-Boot. > - Only needed on 64-bit Allwinner boards so far when using boot0. > - > config ARM_BOOT_HOOK_RMR > bool > depends on ARM64 > diff --git a/configs/a64-olinuxino-emmc_defconfig > b/configs/a64-olinuxino-emmc_defconfig index 8ec9eb3e9c2..a5989fab1c6 > 100644 > --- a/configs/a64-olinuxino-emmc_defconfig > +++ b/configs/a64-olinuxino-emmc_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino-emmc" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > CONFIG_SUPPORT_EMMC_BOOT=y > diff --git a/configs/a64-olinuxino_defconfig > b/configs/a64-olinuxino_defconfig index 16cef18beef..0b469c25d0d 100644 > --- a/configs/a64-olinuxino_defconfig > +++ b/configs/a64-olinuxino_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > CONFIG_SUN8I_EMAC=y > diff --git a/configs/amarula_a64_relic_defconfig > b/configs/amarula_a64_relic_defconfig index ae44b66d109..292af6e372e 100644 > --- a/configs/amarula_a64_relic_defconfig > +++ b/configs/amarula_a64_relic_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-amarula-relic" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > # CONFIG_VIDEO_DE2 is not set > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > diff --git a/configs/bananapi_m64_defconfig b/configs/bananapi_m64_defconfig > index 99dc2f7d209..d957071cb13 100644 > --- a/configs/bananapi_m64_defconfig > +++ b/configs/bananapi_m64_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-bananapi-m64" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > CONFIG_SUPPORT_EMMC_BOOT=y > diff --git a/configs/nanopi_a64_defconfig b/configs/nanopi_a64_defconfig > index 70fc257eebd..608238757ba 100644 > --- a/configs/nanopi_a64_defconfig > +++ b/configs/nanopi_a64_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-nanopi-a64" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > CONFIG_SUN8I_EMAC=y > CONFIG_USB_EHCI_HCD=y > diff --git a/configs/oceanic_5205_5inmfd_defconfig > b/configs/oceanic_5205_5inmfd_defconfig index 2ebca673808..6cdcf782bee > 100644 > --- a/configs/oceanic_5205_5inmfd_defconfig > +++ b/configs/oceanic_5205_5inmfd_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-oceanic-5205-5inmfd" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y > CONFIG_DRAM_CLK=552 > CONFIG_DRAM_ZQ=3881949 > diff --git a/configs/orangepi_win_defconfig b/configs/orangepi_win_defconfig > index 3b78ad7e52d..df11ad8c8fd 100644 > --- a/configs/orangepi_win_defconfig > +++ b/configs/orangepi_win_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-orangepi-win" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_MACPWR="PD14" > CONFIG_SPL_SPI_SUNXI=y > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > diff --git a/configs/pine64_plus_defconfig b/configs/pine64_plus_defconfig > index f42f4e5923a..08c13b58a1e 100644 > --- a/configs/pine64_plus_defconfig > +++ b/configs/pine64_plus_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pine64-plus" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_PINE64_DT_SELECTION=y > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > CONFIG_OF_LIST="sun50i-a64-pine64 sun50i-a64-pine64-plus" > diff --git a/configs/sopine_baseboard_defconfig > b/configs/sopine_baseboard_defconfig index a5e1478c117..d9b0eb37c54 100644 > --- a/configs/sopine_baseboard_defconfig > +++ b/configs/sopine_baseboard_defconfig > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-sopine-baseboard" > CONFIG_SPL=y > CONFIG_MACH_SUN50I=y > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y > CONFIG_DRAM_CLK=552 > CONFIG_DRAM_ZQ=3881949 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] sunxi: remove support for boot0 header reservation 2023-04-08 6:19 ` Jernej Škrabec @ 2023-04-11 22:16 ` Andre Przywara 0 siblings, 0 replies; 5+ messages in thread From: Andre Przywara @ 2023-04-11 22:16 UTC (permalink / raw) To: Jernej Škrabec Cc: Jagan Teki, Samuel Holland, Piotr Oniszczuk, Mikhail Kalashnikov, u-boot, linux-sunxi On Sat, 08 Apr 2023 08:19:16 +0200 Jernej Škrabec <jernej.skrabec@gmail.com> wrote: Hi, > Dne sreda, 05. april 2023 ob 16:27:31 CEST je Andre Przywara napisal(a): > > In the early days of the Allwinner A64 U-Boot support, we relied on a > > vendor provided "boot0" binary to perform the DRAM initialisation. This > > replaced the SPL, and required to equip the U-Boot (proper) binary with > > a vendor specific header to be recognised as a valid boot0 payload. > > Fortunately these days are long gone (we gained SPL and DRAM support in > > early 2017!), and we never needed to use that hack on any later 64-bit > > Allwinner SoC. > > > > Since this is highly obsolete by now, remove the Kconfig option and the > > small pieces of "code" associated with it. > > > > Provide some comments about the purpose of the remaining boot0 code on > > the way. > > > > Signed-off-by: Andre Przywara <andre.przywara@arm.com> > > I think it's time to remove this code too. > > Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com> Many thanks! So I kept the "code" in for now, to appease Piotr, but removed the symbols from the A64's defconfigs. I will propose that removal then again at a later time. Queued for sunxi/master. Cheers, Andre > > > --- > > arch/arm/include/asm/arch-sunxi/boot0.h | 18 +++++++++++------- > > arch/arm/mach-sunxi/Kconfig | 9 --------- > > configs/a64-olinuxino-emmc_defconfig | 1 - > > configs/a64-olinuxino_defconfig | 1 - > > configs/amarula_a64_relic_defconfig | 1 - > > configs/bananapi_m64_defconfig | 1 - > > configs/nanopi_a64_defconfig | 1 - > > configs/oceanic_5205_5inmfd_defconfig | 1 - > > configs/orangepi_win_defconfig | 1 - > > configs/pine64_plus_defconfig | 1 - > > configs/sopine_baseboard_defconfig | 1 - > > 11 files changed, 11 insertions(+), 25 deletions(-) > > > > diff --git a/arch/arm/include/asm/arch-sunxi/boot0.h > > b/arch/arm/include/asm/arch-sunxi/boot0.h index 59ea75a96b5..1a396f78488 > > 100644 > > --- a/arch/arm/include/asm/arch-sunxi/boot0.h > > +++ b/arch/arm/include/asm/arch-sunxi/boot0.h > > @@ -1,13 +1,17 @@ > > /* SPDX-License-Identifier: GPL-2.0+ */ > > /* > > - * Configuration settings for the Allwinner A64 (sun50i) CPU > > + * Very early code for Allwinner 64-bit CPUs. > > + * > > + * The BROM runs entirely in AArch32 state, so the SPL is entered using > > this + * ISA. Depending on the rest of the firmware stack, this may also be > > true + * for U-Boot proper. > > + * Provide the "RMR reset into 64-bit" sequence, in AArch32 machine > > language, + * so that we can have all of U-Boot in AArch64. The first > > instruction is + * chosen so that if the CPU is already using AArch64, it > > will skip the code + * and jump straight to the reset vector. > > */ > > > > -#if defined(CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER) && > > !defined(CONFIG_SPL_BUILD) -/* reserve space for BOOT0 header information > > */ > > - b reset > > - .space 1532 > > -#elif defined(CONFIG_ARM_BOOT_HOOK_RMR) > > +#ifdef CONFIG_ARM_BOOT_HOOK_RMR > > /* > > * Switch into AArch64 if needed. > > * Refer to arch/arm/mach-sunxi/rmr_switch.S for the original source. > > @@ -47,7 +51,7 @@ > > .word CONFIG_TEXT_BASE > > #endif > > .word fel_stash - . > > -#else > > +#else /* !CONFIG_ARM_BOOT_HOOK_RMR */ > > /* normal execution */ > > b reset > > #endif > > diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig > > index b46667ce01e..0527b3863a7 100644 > > --- a/arch/arm/mach-sunxi/Kconfig > > +++ b/arch/arm/mach-sunxi/Kconfig > > @@ -386,15 +386,6 @@ config MACH_SUN8I > > default y if MACH_SUN8I_R40 > > default y if MACH_SUN8I_V3S > > > > -config RESERVE_ALLWINNER_BOOT0_HEADER > > - bool "reserve space for Allwinner boot0 header" > > - select ENABLE_ARM_SOC_BOOT0_HOOK > > - ---help--- > > - Prepend a 1536 byte (empty) header to the U-Boot image file, to be > > - filled with magic values post build. The Allwinner provided boot0 > > - blob relies on this information to load and execute U-Boot. > > - Only needed on 64-bit Allwinner boards so far when using boot0. > > - > > config ARM_BOOT_HOOK_RMR > > bool > > depends on ARM64 > > diff --git a/configs/a64-olinuxino-emmc_defconfig > > b/configs/a64-olinuxino-emmc_defconfig index 8ec9eb3e9c2..a5989fab1c6 > > 100644 > > --- a/configs/a64-olinuxino-emmc_defconfig > > +++ b/configs/a64-olinuxino-emmc_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino-emmc" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > CONFIG_SUPPORT_EMMC_BOOT=y > > diff --git a/configs/a64-olinuxino_defconfig > > b/configs/a64-olinuxino_defconfig index 16cef18beef..0b469c25d0d 100644 > > --- a/configs/a64-olinuxino_defconfig > > +++ b/configs/a64-olinuxino_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-olinuxino" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > CONFIG_SUN8I_EMAC=y > > diff --git a/configs/amarula_a64_relic_defconfig > > b/configs/amarula_a64_relic_defconfig index ae44b66d109..292af6e372e 100644 > > --- a/configs/amarula_a64_relic_defconfig > > +++ b/configs/amarula_a64_relic_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-amarula-relic" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > > # CONFIG_VIDEO_DE2 is not set > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > diff --git a/configs/bananapi_m64_defconfig b/configs/bananapi_m64_defconfig > > index 99dc2f7d209..d957071cb13 100644 > > --- a/configs/bananapi_m64_defconfig > > +++ b/configs/bananapi_m64_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-bananapi-m64" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_MMC_SUNXI_SLOT_EXTRA=2 > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > CONFIG_SUPPORT_EMMC_BOOT=y > > diff --git a/configs/nanopi_a64_defconfig b/configs/nanopi_a64_defconfig > > index 70fc257eebd..608238757ba 100644 > > --- a/configs/nanopi_a64_defconfig > > +++ b/configs/nanopi_a64_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-nanopi-a64" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > CONFIG_SUN8I_EMAC=y > > CONFIG_USB_EHCI_HCD=y > > diff --git a/configs/oceanic_5205_5inmfd_defconfig > > b/configs/oceanic_5205_5inmfd_defconfig index 2ebca673808..6cdcf782bee > > 100644 > > --- a/configs/oceanic_5205_5inmfd_defconfig > > +++ b/configs/oceanic_5205_5inmfd_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-oceanic-5205-5inmfd" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y > > CONFIG_DRAM_CLK=552 > > CONFIG_DRAM_ZQ=3881949 > > diff --git a/configs/orangepi_win_defconfig b/configs/orangepi_win_defconfig > > index 3b78ad7e52d..df11ad8c8fd 100644 > > --- a/configs/orangepi_win_defconfig > > +++ b/configs/orangepi_win_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-orangepi-win" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_MACPWR="PD14" > > CONFIG_SPL_SPI_SUNXI=y > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > diff --git a/configs/pine64_plus_defconfig b/configs/pine64_plus_defconfig > > index f42f4e5923a..08c13b58a1e 100644 > > --- a/configs/pine64_plus_defconfig > > +++ b/configs/pine64_plus_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pine64-plus" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_PINE64_DT_SELECTION=y > > # CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set > > CONFIG_OF_LIST="sun50i-a64-pine64 sun50i-a64-pine64-plus" > > diff --git a/configs/sopine_baseboard_defconfig > > b/configs/sopine_baseboard_defconfig index a5e1478c117..d9b0eb37c54 100644 > > --- a/configs/sopine_baseboard_defconfig > > +++ b/configs/sopine_baseboard_defconfig > > @@ -3,7 +3,6 @@ CONFIG_ARCH_SUNXI=y > > CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-sopine-baseboard" > > CONFIG_SPL=y > > CONFIG_MACH_SUN50I=y > > -CONFIG_RESERVE_ALLWINNER_BOOT0_HEADER=y > > CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y > > CONFIG_DRAM_CLK=552 > > CONFIG_DRAM_ZQ=3881949 > > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation 2023-04-05 14:27 [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Andre Przywara 2023-04-05 14:27 ` [PATCH 2/2] sunxi: remove support for boot0 header reservation Andre Przywara @ 2023-04-08 6:14 ` Jernej Škrabec 1 sibling, 0 replies; 5+ messages in thread From: Jernej Škrabec @ 2023-04-08 6:14 UTC (permalink / raw) To: Jagan Teki, Andre Przywara Cc: Samuel Holland, Piotr Oniszczuk, Mikhail Kalashnikov, u-boot, linux-sunxi Dne sreda, 05. april 2023 ob 16:27:30 CEST je Andre Przywara napisal(a): > To switch the ARMv8 Allwinner SoCs into the 64-bit AArch64 ISA, we need > to program the 64-bit start code address into an MMIO mapped register > that shadows the architectural RVBAR register. > This address is SoC specific, with just two versions out there so far. > Now a third address emerged, on a *variant* of an existing SoC (H616). > > Change the boot0.h start code to make this address a Kconfig > selectable option, to allow easier maintenance. > We make this address user-visible (even though it shouldn't be), to > allow putting this in defconfig. This is needed because there are > apparently revisions of the H616 SoC out there using different > addresses, so this becomes a per-board decision. > > Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com> Best regards, Jernej > --- > arch/arm/include/asm/arch-sunxi/boot0.h | 7 ++----- > arch/arm/mach-sunxi/Kconfig | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 5 deletions(-) > > diff --git a/arch/arm/include/asm/arch-sunxi/boot0.h > b/arch/arm/include/asm/arch-sunxi/boot0.h index 46b7e073b59..59ea75a96b5 > 100644 > --- a/arch/arm/include/asm/arch-sunxi/boot0.h > +++ b/arch/arm/include/asm/arch-sunxi/boot0.h > @@ -39,11 +39,8 @@ > .word 0xf57ff06f // isb sy > .word 0xe320f003 // wfi > .word 0xeafffffd // b @wfi > -#ifndef CONFIG_SUN50I_GEN_H6 > - .word 0x017000a0 // writeable RVBAR mapping address > -#else > - .word 0x09010040 // writeable RVBAR mapping address > -#endif > + > + .word CONFIG_SUNXI_RVBAR_ADDRESS // writable RVBAR mapping addr > #ifdef CONFIG_SPL_BUILD > .word CONFIG_SPL_TEXT_BASE > #else > diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig > index 6417aee944b..b46667ce01e 100644 > --- a/arch/arm/mach-sunxi/Kconfig > +++ b/arch/arm/mach-sunxi/Kconfig > @@ -110,6 +110,18 @@ config SUNXI_SRAM_ADDRESS > Some newer SoCs map the boot ROM at address 0 instead and move the > SRAM to a different address. > > +config SUNXI_RVBAR_ADDRESS > + hex "RVBAR address" > + depends on ARM64 > + default 0x09010040 if SUN50I_GEN_H6 > + default 0x017000a0 > + ---help--- > + The read-only RVBAR system register holds the address of the first > + instruction to execute after a reset. Allwinner cores provide a > + writable MMIO backing store for this register, to allow to set the > + entry point when switching to AArch64. This store is on different > + addresses, depending on the SoC. > + > config SUNXI_A64_TIMER_ERRATUM > bool ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-11 22:16 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-04-05 14:27 [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Andre Przywara 2023-04-05 14:27 ` [PATCH 2/2] sunxi: remove support for boot0 header reservation Andre Przywara 2023-04-08 6:19 ` Jernej Škrabec 2023-04-11 22:16 ` Andre Przywara 2023-04-08 6:14 ` [PATCH 1/2] sunxi: boot0.h: allow RVBAR MMIO address customisation Jernej Škrabec
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox