Hello community,

here is the log from the commit of package u-boot for openSUSE:Leap:15.2 
checked in at 2020-05-07 19:29:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/u-boot (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.u-boot.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "u-boot"

Thu May  7 19:29:01 2020 rev:59 rq:801260 version:2020.01

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/u-boot/u-boot.changes  2020-04-17 
13:37:33.452220520 +0200
+++ /work/SRC/openSUSE:Leap:15.2/.u-boot.new.2738/u-boot.changes        
2020-05-07 19:38:10.322790469 +0200
@@ -1,0 +2,26 @@
+Wed May  6 07:39:58 UTC 2020 - Matthias Brugger <mbrug...@suse.com>
+
+- Enable USB on RPi4 (jsc#SLE-12150)
+Patch queue updated from git://github.com/openSUSE/u-boot.git sle15-sp2
+* Patches added:
+  0022-usb-xhci-Add-missing-cache-flush-in.patch
+  0023-usb-xhci-Use-only-32-bit-accesses-i.patch
+  0024-pci-Move-some-PCIe-register-offset-.patch
+  0025-rpi4-shorten-a-mapping-for-the-DRAM.patch
+  0026-rpi4-add-a-mapping-for-the-PCIe-XHC.patch
+  0027-linux-bitfield.h-Add-primitives-for.patch
+  0028-pci-Add-some-PCI-Express-capability.patch
+  0029-pci-Add-driver-for-Broadcom-STB-PCI.patch
+  0030-config-Enable-support-for-the-XHCI-.patch
+  0031-arm-rpi-Add-function-to-trigger-VL8.patch
+  0032-usb-xhci-Load-Raspberry-Pi-4-VL805-.patch
+
+-------------------------------------------------------------------
+Mon May  4 16:31:16 UTC 2020 - Matthias Brugger <mbrug...@suse.com>
+
+Fix grub2 console (bsc#1166971, bsc#1160464)
+Patch queue updated from git://github.com/openSUSE/u-boot.git sle15-sp2
+* Patches added:
+  0021-efi_loader-imply-VIDEO_ANSI.patch
+
+-------------------------------------------------------------------

New:
----
  0021-efi_loader-imply-VIDEO_ANSI.patch
  0022-usb-xhci-Add-missing-cache-flush-in.patch
  0023-usb-xhci-Use-only-32-bit-accesses-i.patch
  0024-pci-Move-some-PCIe-register-offset-.patch
  0025-rpi4-shorten-a-mapping-for-the-DRAM.patch
  0026-rpi4-add-a-mapping-for-the-PCIe-XHC.patch
  0027-linux-bitfield.h-Add-primitives-for.patch
  0028-pci-Add-some-PCI-Express-capability.patch
  0029-pci-Add-driver-for-Broadcom-STB-PCI.patch
  0030-config-Enable-support-for-the-XHCI-.patch
  0031-arm-rpi-Add-function-to-trigger-VL8.patch
  0032-usb-xhci-Load-Raspberry-Pi-4-VL805-.patch

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

Other differences:
------------------
++++++ u-boot.spec ++++++
--- /var/tmp/diff_new_pack.m25LUr/_old  2020-05-07 19:38:12.082793991 +0200
+++ /var/tmp/diff_new_pack.m25LUr/_new  2020-05-07 19:38:12.082793991 +0200
@@ -221,6 +221,18 @@
 Patch0018:      0018-net-bcmgenet-Don-t-set-ID_MODE_DIS-.patch
 Patch0019:      0019-uboot-fs-btrfs-Use-LZO_LEN-to-repla.patch
 Patch0020:      0020-uboot-fs-btrfs-Fix-LZO-false-decomp.patch
+Patch0021:      0021-efi_loader-imply-VIDEO_ANSI.patch
+Patch0022:      0022-usb-xhci-Add-missing-cache-flush-in.patch
+Patch0023:      0023-usb-xhci-Use-only-32-bit-accesses-i.patch
+Patch0024:      0024-pci-Move-some-PCIe-register-offset-.patch
+Patch0025:      0025-rpi4-shorten-a-mapping-for-the-DRAM.patch
+Patch0026:      0026-rpi4-add-a-mapping-for-the-PCIe-XHC.patch
+Patch0027:      0027-linux-bitfield.h-Add-primitives-for.patch
+Patch0028:      0028-pci-Add-some-PCI-Express-capability.patch
+Patch0029:      0029-pci-Add-driver-for-Broadcom-STB-PCI.patch
+Patch0030:      0030-config-Enable-support-for-the-XHCI-.patch
+Patch0031:      0031-arm-rpi-Add-function-to-trigger-VL8.patch
+Patch0032:      0032-usb-xhci-Load-Raspberry-Pi-4-VL805-.patch
 # Patches: end
 BuildRequires:  bc
 BuildRequires:  bison

++++++ 0021-efi_loader-imply-VIDEO_ANSI.patch ++++++
>From bb1b7896523272adc3139b9c8f17f008273b1e73 Mon Sep 17 00:00:00 2001
From: Heinrich Schuchardt <xypron.g...@gmx.de>
Date: Wed, 15 Jan 2020 00:49:35 +0100
Subject: [PATCH] efi_loader: imply VIDEO_ANSI

UEFI programs like GRUB make change terminal colors which requires support
for ANSI escape sequences.

Let CONFIG_EFI_LOADER=y imply CONFIG_VIDEO_ANSI.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
 lib/efi_loader/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 21ef440341..5016a61f49 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -15,6 +15,7 @@ config EFI_LOADER
        select HAVE_BLOCK_DEVICE
        select REGEX
        imply CFB_CONSOLE_ANSI
+       imply VIDEO_ANSI
        help
          Select this option if you want to run UEFI applications (like GNU
          GRUB or iPXE) on top of U-Boot. If this option is enabled, U-Boot
++++++ 0022-usb-xhci-Add-missing-cache-flush-in.patch ++++++
>From 92a2d04e443ce6e8b68e8746a745e688a094681f Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <s.nawro...@samsung.com>
Date: Mon, 4 May 2020 14:45:14 +0200
Subject: [PATCH] usb: xhci: Add missing cache flush in the scratchpad array
 initialization

In current code there is no cache flush after initializing the scratchpad
buffer array with the scratchpad buffer pointers. This leads to a failure
of the "slot enable" command on the rpi4 board (Broadcom STB PCIe
controller + VL805 USB hub) - the very first TRB transfer on the command
ring fails and there is a timeout while waiting for the command completion
event. After adding the missing cache flush everything seems to be working
as expected.

Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Bin Meng <bmeng...@gmail.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 drivers/usb/host/xhci-mem.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 93450ee3b7..729bdc3c84 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -393,6 +393,9 @@ static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl)
                scratchpad->sp_array[i] = cpu_to_le64(ptr);
        }
 
+       xhci_flush_cache((uintptr_t)scratchpad->sp_array,
+                        sizeof(u64) * num_sp);
+
        return 0;
 
 fail_sp3:
++++++ 0023-usb-xhci-Use-only-32-bit-accesses-i.patch ++++++
>From 42e35c6b2f72c6395e4517775c13a9f9675f9ca8 Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <s.nawro...@samsung.com>
Date: Mon, 4 May 2020 14:45:15 +0200
Subject: [PATCH] usb: xhci: Use only 32-bit accesses in xhci_writeq/xhci_readq

There might be hardware configurations where 64-bit data accesses
to XHCI registers are not supported properly.  This patch removes
the readq/writeq so always two 32-bit accesses are used to read/write
64-bit XHCI registers, similarly as it is done in Linux kernel.

This patch fixes operation of the XHCI controller on RPI4 Broadcom
BCM2711 SoC based board, where the VL805 USB XHCI controller is
connected to the PCIe Root Complex, which is attached to the system
through the SCB bridge.

Even though the architecture is 64-bit the PCIe BAR is 32-bit and likely
the 64-bit wide register accesses initiated by the CPU are not properly
translated to a sequence of 32-bit PCIe accesses.
xhci_readq(), for example, always returns same value in upper and lower
32-bits, e.g. 0xabcd1234abcd1234 instead of 0x00000000abcd1234.

Cc: Sergey Temerkhanov <s.temerkha...@gmail.com>
Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Bin Meng <bmeng...@gmail.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 include/usb/xhci.h | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/include/usb/xhci.h b/include/usb/xhci.h
index 6017504488..c16106a2fc 100644
--- a/include/usb/xhci.h
+++ b/include/usb/xhci.h
@@ -1111,28 +1111,20 @@ static inline void xhci_writel(uint32_t volatile *regs, 
const unsigned int val)
  */
 static inline u64 xhci_readq(__le64 volatile *regs)
 {
-#if BITS_PER_LONG == 64
-       return readq(regs);
-#else
        __u32 *ptr = (__u32 *)regs;
        u64 val_lo = readl(ptr);
        u64 val_hi = readl(ptr + 1);
        return val_lo + (val_hi << 32);
-#endif
 }
 
 static inline void xhci_writeq(__le64 volatile *regs, const u64 val)
 {
-#if BITS_PER_LONG == 64
-       writeq(val, regs);
-#else
        __u32 *ptr = (__u32 *)regs;
        u32 val_lo = lower_32_bits(val);
        /* FIXME */
        u32 val_hi = upper_32_bits(val);
        writel(val_lo, ptr);
        writel(val_hi, ptr + 1);
-#endif
 }
 
 int xhci_hcd_init(int index, struct xhci_hccr **ret_hccr,
++++++ 0024-pci-Move-some-PCIe-register-offset-.patch ++++++
>From 656aa6fbd03a85ee6dcb2797dbc9e35231ec1cf0 Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <s.nawro...@samsung.com>
Date: Mon, 4 May 2020 14:45:16 +0200
Subject: [PATCH] pci: Move some PCIe register offset definitions to a common
 header

Some PCI Express register offsets are currently defined in multiple
drivers, move them to a common header to avoid re-definitions and
as a pre-requisite for adding new PCIe driver.
While at it replace some spaces with tabs.

Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Bin Meng <bmeng...@gmail.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 drivers/pci/pci-rcar-gen3.c   |  8 --------
 drivers/pci/pcie_intel_fpga.c |  3 ---
 include/pci.h                 | 13 +++++++++++--
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/drivers/pci/pci-rcar-gen3.c b/drivers/pci/pci-rcar-gen3.c
index 52ca13b70c..0cfa2b8526 100644
--- a/drivers/pci/pci-rcar-gen3.c
+++ b/drivers/pci/pci-rcar-gen3.c
@@ -117,14 +117,6 @@
 #define RCAR_PCI_MAX_RESOURCES 4
 #define MAX_NR_INBOUND_MAPS    6
 
-#define PCI_EXP_FLAGS          2               /* Capabilities register */
-#define PCI_EXP_FLAGS_TYPE     0x00f0          /* Device/Port type */
-#define PCI_EXP_TYPE_ROOT_PORT 0x4             /* Root Port */
-#define PCI_EXP_LNKCAP         12              /* Link Capabilities */
-#define PCI_EXP_LNKCAP_DLLLARC 0x00100000      /* Data Link Layer Link Active 
Reporting Capable */
-#define PCI_EXP_SLTCAP         20              /* Slot Capabilities */
-#define PCI_EXP_SLTCAP_PSN     0xfff80000      /* Physical Slot Number */
-
 enum {
        RCAR_PCI_ACCESS_READ,
        RCAR_PCI_ACCESS_WRITE,
diff --git a/drivers/pci/pcie_intel_fpga.c b/drivers/pci/pcie_intel_fpga.c
index a5ea4888f3..5da4d1c26c 100644
--- a/drivers/pci/pcie_intel_fpga.c
+++ b/drivers/pci/pcie_intel_fpga.c
@@ -64,9 +64,6 @@
 #define IS_ROOT_PORT(pcie, bdf)                                \
                ((PCI_BUS(bdf) == pcie->first_busno) ? true : false)
 
-#define PCI_EXP_LNKSTA         18      /* Link Status */
-#define PCI_EXP_LNKSTA_DLLLA   0x2000  /* Data Link Layer Link Active */
-
 /**
  * struct intel_fpga_pcie - Intel FPGA PCIe controller state
  * @bus: Pointer to the PCI bus
diff --git a/include/pci.h b/include/pci.h
index ff59ac0e69..1c7e4818ea 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -471,10 +471,19 @@
 #define  PCI_EA_FIELD_MASK     0xfffffffc      /* For Base & Max Offset */
 
 /* PCI Express capabilities */
+#define PCI_EXP_FLAGS          2       /* Capabilities register */
+#define  PCI_EXP_FLAGS_TYPE    0x00f0  /* Device/Port type */
+#define  PCI_EXP_TYPE_ROOT_PORT 0x4    /* Root Port */
 #define PCI_EXP_DEVCAP         4       /* Device capabilities */
-#define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
+#define  PCI_EXP_DEVCAP_FLR    0x10000000 /* Function Level Reset */
 #define PCI_EXP_DEVCTL         8       /* Device Control */
-#define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
+#define  PCI_EXP_DEVCTL_BCR_FLR        0x8000  /* Bridge Configuration Retry / 
FLR */
+#define PCI_EXP_LNKCAP         12      /* Link Capabilities */
+#define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link 
Active Reporting Capable */
+#define PCI_EXP_LNKSTA         18      /* Link Status */
+#define  PCI_EXP_LNKSTA_DLLLA  0x2000  /* Data Link Layer Link Active */
+#define PCI_EXP_SLTCAP         20      /* Slot Capabilities */
+#define  PCI_EXP_SLTCAP_PSN    0xfff80000 /* Physical Slot Number */
 
 /* Include the ID list */
 
++++++ 0025-rpi4-shorten-a-mapping-for-the-DRAM.patch ++++++
>From 3ab38989cdf0aaae237f8b2f474d863be1ecc62a Mon Sep 17 00:00:00 2001
From: Marek Szyprowski <m.szyprow...@samsung.com>
Date: Mon, 4 May 2020 14:45:17 +0200
Subject: [PATCH] rpi4: shorten a mapping for the DRAM

Remove the overlap between DRAM and device's IO area.

Signed-off-by: Marek Szyprowski <m.szyprow...@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 arch/arm/mach-bcm283x/init.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c
index 9966d6c833..42953561a7 100644
--- a/arch/arm/mach-bcm283x/init.c
+++ b/arch/arm/mach-bcm283x/init.c
@@ -38,7 +38,7 @@ static struct mm_region bcm2711_mem_map[] = {
        {
                .virt = 0x00000000UL,
                .phys = 0x00000000UL,
-               .size = 0xfe000000UL,
+               .size = 0xfc000000UL,
                .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
                         PTE_BLOCK_INNER_SHARE
        }, {
++++++ 0026-rpi4-add-a-mapping-for-the-PCIe-XHC.patch ++++++
>From 79fa8b6df328a35f63046ac155ed4ab33fa78d66 Mon Sep 17 00:00:00 2001
From: Marek Szyprowski <m.szyprow...@samsung.com>
Date: Mon, 4 May 2020 14:45:18 +0200
Subject: [PATCH] rpi4: add a mapping for the PCIe XHCI controller MMIO
 registers (ARM 64bit)

Create a non-cacheable mapping for the 0x600000000 physical memory region,
where MMIO registers for the PCIe XHCI controller are instantiated by the
PCIe bridge.

Signed-off-by: Marek Szyprowski <m.szyprow...@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 arch/arm/mach-bcm283x/init.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-bcm283x/init.c b/arch/arm/mach-bcm283x/init.c
index 42953561a7..6a748da171 100644
--- a/arch/arm/mach-bcm283x/init.c
+++ b/arch/arm/mach-bcm283x/init.c
@@ -11,10 +11,15 @@
 #include <dm/device.h>
 #include <fdt_support.h>
 
+#define BCM2711_RPI4_PCIE_XHCI_MMIO_PHYS       0x600000000UL
+#define BCM2711_RPI4_PCIE_XHCI_MMIO_SIZE       0x800000UL
+
 #ifdef CONFIG_ARM64
 #include <asm/armv8/mmu.h>
 
-static struct mm_region bcm283x_mem_map[] = {
+#define MAX_MAP_MAX_ENTRIES (4)
+
+static struct mm_region bcm283x_mem_map[MAX_MAP_MAX_ENTRIES] = {
        {
                .virt = 0x00000000UL,
                .phys = 0x00000000UL,
@@ -34,7 +39,7 @@ static struct mm_region bcm283x_mem_map[] = {
        }
 };
 
-static struct mm_region bcm2711_mem_map[] = {
+static struct mm_region bcm2711_mem_map[MAX_MAP_MAX_ENTRIES] = {
        {
                .virt = 0x00000000UL,
                .phys = 0x00000000UL,
@@ -48,6 +53,13 @@ static struct mm_region bcm2711_mem_map[] = {
                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
                         PTE_BLOCK_NON_SHARE |
                         PTE_BLOCK_PXN | PTE_BLOCK_UXN
+       }, {
+               .virt = BCM2711_RPI4_PCIE_XHCI_MMIO_PHYS,
+               .phys = BCM2711_RPI4_PCIE_XHCI_MMIO_PHYS,
+               .size = BCM2711_RPI4_PCIE_XHCI_MMIO_SIZE,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                        PTE_BLOCK_NON_SHARE |
+                        PTE_BLOCK_PXN | PTE_BLOCK_UXN
        }, {
                /* List terminator */
                0,
@@ -71,7 +83,7 @@ static void _rpi_update_mem_map(struct mm_region *pd)
 {
        int i;
 
-       for (i = 0; i < 2; i++) {
+       for (i = 0; i < MAX_MAP_MAX_ENTRIES; i++) {
                mem_map[i].virt = pd[i].virt;
                mem_map[i].phys = pd[i].phys;
                mem_map[i].size = pd[i].size;
++++++ 0027-linux-bitfield.h-Add-primitives-for.patch ++++++
>From 25073d1f4beeb4eb4d2917207e9c5862b7629e0d Mon Sep 17 00:00:00 2001
From: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
Date: Mon, 4 May 2020 14:45:20 +0200
Subject: [PATCH] linux/bitfield.h: Add primitives for manipulating bitfields
 both in host- and fixed-endian

Imports Al Viro's original Linux commit 00b0c9b82663a, which contains
an in depth explanation and two fixes from Johannes Berg:
 e7d4a95da86e0 "bitfield: fix *_encode_bits()",
 37a3862e12382 "bitfield: add u8 helpers".

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
[s.nawrocki: added empty lines between functions and macros]
Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
---
 include/linux/bitfield.h | 50 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/include/linux/bitfield.h b/include/linux/bitfield.h
index 8b9d6fff00..7acba4c524 100644
--- a/include/linux/bitfield.h
+++ b/include/linux/bitfield.h
@@ -103,4 +103,54 @@
                (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \
        })
 
+extern void __compiletime_error("value doesn't fit into mask")
+__field_overflow(void);
+extern void __compiletime_error("bad bitfield mask")
+__bad_mask(void);
+static __always_inline u64 field_multiplier(u64 field)
+{
+       if ((field | (field - 1)) & ((field | (field - 1)) + 1))
+               __bad_mask();
+       return field & -field;
+}
+static __always_inline u64 field_mask(u64 field)
+{
+       return field / field_multiplier(field);
+}
+
+#define ____MAKE_OP(type,base,to,from)                                 \
+static __always_inline __##type type##_encode_bits(base v, base field) \
+{                                                                      \
+       if (__builtin_constant_p(v) && (v & ~field_mask(field)))        \
+               __field_overflow();                                     \
+       return to((v & field_mask(field)) * field_multiplier(field));   \
+}                                                                      \
+static __always_inline __##type type##_replace_bits(__##type old,      \
+                                       base val, base field)           \
+{                                                                      \
+       return (old & ~to(field)) | type##_encode_bits(val, field);     \
+}                                                                      \
+static __always_inline void type##p_replace_bits(__##type *p,          \
+                                       base val, base field)           \
+{                                                                      \
+       *p = (*p & ~to(field)) | type##_encode_bits(val, field);        \
+}                                                                      \
+static __always_inline base type##_get_bits(__##type v, base field)    \
+{                                                                      \
+       return (from(v) & field)/field_multiplier(field);               \
+}
+
+#define __MAKE_OP(size)                                                        
\
+       ____MAKE_OP(le##size,u##size,cpu_to_le##size,le##size##_to_cpu) \
+       ____MAKE_OP(be##size,u##size,cpu_to_be##size,be##size##_to_cpu) \
+       ____MAKE_OP(u##size,u##size,,)
+
+____MAKE_OP(u8,u8,,)
+__MAKE_OP(16)
+__MAKE_OP(32)
+__MAKE_OP(64)
+
+#undef __MAKE_OP
+#undef ____MAKE_OP
+
 #endif
++++++ 0028-pci-Add-some-PCI-Express-capability.patch ++++++
>From d902cacdb28383f912fd7ad180bdc0f5dbe3469a Mon Sep 17 00:00:00 2001
From: Sylwester Nawrocki <s.nawro...@samsung.com>
Date: Mon, 4 May 2020 14:45:21 +0200
Subject: [PATCH] pci: Add some PCI Express capability register offset
 definitions

Add PCI Express capability definitions required by the Broadcom
STB PCIe controller driver.

Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
Reviewed-by: Bin Meng <bmeng...@gmail.com>
Reviewed-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 include/pci.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/include/pci.h b/include/pci.h
index 1c7e4818ea..4b8a1f207c 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -479,11 +479,17 @@
 #define PCI_EXP_DEVCTL         8       /* Device Control */
 #define  PCI_EXP_DEVCTL_BCR_FLR        0x8000  /* Bridge Configuration Retry / 
FLR */
 #define PCI_EXP_LNKCAP         12      /* Link Capabilities */
+#define  PCI_EXP_LNKCAP_SLS    0x0000000f /* Supported Link Speeds */
+#define  PCI_EXP_LNKCAP_MLW    0x000003f0 /* Maximum Link Width */
 #define  PCI_EXP_LNKCAP_DLLLARC        0x00100000 /* Data Link Layer Link 
Active Reporting Capable */
 #define PCI_EXP_LNKSTA         18      /* Link Status */
+#define  PCI_EXP_LNKSTA_CLS    0x000f  /* Current Link Speed */
+#define  PCI_EXP_LNKSTA_NLW    0x03f0  /* Negotiated Link Width */
+#define  PCI_EXP_LNKSTA_NLW_SHIFT 4    /* start of NLW mask in link status */
 #define  PCI_EXP_LNKSTA_DLLLA  0x2000  /* Data Link Layer Link Active */
 #define PCI_EXP_SLTCAP         20      /* Slot Capabilities */
 #define  PCI_EXP_SLTCAP_PSN    0xfff80000 /* Physical Slot Number */
+#define PCI_EXP_LNKCTL2                48      /* Link Control 2 */
 
 /* Include the ID list */
 
++++++ 0029-pci-Add-driver-for-Broadcom-STB-PCI.patch ++++++
++++ 646 lines (skipped)

++++++ 0030-config-Enable-support-for-the-XHCI-.patch ++++++
>From fc6568b85a2320837c9ee72773d03382624ccb06 Mon Sep 17 00:00:00 2001
From: Marek Szyprowski <m.szyprow...@samsung.com>
Date: Mon, 4 May 2020 14:45:23 +0200
Subject: [PATCH] config: Enable support for the XHCI controller on RPI4 board

This requires enabling BRCMSTB PCIe and XHCI_PCI drivers as well as PCI
and USB commands. To get it working one has to call the following commands:
"pci enum; usb start;", thus such commands have been added to the default
"preboot" environment variable. One has to update their environment if it
is already configured to get this feature working out of the box.

Signed-off-by: Marek Szyprowski <m.szyprow...@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
---
 configs/rpi_4_32b_defconfig | 11 +++++++++++
 configs/rpi_4_defconfig     | 11 +++++++++++
 configs/rpi_arm64_defconfig |  8 +++++++-
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig
index e7ea88bd4b..9a0e23368d 100644
--- a/configs/rpi_4_32b_defconfig
+++ b/configs/rpi_4_32b_defconfig
@@ -8,12 +8,16 @@ CONFIG_NR_DRAM_BANKS=2
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_OF_BOARD_SETUP=y
 # CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
+CONFIG_USE_PREBOOT=y
+CONFIG_PREBOOT="pci enum; 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_GPIO=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_USB=y
 CONFIG_CMD_FS_UUID=y
 CONFIG_OF_BOARD=y
 CONFIG_ENV_FAT_INTERFACE="mmc"
@@ -26,9 +30,16 @@ CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_BCM2835=y
 CONFIG_DM_ETH=y
 CONFIG_BCMGENET=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PCI_BRCMSTB=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_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI=y
 CONFIG_DM_VIDEO=y
 CONFIG_VIDEO_BPP32=y
 CONFIG_SYS_WHITE_ON_BLACK=y
diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig
index b0f9cf1c0e..6dfb69e797 100644
--- a/configs/rpi_4_defconfig
+++ b/configs/rpi_4_defconfig
@@ -8,12 +8,16 @@ CONFIG_NR_DRAM_BANKS=2
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_OF_BOARD_SETUP=y
 # CONFIG_ARCH_FIXUP_FDT_MEMORY is not set
+CONFIG_USE_PREBOOT=y
+CONFIG_PREBOOT="pci enum; 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_GPIO=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_USB=y
 CONFIG_CMD_FS_UUID=y
 CONFIG_OF_BOARD=y
 CONFIG_ENV_FAT_INTERFACE="mmc"
@@ -26,9 +30,16 @@ CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_BCM2835=y
 CONFIG_DM_ETH=y
 CONFIG_BCMGENET=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PCI_BRCMSTB=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_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI=y
 CONFIG_DM_VIDEO=y
 CONFIG_VIDEO_BPP32=y
 CONFIG_SYS_WHITE_ON_BLACK=y
diff --git a/configs/rpi_arm64_defconfig b/configs/rpi_arm64_defconfig
index 00b3096481..4083cabdd3 100644
--- a/configs/rpi_arm64_defconfig
+++ b/configs/rpi_arm64_defconfig
@@ -7,13 +7,14 @@ CONFIG_NR_DRAM_BANKS=2
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_USE_PREBOOT=y
-CONFIG_PREBOOT="usb start"
+CONFIG_PREBOOT="pci enum; 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_GPIO=y
 CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
 CONFIG_CMD_USB=y
 CONFIG_CMD_FS_UUID=y
 CONFIG_OF_BOARD=y
@@ -26,11 +27,16 @@ CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_BCM2835=y
 CONFIG_PHYLIB=y
 CONFIG_DM_ETH=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_PCI_BRCMSTB=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_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI=y
 CONFIG_USB_DWC2=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_USB_HOST_ETHER=y
++++++ 0031-arm-rpi-Add-function-to-trigger-VL8.patch ++++++
>From cfa03909f2bcec19f7242b446b6fb9dfdbf2fa3e Mon Sep 17 00:00:00 2001
From: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
Date: Tue, 5 May 2020 18:26:06 +0200
Subject: [PATCH] arm: rpi: Add function to trigger VL805's firmware load

On the Raspberry Pi 4, after a PCI reset, VL805's (a xHCI chip) firmware
may either be loaded directly from an EEPROM or, if not present, by the
SoC's VideCore (the SoC's co-processor). Introduce the function that
informs VideCore that VL805 may need its firmware loaded.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 arch/arm/mach-bcm283x/include/mach/mbox.h | 13 +++++++
 arch/arm/mach-bcm283x/include/mach/msg.h  |  7 ++++
 arch/arm/mach-bcm283x/msg.c               | 45 +++++++++++++++++++++++
 3 files changed, 65 insertions(+)

diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h 
b/arch/arm/mach-bcm283x/include/mach/mbox.h
index 60e226ce1d..2ae2d3d97c 100644
--- a/arch/arm/mach-bcm283x/include/mach/mbox.h
+++ b/arch/arm/mach-bcm283x/include/mach/mbox.h
@@ -491,6 +491,19 @@ struct bcm2835_mbox_tag_set_palette {
        } body;
 };
 
+#define BCM2835_MBOX_TAG_NOTIFY_XHCI_RESET          0x00030058
+
+struct bcm2835_mbox_tag_pci_dev_addr {
+       struct bcm2835_mbox_tag_hdr tag_hdr;
+       union {
+               struct {
+                       u32 dev_addr;
+               } req;
+               struct {
+               } resp;
+       } body;
+};
+
 /*
  * Pass a raw u32 message to the VC, and receive a raw u32 back.
  *
diff --git a/arch/arm/mach-bcm283x/include/mach/msg.h 
b/arch/arm/mach-bcm283x/include/mach/msg.h
index 4afb08631b..f5213dd0e0 100644
--- a/arch/arm/mach-bcm283x/include/mach/msg.h
+++ b/arch/arm/mach-bcm283x/include/mach/msg.h
@@ -48,4 +48,11 @@ int bcm2835_set_video_params(int *widthp, int *heightp, int 
depth_bpp,
                             int pixel_order, int alpha_mode, ulong *fb_basep,
                             ulong *fb_sizep, int *pitchp);
 
+/**
+ * bcm2711_notify_vl805_reset() - get vl805's firmware loaded
+ *
+ * @return 0 if OK, -EIO on error
+ */
+int bcm2711_notify_vl805_reset(void);
+
 #endif
diff --git a/arch/arm/mach-bcm283x/msg.c b/arch/arm/mach-bcm283x/msg.c
index 94b75283f8..f8ef531652 100644
--- a/arch/arm/mach-bcm283x/msg.c
+++ b/arch/arm/mach-bcm283x/msg.c
@@ -40,6 +40,12 @@ struct msg_setup {
        u32 end_tag;
 };
 
+struct msg_notify_vl805_reset {
+       struct bcm2835_mbox_hdr hdr;
+       struct bcm2835_mbox_tag_pci_dev_addr dev_addr;
+       u32 end_tag;
+};
+
 int bcm2835_power_on_module(u32 module)
 {
        ALLOC_CACHE_ALIGN_BUFFER(struct msg_set_power_state, msg_pwr, 1);
@@ -151,3 +157,42 @@ int bcm2835_set_video_params(int *widthp, int *heightp, 
int depth_bpp,
 
        return 0;
 }
+
+/*
+ * The Raspberry Pi 4 gets its USB functionality from VL805, a PCIe chip that
+ * implements xHCI. After a PCI reset, VL805's firmware may either be loaded
+ * directly from an EEPROM or, if not present, by the SoC's co-processor,
+ * VideoCore. RPi4's VideoCore OS contains both the non public firmware load
+ * logic and the VL805 firmware blob. This function triggers the aforementioned
+ * process.
+ */
+int bcm2711_notify_vl805_reset(void)
+{
+       ALLOC_CACHE_ALIGN_BUFFER(struct msg_notify_vl805_reset,
+                                msg_notify_vl805_reset, 1);
+       int ret;
+
+       BCM2835_MBOX_INIT_HDR(msg_notify_vl805_reset);
+       BCM2835_MBOX_INIT_TAG(&msg_notify_vl805_reset->dev_addr,
+                             NOTIFY_XHCI_RESET);
+
+       /*
+        * The pci device address is expected like this:
+        *
+        *   PCI_BUS << 20 | PCI_SLOT << 15 | PCI_FUNC << 12
+        *
+        * But since RPi4's PCIe setup is hardwired, we know the address in
+        * advance.
+        */
+       msg_notify_vl805_reset->dev_addr.body.req.dev_addr = 0x100000;
+
+       ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN,
+                                    &msg_notify_vl805_reset->hdr);
+       if (ret) {
+               printf("bcm2711: Faild to load vl805's firmware, %d\n", ret);
+               return -EIO;
+       }
+
+       return 0;
+}
+
++++++ 0032-usb-xhci-Load-Raspberry-Pi-4-VL805-.patch ++++++
>From 0ebaec654e080ebd9c07291a7ad9d3569d049dee Mon Sep 17 00:00:00 2001
From: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
Date: Tue, 5 May 2020 18:26:07 +0200
Subject: [PATCH] usb: xhci: Load Raspberry Pi 4 VL805's firmware

When needed, RPi4's co-processor (called VideoCore) has to be instructed
to load VL805's firmware (the chip providing xHCI support). VideCore's
firmware expects the board's PCIe bus to be already configured in order
for it to load the xHCI chip firmware. So we have to make sure this
happens in between the PCIe configuration and xHCI startup.

Introduce a callback in xhci_pci_probe() to run this platform specific
routine.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulie...@suse.de>
---
 board/raspberrypi/rpi/rpi.c | 6 ++++++
 drivers/usb/host/xhci-pci.c | 6 ++++++
 include/usb/xhci.h          | 3 +++
 3 files changed, 15 insertions(+)

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index e367ba3092..dcaf45fbf2 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -14,6 +14,7 @@
 #include <lcd.h>
 #include <memalign.h>
 #include <mmc.h>
+#include <usb/xhci.h>
 #include <asm/gpio.h>
 #include <asm/arch/mbox.h>
 #include <asm/arch/msg.h>
@@ -494,3 +495,8 @@ int ft_board_setup(void *blob, bd_t *bd)
 
        return 0;
 }
+
+void xhci_pci_fixup(struct udevice *dev)
+{
+       bcm2711_notify_vl805_reset();
+}
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index c1f60da541..1285dde1ef 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -11,6 +11,10 @@
 #include <usb.h>
 #include <usb/xhci.h>
 
+__weak void xhci_pci_fixup(struct udevice *dev)
+{
+}
+
 static void xhci_pci_init(struct udevice *dev, struct xhci_hccr **ret_hccr,
                          struct xhci_hcor **ret_hcor)
 {
@@ -40,6 +44,8 @@ static int xhci_pci_probe(struct udevice *dev)
        struct xhci_hccr *hccr;
        struct xhci_hcor *hcor;
 
+       xhci_pci_fixup(dev);
+
        xhci_pci_init(dev, &hccr, &hcor);
 
        return xhci_register(dev, hccr, hcor);
diff --git a/include/usb/xhci.h b/include/usb/xhci.h
index c16106a2fc..57feed7603 100644
--- a/include/usb/xhci.h
+++ b/include/usb/xhci.h
@@ -16,6 +16,7 @@
 #ifndef HOST_XHCI_H_
 #define HOST_XHCI_H_
 
+#include <usb.h>
 #include <asm/types.h>
 #include <asm/cache.h>
 #include <asm/io.h>
@@ -1281,4 +1282,6 @@ extern struct dm_usb_ops xhci_usb_ops;
 
 struct xhci_ctrl *xhci_get_ctrl(struct usb_device *udev);
 
+extern void xhci_pci_fixup(struct udevice *dev);
+
 #endif /* HOST_XHCI_H_ */



Reply via email to