Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
On Thu, Jun 30, 2011 at 01:23:03PM -0500, kevin diggs wrote: > Hi, > > On Wed, Jun 29, 2011 at 3:58 PM, Dmitry Eremin-Solenikov > wrote: > > > > drivers/cpufreq/powerpc. However my current version (as suggested by Ben) > > goes directly to drivers/cpufreq > > > Uh ... Just curious ... why is arch specific code now being put > outside of the arch directories? When I wrote the 750GX stuff > (~2.6.28) I put in a location similar to what x86 was doing? When did > this change? last release, ARM moved their cpufreq drivers. I moved the x86 ones afterwards. There's precedent for other arch specific drivers in drivers/ too, but the cpufreq move is a recent thing. Dave ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
Hi, On Wed, Jun 29, 2011 at 3:58 PM, Dmitry Eremin-Solenikov wrote: > > drivers/cpufreq/powerpc. However my current version (as suggested by Ben) > goes directly to drivers/cpufreq > Uh ... Just curious ... why is arch specific code now being put outside of the arch directories? When I wrote the 750GX stuff (~2.6.28) I put in a location similar to what x86 was doing? When did this change? kevin ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
On Wed, Jun 29, 2011 at 10:09 PM, kevin diggs wrote: > Hi, > > On Tue, Jun 28, 2011 at 10:28 PM, Benjamin Herrenschmidt > >> >> If we're going to have a Kconfig.powerpc, should we maybe just have a >> powerpc subdirectory instead with the driver in it ? >> > Where would the powerpc subdirectory be? under drivers/cpufreq? Or > somewhere under arch/powerpc where it belongs (and I put my 750GX > stuff)? drivers/cpufreq/powerpc. However my current version (as suggested by Ben) goes directly to drivers/cpufreq -- With best wishes Dmitry ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
Hi, Try this one more time ... On Wed, Jun 29, 2011 at 3:54 AM, Benjamin Herrenschmidt wrote: > On Wed, 2011-06-29 at 12:40 +0400, Dmitry Eremin-Solenikov wrote: > > If you feel like it :-) The powermac one has quite a bit more plumbing > for voltage control etc... but it does make sense in the long run. > On my G5 (PowerMac7,3?), a dual 970FX @ 2.5G, I don't think the voltage scaling works correctly. If someone else with one of these (preferably someone who is NOT swamped (and named Ben)) could run some experiments. I would like to know whether the G5 I bought on ebay is some "FrankenG5" and the others actually work correctly. To summarize, if I disable frequency scaling and look at the cpu core voltages it runs at the LOW voltage at full (i.e. 2.5 GHz) speed. With frequency scaling enabled, it runs the low speed at the same voltage it runs at 2.5 GHz without frequency scaling enabled. At the full speed it switches to a higher voltage. It WILL overheat if allowed to 'do stuff'. Temps above 110 are observed for cpu 1 (the second cpu in the serial (i.e. cpu 1 is heated by cpu 0) cooling setup - DUH!!!). The two voltages are like ~1.23 and ~1.35. Back when this beast had MacOS X, I think it exhibited similar behavior based on the fan noise. kevin ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
Hi, On Tue, Jun 28, 2011 at 10:28 PM, Benjamin Herrenschmidt > > > If we're going to have a Kconfig.powerpc, should we maybe just have a > powerpc subdirectory instead with the driver in it ? > Where would the powerpc subdirectory be? under drivers/cpufreq? Or somewhere under arch/powerpc where it belongs (and I put my 750GX stuff)? > >> + printk(KERN_INFO "Frequency method: SCOM, Voltage method: none\n"); > > This is useless. > Why? > Cheers, > Ben. > kevin ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
On Wed, 2011-06-29 at 12:40 +0400, Dmitry Eremin-Solenikov wrote: > On 6/29/11, Benjamin Herrenschmidt wrote: > > Before I comment on this last one, a quick Q. for Dave: Do you want to > > handle this or should I merge it via powerpc.git ? (It depends on > > another change to the arch code to expose the SCOM functions that it > > uses, and that patch is going to be in my -next branch). > > > > Now some remaining small nits: > > > > On Fri, 2011-06-17 at 17:10 +0400, Dmitry Eremin-Solenikov wrote: > >> Add simple cpufreq driver for Maple-based boards (ppc970fx evaluation > >> kit and others). Driver is based on a cpufreq driver for 64-bit powermac > >> boxes with all pmac-dependant features removed and simple cleanup > >> applied. > >> > >> Signed-off-by: Dmitry Eremin-Solenikov > >> --- > >> drivers/cpufreq/Kconfig |5 + > >> drivers/cpufreq/Kconfig.powerpc |7 + > >> drivers/cpufreq/Makefile|5 + > >> drivers/cpufreq/maple-cpufreq.c | 314 > >> +++ > > > > If we're going to have a Kconfig.powerpc, should we maybe just have a > > powerpc subdirectory instead with the driver in it ? > > > > I'm happy at some later point to try moving some of my other ones there. > > As Dave also isn't sure about subdirs, should I create cpufreq/powerpc > directory, > or not? Don't bother, I can do it all at once if/when I chose to move the powermac stuff there. > > Do you get that property in your device-tree ? Or have you modified your > > firmware ? If that requires a modified firmware, you should probably put > > at least a link indicating where to get it somewhere and display a nicer > > error code. > > PIBS firmware (used on PPC970FX devkit/original Maple-D board) generates > this property, if the board is started with dual CPUs (it can also be started > with only one CPU selected). On the other hand SLOF firmware (used > on JS2x blade servers) doesn't generate this property. It can be adapted > however to generate it. Ok. > > Also this driver is specific to the Maple HW, you don't want it to kick > > in and mess around on ... an Apple G5 for example. So stick somewhere a > > > > if (!machine_is(maple)) > > return 0; > > > >> + printk(KERN_INFO "Registering G5 CPU frequency driver\n"); > > > > s/G5/Maple > > Hmmm. I'm actually thinking about doing it the other way: as this driver > is mostly c&p of PowerMac G5 driver, as we are moving those from > arch/powerpc to drivers/cpufreq, maybe I should merge two drivers (this > one with cpufreq_64 from powermac)? If you feel like it :-) The powermac one has quite a bit more plumbing for voltage control etc... but it does make sense in the long run. Maybe start with getting that maple driver in, and -then- merge ? > >> + printk(KERN_INFO "Frequency method: SCOM, Voltage method: none\n"); > > > > This is useless. > > Leftover from powermac thing. Cheers, Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
On 6/29/11, Benjamin Herrenschmidt wrote: > Before I comment on this last one, a quick Q. for Dave: Do you want to > handle this or should I merge it via powerpc.git ? (It depends on > another change to the arch code to expose the SCOM functions that it > uses, and that patch is going to be in my -next branch). > > Now some remaining small nits: > > On Fri, 2011-06-17 at 17:10 +0400, Dmitry Eremin-Solenikov wrote: >> Add simple cpufreq driver for Maple-based boards (ppc970fx evaluation >> kit and others). Driver is based on a cpufreq driver for 64-bit powermac >> boxes with all pmac-dependant features removed and simple cleanup >> applied. >> >> Signed-off-by: Dmitry Eremin-Solenikov >> --- >> drivers/cpufreq/Kconfig |5 + >> drivers/cpufreq/Kconfig.powerpc |7 + >> drivers/cpufreq/Makefile|5 + >> drivers/cpufreq/maple-cpufreq.c | 314 >> +++ > > If we're going to have a Kconfig.powerpc, should we maybe just have a > powerpc subdirectory instead with the driver in it ? > > I'm happy at some later point to try moving some of my other ones there. As Dave also isn't sure about subdirs, should I create cpufreq/powerpc directory, or not? > > .../... > >> +/* Look for the powertune data in the device-tree */ >> +maple_pmode_data = of_get_property(cpunode, "power-mode-data", &psize); >> +if (!maple_pmode_data) { >> +DBG("No power-mode-data !\n"); >> +goto bail_noprops; >> +} >> +maple_pmode_max = psize / sizeof(u32) - 1; > > Do you get that property in your device-tree ? Or have you modified your > firmware ? If that requires a modified firmware, you should probably put > at least a link indicating where to get it somewhere and display a nicer > error code. PIBS firmware (used on PPC970FX devkit/original Maple-D board) generates this property, if the board is started with dual CPUs (it can also be started with only one CPU selected). On the other hand SLOF firmware (used on JS2x blade servers) doesn't generate this property. It can be adapted however to generate it. > Also this driver is specific to the Maple HW, you don't want it to kick > in and mess around on ... an Apple G5 for example. So stick somewhere a > > if (!machine_is(maple)) > return 0; > >> +printk(KERN_INFO "Registering G5 CPU frequency driver\n"); > > s/G5/Maple Hmmm. I'm actually thinking about doing it the other way: as this driver is mostly c&p of PowerMac G5 driver, as we are moving those from arch/powerpc to drivers/cpufreq, maybe I should merge two drivers (this one with cpufreq_64 from powermac)? >> +printk(KERN_INFO "Frequency method: SCOM, Voltage method: none\n"); > > This is useless. Leftover from powermac thing. -- With best wishes Dmitry ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
On Wed, Jun 29, 2011 at 01:28:30PM +1000, Ben Herrenschmidt wrote: > Before I comment on this last one, a quick Q. for Dave: Do you want to > handle this or should I merge it via powerpc.git ? (It depends on > another change to the arch code to expose the SCOM functions that it > uses, and that patch is going to be in my -next branch). If you're carrying the dependancy, it sounds like it would make more sense for you to carry this too. There are some changes to the Kconfig/Makefile in drivers/cpufreq in my tree for 3.1 already, so you might get a collision when both trees end up in next & subsequently Linus' tree. Just trivial changes though. > > --- > > drivers/cpufreq/Kconfig |5 + > > drivers/cpufreq/Kconfig.powerpc |7 + > > drivers/cpufreq/Makefile|5 + > > drivers/cpufreq/maple-cpufreq.c | 314 > > +++ > > If we're going to have a Kconfig.powerpc, should we maybe just have a > powerpc subdirectory instead with the driver in it ? > > I'm happy at some later point to try moving some of my other ones there. So far we haven't bothered with additional subarch drivers/ directories for x86/arm. I'm not against the idea. As more archs move over, I could see drivers/cpufreq/ getting more cluttered. Dave ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
Re: [PATCH 2/2] Add cpufreq driver for Momentum Maple boards
Before I comment on this last one, a quick Q. for Dave: Do you want to handle this or should I merge it via powerpc.git ? (It depends on another change to the arch code to expose the SCOM functions that it uses, and that patch is going to be in my -next branch). Now some remaining small nits: On Fri, 2011-06-17 at 17:10 +0400, Dmitry Eremin-Solenikov wrote: > Add simple cpufreq driver for Maple-based boards (ppc970fx evaluation > kit and others). Driver is based on a cpufreq driver for 64-bit powermac > boxes with all pmac-dependant features removed and simple cleanup > applied. > > Signed-off-by: Dmitry Eremin-Solenikov > --- > drivers/cpufreq/Kconfig |5 + > drivers/cpufreq/Kconfig.powerpc |7 + > drivers/cpufreq/Makefile|5 + > drivers/cpufreq/maple-cpufreq.c | 314 > +++ If we're going to have a Kconfig.powerpc, should we maybe just have a powerpc subdirectory instead with the driver in it ? I'm happy at some later point to try moving some of my other ones there. .../... > + /* Look for the powertune data in the device-tree */ > + maple_pmode_data = of_get_property(cpunode, "power-mode-data", &psize); > + if (!maple_pmode_data) { > + DBG("No power-mode-data !\n"); > + goto bail_noprops; > + } > + maple_pmode_max = psize / sizeof(u32) - 1; Do you get that property in your device-tree ? Or have you modified your firmware ? If that requires a modified firmware, you should probably put at least a link indicating where to get it somewhere and display a nicer error code. Also this driver is specific to the Maple HW, you don't want it to kick in and mess around on ... an Apple G5 for example. So stick somewhere a if (!machine_is(maple)) return 0; > + printk(KERN_INFO "Registering G5 CPU frequency driver\n"); s/G5/Maple > + printk(KERN_INFO "Frequency method: SCOM, Voltage method: none\n"); This is useless. Cheers, Ben. ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[PATCH 2/2] Add cpufreq driver for Momentum Maple boards
Add simple cpufreq driver for Maple-based boards (ppc970fx evaluation kit and others). Driver is based on a cpufreq driver for 64-bit powermac boxes with all pmac-dependant features removed and simple cleanup applied. Signed-off-by: Dmitry Eremin-Solenikov --- drivers/cpufreq/Kconfig |5 + drivers/cpufreq/Kconfig.powerpc |7 + drivers/cpufreq/Makefile|5 + drivers/cpufreq/maple-cpufreq.c | 314 +++ 4 files changed, 331 insertions(+), 0 deletions(-) create mode 100644 drivers/cpufreq/Kconfig.powerpc create mode 100644 drivers/cpufreq/maple-cpufreq.c diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 9fb8485..61ae639 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig @@ -184,5 +184,10 @@ depends on X86 source "drivers/cpufreq/Kconfig.x86" endmenu +menu "PowerPC CPU frequency scaling drivers" +depends on PPC32 || PPC64 +source "drivers/cpufreq/Kconfig.powerpc" +endmenu + endif endmenu diff --git a/drivers/cpufreq/Kconfig.powerpc b/drivers/cpufreq/Kconfig.powerpc new file mode 100644 index 000..e76992f --- /dev/null +++ b/drivers/cpufreq/Kconfig.powerpc @@ -0,0 +1,7 @@ +config CPU_FREQ_MAPLE + bool "Support for Maple 970FX Evaluation Board" + depends on PPC_MAPLE + select CPU_FREQ_TABLE + help + This adds support for frequency switching on Maple 970FX + Evaluation Board and compatible boards (IBM JS2x blades). diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile index e2fc2d2..ca3796d 100644 --- a/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile @@ -41,3 +41,8 @@ obj-$(CONFIG_X86_CPUFREQ_NFORCE2) += cpufreq-nforce2.o # ARM SoC drivers obj-$(CONFIG_UX500_SOC_DB8500) += db8500-cpufreq.o + + +##d +# PowerPC platform drivers +obj-$(CONFIG_CPU_FREQ_MAPLE) += maple-cpufreq.o diff --git a/drivers/cpufreq/maple-cpufreq.c b/drivers/cpufreq/maple-cpufreq.c new file mode 100644 index 000..a61f6b9 --- /dev/null +++ b/drivers/cpufreq/maple-cpufreq.c @@ -0,0 +1,314 @@ +/* + * Copyright (C) 2011 Dmitry Eremin-Solenikov + * Copyright (C) 2002 - 2005 Benjamin Herrenschmidt + * and Markus Demleitner + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This driver adds basic cpufreq support for SMU & 970FX based G5 Macs, + * that is iMac G5 and latest single CPU desktop. + */ + +#undef DEBUG + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DBG(fmt...) pr_debug(fmt) + +/* see 970FX user manual */ + +#define SCOM_PCR 0x0aa001 /* PCR scom addr */ + +#define PCR_HILO_SELECT0x8000U /* 1 = PCR, 0 = PCRH */ +#define PCR_SPEED_FULL 0xU /* 1:1 speed value */ +#define PCR_SPEED_HALF 0x0002U /* 1:2 speed value */ +#define PCR_SPEED_QUARTER 0x0004U /* 1:4 speed value */ +#define PCR_SPEED_MASK 0x000eU /* speed mask */ +#define PCR_SPEED_SHIFT17 +#define PCR_FREQ_REQ_VALID 0x0001U /* freq request valid */ +#define PCR_VOLT_REQ_VALID 0x8000U /* volt request valid */ +#define PCR_TARGET_TIME_MASK 0x6000U /* target time */ +#define PCR_STATLAT_MASK 0x1f00U /* STATLAT value */ +#define PCR_SNOOPLAT_MASK 0x00f0U /* SNOOPLAT value */ +#define PCR_SNOOPACC_MASK 0x000fU /* SNOOPACC value */ + +#define SCOM_PSR 0x408001 /* PSR scom addr */ +/* warning: PSR is a 64 bits register */ +#define PSR_CMD_RECEIVED 0x2000U /* command received */ +#define PSR_CMD_COMPLETED 0x1000U /* command completed */ +#define PSR_CUR_SPEED_MASK 0x0300U /* current speed */ +#define PSR_CUR_SPEED_SHIFT(56) + +/* + * The G5 only supports two frequencies (Quarter speed is not supported) + */ +#define CPUFREQ_HIGH 0 +#define CPUFREQ_LOW 1 + +static struct cpufreq_frequency_table maple_cpu_freqs[] = { + {CPUFREQ_HIGH, 0}, + {CPUFREQ_LOW, 0}, + {0, CPUFREQ_TABLE_END}, +}; + +static struct freq_attr *maple_cpu_freqs_attr[] = { + &cpufreq_freq_attr_scaling_available_freqs, + NULL, +}; + +/* Power mode data is an array of the 32 bits PCR values to use for + * the various frequencies, retrieved from the device-tree + */ +static int maple_pmode_cur; + +static DEFINE_MUTEX(maple_switch_mutex); + +static const u32 *maple_pmode_data; +static int maple_pmode_max; + +/* + * Fake voltage switching for platforms with missing support + */ + +static void maple_dummy_swi