svn commit: r329258 - head/sys/powerpc/pseries
Justin Hibbits
jhibbits at FreeBSD.org
Wed Feb 14 02:51:28 UTC 2018
Author: jhibbits
Date: Wed Feb 14 02:51:28 2018
New Revision: 329258
URL: https://svnweb.freebsd.org/changeset/base/329258
Log:
PPC64: Get the timestap from the proper OF field
Summary:
After revision rS328534('PPC64: use hwref instead of cpuid'), FreeBSD on
powerpc64 virtual machine panics since it is unable to read the
timebase, showing the following error:
get-property for timebase-frequency on zero phandle
panic: Unable to determine timebase frequency!
With the change above, cpuref->cr_hwref does not contain the phandle
anymore, thus, it never reads the proper CPU entry in OF.
Submitted by: Breno Leitao
Differential Revision: https://reviews.freebsd.org/D14204
Modified:
head/sys/powerpc/pseries/platform_chrp.c
Modified: head/sys/powerpc/pseries/platform_chrp.c
==============================================================================
--- head/sys/powerpc/pseries/platform_chrp.c Wed Feb 14 02:48:27 2018 (r329257)
+++ head/sys/powerpc/pseries/platform_chrp.c Wed Feb 14 02:51:28 2018 (r329258)
@@ -285,12 +285,24 @@ chrp_real_maxaddr(platform_t plat)
static u_long
chrp_timebase_freq(platform_t plat, struct cpuref *cpuref)
{
- phandle_t phandle;
+ phandle_t cpus, cpunode;
int32_t ticks = -1;
+ int res;
+ char buf[8];
- phandle = cpuref->cr_hwref;
+ cpus = OF_finddevice("/cpus");
+ if (cpus <= 0)
+ panic("CPU tree not found on Open Firmware\n");
- OF_getencprop(phandle, "timebase-frequency", &ticks, sizeof(ticks));
+ for (cpunode = OF_child(cpus); cpunode != 0; cpunode = OF_peer(cpunode)) {
+ res = OF_getprop(cpunode, "device_type", buf, sizeof(buf));
+ if (res > 0 && strcmp(buf, "cpu") == 0)
+ break;
+ }
+ if (cpunode <= 0)
+ panic("CPU node not found on Open Firmware\n");
+
+ OF_getencprop(cpunode, "timebase-frequency", &ticks, sizeof(ticks));
if (ticks <= 0)
panic("Unable to determine timebase frequency!");
More information about the svn-src-all
mailing list