Skip to content

Commit 9719b8f

Browse files
plyatovjgarzik
authored andcommitted
ata: pata_at91.c bugfix for high master clock
The AT91SAM9 microcontrollers with master clock higher then 105 MHz and PIO0, have overflow of the NCS_RD_PULSE value in the MSB. This lead to "NCS_RD_PULSE" pulse longer then "NRD_CYCLE" pulse and driver does not detect ATA device. Signed-off-by: Igor Plyatov <[email protected]> Signed-off-by: Jeff Garzik <[email protected]>
1 parent 181e3ce commit 9719b8f

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

drivers/ata/pata_at91.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@
3333

3434

3535
#define DRV_NAME "pata_at91"
36-
#define DRV_VERSION "0.1"
36+
#define DRV_VERSION "0.2"
3737

3838
#define CF_IDE_OFFSET 0x00c00000
3939
#define CF_ALT_IDE_OFFSET 0x00e00000
4040
#define CF_IDE_RES_SIZE 0x08
41+
#define NCS_RD_PULSE_LIMIT 0x3f /* maximal value for pulse bitfields */
4142

4243
struct at91_ide_info {
4344
unsigned long mode;
@@ -109,6 +110,11 @@ static void set_smc_timing(struct device *dev,
109110
/* (CS0, CS1, DIR, OE) <= (CFCE1, CFCE2, CFRNW, NCSX) timings */
110111
ncs_read_setup = 1;
111112
ncs_read_pulse = read_cycle - 2;
113+
if (ncs_read_pulse > NCS_RD_PULSE_LIMIT) {
114+
ncs_read_pulse = NCS_RD_PULSE_LIMIT;
115+
dev_warn(dev, "ncs_read_pulse limited to maximal value %lu\n",
116+
ncs_read_pulse);
117+
}
112118

113119
/* Write timings same as read timings */
114120
write_cycle = read_cycle;

0 commit comments

Comments
 (0)