Index: boot/arch/sparc64/loader/Makefile
===================================================================
--- boot/arch/sparc64/loader/Makefile	(revision cfa70adda5479cb3ac144ad8b0e43184319bd909)
+++ boot/arch/sparc64/loader/Makefile	(revision 19dba2bf660c4ef2d48df50eeba33d3ca9a7508a)
@@ -52,4 +52,5 @@
 	main.c \
 	../../../generic/printf.c \
+	../../../generic/string.c \
 	../../../genarch/ofw.c \
 	ofwarch.c \
Index: boot/arch/sparc64/loader/main.c
===================================================================
--- boot/arch/sparc64/loader/main.c	(revision cfa70adda5479cb3ac144ad8b0e43184319bd909)
+++ boot/arch/sparc64/loader/main.c	(revision 19dba2bf660c4ef2d48df50eeba33d3ca9a7508a)
@@ -67,5 +67,9 @@
 		printf("Error: unable to get keyboard properties\n");
 
+	if (!ofw_cpu(&bootinfo.cpu))
+		printf("Error: unable to get cpu properties\n");
+
 	printf("\nDevice statistics\n");
+	printf(" cpu: %dMHz\n", bootinfo.cpu.clock_frequency/1000000);
 	printf(" memory: %dM\n", bootinfo.memmap.total>>20);
 	printf(" screen at %P, resolution %dx%d, %d bpp (scanline %d bytes)\n", (uintptr_t) bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline);
Index: boot/arch/sparc64/loader/main.h
===================================================================
--- boot/arch/sparc64/loader/main.h	(revision cfa70adda5479cb3ac144ad8b0e43184319bd909)
+++ boot/arch/sparc64/loader/main.h	(revision 19dba2bf660c4ef2d48df50eeba33d3ca9a7508a)
@@ -46,8 +46,13 @@
 
 typedef struct {
+	uint32_t clock_frequency;
+} cpu_t;
+
+typedef struct {
 	taskmap_t taskmap;
 	memmap_t memmap;
 	screen_t screen;
 	keyboard_t keyboard;
+	cpu_t cpu;
 } bootinfo_t;
 
Index: boot/arch/sparc64/loader/ofwarch.c
===================================================================
--- boot/arch/sparc64/loader/ofwarch.c	(revision cfa70adda5479cb3ac144ad8b0e43184319bd909)
+++ boot/arch/sparc64/loader/ofwarch.c	(revision 19dba2bf660c4ef2d48df50eeba33d3ca9a7508a)
@@ -35,4 +35,6 @@
 #include <ofw.h>
 #include <printf.h>
+#include <string.h>
+#include "main.h"
 
 int bpp2align[] = {
@@ -80,2 +82,30 @@
 	return true;
 }
+
+int ofw_cpu(cpu_t *cpu)
+{
+	char type_name[BUF_SIZE];
+
+	phandle node;
+	node = ofw_get_child_node(ofw_root);
+	if (node == 0 || node == -1) {
+		printf("Could not find any child nodes of the root node.\n");
+		return;
+	}
+	
+	for (; node != 0 && node != -1; node = ofw_get_peer_node(node)) {
+		if (ofw_get_property(node, "device_type", type_name, sizeof(type_name)) > 0) {
+			if (strncmp(type_name, "cpu", 3) == 0) {
+				uint32_t mhz;
+				
+				if (ofw_get_property(node, "clock-frequency", &mhz, sizeof(mhz)) <= 0)
+					continue;
+					
+				cpu->clock_frequency = mhz;
+				return 1;
+			}
+		}
+	};
+
+	return 0;
+}
Index: boot/arch/sparc64/loader/ofwarch.h
===================================================================
--- boot/arch/sparc64/loader/ofwarch.h	(revision cfa70adda5479cb3ac144ad8b0e43184319bd909)
+++ boot/arch/sparc64/loader/ofwarch.h	(revision 19dba2bf660c4ef2d48df50eeba33d3ca9a7508a)
@@ -30,4 +30,6 @@
 #define BOOT_sparc64_OFWARCH_H_
 
+#include "main.h"
+
 #define OFW_ADDRESS_CELLS	2
 #define OFW_SIZE_CELLS		2
@@ -35,3 +37,5 @@
 extern int bpp2align[];
 
+extern int ofw_cpu(cpu_t *cpu);
+
 #endif
