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