[SCSI] bfa: Fix 1860 port initialize when ATC is enabled
authorVijaya Mohan Guvva <vmohan@brocade.com>
Mon, 13 May 2013 09:33:24 +0000 (02:33 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Wed, 26 Jun 2013 18:59:02 +0000 (11:59 -0700)
On Xen kernels, if ATC (address translation cache) is enabled, the
first PCIe DMA read from the adapter fails with an error. This is due to
a bug ASIC, which leads to a failure of 1860 ports to be initialised.

This patch includes the fix to disable Invalidated Tag Match Enable
capability by setting the bit 26 of CHIP_MISC_PRG to 0, by default it is
set to 1.

Signed-off-by: Anil Gurumurthy <agurumur@brocade.com>
Signed-off-by: Vijaya Mohan Guvva <vmohan@brocade.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/bfa/bfa_ioc_ct.c

index de4e726a1263cc1ca563d21aec5536b8c51f4a9c..a8e52a1087107708d33c88ffa42b0fff94aa09f4 100644 (file)
@@ -918,6 +918,16 @@ bfa_ioc_ct2_pll_init(void __iomem *rb, enum bfi_asic_mode mode)
 
                }
        }
+       /*
+       * The very first PCIe DMA Read done by LPU fails with a fatal error,
+       * when Address Translation Cache (ATC) has been enabled by system BIOS.
+       *
+       * Workaround:
+       * Disable Invalidated Tag Match Enable capability by setting the bit 26
+       * of CHIP_MISC_PRG to 0, by default it is set to 1.
+       */
+       r32 = readl(rb + CT2_CHIP_MISC_PRG);
+       writel((r32 & 0xfbffffff), (rb + CT2_CHIP_MISC_PRG));
 
        /*
         * Mask the interrupts and clear any