Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Nov 2013 21:59:04 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r258757 - head/sys/powerpc/powerpc
Message-ID:  <201311292159.rATLx4Xt029489@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Fri Nov 29 21:59:03 2013
New Revision: 258757
URL: http://svnweb.freebsd.org/changeset/base/258757

Log:
  Use the Open Firmware-based CPU frequency determination as a generic
  fallback if we can't measure CPU frequency. This is also useful on a
  variety of embedded systems using FDT.

Modified:
  head/sys/powerpc/powerpc/cpu.c

Modified: head/sys/powerpc/powerpc/cpu.c
==============================================================================
--- head/sys/powerpc/powerpc/cpu.c	Fri Nov 29 21:13:30 2013	(r258756)
+++ head/sys/powerpc/powerpc/cpu.c	Fri Nov 29 21:59:03 2013	(r258757)
@@ -276,7 +276,6 @@ cpu_est_clockrate(int cpu_id, uint64_t *
 	uint16_t	vers;
 	register_t	msr;
 	phandle_t	cpu, dev, root;
-	uint32_t	freq[2];
 	int		res  = 0;
 	char		buf[8];
 
@@ -323,13 +322,11 @@ cpu_est_clockrate(int cpu_id, uint64_t *
 			mtmsr(msr);
 			return (0);
 
-		case IBMPOWER5:
-		case IBMPOWER5PLUS:
-		case IBMPOWER6:
-		case IBMPOWER7:
-		case IBMPOWER7PLUS:
-		case IBMPOWER8:
+		default:
 			root = OF_peer(0);
+			if (root == 0)
+				return (ENXIO);
+
 			dev = OF_child(root);
 			while (dev != 0) {
 				res = OF_getprop(dev, "name", buf, sizeof(buf));
@@ -347,19 +344,17 @@ cpu_est_clockrate(int cpu_id, uint64_t *
 			}
 			if (cpu == 0)
 				return (ENOENT);
-			if (OF_getprop(cpu, "clock-frequency", &freq[0],
-					sizeof(freq[0])))
-					*cps = freq[0];
-			else if (OF_getprop(cpu, "ibm,extended-clock-frequency",
-					&freq, sizeof(freq)))
-					*cps = freq[1];
-			else
-			    *cps = 0;
-
-			return(0);		
+			if (OF_getprop(cpu, "ibm,extended-clock-frequency",
+			    cps, sizeof(*cps)) >= 0) {
+				return (0);
+			} else if (OF_getprop(cpu, "clock-frequency", cps, 
+			    sizeof(cell_t)) >= 0) {
+				*cps >>= 32;
+				return (0);
+			} else {
+				return (ENOENT);
+			}
 	}
-	
-	return (ENXIO);
 }
 
 void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311292159.rATLx4Xt029489>