Hello community,

here is the log from the commit of package u-boot for openSUSE:Factory checked 
in at 2019-11-24 00:29:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/u-boot (Old)
 and      /work/SRC/openSUSE:Factory/.u-boot.new.26869 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "u-boot"

Sun Nov 24 00:29:41 2019 rev:114 rq:750286 version:2019.10

Changes:
--------
--- /work/SRC/openSUSE:Factory/u-boot/u-boot.changes    2019-11-20 
10:30:21.946599689 +0100
+++ /work/SRC/openSUSE:Factory/.u-boot.new.26869/u-boot.changes 2019-11-24 
00:29:45.599224171 +0100
@@ -1,0 +2,26 @@
+Wed Nov 20 14:16:24 UTC 2019 - Matthias Brugger <mbrug...@suse.com>
+
+- enable build for one U-Boot image for RPi3/4 (rpiarm64)
+  implements (jsc#59185)
+
+-------------------------------------------------------------------
+Wed Nov 20 14:16:11 UTC 2019 - Matthias Brugger <mbrug...@suse.com>
+
+Patch queue updated from git://github.com/openSUSE/u-boot.git 
tumbleweed-2019.10
+* Patches added:
+  0014-fdt-fix-bcm283x-dm-pre-reloc-defini.patch
+  0015-arm-dts-bcm283x-Rename-U-Boot-file.patch
+  0016-drivers-bcm283x-Set-pre-location-fl.patch
+  0017-pinctrl-bcm283x-Add-compatible-for-.patch
+  0018-rpi-push-fw_dtb_pointer-in-the-.dat.patch
+  0019-ARM-bcm283x-Move-BCM283x_BASE-to-a-.patch
+  0020-ARM-bcm283x-Set-rpi_bcm283x_base-at.patch
+  0021-ARM-bcm283x-Set-memory-map-at-run-t.patch
+  0022-ARM-defconfig-add-unified-config-fo.patch
+
+-------------------------------------------------------------------
+Wed Nov 20 13:20:15 UTC 2019 - Matthias Brugger <mbrug...@suse.com>
+
+- RPi3 delete text base hack in spec file
+
+-------------------------------------------------------------------

New:
----
  0014-fdt-fix-bcm283x-dm-pre-reloc-defini.patch
  0015-arm-dts-bcm283x-Rename-U-Boot-file.patch
  0016-drivers-bcm283x-Set-pre-location-fl.patch
  0017-pinctrl-bcm283x-Add-compatible-for-.patch
  0018-rpi-push-fw_dtb_pointer-in-the-.dat.patch
  0019-ARM-bcm283x-Move-BCM283x_BASE-to-a-.patch
  0020-ARM-bcm283x-Set-rpi_bcm283x_base-at.patch
  0021-ARM-bcm283x-Set-memory-map-at-run-t.patch
  0022-ARM-defconfig-add-unified-config-fo.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ u-boot.spec ++++++
--- /var/tmp/diff_new_pack.6Agr4u/_old  2019-11-24 00:29:48.243224445 +0100
+++ /var/tmp/diff_new_pack.6Agr4u/_new  2019-11-24 00:29:48.247224446 +0100
@@ -74,7 +74,7 @@
 %define is_riscv64 0
 %define tools_only 0
 
-%if "%target" == "rpi" || "%target" == "rpi2" || "%target" == "rpi3" || 
"%target" == "rpi4"
+%if "%target" == "rpi" || "%target" == "rpi2" || "%target" == "rpi3" || 
"%target" == "rpi4" || "%target" == "rpiarm64"
 %define is_rpi 1
 %if "%target" == "rpi"
 %define is_armv6 1
@@ -82,7 +82,7 @@
 %if "%target" == "rpi2"
 %define is_armv7 1
 %endif
-%if "%target" == "rpi3" || "%target" == "rpi4"
+%if "%target" == "rpi3" || "%target" == "rpi4" || "%target" == "rpiarm64"
 %define is_armv8 1
 %endif
 %endif
@@ -235,6 +235,15 @@
 Patch0011:      0011-libfdt-Allow-size-cells-of-0.patch
 Patch0012:      0012-dm-Fix-default-address-cells-return.patch
 Patch0013:      0013-arm-arm11-allow-unaligned-memory-ac.patch
+Patch0014:      0014-fdt-fix-bcm283x-dm-pre-reloc-defini.patch
+Patch0015:      0015-arm-dts-bcm283x-Rename-U-Boot-file.patch
+Patch0016:      0016-drivers-bcm283x-Set-pre-location-fl.patch
+Patch0017:      0017-pinctrl-bcm283x-Add-compatible-for-.patch
+Patch0018:      0018-rpi-push-fw_dtb_pointer-in-the-.dat.patch
+Patch0019:      0019-ARM-bcm283x-Move-BCM283x_BASE-to-a-.patch
+Patch0020:      0020-ARM-bcm283x-Set-rpi_bcm283x_base-at.patch
+Patch0021:      0021-ARM-bcm283x-Set-memory-map-at-run-t.patch
+Patch0022:      0022-ARM-defconfig-add-unified-config-fo.patch
 # Patches: end
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  pkgconfig(sdl)
@@ -298,6 +307,13 @@
 Obsoletes:      Sinovoip_BPI_M2_Plus
 Provides:       Sinovoip_BPI_M2_Plus
 %endif
+%if "%{name}" == "u-boot-rpiarm64"
+# Provides one u-boot image for both RPi3 and RPi4
+Obsoletes:      u-boot-rpi3 < %{version}
+Provides:       u-boot-rpi3 = %{version}
+Obsoletes:      u-boot-rpi4 < %{version}
+Provides:       u-boot-rpi4 = %{version}
+%endif
 
 %if "%{target}" == ""
 ExclusiveArch:  do_not_build
@@ -390,10 +406,6 @@
 make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" $confname
 echo "Attempting to enable fdt apply command (.dtbo) support."
 echo "CONFIG_OF_LIBFDT_OVERLAY=y" >> .config
-%if "%target" == "rpi3"
-echo "Tweaking text base for TF-A."
-echo "CONFIG_SYS_TEXT_BASE=0x11000000" >> .config
-%endif
 make %{?_smp_mflags} CROSS_COMPILE= HOSTCFLAGS="$RPM_OPT_FLAGS" \
 %if ("%{name}" == "u-boot-rock64-rk3328" || "%{name}" == "u-boot-evb-rk3399" 
|| "%{name}" == "u-boot-firefly-rk3399" || "%{name}" == 
"u-boot-rock-pi-4-rk3399") && %{with uboot_atf}
      all u-boot.itb
@@ -492,10 +504,6 @@
 %if "%{name}" == "u-boot-zynqzturn"
 install -D -m 0644 spl/boot.bin %{buildroot}%{uboot_dir}/boot.bin
 %endif
-%if "%{name}" == "u-boot-rpi3"
-echo -e "# Boot in AArch64 mode\narm_control=0x200" > 
%{buildroot}%{uboot_dir}/ubootconfig.txt
-echo -e "\nkernel_address=0x11000000" >> 
%{buildroot}%{uboot_dir}/ubootconfig.txt
-%endif
 
 %if 0%{?is_rpi}
 %post

++++++ 0014-fdt-fix-bcm283x-dm-pre-reloc-defini.patch ++++++
>From 9526bad11cfe6be9e542360ae2db0f51e82d66e7 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Fri, 8 Nov 2019 14:49:46 +0100
Subject: [PATCH] fdt: fix bcm283x dm-pre-reloc definitions

In commmit
143256b353 ("fdt: update bcm283x device tree sources to Linux 5.1-rc6 state")
we deleted the label for the node soc from bcm283x.dtsi

As we don't need to add the property dm-pre-reloc to the soc node,
we can delete it from bcm283x-uboot.dtsi

Tested-by: Tom Rini <tr...@konsulko.com> [RPi 3, 32b and 64b modes]
Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/dts/bcm283x-uboot.dtsi | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/arch/arm/dts/bcm283x-uboot.dtsi b/arch/arm/dts/bcm283x-uboot.dtsi
index 6cc1aa3f93..36548dad62 100644
--- a/arch/arm/dts/bcm283x-uboot.dtsi
+++ b/arch/arm/dts/bcm283x-uboot.dtsi
@@ -6,10 +6,6 @@
  * (C) Copyright 2016 Fabian Vogt <fv...@suse.com>
  */
 
-&soc {
-       u-boot,dm-pre-reloc;
-};
-
 &uart0 {
        skip-init;
        u-boot,dm-pre-reloc;
++++++ 0015-arm-dts-bcm283x-Rename-U-Boot-file.patch ++++++
>From f23fa9de638a899bd26b4a7d95fd0cc4fb63ec2c Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Fri, 8 Nov 2019 14:49:47 +0100
Subject: [PATCH] arm: dts: bcm283x: Rename U-Boot file

Rename the file bcm283x-uboot.dtsi so that it get
automatically include through the scripts/Makefile.lib
using $(CONFIG_SYS_SOC))-u-boot.dtsi

Without this uarts and pincontroller miss the property dm-pre-reloc
and the first call to bcm283x_mu_serial_ofdata_to_platdata() fails
as the pins are not set correctly.
As a result the U-Boot banner isn't shown on boot.

Before commmit
143256b353 ("fdt: update bcm283x device tree sources to Linux 5.1-rc6 state")
we included bcm283x-uboot.dtsi directly in the device-tree file.
Which got deleted by the metioned commit.
This is a much robuster solution.

Reported-by: Tom Rini <tr...@konsulko.com>
Reported-by: Heinrich Schuchardt <xypron.g...@gmx.de>
Tested-by: Tom Rini <tr...@konsulko.com> [RPi 3, 32b and 64b modes]
Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/dts/{bcm283x-uboot.dtsi => bcm283x-u-boot.dtsi} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename arch/arm/dts/{bcm283x-uboot.dtsi => bcm283x-u-boot.dtsi} (100%)

diff --git a/arch/arm/dts/bcm283x-uboot.dtsi b/arch/arm/dts/bcm283x-u-boot.dtsi
similarity index 100%
rename from arch/arm/dts/bcm283x-uboot.dtsi
rename to arch/arm/dts/bcm283x-u-boot.dtsi
++++++ 0016-drivers-bcm283x-Set-pre-location-fl.patch ++++++
>From 0b0820f5ed04171d9b73a149ea0d3470fcea71d1 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Fri, 8 Nov 2019 14:49:48 +0100
Subject: [PATCH] drivers: bcm283x: Set pre-location flag for OF_BOARD

U-Boot support on Raspberry Pi 4 relies on the device-tree
provided by the firmware. The blob does not contain the
U-Boot specific pre-loc-rel properties. The result is, that
the U-Boot banner is not printed.

We fix this by setting the DM_FLAG_PRE_RELOC flag in the driver,
if we rely on a device-tree provided by the firmware.

Reported-by: Heinrich Schuchardt <xypron.g...@gmx.de>
Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 drivers/pinctrl/broadcom/pinctrl-bcm283x.c | 2 +-
 drivers/serial/serial_bcm283x_mu.c         | 2 +-
 drivers/serial/serial_bcm283x_pl011.c      | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c 
b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
index 3be080d29e..1bb91d6eed 100644
--- a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
+++ b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
@@ -148,7 +148,7 @@ U_BOOT_DRIVER(pinctrl_bcm283x) = {
        .priv_auto_alloc_size = sizeof(struct bcm283x_pinctrl_priv),
        .ops            = &bcm283x_pinctrl_ops,
        .probe          = bcm283x_pinctl_probe,
-#if !CONFIG_IS_ENABLED(OF_CONTROL)
+#if !CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_BOARD)
        .flags          = DM_FLAG_PRE_RELOC,
 #endif
 };
diff --git a/drivers/serial/serial_bcm283x_mu.c 
b/drivers/serial/serial_bcm283x_mu.c
index bd1d89ec83..a6ffc84b96 100644
--- a/drivers/serial/serial_bcm283x_mu.c
+++ b/drivers/serial/serial_bcm283x_mu.c
@@ -199,7 +199,7 @@ U_BOOT_DRIVER(serial_bcm283x_mu) = {
        .platdata_auto_alloc_size = sizeof(struct bcm283x_mu_serial_platdata),
        .probe = bcm283x_mu_serial_probe,
        .ops = &bcm283x_mu_serial_ops,
-#if !CONFIG_IS_ENABLED(OF_CONTROL)
+#if !CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_BOARD)
        .flags = DM_FLAG_PRE_RELOC,
 #endif
        .priv_auto_alloc_size = sizeof(struct bcm283x_mu_priv),
diff --git a/drivers/serial/serial_bcm283x_pl011.c 
b/drivers/serial/serial_bcm283x_pl011.c
index 2527bb8b1c..7d8ab7b716 100644
--- a/drivers/serial/serial_bcm283x_pl011.c
+++ b/drivers/serial/serial_bcm283x_pl011.c
@@ -90,7 +90,7 @@ U_BOOT_DRIVER(bcm283x_pl011_uart) = {
        .platdata_auto_alloc_size = sizeof(struct pl01x_serial_platdata),
        .probe  = pl01x_serial_probe,
        .ops    = &bcm283x_pl011_serial_ops,
-#if !CONFIG_IS_ENABLED(OF_CONTROL)
+#if !CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_BOARD)
        .flags  = DM_FLAG_PRE_RELOC,
 #endif
        .priv_auto_alloc_size = sizeof(struct pl01x_priv),
++++++ 0017-pinctrl-bcm283x-Add-compatible-for-.patch ++++++
>From 54f64870ec3aa2ed8d0b5694f1f3f8df5853ee95 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Wed, 6 Nov 2019 15:28:25 +0100
Subject: [PATCH] pinctrl: bcm283x: Add compatible for RPi4

The Raspberry Pi 4 upstream kernel device tree instroduces
a new compatible for the pinctroller. Add this to the driver
so that we can boot with the upstream kernel DT.

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 drivers/pinctrl/broadcom/pinctrl-bcm283x.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c 
b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
index 1bb91d6eed..eb720f09f8 100644
--- a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
+++ b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
@@ -99,6 +99,7 @@ static int bcm283x_pinctrl_get_gpio_mux(struct udevice *dev, 
int banknum,
 
 static const struct udevice_id bcm2835_pinctrl_id[] = {
        {.compatible = "brcm,bcm2835-gpio"},
+       {.compatible = "brcm,bcm2711-gpio"},
        {}
 };
 
++++++ 0018-rpi-push-fw_dtb_pointer-in-the-.dat.patch ++++++
>From 9dfd6a0669ac5e299229b90baaa27efe8cc8e927 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Tue, 19 Nov 2019 16:01:02 +0100
Subject: [PATCH] rpi: push fw_dtb_pointer in the .data section

The fw_dtb_pointer was defined in the assembly code, which makes him
live in section .text_rest
Put that's not necessary, we can push the variable in the .data section.

This will prevent relocation errors like:
board/raspberrypi/rpi/rpi.c:317:(.text.board_get_usable_ram_top+0x8):
relocation truncated to fit: R_AARCH64_LDST64_ABS_LO12_NC against symbol
`fw_dtb_pointer' defined in .text section in board/raspberrypi/rpi/built-in.o

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 board/raspberrypi/rpi/lowlevel_init.S | 12 ++----------
 board/raspberrypi/rpi/rpi.c           |  7 +++++--
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/board/raspberrypi/rpi/lowlevel_init.S 
b/board/raspberrypi/rpi/lowlevel_init.S
index 435eed521f..8c39b3e12e 100644
--- a/board/raspberrypi/rpi/lowlevel_init.S
+++ b/board/raspberrypi/rpi/lowlevel_init.S
@@ -6,15 +6,6 @@
 
 #include <config.h>
 
-.align 8
-.global fw_dtb_pointer
-fw_dtb_pointer:
-#ifdef CONFIG_ARM64
-       .dword 0x0
-#else
-       .word 0x0
-#endif
-
 /*
  * Routine: save_boot_params (called after reset from start.S)
  * Description: save ATAG/FDT address provided by the firmware at boot time
@@ -28,7 +19,8 @@ save_boot_params:
        adr     x8, fw_dtb_pointer
        str     x0, [x8]
 #else
-       str     r2, fw_dtb_pointer
+       ldr     r8, =fw_dtb_pointer
+       str     r2, [r8]
 #endif
 
        /* Returns */
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index 9e0abdda31..e84a1db14a 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -27,8 +27,11 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-/* From lowlevel_init.S */
-extern unsigned long fw_dtb_pointer;
+/* Assigned in lowlevel_init.S
+ * Push the variable into the .data section so that it
+ * does not get cleared later.
+ */
+unsigned long __section(".data") fw_dtb_pointer;
 
 /* TODO(s...@chromium.org): Move these to the msg.c file */
 struct msg_get_arm_mem {
++++++ 0019-ARM-bcm283x-Move-BCM283x_BASE-to-a-.patch ++++++
>From 3f5c91a5809b13ee0f2f75bda107398fede7536a Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Tue, 19 Nov 2019 16:01:03 +0100
Subject: [PATCH] ARM: bcm283x: Move BCM283x_BASE to a global variable

We move the per SOC define BCM283x_BASE to a global variable.
This is a first step to provide a single binary for several bcm283x
SoCs.

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/mach-bcm283x/include/mach/base.h  | 11 +++++++++++
 arch/arm/mach-bcm283x/include/mach/mbox.h  |  4 +++-
 arch/arm/mach-bcm283x/include/mach/sdhci.h |  5 ++++-
 arch/arm/mach-bcm283x/include/mach/timer.h |  7 ++++++-
 arch/arm/mach-bcm283x/include/mach/wdog.h  |  5 ++++-
 arch/arm/mach-bcm283x/init.c               |  8 ++++++++
 arch/arm/mach-bcm283x/mbox.c               |  1 +
 arch/arm/mach-bcm283x/reset.c              | 20 +++++++++++++++-----
 include/configs/rpi.h                      |  4 ++++
 9 files changed, 56 insertions(+), 9 deletions(-)
 create mode 100644 arch/arm/mach-bcm283x/include/mach/base.h

diff --git a/arch/arm/mach-bcm283x/include/mach/base.h 
b/arch/arm/mach-bcm283x/include/mach/base.h
new file mode 100644
index 0000000000..c4ae39852f
--- /dev/null
+++ b/arch/arm/mach-bcm283x/include/mach/base.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * (C) Copyright 2019 Matthias Brugger
+ */
+
+#ifndef _BCM283x_BASE_H_
+#define _BCM283x_BASE_H_
+
+extern unsigned long rpi_bcm283x_base;
+
+#endif
diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h 
b/arch/arm/mach-bcm283x/include/mach/mbox.h
index 0b6c2543d5..60e226ce1d 100644
--- a/arch/arm/mach-bcm283x/include/mach/mbox.h
+++ b/arch/arm/mach-bcm283x/include/mach/mbox.h
@@ -7,6 +7,7 @@
 #define _BCM2835_MBOX_H
 
 #include <linux/compiler.h>
+#include <asm/arch/base.h>
 
 /*
  * The BCM2835 SoC contains (at least) two CPUs; the VideoCore (a/k/a "GPU")
@@ -37,7 +38,8 @@
 
 /* Raw mailbox HW */
 
-#define BCM2835_MBOX_PHYSADDR  (CONFIG_BCM283x_BASE + 0x0000b880)
+#define BCM2835_MBOX_PHYSADDR ({ BUG_ON(!rpi_bcm283x_base); \
+                                rpi_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 b443c379d8..7323690687 100644
--- a/arch/arm/mach-bcm283x/include/mach/sdhci.h
+++ b/arch/arm/mach-bcm283x/include/mach/sdhci.h
@@ -6,7 +6,10 @@
 #ifndef _BCM2835_SDHCI_H_
 #define _BCM2835_SDHCI_H_
 
-#define BCM2835_SDHCI_BASE (CONFIG_BCM283x_BASE + 0x00300000)
+#include <asm/arch/base.h>
+
+#define BCM2835_SDHCI_PHYSADDR ({ BUG_ON(!rpi_bcm283x_base); \
+                                 rpi_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 014355e759..54f733a956 100644
--- a/arch/arm/mach-bcm283x/include/mach/timer.h
+++ b/arch/arm/mach-bcm283x/include/mach/timer.h
@@ -6,7 +6,12 @@
 #ifndef _BCM2835_TIMER_H
 #define _BCM2835_TIMER_H
 
-#define BCM2835_TIMER_PHYSADDR (CONFIG_BCM283x_BASE + 0x00003000)
+#ifndef __ASSEMBLY__
+#include <asm/arch/base.h>
+#endif
+
+#define BCM2835_TIMER_PHYSADDR ({ BUG_ON(!rpi_bcm283x_base); \
+                                 rpi_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 8292b3cf1f..9942666720 100644
--- a/arch/arm/mach-bcm283x/include/mach/wdog.h
+++ b/arch/arm/mach-bcm283x/include/mach/wdog.h
@@ -6,7 +6,10 @@
 #ifndef _BCM2835_WDOG_H
 #define _BCM2835_WDOG_H
 
-#define BCM2835_WDOG_PHYSADDR  (CONFIG_BCM283x_BASE + 0x00100000)
+#include <asm/arch/base.h>
+
+#define BCM2835_WDOG_PHYSADDR ({ BUG_ON(!rpi_bcm283x_base); \
+                                rpi_bcm283x_base + 0x00100000; })
 
 struct bcm2835_wdog_regs {
        u32 unknown0[7];
diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c
index 97414415a6..d36017e823 100644
--- a/arch/arm/mach-bcm283x/init.c
+++ b/arch/arm/mach-bcm283x/init.c
@@ -8,6 +8,8 @@
 
 #include <common.h>
 
+unsigned long rpi_bcm283x_base;
+
 int arch_cpu_init(void)
 {
        icache_enable();
@@ -15,6 +17,12 @@ int arch_cpu_init(void)
        return 0;
 }
 
+int mach_cpu_init(void)
+{
+       rpi_bcm283x_base = CONFIG_BCM283x_BASE;
+
+       return 0;
+}
 #ifdef CONFIG_ARMV7_LPAE
 void enable_caches(void)
 {
diff --git a/arch/arm/mach-bcm283x/mbox.c b/arch/arm/mach-bcm283x/mbox.c
index 3c67f68c17..467d0d5fba 100644
--- a/arch/arm/mach-bcm283x/mbox.c
+++ b/arch/arm/mach-bcm283x/mbox.c
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <asm/io.h>
+#include <asm/arch/base.h>
 #include <asm/arch/mbox.h>
 #include <phys2bus.h>
 
diff --git a/arch/arm/mach-bcm283x/reset.c b/arch/arm/mach-bcm283x/reset.c
index b3da0c7cd6..cd8138d702 100644
--- a/arch/arm/mach-bcm283x/reset.c
+++ b/arch/arm/mach-bcm283x/reset.c
@@ -8,6 +8,7 @@
 
 #include <common.h>
 #include <asm/io.h>
+#include <asm/arch/base.h>
 #include <asm/arch/wdog.h>
 #include <efi_loader.h>
 
@@ -25,10 +26,10 @@
 
 void hw_watchdog_disable(void) {}
 
-__efi_runtime_data struct bcm2835_wdog_regs *wdog_regs =
-       (struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
+__efi_runtime_data struct bcm2835_wdog_regs *wdog_regs;
 
-void __efi_runtime reset_cpu(ulong ticks)
+static void __efi_runtime
+__reset_cpu(struct bcm2835_wdog_regs *wdog_regs, ulong ticks)
 {
        uint32_t rstc, timeout;
 
@@ -46,6 +47,14 @@ void __efi_runtime reset_cpu(ulong ticks)
        writel(BCM2835_WDOG_PASSWORD | rstc, &wdog_regs->rstc);
 }
 
+void reset_cpu(ulong ticks)
+{
+       struct bcm2835_wdog_regs *regs =
+               (struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
+
+       __reset_cpu(regs, 0);
+}
+
 #ifdef CONFIG_EFI_LOADER
 
 void __efi_runtime EFIAPI efi_reset_system(
@@ -58,7 +67,7 @@ void __efi_runtime EFIAPI efi_reset_system(
        if (reset_type == EFI_RESET_COLD ||
            reset_type == EFI_RESET_WARM ||
            reset_type == EFI_RESET_PLATFORM_SPECIFIC) {
-               reset_cpu(0);
+               __reset_cpu(wdog_regs, 0);
        } else if (reset_type == EFI_RESET_SHUTDOWN) {
                /*
                 * We set the watchdog hard reset bit here to distinguish this 
reset
@@ -69,7 +78,7 @@ void __efi_runtime EFIAPI efi_reset_system(
                val |= BCM2835_WDOG_PASSWORD;
                val |= BCM2835_WDOG_RSTS_RASPBERRYPI_HALT;
                writel(val, &wdog_regs->rsts);
-               reset_cpu(0);
+               __reset_cpu(wdog_regs, 0);
        }
 
        while (1) { }
@@ -77,6 +86,7 @@ void __efi_runtime EFIAPI efi_reset_system(
 
 efi_status_t efi_reset_system_init(void)
 {
+       wdog_regs = (struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
        return efi_add_runtime_mmio(&wdog_regs, sizeof(*wdog_regs));
 }
 
diff --git a/include/configs/rpi.h b/include/configs/rpi.h
index 77d2d5458a..69b09f3f72 100644
--- a/include/configs/rpi.h
+++ b/include/configs/rpi.h
@@ -9,6 +9,10 @@
 #include <linux/sizes.h>
 #include <asm/arch/timer.h>
 
+#ifndef __ASSEMBLY__
+#include <asm/arch/base.h>
+#endif
+
 #if defined(CONFIG_TARGET_RPI_2) || defined(CONFIG_TARGET_RPI_3_32B)
 #define CONFIG_SKIP_LOWLEVEL_INIT
 #endif
++++++ 0020-ARM-bcm283x-Set-rpi_bcm283x_base-at.patch ++++++
>From 068815ca7495a41e28b62e119e54e956eb7bc8d7 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Tue, 19 Nov 2019 16:01:04 +0100
Subject: [PATCH] ARM: bcm283x: Set rpi_bcm283x_base at run-time

As part of the effort to create one binary for several bcm83x SoCs
we read the IO base address from device-tree.

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/mach-bcm283x/Kconfig |  6 ------
 arch/arm/mach-bcm283x/init.c  | 20 ++++++++++++++++++--
 2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig
index b08275f598..e8e0ff0eb4 100644
--- a/arch/arm/mach-bcm283x/Kconfig
+++ b/arch/arm/mach-bcm283x/Kconfig
@@ -202,10 +202,4 @@ config SYS_SOC
 config SYS_CONFIG_NAME
        default "rpi"
 
-config BCM283x_BASE
-       hex
-       default "0x20000000" if BCM2835
-       default "0x3f000000" if BCM2836 || BCM2837
-       default "0xfe000000" if BCM2711
-
 endmenu
diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c
index d36017e823..b3f3dfabea 100644
--- a/arch/arm/mach-bcm283x/init.c
+++ b/arch/arm/mach-bcm283x/init.c
@@ -7,8 +7,10 @@
  */
 
 #include <common.h>
+#include <dm/device.h>
+#include <fdt_support.h>
 
-unsigned long rpi_bcm283x_base;
+unsigned long rpi_bcm283x_base = 0x3f000000;
 
 int arch_cpu_init(void)
 {
@@ -19,10 +21,24 @@ int arch_cpu_init(void)
 
 int mach_cpu_init(void)
 {
-       rpi_bcm283x_base = CONFIG_BCM283x_BASE;
+       int ret, soc_offset;
+       u64 io_base, size;
+
+       /* Get IO base from device tree */
+       soc_offset = fdt_path_offset(gd->fdt_blob, "/soc");
+       if (soc_offset < 0)
+               return soc_offset;
+
+       ret = fdt_read_range((void *)gd->fdt_blob, soc_offset, 0, NULL,
+                               &io_base, &size);
+       if (ret)
+               return ret;
+
+       rpi_bcm283x_base = io_base;
 
        return 0;
 }
+
 #ifdef CONFIG_ARMV7_LPAE
 void enable_caches(void)
 {
++++++ 0021-ARM-bcm283x-Set-memory-map-at-run-t.patch ++++++
>From 2954695f440f60b19f379e83b950031fcbacfb2f Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Tue, 19 Nov 2019 16:01:05 +0100
Subject: [PATCH] ARM: bcm283x: Set memory map at run-time

For bcm283x based on arm64 we also have to change the mm_region.
Add assign this in mach_cpu_init() so we can create now one binary
for RPi3 and RPi4.

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/mach-bcm283x/init.c | 92 ++++++++++++++++++++++++++++++++++++
 board/raspberrypi/rpi/rpi.c  | 45 ------------------
 2 files changed, 92 insertions(+), 45 deletions(-)

diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c
index b3f3dfabea..6fb41a99b2 100644
--- a/arch/arm/mach-bcm283x/init.c
+++ b/arch/arm/mach-bcm283x/init.c
@@ -10,6 +10,96 @@
 #include <dm/device.h>
 #include <fdt_support.h>
 
+#ifdef CONFIG_ARM64
+#include <asm/armv8/mmu.h>
+
+static struct mm_region bcm283x_mem_map[] = {
+       {
+               .virt = 0x00000000UL,
+               .phys = 0x00000000UL,
+               .size = 0x3f000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+                        PTE_BLOCK_INNER_SHARE
+       }, {
+               .virt = 0x3f000000UL,
+               .phys = 0x3f000000UL,
+               .size = 0x01000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                        PTE_BLOCK_NON_SHARE |
+                        PTE_BLOCK_PXN | PTE_BLOCK_UXN
+       }, {
+               /* List terminator */
+               0,
+       }
+};
+
+static struct mm_region bcm2711_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,
+       }
+};
+
+struct mm_region *mem_map = bcm283x_mem_map;
+
+/*
+ * I/O address space varies on different chip versions.
+ * We set the base address by inspecting the DTB.
+ */
+static const struct udevice_id board_ids[] = {
+       { .compatible = "brcm,bcm2837", .data = (ulong)&bcm283x_mem_map},
+       { .compatible = "brcm,bcm2838", .data = (ulong)&bcm2711_mem_map},
+       { .compatible = "brcm,bcm2711", .data = (ulong)&bcm2711_mem_map},
+       { },
+};
+
+static void _rpi_update_mem_map(struct mm_region *pd)
+{
+       int i;
+
+       for (i = 0; i < 2; i++) {
+               mem_map[i].virt = pd[i].virt;
+               mem_map[i].phys = pd[i].phys;
+               mem_map[i].size = pd[i].size;
+               mem_map[i].attrs = pd[i].attrs;
+       }
+}
+
+static void rpi_update_mem_map(void)
+{
+       int ret;
+       struct mm_region *mm;
+       const struct udevice_id *of_match = board_ids;
+
+       while (of_match->compatible) {
+               ret = fdt_node_check_compatible(gd->fdt_blob, 0,
+                                               of_match->compatible);
+               if (!ret) {
+                       mm = (struct mm_region *)of_match->data;
+                       _rpi_update_mem_map(mm);
+                       break;
+               }
+
+               of_match++;
+       }
+}
+#else
+static void rpi_update_mem_map(void) {}
+#endif
+
 unsigned long rpi_bcm283x_base = 0x3f000000;
 
 int arch_cpu_init(void)
@@ -24,6 +114,8 @@ int mach_cpu_init(void)
        int ret, soc_offset;
        u64 io_base, size;
 
+       rpi_update_mem_map();
+
        /* Get IO base from device tree */
        soc_offset = fdt_path_offset(gd->fdt_blob, "/soc");
        if (soc_offset < 0)
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index e84a1db14a..3d4afaf653 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -251,51 +251,6 @@ static uint32_t rev_scheme;
 static uint32_t rev_type;
 static const struct rpi_model *model;
 
-#ifdef CONFIG_ARM64
-#ifndef CONFIG_BCM2711
-static struct mm_region bcm283x_mem_map[] = {
-       {
-               .virt = 0x00000000UL,
-               .phys = 0x00000000UL,
-               .size = 0x3f000000UL,
-               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
-                        PTE_BLOCK_INNER_SHARE
-       }, {
-               .virt = 0x3f000000UL,
-               .phys = 0x3f000000UL,
-               .size = 0x01000000UL,
-               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-                        PTE_BLOCK_NON_SHARE |
-                        PTE_BLOCK_PXN | PTE_BLOCK_UXN
-       }, {
-               /* List terminator */
-               0,
-       }
-};
-#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)
 {
        ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_arm_mem, msg, 1);
++++++ 0022-ARM-defconfig-add-unified-config-fo.patch ++++++
>From 51b57e87c48f5a75971817ae80a2fd113f26da74 Mon Sep 17 00:00:00 2001
From: Matthias Brugger <mbrug...@suse.com>
Date: Wed, 6 Nov 2019 15:41:03 +0100
Subject: [PATCH] ARM: defconfig: add unified config for RPi3 and RPi4

Provide a defconfig which allows us to boot Raspberrry Pi 4
and Raspberry Pi 3 Model B/B+
Instead of using the embedded DTB as done in RPi3 we use the
devicetree provided by the firmware.

Signed-off-by: Matthias Brugger <mbrug...@suse.com>
---
 arch/arm/mach-bcm283x/Kconfig |  7 ++++++
 configs/rpi_arm64_defconfig   | 45 +++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
 create mode 100644 configs/rpi_arm64_defconfig

diff --git a/arch/arm/mach-bcm283x/Kconfig b/arch/arm/mach-bcm283x/Kconfig
index e8e0ff0eb4..00419bf254 100644
--- a/arch/arm/mach-bcm283x/Kconfig
+++ b/arch/arm/mach-bcm283x/Kconfig
@@ -188,6 +188,13 @@ config TARGET_RPI_4
          This option creates a build targeting the ARMv8/AArch64 ISA.
        select BCM2711_64B
 
+config TARGET_RPI_ARM64
+       bool "Raspberry Pi one binary 64-bit build"
+       help
+         Support for all armv8 based Raspberry Pi variants, such as
+         the RPi 4 model B, in AArch64 (64-bit) mode.
+       select ARM64
+
 endchoice
 
 config SYS_BOARD
diff --git a/configs/rpi_arm64_defconfig b/configs/rpi_arm64_defconfig
new file mode 100644
index 0000000000..f4e113f58c
--- /dev/null
+++ b/configs/rpi_arm64_defconfig
@@ -0,0 +1,45 @@
+CONFIG_ARM=y
+CONFIG_ARM64=y
+CONFIG_TARGET_RPI_ARM64=y
+CONFIG_ARCH_BCM283X=y
+CONFIG_SYS_TEXT_BASE=0x00080000
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_NR_DRAM_BANKS=2
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_USE_PREBOOT=y
+CONFIG_PREBOOT="usb start"
+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_USB=y
+CONFIG_CMD_FS_UUID=y
+CONFIG_OF_BOARD=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_PHYLIB=y
+CONFIG_DM_ETH=y
+CONFIG_PINCTRL=y
+# CONFIG_PINCTRL_GENERIC is not set
+# CONFIG_REQUIRE_SERIAL_CONSOLE is not set
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_DWC2=y
+CONFIG_USB_KEYBOARD=y
+CONFIG_USB_HOST_ETHER=y
+CONFIG_USB_ETHER_LAN78XX=y
+CONFIG_USB_ETHER_SMSC95XX=y
+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
++++++ _multibuild ++++++
--- /var/tmp/diff_new_pack.6Agr4u/_old  2019-11-24 00:29:48.315224453 +0100
+++ /var/tmp/diff_new_pack.6Agr4u/_new  2019-11-24 00:29:48.315224453 +0100
@@ -71,6 +71,7 @@
   <flavor>rpi2</flavor>
   <flavor>rpi3</flavor>
   <flavor>rpi4</flavor>
+  <flavor>rpiarm64</flavor>
   <flavor>sifivefu540</flavor>
   <flavor>snow</flavor>
   <flavor>socfpgade0nanosoc</flavor>




Reply via email to