1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-10-17 07:41:55 +02:00
Files
flashrom/w29ee011.c
Antonio Vázquez 08d9c383ac parallel.h: Extract parallel declarations to a separate header
This patch moves all the declarations relevant to parallel into their own
header in include/parallel.h
The corresponding functions implementations are already in parallel.c,
so the declarations naturally can be in parallel.h
Currently, most of the declarations reside in flash.h making it difficult
to really understand file dependency.

Change-Id: I69f6e224a7ece373fbd6606e802930a52da1dd85
Signed-off-by: Antonio Vázquez <antoniovazquezblanco@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/89503
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2025-10-16 02:11:21 +00:00

78 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.
*/
#include <string.h>
#include <stdbool.h>
#include "flash.h"
#include "parallel.h"
#include "chipdrivers.h"
bool w29ee011_can_override(const char *const chip_name, const char *const override_chip)
{
if (!override_chip || strcmp(override_chip, chip_name)) {
msg_cdbg("Old Winbond W29* probe method disabled because "
"the probing sequence puts the AMIC A49LF040A in "
"a funky state. Use 'flashrom -c %s' if you "
"have a board with such a chip.\n", chip_name);
return false;
}
return true;
}
/* According to the Winbond W29EE011, W29EE012, W29C010M, W29C011A
* datasheets this is the only valid probe function for those chips.
*/
int probe_w29ee011(struct flashctx *flash)
{
chipaddr bios = flash->virtual_memory;
uint8_t id1, id2;
/* Issue JEDEC Product ID Entry command */
chip_writeb(flash, 0xAA, bios + 0x5555);
programmer_delay(flash, 10);
chip_writeb(flash, 0x55, bios + 0x2AAA);
programmer_delay(flash, 10);
chip_writeb(flash, 0x80, bios + 0x5555);
programmer_delay(flash, 10);
chip_writeb(flash, 0xAA, bios + 0x5555);
programmer_delay(flash, 10);
chip_writeb(flash, 0x55, bios + 0x2AAA);
programmer_delay(flash, 10);
chip_writeb(flash, 0x60, bios + 0x5555);
programmer_delay(flash, 10);
/* Read product ID */
id1 = chip_readb(flash, bios);
id2 = chip_readb(flash, bios + 0x01);
/* Issue JEDEC Product ID Exit command */
chip_writeb(flash, 0xAA, bios + 0x5555);
programmer_delay(flash, 10);
chip_writeb(flash, 0x55, bios + 0x2AAA);
programmer_delay(flash, 10);
chip_writeb(flash, 0xF0, bios + 0x5555);
programmer_delay(flash, 10);
msg_cdbg("%s: id1 0x%02x, id2 0x%02x\n", __func__, id1, id2);
if (id1 == flash->chip->manufacture_id && id2 == flash->chip->model_id)
return 1;
return 0;
}