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...