Skip to content

Commit

Permalink
ata: pata_at91.c bugfix for high master clock
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
Igor Plyatov authored and jgarzik committed Apr 24, 2011
1 parent 181e3ce commit 9719b8f
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/ata/pata_at91.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,12 @@


#define DRV_NAME "pata_at91"
#define DRV_VERSION "0.1"
#define DRV_VERSION "0.2"

#define CF_IDE_OFFSET 0x00c00000
#define CF_ALT_IDE_OFFSET 0x00e00000
#define CF_IDE_RES_SIZE 0x08
#define NCS_RD_PULSE_LIMIT 0x3f /* maximal value for pulse bitfields */

struct at91_ide_info {
unsigned long mode;
Expand Down Expand Up @@ -109,6 +110,11 @@ static void set_smc_timing(struct device *dev,
/* (CS0, CS1, DIR, OE) <= (CFCE1, CFCE2, CFRNW, NCSX) timings */
ncs_read_setup = 1;
ncs_read_pulse = read_cycle - 2;
if (ncs_read_pulse > NCS_RD_PULSE_LIMIT) {
ncs_read_pulse = NCS_RD_PULSE_LIMIT;
dev_warn(dev, "ncs_read_pulse limited to maximal value %lu\n",
ncs_read_pulse);
}

/* Write timings same as read timings */
write_cycle = read_cycle;
Expand Down

0 comments on commit 9719b8f

Please sign in to comment.