Add new ec subdir for Embedded Controllers and common ACPI EC support
authorSven Schnelle <svens@stackframe.org>
Thu, 27 Jan 2011 11:43:03 +0000 (11:43 +0000)
committerPeter Stuge <peter@stuge.se>
Thu, 27 Jan 2011 11:43:03 +0000 (11:43 +0000)
Adds a new src/ec subdir for embedded controllers (mostly found in laptops)
and converts Getac P470 and Roda RK886EX to use the new ACPI EC instead
of having their own copies of those functions.

Signed-off-by: Sven Schnelle <svens@stackframe.org>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6304 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

22 files changed:
Makefile
src/Kconfig
src/ec/Kconfig [new file with mode: 0644]
src/ec/Makefile.inc [new file with mode: 0644]
src/ec/acpi/Kconfig [new file with mode: 0644]
src/ec/acpi/Makefile.inc [new file with mode: 0644]
src/ec/acpi/ec.c [new file with mode: 0644]
src/ec/acpi/ec.h [new file with mode: 0644]
src/mainboard/getac/p470/Kconfig
src/mainboard/getac/p470/devicetree.cb
src/mainboard/getac/p470/ec.c [deleted file]
src/mainboard/getac/p470/ec.h [deleted file]
src/mainboard/getac/p470/ec_oem.c [new file with mode: 0644]
src/mainboard/getac/p470/ec_oem.h [new file with mode: 0644]
src/mainboard/getac/p470/mainboard.c
src/mainboard/getac/p470/mainboard_smi.c
src/mainboard/roda/rk886ex/Makefile.inc
src/mainboard/roda/rk886ex/devicetree.cb
src/mainboard/roda/rk886ex/ec.c [deleted file]
src/mainboard/roda/rk886ex/ec.h [deleted file]
src/mainboard/roda/rk886ex/m3885.c
src/mainboard/roda/rk886ex/mainboard.c

index a41efd049f545c0ec2d0f438892996408ac05da2..0a834c74e37b26875048e9474b6c48109d1e0d03 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -123,7 +123,7 @@ export MAINBOARDDIR
 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
 
index 77546b05909ca35104705bc1c4e97aff7827ded6..28915b2181541ab97dd57b91a3d15cd7e5c59f08 100644 (file)
@@ -124,6 +124,8 @@ comment "Super I/O"
 source src/superio/Kconfig
 comment "Devices"
 source src/devices/Kconfig
+comment "Embedded Controllers"
+source src/ec/Kconfig
 
 endmenu
 
diff --git a/src/ec/Kconfig b/src/ec/Kconfig
new file mode 100644 (file)
index 0000000..9408f6b
--- /dev/null
@@ -0,0 +1 @@
+source src/ec/acpi/Kconfig
diff --git a/src/ec/Makefile.inc b/src/ec/Makefile.inc
new file mode 100644 (file)
index 0000000..20d71ab
--- /dev/null
@@ -0,0 +1 @@
+subdirs-y += acpi
diff --git a/src/ec/acpi/Kconfig b/src/ec/acpi/Kconfig
new file mode 100644 (file)
index 0000000..642f178
--- /dev/null
@@ -0,0 +1,4 @@
+config EC_ACPI
+       bool
+       help
+       ACPI Embedded Controller interface. Mostly found in laptops.
diff --git a/src/ec/acpi/Makefile.inc b/src/ec/acpi/Makefile.inc
new file mode 100644 (file)
index 0000000..34c5136
--- /dev/null
@@ -0,0 +1,2 @@
+ramstage-y += ec.c
+smm-$(CONFIG_HAVE_SMI_HANDLER) += ec.c
diff --git a/src/ec/acpi/ec.c b/src/ec/acpi/ec.c
new file mode 100644 (file)
index 0000000..7a01b7e
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * 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 <device/device.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);
+}
+
+struct chip_operations ec_acpi_ops = {
+       CHIP_NAME("ACPI Embedded Controller")
+};
diff --git a/src/ec/acpi/ec.h b/src/ec/acpi/ec.h
new file mode 100644 (file)
index 0000000..77ee637
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * 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 _EC_ACPI_H
+#define _EC_ACPI_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 f531a511a67ace7b65cbaa0513c8c4e42e683572..e4e8292349c4cc534880951d5b75e75840b786ec 100644 (file)
@@ -27,6 +27,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy
        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 2929cbee5b30d7cc1a8aaf0857a38e2ff6cf8132..9b376c79cf9c183bdccb7afbc6617405fdca3d71 100644 (file)
@@ -135,6 +135,8 @@ chip northbridge/intel/i945
                                        end
                                        device pnp 4e.b off             # HWM
                                        end
+                                       chip ec/acpi
+                                       end
                                 end
 
                         end
diff --git a/src/mainboard/getac/p470/ec.c b/src/mainboard/getac/p470/ec.c
deleted file mode 100644 (file)
index 2fe44af..0000000
+++ /dev/null
@@ -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;
-}
-
diff --git a/src/mainboard/getac/p470/ec.h b/src/mainboard/getac/p470/ec.h
deleted file mode 100644 (file)
index 1fe21e5..0000000
+++ /dev/null
@@ -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
-
diff --git a/src/mainboard/getac/p470/ec_oem.c b/src/mainboard/getac/p470/ec_oem.c
new file mode 100644 (file)
index 0000000..30d4135
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * 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/acpi/ec.h>
+#include "ec_oem.h"
+
+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;
+}
+
diff --git a/src/mainboard/getac/p470/ec_oem.h b/src/mainboard/getac/p470/ec_oem.h
new file mode 100644 (file)
index 0000000..14f7484
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * 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_OEM_H
+#define _MAINBOARD_EC_OEM_H
+
+#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_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 a861f43855da8fc275a11951c2ac62822690fd68..8f8a39544c0cf0cd67a2b854a18b86a1cdb97d19 100644 (file)
@@ -28,7 +28,7 @@
 #include "chip.h"
 #include "hda_verb.h"
 
-#include "ec.c"
+#include "ec_oem.c"
 
 #define MAX_LCD_BRIGHTNESS     0xd8
 
index 47dd3bce85ce6ef13ad8326a021a8dca0c9cbf9f..d29fe587c8ac69bddb13a5f69d32a752f1755403 100644 (file)
@@ -25,7 +25,8 @@
 #include <cpu/x86/smm.h>
 #include "southbridge/intel/i82801gx/i82801gx.h"
 #include "southbridge/intel/i82801gx/nvs.h"
-#include "ec.c"
+#include <ec/acpi/ec.h>
+#include "ec_oem.c"
 
 #define MAX_LCD_BRIGHTNESS 0xd8
 
index e36824cce1c73ea52cd1e66f6901b3433060bc46..549654ad8e25da61dba06f995ea2cab0eb56390d 100644 (file)
@@ -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 a139e25966224b396d162b894c85cb7fc33a5f9e..a71333117208c51d2e2c81e3a404668024388450 100644 (file)
@@ -106,6 +106,8 @@ chip northbridge/intel/i945
                                        device pnp ff.1 on # dummy address
                                        end
                                end
+                               chip ec/acpi
+                               end
 
                         end
                        #device pci 1f.1 off end # IDE
diff --git a/src/mainboard/roda/rk886ex/ec.c b/src/mainboard/roda/rk886ex/ec.c
deleted file mode 100644 (file)
index 4c39a84..0000000
+++ /dev/null
@@ -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);
-}
-
diff --git a/src/mainboard/roda/rk886ex/ec.h b/src/mainboard/roda/rk886ex/ec.h
deleted file mode 100644 (file)
index 49b7491..0000000
+++ /dev/null
@@ -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 5173ecfd391d65e995e5d7ce11b72b35ce3c7463..29d12bca99f7b7e75467e6ee115bcbdb46c3a235 100644 (file)
@@ -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 f444e0aad7b9629c811a30a4213412dcf369b05f..2c5b5e3d7130826d221c2d15b1fbd8fe29ad6102 100644 (file)
@@ -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