Created attachment 190344 [details]
Get the timebase from the proper OF field.
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:
gcc version 4.2.1 20070831 patched [FreeBSD]
WARNING: WITNESS option enabled, expect reduced performance.
WARNING: Running on a broken hypervisor that does not support mandatory H_CLEAR_MOD and H_CLEAR_REF hypercalls. Performance will be suboptimal.
VT: init without driver.
get-property for timebase-frequency on zero phandle
panic: Unable to determine timebase frequency!
cpuid = 0
time = 1
KDB: stack backtrace:
0xc000000000008510: at .kdb_backtrace+0x5c
0xc000000000008640: at .vpanic+0x1a4
0xc000000000008700: at .panic+0x38
0xc000000000008790: at .chrp_timebase_freq+0x44
0xc000000000008820: at .platform_timebase_freq+0x78
0xc0000000000088b0: at .decr_init+0x54
0xc000000000008980: at .cpu_startup+0x20
0xc000000000008a10: at .mi_startup+0x11c
0xc000000000008aa0: at btext+0xb4
KDB: enter: panic
With the change above, cpuref->cr_hwref does not contain the phandle anymore, thus, it never reads the proper CPU entry in OF.
Please find the patch that fix this issue attached.
I also created a diff at phabricator. Since this is my first time using this system, it might not be in the appropriate format:
The fix seems present in all supported branches.