aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/cciss.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 9a4869572a0..b4264bcda61 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -4108,6 +4108,18 @@ static inline bool CISS_signature_present(ctlr_info_t *h)
4108 return true; 4108 return true;
4109} 4109}
4110 4110
4111/* Need to enable prefetch in the SCSI core for 6400 in x86 */
4112static inline void cciss_enable_scsi_prefetch(ctlr_info_t *h)
4113{
4114#ifdef CONFIG_X86
4115 u32 prefetch;
4116
4117 prefetch = readl(&(h->cfgtable->SCSI_Prefetch));
4118 prefetch |= 0x100;
4119 writel(prefetch, &(h->cfgtable->SCSI_Prefetch));
4120#endif
4121}
4122
4111static int __devinit cciss_pci_init(ctlr_info_t *c) 4123static int __devinit cciss_pci_init(ctlr_info_t *c)
4112{ 4124{
4113 int prod_index, err; 4125 int prod_index, err;
@@ -4169,16 +4181,7 @@ static int __devinit cciss_pci_init(ctlr_info_t *c)
4169 err = -ENODEV; 4181 err = -ENODEV;
4170 goto err_out_free_res; 4182 goto err_out_free_res;
4171 } 4183 }
4172#ifdef CONFIG_X86 4184 cciss_enable_scsi_prefetch(c);
4173 {
4174 /* Need to enable prefetch in the SCSI core for 6400 in x86 */
4175 __u32 prefetch;
4176 prefetch = readl(&(c->cfgtable->SCSI_Prefetch));
4177 prefetch |= 0x100;
4178 writel(prefetch, &(c->cfgtable->SCSI_Prefetch));
4179 }
4180#endif
4181
4182 /* Disabling DMA prefetch and refetch for the P600. 4185 /* Disabling DMA prefetch and refetch for the P600.
4183 * An ASIC bug may result in accesses to invalid memory addresses. 4186 * An ASIC bug may result in accesses to invalid memory addresses.
4184 * We've disabled prefetch for some time now. Testing with XEN 4187 * We've disabled prefetch for some time now. Testing with XEN