summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-03-02 06:10:13 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-03-02 06:10:13 +0000
commit2d8813e26ba4c185996c9552f935a2de34566e17 (patch)
tree4f8bc591feaf01945592d078671e160e07dbd256
parentaaf3f5fd01be05d5e80c9e49512e2af4baf3ccb6 (diff)
downloadrockbox-2d8813e26ba4c185996c9552f935a2de34566e17.tar.gz
rockbox-2d8813e26ba4c185996c9552f935a2de34566e17.zip
imx31 ATA: Correct a register #define error (due to error in user's manual). Fix timing for PIO tAX.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20169 a1c6a512-1295-4272-9138-f99709370657
-rwxr-xr-xfirmware/export/imx31l.h5
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/ata-imx31.c16
2 files changed, 14 insertions, 7 deletions
diff --git a/firmware/export/imx31l.h b/firmware/export/imx31l.h
index cdae29f158..91e878e636 100755
--- a/firmware/export/imx31l.h
+++ b/firmware/export/imx31l.h
@@ -439,11 +439,12 @@
439/* ATA */ 439/* ATA */
440#define ATA_TIME_OFF (*(REG8_PTR_T)(ATA_BASE_ADDR+0x00)) 440#define ATA_TIME_OFF (*(REG8_PTR_T)(ATA_BASE_ADDR+0x00))
441#define ATA_TIME_ON (*(REG8_PTR_T)(ATA_BASE_ADDR+0x01)) 441#define ATA_TIME_ON (*(REG8_PTR_T)(ATA_BASE_ADDR+0x01))
442 /* PIO */
442#define ATA_TIME_1 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x02)) 443#define ATA_TIME_1 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x02))
443#define ATA_TIME_2W (*(REG8_PTR_T)(ATA_BASE_ADDR+0x03)) 444#define ATA_TIME_2W (*(REG8_PTR_T)(ATA_BASE_ADDR+0x03))
444 /* PIO */
445#define ATA_TIME_2R (*(REG8_PTR_T)(ATA_BASE_ADDR+0x04)) 445#define ATA_TIME_2R (*(REG8_PTR_T)(ATA_BASE_ADDR+0x04))
446#define ATA_TIME_AX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x05)) 446#define ATA_TIME_AX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x05))
447#define ATA_TIME_PIO_RDX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x06))
447#define ATA_TIME_4 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x07)) 448#define ATA_TIME_4 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x07))
448#define ATA_TIME_9 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x08)) 449#define ATA_TIME_9 (*(REG8_PTR_T)(ATA_BASE_ADDR+0x08))
449 /* MDMA */ 450 /* MDMA */
@@ -454,7 +455,7 @@
454 /* UDMA */ 455 /* UDMA */
455#define ATA_TIME_ACK (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0D)) 456#define ATA_TIME_ACK (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0D))
456#define ATA_TIME_ENV (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0E)) 457#define ATA_TIME_ENV (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0E))
457#define ATA_TIME_PIO_RDX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0F)) 458#define ATA_TIME_RPX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x0F))
458#define ATA_TIME_ZAH (*(REG8_PTR_T)(ATA_BASE_ADDR+0x10)) 459#define ATA_TIME_ZAH (*(REG8_PTR_T)(ATA_BASE_ADDR+0x10))
459#define ATA_TIME_MLIX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x11)) 460#define ATA_TIME_MLIX (*(REG8_PTR_T)(ATA_BASE_ADDR+0x11))
460#define ATA_TIME_DVH (*(REG8_PTR_T)(ATA_BASE_ADDR+0x12)) 461#define ATA_TIME_DVH (*(REG8_PTR_T)(ATA_BASE_ADDR+0x12))
diff --git a/firmware/target/arm/imx31/gigabeat-s/ata-imx31.c b/firmware/target/arm/imx31/gigabeat-s/ata-imx31.c
index 28a7c508f6..59b89c02c9 100644
--- a/firmware/target/arm/imx31/gigabeat-s/ata-imx31.c
+++ b/firmware/target/arm/imx31/gigabeat-s/ata-imx31.c
@@ -33,8 +33,8 @@ static const struct ata_pio_timings
33{ 33{
34 uint16_t time_2w; /* t2 during write */ 34 uint16_t time_2w; /* t2 during write */
35 uint16_t time_2r; /* t2 during read */ 35 uint16_t time_2r; /* t2 during read */
36 uint8_t time_ax; /* tA */
36 uint8_t time_1; /* t1 */ 37 uint8_t time_1; /* t1 */
37 uint8_t time_pio_rdx; /* trd */
38 uint8_t time_4; /* t4 */ 38 uint8_t time_4; /* t4 */
39 uint8_t time_9; /* t9 */ 39 uint8_t time_9; /* t9 */
40} pio_timings[5] = 40} pio_timings[5] =
@@ -44,6 +44,7 @@ static const struct ata_pio_timings
44 .time_1 = 70, 44 .time_1 = 70,
45 .time_2w = 290, 45 .time_2w = 290,
46 .time_2r = 290, 46 .time_2r = 290,
47 .time_ax = 35,
47 .time_4 = 30, 48 .time_4 = 30,
48 .time_9 = 20 49 .time_9 = 20
49 }, 50 },
@@ -52,6 +53,7 @@ static const struct ata_pio_timings
52 .time_1 = 50, 53 .time_1 = 50,
53 .time_2w = 290, 54 .time_2w = 290,
54 .time_2r = 290, 55 .time_2r = 290,
56 .time_ax = 35,
55 .time_4 = 20, 57 .time_4 = 20,
56 .time_9 = 15 58 .time_9 = 15
57 }, 59 },
@@ -60,6 +62,7 @@ static const struct ata_pio_timings
60 .time_1 = 30, 62 .time_1 = 30,
61 .time_2w = 290, 63 .time_2w = 290,
62 .time_2r = 290, 64 .time_2r = 290,
65 .time_ax = 35,
63 .time_4 = 15, 66 .time_4 = 15,
64 .time_9 = 10 67 .time_9 = 10
65 }, 68 },
@@ -68,6 +71,7 @@ static const struct ata_pio_timings
68 .time_1 = 30, 71 .time_1 = 30,
69 .time_2w = 80, 72 .time_2w = 80,
70 .time_2r = 80, 73 .time_2r = 80,
74 .time_ax = 35,
71 .time_4 = 10, 75 .time_4 = 10,
72 .time_9 = 10 76 .time_9 = 10
73 }, 77 },
@@ -76,6 +80,7 @@ static const struct ata_pio_timings
76 .time_1 = 25, 80 .time_1 = 25,
77 .time_2w = 70, 81 .time_2w = 70,
78 .time_2r = 70, 82 .time_2r = 70,
83 .time_ax = 35,
79 .time_4 = 10, 84 .time_4 = 10,
80 .time_9 = 10 85 .time_9 = 10
81 }, 86 },
@@ -99,13 +104,10 @@ void ata_set_pio_timings(int mode)
99 104
100 pio_mode = mode; 105 pio_mode = mode;
101 106
102 ATA_TIME_OFF = 3;
103 ATA_TIME_ON = 3;
104
105 ATA_TIME_1 = (timings->time_1 + T) / T; 107 ATA_TIME_1 = (timings->time_1 + T) / T;
106 ATA_TIME_2W = (timings->time_2w + T) / T; 108 ATA_TIME_2W = (timings->time_2w + T) / T;
107 ATA_TIME_2R = (timings->time_2r + T) / T; 109 ATA_TIME_2R = (timings->time_2r + T) / T;
108 ATA_TIME_AX = (35 + T) / T; /* tA */ 110 ATA_TIME_AX = (timings->time_ax + T) / T + 2; /* 1.5 + tAX */
109 ATA_TIME_PIO_RDX = 1; 111 ATA_TIME_PIO_RDX = 1;
110 ATA_TIME_4 = (timings->time_4 + T) / T; 112 ATA_TIME_4 = (timings->time_4 + T) / T;
111 ATA_TIME_9 = (timings->time_9 + T) / T; 113 ATA_TIME_9 = (timings->time_9 + T) / T;
@@ -154,6 +156,10 @@ void ata_device_init(void)
154 /* Make sure we're not in reset mode */ 156 /* Make sure we're not in reset mode */
155 ata_enable(true); 157 ata_enable(true);
156 158
159 /* All modes use same tOFF/tON */
160 ATA_TIME_OFF = 3;
161 ATA_TIME_ON = 3;
162
157 /* mode may be switched later once identify info is ready in which 163 /* mode may be switched later once identify info is ready in which
158 * case the main driver calls back */ 164 * case the main driver calls back */
159 ata_set_pio_timings(pio_mode); 165 ata_set_pio_timings(pio_mode);