diff options
-rw-r--r-- | drivers/ata/pata_pdc202xx_old.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/ata/pata_pdc202xx_old.c b/drivers/ata/pata_pdc202xx_old.c index fd4350029bc4..65d951618c60 100644 --- a/drivers/ata/pata_pdc202xx_old.c +++ b/drivers/ata/pata_pdc202xx_old.c | |||
@@ -9,7 +9,7 @@ | |||
9 | * First cut with LBA48/ATAPI | 9 | * First cut with LBA48/ATAPI |
10 | * | 10 | * |
11 | * TODO: | 11 | * TODO: |
12 | * Channel interlock/reset on both required | 12 | * Channel interlock/reset on both required ? |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/libata.h> | 22 | #include <linux/libata.h> |
23 | 23 | ||
24 | #define DRV_NAME "pata_pdc202xx_old" | 24 | #define DRV_NAME "pata_pdc202xx_old" |
25 | #define DRV_VERSION "0.4.2" | 25 | #define DRV_VERSION "0.4.3" |
26 | 26 | ||
27 | static int pdc2026x_cable_detect(struct ata_port *ap) | 27 | static int pdc2026x_cable_detect(struct ata_port *ap) |
28 | { | 28 | { |
@@ -106,9 +106,9 @@ static void pdc202xx_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
106 | { 0x20, 0x01 } | 106 | { 0x20, 0x01 } |
107 | }; | 107 | }; |
108 | static u8 mdma_timing[3][2] = { | 108 | static u8 mdma_timing[3][2] = { |
109 | { 0x60, 0x03 }, | ||
110 | { 0x60, 0x04 }, | ||
111 | { 0xe0, 0x0f }, | 109 | { 0xe0, 0x0f }, |
110 | { 0x60, 0x04 }, | ||
111 | { 0x60, 0x03 }, | ||
112 | }; | 112 | }; |
113 | u8 r_bp, r_cp; | 113 | u8 r_bp, r_cp; |
114 | 114 | ||
@@ -139,6 +139,9 @@ static void pdc202xx_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
139 | * | 139 | * |
140 | * In UDMA3 or higher we have to clock switch for the duration of the | 140 | * In UDMA3 or higher we have to clock switch for the duration of the |
141 | * DMA transfer sequence. | 141 | * DMA transfer sequence. |
142 | * | ||
143 | * Note: The host lock held by the libata layer protects | ||
144 | * us from two channels both trying to set DMA bits at once | ||
142 | */ | 145 | */ |
143 | 146 | ||
144 | static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc) | 147 | static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc) |
@@ -187,6 +190,9 @@ static void pdc2026x_bmdma_start(struct ata_queued_cmd *qc) | |||
187 | * | 190 | * |
188 | * After a DMA completes we need to put the clock back to 33MHz for | 191 | * After a DMA completes we need to put the clock back to 33MHz for |
189 | * PIO timings. | 192 | * PIO timings. |
193 | * | ||
194 | * Note: The host lock held by the libata layer protects | ||
195 | * us from two channels both trying to set DMA bits at once | ||
190 | */ | 196 | */ |
191 | 197 | ||
192 | static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc) | 198 | static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc) |
@@ -206,7 +212,6 @@ static void pdc2026x_bmdma_stop(struct ata_queued_cmd *qc) | |||
206 | iowrite32(0, atapi_reg); | 212 | iowrite32(0, atapi_reg); |
207 | iowrite8(ioread8(clock) & ~sel66, clock); | 213 | iowrite8(ioread8(clock) & ~sel66, clock); |
208 | } | 214 | } |
209 | /* Check we keep host level locking here */ | ||
210 | /* Flip back to 33Mhz for PIO */ | 215 | /* Flip back to 33Mhz for PIO */ |
211 | if (adev->dma_mode >= XFER_UDMA_2) | 216 | if (adev->dma_mode >= XFER_UDMA_2) |
212 | iowrite8(ioread8(clock) & ~sel66, clock); | 217 | iowrite8(ioread8(clock) & ~sel66, clock); |