Read gpi4 and gpi9 to determine the 40/80-pin cable type.

Signed-off-by: Tobias Diedrich <[email protected]>

---

Index: src/mainboard/asus/m2v/mainboard.c
===================================================================
--- src/mainboard/asus/m2v/mainboard.c.orig     2010-11-13 02:22:19.000000000 
+0100
+++ src/mainboard/asus/m2v/mainboard.c  2010-11-13 02:31:10.000000000 +0100
@@ -17,9 +17,41 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+#include <arch/io.h>
 #include <device/device.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
+#include <console/console.h>
+#include "southbridge/via/vt8237r/vt8237r.h"
 #include "chip.h"
 
+void vt8237_pata_80pin_detect(struct southbridge_via_vt8237r_config *sb)
+{
+       device_t dev;
+       u16 acpi_io_base;
+       u32 gpio_in;
+
+       dev = dev_find_device(PCI_VENDOR_ID_VIA,
+                               PCI_DEVICE_ID_VIA_VT8237A_LPC, 0);
+       if (!dev)
+               return;
+
+       acpi_io_base = pci_read_config16(dev, 0x88);
+       if (!acpi_io_base || (acpi_io_base & ~1) == 0)
+               return;
+       acpi_io_base &= ~1;
+
+       gpio_in = inl(acpi_io_base + 0x48);
+       /* bit 9 for primary port, clear if unconnected or 80-pin cable */
+       sb->ide0_80pin_cable = !(gpio_in & (1<<9));
+       /* bit 4 for secondary port, clear if unconnected or 80-pin cable */
+       sb->ide1_80pin_cable = !(gpio_in & (1<<4));
+       printk(BIOS_INFO, "Cable on %s PATA port: %d pin\n", "primary",
+               sb->ide0_80pin_cable ? 80 : 40);
+       printk(BIOS_INFO, "Cable on %s PATA port: %d pin\n", "secondary",
+               sb->ide1_80pin_cable ? 80 : 40);
+}
+
 struct chip_operations mainboard_ops = {
        CHIP_NAME("ASUS M2V")
 };
Index: src/southbridge/via/vt8237r/vt8237r.h
===================================================================
--- src/southbridge/via/vt8237r/vt8237r.h.orig  2010-11-13 02:22:19.000000000 
+0100
+++ src/southbridge/via/vt8237r/vt8237r.h       2010-11-13 02:29:47.000000000 
+0100
@@ -21,6 +21,7 @@
 #define SOUTHBRIDGE_VIA_VT8237R_VT8237R_H
 
 #include <stdint.h>
+#include "chip.h"
 
 /* Static resources for the VT8237R southbridge */
 
@@ -118,6 +119,13 @@
 #include <device/device.h>
 void writeback(struct device *dev, u16 where, u8 what);
 void dump_south(device_t dev);
+#if CONFIG_HAVE_PATA_CABLETYPE_DETECT
+void vt8237_pata_80pin_detect(struct southbridge_via_vt8237r_config *sb);
+#else
+static inline void vt8237_pata_80pin_detect(struct 
southbridge_via_vt8237r_config *sb)
+{
+}
+#endif
 #endif
 
 #endif
Index: src/southbridge/via/vt8237r/vt8237r_ide.c
===================================================================
--- src/southbridge/via/vt8237r/vt8237r_ide.c.orig      2010-11-13 
02:22:19.000000000 +0100
+++ src/southbridge/via/vt8237r/vt8237r_ide.c   2010-11-13 02:32:31.000000000 
+0100
@@ -38,6 +38,8 @@
        u8 enables;
        u32 cablesel;
 
+       vt8237_pata_80pin_detect(sb);
+
        printk(BIOS_INFO, "%s IDE interface %s\n", "Primary",
                    sb->ide0_enable ? "enabled" : "disabled");
        printk(BIOS_INFO, "%s IDE interface %s\n", "Secondary",
Index: src/mainboard/asus/m2v/Kconfig
===================================================================
--- src/mainboard/asus/m2v/Kconfig.orig 2010-11-13 02:22:19.000000000 +0100
+++ src/mainboard/asus/m2v/Kconfig      2010-11-13 02:29:47.000000000 +0100
@@ -21,6 +21,7 @@
        select PIRQ_ROUTE
        select HAVE_ACPI_TABLES
        select HAVE_MP_TABLE
+       select HAVE_PATA_CABLETYPE_DETECT
 
 config MAINBOARD_DIR
        string
Index: src/southbridge/via/vt8237r/Kconfig
===================================================================
--- src/southbridge/via/vt8237r/Kconfig.orig    2010-11-13 02:22:19.000000000 
+0100
+++ src/southbridge/via/vt8237r/Kconfig 2010-11-13 02:29:47.000000000 +0100
@@ -27,6 +27,11 @@
        default n
        depends on SOUTHBRIDGE_VIA_VT8237R
 
+config HAVE_PATA_CABLETYPE_DETECT
+       bool
+       default n
+       depends on SOUTHBRIDGE_VIA_VT8237R
+
 config BOOTBLOCK_SOUTHBRIDGE_INIT
        string
        default "southbridge/via/vt8237r/bootblock.c"

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to