From 03d2826d21015f3f874e2ddaf834920b8fd80b3d Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Tue, 13 Nov 2007 14:56:54 +0000 Subject: Fix ATMEL 29C020 detection with flashrom The JEDEC probe routine had a delay of 10 us after entering ID mode and this was insufficient for the 29C020. The data sheet claims we have to wait 10 ms, but tests have shown that 20 us suffice. Allow for variations in chip delays with a factor of 2 safety margin. Corresponding to flashrom svn r159 and coreboot v2 svn r2962. Signed-off-by: Carl-Daniel Hailfinger Acked-by: Peter Stuge --- jedec.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'jedec.c') diff --git a/jedec.c b/jedec.c index 46153dd..30d0cda 100644 --- a/jedec.c +++ b/jedec.c @@ -89,7 +89,11 @@ int probe_jedec(struct flashchip *flash) *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0x90; - myusec_delay(10); + /* Older chips may need up to 100 us to respond. The ATMEL 29C020 + * needs 10 ms according to the data sheet, but it has been tested + * to work reliably with 20 us. Allow a factor of 2 safety margin. + */ + myusec_delay(40); /* Read product ID */ id1 = *(volatile uint8_t *)bios; @@ -101,7 +105,7 @@ int probe_jedec(struct flashchip *flash) *(volatile uint8_t *)(bios + 0x2AAA) = 0x55; myusec_delay(10); *(volatile uint8_t *)(bios + 0x5555) = 0xF0; - myusec_delay(10); + myusec_delay(40); printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); if (id1 == flash->manufacture_id && id2 == flash->model_id) -- cgit v1.1