[-cc Anton (bounced)] On Fri, Jul 26, 2013 at 7:07 AM, Bjorn Helgaas <bhelgaas@xxxxxxxxxx> wrote: > [+cc Ben, Paul, Minghuan, Kumar, Anton, linuxppc-dev > > On Fri, Jul 26, 2013 at 1:23 AM, Chunhe Lan <Chunhe.Lan@xxxxxxxxxxxxx> wrote: >> Freescale platform has class code = 0x0b2000, when it boots. This makes >> kernel PCI bus code to setup these devices resulting into the following >> notice information when trying to enable them: >> >> pci 0000:00:00.0: ignoring class 0x0b2000 (doesn't match header type 01) >> >> This patch adds a ID specific(PCI_VENDOR_ID_FREESCALE & PCI_ANY_ID based) >> 'early' fixup quirk to replace class code with PCI_CLASS_BRIDGE_PCI as >> class. Then the above information disappears. >> >> Signed-off-by: Chunhe Lan <Chunhe.Lan@xxxxxxxxxxxxx> >> Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> >> --- >> drivers/pci/quirks.c | 10 ++++++++++ >> 1 files changed, 10 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c >> index e85d230..906a04a3 100644 >> --- a/drivers/pci/quirks.c >> +++ b/drivers/pci/quirks.c >> @@ -2772,6 +2772,16 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x342e, vtd_mask_spec_errors); >> DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x3c28, vtd_mask_spec_errors); >> #endif >> >> +#ifdef CONFIG_FSL_PCI >> +static void quirk_freescale_class(struct pci_dev *dev) >> +{ >> + dev_info(&dev->dev, "Setting PCI class for FSL PCI host bridge\n"); >> + dev->class = (PCI_CLASS_BRIDGE_PCI << 8) | (dev->class & 0xff); >> +} >> +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_FREESCALE, PCI_ANY_ID, >> + quirk_freescale_class); > > 1. This looks an awful lot like quirk_fsl_pcie_head(). > quirk_fsl_pcie_head() is currently a HEADER quirk, but that runs > *after* pci_setup_device(), where dev->class is used. I suspect this > should be an EARLY quirk instead. But this quirk has a long history > as a HEADER quirk, and I'm sure many people have tested it, so I don't > know what's going on. > > 2. I assume the Freescale vendor ID might be used for devices other > than bridges, so I doubt it would be correct to overwrite the class > for *every* Freescale device as you're doing here. > >> +#endif >> + >> static void fixup_ti816x_class(struct pci_dev *dev) >> { >> /* TI 816x devices do not have class code set when in PCIe boot mode */ >> -- >> 1.7.6.5 >> >> -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html