[coreboot] [patch] asus m2v: autodetect ide cable type

Rudolf Marek r.marek at assembler.cz
Sun Nov 14 11:39:53 CET 2010


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<ranma+coreboot at 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"
>




More information about the coreboot mailing list