On Jan 7, 2008 3:57 PM, Marc Jones marc.jones@amd.com wrote:
The hlt is really the right thing to do and I would rather it be in
there. Correctly behaving jtag should be able to handle it. I understand
clearing the fifo so do it before the hlt.
OK. How about we do a bunch of outs and a hlt().
I'll ack any patch you want to make.
ron
--
Marc Jones
Senior Firmware Engineer
(970) 226-9684 Office
mailto:Marc.Jones@amd.com
http://www.amd.com/embeddedprocessors
Add hlt() back into the die() function and update the comments.
Signed-off-by: Marc Jones
marc.jones@amd.com
Index: LinuxBIOSv3/lib/console.c
===================================================================
--- LinuxBIOSv3.orig/lib/console.c 2008-01-08 16:32:28.000000000 -0700
+++ LinuxBIOSv3/lib/console.c 2008-01-08 16:48:52.000000000 -0700
@@ -83,30 +83,37 @@
}
/**
- * 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();
+ }
}