2000-12-14 18:59:59

by Petr Vandrovec

[permalink] [raw]
Subject: [PATCH] 2.4.0-test13-pre1 and booting on VIA based SMP

Hi Linus,
I sent this patch yesterday to linux-kernel, and as nobody answered...
I was trying to discuss it with [email protected] before, when I was tracking
problem down, but he apparently does not read this email address :-(

Could you apply this patch, either with comment, or without? Without
additional udelay(300) before first printk my GA-6VXD7 board (with
Via VT82C694X host bridge) dies in couple of spectacular ways somewhere
after first message is printed to screen, but before second one is
displayed. I asked VIA for datasheets/errata, but they did not bothered
with answer yet. But it looks like that either r-m-w in spinlock code,
or cursor postitioning code in vgacon, causes lockup. Without some HW
analyser it is hard to tell...
Thanks,
Petr Vandrovec
[email protected]

diff -urdN linux/arch/i386/kernel/smpboot.c linux/arch/i386/kernel/smpboot.c
--- linux/arch/i386/kernel/smpboot.c Mon Dec 4 01:48:19 2000
+++ linux/arch/i386/kernel/smpboot.c Thu Dec 14 17:44:26 2000
@@ -694,9 +694,21 @@
apic_write_around(APIC_ICR, APIC_DM_STARTUP
| (start_eip >> 12));

+ /*
+ * Petr Vandrovec:
+ *
+ * We must wait for at least 200us, otherwise
+ * printk kills my VT82C694X based SMP board.
+ *
+ * 100us is not enough, 200us is enough,
+ * so I use 300us for additional safety.
+ */
+
+ udelay(300);
+
Dprintk("Startup point 1.\n");

Dprintk("Waiting for send to finish...\n");
timeout = 0;
do {
Dprintk("+");