[honister][PATCH 3/3] xen: fix boot on the Raspberry Pi 4 with Xen 4.14
Christopher Clark
Apply the patch from Xen to fix device tree parsing in newer kernels.
Signed-off-by: Christopher Clark <christopher.w.clark@...> --- ...issing-device_type-property-in-pci-p.patch | 91 +++++++++++++++++++ recipes-extended/xen/xen_4.14.bb | 1 + 2 files changed, 92 insertions(+) create mode 100644 recipes-extended/xen/files/0001-xen-workaround-missing-device_type-property-in-pci-p.patch diff --git a/recipes-extended/xen/files/0001-xen-workaround-missing-device_type-property-in-pci-p.patch b/recipes-extended/xen/files/0001-xen-workaround-missing-device_type-property-in-pci-p.patch new file mode 100644 index 0000000..09a461b --- /dev/null +++ b/recipes-extended/xen/files/0001-xen-workaround-missing-device_type-property-in-pci-p.patch @@ -0,0 +1,91 @@ +From 5a4087004d1adbbb223925f3306db0e5824a2bdc Mon Sep 17 00:00:00 2001 +From: Stefano Stabellini <sstabellini@...> +Date: Tue, 9 Feb 2021 11:53:34 -0800 +Subject: [PATCH] xen: workaround missing device_type property in pci/pcie + nodes + +PCI buses differ from default buses in a few important ways, so it is +important to detect them properly. Normally, PCI buses are expected to +have the following property: + + device_type = "pci" + +In reality, it is not always the case. To handle PCI bus nodes that +don't have the device_type property, also consider the node name: if the +node name is "pcie" or "pci" then consider the bus as a PCI bus. + +This commit is based on the Linux kernel commit +d1ac0002dd29 "of: address: Work around missing device_type property in +pcie nodes". + +This fixes Xen boot on RPi4. Some RPi4 kernels have the following node +on their device trees: + +&pcie0 { + pci@1,0 { + #address-cells = <3>; + #size-cells = <2>; + ranges; + + reg = <0 0 0 0 0>; + + usb@1,0 { + reg = <0x10000 0 0 0 0>; + resets = <&reset RASPBERRYPI_FIRMWARE_RESET_ID_USB>; + }; + }; +}; + +The pci@1,0 node is a PCI bus. If we parse the node and its children as +a default bus, the reg property under usb@1,0 would have to be +interpreted as an address range mappable by the CPU, which is not the +case and would break. + +Link: https://lore.kernel.org/xen-devel/YBmQQ3Tzu++AadKx@mattapan.m5p.com/ +[fix style on commit] +Signed-off-by: Stefano Stabellini <stefano.stabellini@...> +Tested-by: Elliott Mitchell <ehem+xen@...> +Tested-by: Jukka Kaartinen <jukka.kaartinen@...> +Reviewed-by: Bertrand Marquis <bertrand.marquis@...> +Acked-by: Julien Grall <jgrall@...> +--- + xen/common/device_tree.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c +index 18825e333e..03d25a81ce 100644 +--- a/xen/common/device_tree.c ++++ b/xen/common/device_tree.c +@@ -563,14 +563,28 @@ static unsigned int dt_bus_default_get_flags(const __be32 *addr) + * PCI bus specific translator + */ + ++static bool dt_node_is_pci(const struct dt_device_node *np) ++{ ++ bool is_pci = !strcmp(np->name, "pcie") || !strcmp(np->name, "pci"); ++ ++ if ( is_pci ) ++ printk(XENLOG_WARNING "%s: Missing device_type\n", np->full_name); ++ ++ return is_pci; ++} ++ + static bool_t dt_bus_pci_match(const struct dt_device_node *np) + { + /* + * "pciex" is PCI Express "vci" is for the /chaos bridge on 1st-gen PCI + * powermacs "ht" is hypertransport ++ * ++ * If none of the device_type match, and that the node name is ++ * "pcie" or "pci", accept the device as PCI (with a warning). + */ + return !strcmp(np->type, "pci") || !strcmp(np->type, "pciex") || +- !strcmp(np->type, "vci") || !strcmp(np->type, "ht"); ++ !strcmp(np->type, "vci") || !strcmp(np->type, "ht") || ++ dt_node_is_pci(np); + } + + static void dt_bus_pci_count_cells(const struct dt_device_node *np, +-- +2.25.1 + diff --git a/recipes-extended/xen/xen_4.14.bb b/recipes-extended/xen/xen_4.14.bb index 267db16..c0fa938 100644 --- a/recipes-extended/xen/xen_4.14.bb +++ b/recipes-extended/xen/xen_4.14.bb @@ -7,6 +7,7 @@ XEN_BRANCH ?= "stable-${XEN_REL}" SRC_URI = " \ git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \ file://0001-menuconfig-mconf-cfg-Allow-specification-of-ncurses-location.patch \ + file://0001-xen-workaround-missing-device_type-property-in-pci-p.patch \ " LIC_FILES_CHKSUM ?= "file://COPYING;md5=419739e325a50f3d7b4501338e44a4e5" -- 2.25.1 |
|