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 Diedrichranma+coreboot@tdiedrich.de
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"