File u-boot-rpi5.patch of Package u-boot
diff --git a/arch/arm/dts/bcm2712-rpi-5-b-u-boot.dtsi b/arch/arm/dts/bcm2712-rpi-5-b-u-boot.dtsi
new file mode 100644
index 00000000000..65219f158e4
--- /dev/null
+++ b/arch/arm/dts/bcm2712-rpi-5-b-u-boot.dtsi
@@ -0,0 +1,8 @@
+// SPDX-License-Identifier: GPL-2.0+ OR MIT
+/*
+ * Empty device tree for raspberrypi5
+ *
+ */
+
+/ {
+};
diff --git a/configs/rpi_5_defconfig b/configs/rpi_5_defconfig
new file mode 100644
index 00000000000..852eff1c455
--- /dev/null
+++ b/configs/rpi_5_defconfig
@@ -0,0 +1,4 @@
+#include <configs/rpi_arm64_defconfig>
+
+CONFIG_DEFAULT_DEVICE_TREE="broadcom/bcm2712-rpi-5-b"
+CONFIG_OF_UPSTREAM=y
diff --git a/drivers/core/of_addr.c b/drivers/core/of_addr.c
index 250dd175b55..823a4d70a6b 100644
--- a/drivers/core/of_addr.c
+++ b/drivers/core/of_addr.c
@@ -374,16 +374,16 @@ int of_get_dma_range(const struct device_node *dev, phys_addr_t *cpu,
}
/* Get the address sizes both for the bus and its parent */
- bus_node = of_match_bus((struct device_node*)dev);
- bus_node->count_cells(dev, &na, &ns);
+ na = of_simple_addr_cells(dev);
+ ns = of_simple_size_cells(dev);
if (!OF_CHECK_COUNTS(na, ns)) {
printf("Bad cell count for %s\n", of_node_full_name(dev));
ret = -EINVAL;
goto out_parent;
}
- bus_node = of_match_bus(parent);
- bus_node->count_cells(parent, &pna, &pns);
+ bus_node = of_match_bus((struct device_node *)dev);
+ bus_node->count_cells(dev, &pna, &pns);
if (!OF_CHECK_COUNTS(pna, pns)) {
printf("Bad cell count for %s\n", of_node_full_name(parent));
ret = -EINVAL;
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index cbf5f605518..c7bd4adeebe 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -38,7 +38,9 @@
#include <linux/mii.h>
#include <asm/io.h>
#include <linux/dma-mapping.h>
+#ifndef CONFIG_CLK
#include <asm/arch/clk.h>
+#endif
#include <linux/errno.h>
#include "macb.h"
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index c370f8c6400..70cee9b42d0 100644
--- a/drivers/pci/pci-uclass.c
+++ b/drivers/pci/pci-uclass.c
@@ -1200,6 +1200,7 @@ static int pci_uclass_post_probe(struct udevice *bus)
static int pci_uclass_child_post_bind(struct udevice *dev)
{
struct pci_child_plat *pplat;
+ int err;
if (!dev_has_ofnode(dev))
return 0;
@@ -1207,7 +1208,13 @@ static int pci_uclass_child_post_bind(struct udevice *dev)
pplat = dev_get_parent_plat(dev);
/* Extract vendor id and device id if available */
- ofnode_read_pci_vendev(dev_ofnode(dev), &pplat->vendor, &pplat->device);
+ err = ofnode_read_pci_vendev(dev_ofnode(dev), &pplat->vendor,
+ &pplat->device);
+ if (err) {
+ /* Mark PCI device structure as invalid */
+ pplat->devfn = -1;
+ return 0;
+ }
/* Extract the devfn from fdt_pci_addr */
pplat->devfn = pci_get_devfn(dev);
diff --git a/drivers/pci/pcie_brcmstb.c b/drivers/pci/pcie_brcmstb.c
index f089c48f028..ca5951974ce 100644
--- a/drivers/pci/pcie_brcmstb.c
+++ b/drivers/pci/pcie_brcmstb.c
@@ -61,6 +61,7 @@ struct brcm_pcie {
int gen;
bool ssc;
+ uint16_t bus_base;
};
/**
@@ -134,6 +135,7 @@ static int brcm_pcie_config_address(const struct udevice *dev, pci_dev_t bdf,
* Busses 0 (host PCIe bridge) and 1 (its immediate child)
* are limited to a single device each
*/
+ pci_bus -= pcie->bus_base;
if (pci_bus < 2 && pci_dev > 0)
return -EINVAL;
@@ -360,6 +362,8 @@ static int brcm_pcie_probe(struct udevice *dev)
u16 nlw, cls, lnksta;
u32 tmp;
+ pcie->bus_base = hose->first_busno;
+
/*
* Reset the bridge, assert the fundamental reset. Note for some SoCs,
* e.g. BCM7278, the fundamental reset should not be asserted here.