diff options
Diffstat (limited to 'firmware')
-rwxr-xr-x | firmware/export/imx31l.h | 5 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/ata-imx31.c | 16 |
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); |