From 2be580880df5be0ac55a9b2d9edb2c79994b4413 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 19 May 2018 12:14:10 +0200 Subject: [PATCH] Update and rename 0002-rpi-add-revision-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch to 0002-safely-switch-from-HYP-to-SVC-mode-if-required.patch --- ...ion-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch | 137 ------------------ ...tch-from-HYP-to-SVC-mode-if-required.patch | 85 +++++++++++ 2 files changed, 85 insertions(+), 137 deletions(-) delete mode 100644 buildroot-external/board/rpi3/patches/barebox/0002-rpi-add-revision-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch create mode 100644 buildroot-external/board/rpi3/patches/barebox/0002-safely-switch-from-HYP-to-SVC-mode-if-required.patch diff --git a/buildroot-external/board/rpi3/patches/barebox/0002-rpi-add-revision-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch b/buildroot-external/board/rpi3/patches/barebox/0002-rpi-add-revision-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch deleted file mode 100644 index 1f84e6d99..000000000 --- a/buildroot-external/board/rpi3/patches/barebox/0002-rpi-add-revision-IDs-for-Pi-3-Model-B-and-Pi-Zero.patch +++ /dev/null @@ -1,137 +0,0 @@ -This adds basic support at the same feature level as the other -supported raspberry pi boards. - -Signed-off-by: Lucas Stach -Tested-by: Roland Hieber ---- - arch/arm/boards/raspberry-pi/lowlevel.c | 14 ++++++++++++-- - arch/arm/configs/rpi_defconfig | 2 ++ - arch/arm/dts/Makefile | 1 + - arch/arm/dts/bcm2837-rpi-3.dts | 15 +++++++++++++++ - arch/arm/mach-bcm283x/Kconfig | 6 ++++++ - arch/arm/mach-bcm283x/core.c | 1 + - images/Makefile.bcm283x | 4 ++++ - 7 files changed, 41 insertions(+), 2 deletions(-) - create mode 100644 arch/arm/dts/bcm2837-rpi-3.dts - -diff --git a/arch/arm/boards/raspberry-pi/lowlevel.c b/arch/arm/boards/raspberry-pi/lowlevel.c -index 4e71e29e0c0b..5ca0d3877069 100644 ---- a/arch/arm/boards/raspberry-pi/lowlevel.c -+++ b/arch/arm/boards/raspberry-pi/lowlevel.c -@@ -1,7 +1,7 @@ -+#include -+#include - #include - #include --#include --#include - #include - - extern char __dtb_bcm2835_rpi_start[]; -@@ -23,3 +23,13 @@ ENTRY_FUNCTION(start_raspberry_pi2, r0, r1, r2) - - barebox_arm_entry(BCM2835_SDRAM_BASE, SZ_512M, fdt); - } -+ -+extern char __dtb_bcm2837_rpi_3_start[]; -+ENTRY_FUNCTION(start_raspberry_pi3, r0, r1, r2) -+{ -+ void *fdt = __dtb_bcm2837_rpi_3_start - get_runtime_offset(); -+ -+ arm_cpu_lowlevel_init(); -+ -+ barebox_arm_entry(BCM2835_SDRAM_BASE, SZ_512M, fdt); -+} -diff --git a/arch/arm/configs/rpi_defconfig b/arch/arm/configs/rpi_defconfig -index f3aef4290425..cd88b4ac751c 100644 ---- a/arch/arm/configs/rpi_defconfig -+++ b/arch/arm/configs/rpi_defconfig -@@ -1,9 +1,11 @@ - CONFIG_ARCH_BCM283X=y - CONFIG_MACH_RPI=y - CONFIG_MACH_RPI2=y -+CONFIG_MACH_RPI3=y - CONFIG_AEABI=y - CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y - CONFIG_ARM_UNWIND=y -+CONFIG_IMAGE_COMPRESSION_NONE=y - CONFIG_MMU=y - CONFIG_MALLOC_TLSF=y - CONFIG_KALLSYMS=y -diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile -index 0526a6f40724..0eab313c5011 100644 ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -66,6 +66,7 @@ pbl-dtb-$(CONFIG_MACH_PHYTEC_SOM_RK3288) += rk3288-phycore-som.dtb.o - pbl-dtb-$(CONFIG_MACH_REALQ7) += imx6q-dmo-edmqmx6.dtb.o - pbl-dtb-$(CONFIG_MACH_RPI) += bcm2835-rpi.dtb.o - pbl-dtb-$(CONFIG_MACH_RPI2) += bcm2836-rpi-2.dtb.o -+pbl-dtb-$(CONFIG_MACH_RPI3) += bcm2837-rpi-3.dtb.o - pbl-dtb-$(CONFIG_MACH_SABRELITE) += imx6q-sabrelite.dtb.o imx6dl-sabrelite.dtb.o - pbl-dtb-$(CONFIG_MACH_SABRESD) += imx6q-sabresd.dtb.o - pbl-dtb-$(CONFIG_MACH_FREESCALE_IMX6SX_SABRESDB) += imx6sx-sdb.dtb.o -diff --git a/arch/arm/dts/bcm2837-rpi-3.dts b/arch/arm/dts/bcm2837-rpi-3.dts -new file mode 100644 -index 000000000000..f8c58c570137 ---- /dev/null -+++ b/arch/arm/dts/bcm2837-rpi-3.dts -@@ -0,0 +1,15 @@ -+#include -+ -+/ { -+ chosen { -+ stdout-path = &uart0; -+ }; -+ -+ memory { -+ reg = <0x0 0x0>; -+ }; -+}; -+ -+&uart0 { -+ status = "okay"; -+}; -diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig -index 1457f114ccaa..af2f88c47acb 100644 ---- a/arch/arm/mach-bcm283x/Kconfig -+++ b/arch/arm/mach-bcm283x/Kconfig -@@ -19,6 +19,12 @@ config MACH_RPI2 - select CPU_V7 - select MACH_RPI_COMMON - -+config MACH_RPI3 -+ bool "RaspberryPi 3 (BCM2837/CORTEX-A53)" -+ select CPU_V7 -+ select MACH_RPI_COMMON -+ select ARM_SECURE_MONITOR -+ - endmenu - - config MACH_RPI_DEBUG_UART_BASE -diff --git a/arch/arm/mach-bcm283x/core.c b/arch/arm/mach-bcm283x/core.c -index fddcb0d1a1d4..26f0996b1cb8 100644 ---- a/arch/arm/mach-bcm283x/core.c -+++ b/arch/arm/mach-bcm283x/core.c -@@ -41,6 +41,7 @@ static int bcm2835_clk_init(void) - clk = clk_fixed("uart0-pl0110", 3 * 1000 * 1000); - clk_register_clkdev(clk, NULL, "uart0-pl0110"); - clk_register_clkdev(clk, NULL, "20201000.serial"); -+ clk_register_clkdev(clk, NULL, "3f201000.serial"); - - clk = clk_fixed("bcm2835-cs", 1 * 1000 * 1000); - clk_register_clkdev(clk, NULL, "bcm2835-cs"); -diff --git a/images/Makefile.bcm283x b/images/Makefile.bcm283x -index d59ef043f05c..d14e648926ac 100644 ---- a/images/Makefile.bcm283x -+++ b/images/Makefile.bcm283x -@@ -9,3 +9,7 @@ image-$(CONFIG_MACH_RPI) += barebox-raspberry-pi-1.img - pblx-$(CONFIG_MACH_RPI2) += start_raspberry_pi2 - FILE_barebox-raspberry-pi-2.img = start_raspberry_pi2.pblx - image-$(CONFIG_MACH_RPI2) += barebox-raspberry-pi-2.img -+ -+pblx-$(CONFIG_MACH_RPI3) += start_raspberry_pi3 -+FILE_barebox-raspberry-pi-3.img = start_raspberry_pi3.pblx -+image-$(CONFIG_MACH_RPI3) += barebox-raspberry-pi-3.img -\ No newline at end of file --- -2.16.1 diff --git a/buildroot-external/board/rpi3/patches/barebox/0002-safely-switch-from-HYP-to-SVC-mode-if-required.patch b/buildroot-external/board/rpi3/patches/barebox/0002-safely-switch-from-HYP-to-SVC-mode-if-required.patch new file mode 100644 index 000000000..7218def6a --- /dev/null +++ b/buildroot-external/board/rpi3/patches/barebox/0002-safely-switch-from-HYP-to-SVC-mode-if-required.patch @@ -0,0 +1,85 @@ +This is a port of the Linux safe_svcmode_maskall macro to +the Barebox lowlevel init. + +Signed-off-by: Lucas Stach +--- + arch/arm/cpu/lowlevel.S | 20 ++++++++++++++++---- + arch/arm/include/asm/system.h | 26 ++++++++++++++++++++++++++ + 2 files changed, 42 insertions(+), 4 deletions(-) + +diff --git a/arch/arm/cpu/lowlevel.S b/arch/arm/cpu/lowlevel.S +index 7696a198e764..194ce0e7c274 100644 +--- a/arch/arm/cpu/lowlevel.S ++++ b/arch/arm/cpu/lowlevel.S +@@ -1,16 +1,28 @@ + #include + #include + #include ++#include + + .section ".text_bare_init_","ax" + ENTRY(arm_cpu_lowlevel_init) + /* save lr, since it may be banked away with a processor mode change */ + mov r2, lr ++ + /* set the cpu to SVC32 mode, mask irq and fiq */ +- mrs r12, cpsr +- bic r12, r12, #0x1f +- orr r12, r12, #0xd3 +- msr cpsr, r12 ++ mrs r12 , cpsr ++ eor r12, r12, #HYP_MODE ++ tst r12, #MODE_MASK ++ bic r12 , r12 , #MODE_MASK ++ orr r12 , r12 , #(PSR_I_BIT | PSR_F_BIT | SVC_MODE) ++THUMB( orr r12 , r12 , #PSR_T_BIT ) ++ bne 1f ++ orr r12, r12, #PSR_A_BIT ++ adr lr, 2f ++ msr spsr_cxsf, r12 ++ __MSR_ELR_HYP(14) ++ __ERET ++1: msr cpsr_c, r12 ++2: + + #if __LINUX_ARM_ARCH__ >= 6 + /* +diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h +index 57c76186b499..55e0f4090295 100644 +--- a/arch/arm/include/asm/system.h ++++ b/arch/arm/include/asm/system.h +@@ -60,6 +60,32 @@ + #define CR_AFE (1 << 29) /* Access flag enable */ + #define CR_TE (1 << 30) /* Thumb exception enable */ + ++/* ++ * PSR bits ++ */ ++#define USR_MODE 0x00000010 ++#define FIQ_MODE 0x00000011 ++#define IRQ_MODE 0x00000012 ++#define SVC_MODE 0x00000013 ++#define ABT_MODE 0x00000017 ++#define HYP_MODE 0x0000001a ++#define UND_MODE 0x0000001b ++#define SYSTEM_MODE 0x0000001f ++#define MODE32_BIT 0x00000010 ++#define MODE_MASK 0x0000001f ++ ++#define PSR_T_BIT 0x00000020 ++#define PSR_F_BIT 0x00000040 ++#define PSR_I_BIT 0x00000080 ++#define PSR_A_BIT 0x00000100 ++#define PSR_E_BIT 0x00000200 ++#define PSR_J_BIT 0x01000000 ++#define PSR_Q_BIT 0x08000000 ++#define PSR_V_BIT 0x10000000 ++#define PSR_C_BIT 0x20000000 ++#define PSR_Z_BIT 0x40000000 ++#define PSR_N_BIT 0x80000000 ++ + #ifndef __ASSEMBLY__ + #if __LINUX_ARM_ARCH__ >= 7 + static inline unsigned int current_el(void) +-- +2.15.1