[coreboot] [PATCH] Add new ec subdir for Embedded Controllers

Sven Schnelle svens at stackframe.org
Tue Jan 25 13:51:17 CET 2011


Hi List,

Can somebody please comment on the patch below? Would be nice as this
patch is required for the upcoming Thinkpad Patch Series.

Cheers,

Sven.

Sven Schnelle <svens at stackframe.org> writes:

> Stefan Reinauer <stefan.reinauer at coreboot.org> writes:
>
>> * Sven Schnelle <svens at stackframe.org> [110117 21:46]:
>>> Index: src/ec/acpi/ec.h
>>> ===================================================================
>>> --- src/ec/acpi/ec.h	(revision 0)
>>> +++ src/ec/acpi/ec.h	(working copy)
>>> @@ -17,9 +17,11 @@
>>>   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>>>   */
>>>  
>>> -#ifndef _MAINBOARD_EC_H
>>> -#define _MAINBOARD_EC_H
>>> +#ifndef _EC_ACPI_H
>>> +#define _EC_ACPI_H
>>>  
>>> +#include "chip.h"
>> Is chip.h needed ?
>
> No, i removed it now.
>
>>> +
>>>  #define EC_DATA	0x62
>>>  #define EC_SC	0x66
>>   
>>> @@ -28,6 +28,7 @@
>>>  	select SOUTHBRIDGE_TI_PCIXX12
>>>  	select SUPERIO_SMSC_FDC37N972
>>>  	select SUPERIO_SMSC_SIO10N268
>>> +	select EC_ACPI
>>>  	select BOARD_HAS_FADT
>>>  	select HAVE_ACPI_TABLES
>>>  	select HAVE_PIRQ_TABLE
>>
>> Maybe we want to add support for explicit EC types and reference those
>> here? And then have the acpi code shared between all those ECs.
>> The Roda RK886EX has it's EC code spread out into src/superio/renesas,
>> too.
>
> I will submit patches for that later. For now i want to remove only the
> ec code in the mainboard dir for the upcoming Thinkpad patch.
>
>>> Index: src/mainboard/getac/p470/mainboard_smi.c
>>> ===================================================================
>>> --- src/mainboard/getac/p470/mainboard_smi.c	(revision 6260)
>>> +++ src/mainboard/getac/p470/mainboard_smi.c	(working copy)
>>> @@ -26,7 +26,8 @@
>>>  #include "southbridge/intel/i82801gx/i82801gx.h"
>>>  #include "southbridge/intel/i82801gx/nvs.h"
>>>  #include "northbridge/intel/i945/udelay.c"
>>> -#include "ec.c"
>>> +#include <ec/acpi/ec.h>
>>
>> ec/acpi.h?
>
> I want to keep the current layout. When adding other ECs (like the PMH7
> in the thinkpad, which can be considered to be an EC), the path will
> be something like ec/lenovo/pmh7. I don't want to have header files
> in the toplevel ec directory.
>
>>> +#include "ec_oem.c"
>>>  
>>>  #define MAX_LCD_BRIGHTNESS 0xd8
>>>  
>>> Index: src/mainboard/getac/p470/Makefile.inc
>>> ===================================================================
>>> --- src/mainboard/getac/p470/Makefile.inc	(revision 6260)
>>> +++ src/mainboard/getac/p470/Makefile.inc	(working copy)
>>> @@ -21,3 +21,4 @@
>>>  ramstage-$(CONFIG_HAVE_ACPI_SLIC) += acpi_slic.c
>>>  
>>>  smm-$(CONFIG_HAVE_SMI_HANDLER) += mainboard_smi.c
>>> +smm-$(CONFIG_HAVE_SMI_HANDLER) += ../../../ec/acpi/ec.c
>>
>> shouldn't the EC makefile in src/ec/acpi say 
>>
>> smm-$(CONFIG_HAVE_SMI_HANDLER) += ec.c instead?
>
> Done. You're right, looks better this way.
>
>>> Index: src/mainboard/getac/p470/devicetree.cb
>>> ===================================================================
>>> --- src/mainboard/getac/p470/devicetree.cb	(revision 6260)
>>> +++ src/mainboard/getac/p470/devicetree.cb	(working copy)
>>> @@ -133,6 +133,12 @@
>>>  					end
>>>  					device pnp 4e.b off		# HWM
>>>  					end
>>> +					chip ec/acpi
>>> +						device pnp ff.1 on
>>> +							io 0x60 = 0x62
>>> +							io 0x62 = 0x66
>>> +						end
>>> +					end
>>
>> what's the device pnp and io 0x60/io 0x62 used for? this does not look
>> too good. I would wipe it.
>
> The reason to have the dummy pnp device is that coreboot has no
> device type for static I/O addresses in the devicetree.cb. At least i
> didn't found any sign of its existence. So i've added that dummy device
> to reserve the 0x62/0x66 ACPI register pair for the ACPI EC.
>
> As you know the code much better than i do, i removed it in the attached
> patch anyways.
>
> Signed-off-by: Sven Schnelle <svens at stackframe.org>
>
> Index: src/Kconfig
> ===================================================================
> --- src/Kconfig	(revision 6275)
> +++ src/Kconfig	(working copy)
> @@ -124,6 +124,8 @@
>  source src/superio/Kconfig
>  comment "Devices"
>  source src/devices/Kconfig
> +comment "Embedded Controllers"
> +source src/ec/Kconfig
>  
>  endmenu
>  
> Index: src/ec/Kconfig
> ===================================================================
> --- src/ec/Kconfig	(revision 0)
> +++ src/ec/Kconfig	(revision 0)
> @@ -0,0 +1 @@
> +source src/ec/acpi/Kconfig
> Index: src/ec/Makefile.inc
> ===================================================================
> --- src/ec/Makefile.inc	(revision 0)
> +++ src/ec/Makefile.inc	(revision 0)
> @@ -0,0 +1 @@
> +subdirs-y += acpi
> Index: src/ec/acpi/Kconfig
> ===================================================================
> --- src/ec/acpi/Kconfig	(revision 0)
> +++ src/ec/acpi/Kconfig	(revision 0)
> @@ -0,0 +1,5 @@
> +config EC_ACPI
> +	bool
> +        help
> +	ACPI Embedded Controller interface. Mostly found
> +	in latops.
> Index: src/ec/acpi/Makefile.inc
> ===================================================================
> --- src/ec/acpi/Makefile.inc	(revision 0)
> +++ src/ec/acpi/Makefile.inc	(revision 0)
> @@ -0,0 +1,2 @@
> +ramstage-y += ec.c
> +smm-$(CONFIG_HAVE_SMI_HANDLER) += ec.c
> Index: src/ec/acpi/ec.c
> ===================================================================
> --- src/ec/acpi/ec.c	(revision 0)
> +++ src/ec/acpi/ec.c	(working copy)
> @@ -20,6 +20,7 @@
>   */
>  
>  #include <console/console.h>
> +#include <device/device.h>
>  #include <arch/io.h>
>  #include <delay.h>
>  #include "ec.h"
> @@ -112,3 +113,6 @@
>  	return send_ec_data(data);
>  }
>  
> +struct chip_operations ec_acpi_ops = {
> +	CHIP_NAME("ACPI Embedded Controller")
> +};
> Index: src/ec/acpi/ec.h
> ===================================================================
> --- src/ec/acpi/ec.h	(revision 0)
> +++ src/ec/acpi/ec.h	(working copy)
> @@ -17,8 +17,8 @@
>   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
>   */
>  
> -#ifndef _MAINBOARD_EC_H
> -#define _MAINBOARD_EC_H
> +#ifndef _EC_ACPI_H
> +#define _EC_ACPI_H
>  
>  #define EC_DATA	0x62
>  #define EC_SC	0x66
> Index: src/mainboard/getac/p470/Kconfig
> ===================================================================
> --- src/mainboard/getac/p470/Kconfig	(revision 6275)
> +++ src/mainboard/getac/p470/Kconfig	(working copy)
> @@ -28,6 +28,7 @@
>  	select SOUTHBRIDGE_TI_PCIXX12
>  	select SUPERIO_SMSC_FDC37N972
>  	select SUPERIO_SMSC_SIO10N268
> +	select EC_ACPI
>  	select BOARD_HAS_FADT
>  	select HAVE_ACPI_TABLES
>  	select HAVE_PIRQ_TABLE
> Index: src/mainboard/getac/p470/mainboard_smi.c
> ===================================================================
> --- src/mainboard/getac/p470/mainboard_smi.c	(revision 6275)
> +++ src/mainboard/getac/p470/mainboard_smi.c	(working copy)
> @@ -26,7 +26,8 @@
>  #include "southbridge/intel/i82801gx/i82801gx.h"
>  #include "southbridge/intel/i82801gx/nvs.h"
>  #include "northbridge/intel/i945/udelay.c"
> -#include "ec.c"
> +#include <ec/acpi/ec.h>
> +#include "ec_oem.c"
>  
>  #define MAX_LCD_BRIGHTNESS 0xd8
>  
> Index: src/mainboard/getac/p470/devicetree.cb
> ===================================================================
> --- src/mainboard/getac/p470/devicetree.cb	(revision 6275)
> +++ src/mainboard/getac/p470/devicetree.cb	(working copy)
> @@ -133,6 +133,8 @@
>  					end
>  					device pnp 4e.b off		# HWM
>  					end
> +					chip ec/acpi
> +					end
>                                  end
>  
>                          end
> Index: src/mainboard/getac/p470/ec.c
> ===================================================================
> --- src/mainboard/getac/p470/ec.c	(revision 6275)
> +++ src/mainboard/getac/p470/ec.c	(working copy)
> @@ -1,235 +0,0 @@
> -/*
> - * This file is part of the coreboot project.
> - *
> - * Copyright (C) 2008-2009 coresystems GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; version 2 of
> - * the License.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
> - * MA 02110-1301 USA
> - */
> -
> -#include <console/console.h>
> -#include <arch/io.h>
> -#include <delay.h>
> -#include "ec.h"
> -
> -int send_ec_command(u8 command)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) {
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending command 0x%02x to EC!\n", 
> -				command);
> -		// return -1;
> -	}
> -
> -	outb(command, EC_SC);
> -	return 0;
> -}
> -
> -int send_ec_data(u8 data)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) { // wait for IBF = 0
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending data 0x%02x to EC!\n",
> -				data);
> -		// return -1;
> -	}
> -
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -int send_ec_data_nowait(u8 data)
> -{
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -u8 recv_ec_data(void)
> -{
> -	int timeout;
> -	u8 data;
> -
> -	timeout = 0x7fff;
> -	while (--timeout) { // Wait for OBF = 1
> -		if (inb(EC_SC) & EC_OBF) {
> -			break;
> -		}
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "\nTimeout while receiving data from EC!\n");
> -		// return -1;
> -	}
> -
> -	data = inb(EC_DATA);
> -	printk(BIOS_SPEW, "recv_ec_data: 0x%02x\n", data);
> -
> -	return data;
> -}
> -
> -u8 ec_read(u8 addr)
> -{
> -	send_ec_command(0x80);
> -	send_ec_data(addr);
> -
> -	return recv_ec_data();
> -}
> -
> -int ec_write(u8 addr, u8 data)
> -{
> -	send_ec_command(0x81);
> -	send_ec_data(addr);
> -	return send_ec_data(data);
> -}
> -
> -int ec_dump_status(void)
> -{
> -	u8 ec_sc = inb(EC_SC);
> -	printk(BIOS_DEBUG, "Embedded Controller Status: ");
> -	if (ec_sc & (1 << 6)) printk(BIOS_DEBUG, "SMI_EVT ");
> -	if (ec_sc & (1 << 5)) printk(BIOS_DEBUG, "SCI_EVT ");
> -	if (ec_sc & (1 << 4)) printk(BIOS_DEBUG, "BURST ");
> -	if (ec_sc & (1 << 3)) printk(BIOS_DEBUG, "CMD ");
> -	if (ec_sc & (1 << 1)) printk(BIOS_DEBUG, "IBF ");
> -	if (ec_sc & (1 << 0)) printk(BIOS_DEBUG, "OBF ");
> -	printk(BIOS_DEBUG, "\n");
> -	
> -	return ec_sc;
> -}
> -
> -
> -/* ********************************** */
> -
> -int send_ec_oem_command(u8 command)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_OEM_SC) & EC_IBF) && --timeout) {
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending OEM command 0x%02x to EC!\n", 
> -				command);
> -		// return -1;
> -	}
> -
> -	outb(command, EC_OEM_SC);
> -	return 0;
> -}
> -
> -int send_ec_oem_data(u8 data)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_OEM_SC) & EC_IBF) && --timeout) { // wait for IBF = 0
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending OEM data 0x%02x to EC!\n",
> -				data);
> -		// return -1;
> -	}
> -
> -	outb(data, EC_OEM_DATA);
> -
> -	return 0;
> -}
> -
> -int send_ec_oem_data_nowait(u8 data)
> -{
> -	outb(data, EC_OEM_DATA);
> -
> -	return 0;
> -}
> -
> -u8 recv_ec_oem_data(void)
> -{
> -	int timeout;
> -	u8 data;
> -
> -	timeout = 0x7fff;
> -	while (--timeout) { // Wait for OBF = 1
> -		if (inb(EC_OEM_SC) & EC_OBF) {
> -			break;
> -		}
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "\nTimeout while receiving OEM data from EC!\n");
> -		// return -1;
> -	}
> -
> -	data = inb(EC_OEM_DATA);
> -	// printk(BIOS_SPEW, "recv_ec_oem_data: 0x%02x\n", data);
> -
> -	return data;
> -}
> -
> -u8 ec_oem_read(u8 addr)
> -{
> -	send_ec_oem_command(0x80);
> -	send_ec_oem_data(addr);
> -
> -	return recv_ec_oem_data();
> -}
> -
> -int ec_oem_write(u8 addr, u8 data)
> -{
> -	send_ec_oem_command(0x81);
> -	send_ec_oem_data(addr);
> -	return send_ec_oem_data(data);
> -}
> -
> -int ec_oem_dump_status(void)
> -{
> -	u8 ec_sc = inb(EC_OEM_SC);
> -	printk(BIOS_DEBUG, "Embedded Controller Status: ");
> -	if (ec_sc & (1 << 6)) printk(BIOS_DEBUG, "SMI_EVT ");
> -	if (ec_sc & (1 << 5)) printk(BIOS_DEBUG, "SCI_EVT ");
> -	if (ec_sc & (1 << 4)) printk(BIOS_DEBUG, "BURST ");
> -	if (ec_sc & (1 << 3)) printk(BIOS_DEBUG, "CMD ");
> -	if (ec_sc & (1 << 1)) printk(BIOS_DEBUG, "IBF ");
> -	if (ec_sc & (1 << 0)) printk(BIOS_DEBUG, "OBF ");
> -	printk(BIOS_DEBUG, "\n");
> -	
> -	return ec_sc;
> -}
> -
> Index: src/mainboard/getac/p470/ec_oem.c
> ===================================================================
> --- src/mainboard/getac/p470/ec_oem.c	(revision 6275)
> +++ src/mainboard/getac/p470/ec_oem.c	(working copy)
> @@ -22,114 +22,9 @@
>  #include <console/console.h>
>  #include <arch/io.h>
>  #include <delay.h>
> -#include "ec.h"
> +#include <ec/acpi/ec.h>
> +#include "ec_oem.h"
>  
> -int send_ec_command(u8 command)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) {
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending command 0x%02x to EC!\n", 
> -				command);
> -		// return -1;
> -	}
> -
> -	outb(command, EC_SC);
> -	return 0;
> -}
> -
> -int send_ec_data(u8 data)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) { // wait for IBF = 0
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending data 0x%02x to EC!\n",
> -				data);
> -		// return -1;
> -	}
> -
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -int send_ec_data_nowait(u8 data)
> -{
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -u8 recv_ec_data(void)
> -{
> -	int timeout;
> -	u8 data;
> -
> -	timeout = 0x7fff;
> -	while (--timeout) { // Wait for OBF = 1
> -		if (inb(EC_SC) & EC_OBF) {
> -			break;
> -		}
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "\nTimeout while receiving data from EC!\n");
> -		// return -1;
> -	}
> -
> -	data = inb(EC_DATA);
> -	printk(BIOS_SPEW, "recv_ec_data: 0x%02x\n", data);
> -
> -	return data;
> -}
> -
> -u8 ec_read(u8 addr)
> -{
> -	send_ec_command(0x80);
> -	send_ec_data(addr);
> -
> -	return recv_ec_data();
> -}
> -
> -int ec_write(u8 addr, u8 data)
> -{
> -	send_ec_command(0x81);
> -	send_ec_data(addr);
> -	return send_ec_data(data);
> -}
> -
> -int ec_dump_status(void)
> -{
> -	u8 ec_sc = inb(EC_SC);
> -	printk(BIOS_DEBUG, "Embedded Controller Status: ");
> -	if (ec_sc & (1 << 6)) printk(BIOS_DEBUG, "SMI_EVT ");
> -	if (ec_sc & (1 << 5)) printk(BIOS_DEBUG, "SCI_EVT ");
> -	if (ec_sc & (1 << 4)) printk(BIOS_DEBUG, "BURST ");
> -	if (ec_sc & (1 << 3)) printk(BIOS_DEBUG, "CMD ");
> -	if (ec_sc & (1 << 1)) printk(BIOS_DEBUG, "IBF ");
> -	if (ec_sc & (1 << 0)) printk(BIOS_DEBUG, "OBF ");
> -	printk(BIOS_DEBUG, "\n");
> -	
> -	return ec_sc;
> -}
> -
> -
> -/* ********************************** */
> -
>  int send_ec_oem_command(u8 command)
>  {
>  	int timeout;
> Index: src/mainboard/getac/p470/mainboard.c
> ===================================================================
> --- src/mainboard/getac/p470/mainboard.c	(revision 6275)
> +++ src/mainboard/getac/p470/mainboard.c	(working copy)
> @@ -28,7 +28,7 @@
>  #include "chip.h"
>  #include "hda_verb.h"
>  
> -#include "ec.c"
> +#include "ec_oem.c"
>  
>  #define MAX_LCD_BRIGHTNESS	0xd8
>  
> Index: src/mainboard/getac/p470/ec.h
> ===================================================================
> --- src/mainboard/getac/p470/ec.h	(revision 6275)
> +++ src/mainboard/getac/p470/ec.h	(working copy)
> @@ -1,64 +0,0 @@
> -/*
> - * This file is part of the coreboot project.
> - *
> - * Copyright (C) 2008-2009 coresystems GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; version 2 of
> - * the License.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
> - * MA 02110-1301 USA
> - */
> -
> -#ifndef _MAINBOARD_EC_H
> -#define _MAINBOARD_EC_H
> -
> -#define EC_DATA	0x62
> -#define EC_SC	0x66
> -
> -
> -#define EC_OEM_DATA	0x68
> -#define EC_OEM_SC	0x6c
> -
> -/* EC_SC input */
> -#define   EC_SMI_EVT	(1 << 6) // 1: SMI event pending
> -#define   EC_SCI_EVT	(1 << 5) // 1: SCI event pending
> -#define   EC_BURST	(1 << 4) // controller is in burst mode
> -#define   EC_CMD	(1 << 3) // 1: byte in data register is command
> -				 // 0: byte in data register is data
> -#define   EC_IBF	(1 << 1) // 1: input buffer full (data ready for ec)
> -#define   EC_OBF	(1 << 0) // 1: output buffer full (data ready for host)
> -/* EC_SC output */
> -#define   RD_EC		0x80 // Read Embedded Controller
> -#define   WR_EC		0x81 // Write Embedded Controller
> -#define   BE_EC		0x82 // Burst Enable Embedded Controller
> -#define   BD_EC 	0x83 // Burst Disable Embedded Controller
> -#define   QR_EC 	0x84 // Query Embedded Controller
> -
> -int send_ec_command(u8 command);
> -int send_ec_data(u8 data);
> -int send_ec_data_nowait(u8 data);
> -u8 recv_ec_data(void);
> -u8 ec_read(u8 addr);
> -int ec_write(u8 addr, u8 data);
> -
> -int send_ec_oem_command(u8 command);
> -int send_ec_oem_data(u8 data);
> -int send_ec_oem_data_nowait(u8 data);
> -u8 recv_ec_oem_data(void);
> -u8 ec_oem_read(u8 addr);
> -int ec_oem_write(u8 addr, u8 data);
> -
> -int ec_dump_status(void);
> -int ec_oem_dump_status(void);
> -#endif
> -
> Index: src/mainboard/getac/p470/ec_oem.h
> ===================================================================
> --- src/mainboard/getac/p470/ec_oem.h	(revision 6275)
> +++ src/mainboard/getac/p470/ec_oem.h	(working copy)
> @@ -19,13 +19,9 @@
>   * MA 02110-1301 USA
>   */
>  
> -#ifndef _MAINBOARD_EC_H
> -#define _MAINBOARD_EC_H
> +#ifndef _MAINBOARD_EC_OEM_H
> +#define _MAINBOARD_EC_OEM_H
>  
> -#define EC_DATA	0x62
> -#define EC_SC	0x66
> -
> -
>  #define EC_OEM_DATA	0x68
>  #define EC_OEM_SC	0x6c
>  
> @@ -44,13 +40,6 @@
>  #define   BD_EC 	0x83 // Burst Disable Embedded Controller
>  #define   QR_EC 	0x84 // Query Embedded Controller
>  
> -int send_ec_command(u8 command);
> -int send_ec_data(u8 data);
> -int send_ec_data_nowait(u8 data);
> -u8 recv_ec_data(void);
> -u8 ec_read(u8 addr);
> -int ec_write(u8 addr, u8 data);
> -
>  int send_ec_oem_command(u8 command);
>  int send_ec_oem_data(u8 data);
>  int send_ec_oem_data_nowait(u8 data);
> Index: src/mainboard/roda/rk886ex/Makefile.inc
> ===================================================================
> --- src/mainboard/roda/rk886ex/Makefile.inc	(revision 6275)
> +++ src/mainboard/roda/rk886ex/Makefile.inc	(working copy)
> @@ -18,7 +18,6 @@
>  ##
>  
>  ramstage-y += m3885.c
> -ramstage-y += ec.c
>  driver-y += rtl8168.c
>  
>  smm-$(CONFIG_HAVE_SMI_HANDLER) += mainboard_smi.c
> Index: src/mainboard/roda/rk886ex/mainboard_smi.c
> ===================================================================
> --- src/mainboard/roda/rk886ex/mainboard_smi.c	(revision 6275)
> +++ src/mainboard/roda/rk886ex/mainboard_smi.c	(working copy)
> @@ -24,6 +24,7 @@
>  #include <console/console.h>
>  #include <cpu/x86/smm.h>
>  #include "southbridge/intel/i82801gx/nvs.h"
> +#include "northbridge/intel/i945/udelay.c"
>  
>  /* The southbridge SMI handler checks whether gnvs has a
>   * valid pointer before calling the trap handler
> Index: src/mainboard/roda/rk886ex/devicetree.cb
> ===================================================================
> --- src/mainboard/roda/rk886ex/devicetree.cb	(revision 6275)
> +++ src/mainboard/roda/rk886ex/devicetree.cb	(working copy)
> @@ -104,6 +104,8 @@
>  					device pnp ff.1 on # dummy address
>  					end
>  				end
> +				chip ec/acpi
> +				end
>  
>                          end
>  			#device pci 1f.1 off end # IDE
> Index: src/mainboard/roda/rk886ex/m3885.c
> ===================================================================
> --- src/mainboard/roda/rk886ex/m3885.c	(revision 6275)
> +++ src/mainboard/roda/rk886ex/m3885.c	(working copy)
> @@ -25,7 +25,7 @@
>  #include <arch/io.h>
>  #include <delay.h>
>  
> -#include "ec.h"
> +#include <ec/acpi/ec.h>
>  #include "m3885.h"
>  
>  #define TH0LOW	80
> Index: src/mainboard/roda/rk886ex/ec.c
> ===================================================================
> --- src/mainboard/roda/rk886ex/ec.c	(revision 6275)
> +++ src/mainboard/roda/rk886ex/ec.c	(working copy)
> @@ -1,114 +0,0 @@
> -/*
> - * This file is part of the coreboot project.
> - *
> - * Copyright (C) 2008-2009 coresystems GmbH
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; version 2 of
> - * the License.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
> - * MA 02110-1301 USA
> - */
> -
> -#include <console/console.h>
> -#include <arch/io.h>
> -#include <delay.h>
> -#include "ec.h"
> -
> -int send_ec_command(u8 command)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) {
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending command 0x%02x to EC!\n",
> -				command);
> -		// return -1;
> -	}
> -
> -	outb(command, EC_SC);
> -	return 0;
> -}
> -
> -int send_ec_data(u8 data)
> -{
> -	int timeout;
> -
> -	timeout = 0x7ff;
> -	while ((inb(EC_SC) & EC_IBF) && --timeout) { // wait for IBF = 0
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "Timeout while sending data 0x%02x to EC!\n",
> -				data);
> -		// return -1;
> -	}
> -
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -int send_ec_data_nowait(u8 data)
> -{
> -	outb(data, EC_DATA);
> -
> -	return 0;
> -}
> -
> -u8 recv_ec_data(void)
> -{
> -	int timeout;
> -	u8 data;
> -
> -	timeout = 0x7fff;
> -	while (--timeout) { // Wait for OBF = 1
> -		if (inb(EC_SC) & EC_OBF) {
> -			break;
> -		}
> -		udelay(10);
> -		if ((timeout & 0xff) == 0)
> -			printk(BIOS_SPEW, ".");
> -	}
> -	if (!timeout) {
> -		printk(BIOS_DEBUG, "\nTimeout while receiving data from EC!\n");
> -		// return -1;
> -	}
> -
> -	data = inb(EC_DATA);
> -	printk(BIOS_DEBUG, "recv_ec_data: 0x%02x\n", data);
> -
> -	return data;
> -}
> -
> -u8 ec_read(u8 addr)
> -{
> -	send_ec_command(0x80);
> -	send_ec_data(addr);
> -
> -	return recv_ec_data();
> -}
> -
> -int ec_write(u8 addr, u8 data)
> -{
> -	send_ec_command(0x81);
> -	send_ec_data(addr);
> -	return send_ec_data(data);
> -}
> -
> Index: src/mainboard/roda/rk886ex/mainboard.c
> ===================================================================
> --- src/mainboard/roda/rk886ex/mainboard.c	(revision 6275)
> +++ src/mainboard/roda/rk886ex/mainboard.c	(working copy)
> @@ -30,7 +30,7 @@
>  #include <arch/coreboot_tables.h>
>  #include "chip.h"
>  
> -#include "ec.h"
> +#include <ec/acpi/ec.h>
>  #include "m3885.h"
>  
>  #define DUMP_RUNTIME_REGISTERS 0
> Index: src/mainboard/roda/rk886ex/ec.h
> ===================================================================
> --- src/mainboard/roda/rk886ex/ec.h	(revision 6275)
> +++ src/mainboard/roda/rk886ex/ec.h	(working copy)
> @@ -1,49 +0,0 @@
> -/*
> - * This file is part of the coreboot project.
> - *
> - * Copyright (C) 2008-2009 coresystems GmbH
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License as published by
> - * the Free Software Foundation; version 2 of the License.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
> - */
> -
> -#ifndef _MAINBOARD_EC_H
> -#define _MAINBOARD_EC_H
> -
> -#define EC_DATA	0x62
> -#define EC_SC	0x66
> -
> -/* EC_SC input */
> -#define   EC_SMI_EVT	(1 << 6) // 1: SMI event pending
> -#define   EC_SCI_EVT	(1 << 5) // 1: SCI event pending
> -#define   EC_BURST	(1 << 4) // controller is in burst mode
> -#define   EC_CMD	(1 << 3) // 1: byte in data register is command
> -				 // 0: byte in data register is data
> -#define   EC_IBF	(1 << 1) // 1: input buffer full (data ready for ec)
> -#define   EC_OBF	(1 << 0) // 1: output buffer full (data ready for host)
> -/* EC_SC output */
> -#define   RD_EC		0x80 // Read Embedded Controller
> -#define   WR_EC		0x81 // Write Embedded Controller
> -#define   BE_EC		0x82 // Burst Enable Embedded Controller
> -#define   BD_EC 	0x83 // Burst Disable Embedded Controller
> -#define   QR_EC 	0x84 // Query Embedded Controller
> -
> -int send_ec_command(u8 command);
> -int send_ec_data(u8 data);
> -int send_ec_data_nowait(u8 data);
> -u8 recv_ec_data(void);
> -u8 ec_read(u8 addr);
> -int ec_write(u8 addr, u8 data);
> -
> -#endif
> -
> Index: Makefile
> ===================================================================
> --- Makefile	(revision 6275)
> +++ Makefile	(working copy)
> @@ -123,7 +123,7 @@
>  PLATFORM-y += src/arch/$(ARCHDIR-y) src/cpu src/mainboard/$(MAINBOARDDIR)
>  TARGETS-y :=
>  
> -BUILD-y := src/lib src/boot src/console src/devices src/southbridge src/northbridge src/superio src/drivers
> +BUILD-y := src/lib src/boot src/console src/devices src/ec src/southbridge src/northbridge src/superio src/drivers
>  BUILD-y += util/cbfstool util/sconfig
>  BUILD-$(CONFIG_ARCH_X86) += src/pc80




More information about the coreboot mailing list