Re: [PATCH v2] PCI: Fix Switchtec DMA aliasing quirk dmesg noise

From: Bjorn Helgaas
Date: Wed Oct 10 2018 - 17:08:30 EST


On Fri, Oct 05, 2018 at 09:49:40AM -0600, Logan Gunthorpe wrote:
> Currently the Switchtec quirk runs on all endpoints in the Switch
> which includes all the upstream and downstream ports. Seeing these
> other functions do not contain BARs the quirk fails when trying to
> map the BAR and prints the error "Cannot iomap Switchtec device".
> The user will see a few of these useless and scary errors, one for
> each port in the switch.
>
> At most, the quirk should only run on either a management endpoint
> (class=PCI_CLASS_MEMORY_OTHER) or an NTB endpoint
> (PCI_CLASS_BRIDGE_OTHER). However, seeing the quirk is useless except
> in NTB applications, we will only run it when the class is
> PCI_CLASS_BRIDGE_OTHER.
>
> Thus, switch to using DECLARE_PCI_FIXUP_CLASS_FINAL and clean up
> the list with a define (so we don't have to change as much code if
> we ever have to adjust the list).
>
> Reported-by: Stephen Bates <sbates@xxxxxxxxxxxx>
> Cc: Doug Meyer <dmeyer@xxxxxxxxxx>
> Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
> Cc: Kurt Schwemmer <kurt.schwemmer@xxxxxxxxxxxxx>
> Fixes: ad281ecf1c7d ("PCI: Add DMA alias quirk for Microsemi Switchtec NTB")
> Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>

Applied to pci/misc for v4.20, thanks!

I split this into two patches so the important change doesn't get lost in
the noise of the SWITCHTEC_QUIRK() addition:

- Add the SWITCHTEC_QUIRK() macro, but don't change anything else
- Change SWITCHTEC_QUIRK() to use DECLARE_PCI_FIXUP_CLASS_FINAL

> ---
>
> * v2: Changes comment style, per feedback from Christoph
>
> drivers/pci/quirks.c | 90 +++++++++++++++++---------------------------
> 1 file changed, 34 insertions(+), 56 deletions(-)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 6bc27b7fd452..0f072aed30f5 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -5057,59 +5057,37 @@ static void quirk_switchtec_ntb_dma_alias(struct pci_dev *pdev)
> pci_iounmap(pdev, mmio);
> pci_disable_device(pdev);
> }
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8531,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8532,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8533,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8534,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8535,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8536,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8543,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8544,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8545,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8546,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8551,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8552,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8553,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8554,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8555,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8556,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8561,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8562,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8563,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8564,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8565,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8566,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8571,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8572,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8573,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8574,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8575,
> - quirk_switchtec_ntb_dma_alias);
> -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_MICROSEMI, 0x8576,
> - quirk_switchtec_ntb_dma_alias);
> +
> +#define SWITCHTEC_QUIRK(vid) \
> + DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_MICROSEMI, vid, \
> + PCI_CLASS_BRIDGE_OTHER, 8, quirk_switchtec_ntb_dma_alias)
> +SWITCHTEC_QUIRK(0x8531); /* PFX 24xG3 */
> +SWITCHTEC_QUIRK(0x8532); /* PFX 32xG3 */
> +SWITCHTEC_QUIRK(0x8533); /* PFX 48xG3 */
> +SWITCHTEC_QUIRK(0x8534); /* PFX 64xG3 */
> +SWITCHTEC_QUIRK(0x8535); /* PFX 80xG3 */
> +SWITCHTEC_QUIRK(0x8536); /* PFX 96xG3 */
> +SWITCHTEC_QUIRK(0x8541); /* PSX 24xG3 */
> +SWITCHTEC_QUIRK(0x8542); /* PSX 32xG3 */
> +SWITCHTEC_QUIRK(0x8543); /* PSX 48xG3 */
> +SWITCHTEC_QUIRK(0x8544); /* PSX 64xG3 */
> +SWITCHTEC_QUIRK(0x8545); /* PSX 80xG3 */
> +SWITCHTEC_QUIRK(0x8546); /* PSX 96xG3 */
> +SWITCHTEC_QUIRK(0x8551); /* PAX 24XG3 */
> +SWITCHTEC_QUIRK(0x8552); /* PAX 32XG3 */
> +SWITCHTEC_QUIRK(0x8553); /* PAX 48XG3 */
> +SWITCHTEC_QUIRK(0x8554); /* PAX 64XG3 */
> +SWITCHTEC_QUIRK(0x8555); /* PAX 80XG3 */
> +SWITCHTEC_QUIRK(0x8556); /* PAX 96XG3 */
> +SWITCHTEC_QUIRK(0x8561); /* PFXL 24XG3 */
> +SWITCHTEC_QUIRK(0x8562); /* PFXL 32XG3 */
> +SWITCHTEC_QUIRK(0x8563); /* PFXL 48XG3 */
> +SWITCHTEC_QUIRK(0x8564); /* PFXL 64XG3 */
> +SWITCHTEC_QUIRK(0x8565); /* PFXL 80XG3 */
> +SWITCHTEC_QUIRK(0x8566); /* PFXL 96XG3 */
> +SWITCHTEC_QUIRK(0x8571); /* PFXI 24XG3 */
> +SWITCHTEC_QUIRK(0x8572); /* PFXI 32XG3 */
> +SWITCHTEC_QUIRK(0x8573); /* PFXI 48XG3 */
> +SWITCHTEC_QUIRK(0x8574); /* PFXI 64XG3 */
> +SWITCHTEC_QUIRK(0x8575); /* PFXI 80XG3 */
> +SWITCHTEC_QUIRK(0x8576); /* PFXI 96XG3 */
> --
> 2.19.0