This is a patch by Benjamin Herrenschmidt, I just put it here because I had to collect it from two pieces:
http://lists.debian.org/debian-powerpc/2005/03/msg00554.html http://article.gmane.org/gmane.linux.debian.ports.powerpc/27133
--- linux-work.orig/arch/ppc/platforms/pmac_cpufreq.c 2005-03-13 18:23:11.000000000 +1100 +++ linux-work/arch/ppc/platforms/pmac_cpufreq.c 2005-03-14 13:32:36.000000000 +1100 @@ -464,20 +464,22 @@ u32 *reg; struct cpufreq_driver *driver = &pmac_cpufreq_driver; - /* OF only reports the high frequency */ - hi_freq = cur_freq; - low_freq = cur_freq/2; - driver->get = dfs_get_cpu_speed; - cur_freq = driver->get(0); - + /* Look for voltage GPIO */ volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); + if (volt_gpio_np) + voltage_gpio = read_gpio(volt_gpio_np); if (!volt_gpio_np){ printk(KERN_ERR "cpufreq: missing cpu-vcore-select gpio\n"); return 1; } - reg = (u32 *)get_property(volt_gpio_np, "reg", NULL); - voltage_gpio = *reg; + /* OF only reports the high frequency */ + hi_freq = cur_freq; + low_freq = cur_freq/2; + + /* Read actual frequency from CPU */ + driver->get = dfs_get_cpu_speed; + cur_freq = driver->get(0); set_speed_proc = dfs_set_cpu_speed; return 0; @@ -492,7 +494,7 @@ * - iBook2 500/600 (PMU based, 400Mhz & 500/600Mhz) * - iBook2 700 (CPU based, 400Mhz & 700Mhz, support low voltage) * - Recent MacRISC3 laptops - * - iBook G4s and PowerBook G4s with 7447A CPUs + * - All new machines with 7447A CPUs */ static int __init pmac_cpufreq_setup(void) { @@ -513,11 +515,10 @@ goto out; cur_freq = (*value) / 1000; - /* Check for 7447A based iBook G4 or PowerBook */ - if (machine_is_compatible("PowerBook6,5") || - machine_is_compatible("PowerBook6,4") || - machine_is_compatible("PowerBook5,5") || - machine_is_compatible("PowerBook5,4")) { + /* Check for 7447A based MacRISC3 */ + if (machine_is_compatible("MacRISC3") && + get_property(cpunode, "dynamic-power-step", NULL) && + PVR_VER(mfspr(SPRN_PVR)) == 0x8003) { pmac_cpufreq_init_7447A(cpunode); /* Check for other MacRISC3 machines */ } else if (machine_is_compatible("PowerBook3,4") ||