summaryrefslogtreecommitdiff
path: root/meta-raspberrypi/recipes-bsp
diff options
context:
space:
mode:
Diffstat (limited to 'meta-raspberrypi/recipes-bsp')
-rw-r--r--meta-raspberrypi/recipes-bsp/armstubs/armstubs.bb32
-rw-r--r--meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb2
-rw-r--r--meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb21
-rw-r--r--meta-raspberrypi/recipes-bsp/common/firmware.inc10
-rw-r--r--meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc10
-rw-r--r--meta-raspberrypi/recipes-bsp/common/raspberrypi-tools.inc9
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0001-configs-rpi4-Add-defconfigs-for-rpi4-32-64.patch104
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0002-ARM-bcm283x-Add-BCM283x_BASE-define.patch105
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0003-arm-mach-bcm283x-Define-configs-for-RaspberryPi-4.patch108
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0004-rpi-Add-entry-for-Raspberry-Pi-4-model-B.patch33
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0005-arm-bcm283x-Include-definition-for-additional-emmc-c.patch30
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0006-mmc-bcm2835_sdhci-Add-support-for-bcm2711-device.patch53
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0007-rpi-Add-memory-map-for-bcm2838.patch62
-rw-r--r--meta-raspberrypi/recipes-bsp/u-boot/u-boot_2019.07.bbappend12
14 files changed, 575 insertions, 16 deletions
diff --git a/meta-raspberrypi/recipes-bsp/armstubs/armstubs.bb b/meta-raspberrypi/recipes-bsp/armstubs/armstubs.bb
new file mode 100644
index 0000000000..66f2833346
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/armstubs/armstubs.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Boot strap code that the GPU puts on memory to start running the boot loader"
+LICENSE = "Proprietary"
+
+LIC_FILES_CHKSUM = "file://armstub.S;beginline=1;endline=26;md5=9888f34ac06a676129416c952a6a521e"
+
+inherit deploy nopackages
+
+include recipes-bsp/common/raspberrypi-tools.inc
+
+COMPATIBLE_MACHINE = "^rpi$"
+
+S = "${RPITOOLS_S}/armstubs"
+
+export CC8="${CC}"
+export LD8="${LD}"
+export OBJCOPY8="${OBJCOPY}"
+export OBJDUMP8="${OBJDUMP} -maarch64"
+
+do_compile() {
+ [ -z "${ARMSTUB}" ] && bbfatal "No ARMSTUB defined for your machine."
+ oe_runmake ${ARMSTUB}
+}
+
+do_deploy() {
+ install -d ${DEPLOYDIR}/${PN}
+ cp ${S}/armstub*.bin ${DEPLOYDIR}/${PN}
+}
+
+addtask deploy before do_build after do_install
+do_deploy[dirs] += "${DEPLOYDIR}/${PN}"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb b/meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb
index 466f44381e..0d636f046b 100644
--- a/meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb
+++ b/meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.broadcom;md5=4a4d169737c0786fb9482bb6d30401d1
inherit deploy nopackages
-include recipes-bsp/common/firmware.inc
+include recipes-bsp/common/raspberrypi-firmware.inc
INHIBIT_DEFAULT_DEPS = "1"
diff --git a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
index b3356edff5..160bc16d0a 100644
--- a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
+++ b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
@@ -41,7 +41,7 @@ do_deploy() {
if [ -n "${DISABLE_OVERSCAN}" ]; then
sed -i '/#disable_overscan=/ c\disable_overscan=${DISABLE_OVERSCAN}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
fi
- if [ -n "${DISABLE_SPLASH}" ]; then
+ if [ "${DISABLE_SPLASH}" = "1" ]; then
sed -i '/#disable_splash=/ c\disable_splash=${DISABLE_SPLASH}' ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
fi
@@ -111,25 +111,25 @@ do_deploy() {
fi
# Video camera support
- if [ -n "${VIDEO_CAMERA}" ]; then
+ if [ "${VIDEO_CAMERA}" = "1" ]; then
echo "# Enable video camera" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
echo "start_x=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
fi
# Offline compositing support
- if [ -n "${DISPMANX_OFFLINE}" ]; then
+ if [ "${DISPMANX_OFFLINE}" = "1" ]; then
echo "# Enable offline compositing" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
echo "dispmanx_offline=1" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
fi
# SPI bus support
- if [ -n "${ENABLE_SPI_BUS}" ] || [ "${PITFT}" = "1" ]; then
+ if [ "${ENABLE_SPI_BUS}" = "1" ] || [ "${PITFT}" = "1" ]; then
echo "# Enable SPI bus" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
echo "dtparam=spi=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
fi
# I2C support
- if [ -n "${ENABLE_I2C}" ] || [ "${PITFT}" = "1" ]; then
+ if [ "${ENABLE_I2C}" = "1" ] || [ "${PITFT}" = "1" ]; then
echo "# Enable I2C" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
echo "dtparam=i2c1=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
echo "dtparam=i2c_arm=on" >>${DEPLOYDIR}/bcm2835-bootfiles/config.txt
@@ -191,6 +191,17 @@ do_deploy() {
# Append extra config if the user has provided any
printf "${RPI_EXTRA_CONFIG}\n" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+
+ # Handle setup with armstub file
+ if [ "${@bb.utils.contains("MACHINE_FEATURES", "armstub", "1", "0", d)}" = "1" ]; then
+ echo "\n# ARM stub configuration" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+ echo "armstub=${ARMSTUB}" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+ case "${ARMSTUB}" in
+ *-gic.bin)
+ echo "enable_gic=1" >> ${DEPLOYDIR}/bcm2835-bootfiles/config.txt
+ ;;
+ esac
+ fi
}
do_deploy_append_raspberrypi3-64() {
diff --git a/meta-raspberrypi/recipes-bsp/common/firmware.inc b/meta-raspberrypi/recipes-bsp/common/firmware.inc
deleted file mode 100644
index e2c3b1a148..0000000000
--- a/meta-raspberrypi/recipes-bsp/common/firmware.inc
+++ /dev/null
@@ -1,10 +0,0 @@
-RPIFW_DATE ?= "20190517"
-SRCREV ?= "e1900836948f6c6bdf4571da1b966a9085c95d37"
-RPIFW_SRC_URI ?= "https://github.com/raspberrypi/firmware/archive/${SRCREV}.tar.gz"
-RPIFW_S ?= "${WORKDIR}/firmware-${SRCREV}"
-
-SRC_URI = "${RPIFW_SRC_URI}"
-SRC_URI[md5sum] = "ba272fed3661f0c8d5e4c424d2617246"
-SRC_URI[sha256sum] = "2a4c566e98b16575ebf295b795b40a5772f81282948e957bdc9733cf72fdcd39"
-
-PV = "${RPIFW_DATE}"
diff --git a/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc b/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc
new file mode 100644
index 0000000000..19c24b5825
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/common/raspberrypi-firmware.inc
@@ -0,0 +1,10 @@
+RPIFW_DATE ?= "20190718"
+SRCREV ?= "d36bde339b067bf13b610fd9741d6351c1dafc38"
+RPIFW_SRC_URI ?= "https://github.com/raspberrypi/firmware/archive/${SRCREV}.tar.gz"
+RPIFW_S ?= "${WORKDIR}/firmware-${SRCREV}"
+
+SRC_URI = "${RPIFW_SRC_URI}"
+SRC_URI[md5sum] = "273fe147e3edc92ce38a0ff6bf49e3b9"
+SRC_URI[sha256sum] = "f266df66ce92e7726e894c0c870f0d8e7257434f102ba77bd60640970b689aa3"
+
+PV = "${RPIFW_DATE}"
diff --git a/meta-raspberrypi/recipes-bsp/common/raspberrypi-tools.inc b/meta-raspberrypi/recipes-bsp/common/raspberrypi-tools.inc
new file mode 100644
index 0000000000..1ea65dbd1b
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/common/raspberrypi-tools.inc
@@ -0,0 +1,9 @@
+SRCREV ?= "76f64a28dc4685507d12f57fe5cfc89f6c32f8e6"
+RPITOOLS_SRC_URI ?= "https://github.com/raspberrypi/tools/archive/${SRCREV}.tar.gz"
+RPITOOLS_S ?= "${WORKDIR}/tools-${SRCREV}"
+
+SRC_URI = "${RPITOOLS_SRC_URI}"
+SRC_URI[md5sum] = "e2d4709b62e1536aeaaeabcbae82a03e"
+SRC_URI[sha256sum] = "5f1c5eb8af9dff71b7cae30ffa6541d689d269a7b86013b365215adfb4c1c27d"
+
+PV = "0.0+git${SRCREV}"
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0001-configs-rpi4-Add-defconfigs-for-rpi4-32-64.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0001-configs-rpi4-Add-defconfigs-for-rpi4-32-64.patch
new file mode 100644
index 0000000000..391b26a1c7
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0001-configs-rpi4-Add-defconfigs-for-rpi4-32-64.patch
@@ -0,0 +1,104 @@
+From 5bf85d04b440ce874310e701abded823dc1864bc Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei@balena.io>
+Date: Wed, 17 Jul 2019 15:32:11 +0100
+Subject: [PATCH 1/7] configs: rpi4: Add defconfigs for rpi4 (32/64)
+
+This defines a minimum defconfig for each of the two Raspberry Pi 4
+variants. One notable difference is that we don't have a embedded dt for
+this board given that the fw supplies us with one which we can reuse.
+Furthermore, the ram size is not queryable through mbox interface as the
+maximum reported size is 1G. The fw patches the dt with the right
+memory configuration and uboot uses it as it is. We avoid u-boot
+touching this configuration by making sure CONFIG_ARCH_FIXUP_FDT_MEMORY
+is deactivated.
+
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ configs/rpi_4_32b_defconfig | 33 +++++++++++++++++++++++++++++++++
+ configs/rpi_4_defconfig | 33 +++++++++++++++++++++++++++++++++
+ 2 files changed, 66 insertions(+)
+ create mode 100644 configs/rpi_4_32b_defconfig
+ create mode 100644 configs/rpi_4_defconfig
+
+diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
+new file mode 100644
+index 0000000000..a31a617a5f
+--- /dev/null
++++ b/configs/rpi_4_32b_defconfig
+@@ -0,0 +1,33 @@
++CONFIG_ARM=y
++CONFIG_ARCH_BCM283X=y
++CONFIG_SYS_TEXT_BASE=0x00008000
++CONFIG_TARGET_RPI_4_32B=y
++CONFIG_SYS_MALLOC_F_LEN=0x2000
++CONFIG_DISTRO_DEFAULTS=y
++CONFIG_NR_DRAM_BANKS=1
++# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
++CONFIG_OF_BOARD=y
++CONFIG_OF_BOARD_SETUP=y
++CONFIG_MISC_INIT_R=y
++# CONFIG_DISPLAY_CPUINFO is not set
++# CONFIG_DISPLAY_BOARDINFO is not set
++CONFIG_SYS_PROMPT="U-Boot> "
++# CONFIG_CMD_FLASH is not set
++CONFIG_CMD_GPIO=y
++CONFIG_CMD_MMC=y
++CONFIG_CMD_FS_UUID=y
++CONFIG_ENV_FAT_INTERFACE="mmc"
++CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
++CONFIG_DM_KEYBOARD=y
++CONFIG_DM_MMC=y
++CONFIG_MMC_SDHCI=y
++CONFIG_MMC_SDHCI_BCM2835=y
++CONFIG_PINCTRL=y
++# CONFIG_PINCTRL_GENERIC is not set
++# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
++CONFIG_DM_VIDEO=y
++CONFIG_SYS_WHITE_ON_BLACK=y
++CONFIG_CONSOLE_SCROLL_LINES=10
++CONFIG_PHYS_TO_BUS=y
++CONFIG_OF_LIBFDT_OVERLAY=y
+diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig
+new file mode 100644
+index 0000000000..da8c960a2a
+--- /dev/null
++++ b/configs/rpi_4_defconfig
+@@ -0,0 +1,33 @@
++CONFIG_ARM=y
++CONFIG_ARCH_BCM283X=y
++CONFIG_SYS_TEXT_BASE=0x00080000
++CONFIG_TARGET_RPI_4=y
++CONFIG_SYS_MALLOC_F_LEN=0x2000
++CONFIG_DISTRO_DEFAULTS=y
++CONFIG_NR_DRAM_BANKS=1
++# CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
++CONFIG_OF_BOARD=y
++CONFIG_OF_BOARD_SETUP=y
++CONFIG_MISC_INIT_R=y
++# CONFIG_DISPLAY_CPUINFO is not set
++# CONFIG_DISPLAY_BOARDINFO is not set
++CONFIG_SYS_PROMPT="U-Boot> "
++# CONFIG_CMD_FLASH is not set
++CONFIG_CMD_GPIO=y
++CONFIG_CMD_MMC=y
++CONFIG_CMD_FS_UUID=y
++CONFIG_ENV_FAT_INTERFACE="mmc"
++CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
++CONFIG_DM_KEYBOARD=y
++CONFIG_DM_MMC=y
++CONFIG_MMC_SDHCI=y
++CONFIG_MMC_SDHCI_BCM2835=y
++CONFIG_PINCTRL=y
++# CONFIG_PINCTRL_GENERIC is not set
++# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
++CONFIG_DM_VIDEO=y
++CONFIG_SYS_WHITE_ON_BLACK=y
++CONFIG_CONSOLE_SCROLL_LINES=10
++CONFIG_PHYS_TO_BUS=y
++CONFIG_OF_LIBFDT_OVERLAY=y
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0002-ARM-bcm283x-Add-BCM283x_BASE-define.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0002-ARM-bcm283x-Add-BCM283x_BASE-define.patch
new file mode 100644
index 0000000000..fcf91a6a7a
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0002-ARM-bcm283x-Add-BCM283x_BASE-define.patch
@@ -0,0 +1,105 @@
+From df2aa4c6be33b468adc09de337a055556d1f37fb Mon Sep 17 00:00:00 2001
+From: Matthias Brugger <mbrugger@suse.com>
+Date: Fri, 12 Jul 2019 18:20:53 +0200
+Subject: [PATCH 2/7] ARM: bcm283x: Add BCM283x_BASE define
+
+Devices of bcm283x have different base address, depending if they are on
+bcm2835 or bcm2836/7. Use BCM283x_BASE depending on the SoC you want to
+build and only add the offset in the header files.
+
+Signed-off-by: Matthias Brugger <mbrugger@suse.com>
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ arch/arm/mach-bcm283x/Kconfig | 5 +++++
+ arch/arm/mach-bcm283x/include/mach/mbox.h | 6 +-----
+ arch/arm/mach-bcm283x/include/mach/sdhci.h | 6 +-----
+ arch/arm/mach-bcm283x/include/mach/timer.h | 6 +-----
+ arch/arm/mach-bcm283x/include/mach/wdog.h | 6 +-----
+ 5 files changed, 9 insertions(+), 20 deletions(-)
+
+diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig
+index 3eb5a9a897..8e69914a83 100644
+--- a/arch/arm/mach-bcm283x/Kconfig
++++ b/arch/arm/mach-bcm283x/Kconfig
+@@ -141,4 +141,9 @@ config SYS_SOC
+ config SYS_CONFIG_NAME
+ default "rpi"
+
++config BCM283x_BASE
++ hex
++ default "0x20000000" if BCM2835
++ default "0x3f000000" if BCM2836 || BCM2837
++
+ endmenu
+diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h
+index e3a893e49c..e44c7577da 100644
+--- a/arch/arm/mach-bcm283x/include/mach/mbox.h
++++ b/arch/arm/mach-bcm283x/include/mach/mbox.h
+@@ -37,11 +37,7 @@
+
+ /* Raw mailbox HW */
+
+-#ifndef CONFIG_BCM2835
+-#define BCM2835_MBOX_PHYSADDR 0x3f00b880
+-#else
+-#define BCM2835_MBOX_PHYSADDR 0x2000b880
+-#endif
++#define BCM2835_MBOX_PHYSADDR (CONFIG_BCM283x_BASE + 0x0000b880)
+
+ struct bcm2835_mbox_regs {
+ u32 read;
+diff --git a/arch/arm/mach-bcm283x/include/mach/sdhci.h b/arch/arm/mach-bcm283x/include/mach/sdhci.h
+index 5cb6ec3340..b443c379d8 100644
+--- a/arch/arm/mach-bcm283x/include/mach/sdhci.h
++++ b/arch/arm/mach-bcm283x/include/mach/sdhci.h
+@@ -6,11 +6,7 @@
+ #ifndef _BCM2835_SDHCI_H_
+ #define _BCM2835_SDHCI_H_
+
+-#ifndef CONFIG_BCM2835
+-#define BCM2835_SDHCI_BASE 0x3f300000
+-#else
+-#define BCM2835_SDHCI_BASE 0x20300000
+-#endif
++#define BCM2835_SDHCI_BASE (CONFIG_BCM283x_BASE + 0x00300000)
+
+ int bcm2835_sdhci_init(u32 regbase, u32 emmc_freq);
+
+diff --git a/arch/arm/mach-bcm283x/include/mach/timer.h b/arch/arm/mach-bcm283x/include/mach/timer.h
+index 56b0c356bb..014355e759 100644
+--- a/arch/arm/mach-bcm283x/include/mach/timer.h
++++ b/arch/arm/mach-bcm283x/include/mach/timer.h
+@@ -6,11 +6,7 @@
+ #ifndef _BCM2835_TIMER_H
+ #define _BCM2835_TIMER_H
+
+-#ifndef CONFIG_BCM2835
+-#define BCM2835_TIMER_PHYSADDR 0x3f003000
+-#else
+-#define BCM2835_TIMER_PHYSADDR 0x20003000
+-#endif
++#define BCM2835_TIMER_PHYSADDR (CONFIG_BCM283x_BASE + 0x00003000)
+
+ #define BCM2835_TIMER_CS_M3 (1 << 3)
+ #define BCM2835_TIMER_CS_M2 (1 << 2)
+diff --git a/arch/arm/mach-bcm283x/include/mach/wdog.h b/arch/arm/mach-bcm283x/include/mach/wdog.h
+index 99c88e5df7..00b5e06c3a 100644
+--- a/arch/arm/mach-bcm283x/include/mach/wdog.h
++++ b/arch/arm/mach-bcm283x/include/mach/wdog.h
+@@ -6,11 +6,7 @@
+ #ifndef _BCM2835_WDOG_H
+ #define _BCM2835_WDOG_H
+
+-#ifndef CONFIG_BCM2835
+-#define BCM2835_WDOG_PHYSADDR 0x3f100000
+-#else
+-#define BCM2835_WDOG_PHYSADDR 0x20100000
+-#endif
++#define BCM2835_WDOG_PHYSADDR (CONFIG_BCM283x_BASE + 0x00100000)
+
+ struct bcm2835_wdog_regs {
+ u32 unknown0[7];
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0003-arm-mach-bcm283x-Define-configs-for-RaspberryPi-4.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0003-arm-mach-bcm283x-Define-configs-for-RaspberryPi-4.patch
new file mode 100644
index 0000000000..029cac4967
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0003-arm-mach-bcm283x-Define-configs-for-RaspberryPi-4.patch
@@ -0,0 +1,108 @@
+From c03f551cab8fe38de8f0e1781f0e2e339419b003 Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei@balena.io>
+Date: Wed, 17 Jul 2019 15:33:01 +0100
+Subject: [PATCH 3/7] arm: mach-bcm283x: Define configs for RaspberryPi 4
+
+Define two target configs for Raspberry Pi 4 (32 and 64bit) and the
+corresponding BCM2838* configs.
+
+Be aware of the current limitation in firmware which requires an
+explicit configuration to force the arm in 64bit mode when the
+respective target is used.
+
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Signed-off-by: Matthias Brugger <mbrugger@suse.com>
+Upstream-status: Pending
+---
+ arch/arm/mach-bcm283x/Kconfig | 62 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 62 insertions(+)
+
+diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig
+index 8e69914a83..09a5b42bbb 100644
+--- a/arch/arm/mach-bcm283x/Kconfig
++++ b/arch/arm/mach-bcm283x/Kconfig
+@@ -26,6 +26,23 @@ config BCM2837_64B
+ select BCM2837
+ select ARM64
+
++config BCM2838
++ bool "Broadcom BCM2838 SoC support"
++ depends on ARCH_BCM283X
++
++config BCM2838_32B
++ bool "Broadcom BCM2838 SoC 32-bit support"
++ depends on ARCH_BCM283X
++ select BCM2838
++ select ARMV7_LPAE
++ select CPU_V7A
++
++config BCM2838_64B
++ bool "Broadcom BCM2838 SoC 64-bit support"
++ depends on ARCH_BCM283X
++ select BCM2838
++ select ARM64
++
+ menu "Broadcom BCM283X family"
+ depends on ARCH_BCM283X
+
+@@ -127,6 +144,50 @@ config TARGET_RPI_3
+ This option creates a build targeting the ARMv8/AArch64 ISA.
+ select BCM2837_64B
+
++config TARGET_RPI_4_32B
++ bool "Raspberry Pi 4 32-bit build"
++ help
++ Support for all BCM2838-based Raspberry Pi variants, such as
++ the RPi 4 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 4. 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.
++
++ Due to hardware incompatibilities, this can't be used with
++ BCM283/5/6/7.
++
++ This option creates a build targeting the ARMv7/AArch32 ISA.
++ select BCM2838_32B
++
++config TARGET_RPI_4
++ bool "Raspberry Pi 4 64-bit build"
++ help
++ Support for all BCM2838-based Raspberry Pi variants, such as
++ the RPi 4 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 4. 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.
++
++ Due to hardware incompatibilities, this can't be used with
++ BCM283/5/6/7.
++
++ Also, due to a bug in firmware, switching to 64bit mode doesn't
++ happen automatically based on the kernel's image filename. See
++ https://github.com/raspberrypi/firmware/issues/1193 for more details.
++ Until that is resolved, the configuration (config.txt) needs to
++ explicitly set: arm_64bit=1.
++
++ This option creates a build targeting the ARMv8/AArch64 ISA.
++ select BCM2838_64B
++
+ endchoice
+
+ config SYS_BOARD
+@@ -145,5 +206,6 @@ config BCM283x_BASE
+ hex
+ default "0x20000000" if BCM2835
+ default "0x3f000000" if BCM2836 || BCM2837
++ default "0xfe000000" if BCM2838
+
+ endmenu
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0004-rpi-Add-entry-for-Raspberry-Pi-4-model-B.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0004-rpi-Add-entry-for-Raspberry-Pi-4-model-B.patch
new file mode 100644
index 0000000000..7309d2b228
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0004-rpi-Add-entry-for-Raspberry-Pi-4-model-B.patch
@@ -0,0 +1,33 @@
+From 12fbbd5bc12e225b19d3b4cb193a1bf3d9fa752a Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei@balena.io>
+Date: Wed, 17 Jul 2019 15:34:18 +0100
+Subject: [PATCH 4/7] rpi: Add entry for Raspberry Pi 4 model B
+
+The Raspebrry Pi 4 uses the new revision code scheme as documented by
+the foundation. This change adds an entry for this board as well.
+
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ board/raspberrypi/rpi/rpi.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
+index 617c892dde..92c6534da6 100644
+--- a/board/raspberrypi/rpi/rpi.c
++++ b/board/raspberrypi/rpi/rpi.c
+@@ -148,6 +148,11 @@ static const struct rpi_model rpi_models_new_scheme[] = {
+ DTB_DIR "bcm2837-rpi-cm3.dtb",
+ false,
+ },
++ [0x11] = {
++ "4 Model B",
++ DTB_DIR "bcm2838-rpi-4-b.dtb",
++ true,
++ },
+ };
+
+ static const struct rpi_model rpi_models_old_scheme[] = {
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0005-arm-bcm283x-Include-definition-for-additional-emmc-c.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0005-arm-bcm283x-Include-definition-for-additional-emmc-c.patch
new file mode 100644
index 0000000000..44847e017b
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0005-arm-bcm283x-Include-definition-for-additional-emmc-c.patch
@@ -0,0 +1,30 @@
+From fd99a249e6faf234066a6b5da2ed34aaead3d6d9 Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei@balena.io>
+Date: Fri, 12 Jul 2019 11:26:10 +0100
+Subject: [PATCH 5/7] arm: bcm283x: Include definition for additional emmc
+ clock
+
+This clock has a different mbox ID so have this included in the relevant
+header file.
+
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ arch/arm/mach-bcm283x/include/mach/mbox.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h
+index e44c7577da..f2a98acddd 100644
+--- a/arch/arm/mach-bcm283x/include/mach/mbox.h
++++ b/arch/arm/mach-bcm283x/include/mach/mbox.h
+@@ -230,6 +230,7 @@ struct bcm2835_mbox_tag_set_power_state {
+ #define BCM2835_MBOX_CLOCK_ID_SDRAM 8
+ #define BCM2835_MBOX_CLOCK_ID_PIXEL 9
+ #define BCM2835_MBOX_CLOCK_ID_PWM 10
++#define BCM2835_MBOX_CLOCK_ID_EMMC2 12
+
+ struct bcm2835_mbox_tag_get_clock_rate {
+ struct bcm2835_mbox_tag_hdr tag_hdr;
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0006-mmc-bcm2835_sdhci-Add-support-for-bcm2711-device.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0006-mmc-bcm2835_sdhci-Add-support-for-bcm2711-device.patch
new file mode 100644
index 0000000000..d9de5c4254
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0006-mmc-bcm2835_sdhci-Add-support-for-bcm2711-device.patch
@@ -0,0 +1,53 @@
+From 1f42758fe69648340cfae6cae98e667b88923cf6 Mon Sep 17 00:00:00 2001
+From: Matthias Brugger <mbrugger@suse.com>
+Date: Wed, 10 Jul 2019 13:24:36 +0200
+Subject: [PATCH 6/7] mmc: bcm2835_sdhci: Add support for bcm2711 device
+
+The bcm2711 has two emmc controller. The difference is the clocks
+they use. Add support for the second emmc contoller.
+
+Signed-off-by: Matthias Brugger <mbrugger@suse.com>
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ drivers/mmc/bcm2835_sdhci.c | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mmc/bcm2835_sdhci.c b/drivers/mmc/bcm2835_sdhci.c
+index 08bddd410e..e68dec3be7 100644
+--- a/drivers/mmc/bcm2835_sdhci.c
++++ b/drivers/mmc/bcm2835_sdhci.c
+@@ -178,12 +178,13 @@ static int bcm2835_sdhci_probe(struct udevice *dev)
+ fdt_addr_t base;
+ int emmc_freq;
+ int ret;
++ int clock_id = (int)dev_get_driver_data(dev);
+
+ base = devfdt_get_addr(dev);
+ if (base == FDT_ADDR_T_NONE)
+ return -EINVAL;
+
+- ret = bcm2835_get_mmc_clock(BCM2835_MBOX_CLOCK_ID_EMMC);
++ ret = bcm2835_get_mmc_clock(clock_id);
+ if (ret < 0) {
+ debug("%s: Failed to set MMC clock (err=%d)\n", __func__, ret);
+ return ret;
+@@ -228,7 +229,14 @@ static int bcm2835_sdhci_probe(struct udevice *dev)
+ }
+
+ static const struct udevice_id bcm2835_sdhci_match[] = {
+- { .compatible = "brcm,bcm2835-sdhci" },
++ {
++ .compatible = "brcm,bcm2835-sdhci",
++ .data = BCM2835_MBOX_CLOCK_ID_EMMC
++ },
++ {
++ .compatible = "brcm,bcm2711-emmc2",
++ .data = BCM2835_MBOX_CLOCK_ID_EMMC2
++ },
+ { /* sentinel */ }
+ };
+
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0007-rpi-Add-memory-map-for-bcm2838.patch b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0007-rpi-Add-memory-map-for-bcm2838.patch
new file mode 100644
index 0000000000..1d23d9f99e
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot-2019.07/0007-rpi-Add-memory-map-for-bcm2838.patch
@@ -0,0 +1,62 @@
+From 76b656349a6786fa81cf69ac7762c31675cd567e Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei@balena.io>
+Date: Fri, 12 Jul 2019 14:27:31 +0100
+Subject: [PATCH 7/7] rpi: Add memory map for bcm2838
+
+Define the memory map for the BCM2838 based on the dt configuration
+available in the Raspberry Pi kernel fork.
+
+Signed-off-by: Andrei Gherzan <andrei@balena.io>
+Upstream-status: Pending
+---
+ board/raspberrypi/rpi/rpi.c | 27 ++++++++++++++++++++++++---
+ 1 file changed, 24 insertions(+), 3 deletions(-)
+
+diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
+index 92c6534da6..bddf2a578d 100644
+--- a/board/raspberrypi/rpi/rpi.c
++++ b/board/raspberrypi/rpi/rpi.c
+@@ -249,7 +249,8 @@ static uint32_t rev_type;
+ static const struct rpi_model *model;
+
+ #ifdef CONFIG_ARM64
+-static struct mm_region bcm2837_mem_map[] = {
++#ifndef CONFIG_BCM2838
++static struct mm_region bcm283x_mem_map[] = {
+ {
+ .virt = 0x00000000UL,
+ .phys = 0x00000000UL,
+@@ -268,8 +269,28 @@ static struct mm_region bcm2837_mem_map[] = {
+ 0,
+ }
+ };
+-
+-struct mm_region *mem_map = bcm2837_mem_map;
++#else
++static struct mm_region bcm283x_mem_map[] = {
++ {
++ .virt = 0x00000000UL,
++ .phys = 0x00000000UL,
++ .size = 0xfe000000UL,
++ .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
++ PTE_BLOCK_INNER_SHARE
++ }, {
++ .virt = 0xfe000000UL,
++ .phys = 0xfe000000UL,
++ .size = 0x01800000UL,
++ .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
++ PTE_BLOCK_NON_SHARE |
++ PTE_BLOCK_PXN | PTE_BLOCK_UXN
++ }, {
++ /* List terminator */
++ 0,
++ }
++};
++#endif
++struct mm_region *mem_map = bcm283x_mem_map;
+ #endif
+
+ int dram_init(void)
+--
+2.22.0
+
diff --git a/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2019.07.bbappend b/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2019.07.bbappend
new file mode 100644
index 0000000000..7cd8d66c32
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/u-boot/u-boot_2019.07.bbappend
@@ -0,0 +1,12 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
+UBOOT_RPI4_SUPPORT_PATCHES = " \
+ file://0001-configs-rpi4-Add-defconfigs-for-rpi4-32-64.patch \
+ file://0002-ARM-bcm283x-Add-BCM283x_BASE-define.patch \
+ file://0003-arm-mach-bcm283x-Define-configs-for-RaspberryPi-4.patch \
+ file://0004-rpi-Add-entry-for-Raspberry-Pi-4-model-B.patch \
+ file://0005-arm-bcm283x-Include-definition-for-additional-emmc-c.patch \
+ file://0006-mmc-bcm2835_sdhci-Add-support-for-bcm2711-device.patch \
+ file://0007-rpi-Add-memory-map-for-bcm2838.patch \
+"
+
+SRC_URI_append_raspberrypi4 = "${UBOOT_RPI4_SUPPORT_PATCHES}"