[flashrom] [PATCH] Check class for nvidia southbridge
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Tue Mar 13 22:47:15 CET 2012
Hi Yinghai,
maybe you remember what the CK804 A01 comment mentioned in the mail
below refers to.
The chipset_enable.c code we're referring to is available at
http://www.flashrom.org/trac/flashrom/browser/trunk/chipset_enable.c
Michael, I would mask with the PCI class with 0xff00 and allow all bridges.
Regards,
Carl-Daniel
Am 13.03.2012 22:29 schrieb Michael Karcher:
> On dual-socket mainboards, there are two nvidia southbridge chips (one
> per socket). The south bridge really used as south bridge has the
> device class of the ISA/LPC bridge device set to 0x0601 [ISA Bridge],
> while the other one has a device class in the 0x05xx range [RAM stuff].
>
> This will select the correct south bridge for the chipset enable, and
> removes the hack that the 0x361 device needed to be ignored to get rid
> of the secondary south bridge on the Tyan S2915 / HP xw9400.
>
> The CK804 entry with the ID 10de:00d3 (which triggers on the secondary
> south bridge of the L1N64) has the comment
> /* Slave, should not be here, to fix known bug for A01. */
> Does anyone still remember what this 7 year old comment is trying to tell
> us? What is "A01"? A chipset revision? What class does this device
> have in "A01"? Will the class-must-be-0601-check break "it"?
>
> Signed-off-by: Michael Karcher <flashrom at mkarcher.dialup.fu-berlin.de>
> ---
> chipset_enable.c | 22 +++++++++++++---------
> 1 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/chipset_enable.c b/chipset_enable.c
> index 0aba1e0..adf2e0d 100644
> --- a/chipset_enable.c
> +++ b/chipset_enable.c
> @@ -906,6 +906,12 @@ static int enable_flash_ck804(struct pci_dev *dev, const char *name)
> {
> uint8_t old, new;
>
> + if (pci_read_word(dev, PCI_CLASS_DEVICE) != 0x0601) {
> + /* output is followed by "OK - searching for ...\n" */
> + msg_pinfo(" Seems to be a secondary south bridge, ");
> + return NOT_DONE_YET;
> + }
> +
> pci_write_byte(dev, 0x92, 0x00);
> if (pci_read_byte(dev, 0x92) != 0x00) {
> msg_pinfo("Setting register 0x%x to 0x%x on %s failed "
> @@ -995,6 +1001,12 @@ static int enable_flash_mcp55(struct pci_dev *dev, const char *name)
> uint8_t old, new, val;
> uint16_t wordval;
>
> + if (pci_read_word(dev, PCI_CLASS_DEVICE) != 0x0601) {
> + /* output is followed by "OK - searching for ...\n" */
> + msg_pinfo(" Seems to be a secondary south bridge, ");
> + return NOT_DONE_YET;
> + }
> +
> /* Set the 0-16 MB enable bits. */
> val = pci_read_byte(dev, 0x88);
> val |= 0xff; /* 256K */
> @@ -1207,15 +1219,7 @@ const struct penable chipset_enables[] = {
> {0x10de, 0x0262, NT, "NVIDIA", "MCP51", enable_flash_ck804},
> {0x10de, 0x0263, NT, "NVIDIA", "MCP51", enable_flash_ck804},
> {0x10de, 0x0360, OK, "NVIDIA", "MCP55", enable_flash_mcp55}, /* M57SLI*/
> - /* 10de:0361 is present in Tyan S2915 OEM systems, but not connected to
> - * the flash chip. Instead, 10de:0364 is connected to the flash chip.
> - * Until we have PCI device class matching or some fallback mechanism,
> - * this is needed to get flashrom working on Tyan S2915 and maybe other
> - * dual-MCP55 boards.
> - */
> -#if 0
> - {0x10de, 0x0361, NT, "NVIDIA", "MCP55", enable_flash_mcp55}, /* LPC */
> -#endif
> + {0x10de, 0x0361, OK, "NVIDIA", "MCP55", enable_flash_mcp55}, /* LPC */
> {0x10de, 0x0362, OK, "NVIDIA", "MCP55", enable_flash_mcp55}, /* LPC */
> {0x10de, 0x0363, OK, "NVIDIA", "MCP55", enable_flash_mcp55}, /* LPC */
> {0x10de, 0x0364, OK, "NVIDIA", "MCP55", enable_flash_mcp55}, /* LPC */
--
http://www.hailfinger.org/
More information about the flashrom
mailing list