public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: "Menon, Nishanth" <nm@ti.com>
To: Paul Walmsley <paul@pwsan.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: [PATCH 12/12] OMAP3 OPP: move CPUFreq table init code to OPP layer
Date: Sat, 19 Dec 2009 17:52:40 +0530	[thread overview]
Message-ID: <4B2CC590.4060604@ti.com> (raw)
In-Reply-To: <20091218004741.7694.33747.stgit@localhost.localdomain>

Paul Walmsley said the following on 12/18/2009 06:17 AM:
> Move omap2_clk_init_cpufreq_table() to opp_init_cpufreq_table() in opp.c
> where it now belongs.  OMAP2 still needs to be converted to use the OPP layer,
> so it is using the old code.
>   
Neat.. thanks.. helps Omap4 too I can see..
Acked-by: Nishanth Menon <nm@ti.com>
> ---
>  arch/arm/mach-omap2/clock34xx.c       |   55 +--------------------------------
>  arch/arm/plat-omap/cpu-omap.c         |    6 +++-
>  arch/arm/plat-omap/include/plat/opp.h |    4 ++
>  arch/arm/plat-omap/opp.c              |   46 ++++++++++++++++++++++++++++
>  4 files changed, 56 insertions(+), 55 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c
> index ba3dd70..6a40fb1 100644
> --- a/arch/arm/mach-omap2/clock34xx.c
> +++ b/arch/arm/mach-omap2/clock34xx.c
> @@ -27,7 +27,6 @@
>  #include <linux/limits.h>
>  #include <linux/bitops.h>
>  #include <linux/err.h>
> -#include <linux/cpufreq.h>
>  
>  #include <plat/cpu.h>
>  #include <plat/clock.h>
> @@ -257,56 +256,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)
>  
>  /* Common clock code */
>  
> -/*
> - * As it is structured now, this will prevent an OMAP2/3 multiboot
> - * kernel from compiling.  This will need further attention.
> - */
> -#if defined(CONFIG_ARCH_OMAP3)
> -
> -#ifdef CONFIG_CPU_FREQ
> -
> -static struct cpufreq_frequency_table *freq_table;
> -
> -void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table)
> -{
> -	int i = 0;
> -	int opp_num;
> -	struct omap_opp *opp = mpu_opps;
> -	unsigned long freq = ULONG_MAX;
> -
> -	if (!mpu_opps) {
> -		pr_warning("%s: failed to initialize frequency"
> -				"table\n", __func__);
> -		return;
> -	}
> -	opp_num = opp_get_opp_count(mpu_opps);
> -	if (opp_num < 0) {
> -		pr_err("%s: no opp table?\n", __func__);
> -		return;
> -	}
> -
> -	freq_table = kmalloc(sizeof(struct cpufreq_frequency_table) *
> -			(opp_num + 1), GFP_ATOMIC);
> -	if (!freq_table) {
> -		pr_warning("%s: failed to allocate frequency"
> -				"table\n", __func__);
> -		return;
> -	}
> -
> -	while (!IS_ERR(opp = opp_find_freq_floor(opp, &freq))) {
> -		freq_table[i].index = i;
> -		freq_table[i].frequency = freq / 1000;
> -		i++;
> -		/* set the next benchmark to search */
> -		freq--;
> -	}
> -
> -	freq_table[i].index = i;
> -	freq_table[i].frequency = CPUFREQ_TABLE_END;
> -
> -	*table = &freq_table[0];
> -}
> -#endif
> +#ifdef CONFIG_ARCH_OMAP3
>  
>  struct clk_functions omap2_clk_functions = {
>  	.clk_enable		= omap2_clk_enable,
> @@ -315,9 +265,6 @@ struct clk_functions omap2_clk_functions = {
>  	.clk_set_rate		= omap2_clk_set_rate,
>  	.clk_set_parent		= omap2_clk_set_parent,
>  	.clk_disable_unused	= omap2_clk_disable_unused,
> -#ifdef CONFIG_CPU_FREQ
> -	.clk_init_cpufreq_table = omap2_clk_init_cpufreq_table,
> -#endif
>  };
>  
>  /*
> diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c
> index a2b5ee4..723834e 100644
> --- a/arch/arm/plat-omap/cpu-omap.c
> +++ b/arch/arm/plat-omap/cpu-omap.c
> @@ -132,7 +132,11 @@ static int __init omap_cpu_init(struct cpufreq_policy *policy)
>  
>  	policy->cur = policy->min = policy->max = omap_getspeed(0);
>  
> -	clk_init_cpufreq_table(&freq_table);
> +	if (!cpu_is_omap34xx())
> +		clk_init_cpufreq_table(&freq_table);
> +	else
> +		opp_init_cpufreq_table(mpu_opps, &freq_table);
> +
>  	if (freq_table) {
>  		result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
>  		if (!result)
> diff --git a/arch/arm/plat-omap/include/plat/opp.h b/arch/arm/plat-omap/include/plat/opp.h
> index b00f7f9..91b0aa6 100644
> --- a/arch/arm/plat-omap/include/plat/opp.h
> +++ b/arch/arm/plat-omap/include/plat/opp.h
> @@ -240,4 +240,8 @@ int opp_disable(struct omap_opp *opp);
>  struct omap_opp * __deprecated opp_find_by_opp_id(struct omap_opp *opps,
>  						  u8 opp_id);
>  
> +void opp_init_cpufreq_table(struct omap_opp *opps,
> +			    struct cpufreq_frequency_table **table);
> +
> +
>  #endif		/* __ASM_ARM_OMAP_OPP_H */
> diff --git a/arch/arm/plat-omap/opp.c b/arch/arm/plat-omap/opp.c
> index 8bdad43..aaafc10 100644
> --- a/arch/arm/plat-omap/opp.c
> +++ b/arch/arm/plat-omap/opp.c
> @@ -14,6 +14,7 @@
>  #include <linux/err.h>
>  #include <linux/init.h>
>  #include <linux/slab.h>
> +#include <linux/cpufreq.h>
>  
>  #include <plat/opp_twl_tps.h>
>  #include <plat/opp.h>
> @@ -281,3 +282,48 @@ int opp_disable(struct omap_opp *opp)
>  	opp->enabled = false;
>  	return 0;
>  }
> +
> +/* XXX document */
> +void opp_init_cpufreq_table(struct omap_opp *opps,
> +			    struct cpufreq_frequency_table **table)
> +{
> +	int i = 0;
> +	int opp_num;
> +	unsigned long freq = ULONG_MAX;
> +	struct cpufreq_frequency_table *freq_table;
> +
> +	if (!opps) {
> +		pr_warning("%s: failed to initialize frequency"
> +				"table\n", __func__);
> +		return;
> +	}
> +
> +	opp_num = opp_get_opp_count(opps);
> +	if (opp_num < 0) {
> +		pr_err("%s: no opp table?\n", __func__);
> +		return;
> +	}
> +
> +	freq_table = kmalloc(sizeof(struct cpufreq_frequency_table) *
> +			     (opp_num + 1), GFP_ATOMIC);
> +	if (!freq_table) {
> +		pr_warning("%s: failed to allocate frequency"
> +				"table\n", __func__);
> +		return;
> +	}
> +
> +	while (!OPP_TERM(opps)) {
> +		if (opps->enabled) {
> +			freq_table[i].index = i;
> +			freq_table[i].frequency = freq / 1000;
> +			i++;
> +		}
> +
> +		opps++;
> +	}
> +
> +	freq_table[i].index = i;
> +	freq_table[i].frequency = CPUFREQ_TABLE_END;
> +
> +	*table = &freq_table[0];
> +}
>
>
>   


here is a future problem I see:
I think we need notifiers for opp_enable,disable and add -> this will 
allow dynamic opp table modification allowing cpufreq changes accordingly.

Regards,
Nishanth Menon

      reply	other threads:[~2009-12-19 12:22 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20091218004617.7694.84525.stgit@localhost.localdomain>
2009-12-18  0:47 ` [PATCH 01/12] OMAP OPP: remove some unnecessary variables Paul Walmsley
2009-12-18 17:28   ` Kevin Hilman
2009-12-18  0:47 ` [PATCH 02/12] OMAP OPP: split opp_find_freq_approx() into opp_find_freq_{floor, ceil}() Paul Walmsley
2009-12-18  0:47 ` [PATCH 03/12] OMAP OPP: only traverse opp_find_freq_floor() once Paul Walmsley
2009-12-19 12:10   ` Menon, Nishanth
2009-12-18  0:47 ` [PATCH 04/12] OMAP TWL/TPS OPP: move TWL/TPS-specific code to its own file Paul Walmsley
2009-12-19 12:14   ` Menon, Nishanth
2009-12-18  0:47 ` [PATCH 05/12] OMAP TWL/TPS OPP: vsel rounding belongs in opp_twl_tps.c Paul Walmsley
2009-12-19 12:16   ` Menon, Nishanth
2009-12-18  0:47 ` [PATCH 06/12] OMAP OPP: add microvolts DC ("u_volt") field into struct omap_opp Paul Walmsley
2009-12-18  0:47 ` [PATCH 07/12] OMAP OPP: add opp_find_opp_by_opp_id() Paul Walmsley
2009-12-18  0:47 ` [PATCH 08/12] OMAP SR/SRF: use opp_find_opp_by_opp_id() Paul Walmsley
2009-12-18  0:47 ` [PATCH 09/12] OMAP OPP: remove vsel Paul Walmsley
2009-12-18  0:47 ` [PATCH 10/12] OMAP OPP: remove "initial terminators" from OPP lists Paul Walmsley
2009-12-18 19:08   ` Kevin Hilman
2009-12-18  0:47 ` [PATCH 11/12] OMAP OPP: use kzalloc() rather than kmalloc() Paul Walmsley
2009-12-18  0:47 ` [PATCH 12/12] OMAP3 OPP: move CPUFreq table init code to OPP layer Paul Walmsley
2009-12-19 12:22   ` Menon, Nishanth [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B2CC590.4060604@ti.com \
    --to=nm@ti.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=paul@pwsan.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox