Hi Dongdong,

On 22.11.2016 13:08, Dongdong Liu wrote:
The acpi_get_rc_resources() is used to get the RC register address that can
not be described in MCFG. It takes the _HID&segment to look for and returns
the RC address resource. Use PNP0C02 devices to describe such RC address
resource. Use _UID to match segment to tell which root bus the PNP0C02
resource belong to.

Signed-off-by: Dongdong Liu <liudongdo...@huawei.com>
Signed-off-by: Tomasz Nowicki <t...@semihalf.com>
---
 drivers/pci/pci-acpi.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/pci/pci.h      |  4 +++
 2 files changed, 73 insertions(+)

diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index d966d47..76fd6f4 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -29,6 +29,75 @@
        0x91, 0x17, 0xea, 0x4d, 0x19, 0xc3, 0x43, 0x4d
 };

+#ifdef CONFIG_ARM64
+static struct resource *acpi_get_rc_addr(struct acpi_device *adev)
+{
+       struct resource_entry *entry;
+       struct list_head list;
+       unsigned long flags;
+       int ret;
+       struct resource *res;
+
+       INIT_LIST_HEAD(&list);
+       flags = IORESOURCE_MEM;
+       ret = acpi_dev_get_resources(adev, &list,
+                                    acpi_dev_filter_resource_type_cb,
+                                    (void *) flags);
+       if (ret <= 0)
+               return NULL;
+
+       entry = list_first_entry(&list, struct resource_entry, node);
+       res = entry->res;

You return "res" memory pointer and...

+       acpi_dev_free_resource_list(&list);

free it here.

+       return res;
+}


We either allocate memory for res here or get it from the caller.

Tomasz

Reply via email to