* [PATCH 0/3 v2] omap: opp: Add opp data
@ 2010-10-20 1:02 Nishanth Menon
2010-10-20 1:02 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Nishanth Menon
0 siblings, 1 reply; 8+ messages in thread
From: Nishanth Menon @ 2010-10-20 1:02 UTC (permalink / raw)
To: l-o; +Cc: Kevin H, Tony, Nishanth Menon
Rev2 of the original series since opp layer is moved to power for-next tree:
http://marc.info/?l=linux-omap&m=128458780403670&w=2
This series introduces a layer to manage Operating Performance Points (OPPs)
for OMAP SoCs.
Based on kernel.org commit 51ea8a8.
Depends on OPP layer patch from Rafael's tree:
http://git.kernel.org/?p=linux/kernel/git/rafael/suspend-2.6.git;a=commit;h=56149b574181d98aedf97f1f2d91d05ab261db41
Note:
Tony, for applying on l-o, the following conflicts:
arch/arm/mach-omap2/Kconfig -> few additional changes to ARCH_OMAP{3,4}
not in kernel.org yet.
arch/arm/mach-omap2/io.c - hwmodint of omap4 is introduced
Conflicts are trivial and if necessary, I can post one rebased to l-o
Patch "omap4: opp: add OPP table data" is based off the OPP data from
http://dev.omapzoom.org/?p=santosh/kernel-omap4-base.git;a=blob;f=arch/arm/mach-omap2/opp44xx_data.c;h=252e3d0cb6050a64f390b9311c1c4977d74f762a;hb=refs/heads/omap4_next
Kevin Hilman (1):
OMAP3: remove OPP interfaces from OMAP PM layer
Nishanth Menon (2):
omap: opp: add OMAP3 OPP table data and common init
omap4: opp: add OPP table data
arch/arm/mach-omap2/Kconfig | 2 +
arch/arm/mach-omap2/Makefile | 2 +
arch/arm/mach-omap2/io.c | 3 +-
arch/arm/mach-omap2/opp.c | 142 +++++++++++++++++++++++++++++
arch/arm/mach-omap2/opp3xxx_data.h | 82 +++++++++++++++++
arch/arm/mach-omap2/opp4xxx_data.h | 37 ++++++++
arch/arm/mach-omap2/pm.c | 6 +
arch/arm/mach-omap2/pm.h | 8 ++
arch/arm/plat-omap/include/plat/omap-pm.h | 31 ++----
arch/arm/plat-omap/omap-pm-noop.c | 11 +--
10 files changed, 291 insertions(+), 33 deletions(-)
create mode 100644 arch/arm/mach-omap2/opp.c
create mode 100644 arch/arm/mach-omap2/opp3xxx_data.h
create mode 100644 arch/arm/mach-omap2/opp4xxx_data.h
Regards,
Nishanth Menon
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init 2010-10-20 1:02 [PATCH 0/3 v2] omap: opp: Add opp data Nishanth Menon @ 2010-10-20 1:02 ` Nishanth Menon 2010-10-20 1:02 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Nishanth Menon 2010-11-04 23:10 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Tony Lindgren 0 siblings, 2 replies; 8+ messages in thread From: Nishanth Menon @ 2010-10-20 1:02 UTC (permalink / raw) To: l-o; +Cc: Kevin H, Tony, Nishanth Menon Add OPP data for OMAP34xx and OMAP36xx and initialization functions to populate OPP tables based on current SoC. introduce an OMAP generic opp initialization routine which OMAP3 and OMAP4+ SoCs can use to register their OPP definitions. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> --- arch/arm/mach-omap2/Kconfig | 1 + arch/arm/mach-omap2/Makefile | 2 + arch/arm/mach-omap2/opp.c | 138 ++++++++++++++++++++++++++++++++++++ arch/arm/mach-omap2/opp3xxx_data.h | 82 +++++++++++++++++++++ arch/arm/mach-omap2/pm.h | 8 ++ 5 files changed, 231 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/opp.c create mode 100644 arch/arm/mach-omap2/opp3xxx_data.h diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index b48bacf..3eb367a 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -36,6 +36,7 @@ config ARCH_OMAP3 select CPU_V7 select USB_ARCH_HAS_EHCI select ARM_L1_CACHE_SHIFT_6 + select PM_OPP if PM config ARCH_OMAP4 bool "TI OMAP4" diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 88d3a1e..dc5ad90 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -59,6 +59,8 @@ AFLAGS_sleep34xx.o :=-Wa,-march=armv7-a endif +obj-$(CONFIG_PM_OPP) += opp.o + # PRCM obj-$(CONFIG_ARCH_OMAP2) += cm.o obj-$(CONFIG_ARCH_OMAP3) += cm.o diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c new file mode 100644 index 0000000..9342986 --- /dev/null +++ b/arch/arm/mach-omap2/opp.c @@ -0,0 +1,138 @@ +/* + * OMAP SoC specific OPP wrapper function + * + * Copyright (C) 2009 - 2010 Texas Instruments Incorporated. + * Nishanth Menon + * Copyright (C) 2009 - 2010 Deep Root Systems, LLC. + * Kevin Hilman + * Copyright (C) 2010 Nokia Corporation. + * Eduardo Valentin + * + * 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. + */ + +#include <linux/module.h> +#include <linux/err.h> +#include <linux/opp.h> + +#include <plat/cpu.h> +#include <plat/omap_device.h> + +#include "pm.h" + +/** + * struct omap_opp_def - OMAP OPP Definition + * @hwmod_name: Name of the hwmod for this domain + * @freq: Frequency in hertz corresponding to this OPP + * @u_volt: Nominal voltage in microvolts corresponding to this OPP + * @enabled: True/false - is this OPP enabled/disabled by default + * + * OMAP SOCs have a standard set of tuples consisting of frequency and voltage + * pairs that the device will support per voltage domain. This is called + * Operating Points or OPP. The actual definitions of OMAP Operating Points + * varies over silicon within the same family of devices. For a specific + * domain, you can have a set of {frequency, voltage} pairs and this is denoted + * by an array of omap_opp_def. As the kernel boots and more information is + * available, a set of these are activated based on the precise nature of + * device the kernel boots up on. It is interesting to remember that each IP + * which belongs to a voltage domain may define their own set of OPPs on top + * of this - but this is handled by the appropriate driver. + */ +struct omap_opp_def { + char *hwmod_name; + + unsigned long freq; + unsigned long u_volt; + + bool default_available; +}; + +/* + * Initialization wrapper used to define an OPP for OMAP variants. + */ +#define OPP_INITIALIZER(_hwmod_name, _enabled, _freq, _uv) \ +{ \ + .hwmod_name = _hwmod_name, \ + .default_available = _enabled, \ + .freq = _freq, \ + .u_volt = _uv, \ +} + +#include "opp3xxx_data.h" + +/* Temp variable to allow multiple calls */ +static u8 __initdata omap_table_init; + +/** + * omap_init_opp_table() - Initialize opp table as per the CPU type + * + * Register the initial OPP table with the OPP library based on the CPU + * type. + */ +int __init omap_init_opp_table(void) +{ + struct omap_opp_def *opp_def; + u32 opp_def_size; + int i, r; + + /* + * Allow multiple calls, but initialize only if not already initalized + * even if the previous call failed, coz, no reason we'd succeed again + */ + if (omap_table_init) + return 0; + omap_table_init = 1; + + /* Select the OPP table we'd like to enable based on cpu we are on */ + if (cpu_is_omap34xx()) { + opp_def = cpu_is_omap3630() ? omap36xx_opp_def_list : + omap34xx_opp_def_list; + opp_def_size = cpu_is_omap3630() ? + ARRAY_SIZE(omap36xx_opp_def_list) : + ARRAY_SIZE(omap34xx_opp_def_list); + } else { + pr_err("%s: called for an unsupported cpu type\n", __func__); + return -EINVAL; + } + + /* Lets now register with OPP library */ + for (i = 0; i < opp_def_size; i++) { + struct omap_hwmod *oh; + struct device *dev; + + if (!opp_def->hwmod_name) { + pr_err("%s: NULL name of omap_hwmod, failing [%d].\n", + __func__, i); + return -EINVAL; + } + oh = omap_hwmod_lookup(opp_def->hwmod_name); + if (!oh || !oh->od) { + pr_warn("%s: no hwmod or odev for %s, [%d] " + "cannot add OPPs.\n", __func__, + opp_def->hwmod_name, i); + return -EINVAL; + } + dev = &oh->od->pdev.dev; + + r = opp_add(dev, opp_def->freq, opp_def->u_volt); + if (r) { + dev_err(dev, "%s: add OPP %ld failed for %s [%d] " + "result=%d\n", + __func__, opp_def->freq, + opp_def->hwmod_name, i, r); + } else { + if (!opp_def->default_available) + r = opp_disable(dev, opp_def->freq); + if (r) + dev_err(dev, "%s: disable %ld failed for %s " + "[%d] result=%d\n", + __func__, opp_def->freq, + opp_def->hwmod_name, i, r); + } + opp_def++; + } + + return 0; +} diff --git a/arch/arm/mach-omap2/opp3xxx_data.h b/arch/arm/mach-omap2/opp3xxx_data.h new file mode 100644 index 0000000..2ce36a2 --- /dev/null +++ b/arch/arm/mach-omap2/opp3xxx_data.h @@ -0,0 +1,82 @@ +/* + * OMAP3 OPP table definitions. + * + * Copyright (C) 2009 - 2010 Texas Instruments Incorporated. + * Nishanth Menon + * Kevin Hilman + * Copyright (C) 2010 Nokia Corporation. + * Eduardo Valentin + * + * 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. + */ + +#ifndef __ASM_PLAT_OPP_OMAP3XXX_H__ +#define __ASM_PLAT_OPP_OMAP3XXX_H__ + +static struct omap_opp_def __initdata omap34xx_opp_def_list[] = { + /* MPU OPP1 */ + OPP_INITIALIZER("mpu", true, 125000000, 975000), + /* MPU OPP2 */ + OPP_INITIALIZER("mpu", true, 250000000, 1075000), + /* MPU OPP3 */ + OPP_INITIALIZER("mpu", true, 500000000, 1200000), + /* MPU OPP4 */ + OPP_INITIALIZER("mpu", true, 550000000, 1270000), + /* MPU OPP5 */ + OPP_INITIALIZER("mpu", true, 600000000, 1350000), + + /* + * L3 OPP1 - 41.5 MHz is disabled because: The voltage for that OPP is + * almost the same than the one at 83MHz thus providing very little + * gain for the power point of view. In term of energy it will even + * increase the consumption due to the very negative performance + * impact that frequency will do to the MPU and the whole system in + * general. + */ + OPP_INITIALIZER("l3_main", false, 41500000, 975000), + /* L3 OPP2 */ + OPP_INITIALIZER("l3_main", true, 83000000, 1050000), + /* L3 OPP3 */ + OPP_INITIALIZER("l3_main", true, 166000000, 1150000), + + + /* DSP OPP1 */ + OPP_INITIALIZER("iva", true, 90000000, 975000), + /* DSP OPP2 */ + OPP_INITIALIZER("iva", true, 180000000, 1075000), + /* DSP OPP3 */ + OPP_INITIALIZER("iva", true, 360000000, 1200000), + /* DSP OPP4 */ + OPP_INITIALIZER("iva", true, 400000000, 1270000), + /* DSP OPP5 */ + OPP_INITIALIZER("iva", true, 430000000, 1350000), +}; + +static struct omap_opp_def __initdata omap36xx_opp_def_list[] = { + /* MPU OPP1 - OPP50 */ + OPP_INITIALIZER("mpu", true, 300000000, 1012500), + /* MPU OPP2 - OPP100 */ + OPP_INITIALIZER("mpu", true, 600000000, 1200000), + /* MPU OPP3 - OPP-Turbo */ + OPP_INITIALIZER("mpu", false, 800000000, 1325000), + /* MPU OPP4 - OPP-SB */ + OPP_INITIALIZER("mpu", false, 1000000000, 1375000), + + /* L3 OPP1 - OPP50 */ + OPP_INITIALIZER("l3_main", true, 100000000, 1000000), + /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */ + OPP_INITIALIZER("l3_main", true, 200000000, 1200000), + + /* DSP OPP1 - OPP50 */ + OPP_INITIALIZER("iva", true, 260000000, 1012500), + /* DSP OPP2 - OPP100 */ + OPP_INITIALIZER("iva", true, 520000000, 1200000), + /* DSP OPP3 - OPP-Turbo */ + OPP_INITIALIZER("iva", false, 660000000, 1325000), + /* DSP OPP4 - OPP-SB */ + OPP_INITIALIZER("iva", false, 800000000, 1375000), +}; + +#endif /* __ASM_PLAT_OPP_OMAP3XXX_H__ */ diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h index 3de6ece..6f3df29 100644 --- a/arch/arm/mach-omap2/pm.h +++ b/arch/arm/mach-omap2/pm.h @@ -22,6 +22,14 @@ extern void omap_sram_idle(void); extern int omap3_can_sleep(void); extern int set_pwrdm_state(struct powerdomain *pwrdm, u32 state); extern int omap3_idle_init(void); +#if defined(CONFIG_PM_OPP) +extern int omap_init_opp_table(void); +#else +static inline int omap_init_opp_table(void) +{ + return -EINVAL; +} +#endif struct cpuidle_params { u8 valid; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3 v2] omap4: opp: add OPP table data 2010-10-20 1:02 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Nishanth Menon @ 2010-10-20 1:02 ` Nishanth Menon 2010-10-20 1:02 ` [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer Nishanth Menon 2010-11-04 23:13 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Tony Lindgren 2010-11-04 23:10 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Tony Lindgren 1 sibling, 2 replies; 8+ messages in thread From: Nishanth Menon @ 2010-10-20 1:02 UTC (permalink / raw) To: l-o; +Cc: Kevin H, Tony, Nishanth Menon This patch adds OPP tables for OMAP4. New file has been added to keep the OMAP4 opp tables and the registration of these tables with the generic opp framework by OMAP SoC OPP interface. Based on: http://dev.omapzoom.org/?p=santosh/kernel-omap4-base.git;a=blob;f=arch/arm/mach-omap2/opp44xx_data.c;h=252e3d0cb6050a64f390b9311c1c4977d74f762a;hb=refs/heads/omap4_next Signed-off-by: Thara Gopinath <thara@ti.com> Signed-off-by: Nishanth Menon <nm@ti.com> --- [nm@ti.com: cleaned up, synced to latest code, removed iva,dsp,gpu,aess as these hwmods are not added yet to l-o for-next. Retaining Thara's attribution] arch/arm/mach-omap2/Kconfig | 1 + arch/arm/mach-omap2/opp.c | 6 ++++- arch/arm/mach-omap2/opp4xxx_data.h | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletions(-) create mode 100644 arch/arm/mach-omap2/opp4xxx_data.h diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 3eb367a..12fefdb 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -44,6 +44,7 @@ config ARCH_OMAP4 depends on ARCH_OMAP2PLUS select CPU_V7 select ARM_GIC + select PM_OPP if PM comment "OMAP Core Type" depends on ARCH_OMAP2 diff --git a/arch/arm/mach-omap2/opp.c b/arch/arm/mach-omap2/opp.c index 9342986..2266c1f 100644 --- a/arch/arm/mach-omap2/opp.c +++ b/arch/arm/mach-omap2/opp.c @@ -61,6 +61,7 @@ struct omap_opp_def { } #include "opp3xxx_data.h" +#include "opp4xxx_data.h" /* Temp variable to allow multiple calls */ static u8 __initdata omap_table_init; @@ -86,7 +87,10 @@ int __init omap_init_opp_table(void) omap_table_init = 1; /* Select the OPP table we'd like to enable based on cpu we are on */ - if (cpu_is_omap34xx()) { + if (cpu_is_omap44xx()) { + opp_def = omap44xx_opp_def_list; + opp_def_size = ARRAY_SIZE(omap44xx_opp_def_list); + } else if (cpu_is_omap34xx()) { opp_def = cpu_is_omap3630() ? omap36xx_opp_def_list : omap34xx_opp_def_list; opp_def_size = cpu_is_omap3630() ? diff --git a/arch/arm/mach-omap2/opp4xxx_data.h b/arch/arm/mach-omap2/opp4xxx_data.h new file mode 100644 index 0000000..2e5fe67 --- /dev/null +++ b/arch/arm/mach-omap2/opp4xxx_data.h @@ -0,0 +1,37 @@ +/* + * OMAP4 OPP table definitions. + * + * Copyright (C) 2009 - 2010 Texas Instruments Incorporated. + * Nishanth Menon + * Copyright (C) 2009 - 2010 Deep Root Systems, LLC. + * Kevin Hilman + * Copyright (C) 2010 Nokia Corporation. + * Eduardo Valentin + * Copyright (C) 2010 Texas Instruments Incorporated. + * Thara Gopinath + * + * 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. + */ + +#ifndef __ASM_PLAT_OPP_OMAP4XXX_H__ +#define __ASM_PLAT_OPP_OMAP4XXX_H__ + +static struct omap_opp_def __initdata omap44xx_opp_def_list[] = { + /* MPU OPP1 - OPP50 */ + OPP_INITIALIZER("mpu", true, 300000000, 1100000), + /* MPU OPP2 - OPP100 */ + OPP_INITIALIZER("mpu", true, 600000000, 1200000), + /* MPU OPP3 - OPP-Turbo */ + OPP_INITIALIZER("mpu", false, 800000000, 1260000), + /* MPU OPP4 - OPP-SB */ + OPP_INITIALIZER("mpu", false, 1008000000, 1350000), + /* L3 OPP1 - OPP50 */ + OPP_INITIALIZER("l3_main_1", true, 100000000, 930000), + /* L3 OPP2 - OPP100, OPP-Turbo, OPP-SB */ + OPP_INITIALIZER("l3_main_1", true, 200000000, 1100000), + /* TODO: add IVA, DSP, aess, fdif, gpu */ +}; + +#endif /* __ASM_PLAT_OPP_OMAP4XXX_H__ */ -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer 2010-10-20 1:02 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Nishanth Menon @ 2010-10-20 1:02 ` Nishanth Menon 2010-11-04 23:20 ` Tony Lindgren 2010-11-04 23:13 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Tony Lindgren 1 sibling, 1 reply; 8+ messages in thread From: Nishanth Menon @ 2010-10-20 1:02 UTC (permalink / raw) To: l-o; +Cc: Kevin H, Tony, Nishanth Menon From: Kevin Hilman <khilman@deeprootsystems.com> With new OPP layer, OPP users will access OPP API directly instead of using OMAP PM layer, so remove all notions of OPPs from the OMAP PM layer. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> --- Retaining Kevin's original attribution arch/arm/mach-omap2/io.c | 3 +- arch/arm/mach-omap2/pm.c | 6 +++++ arch/arm/plat-omap/include/plat/omap-pm.h | 31 +++++++++------------------- arch/arm/plat-omap/omap-pm-noop.c | 11 +--------- 4 files changed, 18 insertions(+), 33 deletions(-) diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index b9ea70b..c09bf10 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c @@ -323,8 +323,7 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sdrc_cs0, omap2430_hwmod_init(); else if (cpu_is_omap34xx()) omap3xxx_hwmod_init(); - /* The OPP tables have to be registered before a clk init */ - omap_pm_if_early_init(mpu_opps, dsp_opps, l3_opps); + omap_pm_if_early_init(); if (cpu_is_omap2420()) omap2420_clk_init(); diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 68f9f2e..c5ada1c 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -18,6 +18,8 @@ #include <plat/omap_device.h> #include <plat/common.h> +#include "pm.h" + static struct omap_device_pm_latency *pm_lats; static struct device *mpu_dev; @@ -76,6 +78,10 @@ static void omap2_init_processor_devices(void) static int __init omap2_common_pm_init(void) { omap2_init_processor_devices(); + + if (cpu_is_omap34xx() || cpu_is_omap44xx()) + omap_init_opp_table(); + omap_pm_if_init(); return 0; diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h b/arch/arm/plat-omap/include/plat/omap-pm.h index 728fbb9..62c3fe9 100644 --- a/arch/arm/plat-omap/include/plat/omap-pm.h +++ b/arch/arm/plat-omap/include/plat/omap-pm.h @@ -17,27 +17,10 @@ #include <linux/device.h> #include <linux/cpufreq.h> #include <linux/clk.h> +#include <linux/opp.h> #include "powerdomain.h" -/** - * struct omap_opp - clock frequency-to-OPP ID table for DSP, MPU - * @rate: target clock rate - * @opp_id: OPP ID - * @min_vdd: minimum VDD1 voltage (in millivolts) for this OPP - * - * Operating performance point data. Can vary by OMAP chip and board. - */ -struct omap_opp { - unsigned long rate; - u8 opp_id; - u16 min_vdd; -}; - -extern struct omap_opp *mpu_opps; -extern struct omap_opp *dsp_opps; -extern struct omap_opp *l3_opps; - /* * agent_id values for use with omap_pm_set_min_bus_tput(): * @@ -59,9 +42,11 @@ extern struct omap_opp *l3_opps; * framework starts. The "_if_" is to avoid name collisions with the * PM idle-loop code. */ -int __init omap_pm_if_early_init(struct omap_opp *mpu_opp_table, - struct omap_opp *dsp_opp_table, - struct omap_opp *l3_opp_table); +#ifdef CONFIG_OMAP_PM_NONE +#define omap_pm_if_early_init() 0 +#else +int __init omap_pm_if_early_init(void); +#endif /** * omap_pm_if_init - OMAP PM init code called after clock fw init @@ -69,7 +54,11 @@ int __init omap_pm_if_early_init(struct omap_opp *mpu_opp_table, * The main initialization code. OPP tables are passed in here. The * "_if_" is to avoid name collisions with the PM idle-loop code. */ +#ifdef CONFIG_OMAP_PM_NONE +#define omap_pm_if_init() 0 +#else int __init omap_pm_if_init(void); +#endif /** * omap_pm_if_exit - OMAP PM exit code diff --git a/arch/arm/plat-omap/omap-pm-noop.c b/arch/arm/plat-omap/omap-pm-noop.c index e129ce8..ca75abb 100644 --- a/arch/arm/plat-omap/omap-pm-noop.c +++ b/arch/arm/plat-omap/omap-pm-noop.c @@ -26,10 +26,6 @@ #include <plat/powerdomain.h> -struct omap_opp *dsp_opps; -struct omap_opp *mpu_opps; -struct omap_opp *l3_opps; - /* * Device-driver-originated constraints (via board-*.c files) */ @@ -308,13 +304,8 @@ int omap_pm_get_dev_context_loss_count(struct device *dev) /* Should be called before clk framework init */ -int __init omap_pm_if_early_init(struct omap_opp *mpu_opp_table, - struct omap_opp *dsp_opp_table, - struct omap_opp *l3_opp_table) +int __init omap_pm_if_early_init(void) { - mpu_opps = mpu_opp_table; - dsp_opps = dsp_opp_table; - l3_opps = l3_opp_table; return 0; } -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer 2010-10-20 1:02 ` [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer Nishanth Menon @ 2010-11-04 23:20 ` Tony Lindgren 0 siblings, 0 replies; 8+ messages in thread From: Tony Lindgren @ 2010-11-04 23:20 UTC (permalink / raw) To: Nishanth Menon; +Cc: l-o, Kevin H * Nishanth Menon <nm@ti.com> [101019 17:53]: > static int __init omap2_common_pm_init(void) > { > omap2_init_processor_devices(); > + > + if (cpu_is_omap34xx() || cpu_is_omap44xx()) > + omap_init_opp_table(); > + > omap_pm_if_init(); It's best to have separate init for each supported processor instead: static init __init omap3_opp_init(void) { if (cpu_is_not_omap34xx()) return -ENODEV; /* Do omap3 specific init */ ... return omap_opp_init(omap3_opp_def_list); } device_initcall(omap3_opp_init); static init __init omap4_opp_init(void) { if (cpu_is_not_omap44xx()) return -ENODEV; /* Do omap3 specific init */ ... return omap_opp_init(omap4_opp_def_list); } device_initcall(omap4_opp_init); ... This way it's easier to add support for new processors by implementing the necessary initcalls, common code stays generic, one level of code indentation is avoided, and the code still gets optimized out for unselected processors. Regards, Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3 v2] omap4: opp: add OPP table data 2010-10-20 1:02 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Nishanth Menon 2010-10-20 1:02 ` [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer Nishanth Menon @ 2010-11-04 23:13 ` Tony Lindgren 2010-11-05 0:05 ` Menon, Nishanth 1 sibling, 1 reply; 8+ messages in thread From: Tony Lindgren @ 2010-11-04 23:13 UTC (permalink / raw) To: Nishanth Menon; +Cc: l-o, Kevin H * Nishanth Menon <nm@ti.com> [101019 17:53]: > @@ -86,7 +87,10 @@ int __init omap_init_opp_table(void) > omap_table_init = 1; > > /* Select the OPP table we'd like to enable based on cpu we are on */ > - if (cpu_is_omap34xx()) { > + if (cpu_is_omap44xx()) { > + opp_def = omap44xx_opp_def_list; > + opp_def_size = ARRAY_SIZE(omap44xx_opp_def_list); > + } else if (cpu_is_omap34xx()) { > opp_def = cpu_is_omap3630() ? omap36xx_opp_def_list : > omap34xx_opp_def_list; > opp_def_size = cpu_is_omap3630() ? And based on the comments in patch 1/3, when you add support for new processor, you just add a new init function instead of adding "if cpu_is_omapxxxx else if" chunks. Regards, Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3 v2] omap4: opp: add OPP table data 2010-11-04 23:13 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Tony Lindgren @ 2010-11-05 0:05 ` Menon, Nishanth 0 siblings, 0 replies; 8+ messages in thread From: Menon, Nishanth @ 2010-11-05 0:05 UTC (permalink / raw) To: Tony Lindgren; +Cc: l-o, Kevin H On Thu, Nov 4, 2010 at 19:13, Tony Lindgren <tony@atomide.com> wrote: > * Nishanth Menon <nm@ti.com> [101019 17:53]: >> @@ -86,7 +87,10 @@ int __init omap_init_opp_table(void) >> omap_table_init = 1; >> >> /* Select the OPP table we'd like to enable based on cpu we are on */ >> - if (cpu_is_omap34xx()) { >> + if (cpu_is_omap44xx()) { >> + opp_def = omap44xx_opp_def_list; >> + opp_def_size = ARRAY_SIZE(omap44xx_opp_def_list); >> + } else if (cpu_is_omap34xx()) { >> opp_def = cpu_is_omap3630() ? omap36xx_opp_def_list : >> omap34xx_opp_def_list; >> opp_def_size = cpu_is_omap3630() ? > > And based on the comments in patch 1/3, when you add support for > new processor, you just add a new init function instead of adding > "if cpu_is_omapxxxx else if" chunks. yeah it does sound better and i like the approach as well. thanks for the same. will post a v3 asap. Regards, NM -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init 2010-10-20 1:02 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Nishanth Menon 2010-10-20 1:02 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Nishanth Menon @ 2010-11-04 23:10 ` Tony Lindgren 1 sibling, 0 replies; 8+ messages in thread From: Tony Lindgren @ 2010-11-04 23:10 UTC (permalink / raw) To: Nishanth Menon; +Cc: l-o, Kevin H Hi Nishant, You can make the opp init more generic by changing omap_init_opp_table to be: int __init omap_init_opp_table(struct omap_opp_def *opp_list) instead of below. And then.. > +int __init omap_init_opp_table(void) > +{ > + struct omap_opp_def *opp_def; > + u32 opp_def_size; > + int i, r; > + > + /* > + * Allow multiple calls, but initialize only if not already initalized > + * even if the previous call failed, coz, no reason we'd succeed again > + */ > + if (omap_table_init) > + return 0; > + omap_table_init = 1; > + > + /* Select the OPP table we'd like to enable based on cpu we are on */ > + if (cpu_is_omap34xx()) { > + opp_def = cpu_is_omap3630() ? omap36xx_opp_def_list : > + omap34xx_opp_def_list; > + opp_def_size = cpu_is_omap3630() ? > + ARRAY_SIZE(omap36xx_opp_def_list) : > + ARRAY_SIZE(omap34xx_opp_def_list); > + } else { > + pr_err("%s: called for an unsupported cpu type\n", __func__); > + return -EINVAL; > + } ..the above can go into omap3 and omap4 specific init functions so this function stays generic. Regards, Tony ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-11-05 0:06 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-10-20 1:02 [PATCH 0/3 v2] omap: opp: Add opp data Nishanth Menon 2010-10-20 1:02 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Nishanth Menon 2010-10-20 1:02 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Nishanth Menon 2010-10-20 1:02 ` [PATCH 3/3 v2] OMAP3: remove OPP interfaces from OMAP PM layer Nishanth Menon 2010-11-04 23:20 ` Tony Lindgren 2010-11-04 23:13 ` [PATCH 2/3 v2] omap4: opp: add OPP table data Tony Lindgren 2010-11-05 0:05 ` Menon, Nishanth 2010-11-04 23:10 ` [PATCH 1/3 v2] omap: opp: add OMAP3 OPP table data and common init Tony Lindgren
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox