Hi,

What about a weak function? I think about this:

Make a non-weak dummy function which will read the original devicetree data.
Create a weak function in your mainboard.c which will override it.

[coreboot] [PATCH] [RFC] sata PHY settings callback on SB700

Something like this.

Thanks,
Rudolf


Dne 13.11.2010 02:42, Tobias Diedrich napsal(a):
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