42b127fe22
Jens sent the first patch that added A49LF040A to flash.h and flashchips.c using _jedec and _49lf040 functions. An issue was found with probe_w29ee011() for the Winbond W29EE011, which caused the A49LF040A to no longer respond to any commands. Ward made a patch to disable probing by default for the W29EE011 following some discussion. Using -c W29EE011 will make flashrom probe for the chip. Peter did some more datasheet diving and found that the Pm49FL00x functions suited this chip quite well because of the block locking registers in A49LF040A, and finally tested PROBE READ ERASE WRITE to work on ALIX.3c3. Ward confirmed that this works on alix.2c3 too. Signed-off-by: Jens Kuehnel <coreboot@jens.kuehnel.org> Signed-off-by: Ward Vandewege <ward@gnu.org> Signed-off-by: Peter Stuge <peter@stuge.se> Acked-by: Ward Vandewege <ward@gnu.org> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3368 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
71 lines
2.3 KiB
C
71 lines
2.3 KiB
C
/*
|
|
* This file is part of the flashrom project.
|
|
*
|
|
* Copyright (C) 2007 Markus Boas <ryven@ryven.de>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include "flash.h"
|
|
|
|
int probe_w29ee011(struct flashchip *flash)
|
|
{
|
|
volatile uint8_t *bios = flash->virtual_memory;
|
|
uint8_t id1, id2;
|
|
extern char *chip_to_probe;
|
|
|
|
if (!chip_to_probe || strcmp(chip_to_probe,"W29EE011")) {
|
|
printf_debug("\n===\n");
|
|
printf_debug(" Probing disabled for Winbond W29EE011 because the probing sequence puts the\n");
|
|
printf_debug(" AMIC A49LF040A in a funky state.\n");
|
|
printf_debug(" Use 'flashrom -c W29EE011' if you have a board with this chip.");
|
|
printf_debug("\n===\n");
|
|
return 0;
|
|
}
|
|
|
|
/* Issue JEDEC Product ID Entry command */
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0x80;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0x60;
|
|
myusec_delay(10);
|
|
|
|
/* Read product ID */
|
|
id1 = *(volatile uint8_t *)bios;
|
|
id2 = *(volatile uint8_t *)(bios + 0x01);
|
|
|
|
/* Issue JEDEC Product ID Exit command */
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
|
|
myusec_delay(10);
|
|
*(volatile uint8_t *)(bios + 0x5555) = 0xF0;
|
|
myusec_delay(10);
|
|
|
|
printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2);
|
|
|
|
if (id1 == flash->manufacture_id && id2 == flash->model_id)
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|