On 06.02.2008 02:09, Carl-Daniel Hailfinger wrote:
On 04.02.2008 22:04, Chris Lingard wrote:
I recently found someone who could do the work of modifying the motherboard, Harald kindly posted me the chip.
The machine came back and it would not boot with the switch up
I then probably made a mistake, I used the BIOS itself to dump the factory BIOS to several floppies; then flipped the switch and wrote the factory BIOS to the new chip. The machine now boots from either BIOS.
Using flashrom to detect the chip I get:
Calibrating delay loop... 853M loops per second. OK. No coreboot table found. Found chipset "NVIDIA MCP55", enabling flash write... OK. Found board "GIGABYTE GA-M57SLI-S4": enabling flash write... Serial flash segment 0xfffe0000-0xffffffff enabled Serial flash segment 0x000e0000-0x000fffff enabled Serial flash segment 0xffee0000-0xffefffff disabled Serial flash segment 0xfff80000-0xfffeffff enabled LPC write to serial flash enabled serial flash pin 29 OK.
<snip>
Probing for MX25L4005, 512 KB RDID returned 7f 9d 7e. probe_spi: id1 0x7f, id2 0x9d7e
<snip>
No EEPROM/flash device found.
The factory BIOS is the same except that it returns
Probing for MX25L4005, 512 KB RDID returned 7f 9d 7e.
<snip>
No EEPROM/flash device found.
Please specify which flash chips you are using. The snipped logs are extremely misleading, especially because the RDID output contradicts the MX25L4005 claim in the mail subject. The RDID you are seeing is from a Pm25LV040 (7f 9d 7e).
The block diagram shows the BIOS connected directly to the 570-SLI and not via the 8716
That block diagram is correct for v1.x of the board.
Could someone please give me a clue of either what I have missed out, or how to proceed?
We need to know the exact flash chip types before we can proceed.
Can you try the patch below? We need full output from flashrom -V.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Index: flashrom-spi_pm25/flash.h =================================================================== --- flashrom-spi_pm25/flash.h (Revision 3086) +++ flashrom-spi_pm25/flash.h (Arbeitskopie) @@ -158,7 +158,8 @@ /* Programmable Micro Corp is listed in JEP106W in bank 2, so it should have * a 0x7F continuation code prefix. */ -#define PMC_ID 0x9D /* PMC */ +#define PMC_ID 0x7F9D /* PMC */ +#define PMC_ID_NOPREFIX 0x9D /* PMC, missing 0x7F prefix */ #define PMC_49FL002 0x6D #define PMC_49FL004 0x6E
Index: flashrom-spi_pm25/flashchips.c =================================================================== --- flashrom-spi_pm25/flashchips.c (Revision 3086) +++ flashrom-spi_pm25/flashchips.c (Arbeitskopie) @@ -100,9 +100,9 @@ probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc}, {"SST49LF160C", SST_ID, SST_49LF160C, 2048, 4 * 1024 , probe_49lfxxxc, erase_49lfxxxc, write_49lfxxxc}, - {"Pm49FL002", PMC_ID, PMC_49FL002, 256, 16 * 1024, + {"Pm49FL002", PMC_ID_NOPREFIX, PMC_49FL002, 256, 16 * 1024, probe_jedec, erase_chip_jedec, write_49fl004}, - {"Pm49FL004", PMC_ID, PMC_49FL004, 512, 64 * 1024, + {"Pm49FL004", PMC_ID_NOPREFIX, PMC_49FL004, 512, 64 * 1024, probe_jedec, erase_chip_jedec, write_49fl004}, {"W29C011", WINBOND_ID, W_29C011, 128, 128, probe_jedec, erase_chip_jedec, write_jedec}, @@ -205,6 +205,8 @@ probe_spi, NULL, NULL}, {"MX unknown SPI chip", MX_ID, GENERIC_DEVICE_ID, 0, 0, probe_spi, NULL, NULL}, + {"PMC unknown SPI chip", PMC_ID, GENERIC_DEVICE_ID, 0, 0, + probe_spi, NULL, NULL}, {"SST unknown SPI chip", SST_ID, GENERIC_DEVICE_ID, 0, 0, probe_spi, NULL, NULL}, {"ST unknown SPI chip", ST_ID, GENERIC_DEVICE_ID, 0, 0, Index: flashrom-spi_pm25/spi.c =================================================================== --- flashrom-spi_pm25/spi.c (Revision 3086) +++ flashrom-spi_pm25/spi.c (Arbeitskopie) @@ -281,8 +281,14 @@ uint8_t manuf_id; uint16_t model_id; if (!generic_spi_rdid(readarr)) { - manuf_id = readarr[0]; - model_id = (readarr[1] << 8) | readarr[2]; + /* Check if this is a continuation vendor ID */ + if (readarr[0] == 0x7f) { + manuf_id = (readarr[0] << 8) | readarr[1]; + model_id = readarr[2]; + } else { + manuf_id = readarr[0]; + model_id = (readarr[1] << 8) | readarr[2]; + } printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, manuf_id, model_id); if (manuf_id == flash->manufacture_id && model_id == flash->model_id) {