[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