|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen: workaround missing device_type property in pci/pcie nodes
Hi Stefano,
> On 8 Feb 2021, at 23:56, Stefano Stabellini <sstabellini@xxxxxxxxxx> wrote:
>
> 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.
We are really handling here a wrong device-tree bug that could easily be fixed
by the user.
We should at least mention in the commit message that this is a workaround
to solve RPi4 buggy device tree.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
>
> diff --git a/xen/common/device_tree.c b/xen/common/device_tree.c
> index 18825e333e..f1a96a3b90 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_t dt_node_is_pci(const struct dt_device_node *np)
> +{
> + bool is_pci = !strcmp(np->name, "pcie") || !strcmp(np->name, "pci");
The Linux commit is a bit more restrictive and only does that for “pcie”.
Any reason why you also want to have this workaround done also for “pci” ?
Cheers
Bertrand
> +
> + 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,
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |