diff options
Diffstat (limited to 'drivers/scsi/megaraid/megaraid_sas.c')
| -rw-r--r-- | drivers/scsi/megaraid/megaraid_sas.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c index e5c017ccda59..a8c9627a15c4 100644 --- a/drivers/scsi/megaraid/megaraid_sas.c +++ b/drivers/scsi/megaraid/megaraid_sas.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * 2 of the License, or (at your option) any later version. | 10 | * 2 of the License, or (at your option) any later version. |
| 11 | * | 11 | * |
| 12 | * FILE : megaraid_sas.c | 12 | * FILE : megaraid_sas.c |
| 13 | * Version : v00.00.02.04 | 13 | * Version : v00.00.03.01 |
| 14 | * | 14 | * |
| 15 | * Authors: | 15 | * Authors: |
| 16 | * Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com> | 16 | * Sreenivas Bagalkote <Sreenivas.Bagalkote@lsil.com> |
| @@ -55,19 +55,25 @@ static struct pci_device_id megasas_pci_table[] = { | |||
| 55 | 55 | ||
| 56 | { | 56 | { |
| 57 | PCI_VENDOR_ID_LSI_LOGIC, | 57 | PCI_VENDOR_ID_LSI_LOGIC, |
| 58 | PCI_DEVICE_ID_LSI_SAS1064R, // xscale IOP | 58 | PCI_DEVICE_ID_LSI_SAS1064R, /* xscale IOP */ |
| 59 | PCI_ANY_ID, | 59 | PCI_ANY_ID, |
| 60 | PCI_ANY_ID, | 60 | PCI_ANY_ID, |
| 61 | }, | 61 | }, |
| 62 | { | 62 | { |
| 63 | PCI_VENDOR_ID_LSI_LOGIC, | 63 | PCI_VENDOR_ID_LSI_LOGIC, |
| 64 | PCI_DEVICE_ID_LSI_SAS1078R, // ppc IOP | 64 | PCI_DEVICE_ID_LSI_SAS1078R, /* ppc IOP */ |
| 65 | PCI_ANY_ID, | 65 | PCI_ANY_ID, |
| 66 | PCI_ANY_ID, | 66 | PCI_ANY_ID, |
| 67 | }, | 67 | }, |
| 68 | { | 68 | { |
| 69 | PCI_VENDOR_ID_LSI_LOGIC, | ||
| 70 | PCI_DEVICE_ID_LSI_VERDE_ZCR, /* xscale IOP, vega */ | ||
| 71 | PCI_ANY_ID, | ||
| 72 | PCI_ANY_ID, | ||
| 73 | }, | ||
| 74 | { | ||
| 69 | PCI_VENDOR_ID_DELL, | 75 | PCI_VENDOR_ID_DELL, |
| 70 | PCI_DEVICE_ID_DELL_PERC5, // xscale IOP | 76 | PCI_DEVICE_ID_DELL_PERC5, /* xscale IOP */ |
| 71 | PCI_ANY_ID, | 77 | PCI_ANY_ID, |
| 72 | PCI_ANY_ID, | 78 | PCI_ANY_ID, |
| 73 | }, | 79 | }, |
| @@ -289,9 +295,14 @@ static struct megasas_instance_template megasas_instance_template_ppc = { | |||
| 289 | * @regs: MFI register set | 295 | * @regs: MFI register set |
| 290 | */ | 296 | */ |
| 291 | static inline void | 297 | static inline void |
| 292 | megasas_disable_intr(struct megasas_register_set __iomem * regs) | 298 | megasas_disable_intr(struct megasas_instance *instance) |
| 293 | { | 299 | { |
| 294 | u32 mask = 0x1f; | 300 | u32 mask = 0x1f; |
| 301 | struct megasas_register_set __iomem *regs = instance->reg_set; | ||
| 302 | |||
| 303 | if(instance->pdev->device == PCI_DEVICE_ID_LSI_SAS1078R) | ||
| 304 | mask = 0xffffffff; | ||
| 305 | |||
| 295 | writel(mask, ®s->outbound_intr_mask); | 306 | writel(mask, ®s->outbound_intr_mask); |
| 296 | 307 | ||
| 297 | /* Dummy readl to force pci flush */ | 308 | /* Dummy readl to force pci flush */ |
| @@ -1260,7 +1271,7 @@ megasas_transition_to_ready(struct megasas_instance* instance) | |||
| 1260 | /* | 1271 | /* |
| 1261 | * Bring it to READY state; assuming max wait 2 secs | 1272 | * Bring it to READY state; assuming max wait 2 secs |
| 1262 | */ | 1273 | */ |
| 1263 | megasas_disable_intr(instance->reg_set); | 1274 | megasas_disable_intr(instance); |
| 1264 | writel(MFI_INIT_READY, &instance->reg_set->inbound_doorbell); | 1275 | writel(MFI_INIT_READY, &instance->reg_set->inbound_doorbell); |
| 1265 | 1276 | ||
| 1266 | max_wait = 10; | 1277 | max_wait = 10; |
| @@ -1757,6 +1768,11 @@ static int megasas_init_mfi(struct megasas_instance *instance) | |||
| 1757 | init_frame->data_xfer_len = sizeof(struct megasas_init_queue_info); | 1768 | init_frame->data_xfer_len = sizeof(struct megasas_init_queue_info); |
| 1758 | 1769 | ||
| 1759 | /* | 1770 | /* |
| 1771 | * disable the intr before firing the init frame to FW | ||
| 1772 | */ | ||
| 1773 | megasas_disable_intr(instance); | ||
| 1774 | |||
| 1775 | /* | ||
| 1760 | * Issue the init frame in polled mode | 1776 | * Issue the init frame in polled mode |
| 1761 | */ | 1777 | */ |
| 1762 | if (megasas_issue_polled(instance, cmd)) { | 1778 | if (megasas_issue_polled(instance, cmd)) { |
| @@ -2234,7 +2250,7 @@ megasas_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 2234 | megasas_mgmt_info.max_index--; | 2250 | megasas_mgmt_info.max_index--; |
| 2235 | 2251 | ||
| 2236 | pci_set_drvdata(pdev, NULL); | 2252 | pci_set_drvdata(pdev, NULL); |
| 2237 | megasas_disable_intr(instance->reg_set); | 2253 | megasas_disable_intr(instance); |
| 2238 | free_irq(instance->pdev->irq, instance); | 2254 | free_irq(instance->pdev->irq, instance); |
| 2239 | 2255 | ||
| 2240 | megasas_release_mfi(instance); | 2256 | megasas_release_mfi(instance); |
| @@ -2364,7 +2380,7 @@ static void megasas_detach_one(struct pci_dev *pdev) | |||
| 2364 | 2380 | ||
| 2365 | pci_set_drvdata(instance->pdev, NULL); | 2381 | pci_set_drvdata(instance->pdev, NULL); |
| 2366 | 2382 | ||
| 2367 | megasas_disable_intr(instance->reg_set); | 2383 | megasas_disable_intr(instance); |
| 2368 | 2384 | ||
| 2369 | free_irq(instance->pdev->irq, instance); | 2385 | free_irq(instance->pdev->irq, instance); |
| 2370 | 2386 | ||
