On Wed, Oct 21, 2015 at 11:57:53AM +0200, Tomasz Nowicki wrote:
On 14.10.2015 08:29, Jiang Liu wrote:
Introduce common interface acpi_pci_root_create() and related data
structures to create PCI root bus for ACPI PCI host bridges. It will
be used to kill duplicated arch specific code for IA64 and x86. It may
also help ARM64 in future.
Reviewed-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx>
Tested-by: Tony Luck <tony.luck@xxxxxxxxx>
Signed-off-by: Jiang Liu <jiang.liu@xxxxxxxxxxxxxxx>
Signed-off-by: Liu Jiang <jiang.liu@xxxxxxxxxxxxxxx>
---
drivers/acpi/pci_root.c | 204 ++++++++++++++++++++++++++++++++++++++++++++++
include/linux/pci-acpi.h | 24 ++++++
2 files changed, 228 insertions(+)
[...]
+
+struct pci_bus *acpi_pci_root_create(struct acpi_pci_root *root,
+ struct acpi_pci_root_ops *ops,
+ struct acpi_pci_root_info *info,
+ void *sysdata)
+{
+ int ret, busnum = root->secondary.start;
+ struct acpi_device *device = root->device;
+ int node = acpi_get_node(device->handle);
+ struct pci_bus *bus;
+
+ info->root = root;
+ info->bridge = device;
+ info->ops = ops;
+ INIT_LIST_HEAD(&info->resources);
+ snprintf(info->name, sizeof(info->name), "PCI Bus %04x:%02x",
+ root->segment, busnum);
+
+ if (ops->init_info && ops->init_info(info))
+ goto out_release_info;
+ if (ops->prepare_resources)
+ ret = ops->prepare_resources(info);
+ else
+ ret = acpi_pci_probe_root_resources(info);
+ if (ret < 0)
+ goto out_release_info;
+
+ pci_acpi_root_add_resources(info);
+ pci_add_resource(&info->resources, &root->secondary);
+ bus = pci_create_root_bus(NULL, busnum, ops->pci_ops,
+ sysdata, &info->resources);
Thank a lot for this cleanup!!
I recall you already considered passing segment (domain nr) to
pci_create_root_bus, right? Can you please remind me why we gave up on this?
I am asking because currently I can not find the way to retrieve domain
number from pci_bus_assign_domain_nr (for those platforms which choose
PCI_DOMAINS_GENERIC and want to use segment nr from MCFG table) which is the
part of pci_create_root_bus.
Not sure I fully understand your question, but pci_bus_assign_domain_nr() will
put the assigned domain number in bus->domain_nr if you chose PCI_DOMAINS_GENERIC.
Do you want to override that value with the segment nr from MCFG?