Index: kernel/arch/sparc64/src/console.c
===================================================================
--- kernel/arch/sparc64/src/console.c	(revision f7734012de06036ce09746a385ae02920370bd87)
+++ kernel/arch/sparc64/src/console.c	(revision 3014e2b2dbd2a91eca5a7cd089b6f4e0352ffda0)
@@ -41,11 +41,4 @@
 #include <arch/drivers/sgcn.h>
 
-#ifdef CONFIG_Z8530
-#include <genarch/kbd/z8530.h>
-#endif
-#ifdef CONFIG_NS16550
-#include <genarch/kbd/ns16550.h>
-#endif
-
 #include <console/chardev.h>
 #include <console/console.h>
@@ -71,6 +64,4 @@
 {
 #ifdef CONFIG_FB
-	stdin = NULL;
-
 	ofw_tree_property_t *prop;
 	ofw_tree_node_t *screen;
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision f7734012de06036ce09746a385ae02920370bd87)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision 3014e2b2dbd2a91eca5a7cd089b6f4e0352ffda0)
@@ -35,10 +35,16 @@
 #include <arch/drivers/kbd.h>
 #include <genarch/ofw/ofw_tree.h>
+
+#ifdef CONFIG_SUN_KBD
+#include <genarch/kbrd/kbrd.h>
+#endif
 #ifdef CONFIG_Z8530
-#include <genarch/kbd/z8530.h>
+#include <genarch/drivers/z8530/z8530.h>
 #endif
 #ifdef CONFIG_NS16550
-#include <genarch/kbd/ns16550.h>
-#endif
+#include <genarch/drivers/ns16550/ns16550.h>
+#endif
+
+#include <console/console.h>
 #include <ddi/device.h>
 #include <ddi/irq.h>
@@ -160,5 +166,6 @@
 		z8530 = (z8530_t *) hw_map(aligned_addr, offset + size) +
 		    offset;
-		(void) z8530_init(z8530, devno, inr, cir, cir_arg);
+		kbrd_init(stdin);
+		(void) z8530_init(z8530, devno, inr, cir, cir_arg, &kbrdin);
 		
 		/*
@@ -180,5 +187,6 @@
 		ns16550 = (ns16550_t *) hw_map(aligned_addr, offset + size) +
 		    offset;
-		(void) ns16550_init(ns16550, devno, inr, cir, cir_arg);
+		kbrd_init(stdin);
+		(void) ns16550_init(ns16550, devno, inr, cir, cir_arg, &kbrdin);
 		
 		/*
Index: kernel/arch/sparc64/src/sparc64.c
===================================================================
--- kernel/arch/sparc64/src/sparc64.c	(revision f7734012de06036ce09746a385ae02920370bd87)
+++ kernel/arch/sparc64/src/sparc64.c	(revision 3014e2b2dbd2a91eca5a7cd089b6f4e0352ffda0)
@@ -90,6 +90,4 @@
 		 */
 		irq_init(1 << 11, 128);
-
-		standalone_sparc64_console_init();
 	}
 }
@@ -105,11 +103,12 @@
 void arch_post_smp_init(void)
 {
-	static thread_t *t = NULL;
+	if (config.cpu_active == 1) {
+		standalone_sparc64_console_init();
 
-	if (!t) {
-		/*
-	         * Create thread that polls keyboard.
-	         */
-		t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll", true);
+		/* Create thread that polls keyboard.
+		 * XXX: this is only used by sgcn now
+		 */
+		thread_t *t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll",
+		    true);
 		if (!t)
 			panic("Cannot create kkbdpoll.");
