Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch sun4v: Update code to retrieve CPU clock frequency ...



details:   https://anonhg.NetBSD.org/src/rev/d6c173094172
branches:  trunk
changeset: 356243:d6c173094172
user:      palle <palle%NetBSD.org@localhost>
date:      Mon Sep 11 19:25:07 2017 +0000

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

diffstat:

 sys/arch/sparc/include/promlib.h    |   3 ++-
 sys/arch/sparc/sparc/promlib.c      |  20 ++++++++++++++++++--
 sys/arch/sparc64/include/autoconf.h |   4 ++--
 sys/arch/sparc64/sparc64/autoconf.c |  10 +++++-----
 sys/arch/sparc64/sparc64/cpu.c      |  10 ++++++----
 5 files changed, 33 insertions(+), 14 deletions(-)

diffs (152 lines):

diff -r 98e6f2acbdfd -r d6c173094172 sys/arch/sparc/include/promlib.h
--- a/sys/arch/sparc/include/promlib.h  Mon Sep 11 15:24:28 2017 +0000
+++ b/sys/arch/sparc/include/promlib.h  Mon Sep 11 19:25:07 2017 +0000
@@ -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 @@
 /* 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 *, ...);
diff -r 98e6f2acbdfd -r d6c173094172 sys/arch/sparc/sparc/promlib.c
--- a/sys/arch/sparc/sparc/promlib.c    Mon Sep 11 15:24:28 2017 +0000
+++ b/sys/arch/sparc/sparc/promlib.c    Mon Sep 11 19:25:07 2017 +0000
@@ -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 @@
 }
 
 /*
+ * 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
diff -r 98e6f2acbdfd -r d6c173094172 sys/arch/sparc64/include/autoconf.h
--- a/sys/arch/sparc64/include/autoconf.h       Mon Sep 11 15:24:28 2017 +0000
+++ b/sys/arch/sparc64/include/autoconf.h       Mon Sep 11 19:25:07 2017 +0000
@@ -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 @@
  * `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 *);
diff -r 98e6f2acbdfd -r d6c173094172 sys/arch/sparc64/sparc64/autoconf.c
--- a/sys/arch/sparc64/sparc64/autoconf.c       Mon Sep 11 15:24:28 2017 +0000
+++ b/sys/arch/sparc64/sparc64/autoconf.c       Mon Sep 11 19:25:07 2017 +0000
@@ -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 @@
 }
 
 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;
 }
 
diff -r 98e6f2acbdfd -r d6c173094172 sys/arch/sparc64/sparc64/cpu.c
--- a/sys/arch/sparc64/sparc64/cpu.c    Mon Sep 11 15:24:28 2017 +0000
+++ b/sys/arch/sparc64/sparc64/cpu.c    Mon Sep 11 19:25:07 2017 +0000
@@ -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 @@
 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 @@
                             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...



Home | Main Index | Thread Index | Old Index