[PATCH] PCI: add MSI INTX_DISABLE quirks for AR8161/AR8162/AR8171/AR8172

Luis R. Rodriguez rodrigue at qca.qualcomm.com
Wed Mar 6 20:36:53 EST 2013


Note to FreeBSD folks:

if you have an equivalent quirk code you'll need to port this.

  Luis

On Wed, Mar 06, 2013 at 01:59:07PM +0800, xiong wrote:
> From: "Huang,Xiong" <xiong at qca.qualcomm.com>
> 
> PCI devices of AR8161/AR8162/AR8171/AR8172 which revision lower than
> 0x18 have this bug.
> 
> Signed-off-by: Huang,Xiong <xiong at qca.qualcomm.com>
> ---
>  drivers/pci/quirks.c    | 35 +++++++++++++++++++++++++++++++++++
>  include/linux/pci_ids.h |  4 ++++
>  2 files changed, 39 insertions(+)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 0369fb6..bf31d72 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -2594,6 +2594,29 @@ static void quirk_msi_intx_disable_ati_bug(struct pci_dev *dev)
>  		dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
>  	pci_dev_put(p);
>  }
> +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],
> +				   NULL);
> +		if (!p)
> +			return;
> +
> +		if (p->revision < 0x18)
> +			dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
> +		pci_dev_put(p);
> +	}
> +}
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_BROADCOM,
>  			PCI_DEVICE_ID_TIGON3_5780,
>  			quirk_msi_intx_disable_bug);
> @@ -2643,6 +2666,18 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1073,
>  			quirk_msi_intx_disable_bug);
>  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC, 0x1083,
>  			quirk_msi_intx_disable_bug);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC,
> +			PCI_DEVICE_ID_AR8161,
> +			quirk_msi_intx_disable_qca_bug);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC,
> +			PCI_DEVICE_ID_AR8162,
> +			quirk_msi_intx_disable_qca_bug);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC,
> +			PCI_DEVICE_ID_AR8171,
> +			quirk_msi_intx_disable_qca_bug);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATTANSIC,
> +			PCI_DEVICE_ID_AR8172,
> +			quirk_msi_intx_disable_qca_bug);
>  #endif /* CONFIG_PCI_MSI */
>  
>  /* Allow manual resource allocation for PCI hotplug bridges
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index f11c1c2..7e171fb 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -2438,6 +2438,10 @@
>  #define PCI_VENDOR_ID_ATTANSIC		0x1969
>  #define PCI_DEVICE_ID_ATTANSIC_L1	0x1048
>  #define PCI_DEVICE_ID_ATTANSIC_L2	0x2048
> +#define PCI_DEVICE_ID_AR8161		0x1091
> +#define PCI_DEVICE_ID_AR8162		0x1090
> +#define PCI_DEVICE_ID_AR8171		0x10A1
> +#define PCI_DEVICE_ID_AR8172		0x10A0
>  
>  #define PCI_VENDOR_ID_JMICRON		0x197B
>  #define PCI_DEVICE_ID_JMICRON_JMB360	0x2360
> -- 
> 1.7.11.7
> 



More information about the unified-drivers mailing list