Module Name:    src
Committed By:   phx
Date:           Tue Jan 31 21:12:03 UTC 2012

Modified Files:
        src/sys/arch/sandpoint/sandpoint: mainbus.c

Log Message:
Print MPC8245 cpu speed. We can calculate it using the PLL ratio.


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/sandpoint/sandpoint/mainbus.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sandpoint/sandpoint/mainbus.c
diff -u src/sys/arch/sandpoint/sandpoint/mainbus.c:1.28 src/sys/arch/sandpoint/sandpoint/mainbus.c:1.29
--- src/sys/arch/sandpoint/sandpoint/mainbus.c:1.28	Fri Jan 27 18:53:00 2012
+++ src/sys/arch/sandpoint/sandpoint/mainbus.c	Tue Jan 31 21:12:03 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: mainbus.c,v 1.28 2012/01/27 18:53:00 para Exp $	*/
+/*	$NetBSD: mainbus.c,v 1.29 2012/01/31 21:12:03 phx Exp $	*/
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.28 2012/01/27 18:53:00 para Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.29 2012/01/31 21:12:03 phx Exp $");
 
 #include "opt_pci.h"
 #include "pci.h"
@@ -46,6 +46,8 @@ __KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 
 #include <machine/bootinfo.h>
 #include <machine/isa_machdep.h>
 
+#include <powerpc/oea/spr.h>
+
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pciconf.h>
 
@@ -150,6 +152,7 @@ cpu_match(device_t parent, cfdata_t cf, 
 
 	if (strcmp(mba->ma_name, cpu_cd.cd_name) != 0)
 		return 0;
+
 	if (cpu_info[0].ci_dev != NULL)
 		return 0;
 
@@ -159,8 +162,29 @@ cpu_match(device_t parent, cfdata_t cf, 
 void
 cpu_attach(device_t parent, device_t self, void *aux)
 {
-
-	(void)cpu_attach_common(self, 0);
+	static uint8_t mem_to_cpuclk[] = {
+		25, 30, 45, 20, 20, 00, 10, 30,
+		30, 20, 45, 30, 25, 35, 30, 35,
+		20, 25, 20, 30, 35, 40, 40, 20,
+		30, 25, 40, 30, 30, 25, 35, 00
+	};
+	extern u_long ticks_per_sec;
+	struct cpu_info *ci;
+	u_int hid1, vers;
+
+	ci = cpu_attach_common(self, 0);
+	if (ci == NULL)
+		return;
+
+	vers = (mfpvr() >> 16) & 0xffff;
+	if (ci->ci_khz == 0 && vers == MPC8245) {
+		/* calculate speed from bus clock and PLL ratio */
+		asm volatile ("mfspr %0,1009" : "=r"(hid1));
+		ci->ci_khz = ((uint64_t)ticks_per_sec * 4 *
+		    mem_to_cpuclk[hid1 >> 27] + 10) / 10000;
+		aprint_normal_dev(self, "%u.%02u MHz\n",
+		    ci->ci_khz / 1000, (ci->ci_khz / 10) % 100);
+	}
 }
 
 int

Reply via email to