Uwe tested the recent SB600 SPI commit and notified me of one unexpected problem. It seems some boards do not use SPI_HOLD at all. Take that into account when trying to figure out if SPI is available.
Print the SB600 ROM strap override register status for better debugging.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Uwe, a test with full verbosity and this patch against latest flashrom would be appreciated. Besides that, if you find time to bisect where flashrom broke on your board, please tell us about the result. You may need to apply the one-liner I mentioned on IRC to be able to test.
Regards, Carl-Daniel
Index: flashrom-sb600_romstrap_override_spi_hold/chipset_enable.c =================================================================== --- flashrom-sb600_romstrap_override_spi_hold/chipset_enable.c (Revision 496) +++ flashrom-sb600_romstrap_override_spi_hold/chipset_enable.c (Arbeitskopie) @@ -719,7 +719,8 @@ reg &= 0xC0; printf_debug("GPIO31 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_HOLD"); printf_debug("GPIO32 used for %s\n", (reg & (1 << 7)) ? "GPIO" : "SPI_CS"); - if (reg != 0x00) + /* SPI_HOLD is not used on all boards, filter it out. */ + if ((reg & 0x80) != 0x00) has_spi = 0; /* GPIO47/SPI_CLK status */ reg = pci_read_byte(smbus_dev, 0xA7); @@ -732,6 +733,29 @@ if (has_spi) flashbus = BUS_TYPE_SB600_SPI;
+ /* Read ROM strap override register. */ + OUTB(0x8f, 0xcd6); + reg = INB(0xcd7); + reg &= 0x0e; + printf_debug("ROM strap override is %sactive", (reg & 0x02) ? "" : "not "); + if (reg & 0x02) { + switch ((reg & 0x0c) >> 2) { + case 0x00: + printf_debug(": LPC"); + break; + case 0x01: + printf_debug(": PCI"); + break; + case 0x02: + printf_debug(": FWH"); + break; + case 0x03: + printf_debug(": SPI"); + break; + } + } + printf_debug("\n"); + /* Force enable SPI ROM in SB600 PM register. * If we enable SPI ROM here, we have to disable it after we leave. * But how can we know which ROM we are going to handle? So we have
On 12.05.2009 02:36, Carl-Daniel Hailfinger wrote:
Besides that, if you find time to bisect where flashrom broke on your board, please tell us about the result. You may need to apply the one-liner I mentioned on IRC to be able to test.
It seems that you got corrupt RDID responses (timing?) even with old flashrom. Run flashrom -V|grep RDID to verify. All lines should be identical, but it seems they vary for you. Is there any (maybe even the first version with SB600 SPI at all) version where you get consistent results for RDID?
Regards, Carl-Daniel
On Tue, May 12, 2009 at 02:36:45AM +0200, Carl-Daniel Hailfinger wrote:
Print the SB600 ROM strap override register status for better debugging.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Acked-by: Uwe Hermann uwe@hermann-uwe.de
On 16.05.2009 01:27, Uwe Hermann wrote:
On Tue, May 12, 2009 at 02:36:45AM +0200, Carl-Daniel Hailfinger wrote:
Print the SB600 ROM strap override register status for better debugging.
Signed-off-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net
Acked-by: Uwe Hermann uwe@hermann-uwe.de
Thanks, committed in r516.
Regards, Carl-Daniel