[PATCH] PCI: add MSI INTX_DISABLE quirks for AR8161/AR8162/AR8171/AR8172
Huang, Xiong
xiong at qca.qualcomm.com
Thu Mar 7 10:57:59 EST 2013
> >+static void quirk_msi_intx_disable_qca_bug(struct pci_dev *dev) {
> >+ static u16 qca_eth_devid[] = {
> >+ PCI_DEVICE_ID_AR8161,
> >+ PCI_DEVICE_ID_AR8162,
> >+ PCI_DEVICE_ID_AR8171,
> >+ PCI_DEVICE_ID_AR8172};
> >+ struct pci_dev *p;
> >+ int i;
> >+
> >+ /* AR816X/AR817X MSI is fixed at HW level from revision 0x18 */
> >+ for (i = 0; i < ARRAY_SIZE(qca_eth_devid); i++) {
> >+ p = pci_get_device(PCI_VENDOR_ID_ATTANSIC,
> >+ qca_eth_devid[i],
>
> xiong,
>
> The "FINAL" fixup is called just in pci_apply_final_quirks(), if I am correct.
>
> In this function, it will go through all the pci devices which are registered in
> the system. And try to invoke the fixup hook.
>
> Also, before invode the hook, in function pci_do_fixups() it will make sure
> the hook just apply to the devices whose VendorID and DeviceID match what
> you defined in DECLARE_PCI_FIXUP_FINAL.
>
> So I think there is no need to iterate on all those pci device, before you want
> to change the pci_dev->dev_flags.
>
> >+ NULL);
> >+ if (!p)
> >+ return;
> >+
> >+ if (p->revision < 0x18)
> >+ dev->dev_flags |=
> PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
> >+ pci_dev_put(p);
> >+ }
Wei, thanks for you feedback, this patch is just follow the function 'quirk_msi_intx_disable_ati_bug' in quirks.c
Is it ok if I revise code as:
static void quirk_msi_intx_disable_qca_bug(struct pci_dev *dev)
{
If (dev->revision < 0x18)
dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
}
Please advise, thanks !
-Xiong
More information about the unified-drivers
mailing list