diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig index 1f3031d..a4d291d 100644 --- a/arch/arm/mach-bcm283x/Kconfig +++ b/arch/arm/mach-bcm283x/Kconfig @@ -6,6 +6,10 @@ config BCM2836 bool "Broadcom BCM2836 SoC support" depends on ARCH_BCM283X +config BCM2837 + bool "Broadcom BCM2837 SoC support" + depends on ARCH_BCM283X + menu "Broadcom BCM283X family" depends on ARCH_BCM283X @@ -50,11 +54,28 @@ config TARGET_RPI_2 select BCM2836 select CPU_V7 +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 option creates a build targetting the ARMv7/AArch32 ISA. + select ARMV7_LPAE + select BCM2837 + select CPU_V7 + endchoice config SYS_BOARD default "rpi" if TARGET_RPI default "rpi_2" if TARGET_RPI_2 + default "rpi_3_32b" if TARGET_RPI_3_32B config SYS_VENDOR default "raspberrypi" @@ -65,5 +86,6 @@ config SYS_SOC config SYS_CONFIG_NAME default "rpi" if TARGET_RPI default "rpi_2" if TARGET_RPI_2 + default "rpi_3_32b" if TARGET_RPI_3_32B endmenu diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c index d31a79c..20b5cf4 100644 --- a/board/raspberrypi/rpi/rpi.c +++ b/board/raspberrypi/rpi/rpi.c @@ -1,5 +1,5 @@ /* - * (C) Copyright 2012-2013,2015 Stephen Warren + * (C) Copyright 2012-2016 Stephen Warren * * SPDX-License-Identifier: GPL-2.0 */ @@ -18,6 +18,7 @@ #include #include #include +#include DECLARE_GLOBAL_DATA_PTR; @@ -30,6 +31,7 @@ U_BOOT_DEVICE(bcm2835_gpios) = { .platdata = &gpio_platdata, }; +#ifdef CONFIG_PL01X_SERIAL static const struct pl01x_serial_platdata serial_platdata = { #ifndef CONFIG_BCM2835 .base = 0x3f201000, @@ -44,6 +46,18 @@ U_BOOT_DEVICE(bcm2835_serials) = { .name = "serial_pl01x", .platdata = &serial_platdata, }; +#else +static const struct bcm283x_mu_serial_platdata serial_platdata = { + .base = 0x3f215040, + .clock = 250000000, + .skip_init = true, +}; + +U_BOOT_DEVICE(bcm2837_serials) = { + .name = "serial_bcm283x_mu", + .platdata = &serial_platdata, +}; +#endif struct msg_get_arm_mem { struct bcm2835_mbox_hdr hdr; diff --git a/board/raspberrypi/rpi_3_32b/MAINTAINERS b/board/raspberrypi/rpi_3_32b/MAINTAINERS new file mode 100644 index 0000000..bc9df87 --- /dev/null +++ b/board/raspberrypi/rpi_3_32b/MAINTAINERS @@ -0,0 +1,6 @@ +RPI_3_32B BOARD +M: Stephen Warren +S: Maintained +F: board/raspberrypi/rpi_3_32b/ +F: include/configs/rpi_3_32b.h +F: configs/rpi_3_32b_defconfig diff --git a/board/raspberrypi/rpi_3_32b/Makefile b/board/raspberrypi/rpi_3_32b/Makefile new file mode 100644 index 0000000..78e2874 --- /dev/null +++ b/board/raspberrypi/rpi_3_32b/Makefile @@ -0,0 +1,7 @@ +# +# (C) Copyright 2012-2016 Stephen Warren +# +# SPDX-License-Identifier: GPL-2.0 +# + +obj-y := ../rpi/rpi.o diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig new file mode 100644 index 0000000..71a0c28 --- /dev/null +++ b/configs/rpi_3_32b_defconfig @@ -0,0 +1,11 @@ +CONFIG_ARM=y +CONFIG_ARCH_BCM283X=y +CONFIG_TARGET_RPI_3_32B=y +CONFIG_OF_BOARD_SETUP=y +CONFIG_SYS_PROMPT="U-Boot> " +# CONFIG_CMD_IMLS is not set +# CONFIG_CMD_FLASH is not set +# CONFIG_CMD_FPGA is not set +CONFIG_CMD_GPIO=y +CONFIG_PHYS_TO_BUS=y +CONFIG_OF_LIBFDT=y diff --git a/include/configs/rpi-common.h b/include/configs/rpi-common.h index 89aee0a..5904a32 100644 --- a/include/configs/rpi-common.h +++ b/include/configs/rpi-common.h @@ -1,5 +1,5 @@ /* - * (C) Copyright 2012,2015 Stephen Warren + * (C) Copyright 2012-2016 Stephen Warren * * SPDX-License-Identifier: GPL-2.0 */ @@ -24,6 +24,9 @@ * We don't define a machine type for bcm2709/bcm2836 since the RPi Foundation * chose to use someone else's previously registered machine ID (3139, MX51_GGC) * rather than obtaining a valid ID:-/ + * + * For the bcm2837, hopefully a machine type is not needed, since everything + * is DT. */ #ifdef CONFIG_BCM2835 #define CONFIG_MACH_TYPE MACH_TYPE_BCM2708 @@ -94,7 +97,11 @@ #endif /* Console UART */ +#ifdef CONFIG_BCM2837 +#define CONFIG_BCM283X_MU_SERIAL +#else #define CONFIG_PL01X_SERIAL +#endif #define CONFIG_CONS_INDEX 0 #define CONFIG_BAUDRATE 115200 diff --git a/include/configs/rpi_3_32b.h b/include/configs/rpi_3_32b.h new file mode 100644 index 0000000..c00379b --- /dev/null +++ b/include/configs/rpi_3_32b.h @@ -0,0 +1,15 @@ +/* + * (C) Copyright 2012-2016 Stephen Warren + * + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CONFIG_SKIP_LOWLEVEL_INIT +#define CONFIG_SYS_CACHELINE_SIZE 64 + +#include "rpi-common.h" + +#endif