[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen: workaround missing device_type property in pci/pcie nodes


  • To: Stefano Stabellini <sstabellini@xxxxxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Tue, 9 Feb 2021 10:25:23 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3zefSISgaWRNh6z2H7QFf3Laz3IEn6VRp+GE51AU420=; b=b/3/ab8QrgFK3gQFEVl+ZTGUPA3Anbs6qJ2ZMtE3vXbrbBeTy0TnIPPxg1euaLAHnZNDmFNDcJvwvhAy3bP0Wc2KxiOxSOgaHx166qQsm4/Lph0iwv557bBNgvdDfmomqrSh53B/6eS7Zwv9PM4ADwfqNv3UkutSgiqHqm1PukIMBW1PuQDKnIEgjhtvG0wjfhMb//n0GH+BjjhWO4IN2lB4HTdDLEjrnvkcnrGfmp9sTKl1P6Z4glL5U16ZsIHv56AIY8/NgilDj3IZCEp6crpiIvK/Sg1eJ7NeZBribseydkQ297phOkCffaAFnejGDLXn0Vnijd/PaX1Wx+Zlhw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TyKAtDA5Ltc/W6PP8tDrYE8ywTAtc2FaphIXjVtvAmBWiwjYXFRtL9jgUtl+fa2YQd88pFP3WAVP2QUF4yqZUOURggAYN8Rxv0wAZR0kzgKuVXzBb7xBk92ts3ppVk/cKOzMj7oWyzYJ4qGvg++RuCiuX7Wn3iH28uNSxTtszAH1pBpbUBljqgc9bXmvpaMo+YdAk+pSqGvTsjgLLVK8SAdNlL4ioYAA1aa0/1k94nkuVt6zbnjchXalVh0W36TB8zZttMhiMzERIIZLf9vvC+MXLymbQO20HTp5BkF0FZVSG1kkNcBaR/ZSLt56fwC0HgnufIPwKQ/tBh8gYJrkOQ==
  • Authentication-results-original: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, "ehem+xen@xxxxxxx" <ehem+xen@xxxxxxx>
  • Delivery-date: Tue, 09 Feb 2021 10:25:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHW/nYULOKwv72r4kWh+gedUrMffqpPntOA
  • Thread-topic: [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,
> 


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.