diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-10-21 21:33:27 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-21 21:33:27 -0400 |
commit | e78a57de94480226f7fc90d0b4837bfc6c99a9e0 (patch) | |
tree | bfe0a664f88b6cb9d284869d615ae2d7fdb7cf63 /drivers/scsi | |
parent | 77501f3cb648e18733509a951ed31eddd7ef2c0b (diff) | |
parent | 452503f993feffe96e8cc9fbff4888b96e2c5e40 (diff) |
Merge branch 'upstream'
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/ahci.c | 8 | ||||
-rw-r--r-- | drivers/scsi/libata-core.c | 180 | ||||
-rw-r--r-- | drivers/scsi/sata_mv.c | 5 | ||||
-rw-r--r-- | drivers/scsi/sata_nv.c | 4 | ||||
-rw-r--r-- | drivers/scsi/sata_promise.c | 8 | ||||
-rw-r--r-- | drivers/scsi/sata_qstor.c | 6 | ||||
-rw-r--r-- | drivers/scsi/sata_sil.c | 4 | ||||
-rw-r--r-- | drivers/scsi/sata_sx4.c | 19 | ||||
-rw-r--r-- | drivers/scsi/sata_vsc.c | 10 | ||||
-rw-r--r-- | drivers/scsi/scsi_error.c | 2 |
10 files changed, 211 insertions, 35 deletions
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c index 5ec866b00479..cfa22e4ee547 100644 --- a/drivers/scsi/ahci.c +++ b/drivers/scsi/ahci.c | |||
@@ -407,7 +407,7 @@ static u32 ahci_scr_read (struct ata_port *ap, unsigned int sc_reg_in) | |||
407 | return 0xffffffffU; | 407 | return 0xffffffffU; |
408 | } | 408 | } |
409 | 409 | ||
410 | return readl((void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 410 | return readl((void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
411 | } | 411 | } |
412 | 412 | ||
413 | 413 | ||
@@ -425,7 +425,7 @@ static void ahci_scr_write (struct ata_port *ap, unsigned int sc_reg_in, | |||
425 | return; | 425 | return; |
426 | } | 426 | } |
427 | 427 | ||
428 | writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 428 | writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
429 | } | 429 | } |
430 | 430 | ||
431 | static void ahci_phy_reset(struct ata_port *ap) | 431 | static void ahci_phy_reset(struct ata_port *ap) |
@@ -453,14 +453,14 @@ static void ahci_phy_reset(struct ata_port *ap) | |||
453 | 453 | ||
454 | static u8 ahci_check_status(struct ata_port *ap) | 454 | static u8 ahci_check_status(struct ata_port *ap) |
455 | { | 455 | { |
456 | void *mmio = (void *) ap->ioaddr.cmd_addr; | 456 | void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; |
457 | 457 | ||
458 | return readl(mmio + PORT_TFDATA) & 0xFF; | 458 | return readl(mmio + PORT_TFDATA) & 0xFF; |
459 | } | 459 | } |
460 | 460 | ||
461 | static u8 ahci_check_err(struct ata_port *ap) | 461 | static u8 ahci_check_err(struct ata_port *ap) |
462 | { | 462 | { |
463 | void *mmio = (void *) ap->ioaddr.cmd_addr; | 463 | void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; |
464 | 464 | ||
465 | return (readl(mmio + PORT_TFDATA) >> 8) & 0xFF; | 465 | return (readl(mmio + PORT_TFDATA) >> 8) & 0xFF; |
466 | } | 466 | } |
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 175d4646333d..9269fd9b814f 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -1082,6 +1082,31 @@ static inline void ata_dump_id(struct ata_device *dev) | |||
1082 | dev->id[93]); | 1082 | dev->id[93]); |
1083 | } | 1083 | } |
1084 | 1084 | ||
1085 | /* | ||
1086 | * Compute the PIO modes available for this device. This is not as | ||
1087 | * trivial as it seems if we must consider early devices correctly. | ||
1088 | * | ||
1089 | * FIXME: pre IDE drive timing (do we care ?). | ||
1090 | */ | ||
1091 | |||
1092 | static unsigned int ata_pio_modes(struct ata_device *adev) | ||
1093 | { | ||
1094 | u16 modes; | ||
1095 | |||
1096 | /* Usual case. Word 53 indicates word 88 is valid */ | ||
1097 | if (adev->id[ATA_ID_FIELD_VALID] & (1 << 2)) { | ||
1098 | modes = adev->id[ATA_ID_PIO_MODES] & 0x03; | ||
1099 | modes <<= 3; | ||
1100 | modes |= 0x7; | ||
1101 | return modes; | ||
1102 | } | ||
1103 | |||
1104 | /* If word 88 isn't valid then Word 51 holds the PIO timing number | ||
1105 | for the maximum. Turn it into a mask and return it */ | ||
1106 | modes = (2 << (adev->id[ATA_ID_OLD_PIO_MODES] & 0xFF)) - 1 ; | ||
1107 | return modes; | ||
1108 | } | ||
1109 | |||
1085 | /** | 1110 | /** |
1086 | * ata_dev_identify - obtain IDENTIFY x DEVICE page | 1111 | * ata_dev_identify - obtain IDENTIFY x DEVICE page |
1087 | * @ap: port on which device we wish to probe resides | 1112 | * @ap: port on which device we wish to probe resides |
@@ -1215,10 +1240,8 @@ retry: | |||
1215 | xfer_modes = dev->id[ATA_ID_UDMA_MODES]; | 1240 | xfer_modes = dev->id[ATA_ID_UDMA_MODES]; |
1216 | if (!xfer_modes) | 1241 | if (!xfer_modes) |
1217 | xfer_modes = (dev->id[ATA_ID_MWDMA_MODES]) << ATA_SHIFT_MWDMA; | 1242 | xfer_modes = (dev->id[ATA_ID_MWDMA_MODES]) << ATA_SHIFT_MWDMA; |
1218 | if (!xfer_modes) { | 1243 | if (!xfer_modes) |
1219 | xfer_modes = (dev->id[ATA_ID_PIO_MODES]) << (ATA_SHIFT_PIO + 3); | 1244 | xfer_modes = ata_pio_modes(dev); |
1220 | xfer_modes |= (0x7 << ATA_SHIFT_PIO); | ||
1221 | } | ||
1222 | 1245 | ||
1223 | ata_dump_id(dev); | 1246 | ata_dump_id(dev); |
1224 | 1247 | ||
@@ -1515,6 +1538,152 @@ void ata_port_disable(struct ata_port *ap) | |||
1515 | ap->flags |= ATA_FLAG_PORT_DISABLED; | 1538 | ap->flags |= ATA_FLAG_PORT_DISABLED; |
1516 | } | 1539 | } |
1517 | 1540 | ||
1541 | /* | ||
1542 | * This mode timing computation functionality is ported over from | ||
1543 | * drivers/ide/ide-timing.h and was originally written by Vojtech Pavlik | ||
1544 | */ | ||
1545 | /* | ||
1546 | * PIO 0-5, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds). | ||
1547 | * These were taken from ATA/ATAPI-6 standard, rev 0a, except | ||
1548 | * for PIO 5, which is a nonstandard extension and UDMA6, which | ||
1549 | * is currently supported only by Maxtor drives. | ||
1550 | */ | ||
1551 | |||
1552 | static const struct ata_timing ata_timing[] = { | ||
1553 | |||
1554 | { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 15 }, | ||
1555 | { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 20 }, | ||
1556 | { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 30 }, | ||
1557 | { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 45 }, | ||
1558 | |||
1559 | { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 60 }, | ||
1560 | { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 80 }, | ||
1561 | { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 120 }, | ||
1562 | |||
1563 | /* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 150 }, */ | ||
1564 | |||
1565 | { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 120, 0 }, | ||
1566 | { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 150, 0 }, | ||
1567 | { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 480, 0 }, | ||
1568 | |||
1569 | { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 240, 0 }, | ||
1570 | { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 480, 0 }, | ||
1571 | { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 960, 0 }, | ||
1572 | |||
1573 | /* { XFER_PIO_5, 20, 50, 30, 100, 50, 30, 100, 0 }, */ | ||
1574 | { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 120, 0 }, | ||
1575 | { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 180, 0 }, | ||
1576 | |||
1577 | { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 240, 0 }, | ||
1578 | { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 383, 0 }, | ||
1579 | { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 600, 0 }, | ||
1580 | |||
1581 | /* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 960, 0 }, */ | ||
1582 | |||
1583 | { 0xFF } | ||
1584 | }; | ||
1585 | |||
1586 | #define ENOUGH(v,unit) (((v)-1)/(unit)+1) | ||
1587 | #define EZ(v,unit) ((v)?ENOUGH(v,unit):0) | ||
1588 | |||
1589 | static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT) | ||
1590 | { | ||
1591 | q->setup = EZ(t->setup * 1000, T); | ||
1592 | q->act8b = EZ(t->act8b * 1000, T); | ||
1593 | q->rec8b = EZ(t->rec8b * 1000, T); | ||
1594 | q->cyc8b = EZ(t->cyc8b * 1000, T); | ||
1595 | q->active = EZ(t->active * 1000, T); | ||
1596 | q->recover = EZ(t->recover * 1000, T); | ||
1597 | q->cycle = EZ(t->cycle * 1000, T); | ||
1598 | q->udma = EZ(t->udma * 1000, UT); | ||
1599 | } | ||
1600 | |||
1601 | void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b, | ||
1602 | struct ata_timing *m, unsigned int what) | ||
1603 | { | ||
1604 | if (what & ATA_TIMING_SETUP ) m->setup = max(a->setup, b->setup); | ||
1605 | if (what & ATA_TIMING_ACT8B ) m->act8b = max(a->act8b, b->act8b); | ||
1606 | if (what & ATA_TIMING_REC8B ) m->rec8b = max(a->rec8b, b->rec8b); | ||
1607 | if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b); | ||
1608 | if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active); | ||
1609 | if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover); | ||
1610 | if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle); | ||
1611 | if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma); | ||
1612 | } | ||
1613 | |||
1614 | static const struct ata_timing* ata_timing_find_mode(unsigned short speed) | ||
1615 | { | ||
1616 | const struct ata_timing *t; | ||
1617 | |||
1618 | for (t = ata_timing; t->mode != speed; t++) | ||
1619 | if (t->mode != 0xFF) | ||
1620 | return NULL; | ||
1621 | return t; | ||
1622 | } | ||
1623 | |||
1624 | int ata_timing_compute(struct ata_device *adev, unsigned short speed, | ||
1625 | struct ata_timing *t, int T, int UT) | ||
1626 | { | ||
1627 | const struct ata_timing *s; | ||
1628 | struct ata_timing p; | ||
1629 | |||
1630 | /* | ||
1631 | * Find the mode. | ||
1632 | */ | ||
1633 | |||
1634 | if (!(s = ata_timing_find_mode(speed))) | ||
1635 | return -EINVAL; | ||
1636 | |||
1637 | /* | ||
1638 | * If the drive is an EIDE drive, it can tell us it needs extended | ||
1639 | * PIO/MW_DMA cycle timing. | ||
1640 | */ | ||
1641 | |||
1642 | if (adev->id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */ | ||
1643 | memset(&p, 0, sizeof(p)); | ||
1644 | if(speed >= XFER_PIO_0 && speed <= XFER_SW_DMA_0) { | ||
1645 | if (speed <= XFER_PIO_2) p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO]; | ||
1646 | else p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO_IORDY]; | ||
1647 | } else if(speed >= XFER_MW_DMA_0 && speed <= XFER_MW_DMA_2) { | ||
1648 | p.cycle = adev->id[ATA_ID_EIDE_DMA_MIN]; | ||
1649 | } | ||
1650 | ata_timing_merge(&p, t, t, ATA_TIMING_CYCLE | ATA_TIMING_CYC8B); | ||
1651 | } | ||
1652 | |||
1653 | /* | ||
1654 | * Convert the timing to bus clock counts. | ||
1655 | */ | ||
1656 | |||
1657 | ata_timing_quantize(s, t, T, UT); | ||
1658 | |||
1659 | /* | ||
1660 | * Even in DMA/UDMA modes we still use PIO access for IDENTIFY, S.M.A.R.T | ||
1661 | * and some other commands. We have to ensure that the DMA cycle timing is | ||
1662 | * slower/equal than the fastest PIO timing. | ||
1663 | */ | ||
1664 | |||
1665 | if (speed > XFER_PIO_4) { | ||
1666 | ata_timing_compute(adev, adev->pio_mode, &p, T, UT); | ||
1667 | ata_timing_merge(&p, t, t, ATA_TIMING_ALL); | ||
1668 | } | ||
1669 | |||
1670 | /* | ||
1671 | * Lenghten active & recovery time so that cycle time is correct. | ||
1672 | */ | ||
1673 | |||
1674 | if (t->act8b + t->rec8b < t->cyc8b) { | ||
1675 | t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2; | ||
1676 | t->rec8b = t->cyc8b - t->act8b; | ||
1677 | } | ||
1678 | |||
1679 | if (t->active + t->recover < t->cycle) { | ||
1680 | t->active += (t->cycle - (t->active + t->recover)) / 2; | ||
1681 | t->recover = t->cycle - t->active; | ||
1682 | } | ||
1683 | |||
1684 | return 0; | ||
1685 | } | ||
1686 | |||
1518 | static struct { | 1687 | static struct { |
1519 | unsigned int shift; | 1688 | unsigned int shift; |
1520 | u8 base; | 1689 | u8 base; |
@@ -4741,6 +4910,9 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string); | |||
4741 | EXPORT_SYMBOL_GPL(ata_dev_config); | 4910 | EXPORT_SYMBOL_GPL(ata_dev_config); |
4742 | EXPORT_SYMBOL_GPL(ata_scsi_simulate); | 4911 | EXPORT_SYMBOL_GPL(ata_scsi_simulate); |
4743 | 4912 | ||
4913 | EXPORT_SYMBOL_GPL(ata_timing_compute); | ||
4914 | EXPORT_SYMBOL_GPL(ata_timing_merge); | ||
4915 | |||
4744 | #ifdef CONFIG_PCI | 4916 | #ifdef CONFIG_PCI |
4745 | EXPORT_SYMBOL_GPL(pci_test_config_bits); | 4917 | EXPORT_SYMBOL_GPL(pci_test_config_bits); |
4746 | EXPORT_SYMBOL_GPL(ata_pci_host_stop); | 4918 | EXPORT_SYMBOL_GPL(ata_pci_host_stop); |
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c index d457f5673476..9b6213928f7a 100644 --- a/drivers/scsi/sata_mv.c +++ b/drivers/scsi/sata_mv.c | |||
@@ -35,7 +35,7 @@ | |||
35 | #include <asm/io.h> | 35 | #include <asm/io.h> |
36 | 36 | ||
37 | #define DRV_NAME "sata_mv" | 37 | #define DRV_NAME "sata_mv" |
38 | #define DRV_VERSION "0.24" | 38 | #define DRV_VERSION "0.25" |
39 | 39 | ||
40 | enum { | 40 | enum { |
41 | /* BAR's are enumerated in terms of pci_resource_start() terms */ | 41 | /* BAR's are enumerated in terms of pci_resource_start() terms */ |
@@ -800,7 +800,8 @@ static void mv_fill_sg(struct ata_queued_cmd *qc) | |||
800 | pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len); | 800 | pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len); |
801 | } | 801 | } |
802 | if (0 < qc->n_elem) { | 802 | if (0 < qc->n_elem) { |
803 | pp->sg_tbl[qc->n_elem - 1].flags_size |= EPRD_FLAG_END_OF_TBL; | 803 | pp->sg_tbl[qc->n_elem - 1].flags_size |= |
804 | cpu_to_le32(EPRD_FLAG_END_OF_TBL); | ||
804 | } | 805 | } |
805 | } | 806 | } |
806 | 807 | ||
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c index 9fa2535dd937..8866530bc491 100644 --- a/drivers/scsi/sata_nv.c +++ b/drivers/scsi/sata_nv.c | |||
@@ -331,7 +331,7 @@ static u32 nv_scr_read (struct ata_port *ap, unsigned int sc_reg) | |||
331 | return 0xffffffffU; | 331 | return 0xffffffffU; |
332 | 332 | ||
333 | if (host->host_flags & NV_HOST_FLAGS_SCR_MMIO) | 333 | if (host->host_flags & NV_HOST_FLAGS_SCR_MMIO) |
334 | return readl((void*)ap->ioaddr.scr_addr + (sc_reg * 4)); | 334 | return readl((void __iomem *)ap->ioaddr.scr_addr + (sc_reg * 4)); |
335 | else | 335 | else |
336 | return inl(ap->ioaddr.scr_addr + (sc_reg * 4)); | 336 | return inl(ap->ioaddr.scr_addr + (sc_reg * 4)); |
337 | } | 337 | } |
@@ -345,7 +345,7 @@ static void nv_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | |||
345 | return; | 345 | return; |
346 | 346 | ||
347 | if (host->host_flags & NV_HOST_FLAGS_SCR_MMIO) | 347 | if (host->host_flags & NV_HOST_FLAGS_SCR_MMIO) |
348 | writel(val, (void*)ap->ioaddr.scr_addr + (sc_reg * 4)); | 348 | writel(val, (void __iomem *)ap->ioaddr.scr_addr + (sc_reg * 4)); |
349 | else | 349 | else |
350 | outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)); | 350 | outl(val, ap->ioaddr.scr_addr + (sc_reg * 4)); |
351 | } | 351 | } |
diff --git a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c index def7e0d9dacb..9bf8cbd29901 100644 --- a/drivers/scsi/sata_promise.c +++ b/drivers/scsi/sata_promise.c | |||
@@ -324,7 +324,7 @@ static u32 pdc_sata_scr_read (struct ata_port *ap, unsigned int sc_reg) | |||
324 | { | 324 | { |
325 | if (sc_reg > SCR_CONTROL) | 325 | if (sc_reg > SCR_CONTROL) |
326 | return 0xffffffffU; | 326 | return 0xffffffffU; |
327 | return readl((void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 327 | return readl((void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
328 | } | 328 | } |
329 | 329 | ||
330 | 330 | ||
@@ -333,7 +333,7 @@ static void pdc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg, | |||
333 | { | 333 | { |
334 | if (sc_reg > SCR_CONTROL) | 334 | if (sc_reg > SCR_CONTROL) |
335 | return; | 335 | return; |
336 | writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 336 | writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
337 | } | 337 | } |
338 | 338 | ||
339 | static void pdc_qc_prep(struct ata_queued_cmd *qc) | 339 | static void pdc_qc_prep(struct ata_queued_cmd *qc) |
@@ -523,8 +523,8 @@ static inline void pdc_packet_start(struct ata_queued_cmd *qc) | |||
523 | 523 | ||
524 | pp->pkt[2] = seq; | 524 | pp->pkt[2] = seq; |
525 | wmb(); /* flush PRD, pkt writes */ | 525 | wmb(); /* flush PRD, pkt writes */ |
526 | writel(pp->pkt_dma, (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); | 526 | writel(pp->pkt_dma, (void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); |
527 | readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); /* flush */ | 527 | readl((void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); /* flush */ |
528 | } | 528 | } |
529 | 529 | ||
530 | static int pdc_qc_issue_prot(struct ata_queued_cmd *qc) | 530 | static int pdc_qc_issue_prot(struct ata_queued_cmd *qc) |
diff --git a/drivers/scsi/sata_qstor.c b/drivers/scsi/sata_qstor.c index ffcdeb68641c..e1c1dae27c52 100644 --- a/drivers/scsi/sata_qstor.c +++ b/drivers/scsi/sata_qstor.c | |||
@@ -51,8 +51,6 @@ enum { | |||
51 | QS_PRD_BYTES = QS_MAX_PRD * 16, | 51 | QS_PRD_BYTES = QS_MAX_PRD * 16, |
52 | QS_PKT_BYTES = QS_CPB_BYTES + QS_PRD_BYTES, | 52 | QS_PKT_BYTES = QS_CPB_BYTES + QS_PRD_BYTES, |
53 | 53 | ||
54 | QS_DMA_BOUNDARY = ~0UL, | ||
55 | |||
56 | /* global register offsets */ | 54 | /* global register offsets */ |
57 | QS_HCF_CNFG3 = 0x0003, /* host configuration offset */ | 55 | QS_HCF_CNFG3 = 0x0003, /* host configuration offset */ |
58 | QS_HID_HPHY = 0x0004, /* host physical interface info */ | 56 | QS_HID_HPHY = 0x0004, /* host physical interface info */ |
@@ -101,6 +99,10 @@ enum { | |||
101 | board_2068_idx = 0, /* QStor 4-port SATA/RAID */ | 99 | board_2068_idx = 0, /* QStor 4-port SATA/RAID */ |
102 | }; | 100 | }; |
103 | 101 | ||
102 | enum { | ||
103 | QS_DMA_BOUNDARY = ~0UL | ||
104 | }; | ||
105 | |||
104 | typedef enum { qs_state_idle, qs_state_pkt, qs_state_mmio } qs_state_t; | 106 | typedef enum { qs_state_idle, qs_state_pkt, qs_state_mmio } qs_state_t; |
105 | 107 | ||
106 | struct qs_port_priv { | 108 | struct qs_port_priv { |
diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c index ba98a175ee3a..f6f0184e1ac8 100644 --- a/drivers/scsi/sata_sil.c +++ b/drivers/scsi/sata_sil.c | |||
@@ -289,7 +289,7 @@ static inline unsigned long sil_scr_addr(struct ata_port *ap, unsigned int sc_re | |||
289 | 289 | ||
290 | static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg) | 290 | static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg) |
291 | { | 291 | { |
292 | void *mmio = (void *) sil_scr_addr(ap, sc_reg); | 292 | void __iomem *mmio = (void __iomem *) sil_scr_addr(ap, sc_reg); |
293 | if (mmio) | 293 | if (mmio) |
294 | return readl(mmio); | 294 | return readl(mmio); |
295 | return 0xffffffffU; | 295 | return 0xffffffffU; |
@@ -297,7 +297,7 @@ static u32 sil_scr_read (struct ata_port *ap, unsigned int sc_reg) | |||
297 | 297 | ||
298 | static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) | 298 | static void sil_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val) |
299 | { | 299 | { |
300 | void *mmio = (void *) sil_scr_addr(ap, sc_reg); | 300 | void *mmio = (void __iomem *) sil_scr_addr(ap, sc_reg); |
301 | if (mmio) | 301 | if (mmio) |
302 | writel(val, mmio); | 302 | writel(val, mmio); |
303 | } | 303 | } |
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c index 540a85191172..d6d350a0b5e9 100644 --- a/drivers/scsi/sata_sx4.c +++ b/drivers/scsi/sata_sx4.c | |||
@@ -137,7 +137,7 @@ struct pdc_port_priv { | |||
137 | }; | 137 | }; |
138 | 138 | ||
139 | struct pdc_host_priv { | 139 | struct pdc_host_priv { |
140 | void *dimm_mmio; | 140 | void __iomem *dimm_mmio; |
141 | 141 | ||
142 | unsigned int doing_hdma; | 142 | unsigned int doing_hdma; |
143 | unsigned int hdma_prod; | 143 | unsigned int hdma_prod; |
@@ -247,7 +247,7 @@ static void pdc20621_host_stop(struct ata_host_set *host_set) | |||
247 | { | 247 | { |
248 | struct pci_dev *pdev = to_pci_dev(host_set->dev); | 248 | struct pci_dev *pdev = to_pci_dev(host_set->dev); |
249 | struct pdc_host_priv *hpriv = host_set->private_data; | 249 | struct pdc_host_priv *hpriv = host_set->private_data; |
250 | void *dimm_mmio = hpriv->dimm_mmio; | 250 | void __iomem *dimm_mmio = hpriv->dimm_mmio; |
251 | 251 | ||
252 | pci_iounmap(pdev, dimm_mmio); | 252 | pci_iounmap(pdev, dimm_mmio); |
253 | kfree(hpriv); | 253 | kfree(hpriv); |
@@ -669,8 +669,8 @@ static void pdc20621_packet_start(struct ata_queued_cmd *qc) | |||
669 | readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ | 669 | readl(mmio + PDC_20621_SEQCTL + (seq * 4)); /* flush */ |
670 | 670 | ||
671 | writel(port_ofs + PDC_DIMM_ATA_PKT, | 671 | writel(port_ofs + PDC_DIMM_ATA_PKT, |
672 | (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); | 672 | (void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); |
673 | readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); | 673 | readl((void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); |
674 | VPRINTK("submitted ofs 0x%x (%u), seq %u\n", | 674 | VPRINTK("submitted ofs 0x%x (%u), seq %u\n", |
675 | port_ofs + PDC_DIMM_ATA_PKT, | 675 | port_ofs + PDC_DIMM_ATA_PKT, |
676 | port_ofs + PDC_DIMM_ATA_PKT, | 676 | port_ofs + PDC_DIMM_ATA_PKT, |
@@ -747,8 +747,8 @@ static inline unsigned int pdc20621_host_intr( struct ata_port *ap, | |||
747 | writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); | 747 | writel(0x00000001, mmio + PDC_20621_SEQCTL + (seq * 4)); |
748 | readl(mmio + PDC_20621_SEQCTL + (seq * 4)); | 748 | readl(mmio + PDC_20621_SEQCTL + (seq * 4)); |
749 | writel(port_ofs + PDC_DIMM_ATA_PKT, | 749 | writel(port_ofs + PDC_DIMM_ATA_PKT, |
750 | (void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); | 750 | (void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); |
751 | readl((void *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); | 751 | readl((void __iomem *) ap->ioaddr.cmd_addr + PDC_PKT_SUBMIT); |
752 | } | 752 | } |
753 | 753 | ||
754 | /* step two - execute ATA command */ | 754 | /* step two - execute ATA command */ |
@@ -1014,7 +1014,7 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, | |||
1014 | idx++; | 1014 | idx++; |
1015 | dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size : | 1015 | dist = ((long)(s32)(window_size - (offset + size))) >= 0 ? size : |
1016 | (long) (window_size - offset); | 1016 | (long) (window_size - offset); |
1017 | memcpy_toio((char *) (dimm_mmio + offset / 4), (char *) psource, dist); | 1017 | memcpy_toio(dimm_mmio + offset / 4, psource, dist); |
1018 | writel(0x01, mmio + PDC_GENERAL_CTLR); | 1018 | writel(0x01, mmio + PDC_GENERAL_CTLR); |
1019 | readl(mmio + PDC_GENERAL_CTLR); | 1019 | readl(mmio + PDC_GENERAL_CTLR); |
1020 | 1020 | ||
@@ -1023,8 +1023,7 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, | |||
1023 | for (; (long) size >= (long) window_size ;) { | 1023 | for (; (long) size >= (long) window_size ;) { |
1024 | writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); | 1024 | writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); |
1025 | readl(mmio + PDC_DIMM_WINDOW_CTLR); | 1025 | readl(mmio + PDC_DIMM_WINDOW_CTLR); |
1026 | memcpy_toio((char *) (dimm_mmio), (char *) psource, | 1026 | memcpy_toio(dimm_mmio, psource, window_size / 4); |
1027 | window_size / 4); | ||
1028 | writel(0x01, mmio + PDC_GENERAL_CTLR); | 1027 | writel(0x01, mmio + PDC_GENERAL_CTLR); |
1029 | readl(mmio + PDC_GENERAL_CTLR); | 1028 | readl(mmio + PDC_GENERAL_CTLR); |
1030 | psource += window_size; | 1029 | psource += window_size; |
@@ -1035,7 +1034,7 @@ static void pdc20621_put_to_dimm(struct ata_probe_ent *pe, void *psource, | |||
1035 | if (size) { | 1034 | if (size) { |
1036 | writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); | 1035 | writel(((idx) << page_mask), mmio + PDC_DIMM_WINDOW_CTLR); |
1037 | readl(mmio + PDC_DIMM_WINDOW_CTLR); | 1036 | readl(mmio + PDC_DIMM_WINDOW_CTLR); |
1038 | memcpy_toio((char *) (dimm_mmio), (char *) psource, size / 4); | 1037 | memcpy_toio(dimm_mmio, psource, size / 4); |
1039 | writel(0x01, mmio + PDC_GENERAL_CTLR); | 1038 | writel(0x01, mmio + PDC_GENERAL_CTLR); |
1040 | readl(mmio + PDC_GENERAL_CTLR); | 1039 | readl(mmio + PDC_GENERAL_CTLR); |
1041 | } | 1040 | } |
diff --git a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c index cf94e0158a8d..877b9fda3965 100644 --- a/drivers/scsi/sata_vsc.c +++ b/drivers/scsi/sata_vsc.c | |||
@@ -86,7 +86,7 @@ static u32 vsc_sata_scr_read (struct ata_port *ap, unsigned int sc_reg) | |||
86 | { | 86 | { |
87 | if (sc_reg > SCR_CONTROL) | 87 | if (sc_reg > SCR_CONTROL) |
88 | return 0xffffffffU; | 88 | return 0xffffffffU; |
89 | return readl((void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 89 | return readl((void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
90 | } | 90 | } |
91 | 91 | ||
92 | 92 | ||
@@ -95,16 +95,16 @@ static void vsc_sata_scr_write (struct ata_port *ap, unsigned int sc_reg, | |||
95 | { | 95 | { |
96 | if (sc_reg > SCR_CONTROL) | 96 | if (sc_reg > SCR_CONTROL) |
97 | return; | 97 | return; |
98 | writel(val, (void *) ap->ioaddr.scr_addr + (sc_reg * 4)); | 98 | writel(val, (void __iomem *) ap->ioaddr.scr_addr + (sc_reg * 4)); |
99 | } | 99 | } |
100 | 100 | ||
101 | 101 | ||
102 | static void vsc_intr_mask_update(struct ata_port *ap, u8 ctl) | 102 | static void vsc_intr_mask_update(struct ata_port *ap, u8 ctl) |
103 | { | 103 | { |
104 | unsigned long mask_addr; | 104 | void __iomem *mask_addr; |
105 | u8 mask; | 105 | u8 mask; |
106 | 106 | ||
107 | mask_addr = (unsigned long) ap->host_set->mmio_base + | 107 | mask_addr = ap->host_set->mmio_base + |
108 | VSC_SATA_INT_MASK_OFFSET + ap->port_no; | 108 | VSC_SATA_INT_MASK_OFFSET + ap->port_no; |
109 | mask = readb(mask_addr); | 109 | mask = readb(mask_addr); |
110 | if (ctl & ATA_NIEN) | 110 | if (ctl & ATA_NIEN) |
@@ -283,7 +283,7 @@ static int __devinit vsc_sata_init_one (struct pci_dev *pdev, const struct pci_d | |||
283 | struct ata_probe_ent *probe_ent = NULL; | 283 | struct ata_probe_ent *probe_ent = NULL; |
284 | unsigned long base; | 284 | unsigned long base; |
285 | int pci_dev_busy = 0; | 285 | int pci_dev_busy = 0; |
286 | void *mmio_base; | 286 | void __iomem *mmio_base; |
287 | int rc; | 287 | int rc; |
288 | 288 | ||
289 | if (!printed_version++) | 289 | if (!printed_version++) |
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index ad5342165079..52b348c36d56 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c | |||
@@ -1645,6 +1645,8 @@ int scsi_error_handler(void *data) | |||
1645 | set_current_state(TASK_INTERRUPTIBLE); | 1645 | set_current_state(TASK_INTERRUPTIBLE); |
1646 | } | 1646 | } |
1647 | 1647 | ||
1648 | __set_current_state(TASK_RUNNING); | ||
1649 | |||
1648 | SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d" | 1650 | SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d" |
1649 | " exiting\n",shost->host_no)); | 1651 | " exiting\n",shost->host_no)); |
1650 | 1652 | ||