From ac309da3d9e7f9df9455507f8c66a04ed7cb6b34 Mon Sep 17 00:00:00 2001 From: Marc Jones Date: Wed, 9 Jan 2008 18:27:49 +0000 Subject: [PATCH] Add hlt() back into the die() function and update the comments. Signed-off-by: Marc Jones Acked-by: Peter Stuge git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@550 f3766cd6-281f-0410-b1cd-43a5c92072e9 --- lib/console.c | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/console.c b/lib/console.c index 442efe5fa3..72ee7a36c7 100644 --- a/lib/console.c +++ b/lib/console.c @@ -83,30 +83,37 @@ void console_init(void) } /** - * Halt and loop due to a fatal error. - * There have been several iterations of this function. + * Halt and loop due to a fatal error. + * There have been several iterations of this function. * The first simply did a hlt(). Doing a hlt() can make jtag debugging - * very difficult as one can not break into a hlt instruction on some CPUs. - * Second was to do a console_tx_byte of a NULL character. - * A number of concerns were raised about doing this idea. - * Third idea was to do an inb from port 0x80, the POST port. That design - * makes us very CPU-specific. + * very difficult as one can not break into a hlt instruction on some CPUs. + * Second was to do a console_tx_byte of a NULL character. + * A number of concerns were raised about doing this idea. + * Third idea was to do an inb from port 0x80, the POST port. That design + * makes us very CPU-specific. * The fourth idea was just POSTING the same - * code over and over. That would erase the most recent POST code, - * hindering diagnosis. + * code over and over. That would erase the most recent POST code, + * hindering diagnosis. * - * For now, for lack of a good alternative, - * we will continue to call console_tx_byte. We call with a NULL since - * it will clear any FIFOs in the path and won't clutter up the output, - * since NULL doesn't print a visible character on most terminal - * emulators. + * For now, for lack of a better alternative, + * we will call console_tx_byte ten times and then halt. + * Some CPU JTAG debbuggers might have problems but it is the right thing + * to do. We call with a NULL since it will clear any FIFOs in the path and + * won't clutter up the output, since NULL doesn't print a visible character + * on most terminal emulators. * * @param str A string to print for the error * */ void die(const char *str) { + int i; + printk(BIOS_EMERG, str); - while (1) - console_tx_byte(0, (void *)0); + + while (1) { + for (i = 0; i < 10; i++) + console_tx_byte(0, (void *)0); + hlt(); + } }