[+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