PCI: quirk related clean up
Subsystems (4)
cover PCI: quirk related clean up
After commit:
| commit 3209874a1da2c51c7325e601d9634189ee178ad6 | Author: Arjan van de Ven <[email protected]> | Date: Mon Jan 30 20:52:07 2012 -0800 | | PCI: Annotate PCI quirks in initcall_debug style
will have lots of print out for quirks when initcall_debug is specified.
It turns out most of them are not really called for the devices because quirks itself will check class id and bail out early.
Try to put class into quirk declaration. So we could avoid dive into these quirks.
could be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-pci5
4ace9ad: PCI: Use class for quirk for usb host controller fixup
cc60c7c: PCI: Use class for quirk for ti816x class fixup 85fa49c: PCI: Use class for quirk for intel e100 interrupt fixup 8e4b35b: PCI: Use class for quirk for netmos class fixup 7c4b5d6: PCI: Use class for quirk for legacy ATA NO_D3 176e7df: PCI: Use class for quirk for cardbus_legacy
c2c7107: PCI: Use class for quirk for host bridge mmio_always_on 6924d3b: PCI: Use class for quirk for pci_fixup_video 7133c84: PCI: Use class quirk for intel fix_transparent_bridge
bf9f6e6: PCI: Use class for quirk for via_no_dac
d2e6e88: PCI: Add class support in quirk handling
-v2: separate to small patches for different quirk according to Jesse.
Thanks
Yinghai
arch/x86/kernel/pci-dma.c | 5 ++- arch/x86/pci/fixup.c | 12 +++---- drivers/pci/quirks.c | 61 +++++++++++++++++++++------------------ drivers/usb/host/pci-quirks.c | 3 +- include/linux/pci.h | 63 +++++++++++++++++++++++++++++++++------- 5 files changed, 95 insertions(+), 49 deletions(-)
PATCH 1/11 PCI: Add class support in quirk handling
Recently there is new support to make quirk calling will report duration time. That will boot log get more print out with initcall_debug is specified.
Found a lot of quirks are calling for not related devices.
Reason is quirk frame do not support class handling. So quirk code have to use PCI_ANY_ID for vendor/device and let quirk code itself to check class inside the func.
The patch add class and cls_shift into struct pci_fixup. Also update related macro to accept the class and shift.
-v2: fix v1 that left over of sparated patch.
-v3: according to Jesse, change cls to class, cls_shift, to class_shift.
--- drivers/pci/quirks.c | 12 +++++---- include/linux/pci.h | 63 +++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 59 insertions(+), 16 deletions(-)
drivers/pci/quirks.c +7 -5
@@ -2961,17 +2961,19 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);static void pci_do_fixups (struct pci_dev *dev,struct pci_fixup *f,struct pci_fixup *end) { -while (f < end) { -if ((f->vendor == dev->vendor || f->vendor == (u16 )PCI_ANY_ID ) && - (f->device == dev->device || f->device == (u16 )PCI_ANY_ID )) { +for (; f < end; f++) +if ((f->class == (u32) (dev->class >> f->class_shift) || + f->class == (u32 )PCI_ANY_ID ) && + (f->vendor == dev->vendor || + f->vendor == (u16 )PCI_ANY_ID ) && + (f->device == dev->device || + f->device == (u16 )PCI_ANY_ID )) {dev_dbg (&dev->dev,"calling %pF\n" , f->hook);if (initcall_debug)do_one_fixup_debug (f->hook, dev);else f->hook (dev); } - f++; - } }extern struct pci_fixup __start_pci_fixups_early[];
include/linux/pci.h +52 -11
89 lines not on this page · raw message
Signature · 1 line
1.7.7
Jesse Barnes
AppliedRe: [PATCH 01/11] PCI: Add class support in quirk handling
Quoted 13 lines · On Thu, 23 Feb 2012 23:46:49 -0800 Yinghai Lu <[email protected]> wrote:
Recently there is new support to make quirk calling will report duration time. That will boot log get more print out with
initcall_debugis specified.Found a lot of quirks are calling for not related devices.
Reason is quirk frame do not support class handling. So quirk code have to use
PCI_ANY_IDfor vendor/device and let quirk code itself to check class inside the func.The patch add class and
cls_shiftinto structpci_fixup. Also update related macro to accept the class and shift.
Review
Quoted 2 lines
(quoted diff) +0
-2-v2: fix v1 that left over of sparated patch. -v3: according to Jesse, change cls to class, cls_shift, to class_shift.
Applied these, thanks Yinghai.
Signature · 1 line
Jesse Barnes, Intel Open Source Technology Center
PATCH 2/11 PCI: Use class for quirk for via_no_dac
In reply to Yinghai Lu--- arch/x86/kernel/pci-dma.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/kernel/pci-dma.c +3 -2
@@ -262,10 +262,11 @@ rootfs_initcall(pci_iommu_init);static __devinit void via_no_dac (struct pci_dev *dev) { -if ((dev->class >>8 ) ==PCI_CLASS_BRIDGE_PCI && forbid_dac ==0 ) { +if (forbid_dac ==0 ) {dev_info (&dev->dev,"disabling DAC on VIA PCI bridge\n" ); forbid_dac =1 ; } } -DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_VIA ,PCI_ANY_ID , via_no_dac); +DECLARE_PCI_FIXUP_CLASS_FINAL (PCI_VENDOR_ID_VIA ,PCI_ANY_ID , +PCI_CLASS_BRIDGE_PCI ,8 , via_no_dac);#endif
Signature · 1 line
1.7.7
PATCH 3/11 PCI: Use class quirk for intel fix_transparent_bridge
In reply to Yinghai Lu--- arch/x86/pci/fixup.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
arch/x86/pci/fixup.c +3 -3
@@ -164,11 +164,11 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_*/ static void __devinit pci_fixup_transparent_bridge (struct pci_dev *dev) { -if ((dev->class >>8 ) ==PCI_CLASS_BRIDGE_PCI && - (dev->device &0xff00 ) ==0x2400 ) +if ((dev->device &0xff00 ) ==0x2400 ) dev->transparent =1 ; } -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_INTEL ,PCI_ANY_ID , pci_fixup_transparent_bridge); +DECLARE_PCI_FIXUP_CLASS_HEADER (PCI_VENDOR_ID_INTEL ,PCI_ANY_ID , +PCI_CLASS_BRIDGE_PCI ,8 , pci_fixup_transparent_bridge);/* * Fixup for C1 Halt Disconnect problem on nForce2 systems.
Signature · 1 line
1.7.7
PATCH 4/11 PCI: Use class for quirk for pci_fixup_video
In reply to Yinghai Lu--- arch/x86/pci/fixup.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-)
arch/x86/pci/fixup.c +2 -4
@@ -322,9 +322,6 @@ static void __devinit pci_fixup_video(struct pci_dev *pdev)struct pci_bus *bus;u16 config; -if ((pdev->class >>8 ) !=PCI_CLASS_DISPLAY_VGA ) -return ; -/* Is VGA routed to us? */ bus = pdev->bus;while (bus) {
@@ -353,7 +350,8 @@ static void __devinit pci_fixup_video(struct pci_dev *pdev)dev_printk (KERN_DEBUG , &pdev->dev,"Boot video device\n" ); } } -DECLARE_PCI_FIXUP_FINAL (PCI_ANY_ID ,PCI_ANY_ID , pci_fixup_video); +DECLARE_PCI_FIXUP_CLASS_FINAL (PCI_ANY_ID ,PCI_ANY_ID , +PCI_CLASS_DISPLAY_VGA ,8 , pci_fixup_video);static const struct dmi_system_id __devinitconst msi_k8t_dmi_table[] = {
Signature · 1 line
1.7.7
PATCH 5/11 PCI: Use class for quirk for host bridge mmio_always_on
In reply to Yinghai Lu--- drivers/pci/quirks.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/pci/quirks.c +3 -3
@@ -102,10 +102,10 @@ DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_resource_alignment);*/ static void __devinit quirk_mmio_always_on (struct pci_dev *dev) { -if ((dev->class >>8 ) ==PCI_CLASS_BRIDGE_HOST ) - dev->mmio_always_on =1 ; + dev->mmio_always_on =1 ; } -DECLARE_PCI_FIXUP_EARLY (PCI_ANY_ID ,PCI_ANY_ID , quirk_mmio_always_on); +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_ANY_ID ,PCI_ANY_ID , +PCI_CLASS_BRIDGE_HOST ,8 , quirk_mmio_always_on);/* The Mellanox Tavor device gives false positive parity errors * Mark this device with a broken_parity_status, to allow
Signature · 1 line
1.7.7
PATCH 6/11 PCI: Use class for quirk for cardbus_legacy
In reply to Yinghai Lu--- drivers/pci/quirks.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/pci/quirks.c +4 -4
@@ -1004,12 +1004,12 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C597_0, quirk_vt*/ static void quirk_cardbus_legacy (struct pci_dev *dev) { -if ((PCI_CLASS_BRIDGE_CARDBUS <<8 ) ^ dev->class) -return ;pci_write_config_dword (dev,PCI_CB_LEGACY_MODE_BASE ,0 ); } -DECLARE_PCI_FIXUP_FINAL (PCI_ANY_ID ,PCI_ANY_ID , quirk_cardbus_legacy); -DECLARE_PCI_FIXUP_RESUME_EARLY (PCI_ANY_ID ,PCI_ANY_ID , quirk_cardbus_legacy); +DECLARE_PCI_FIXUP_CLASS_FINAL (PCI_ANY_ID ,PCI_ANY_ID , +PCI_CLASS_BRIDGE_CARDBUS ,8 , quirk_cardbus_legacy); +DECLARE_PCI_FIXUP_CLASS_RESUME_EARLY (PCI_ANY_ID ,PCI_ANY_ID , +PCI_CLASS_BRIDGE_CARDBUS ,8 , quirk_cardbus_legacy);/* * Following the PCI ordering rules is optional on the AMD762. I'm not
Signature · 1 line
1.7.7
PATCH 7/11 PCI: Use class for quirk for legacy ATA NO_D3
In reply to Yinghai Lu--- drivers/pci/quirks.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-)
drivers/pci/quirks.c +10 -7
@@ -1166,17 +1166,20 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, quistatic void __devinit quirk_no_ata_d3 (struct pci_dev *pdev) { -/* Quirk the legacy ATA devices only. The AHCI ones are ok */ -if ((pdev->class >>8 ) ==PCI_CLASS_STORAGE_IDE ) - pdev->dev_flags |=PCI_DEV_FLAGS_NO_D3 ; + pdev->dev_flags |=PCI_DEV_FLAGS_NO_D3 ; } -DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SERVERWORKS ,PCI_ANY_ID , quirk_no_ata_d3); -DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_ATI ,PCI_ANY_ID , quirk_no_ata_d3); +/* Quirk the legacy ATA devices only. The AHCI ones are ok */ +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_VENDOR_ID_SERVERWORKS ,PCI_ANY_ID , +PCI_CLASS_STORAGE_IDE ,8 , quirk_no_ata_d3); +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_VENDOR_ID_ATI ,PCI_ANY_ID , +PCI_CLASS_STORAGE_IDE ,8 , quirk_no_ata_d3);/* ALi loses some register settings that we cannot then restore */ -DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_AL ,PCI_ANY_ID , quirk_no_ata_d3); +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_VENDOR_ID_AL ,PCI_ANY_ID , +PCI_CLASS_STORAGE_IDE ,8 , quirk_no_ata_d3);/* VIA comes back fine but we need to keep it alive or ACPI GTM failures occur when mode detecting */ -DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_VIA ,PCI_ANY_ID , quirk_no_ata_d3); +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_VENDOR_ID_VIA ,PCI_ANY_ID , +PCI_CLASS_STORAGE_IDE ,8 , quirk_no_ata_d3);/* This was originally an Alpha specific thing, but it really fits here. * The i82375 PCI/EISA bridge appears as non-classified. Fix that.
Signature · 1 line
1.7.7
PATCH 8/11 PCI: Use class for quirk for netmos class fixup
In reply to Yinghai Lu--- drivers/pci/quirks.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
drivers/pci/quirks.c +3 -3
@@ -1878,8 +1878,7 @@ static void __devinit quirk_netmos(struct pci_dev *dev)case PCI_DEVICE_ID_NETMOS_9745 :case PCI_DEVICE_ID_NETMOS_9845 :case PCI_DEVICE_ID_NETMOS_9855 : -if ((dev->class >>8 ) ==PCI_CLASS_COMMUNICATION_SERIAL && - num_parallel) { +if (num_parallel) { dev_info(&dev->dev, "Netmos %04x (%u parallel, " "%u serial); changing class SERIAL to OTHER " "(use parport_serial)\n",
@@ -1889,7 +1888,8 @@ static void __devinit quirk_netmos(struct pci_dev *dev) } } } -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_NETMOS ,PCI_ANY_ID , quirk_netmos); +DECLARE_PCI_FIXUP_CLASS_HEADER (PCI_VENDOR_ID_NETMOS ,PCI_ANY_ID , +PCI_CLASS_COMMUNICATION_SERIAL ,8 , quirk_netmos);static void __devinit quirk_e100_interrupt (struct pci_dev *dev) {
Signature · 1 line
1.7.7
PATCH 9/11 PCI: Use class for quirk for intel e100 interrupt fixup
In reply to Yinghai Lu--- drivers/pci/quirks.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/pci/quirks.c +2 -1
@@ -1957,7 +1957,8 @@ static void __devinit quirk_e100_interrupt(struct pci_dev *dev)iounmap (csr); } -DECLARE_PCI_FIXUP_FINAL (PCI_VENDOR_ID_INTEL ,PCI_ANY_ID , quirk_e100_interrupt); +DECLARE_PCI_FIXUP_CLASS_FINAL (PCI_VENDOR_ID_INTEL ,PCI_ANY_ID , +PCI_CLASS_NETWORK_ETHERNET ,8 , quirk_e100_interrupt);/* * The 82575 and 82598 may experience data corruption issues when transitioning
Signature · 1 line
1.7.7
PATCH 10/11 PCI: Use class for quirk for ti816x class fixup
In reply to Yinghai Lu--- drivers/pci/quirks.c | 9 ++++----- 1 files changed, 4 insertions(+), 5 deletions(-)
drivers/pci/quirks.c +4 -5
@@ -2822,12 +2822,11 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors);static void __devinit fixup_ti816x_class (struct pci_dev * dev) {/* TI 816x devices do not have class code set when in PCIe boot mode */ -if (dev->class ==PCI_CLASS_NOT_DEFINED ) { -dev_info (&dev->dev,"Setting PCI class for 816x PCIe device\n" ); - dev->class =PCI_CLASS_MULTIMEDIA_VIDEO ; - } +dev_info (&dev->dev,"Setting PCI class for 816x PCIe device\n" ); + dev->class =PCI_CLASS_MULTIMEDIA_VIDEO ; } -DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_TI ,0xb800 , fixup_ti816x_class); +DECLARE_PCI_FIXUP_CLASS_EARLY (PCI_VENDOR_ID_TI ,0xb800 , +PCI_CLASS_NOT_DEFINED ,0 , fixup_ti816x_class);/* Some PCIe devices do not work reliably with the claimed maximum * payload size supported.
Signature · 1 line
1.7.7
PATCH 11/11 PCI: Use class for quirk for usb host controller fixup
In reply to Yinghai Lu--- drivers/usb/host/pci-quirks.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
drivers/usb/host/pci-quirks.c +2 -1
@@ -876,4 +876,5 @@ static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev)else if (pdev->class ==PCI_CLASS_SERIAL_USB_XHCI )quirk_usb_handoff_xhci (pdev); } -DECLARE_PCI_FIXUP_FINAL (PCI_ANY_ID ,PCI_ANY_ID , quirk_usb_early_handoff); +DECLARE_PCI_FIXUP_CLASS_FINAL (PCI_ANY_ID ,PCI_ANY_ID , +PCI_CLASS_SERIAL_USB ,8 , quirk_usb_early_handoff);
Signature · 1 line
1.7.7