diff mbox

[v2,6/6] cpufreq: tegra124-cpufreq: extend to support Tegra210

Message ID 1516797938-32044-8-git-send-email-pdeschrijver@nvidia.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Peter De Schrijver Jan. 24, 2018, 12:45 p.m. UTC
Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
support in this driver. Also allow for the case where the CPU voltage is
controlled directly by the DFLL rather than by a separate regulator object.

Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
---
 drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

Comments

Jon Hunter Jan. 31, 2018, 11:06 a.m. UTC | #1
On 24/01/18 12:45, Peter De Schrijver wrote:
> Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> support in this driver. Also allow for the case where the CPU voltage is
> controlled directly by the DFLL rather than by a separate regulator object.
> 
> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> ---
>  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> index 4353025..d631dc4 100644
> --- a/drivers/cpufreq/tegra124-cpufreq.c
> +++ b/drivers/cpufreq/tegra124-cpufreq.c
> @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
>  {
>  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
>  	clk_disable_unprepare(priv->dfll_clk);
> -	regulator_sync_voltage(priv->vdd_cpu_reg);
> +	if (priv->vdd_cpu_reg)
> +		regulator_sync_voltage(priv->vdd_cpu_reg);
>  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
>  }
>  
> @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
>  		return -ENODEV;
>  
>  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> -	if (IS_ERR(priv->vdd_cpu_reg)) {
> -		ret = PTR_ERR(priv->vdd_cpu_reg);
> -		goto out_put_np;
> -	}
> +	if (IS_ERR(priv->vdd_cpu_reg))
> +		priv->vdd_cpu_reg = NULL;
>  

For Tegra124, don't we still want to return an error here?

>  	priv->cpu_clk = of_clk_get_by_name(np, "cpu_g");
>  	if (IS_ERR(priv->cpu_clk)) {
> @@ -148,7 +147,6 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
>  	clk_put(priv->cpu_clk);
>  out_put_vdd_cpu_reg:
>  	regulator_put(priv->vdd_cpu_reg);
> -out_put_np:
>  	of_node_put(np);
>  
>  	return ret;
> @@ -181,7 +179,8 @@ static int __init tegra_cpufreq_init(void)
>  	int ret;
>  	struct platform_device *pdev;
>  
> -	if (!of_machine_is_compatible("nvidia,tegra124"))
> +	if (!(of_machine_is_compatible("nvidia,tegra124")
> +		|| of_machine_is_compatible("nvidia,tegra210")))
>  		return -ENODEV;
>  
>  	/*
> 

Cheers
Jon
Peter De Schrijver Feb. 1, 2018, 9:25 a.m. UTC | #2
On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
> 
> On 24/01/18 12:45, Peter De Schrijver wrote:
> > Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> > support in this driver. Also allow for the case where the CPU voltage is
> > controlled directly by the DFLL rather than by a separate regulator object.
> > 
> > Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> > ---
> >  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
> >  1 file changed, 6 insertions(+), 7 deletions(-)
> > 
> > diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> > index 4353025..d631dc4 100644
> > --- a/drivers/cpufreq/tegra124-cpufreq.c
> > +++ b/drivers/cpufreq/tegra124-cpufreq.c
> > @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
> >  {
> >  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
> >  	clk_disable_unprepare(priv->dfll_clk);
> > -	regulator_sync_voltage(priv->vdd_cpu_reg);
> > +	if (priv->vdd_cpu_reg)
> > +		regulator_sync_voltage(priv->vdd_cpu_reg);
> >  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
> >  }
> >  
> > @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> >  		return -ENODEV;
> >  
> >  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> > -	if (IS_ERR(priv->vdd_cpu_reg)) {
> > -		ret = PTR_ERR(priv->vdd_cpu_reg);
> > -		goto out_put_np;
> > -	}
> > +	if (IS_ERR(priv->vdd_cpu_reg))
> > +		priv->vdd_cpu_reg = NULL;
> >  
> 
> For Tegra124, don't we still want to return an error here?

Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
can be reworked to use this.

Peter.

> 
> >  	priv->cpu_clk = of_clk_get_by_name(np, "cpu_g");
> >  	if (IS_ERR(priv->cpu_clk)) {
> > @@ -148,7 +147,6 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> >  	clk_put(priv->cpu_clk);
> >  out_put_vdd_cpu_reg:
> >  	regulator_put(priv->vdd_cpu_reg);
> > -out_put_np:
> >  	of_node_put(np);
> >  
> >  	return ret;
> > @@ -181,7 +179,8 @@ static int __init tegra_cpufreq_init(void)
> >  	int ret;
> >  	struct platform_device *pdev;
> >  
> > -	if (!of_machine_is_compatible("nvidia,tegra124"))
> > +	if (!(of_machine_is_compatible("nvidia,tegra124")
> > +		|| of_machine_is_compatible("nvidia,tegra210")))
> >  		return -ENODEV;
> >  
> >  	/*
> > 
> 
> Cheers
> Jon
> 
> -- 
> nvpublic
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jon Hunter Feb. 1, 2018, 9:53 a.m. UTC | #3
On 01/02/18 09:25, Peter De Schrijver wrote:
> On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
>>
>> On 24/01/18 12:45, Peter De Schrijver wrote:
>>> Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
>>> support in this driver. Also allow for the case where the CPU voltage is
>>> controlled directly by the DFLL rather than by a separate regulator object.
>>>
>>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
>>> ---
>>>  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
>>>  1 file changed, 6 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
>>> index 4353025..d631dc4 100644
>>> --- a/drivers/cpufreq/tegra124-cpufreq.c
>>> +++ b/drivers/cpufreq/tegra124-cpufreq.c
>>> @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
>>>  {
>>>  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
>>>  	clk_disable_unprepare(priv->dfll_clk);
>>> -	regulator_sync_voltage(priv->vdd_cpu_reg);
>>> +	if (priv->vdd_cpu_reg)
>>> +		regulator_sync_voltage(priv->vdd_cpu_reg);
>>>  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
>>>  }
>>>  
>>> @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
>>>  		return -ENODEV;
>>>  
>>>  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
>>> -	if (IS_ERR(priv->vdd_cpu_reg)) {
>>> -		ret = PTR_ERR(priv->vdd_cpu_reg);
>>> -		goto out_put_np;
>>> -	}
>>> +	if (IS_ERR(priv->vdd_cpu_reg))
>>> +		priv->vdd_cpu_reg = NULL;
>>>  
>>
>> For Tegra124, don't we still want to return an error here?
> 
> Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
> can be reworked to use this.

Seems to me that we should use DT or soc-data to specify which is being
used and then do the appropriate thing. I don't think that we should
assume that because the regulator is not present we are using PWM.

Cheers
Jon
Peter De Schrijver Feb. 1, 2018, 10:15 a.m. UTC | #4
On Thu, Feb 01, 2018 at 09:53:43AM +0000, Jon Hunter wrote:
> 
> On 01/02/18 09:25, Peter De Schrijver wrote:
> > On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
> >>
> >> On 24/01/18 12:45, Peter De Schrijver wrote:
> >>> Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> >>> support in this driver. Also allow for the case where the CPU voltage is
> >>> controlled directly by the DFLL rather than by a separate regulator object.
> >>>
> >>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> >>> ---
> >>>  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
> >>>  1 file changed, 6 insertions(+), 7 deletions(-)
> >>>
> >>> diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> >>> index 4353025..d631dc4 100644
> >>> --- a/drivers/cpufreq/tegra124-cpufreq.c
> >>> +++ b/drivers/cpufreq/tegra124-cpufreq.c
> >>> @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
> >>>  {
> >>>  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
> >>>  	clk_disable_unprepare(priv->dfll_clk);
> >>> -	regulator_sync_voltage(priv->vdd_cpu_reg);
> >>> +	if (priv->vdd_cpu_reg)
> >>> +		regulator_sync_voltage(priv->vdd_cpu_reg);
> >>>  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
> >>>  }
> >>>  
> >>> @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> >>>  		return -ENODEV;
> >>>  
> >>>  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> >>> -	if (IS_ERR(priv->vdd_cpu_reg)) {
> >>> -		ret = PTR_ERR(priv->vdd_cpu_reg);
> >>> -		goto out_put_np;
> >>> -	}
> >>> +	if (IS_ERR(priv->vdd_cpu_reg))
> >>> +		priv->vdd_cpu_reg = NULL;
> >>>  
> >>
> >> For Tegra124, don't we still want to return an error here?
> > 
> > Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
> > can be reworked to use this.
> 
> Seems to me that we should use DT or soc-data to specify which is being
> used and then do the appropriate thing. I don't think that we should
> assume that because the regulator is not present we are using PWM.

I think we should rather move the sync logic into the DFLL driver in some
future series. The DFLL driver does know about PWM vs I2C regulator.

Peter.
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jon Hunter Feb. 1, 2018, 10:22 a.m. UTC | #5
On 01/02/18 10:15, Peter De Schrijver wrote:
> On Thu, Feb 01, 2018 at 09:53:43AM +0000, Jon Hunter wrote:
>>
>> On 01/02/18 09:25, Peter De Schrijver wrote:
>>> On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
>>>>
>>>> On 24/01/18 12:45, Peter De Schrijver wrote:
>>>>> Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
>>>>> support in this driver. Also allow for the case where the CPU voltage is
>>>>> controlled directly by the DFLL rather than by a separate regulator object.
>>>>>
>>>>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
>>>>> ---
>>>>>  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
>>>>>  1 file changed, 6 insertions(+), 7 deletions(-)
>>>>>
>>>>> diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
>>>>> index 4353025..d631dc4 100644
>>>>> --- a/drivers/cpufreq/tegra124-cpufreq.c
>>>>> +++ b/drivers/cpufreq/tegra124-cpufreq.c
>>>>> @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
>>>>>  {
>>>>>  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
>>>>>  	clk_disable_unprepare(priv->dfll_clk);
>>>>> -	regulator_sync_voltage(priv->vdd_cpu_reg);
>>>>> +	if (priv->vdd_cpu_reg)
>>>>> +		regulator_sync_voltage(priv->vdd_cpu_reg);
>>>>>  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
>>>>>  }
>>>>>  
>>>>> @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
>>>>>  		return -ENODEV;
>>>>>  
>>>>>  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
>>>>> -	if (IS_ERR(priv->vdd_cpu_reg)) {
>>>>> -		ret = PTR_ERR(priv->vdd_cpu_reg);
>>>>> -		goto out_put_np;
>>>>> -	}
>>>>> +	if (IS_ERR(priv->vdd_cpu_reg))
>>>>> +		priv->vdd_cpu_reg = NULL;
>>>>>  
>>>>
>>>> For Tegra124, don't we still want to return an error here?
>>>
>>> Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
>>> can be reworked to use this.
>>
>> Seems to me that we should use DT or soc-data to specify which is being
>> used and then do the appropriate thing. I don't think that we should
>> assume that because the regulator is not present we are using PWM.
> 
> I think we should rather move the sync logic into the DFLL driver in some
> future series. The DFLL driver does know about PWM vs I2C regulator.

Not sure I following what you mean by 'sync logic'. Also did you mean
the DFLL driver does NOT know about PWM vs I2C? However, we still know
at probe time what is used right?

Cheers
Jon
Peter De Schrijver Feb. 1, 2018, 10:31 a.m. UTC | #6
On Thu, Feb 01, 2018 at 10:22:11AM +0000, Jon Hunter wrote:
> 
> On 01/02/18 10:15, Peter De Schrijver wrote:
> > On Thu, Feb 01, 2018 at 09:53:43AM +0000, Jon Hunter wrote:
> >>
> >> On 01/02/18 09:25, Peter De Schrijver wrote:
> >>> On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
> >>>>
> >>>> On 24/01/18 12:45, Peter De Schrijver wrote:
> >>>>> Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> >>>>> support in this driver. Also allow for the case where the CPU voltage is
> >>>>> controlled directly by the DFLL rather than by a separate regulator object.
> >>>>>
> >>>>> Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
> >>>>> ---
> >>>>>  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
> >>>>>  1 file changed, 6 insertions(+), 7 deletions(-)
> >>>>>
> >>>>> diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> >>>>> index 4353025..d631dc4 100644
> >>>>> --- a/drivers/cpufreq/tegra124-cpufreq.c
> >>>>> +++ b/drivers/cpufreq/tegra124-cpufreq.c
> >>>>> @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
> >>>>>  {
> >>>>>  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
> >>>>>  	clk_disable_unprepare(priv->dfll_clk);
> >>>>> -	regulator_sync_voltage(priv->vdd_cpu_reg);
> >>>>> +	if (priv->vdd_cpu_reg)
> >>>>> +		regulator_sync_voltage(priv->vdd_cpu_reg);
> >>>>>  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
> >>>>>  }
> >>>>>  
> >>>>> @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> >>>>>  		return -ENODEV;
> >>>>>  
> >>>>>  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> >>>>> -	if (IS_ERR(priv->vdd_cpu_reg)) {
> >>>>> -		ret = PTR_ERR(priv->vdd_cpu_reg);
> >>>>> -		goto out_put_np;
> >>>>> -	}
> >>>>> +	if (IS_ERR(priv->vdd_cpu_reg))
> >>>>> +		priv->vdd_cpu_reg = NULL;
> >>>>>  
> >>>>
> >>>> For Tegra124, don't we still want to return an error here?
> >>>
> >>> Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
> >>> can be reworked to use this.
> >>
> >> Seems to me that we should use DT or soc-data to specify which is being
> >> used and then do the appropriate thing. I don't think that we should
> >> assume that because the regulator is not present we are using PWM.
> > 
> > I think we should rather move the sync logic into the DFLL driver in some
> > future series. The DFLL driver does know about PWM vs I2C regulator.
> 
> Not sure I following what you mean by 'sync logic'. Also did you mean

I meant the code in tegra124_cpu_switch_to_pllx() which ensures vdd_cpu
voltage is set correctly when we switch back to pll_x.

> the DFLL driver does NOT know about PWM vs I2C? However, we still know
> at probe time what is used right?

No, I meant the DFLL driver does know about PWM vs I2C, but the cpufreq
driver does not.

Peter.

> 
> Cheers
> Jon
> 
> -- 
> nvpublic
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tuomas Tynkkynen Feb. 6, 2018, 12:27 p.m. UTC | #7
(Attempting to post through Gmane - let's see if this works at all).

On Thu, 1 Feb 2018 11:25:20 +0200
Peter De Schrijver <pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:

> On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
> > 
> > On 24/01/18 12:45, Peter De Schrijver wrote:  
> > > Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> > > support in this driver. Also allow for the case where the CPU voltage is
> > > controlled directly by the DFLL rather than by a separate regulator object.
> > > 
> > > Signed-off-by: Peter De Schrijver <pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> > > ---
> > >  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
> > >  1 file changed, 6 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> > > index 4353025..d631dc4 100644
> > > --- a/drivers/cpufreq/tegra124-cpufreq.c
> > > +++ b/drivers/cpufreq/tegra124-cpufreq.c
> > > @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
> > >  {
> > >  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
> > >  	clk_disable_unprepare(priv->dfll_clk);
> > > -	regulator_sync_voltage(priv->vdd_cpu_reg);
> > > +	if (priv->vdd_cpu_reg)
> > > +		regulator_sync_voltage(priv->vdd_cpu_reg);
> > >  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
> > >  }
> > >  
> > > @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> > >  		return -ENODEV;
> > >  
> > >  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> > > -	if (IS_ERR(priv->vdd_cpu_reg)) {
> > > -		ret = PTR_ERR(priv->vdd_cpu_reg);
> > > -		goto out_put_np;
> > > -	}
> > > +	if (IS_ERR(priv->vdd_cpu_reg))
> > > +		priv->vdd_cpu_reg = NULL;
> > >    
> > 
> > For Tegra124, don't we still want to return an error here?  
> 
> Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
> can be reworked to use this.
> 
> Peter.
> 

Regardless of that, you need to bail out on -EPROBE_DEFER I think.
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter De Schrijver Feb. 6, 2018, 4:28 p.m. UTC | #8
On Tue, Feb 06, 2018 at 02:27:20PM +0200, Tuomas Tynkkynen wrote:
> (Attempting to post through Gmane - let's see if this works at all).
> 
> On Thu, 1 Feb 2018 11:25:20 +0200
> Peter De Schrijver <pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> wrote:
> 
> > On Wed, Jan 31, 2018 at 11:06:36AM +0000, Jon Hunter wrote:
> > > 
> > > On 24/01/18 12:45, Peter De Schrijver wrote:  
> > > > Tegra210 has a very similar CPU clocking scheme than Tegra124. So add
> > > > support in this driver. Also allow for the case where the CPU voltage is
> > > > controlled directly by the DFLL rather than by a separate regulator object.
> > > > 
> > > > Signed-off-by: Peter De Schrijver <pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> > > > ---
> > > >  drivers/cpufreq/tegra124-cpufreq.c | 13 ++++++-------
> > > >  1 file changed, 6 insertions(+), 7 deletions(-)
> > > > 
> > > > diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
> > > > index 4353025..d631dc4 100644
> > > > --- a/drivers/cpufreq/tegra124-cpufreq.c
> > > > +++ b/drivers/cpufreq/tegra124-cpufreq.c
> > > > @@ -64,7 +64,8 @@ static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
> > > >  {
> > > >  	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
> > > >  	clk_disable_unprepare(priv->dfll_clk);
> > > > -	regulator_sync_voltage(priv->vdd_cpu_reg);
> > > > +	if (priv->vdd_cpu_reg)
> > > > +		regulator_sync_voltage(priv->vdd_cpu_reg);
> > > >  	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
> > > >  }
> > > >  
> > > > @@ -89,10 +90,8 @@ static int tegra124_cpufreq_probe(struct platform_device *pdev)
> > > >  		return -ENODEV;
> > > >  
> > > >  	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
> > > > -	if (IS_ERR(priv->vdd_cpu_reg)) {
> > > > -		ret = PTR_ERR(priv->vdd_cpu_reg);
> > > > -		goto out_put_np;
> > > > -	}
> > > > +	if (IS_ERR(priv->vdd_cpu_reg))
> > > > +		priv->vdd_cpu_reg = NULL;
> > > >    
> > > 
> > > For Tegra124, don't we still want to return an error here?  
> > 
> > Not necessarily. Also on Tegra124 the DFLL can use PWM and I think jetson TK1
> > can be reworked to use this.
> > 
> > Peter.
> > 
> 
> Regardless of that, you need to bail out on -EPROBE_DEFER I think.

Ah yes, likely. That said the code isn't correct because the voltage margin
when using PLLX is higher than when using CL-DVFS..

Peter.
--
To unsubscribe from this list: send the line "unsubscribe linux-clk" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/cpufreq/tegra124-cpufreq.c b/drivers/cpufreq/tegra124-cpufreq.c
index 4353025..d631dc4 100644
--- a/drivers/cpufreq/tegra124-cpufreq.c
+++ b/drivers/cpufreq/tegra124-cpufreq.c
@@ -64,7 +64,8 @@  static void tegra124_cpu_switch_to_pllx(struct tegra124_cpufreq_priv *priv)
 {
 	clk_set_parent(priv->cpu_clk, priv->pllp_clk);
 	clk_disable_unprepare(priv->dfll_clk);
-	regulator_sync_voltage(priv->vdd_cpu_reg);
+	if (priv->vdd_cpu_reg)
+		regulator_sync_voltage(priv->vdd_cpu_reg);
 	clk_set_parent(priv->cpu_clk, priv->pllx_clk);
 }
 
@@ -89,10 +90,8 @@  static int tegra124_cpufreq_probe(struct platform_device *pdev)
 		return -ENODEV;
 
 	priv->vdd_cpu_reg = regulator_get(cpu_dev, "vdd-cpu");
-	if (IS_ERR(priv->vdd_cpu_reg)) {
-		ret = PTR_ERR(priv->vdd_cpu_reg);
-		goto out_put_np;
-	}
+	if (IS_ERR(priv->vdd_cpu_reg))
+		priv->vdd_cpu_reg = NULL;
 
 	priv->cpu_clk = of_clk_get_by_name(np, "cpu_g");
 	if (IS_ERR(priv->cpu_clk)) {
@@ -148,7 +147,6 @@  static int tegra124_cpufreq_probe(struct platform_device *pdev)
 	clk_put(priv->cpu_clk);
 out_put_vdd_cpu_reg:
 	regulator_put(priv->vdd_cpu_reg);
-out_put_np:
 	of_node_put(np);
 
 	return ret;
@@ -181,7 +179,8 @@  static int __init tegra_cpufreq_init(void)
 	int ret;
 	struct platform_device *pdev;
 
-	if (!of_machine_is_compatible("nvidia,tegra124"))
+	if (!(of_machine_is_compatible("nvidia,tegra124")
+		|| of_machine_is_compatible("nvidia,tegra210")))
 		return -ENODEV;
 
 	/*