in vt8237r_enable(), write function enables only to ISA bridge config space
authorFlorian Zumbiehl <florz@florz.de>
Tue, 1 Nov 2011 19:16:16 +0000 (20:16 +0100)
committerPatrick Georgi <patrick@georgi-clan.de>
Mon, 7 Nov 2011 12:04:36 +0000 (13:04 +0100)
vt8237r_enable() so far wrote the function enable values to the same
offset in the config space of every one of the vt8237's functions,
even though the register is located in the ISA bridge only.

Change-Id: I639586dc238132f5b8d2f320b794948718281b9c
Signed-off-by: Florian Zumbiehl <florz@florz.de>
Reviewed-on: http://review.coreboot.org/368
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
src/southbridge/via/vt8237r/vt8237r.c

index 5ba3815145aa7127b3f234624e018ea6e6139905..586df66b8eb9939bc9055b12f9e4709b84931f24 100644 (file)
@@ -66,11 +66,21 @@ void dump_south(device_t dev)
 
 static void vt8237r_enable(struct device *dev)
 {
+       u16 vid, did;
        struct southbridge_via_vt8237r_config *sb =
            (struct southbridge_via_vt8237r_config *)dev->chip_info;
 
-       pci_write_config8(dev, 0x50, sb->fn_ctrl_lo);
-       pci_write_config8(dev, 0x51, sb->fn_ctrl_hi);
+       if (dev->path.type == DEVICE_PATH_PCI) {
+               vid = pci_read_config16(dev, PCI_VENDOR_ID);
+               did = pci_read_config16(dev, PCI_DEVICE_ID);
+               if (vid == PCI_VENDOR_ID_VIA &&
+                       (did == PCI_DEVICE_ID_VIA_VT8237R_LPC ||
+                        did == PCI_DEVICE_ID_VIA_VT8237A_LPC ||
+                        did == PCI_DEVICE_ID_VIA_VT8237S_LPC)) {
+                       pci_write_config8(dev, 0x50, sb->fn_ctrl_lo);
+                       pci_write_config8(dev, 0x51, sb->fn_ctrl_hi);
+               }
+       }
 
        /* TODO: If SATA is disabled, move IDE to fn0 to conform PCI specs. */
 }