[SeaBIOS] [PATCH v3] config: allow DEBUG_IO for !QEMU
Gerd Hoffmann
kraxel at redhat.com
Thu May 30 09:30:33 CEST 2013
On 05/30/13 03:34, Kevin O'Connor wrote:
> On Wed, May 29, 2013 at 04:25:59PM +0200, Gerd Hoffmann wrote:
>> Allow selecting DEBUG_IO for non-qemu configurations,
>> which is useful when running coreboot+seabios on qemu.
>
> Unfortunately, if one does run seabios on real hardware and has
> DEBUG_IO enabled, it will write to IO port 0x402 before confirming
> that it is actually running on QEMU. This could cause mysterious
> failures on real hardware if something is listening to that port.
> It's why I left the option dependent on QEMU instead of QEMU_HARDWARE.
> Ideally the code would verify it is on QEMU before using the IO port,
> while still providing the very early debugging when it is known to be
> safe.
The debgconsole port returns 0xe9 on reads, so we could use that for
probing and do something like the attached patch. Which doesn't build
for some reason. Is the F segment read-only in 16bit mode? Should I
use something else instead? Or #ifdef the SET_GLOBAL for 32bit mode,
which should work fine given that POST runs in 32bit mode?
cheers,
Gerd
-------------- next part --------------
>From ea131715b0b8f959f8f34768ef46ac029a5f84b0 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel at redhat.com>
Date: Thu, 30 May 2013 09:25:40 +0200
Subject: [PATCH] [broken] probe for debug port
Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
---
src/output.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/output.c b/src/output.c
index 79c3ada..102f177 100644
--- a/src/output.c
+++ b/src/output.c
@@ -24,6 +24,7 @@ struct putcinfo {
#define DEBUG_TIMEOUT 100000
u16 DebugOutputPort VARFSEG = 0x402;
+u8 DebugOutputEnabled VARFSEG = 0xff;
void
debug_serial_preinit(void)
@@ -77,9 +78,17 @@ putc_debug(struct putcinfo *action, char c)
{
if (! CONFIG_DEBUG_LEVEL)
return;
- if (CONFIG_DEBUG_IO)
+ if (CONFIG_DEBUG_IO) {
// Send character to debug port.
- outb(c, GET_GLOBAL(DebugOutputPort));
+ u8 enabled = GET_GLOBAL(DebugOutputEnabled);
+ if (enabled == 0xff) {
+ enabled = (inb(GET_GLOBAL(DebugOutputPort)) == 0xe9);
+ SET_GLOBAL(DebugOutputEnabled, enabled);
+ }
+ if (enabled ) {
+ outb(c, GET_GLOBAL(DebugOutputPort));
+ }
+ }
if (c == '\n')
debug_serial('\r');
debug_serial(c);
--
1.7.9.7
More information about the SeaBIOS
mailing list