Patchwork [3/4] Removing imx6q_opp_init

login
register
mail settings
Submitter John Tobias
Date Dec. 18, 2013, 1:17 a.m.
Message ID <1387329451-17480-3-git-send-email-john.tobias.ph@gmail.com>
Download mbox | patch
Permalink /patch/302605/
State New
Headers show

Comments

John Tobias - Dec. 18, 2013, 1:17 a.m.
Since of_init_opp_table is in imx6q-cpufreq.c, the imx6q_opp_init is no longer needed anymore.
    The only question right now is the imx6q_opp_check_1p2ghz function.

    Is the function below are acceptible under imx6q_init_late?.

    if (!cpu_dev)
        imx6q_opp_check_1p2ghz(cpu_dev);

    If not, what is the better way to impelement because the said function is board specific?.

Signed-off-by: John Tobias <john.tobias.ph@gmail.com>
---
 arch/arm/mach-imx/mach-imx6q.c | 30 ++++--------------------------
 1 file changed, 4 insertions(+), 26 deletions(-)
Shawn Guo - Dec. 18, 2013, 7:49 a.m.
On Tue, Dec 17, 2013 at 05:17:30PM -0800, John Tobias wrote:
>     Since of_init_opp_table is in imx6q-cpufreq.c, the imx6q_opp_init is no longer needed anymore.
>     The only question right now is the imx6q_opp_check_1p2ghz function.
> 
>     Is the function below are acceptible under imx6q_init_late?.
> 
>     if (!cpu_dev)
>         imx6q_opp_check_1p2ghz(cpu_dev);
> 
>     If not, what is the better way to impelement because the said function is board specific?.
> 
> Signed-off-by: John Tobias <john.tobias.ph@gmail.com>
> ---
>  arch/arm/mach-imx/mach-imx6q.c | 30 ++++--------------------------
>  1 file changed, 4 insertions(+), 26 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
> index d0cfb22..f5d9e04 100644
> --- a/arch/arm/mach-imx/mach-imx6q.c
> +++ b/arch/arm/mach-imx/mach-imx6q.c
> @@ -183,31 +183,6 @@ put_node:
>  	of_node_put(np);
>  }
>  
> -static void __init imx6q_opp_init(void)
> -{
> -	struct device_node *np;
> -	struct device *cpu_dev = get_cpu_device(0);
> -
> -	if (!cpu_dev) {
> -		pr_warn("failed to get cpu0 device\n");
> -		return;
> -	}
> -	np = of_node_get(cpu_dev->of_node);
> -	if (!np) {
> -		pr_warn("failed to find cpu0 node\n");
> -		return;
> -	}
> -
> -	if (of_init_opp_table(cpu_dev)) {
> -		pr_warn("failed to init OPP table\n");
> -		goto put_node;
> -	}
> -
> -	imx6q_opp_check_1p2ghz(cpu_dev);
> -
> -put_node:
> -	of_node_put(np);
> -}
>  
>  static struct platform_device imx6q_cpufreq_pdev = {
>  	.name = "imx6q-cpufreq",
> @@ -215,6 +190,7 @@ static struct platform_device imx6q_cpufreq_pdev = {
>  
>  static void __init imx6q_init_late(void)
>  {
> +	struct device *cpu_dev = get_cpu_device(0);
>  	/*
>  	 * WAIT mode is broken on TO 1.0 and 1.1, so there is no point
>  	 * to run cpuidle on them.
> @@ -223,8 +199,10 @@ static void __init imx6q_init_late(void)
>  		imx6q_cpuidle_init();
>  
>  	if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) {
> -		imx6q_opp_init();
>  		platform_device_register(&imx6q_cpufreq_pdev);
> +		
> +		if (!cpu_dev)
> +			imx6q_opp_check_1p2ghz(cpu_dev);

imx6q_opp_check_1p2ghz() only works after of_init_opp_table() is called.
So you shouldn't make these changes in mach-imx6q.c, but in cpufreq
driver check if platform already supplies an opp table, and only calls
of_init_opp_table() in driver in case that platform hasn't.  Then, for
imx6q case where opp table is supplied by platform, driver will skip
of_init_opp_table() call, while for imx6sl case where platform does not
handle opp table, driver will just call of_init_opp_table().

Shawn

>  	}
>  }
>  
> -- 
> 1.8.3.2
>
John Tobias - Dec. 18, 2013, 4:25 p.m.
Got it.

thanks

john

On Tue, Dec 17, 2013 at 11:49 PM, Shawn Guo <shawn.guo@linaro.org> wrote:
> On Tue, Dec 17, 2013 at 05:17:30PM -0800, John Tobias wrote:
>>     Since of_init_opp_table is in imx6q-cpufreq.c, the imx6q_opp_init is no longer needed anymore.
>>     The only question right now is the imx6q_opp_check_1p2ghz function.
>>
>>     Is the function below are acceptible under imx6q_init_late?.
>>
>>     if (!cpu_dev)
>>         imx6q_opp_check_1p2ghz(cpu_dev);
>>
>>     If not, what is the better way to impelement because the said function is board specific?.
>>
>> Signed-off-by: John Tobias <john.tobias.ph@gmail.com>
>> ---
>>  arch/arm/mach-imx/mach-imx6q.c | 30 ++++--------------------------
>>  1 file changed, 4 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
>> index d0cfb22..f5d9e04 100644
>> --- a/arch/arm/mach-imx/mach-imx6q.c
>> +++ b/arch/arm/mach-imx/mach-imx6q.c
>> @@ -183,31 +183,6 @@ put_node:
>>       of_node_put(np);
>>  }
>>
>> -static void __init imx6q_opp_init(void)
>> -{
>> -     struct device_node *np;
>> -     struct device *cpu_dev = get_cpu_device(0);
>> -
>> -     if (!cpu_dev) {
>> -             pr_warn("failed to get cpu0 device\n");
>> -             return;
>> -     }
>> -     np = of_node_get(cpu_dev->of_node);
>> -     if (!np) {
>> -             pr_warn("failed to find cpu0 node\n");
>> -             return;
>> -     }
>> -
>> -     if (of_init_opp_table(cpu_dev)) {
>> -             pr_warn("failed to init OPP table\n");
>> -             goto put_node;
>> -     }
>> -
>> -     imx6q_opp_check_1p2ghz(cpu_dev);
>> -
>> -put_node:
>> -     of_node_put(np);
>> -}
>>
>>  static struct platform_device imx6q_cpufreq_pdev = {
>>       .name = "imx6q-cpufreq",
>> @@ -215,6 +190,7 @@ static struct platform_device imx6q_cpufreq_pdev = {
>>
>>  static void __init imx6q_init_late(void)
>>  {
>> +     struct device *cpu_dev = get_cpu_device(0);
>>       /*
>>        * WAIT mode is broken on TO 1.0 and 1.1, so there is no point
>>        * to run cpuidle on them.
>> @@ -223,8 +199,10 @@ static void __init imx6q_init_late(void)
>>               imx6q_cpuidle_init();
>>
>>       if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) {
>> -             imx6q_opp_init();
>>               platform_device_register(&imx6q_cpufreq_pdev);
>> +
>> +             if (!cpu_dev)
>> +                     imx6q_opp_check_1p2ghz(cpu_dev);
>
> imx6q_opp_check_1p2ghz() only works after of_init_opp_table() is called.
> So you shouldn't make these changes in mach-imx6q.c, but in cpufreq
> driver check if platform already supplies an opp table, and only calls
> of_init_opp_table() in driver in case that platform hasn't.  Then, for
> imx6q case where opp table is supplied by platform, driver will skip
> of_init_opp_table() call, while for imx6sl case where platform does not
> handle opp table, driver will just call of_init_opp_table().
>
> Shawn
>
>>       }
>>  }
>>
>> --
>> 1.8.3.2
>>
>

Patch

diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index d0cfb22..f5d9e04 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -183,31 +183,6 @@  put_node:
 	of_node_put(np);
 }
 
-static void __init imx6q_opp_init(void)
-{
-	struct device_node *np;
-	struct device *cpu_dev = get_cpu_device(0);
-
-	if (!cpu_dev) {
-		pr_warn("failed to get cpu0 device\n");
-		return;
-	}
-	np = of_node_get(cpu_dev->of_node);
-	if (!np) {
-		pr_warn("failed to find cpu0 node\n");
-		return;
-	}
-
-	if (of_init_opp_table(cpu_dev)) {
-		pr_warn("failed to init OPP table\n");
-		goto put_node;
-	}
-
-	imx6q_opp_check_1p2ghz(cpu_dev);
-
-put_node:
-	of_node_put(np);
-}
 
 static struct platform_device imx6q_cpufreq_pdev = {
 	.name = "imx6q-cpufreq",
@@ -215,6 +190,7 @@  static struct platform_device imx6q_cpufreq_pdev = {
 
 static void __init imx6q_init_late(void)
 {
+	struct device *cpu_dev = get_cpu_device(0);
 	/*
 	 * WAIT mode is broken on TO 1.0 and 1.1, so there is no point
 	 * to run cpuidle on them.
@@ -223,8 +199,10 @@  static void __init imx6q_init_late(void)
 		imx6q_cpuidle_init();
 
 	if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) {
-		imx6q_opp_init();
 		platform_device_register(&imx6q_cpufreq_pdev);
+		
+		if (!cpu_dev)
+			imx6q_opp_check_1p2ghz(cpu_dev);
 	}
 }