Thread (18 messages) 18 messages, 8 authors, 2016-07-20

[RFC PATCH 1/3] pci, acpi: Match PCI config space accessors against platfrom specific ECAM quirks.

From: Tomasz Nowicki <hidden>
Date: 2016-06-02 13:35:42
Also in: linux-acpi, linux-pci, lkml

On 02.06.2016 14:32, Arnd Bergmann wrote:
On Thursday, June 2, 2016 2:07:43 PM CEST Tomasz Nowicki wrote:
quoted
On 02.06.2016 13:42, Arnd Bergmann wrote:
quoted
On Thursday, June 2, 2016 10:41:01 AM CEST Tomasz Nowicki wrote:
quoted
+struct pci_ecam_ops *pci_mcfg_get_ops(struct acpi_pci_root *root)
+{
+       int bus_num = root->secondary.start;
+       int domain = root->segment;
+       struct pci_cfg_fixup *f;
+
+       if (!mcfg_table)
+               return &pci_generic_ecam_ops;
+
+       /*
+        * Match against platform specific quirks and return corresponding
+        * CAM ops.
+        *
+        * First match against PCI topology <domain:bus> then use OEM ID and
+        * OEM revision from MCFG table standard header.
+        */
+       for (f = __start_acpi_mcfg_fixups; f < __end_acpi_mcfg_fixups; f++) {
+               if ((f->domain == domain || f->domain == PCI_MCFG_DOMAIN_ANY) &&
+                   (f->bus_num == bus_num || f->bus_num == PCI_MCFG_BUS_ANY) &&
+                   (!strncmp(f->oem_id, mcfg_table->header.oem_id,
+                             ACPI_OEM_ID_SIZE)) &&
+                   (f->oem_revision == mcfg_table->header.oem_revision))
+                       return f->ops;
+       }
+       /* No quirks, use ECAM */
+       return &pci_generic_ecam_ops;
+}
+
   int pci_mcfg_lookup(struct acpi_pci_root *root)
Can you explain the use of pci_ecam_ops instead of pci_ops here?
I wanted to get associated bus_shift and use it to setup configuration
region properly before calling pci_ecam_create. Please see next patch.
I see. It feels really odd to do it this way though, since having a
nonstandard bus_shift essentially means not using anything resembling
ECAM to start with.

I realize that a lot of the host bridges are not ECAM, but because
of this, it would be more logical to have their own pci_ops instead
of pci_ecam_ops.
Well, we have bus_shift there to express bus shift differentiation. So I 
would say we should change just structure name to prevent misunderstanding.

Thanks,
Tomasz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help