From owner-svn-src-head@FreeBSD.ORG Thu Nov 28 21:57:18 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 895AF8A1; Thu, 28 Nov 2013 21:57:18 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 59F41172F; Thu, 28 Nov 2013 21:57:18 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rASLvIax021402; Thu, 28 Nov 2013 21:57:18 GMT (envelope-from andreast@svn.freebsd.org) Received: (from andreast@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rASLvImF021401; Thu, 28 Nov 2013 21:57:18 GMT (envelope-from andreast@svn.freebsd.org) Message-Id: <201311282157.rASLvImF021401@svn.freebsd.org> From: Andreas Tobler Date: Thu, 28 Nov 2013 21:57:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r258722 - head/sys/powerpc/powerpc X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Nov 2013 21:57:18 -0000 Author: andreast Date: Thu Nov 28 21:57:17 2013 New Revision: 258722 URL: http://svnweb.freebsd.org/changeset/base/258722 Log: Give some output about the CPU clock on IBMPOWER machines, currently read from OF. Linux does it similar, means they also read the OF values and display them. Tested under qemu and real hardware: cpu0: IBM POWER5+ revision 2.0, 1898.10 MHz Modified: head/sys/powerpc/powerpc/cpu.c Modified: head/sys/powerpc/powerpc/cpu.c ============================================================================== --- head/sys/powerpc/powerpc/cpu.c Thu Nov 28 19:55:07 2013 (r258721) +++ head/sys/powerpc/powerpc/cpu.c Thu Nov 28 21:57:17 2013 (r258722) @@ -74,6 +74,8 @@ #include #include +#include + static void cpu_6xx_setup(int cpuid, uint16_t vers); static void cpu_970_setup(int cpuid, uint16_t vers); static void cpu_booke_setup(int cpuid, uint16_t vers); @@ -273,6 +275,10 @@ cpu_est_clockrate(int cpu_id, uint64_t * { uint16_t vers; register_t msr; + phandle_t cpu, dev, root; + uint32_t freq[2]; + int res = 0; + char buf[8]; vers = mfpvr() >> 16; msr = mfmsr(); @@ -316,6 +322,41 @@ cpu_est_clockrate(int cpu_id, uint64_t * mtmsr(msr); return (0); + + case IBMPOWER5: + case IBMPOWER5PLUS: + case IBMPOWER6: + case IBMPOWER7: + case IBMPOWER7PLUS: + case IBMPOWER8: + root = OF_peer(0); + dev = OF_child(root); + while (dev != 0) { + res = OF_getprop(dev, "name", buf, sizeof(buf)); + if (res > 0 && strcmp(buf, "cpus") == 0) + break; + dev = OF_peer(dev); + } + cpu = OF_child(dev); + while (cpu != 0) { + res = OF_getprop(cpu, "device_type", buf, + sizeof(buf)); + if (res > 0 && strcmp(buf, "cpu") == 0) + break; + cpu = OF_peer(cpu); + } + if (cpu == 0) + return (ENOENT); + if (OF_getprop(cpu, "clock-frequency", &freq[0], + sizeof(freq[0]))) + *cps = freq[0]; + else if (OF_getprop(cpu, "ibm,extended-clock-frequency", + &freq, sizeof(freq))) + *cps = freq[1]; + else + *cps = 0; + + return(0); } return (ENXIO);