Module Name: src Committed By: macallan Date: Fri Sep 22 04:45:56 UTC 2017
Modified Files: src/sys/arch/powerpc/oea: ofwoea_machdep.c Log Message: add quick path for timebase-frequency detection deal with differences in /u4 reg property encoding vs. /uni-n, so this works on my G5 now To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/arch/powerpc/oea/ofwoea_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/oea/ofwoea_machdep.c diff -u src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.40 src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.41 --- src/sys/arch/powerpc/oea/ofwoea_machdep.c:1.40 Fri Sep 15 21:27:46 2017 +++ src/sys/arch/powerpc/oea/ofwoea_machdep.c Fri Sep 22 04:45:56 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: ofwoea_machdep.c,v 1.40 2017/09/15 21:27:46 macallan Exp $ */ +/* $NetBSD: ofwoea_machdep.c,v 1.41 2017/09/22 04:45:56 macallan Exp $ */ /*- * Copyright (c) 2007 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ofwoea_machdep.c,v 1.40 2017/09/15 21:27:46 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ofwoea_machdep.c,v 1.41 2017/09/22 04:45:56 macallan Exp $"); #include "opt_ppcarch.h" #include "opt_compat_netbsd.h" @@ -309,7 +309,7 @@ ofwoea_initppc(u_int startkernel, u_int void set_timebase(void) { - int qhandle, phandle, msr, scratch; + int qhandle, phandle, msr, scratch, node; char type[32]; if (timebase_freq != 0) { @@ -317,7 +317,14 @@ set_timebase(void) goto found; } - for (qhandle = OF_peer(0); qhandle; qhandle = phandle) { + node = OF_finddevice("/cpus/@0"); + if (OF_getprop(node, "timebase-frequency", + &ticks_per_sec, sizeof ticks_per_sec) > 0) { + goto found; + } + + node = OF_finddevice("/"); + for (qhandle = node; qhandle; qhandle = phandle) { if (OF_getprop(qhandle, "device_type", type, sizeof type) > 0 && strcmp(type, "cpu") == 0 && OF_getprop(qhandle, "timebase-frequency", @@ -621,8 +628,13 @@ find_ranges(int base, rangemap_t *region break; case RANGE_TYPE_MACIO: regions[*cur].type = RANGE_MEM; - regions[*cur].size = map[1]; - regions[*cur].addr = map[0]; + if (len == 8) { + regions[*cur].size = map[1]; + regions[*cur].addr = map[0]; + } else { + regions[*cur].size = map[2]; + regions[*cur].addr = map[1]; + } (*cur)++; break; }