Module Name:    src
Committed By:   palle
Date:           Mon Sep 11 19:25:07 UTC 2017

Modified Files:
        src/sys/arch/sparc/include: promlib.h
        src/sys/arch/sparc/sparc: promlib.c
        src/sys/arch/sparc64/include: autoconf.h
        src/sys/arch/sparc64/sparc64: autoconf.c cpu.c

Log Message:
sun4v: Update code to retrieve CPU clock frequency so it can handle (future?) 
CPU clock frequencies above the 32-bit limit. ok mrg@


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/sparc/include/promlib.h
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/sparc/sparc/promlib.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/sparc64/include/autoconf.h
cvs rdiff -u -r1.211 -r1.212 src/sys/arch/sparc64/sparc64/autoconf.c
cvs rdiff -u -r1.131 -r1.132 src/sys/arch/sparc64/sparc64/cpu.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/sparc/include/promlib.h
diff -u src/sys/arch/sparc/include/promlib.h:1.24 src/sys/arch/sparc/include/promlib.h:1.25
--- src/sys/arch/sparc/include/promlib.h:1.24	Thu Jan 21 11:40:01 2010
+++ src/sys/arch/sparc/include/promlib.h	Mon Sep 11 19:25:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: promlib.h,v 1.24 2010/01/21 11:40:01 martin Exp $ */
+/*	$NetBSD: promlib.h,v 1.25 2017/09/11 19:25:07 palle Exp $ */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -137,6 +137,7 @@ void	prom_init(void);	/* To setup promop
 /* Utility routines */
 int	prom_getprop(int, const char *, size_t, int *, void *);
 int	prom_getpropint(int, const char *, int);
+uint64_t prom_getpropuint64(int, const char *, uint64_t);
 char	*prom_getpropstring(int, const char *);
 char	*prom_getpropstringA(int, const char *, char *, size_t);
 void	prom_printf(const char *, ...);

Index: src/sys/arch/sparc/sparc/promlib.c
diff -u src/sys/arch/sparc/sparc/promlib.c:1.45 src/sys/arch/sparc/sparc/promlib.c:1.46
--- src/sys/arch/sparc/sparc/promlib.c:1.45	Fri Apr  1 20:21:45 2016
+++ src/sys/arch/sparc/sparc/promlib.c	Mon Sep 11 19:25:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: promlib.c,v 1.45 2016/04/01 20:21:45 palle Exp $ */
+/*	$NetBSD: promlib.c,v 1.46 2017/09/11 19:25:07 palle Exp $ */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.45 2016/04/01 20:21:45 palle Exp $");
+__KERNEL_RCSID(0, "$NetBSD: promlib.c,v 1.46 2017/09/11 19:25:07 palle Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_sparc_arch.h"
@@ -265,6 +265,22 @@ prom_getpropint(int node, const char *na
 }
 
 /*
+ * Fetch an unsigned 64-bit integer (or pointer) property.
+ * The return value is the property, or the default if there was none.
+ */
+uint64_t
+prom_getpropuint64(int node, const char *name, uint64_t deflt)
+{
+	uint64_t uint64buf, *uint64p = &uint64buf;
+	int len = 2;
+
+	if (prom_getprop(node, name, sizeof(uint64_t), &len, &uint64p) != 0)
+		return deflt;
+
+	return uint64buf;
+}
+
+/*
  * Node Name Matching per IEEE 1275, section 4.3.6.
  */
 static int

Index: src/sys/arch/sparc64/include/autoconf.h
diff -u src/sys/arch/sparc64/include/autoconf.h:1.32 src/sys/arch/sparc64/include/autoconf.h:1.33
--- src/sys/arch/sparc64/include/autoconf.h:1.32	Sat Oct 26 18:47:27 2013
+++ src/sys/arch/sparc64/include/autoconf.h	Mon Sep 11 19:25:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.h,v 1.32 2013/10/26 18:47:27 jdc Exp $ */
+/*	$NetBSD: autoconf.h,v 1.33 2017/09/11 19:25:07 palle Exp $ */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -133,7 +133,7 @@ int	matchbyname(device_t, cfdata_t, void
  * `clockfreq' produces a printable representation of a clock frequency
  * (this is just a frill).
  */
-char	*clockfreq(long);
+char	*clockfreq(uint64_t);
 
 /* Kernel initialization routine. */
 void	bootstrap(void *, void *, void *, void *, void *);

Index: src/sys/arch/sparc64/sparc64/autoconf.c
diff -u src/sys/arch/sparc64/sparc64/autoconf.c:1.211 src/sys/arch/sparc64/sparc64/autoconf.c:1.212
--- src/sys/arch/sparc64/sparc64/autoconf.c:1.211	Sun Mar 26 12:59:29 2017
+++ src/sys/arch/sparc64/sparc64/autoconf.c	Mon Sep 11 19:25:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.211 2017/03/26 12:59:29 martin Exp $ */
+/*	$NetBSD: autoconf.c,v 1.212 2017/09/11 19:25:07 palle Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.211 2017/03/26 12:59:29 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.212 2017/09/11 19:25:07 palle Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -521,16 +521,16 @@ cpu_rootconf(void)
 }
 
 char *
-clockfreq(long freq)
+clockfreq(uint64_t freq)
 {
 	static char buf[10];
 	size_t len;
 
 	freq /= 1000;
-	len = snprintf(buf, sizeof(buf), "%ld", freq / 1000);
+	len = snprintf(buf, sizeof(buf), "%" PRIu64, freq / 1000);
 	freq %= 1000;
 	if (freq)
-		snprintf(buf + len, sizeof(buf) - len, ".%03ld", freq);
+		snprintf(buf + len, sizeof(buf) - len, ".%03" PRIu64, freq);
 	return buf;
 }
 

Index: src/sys/arch/sparc64/sparc64/cpu.c
diff -u src/sys/arch/sparc64/sparc64/cpu.c:1.131 src/sys/arch/sparc64/sparc64/cpu.c:1.132
--- src/sys/arch/sparc64/sparc64/cpu.c:1.131	Sun Aug 27 19:31:43 2017
+++ src/sys/arch/sparc64/sparc64/cpu.c	Mon Sep 11 19:25:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.131 2017/08/27 19:31:43 palle Exp $ */
+/*	$NetBSD: cpu.c,v 1.132 2017/09/11 19:25:07 palle Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.131 2017/08/27 19:31:43 palle Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.132 2017/09/11 19:25:07 palle Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -421,7 +421,7 @@ void
 cpu_attach(device_t parent, device_t dev, void *aux)
 {
 	int node;
-	unsigned int clk, sclk = 0;
+	uint64_t clk, sclk = 0;
 	struct mainbus_attach_args *ma = aux;
 	struct cpu_info *ci;
 	const char *sep;
@@ -465,7 +465,9 @@ cpu_attach(device_t parent, device_t dev
 			     device_xname(dev), "timer");
 	mutex_init(&ci->ci_ctx_lock, MUTEX_SPIN, IPL_VM);
 
-	clk = prom_getpropint(node, "clock-frequency", 0);
+	clk = prom_getpropuint64(node, "clock-frequency64", 0);
+	if (clk == 0)
+	  clk = prom_getpropint(node, "clock-frequency", 0);
 	if (clk == 0) {
 		/*
 		 * Try to find it in the OpenPROM root...

Reply via email to