aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/sata_sis.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/sata_sis.c')
-rw-r--r--drivers/ata/sata_sis.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/ata/sata_sis.c b/drivers/ata/sata_sis.c
index 4bcb94866333..eee2097c10c0 100644
--- a/drivers/ata/sata_sis.c
+++ b/drivers/ata/sata_sis.c
@@ -117,7 +117,7 @@ static const struct ata_port_operations sis_ops = {
117 .bmdma_status = ata_bmdma_status, 117 .bmdma_status = ata_bmdma_status,
118 .qc_prep = ata_qc_prep, 118 .qc_prep = ata_qc_prep,
119 .qc_issue = ata_qc_issue_prot, 119 .qc_issue = ata_qc_issue_prot,
120 .data_xfer = ata_pio_data_xfer, 120 .data_xfer = ata_data_xfer,
121 .freeze = ata_bmdma_freeze, 121 .freeze = ata_bmdma_freeze,
122 .thaw = ata_bmdma_thaw, 122 .thaw = ata_bmdma_thaw,
123 .error_handler = ata_bmdma_error_handler, 123 .error_handler = ata_bmdma_error_handler,
@@ -223,11 +223,11 @@ static u32 sis_scr_read (struct ata_port *ap, unsigned int sc_reg)
223 223
224 pci_read_config_byte(pdev, SIS_PMR, &pmr); 224 pci_read_config_byte(pdev, SIS_PMR, &pmr);
225 225
226 val = inl(ap->ioaddr.scr_addr + (sc_reg * 4)); 226 val = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4));
227 227
228 if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) || 228 if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
229 (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED)) 229 (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
230 val2 = inl(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10); 230 val2 = ioread32(ap->ioaddr.scr_addr + (sc_reg * 4) + 0x10);
231 231
232 return (val | val2) & 0xfffffffb; 232 return (val | val2) & 0xfffffffb;
233} 233}
@@ -245,10 +245,10 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
245 if (ap->flags & SIS_FLAG_CFGSCR) 245 if (ap->flags & SIS_FLAG_CFGSCR)
246 sis_scr_cfg_write(ap, sc_reg, val); 246 sis_scr_cfg_write(ap, sc_reg, val);
247 else { 247 else {
248 outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)); 248 iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4));
249 if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) || 249 if ((pdev->device == 0x0182) || (pdev->device == 0x0183) || (pdev->device == 0x1182) ||
250 (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED)) 250 (pdev->device == 0x1183) || (pmr & SIS_PMR_COMBINED))
251 outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10); 251 iowrite32(val, ap->ioaddr.scr_addr + (sc_reg * 4)+0x10);
252 } 252 }
253} 253}
254 254
@@ -353,10 +353,14 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
353 return -ENOMEM; 353 return -ENOMEM;
354 354
355 if (!(probe_ent->port_flags & SIS_FLAG_CFGSCR)) { 355 if (!(probe_ent->port_flags & SIS_FLAG_CFGSCR)) {
356 probe_ent->port[0].scr_addr = 356 void *mmio;
357 pci_resource_start(pdev, SIS_SCR_PCI_BAR); 357
358 probe_ent->port[1].scr_addr = 358 mmio = pcim_iomap(pdev, SIS_SCR_PCI_BAR, 0);
359 pci_resource_start(pdev, SIS_SCR_PCI_BAR) + port2_start; 359 if (!mmio)
360 return -ENOMEM;
361
362 probe_ent->port[0].scr_addr = mmio;
363 probe_ent->port[1].scr_addr = mmio + port2_start;
360 } 364 }
361 365
362 pci_set_master(pdev); 366 pci_set_master(pdev);