Index: sys/arch/sparc/include/promlib.h =================================================================== RCS file: /cvsroot/src/sys/arch/sparc/include/promlib.h,v retrieving revision 1.24 diff -u -r1.24 promlib.h --- sys/arch/sparc/include/promlib.h 21 Jan 2010 11:40:01 -0000 1.24 +++ sys/arch/sparc/include/promlib.h 8 Sep 2017 18:46:00 -0000 @@ -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 *, ...); Index: sys/arch/sparc/sparc/promlib.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc/sparc/promlib.c,v retrieving revision 1.45 diff -u -r1.45 promlib.c --- sys/arch/sparc/sparc/promlib.c 1 Apr 2016 20:21:45 -0000 1.45 +++ sys/arch/sparc/sparc/promlib.c 8 Sep 2017 18:46:00 -0000 @@ -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 (*uint64p); +} + +/* * Node Name Matching per IEEE 1275, section 4.3.6. */ static int Index: sys/arch/sparc64/include/autoconf.h =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/include/autoconf.h,v retrieving revision 1.32 diff -u -r1.32 autoconf.h --- sys/arch/sparc64/include/autoconf.h 26 Oct 2013 18:47:27 -0000 1.32 +++ sys/arch/sparc64/include/autoconf.h 8 Sep 2017 18:46:00 -0000 @@ -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 *); Index: sys/arch/sparc64/sparc64/autoconf.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/autoconf.c,v retrieving revision 1.211 diff -u -r1.211 autoconf.c --- sys/arch/sparc64/sparc64/autoconf.c 26 Mar 2017 12:59:29 -0000 1.211 +++ sys/arch/sparc64/sparc64/autoconf.c 8 Sep 2017 18:46:00 -0000 @@ -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; } Index: sys/arch/sparc64/sparc64/cpu.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/cpu.c,v retrieving revision 1.131 diff -u -r1.131 cpu.c --- sys/arch/sparc64/sparc64/cpu.c 27 Aug 2017 19:31:43 -0000 1.131 +++ sys/arch/sparc64/sparc64/cpu.c 8 Sep 2017 18:46:00 -0000 @@ -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...