diff options
| author | Mark Lord <liml@rtr.ca> | 2008-04-19 14:54:41 -0400 |
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2008-04-25 01:26:22 -0400 |
| commit | 85afb934575abdff1b2ac8ea4d522d1355f22a89 (patch) | |
| tree | 1a5a5d4bbb86e96ad3e2ddc0f1fc9e317ac20121 | |
| parent | 8d07379d251ab24d937e6cb0748b71106dddbc74 (diff) | |
sata_mv: re-enable hotplug, update TODO list
Re-enable hotplug, now that the interrupt/error handling are mostly sane.
Also update the TODO list at the top.
Signed-off-by: Mark Lord <mlord@pobox.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
| -rw-r--r-- | drivers/ata/sata_mv.c | 79 |
1 files changed, 29 insertions, 50 deletions
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index 4fa54805eb41..26a6337195b3 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -23,46 +23,34 @@ | |||
| 23 | */ | 23 | */ |
| 24 | 24 | ||
| 25 | /* | 25 | /* |
| 26 | sata_mv TODO list: | 26 | * sata_mv TODO list: |
| 27 | 27 | * | |
| 28 | 1) Needs a full errata audit for all chipsets. I implemented most | 28 | * --> Errata workaround for NCQ device errors. |
| 29 | of the errata workarounds found in the Marvell vendor driver, but | 29 | * |
| 30 | I distinctly remember a couple workarounds (one related to PCI-X) | 30 | * --> More errata workarounds for PCI-X. |
| 31 | are still needed. | 31 | * |
| 32 | 32 | * --> Complete a full errata audit for all chipsets to identify others. | |
| 33 | 2) Improve/fix IRQ and error handling sequences. | 33 | * |
| 34 | 34 | * --> ATAPI support (Marvell claims the 60xx/70xx chips can do it). | |
| 35 | 3) ATAPI support (Marvell claims the 60xx/70xx chips can do it). | 35 | * |
| 36 | 36 | * --> Investigate problems with PCI Message Signalled Interrupts (MSI). | |
| 37 | 4) Think about TCQ support here, and for libata in general | 37 | * |
| 38 | with controllers that suppport it via host-queuing hardware | 38 | * --> Cache frequently-accessed registers in mv_port_priv to reduce overhead. |
| 39 | (a software-only implementation could be a nightmare). | 39 | * |
| 40 | 40 | * --> Develop a low-power-consumption strategy, and implement it. | |
| 41 | 5) Investigate problems with PCI Message Signalled Interrupts (MSI). | 41 | * |
| 42 | 42 | * --> [Experiment, low priority] Investigate interrupt coalescing. | |
| 43 | 6) Cache frequently-accessed registers in mv_port_priv to reduce overhead. | 43 | * Quite often, especially with PCI Message Signalled Interrupts (MSI), |
| 44 | 44 | * the overhead reduced by interrupt mitigation is quite often not | |
| 45 | 7) Fix/reenable hot plug/unplug (should happen as a side-effect of (2) above). | 45 | * worth the latency cost. |
| 46 | 46 | * | |
| 47 | 8) Develop a low-power-consumption strategy, and implement it. | 47 | * --> [Experiment, Marvell value added] Is it possible to use target |
| 48 | 48 | * mode to cross-connect two Linux boxes with Marvell cards? If so, | |
| 49 | 9) [Experiment, low priority] See if ATAPI can be supported using | 49 | * creating LibATA target mode support would be very interesting. |
| 50 | "unknown FIS" or "vendor-specific FIS" support, or something creative | 50 | * |
| 51 | like that. | 51 | * Target mode, for those without docs, is the ability to directly |
| 52 | 52 | * connect two SATA ports. | |
| 53 | 10) [Experiment, low priority] Investigate interrupt coalescing. | 53 | */ |
| 54 | Quite often, especially with PCI Message Signalled Interrupts (MSI), | ||
| 55 | the overhead reduced by interrupt mitigation is quite often not | ||
| 56 | worth the latency cost. | ||
| 57 | |||
| 58 | 11) [Experiment, Marvell value added] Is it possible to use target | ||
| 59 | mode to cross-connect two Linux boxes with Marvell cards? If so, | ||
| 60 | creating LibATA target mode support would be very interesting. | ||
| 61 | |||
| 62 | Target mode, for those without docs, is the ability to directly | ||
| 63 | connect two SATA controllers. | ||
| 64 | |||
| 65 | */ | ||
| 66 | 54 | ||
| 67 | #include <linux/kernel.h> | 55 | #include <linux/kernel.h> |
| 68 | #include <linux/module.h> | 56 | #include <linux/module.h> |
| @@ -300,9 +288,7 @@ enum { | |||
| 300 | EDMA_ERR_IRQ_TRANSIENT = EDMA_ERR_LNK_CTRL_RX_0 | | 288 | EDMA_ERR_IRQ_TRANSIENT = EDMA_ERR_LNK_CTRL_RX_0 | |
| 301 | EDMA_ERR_LNK_CTRL_RX_1 | | 289 | EDMA_ERR_LNK_CTRL_RX_1 | |
| 302 | EDMA_ERR_LNK_CTRL_RX_3 | | 290 | EDMA_ERR_LNK_CTRL_RX_3 | |
| 303 | EDMA_ERR_LNK_CTRL_TX | | 291 | EDMA_ERR_LNK_CTRL_TX, |
| 304 | /* temporary, until we fix hotplug: */ | ||
| 305 | (EDMA_ERR_DEV_DCON | EDMA_ERR_DEV_CON), | ||
| 306 | 292 | ||
| 307 | EDMA_EH_FREEZE = EDMA_ERR_D_PAR | | 293 | EDMA_EH_FREEZE = EDMA_ERR_D_PAR | |
| 308 | EDMA_ERR_PRD_PAR | | 294 | EDMA_ERR_PRD_PAR | |
| @@ -2124,13 +2110,6 @@ static int mv6_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2124 | printk(KERN_ERR DRV_NAME ": can't clear global reset\n"); | 2110 | printk(KERN_ERR DRV_NAME ": can't clear global reset\n"); |
| 2125 | rc = 1; | 2111 | rc = 1; |
| 2126 | } | 2112 | } |
| 2127 | /* | ||
| 2128 | * Temporary: wait 3 seconds before port-probing can happen, | ||
| 2129 | * so that we don't miss finding sleepy SilXXXX port-multipliers. | ||
| 2130 | * This can go away once hotplug is fully/correctly implemented. | ||
| 2131 | */ | ||
| 2132 | if (rc == 0) | ||
| 2133 | msleep(3000); | ||
| 2134 | done: | 2113 | done: |
| 2135 | return rc; | 2114 | return rc; |
| 2136 | } | 2115 | } |
