diff options
Diffstat (limited to 'arch/arm/mach-bcm283x')
-rw-r--r-- | arch/arm/mach-bcm283x/Kconfig | 110 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/gpio.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/mbox.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/sdhci.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/timer.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/include/mach/wdog.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/init.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/mbox.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-bcm283x/phys2bus.c | 2 |
10 files changed, 121 insertions, 16 deletions
diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig index 2315a13438..69f7a4663c 100644 --- a/arch/arm/mach-bcm283x/Kconfig +++ b/arch/arm/mach-bcm283x/Kconfig @@ -1,3 +1,31 @@ +config BCM2835 + bool "Broadcom BCM2835 SoC support" + depends on ARCH_BCM283X + select CPU_ARM1176 + +config BCM2836 + bool "Broadcom BCM2836 SoC support" + depends on ARCH_BCM283X + select ARMV7_LPAE + select CPU_V7 + +config BCM2837 + bool "Broadcom BCM2837 SoC support" + depends on ARCH_BCM283X + +config BCM2837_32B + bool "Broadcom BCM2837 SoC 32-bit support" + depends on ARCH_BCM283X + select BCM2837 + select ARMV7_LPAE + select CPU_V7 + +config BCM2837_64B + bool "Broadcom BCM2837 SoC 64-bit support" + depends on ARCH_BCM283X + select BCM2837 + select ARM64 + menu "Broadcom BCM283X family" depends on ARCH_BCM283X @@ -6,18 +34,87 @@ choice optional config TARGET_RPI - bool "Raspberry Pi" - select CPU_ARM1176 + bool "Raspberry Pi (all BCM2835 variants)" + help + Support for all ARM1176-/BCM2835-based Raspberry Pi variants, such as + the A, A+, B, B+, Compute Module, and Zero. This option cannot + support BCM2836/BCM2837-based Raspberry Pis such as the RPi 2 and + RPi 3 due to different peripheral address maps. + + This option creates a build targetting the ARM1176 ISA. + select BCM2835 config TARGET_RPI_2 bool "Raspberry Pi 2" - select CPU_V7 + help + Support for all BCM2836-based Raspberry Pi variants, such as + the RPi 2 model B. + + This option also supports BCM2837-based variants such as the RPi 3 + Model B, when run in 32-bit mode, provided you have configured the + VideoCore firmware to select the PL011 UART for the console by: + a) config.txt should contain dtoverlay=pi3-miniuart-bt. + b) You should run the following to tell the VC FW to process DT when + booting, and copy u-boot.bin.img (rather than u-boot.bin) to the SD + card as the kernel image: + + path/to/kernel/scripts/mkknlimg --dtok u-boot.bin u-boot.bin.img + + This works as of firmware.git commit 046effa13ebc "firmware: + arm_loader: emmc clock depends on core clock See: + https://github.com/raspberrypi/firmware/issues/572". + + This option creates a build targetting the ARMv7/AArch32 ISA. + select BCM2836 + +config TARGET_RPI_3_32B + bool "Raspberry Pi 3 32-bit build" + help + Support for all BCM2837-based Raspberry Pi variants, such as + the RPi 3 model B, in AArch32 (32-bit) mode. + + This option assumes the VideoCore firmware is configured to use the + mini UART (rather than PL011) for the serial console. This is the + default on the RPi 3. To enable the UART console, the following non- + default option must be present in config.txt: enable_uart=1. This is + required for U-Boot to operate correctly, even if you only care + about the HDMI/usbkbd console. + + This option creates a build targetting the ARMv7/AArch32 ISA. + select BCM2837_32B + +config TARGET_RPI_3 + bool "Raspberry Pi 3 64-bit build" + help + Support for all BCM2837-based Raspberry Pi variants, such as + the RPi 3 model B, in AArch64 (64-bit) mode. + + This option assumes the VideoCore firmware is configured to use the + mini UART (rather than PL011) for the serial console. This is the + default on the RPi 3. To enable the UART console, the following non- + default option must be present in config.txt: enable_uart=1. This is + required for U-Boot to operate correctly, even if you only care + about the HDMI/usbkbd console. + + At the time of writing, the VC FW requires a non-default option in + config.txt to request the ARM CPU boot in 64-bit mode: + arm_control=0x200 + + The VC FW typically provides ARM "stub" code to set up the CPU and + quiesce secondary SMP CPUs. This is not currently true in 64-bit + mode. In order to boot U-Boot before the VC FW is enhanced, please + see the commit description for the commit which added RPi3 support + for a workaround. Since the instructions are temporary, they are not + duplicated here. The VC FW enhancement is tracked in + https://github.com/raspberrypi/firmware/issues/579. + + This option creates a build targetting the ARMv8/AArch64 ISA. + select BCM2837_64B endchoice config SYS_BOARD - default "rpi" if TARGET_RPI - default "rpi_2" if TARGET_RPI_2 + default "rpi" config SYS_VENDOR default "raspberrypi" @@ -26,7 +123,6 @@ config SYS_SOC default "bcm283x" config SYS_CONFIG_NAME - default "rpi" if TARGET_RPI - default "rpi_2" if TARGET_RPI_2 + default "rpi" endmenu diff --git a/arch/arm/mach-bcm283x/Makefile b/arch/arm/mach-bcm283x/Makefile index f0dadd0dbd..5cb1b2fe94 100644 --- a/arch/arm/mach-bcm283x/Makefile +++ b/arch/arm/mach-bcm283x/Makefile @@ -4,5 +4,5 @@ # SPDX-License-Identifier: GPL-2.0 # -obj-$(CONFIG_TARGET_RPI) += lowlevel_init.o +obj-$(CONFIG_BCM2835) += lowlevel_init.o obj-y += init.o reset.o mbox.o phys2bus.o diff --git a/arch/arm/mach-bcm283x/include/mach/gpio.h b/arch/arm/mach-bcm283x/include/mach/gpio.h index c8ef8f528a..e6e5d1605d 100644 --- a/arch/arm/mach-bcm283x/include/mach/gpio.h +++ b/arch/arm/mach-bcm283x/include/mach/gpio.h @@ -9,7 +9,7 @@ #ifndef _BCM2835_GPIO_H_ #define _BCM2835_GPIO_H_ -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 #define BCM2835_GPIO_BASE 0x3f200000 #else #define BCM2835_GPIO_BASE 0x20200000 diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h index 4a143917f0..627acb85dc 100644 --- a/arch/arm/mach-bcm283x/include/mach/mbox.h +++ b/arch/arm/mach-bcm283x/include/mach/mbox.h @@ -38,7 +38,7 @@ /* Raw mailbox HW */ -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 #define BCM2835_MBOX_PHYSADDR 0x3f00b880 #else #define BCM2835_MBOX_PHYSADDR 0x2000b880 diff --git a/arch/arm/mach-bcm283x/include/mach/sdhci.h b/arch/arm/mach-bcm283x/include/mach/sdhci.h index 2a21ccbf66..64e582c114 100644 --- a/arch/arm/mach-bcm283x/include/mach/sdhci.h +++ b/arch/arm/mach-bcm283x/include/mach/sdhci.h @@ -7,7 +7,7 @@ #ifndef _BCM2835_SDHCI_H_ #define _BCM2835_SDHCI_H_ -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 #define BCM2835_SDHCI_BASE 0x3f300000 #else #define BCM2835_SDHCI_BASE 0x20300000 diff --git a/arch/arm/mach-bcm283x/include/mach/timer.h b/arch/arm/mach-bcm283x/include/mach/timer.h index 004c24be36..2a85f230e8 100644 --- a/arch/arm/mach-bcm283x/include/mach/timer.h +++ b/arch/arm/mach-bcm283x/include/mach/timer.h @@ -7,7 +7,7 @@ #ifndef _BCM2835_TIMER_H #define _BCM2835_TIMER_H -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 #define BCM2835_TIMER_PHYSADDR 0x3f003000 #else #define BCM2835_TIMER_PHYSADDR 0x20003000 diff --git a/arch/arm/mach-bcm283x/include/mach/wdog.h b/arch/arm/mach-bcm283x/include/mach/wdog.h index cbc350e84b..7741d7ba15 100644 --- a/arch/arm/mach-bcm283x/include/mach/wdog.h +++ b/arch/arm/mach-bcm283x/include/mach/wdog.h @@ -7,7 +7,7 @@ #ifndef _BCM2835_WDOG_H #define _BCM2835_WDOG_H -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 #define BCM2835_WDOG_PHYSADDR 0x3f100000 #else #define BCM2835_WDOG_PHYSADDR 0x20100000 diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c index d2d366ba4f..4fa94dbeeb 100644 --- a/arch/arm/mach-bcm283x/init.c +++ b/arch/arm/mach-bcm283x/init.c @@ -15,3 +15,10 @@ int arch_cpu_init(void) return 0; } + +#ifdef CONFIG_ARMV7_LPAE +void enable_caches(void) +{ + dcache_enable(); +} +#endif diff --git a/arch/arm/mach-bcm283x/mbox.c b/arch/arm/mach-bcm283x/mbox.c index 311bd8feaa..ec3f417f40 100644 --- a/arch/arm/mach-bcm283x/mbox.c +++ b/arch/arm/mach-bcm283x/mbox.c @@ -115,7 +115,9 @@ int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_hdr *buffer) (unsigned long)((void *)buffer + roundup(buffer->buf_size, ARCH_DMA_MINALIGN))); - ret = bcm2835_mbox_call_raw(chan, phys_to_bus((u32)buffer), &rbuffer); + ret = bcm2835_mbox_call_raw(chan, + phys_to_bus((unsigned long)buffer), + &rbuffer); if (ret) return ret; @@ -123,7 +125,7 @@ int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_hdr *buffer) (unsigned long)((void *)buffer + roundup(buffer->buf_size, ARCH_DMA_MINALIGN))); - if (rbuffer != phys_to_bus((u32)buffer)) { + if (rbuffer != phys_to_bus((unsigned long)buffer)) { printf("mbox: Response buffer mismatch\n"); return -1; } diff --git a/arch/arm/mach-bcm283x/phys2bus.c b/arch/arm/mach-bcm283x/phys2bus.c index fc1c29905d..8e9f49240f 100644 --- a/arch/arm/mach-bcm283x/phys2bus.c +++ b/arch/arm/mach-bcm283x/phys2bus.c @@ -9,7 +9,7 @@ unsigned long phys_to_bus(unsigned long phys) { -#ifdef CONFIG_BCM2836 +#ifndef CONFIG_BCM2835 return 0xc0000000 | phys; #else return 0x40000000 | phys; |