Message ID | 1401297293-3950-1-git-send-email-m-karicheri2@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, May 28, 2014 at 01:14:53PM -0400, Murali Karicheri wrote: > Call pcie_bus_configure_settings on ARM, like for other platforms. > pcie_bus_configure_settings makes sure the MPS across the bus is > uniform and provides the ability to tune the MRSS and MPS to higher > performance values. This is particularly important for embedded where > there is no firmware to program these PCI-E settings for the OS. > > Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> I applied this to pci/misc for v3.16. Russell, let me know if you object or prefer another route, and I can drop it. I tweaked the changelog but didn't touch the actual patch, so I think git will do the right thing if it arrives via two trees. > CC: Russell King <linux@arm.linux.org.uk> > CC: Bjorn Helgaas <bhelgaas@google.com> > CC: Arnd Bergmann <arnd@arndb.de> > CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > CC: Santosh Shilimkar <santosh.shilimkar@ti.com> > --- > - Fixed comments against initial version > arch/arm/kernel/bios32.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c > index 16d43cd..17a26c1 100644 > --- a/arch/arm/kernel/bios32.c > +++ b/arch/arm/kernel/bios32.c > @@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw) > */ > pci_bus_add_devices(bus); > } > + > + list_for_each_entry(sys, &head, node) { > + struct pci_bus *bus = sys->bus; > + > + /* Configure PCI Express settings */ > + if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { > + struct pci_bus *child; > + > + list_for_each_entry(child, &bus->children, node) > + pcie_bus_configure_settings(child); > + } > + } > } > > #ifndef CONFIG_PCI_HOST_ITE8152 > -- > 1.7.9.5 >
On 5/30/2014 11:44 AM, Bjorn Helgaas wrote: > On Wed, May 28, 2014 at 01:14:53PM -0400, Murali Karicheri wrote: >> Call pcie_bus_configure_settings on ARM, like for other platforms. >> pcie_bus_configure_settings makes sure the MPS across the bus is >> uniform and provides the ability to tune the MRSS and MPS to higher >> performance values. This is particularly important for embedded where >> there is no firmware to program these PCI-E settings for the OS. >> >> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> > I applied this to pci/misc for v3.16. Russell, let me know if you object > or prefer another route, and I can drop it. I tweaked the changelog but > didn't touch the actual patch, so I think git will do the right thing if it > arrives via two trees. Bjorn, I checked git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git pci/misc branch I don't see it. Is it a different repo? I see the following commits, but not this. a43ae58c848cfbadaba81c8d63202b4487f922a0 PCI: Turn pcibios_penalize_isa_irq() into a weak function 78916b00f0096059c872f537306b1a464c84fb30 PCI: Test for std config alias when testing extended config space 9edbcd2252b5ef148177c9f2c11a56469cf5db52 PCI: Remove pcibios_add_platform_entries() ef4858c64e836b0b9dbdb9ece13ce932d9fcd4ad s390/pci: use pdev->dev.groups for attribute creation dfc73e7acd9925b434a355eeeed86d44cb435f9c PCI: Move Open Firmware devspec attribute to PCI common code 1e358f94c00570f88a590cabe718daf835440cc9 PCI: Fix use of uninitialized MPS value efdd4070f38e962d69c11f23c5aa033121a8cf0f PCI: Remove dead code cad01f9191226f069a0932a01b738bacde784a62 MAINTAINERS: Add arch/x86/kernel/quirks.c to PCI file patterns 10874f5a00266343a06e95da680e8a5a383d9a80 PCI: Remove unnecessary __ref annotations 8895d3bcb8ba960b1b83f95d772b641352ea8e51 PCI: Fail new_id for vendor/device values already built into driver 7c82126a94e69bbbac586f0249e7ef11e681246c PCI: Add new ID for Intel GPU "spurious interrupt" quirk 473153aff4b978006f1c5fbc0e9032fd11061709 PCI: Update my email address 67ebd8140dc8923c65451fa0f6a8eee003c4dcd3 PCI: Fix incorrect vgaarb conditional in WARN_ON() c1309040967e200d3ea6415ae54cf6a69d7ad996 PCI: Use designated initialization in PCI_VDEVICE 7ee4910ab31c4b1fafb7e4f273cbe9340ac953aa PCI: Remove old serial device IDs 56a3d18279f00c7ccbcdc193ceaf1a2f88c51457 PCI: Remove unnecessary includes of <linux/init.h> ff0c41b2df1577f3354f788af4f6bb5dbdfd26da powerpc/PCI: Fix NULL dereference in sys_pciconfig_iobase() list traversal c9eaa447e77efe77b7fa4c953bd62de8297fd6c5 Linux 3.15-rc1 >> CC: Russell King <linux@arm.linux.org.uk> >> CC: Bjorn Helgaas <bhelgaas@google.com> >> CC: Arnd Bergmann <arnd@arndb.de> >> CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> >> CC: Santosh Shilimkar <santosh.shilimkar@ti.com> >> --- >> - Fixed comments against initial version >> arch/arm/kernel/bios32.c | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c >> index 16d43cd..17a26c1 100644 >> --- a/arch/arm/kernel/bios32.c >> +++ b/arch/arm/kernel/bios32.c >> @@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw) >> */ >> pci_bus_add_devices(bus); >> } >> + >> + list_for_each_entry(sys, &head, node) { >> + struct pci_bus *bus = sys->bus; >> + >> + /* Configure PCI Express settings */ >> + if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { >> + struct pci_bus *child; >> + >> + list_for_each_entry(child, &bus->children, node) >> + pcie_bus_configure_settings(child); >> + } >> + } >> } >> >> #ifndef CONFIG_PCI_HOST_ITE8152 >> -- >> 1.7.9.5 >>
On Tue, Jun 10, 2014 at 8:32 AM, Murali Karicheri <m-karicheri2@ti.com> wrote: > On 5/30/2014 11:44 AM, Bjorn Helgaas wrote: >> >> On Wed, May 28, 2014 at 01:14:53PM -0400, Murali Karicheri wrote: >>> >>> Call pcie_bus_configure_settings on ARM, like for other platforms. >>> pcie_bus_configure_settings makes sure the MPS across the bus is >>> uniform and provides the ability to tune the MRSS and MPS to higher >>> performance values. This is particularly important for embedded where >>> there is no firmware to program these PCI-E settings for the OS. >>> >>> Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> >> >> I applied this to pci/misc for v3.16. Russell, let me know if you object >> or prefer another route, and I can drop it. I tweaked the changelog but >> didn't touch the actual patch, so I think git will do the right thing if >> it >> arrives via two trees. > > Bjorn, > > I checked git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git > pci/misc branch > I don't see it. Is it a different repo? It's already in Linus' tree and I cleaned out pci/misc for the next cycle. http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8b5742ad156d30ee38486652cdbd152e2d6ebbcc >>> CC: Russell King <linux@arm.linux.org.uk> >>> CC: Bjorn Helgaas <bhelgaas@google.com> >>> CC: Arnd Bergmann <arnd@arndb.de> >>> CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> >>> CC: Santosh Shilimkar <santosh.shilimkar@ti.com> >>> --- >>> - Fixed comments against initial version >>> arch/arm/kernel/bios32.c | 12 ++++++++++++ >>> 1 file changed, 12 insertions(+) >>> >>> diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c >>> index 16d43cd..17a26c1 100644 >>> --- a/arch/arm/kernel/bios32.c >>> +++ b/arch/arm/kernel/bios32.c >>> @@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, >>> struct hw_pci *hw) >>> */ >>> pci_bus_add_devices(bus); >>> } >>> + >>> + list_for_each_entry(sys, &head, node) { >>> + struct pci_bus *bus = sys->bus; >>> + >>> + /* Configure PCI Express settings */ >>> + if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { >>> + struct pci_bus *child; >>> + >>> + list_for_each_entry(child, &bus->children, node) >>> + pcie_bus_configure_settings(child); >>> + } >>> + } >>> } >>> #ifndef CONFIG_PCI_HOST_ITE8152 >>> -- >>> 1.7.9.5 >>> >
On Wed, May 28, 2014 at 01:14:53PM -0400, Murali Karicheri wrote: > Call pcie_bus_configure_settings on ARM, like for other platforms. > pcie_bus_configure_settings makes sure the MPS across the bus is > uniform and provides the ability to tune the MRSS and MPS to higher > performance values. This is particularly important for embedded where > there is no firmware to program these PCI-E settings for the OS. > > Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> > > CC: Russell King <linux@arm.linux.org.uk> > CC: Bjorn Helgaas <bhelgaas@google.com> > CC: Arnd Bergmann <arnd@arndb.de> > CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > CC: Santosh Shilimkar <santosh.shilimkar@ti.com> > --- > - Fixed comments against initial version > arch/arm/kernel/bios32.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c > index 16d43cd..17a26c1 100644 > --- a/arch/arm/kernel/bios32.c > +++ b/arch/arm/kernel/bios32.c > @@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw) > */ > pci_bus_add_devices(bus); > } > + > + list_for_each_entry(sys, &head, node) { > + struct pci_bus *bus = sys->bus; > + > + /* Configure PCI Express settings */ > + if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { > + struct pci_bus *child; > + > + list_for_each_entry(child, &bus->children, node) > + pcie_bus_configure_settings(child); This patch (8b5742ad156d ("ARM/PCI: Call pcie_bus_configure_settings() to set MPS")) has been upstream since v3.16-rc1, but I think we goofed. The MPS configuration should be done *before* pci_bus_add_devices(). After pci_bus_add_devices(), drivers may be bound to devices, and the PCI core shouldn't touch device configuration while a driver owns the device. Looking at the code, it seems like it would have been simpler to do this in the existing loop: list_for_each_entry(sys, &head, node) { struct pci_bus *bus = sys->bus; if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { pci_bus_size_bridges(bus); pci_bus_assign_resources(bus); list_for_each_entry(child, &bus->children, node) pcie_bus_configure_settings(child); } pci_bus_add_devices(bus); } so maybe there's some reason I'm not aware of for not doing it that way? > + } > + } > } > > #ifndef CONFIG_PCI_HOST_ITE8152 > -- > 1.7.9.5 >
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 16d43cd..17a26c1 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -545,6 +545,18 @@ void pci_common_init_dev(struct device *parent, struct hw_pci *hw) */ pci_bus_add_devices(bus); } + + list_for_each_entry(sys, &head, node) { + struct pci_bus *bus = sys->bus; + + /* Configure PCI Express settings */ + if (bus && !pci_has_flag(PCI_PROBE_ONLY)) { + struct pci_bus *child; + + list_for_each_entry(child, &bus->children, node) + pcie_bus_configure_settings(child); + } + } } #ifndef CONFIG_PCI_HOST_ITE8152
Call pcie_bus_configure_settings on ARM, like for other platforms. pcie_bus_configure_settings makes sure the MPS across the bus is uniform and provides the ability to tune the MRSS and MPS to higher performance values. This is particularly important for embedded where there is no firmware to program these PCI-E settings for the OS. Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> CC: Russell King <linux@arm.linux.org.uk> CC: Bjorn Helgaas <bhelgaas@google.com> CC: Arnd Bergmann <arnd@arndb.de> CC: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> CC: Santosh Shilimkar <santosh.shilimkar@ti.com> --- - Fixed comments against initial version arch/arm/kernel/bios32.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)