Alexandru Gagniuc (mr.nuke.me(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5471
-gerrit
commit 3f20f2951295d662343476b65416b20ce75b2791
Author: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Date: Sun Apr 6 23:57:57 2014 -0500
hp/pavilion_m6_1035dx: Add basic EC initialization
The EC is now set to ACPI mode, and properly generates SCIs on
external events. This fixes the issue where battery notifications were
not working.
Change-Id: Ib6f0d23984d4ed1320340282469b8325c83547d1
Signed-off-by: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
---
src/mainboard/hp/pavilion_m6_1035dx/Makefile.inc | 1 +
src/mainboard/hp/pavilion_m6_1035dx/ec.c | 27 ++++++++++++++++++++++++
src/mainboard/hp/pavilion_m6_1035dx/ec.h | 6 ++++++
src/mainboard/hp/pavilion_m6_1035dx/mainboard.c | 4 ++++
4 files changed, 38 insertions(+)
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/Makefile.inc b/src/mainboard/hp/pavilion_m6_1035dx/Makefile.inc
index 3103f70..07ea765 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/Makefile.inc
+++ b/src/mainboard/hp/pavilion_m6_1035dx/Makefile.inc
@@ -26,3 +26,4 @@ ramstage-y += buildOpts.c
ramstage-y += agesawrapper.c
ramstage-y += BiosCallOuts.c
ramstage-y += PlatformGnbPcie.c
+ramstage-y += ec.c
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/ec.c b/src/mainboard/hp/pavilion_m6_1035dx/ec.c
new file mode 100644
index 0000000..d6d7229
--- /dev/null
+++ b/src/mainboard/hp/pavilion_m6_1035dx/ec.c
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2014 Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
+ * Subject to the GNU GPL v2, or (at your option) any later version.
+ */
+
+#include "ec.h"
+#include <ec/compal/ene932/ec.h>
+
+static void set_us_keyboard_layout(void)
+{
+ ec_kbc_write_cmd(0x59);
+ ec_kbc_write_ib(0xE5);
+}
+
+/* Tell EC to operate in ACPI mode, thus generating SCIs on events, not SMIs */
+static void enter_acpi_mode(void)
+{
+ ec_kbc_write_cmd(0x59);
+ ec_kbc_write_ib(0xE8);
+}
+
+void pavilion_m6_1035dx_ec_init(void)
+{
+ set_us_keyboard_layout();
+ /* This could also be done in an SMI, should we decide to use SMM */
+ enter_acpi_mode();
+}
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/ec.h b/src/mainboard/hp/pavilion_m6_1035dx/ec.h
new file mode 100644
index 0000000..672141d
--- /dev/null
+++ b/src/mainboard/hp/pavilion_m6_1035dx/ec.h
@@ -0,0 +1,6 @@
+/*
+ * Copyright (C) 2014 Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
+ * Subject to the GNU GPL v2, or (at your option) any later version.
+ */
+
+void pavilion_m6_1035dx_ec_init(void);
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/mainboard.c b/src/mainboard/hp/pavilion_m6_1035dx/mainboard.c
index 5ac478f..2e2b72b 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/mainboard.c
+++ b/src/mainboard/hp/pavilion_m6_1035dx/mainboard.c
@@ -19,6 +19,7 @@
#include "agesawrapper.h"
#include "BiosCallOuts.h"
+#include "ec.h"
#include <arch/acpi.h>
#include <arch/io.h>
@@ -35,6 +36,9 @@
static void mainboard_enable(device_t dev)
{
printk(BIOS_INFO, "Mainboard " CONFIG_MAINBOARD_PART_NUMBER " Enable.\n");
+
+ pavilion_m6_1035dx_ec_init();
+
/*
* The mainboard is the first place that we get control in ramstage. Check
* for S3 resume and call the approriate AGESA/CIMx resume functions.
Alexandru Gagniuc (mr.nuke.me(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5445
-gerrit
commit 21a394c1782019c5f2d75152703a967d70e48505
Author: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Date: Mon Mar 31 16:17:54 2014 -0500
hp/pavilion_m6_1035dx: Add ACPI support for reading battery level
Hook in the EC ASL code. This provides just enough information for the
OS to be able to read the battery information.
EC notifications (_Qxx) do not yet work, and it is unclear if the
issue is in the ACPI code, or if the EC is not set up properly. Thus,
the OS must boot with the battery inserted in order to be able to read
its status.
The _L03 ACPI method is also removed, as the EC SCI uses this event.
Change-Id: I85cbaeb9c77e60bd1c68d928412f897de50c6329
Signed-off-by: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
---
src/mainboard/hp/pavilion_m6_1035dx/acpi/ec.asl | 14 ++++++++++++++
src/mainboard/hp/pavilion_m6_1035dx/acpi/gpe.asl | 6 ------
.../hp/pavilion_m6_1035dx/acpi/mainboard.asl | 19 +++++++++++++++++++
src/mainboard/hp/pavilion_m6_1035dx/dsdt.asl | 4 ++++
4 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/acpi/ec.asl b/src/mainboard/hp/pavilion_m6_1035dx/acpi/ec.asl
new file mode 100644
index 0000000..e0d92fa
--- /dev/null
+++ b/src/mainboard/hp/pavilion_m6_1035dx/acpi/ec.asl
@@ -0,0 +1,14 @@
+/*
+ * Copyright (C) 2014 Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
+ * Subject to the GNU GPL v2, or (at your option) any later version.
+ */
+
+/*
+ * EC bits specific to the mainboard
+ */
+#define EC_SCI 3
+/* TODO: We do not yet know how the LID is connected to the platform */
+#define EC_ACPI_LID_SWITCH_OBJECT Zero
+
+/* ACPI code for EC functions */
+#include <ec/compal/ene932/acpi/ec.asl>
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/acpi/gpe.asl b/src/mainboard/hp/pavilion_m6_1035dx/acpi/gpe.asl
index 40a19d4..a240308 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/acpi/gpe.asl
+++ b/src/mainboard/hp/pavilion_m6_1035dx/acpi/gpe.asl
@@ -19,12 +19,6 @@
Scope(\_GPE) { /* Start Scope GPE */
- /* General event 3 */
- Method(_L03) {
- /* DBGO("\\_GPE\\_L00\n") */
- Notify(\_SB.PCI0.PWRB, 0x02) /* NOTIFY_DEVICE_WAKE */
- }
-
/* Legacy PM event */
Method(_L08) {
/* DBGO("\\_GPE\\_L08\n") */
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
index 040f069..0ddb038 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
+++ b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
@@ -35,9 +35,28 @@
Name(OSV, Ones) /* Assume nothing */
Name(PMOD, One) /* Assume APIC */
+ /* Variables used by EC */
+ /* TODO: These may belong in global non-volatile storage */
+ Name(PWRS, Zero)
+ Name(LIDS, Zero)
+
/* AcpiGpe0Blk */
OperationRegion(GP0B, SystemMemory, 0xfed80814, 0x04)
Field(GP0B, ByteAcc, NoLock, Preserve) {
, 11,
USBS, 1,
}
+
+ /*
+ * Used by EC code on certain events
+ *
+ * From ec/compal/ene932/acpi/ec.asl:
+ * The mainboard must define a PNOT method to handle power state
+ * notifications and Notify CPU device objects to re-evaluate their
+ * _PPC and _CST tables.
+ */
+ Method (PNOT)
+ {
+ Store("Received PNOT call (probably from EC)", Debug)
+ /* TODO: Implement this */
+ }
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/dsdt.asl b/src/mainboard/hp/pavilion_m6_1035dx/dsdt.asl
index ef2ae6f..c1f1933 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/dsdt.asl
+++ b/src/mainboard/hp/pavilion_m6_1035dx/dsdt.asl
@@ -69,6 +69,10 @@ DefinitionBlock (
} /* End Scope(_SB) */
+ Scope(\_SB.PCI0.LIBR) {
+ #include "acpi/ec.asl"
+ }
+
/* Describe SMBUS for the Southbridge */
#include <southbridge/amd/agesa/hudson/acpi/smbus.asl>
Alexandru Gagniuc (mr.nuke.me(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5463
-gerrit
commit acc5815fa151c1e15dbea04459ee73d8aaa678d5
Author: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Date: Sat Apr 5 19:02:28 2014 -0500
hp/pavilion_m6_1035dx: Declare GPIO control block in ACPI
Only the WLAN control pin and the lid switch input are declared, as
those are the only pins whose function is known and tested.
Change-Id: Ia5871882884ba9bb6d63418b34e33f92ead669eb
Signed-off-by: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
---
src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
index 0ddb038..5c8fc67 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
+++ b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
@@ -47,6 +47,17 @@
USBS, 1,
}
+ /* GPIO control block -- hardcoded to 0xfed80100 by AGESA */
+ OperationRegion (GPIO, SystemMemory, 0xfed80100, 0x100)
+ Field (GPIO, ByteAcc, NoLock, Preserve) {
+ Offset (0x39),
+ , 6,
+ GP57, 1, /* out: WLAN control (rf-kill) */
+ Offset (0x76),
+ , 7,
+ GE22, 1, /* General event 22 - connected to lid switch */
+ }
+
/*
* Used by EC code on certain events
*
Alexandru Gagniuc (mr.nuke.me(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5464
-gerrit
commit 7c08ca307a6cf8aeafc850acf16bd2dcf73f0fb9
Author: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
Date: Sat Apr 5 19:26:56 2014 -0500
hp/pavilion_m6_1035dx: Add ACPI support for lid switch
This is sufficient to at least allow linux to recognize the lid switch
and read its state correctly.
Change-Id: Id5bd92466c72559f263c7ca8d23cbc741377a762
Signed-off-by: Alexandru Gagniuc <mr.nuke.me(a)gmail.com>
---
src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
index 5c8fc67..47d7872 100644
--- a/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
+++ b/src/mainboard/hp/pavilion_m6_1035dx/acpi/mainboard.asl
@@ -71,3 +71,15 @@
Store("Received PNOT call (probably from EC)", Debug)
/* TODO: Implement this */
}
+
+Scope (\_SB) {
+ Device (LID0)
+ {
+ Name(_HID, EisaId("PNP0C0D"))
+ Method(_LID, 0)
+ {
+ Store (GE22, \LIDS)
+ Return (\LIDS)
+ }
+ }
+}
Kyösti Mälkki (kyosti.malkki(a)gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/5338
-gerrit
commit 47f76914b25f07c03d5ca97561b3f75cc92c157e
Author: Kyösti Mälkki <kyosti.malkki(a)gmail.com>
Date: Thu Feb 27 19:30:18 2014 +0200
console: Use romstage code for ramstage and SMM
Console is arch-agnostic and there is no need for separate
implementations for romstage and ramstage.
For SMM there is console only if DEBUG_SMI is selected.
Change-Id: I7028eeeff8bfbb9c8552972436b29a7508834d87
Signed-off-by: Kyösti Mälkki <kyosti.malkki(a)gmail.com>
---
src/arch/armv7/Makefile.inc | 2 --
src/arch/armv7/early_console.c | 40 --------------------------
src/arch/x86/lib/Makefile.inc | 1 -
src/arch/x86/lib/romcc_console.c | 26 +++--------------
src/arch/x86/lib/romstage_console.c | 57 -------------------------------------
src/console/Makefile.inc | 3 +-
src/console/console.c | 39 +++++++++++++++++++++----
src/console/init.c | 3 +-
src/console/printk.c | 1 +
src/cpu/x86/smm/Makefile.inc | 2 --
src/cpu/x86/smm/smiutil.c | 47 ------------------------------
src/include/console/console.h | 6 ++--
src/include/console/streams.h | 25 ++++++++++++++++
13 files changed, 70 insertions(+), 182 deletions(-)
diff --git a/src/arch/armv7/Makefile.inc b/src/arch/armv7/Makefile.inc
index dfd5164..f0adc0a 100644
--- a/src/arch/armv7/Makefile.inc
+++ b/src/arch/armv7/Makefile.inc
@@ -163,12 +163,10 @@ $(obj)/mainboard/$(MAINBOARDDIR)/romstage.pre.inc: $(src)/mainboard/$(MAINBOARDD
ramstage-y += exception.c
ramstage-y += exception_asm.S
-bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += early_console.c
bootblock-y += cache.c
romstage-y += cache.c
romstage-y += div0.c
-romstage-$(CONFIG_EARLY_CONSOLE) += early_console.c
ramstage-y += div0.c
#ramstage-y += interrupts.c
diff --git a/src/arch/armv7/early_console.c b/src/arch/armv7/early_console.c
deleted file mode 100644
index 599cbc7..0000000
--- a/src/arch/armv7/early_console.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * 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 <console/cbmem_console.h>
-#include <console/uart.h>
-
-/* FIXME: need to make console driver more generic */
-void console_tx_byte(unsigned char byte)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_byte(byte);
-#endif
-#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__)
- cbmemc_tx_byte(byte);
-#endif
-}
-
-void console_tx_flush(void)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_flush();
-#endif
-}
diff --git a/src/arch/x86/lib/Makefile.inc b/src/arch/x86/lib/Makefile.inc
index c173011..8b7418b 100644
--- a/src/arch/x86/lib/Makefile.inc
+++ b/src/arch/x86/lib/Makefile.inc
@@ -12,7 +12,6 @@ ramstage-y += rom_media.c
ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
ramstage-$(CONFIG_COOP_MULTITASKING) += thread_switch.S
-romstage-$(CONFIG_EARLY_CONSOLE) += romstage_console.c
romstage-y += cbfs_and_run.c
romstage-y += memset.c
romstage-y += memcpy.c
diff --git a/src/arch/x86/lib/romcc_console.c b/src/arch/x86/lib/romcc_console.c
index 0557a52..454e0bc 100644
--- a/src/arch/x86/lib/romcc_console.c
+++ b/src/arch/x86/lib/romcc_console.c
@@ -17,8 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <console/uart.h>
-#include <console/ne2k.h>
+#include <console/streams.h>
/* While in romstage, console loglevel is built-time constant. */
#define console_log_level(msg_level) (CONFIG_DEFAULT_CONSOLE_LOGLEVEL >= msg_level)
@@ -31,25 +30,9 @@
#include "drivers/net/ne2k.c"
#endif
-static void __console_tx_byte(unsigned char byte)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_byte(byte);
-#endif
-#if CONFIG_CONSOLE_NE2K
- ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT);
-#endif
-}
-
-static void __console_tx_flush(void)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_flush();
-#endif
-#if CONFIG_CONSOLE_NE2K
- ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT);
-#endif
-}
+#include <console/console.c>
+#define __console_tx_byte console_tx_byte
+#define __console_tx_flush console_tx_flush
static void __console_tx_nibble(unsigned nibble)
{
@@ -118,7 +101,6 @@ static void __console_tx_string(int loglevel, const char *str)
}
/* if included by romcc, include the sources, too. romcc can't use prototypes */
-#include <console/console.c>
#include <console/init.c>
#include <console/post.c>
#include <console/die.c>
diff --git a/src/arch/x86/lib/romstage_console.c b/src/arch/x86/lib/romstage_console.c
deleted file mode 100644
index 58742a2..0000000
--- a/src/arch/x86/lib/romstage_console.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * 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 <console/cbmem_console.h>
-#include <console/uart.h>
-#include <console/usb.h>
-#include <console/ne2k.h>
-#include <console/spkmodem.h>
-
-void console_tx_byte(unsigned char byte)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_byte(byte);
-#endif
-#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
- usb_tx_byte(0, byte);
-#endif
-#if CONFIG_CONSOLE_NE2K
- ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT);
-#endif
-#if CONFIG_CONSOLE_CBMEM && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__))
- cbmemc_tx_byte(byte);
-#endif
-#if CONFIG_SPKMODEM
- spkmodem_tx_byte(byte);
-#endif
-}
-
-void console_tx_flush(void)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_flush();
-#endif
-#if CONFIG_CONSOLE_NE2K
- ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT);
-#endif
-#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
- usb_tx_flush(0);
-#endif
-}
diff --git a/src/console/Makefile.inc b/src/console/Makefile.inc
index d59e44e..e3b3780 100644
--- a/src/console/Makefile.inc
+++ b/src/console/Makefile.inc
@@ -3,7 +3,7 @@ ramstage-y += init.c console.c
ramstage-y += post.c
ramstage-y += die.c
-smm-$(CONFIG_DEBUG_SMI) += vtxprintf.c printk.c
+smm-$(CONFIG_DEBUG_SMI) += init.c console.c vtxprintf.c printk.c
smm-$(CONFIG_SMM_TSEG) += die.c
romstage-$(CONFIG_EARLY_CONSOLE) += vtxprintf.c printk.c
@@ -15,6 +15,7 @@ bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += vtxprintf.c printk.c
bootblock-$(CONFIG_BOOTBLOCK_CONSOLE) += init.c console.c
bootblock-y += die.c
+$(obj)/console/init.smm.o : $(obj)/build.h
$(obj)/console/init.ramstage.o : $(obj)/build.h
$(obj)/console/init.romstage.o : $(obj)/build.h
$(obj)/console/init.bootblock.o : $(obj)/build.h
diff --git a/src/console/console.c b/src/console/console.c
index 2f4eb5c..e0e505c 100644
--- a/src/console/console.c
+++ b/src/console/console.c
@@ -17,12 +17,13 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <console/console.h>
+#include <console/streams.h>
#include <console/cbmem_console.h>
#include <console/uart.h>
#include <console/usb.h>
#include <console/ne2k.h>
#include <console/spkmodem.h>
+#include <console/qemu_debugcon.h>
void console_hw_init(void)
{
@@ -32,23 +33,51 @@ void console_hw_init(void)
#if CONFIG_CONSOLE_NE2K
ne2k_init(CONFIG_CONSOLE_NE2K_IO_PORT);
#endif
-#if CONFIG_CONSOLE_CBMEM && CONFIG_EARLY_CBMEM_INIT && !defined(__BOOT_BLOCK__)
+#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__))
cbmemc_init();
#endif
#if CONFIG_SPKMODEM
spkmodem_init();
#endif
-#if CONFIG_CONSOLE_USB && CONFIG_USBDEBUG_IN_ROMSTAGE && !defined(__BOOT_BLOCK__)
+#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
usbdebug_init();
#endif
+#if CONFIG_CONSOLE_QEMU_DEBUGCON
+ qemu_debugcon_init();
+#endif
}
-#ifndef __PRE_RAM__
void console_tx_byte(unsigned char byte)
{
+#if CONFIG_CONSOLE_SERIAL
+ uart_tx_byte(byte);
+#endif
+#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
+ usb_tx_byte(0, byte);
+#endif
+#if CONFIG_CONSOLE_NE2K
+ ne2k_append_data_byte(byte, CONFIG_CONSOLE_NE2K_IO_PORT);
+#endif
+#if CONFIG_CONSOLE_CBMEM && !defined(__BOOT_BLOCK__) && (CONFIG_EARLY_CBMEM_INIT || !defined(__PRE_RAM__))
+ cbmemc_tx_byte(byte);
+#endif
+#if CONFIG_SPKMODEM
+ spkmodem_tx_byte(byte);
+#endif
+#if CONFIG_CONSOLE_QEMU_DEBUGCON
+ qemu_debugcon_tx_byte(byte);
+#endif
}
void console_tx_flush(void)
{
-}
+#if CONFIG_CONSOLE_SERIAL
+ uart_tx_flush();
#endif
+#if CONFIG_CONSOLE_NE2K
+ ne2k_transmit(CONFIG_CONSOLE_NE2K_IO_PORT);
+#endif
+#if CONFIG_CONSOLE_USB && (CONFIG_USBDEBUG_IN_ROMSTAGE || !defined(__PRE_RAM__))
+ usb_tx_flush(0);
+#endif
+}
diff --git a/src/console/init.c b/src/console/init.c
index d7c8cc3..8bdb2cc 100644
--- a/src/console/init.c
+++ b/src/console/init.c
@@ -22,6 +22,7 @@
#include <build.h>
#include <console/console.h>
#include <console/uart.h>
+#include <console/streams.h>
#include <option.h>
#if CONFIG_EARLY_PCI_BRIDGE
@@ -46,7 +47,7 @@ void console_init(void)
console_loglevel=CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
#endif
-#if CONFIG_EARLY_PCI_BRIDGE
+#if CONFIG_EARLY_PCI_BRIDGE && !defined(__SMM__)
pci_early_bridge_init();
#endif
diff --git a/src/console/printk.c b/src/console/printk.c
index 2fa160b..40ea404 100644
--- a/src/console/printk.c
+++ b/src/console/printk.c
@@ -10,6 +10,7 @@
#include <smp/spinlock.h>
#include <console/vtxprintf.h>
#include <console/console.h>
+#include <console/streams.h>
#include <trace.h>
DECLARE_SPIN_LOCK(console_lock)
diff --git a/src/cpu/x86/smm/Makefile.inc b/src/cpu/x86/smm/Makefile.inc
index bb9c11d..9720630 100644
--- a/src/cpu/x86/smm/Makefile.inc
+++ b/src/cpu/x86/smm/Makefile.inc
@@ -22,7 +22,6 @@ ramstage-$(CONFIG_BACKUP_DEFAULT_SMM_REGION) += backup_default_smm.c
ifeq ($(CONFIG_SMM_MODULES),y)
smmstub-y += smm_stub.S
-smm-y += smiutil.c
smm-y += smm_module_handler.c
ramstage-y += smm_module_loader.c
@@ -79,7 +78,6 @@ SMM_LDSCRIPT := smm.ld
endif
smm-y += smihandler.c
-smm-y += smiutil.c
$(obj)/cpu/x86/smm/smm.o: $$(smm-objs) $(LIBGCC_FILE_NAME)
$(CC) $(LDFLAGS) -nostdlib -r -o $@ -Wl,--wrap,__divdi3 -Wl,--wrap,__udivdi3 -Wl,--wrap,__moddi3 -Wl,--wrap,__umoddi3 -Wl,--start-group $(smm-objs) $(LIBGCC_FILE_NAME) -Wl,--end-group
diff --git a/src/cpu/x86/smm/smiutil.c b/src/cpu/x86/smm/smiutil.c
deleted file mode 100644
index 644cab7..0000000
--- a/src/cpu/x86/smm/smiutil.c
+++ /dev/null
@@ -1,47 +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 <console/uart.h>
-
-#if CONFIG_DEBUG_SMI
-void console_tx_flush(void)
-{
-}
-
-void console_tx_byte(unsigned char byte)
-{
-#if CONFIG_CONSOLE_SERIAL
- uart_tx_byte(byte);
-#endif
-}
-#endif
-
-void console_init(void)
-{
-#if CONFIG_DEBUG_SMI
- console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
-#if CONFIG_CONSOLE_SERIAL
- uart_init();
-#endif
-#endif
-}
-
diff --git a/src/include/console/console.h b/src/include/console/console.h
index 0ebd1b7..54e4545 100644
--- a/src/include/console/console.h
+++ b/src/include/console/console.h
@@ -26,10 +26,6 @@
#ifndef __ROMCC__
int console_log_level(int msg_level);
-void console_init(void);
-void console_hw_init(void);
-void console_tx_byte(unsigned char byte);
-void console_tx_flush(void);
void post_code(u8 value);
#if CONFIG_CMOS_POST_EXTRA
void post_log_extra(u32 value);
@@ -52,9 +48,11 @@ void __attribute__ ((noreturn)) die(const char *msg);
/* Do nothing. */
static inline void printk(int LEVEL, const char *fmt, ...) {}
static inline void do_putchar(unsigned char byte) {}
+static inline void console_init(void) {}
#else
+void console_init(void);
int do_printk(int msg_level, const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void do_putchar(unsigned char byte);
diff --git a/src/include/console/streams.h b/src/include/console/streams.h
new file mode 100644
index 0000000..288fade
--- /dev/null
+++ b/src/include/console/streams.h
@@ -0,0 +1,25 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * 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 _CONSOLE_STREAMS_H_
+#define _CONSOLE_STREAMS_H_
+
+void console_hw_init(void);
+void console_tx_byte(unsigned char byte);
+void console_tx_flush(void);
+
+#endif /* _CONSOLE_STREAMS_H_ */