lkml.org 
[lkml]   [2021]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC v4 3/7] arm64: PCI: Support root bridge preparation for Hyper-V PCI
    Date
    Currently at root bridge preparation, the corresponding ACPI device will
    be set as the companion, however for a Hyper-V virtual PCI root bridge,
    there is no corresponding ACPI device, because a Hyper-V virtual PCI
    root bridge is discovered via VMBus rather than ACPI table. In order to
    support this, we need to make pcibios_root_bridge_prepare() work with
    cfg->parent being NULL.

    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    ---
    arch/arm64/kernel/pci.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
    index 1006ed2d7c60..3b81ac42bc1f 100644
    --- a/arch/arm64/kernel/pci.c
    +++ b/arch/arm64/kernel/pci.c
    @@ -84,7 +84,13 @@ int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
    {
    if (!acpi_disabled) {
    struct pci_config_window *cfg = bridge->bus->sysdata;
    - struct acpi_device *adev = to_acpi_device(cfg->parent);
    + /*
    + * On Hyper-V there is no corresponding APCI device for a root
    + * bridge, therefore ->parent is set as NULL by the driver. And
    + * set 'adev` as NULL in this case because there is no proper
    + * ACPI device.
    + */
    + struct acpi_device *adev = cfg->parent ? to_acpi_device(cfg->parent) : NULL;
    struct device *bus_dev = &bridge->bus->dev;

    ACPI_COMPANION_SET(&bridge->dev, adev);
    --
    2.30.2
    \
     
     \ /
      Last update: 2021-07-14 12:31    [W:3.314 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site