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!");
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to