[PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks

Konrad Dybcio posted 2 patches 2 years, 8 months ago
[PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 8 months ago
The config/periph/system NoC clocks are wholly controlled by the
RPM firmware and Linux should never ever alter their configuration.

Switch them over to read-only ops to avoid that.

Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 drivers/clk/qcom/gcc-msm8996.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
index 5e44d1bcca9e..588e3b67657a 100644
--- a/drivers/clk/qcom/gcc-msm8996.c
+++ b/drivers/clk/qcom/gcc-msm8996.c
@@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
 		.name = "system_noc_clk_src",
 		.parent_data = gcc_xo_gpll0_gpll0_early_div,
 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
-		.ops = &clk_rcg2_ops,
+		.ops = &clk_rcg2_ro_ops,
 	},
 };
 
@@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
 		.name = "config_noc_clk_src",
 		.parent_data = gcc_xo_gpll0,
 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
-		.ops = &clk_rcg2_ops,
+		.ops = &clk_rcg2_ro_ops,
 	},
 };
 
@@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
 		.name = "periph_noc_clk_src",
 		.parent_data = gcc_xo_gpll0,
 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
-		.ops = &clk_rcg2_ops,
+		.ops = &clk_rcg2_ro_ops,
 	},
 };
 

-- 
2.41.0
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Bjorn Andersson 2 years, 8 months ago
On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
> The config/periph/system NoC clocks are wholly controlled by the
> RPM firmware and Linux should never ever alter their configuration.
> 

Does Linux need to know about them?

Regards,
Bjorn

> Switch them over to read-only ops to avoid that.
> 
> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> ---
>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
> index 5e44d1bcca9e..588e3b67657a 100644
> --- a/drivers/clk/qcom/gcc-msm8996.c
> +++ b/drivers/clk/qcom/gcc-msm8996.c
> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
>  		.name = "system_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  
> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
>  		.name = "config_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  
> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
>  		.name = "periph_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  
> 
> -- 
> 2.41.0
>
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 8 months ago

On 13.06.2023 19:56, Bjorn Andersson wrote:
> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
>> The config/periph/system NoC clocks are wholly controlled by the
>> RPM firmware and Linux should never ever alter their configuration.
>>
> 
> Does Linux need to know about them?
Not really, but it allows us to get rates of their children.

We can get rid of them if one can argue debugcc is enough. Unless
we need clk_get_rate for some reason.

Konrad
> 
> Regards,
> Bjorn
> 
>> Switch them over to read-only ops to avoid that.
>>
>> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
>> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
>> ---
>>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
>> index 5e44d1bcca9e..588e3b67657a 100644
>> --- a/drivers/clk/qcom/gcc-msm8996.c
>> +++ b/drivers/clk/qcom/gcc-msm8996.c
>> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
>>  		.name = "system_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
>> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
>>  		.name = "config_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
>> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
>>  		.name = "periph_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
>>
>> -- 
>> 2.41.0
>>
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 6 months ago
On 13.06.2023 19:54, Konrad Dybcio wrote:
> 
> 
> On 13.06.2023 19:56, Bjorn Andersson wrote:
>> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
>>> The config/periph/system NoC clocks are wholly controlled by the
>>> RPM firmware and Linux should never ever alter their configuration.
>>>
>>
>> Does Linux need to know about them?
> Not really, but it allows us to get rates of their children.
> 
> We can get rid of them if one can argue debugcc is enough. Unless
> we need clk_get_rate for some reason.
> 
Any opinions?

Konrad
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 5 months ago
On 31.07.2023 13:01, Konrad Dybcio wrote:
> On 13.06.2023 19:54, Konrad Dybcio wrote:
>>
>>
>> On 13.06.2023 19:56, Bjorn Andersson wrote:
>>> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
>>>> The config/periph/system NoC clocks are wholly controlled by the
>>>> RPM firmware and Linux should never ever alter their configuration.
>>>>
>>>
>>> Does Linux need to know about them?
>> Not really, but it allows us to get rates of their children.
>>
>> We can get rid of them if one can argue debugcc is enough. Unless
>> we need clk_get_rate for some reason.
>>
> Any opinions?
So, do we drop them?

Konrad
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Dmitry Baryshkov 2 years, 5 months ago
On Thu, 24 Aug 2023 at 13:28, Konrad Dybcio <konrad.dybcio@linaro.org> wrote:
>
> On 31.07.2023 13:01, Konrad Dybcio wrote:
> > On 13.06.2023 19:54, Konrad Dybcio wrote:
> >>
> >>
> >> On 13.06.2023 19:56, Bjorn Andersson wrote:
> >>> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
> >>>> The config/periph/system NoC clocks are wholly controlled by the
> >>>> RPM firmware and Linux should never ever alter their configuration.
> >>>>
> >>>
> >>> Does Linux need to know about them?
> >> Not really, but it allows us to get rates of their children.
> >>
> >> We can get rid of them if one can argue debugcc is enough. Unless
> >> we need clk_get_rate for some reason.
> >>
> > Any opinions?
> So, do we drop them?

My opinion would be to drop the NoC clocks unless there is any extra
value (like child clocks).

-- 
With best wishes
Dmitry
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Stephan Gerhold 2 years, 8 months ago
On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
> The config/periph/system NoC clocks are wholly controlled by the
> RPM firmware and Linux should never ever alter their configuration.
> 
> Switch them over to read-only ops to avoid that.
> 
> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> ---
>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
> index 5e44d1bcca9e..588e3b67657a 100644
> --- a/drivers/clk/qcom/gcc-msm8996.c
> +++ b/drivers/clk/qcom/gcc-msm8996.c
> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
>  		.name = "system_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  
> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
>  		.name = "config_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  
> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
>  		.name = "periph_noc_clk_src",
>  		.parent_data = gcc_xo_gpll0,
>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> -		.ops = &clk_rcg2_ops,
> +		.ops = &clk_rcg2_ro_ops,
>  	},
>  };
>  

If the rcg is read-only then it shouldn't need a .freq_tbl (the
.recalc_rate() works without it). These clocks have one for some reason.

Maybe we should also set .flags = CLK_GET_RATE_NOCACHE to ensure that
clk_get_rate() doesn't return some stale value? Although I'm not sure if
it's enough to set it here or if it would need to be set on all child
clocks as well.

Thanks,
Stephan
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 8 months ago

On 12.06.2023 12:17, Stephan Gerhold wrote:
> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
>> The config/periph/system NoC clocks are wholly controlled by the
>> RPM firmware and Linux should never ever alter their configuration.
>>
>> Switch them over to read-only ops to avoid that.
>>
>> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
>> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
>> ---
>>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
>> index 5e44d1bcca9e..588e3b67657a 100644
>> --- a/drivers/clk/qcom/gcc-msm8996.c
>> +++ b/drivers/clk/qcom/gcc-msm8996.c
>> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
>>  		.name = "system_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
>> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
>>  		.name = "config_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
>> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
>>  		.name = "periph_noc_clk_src",
>>  		.parent_data = gcc_xo_gpll0,
>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>> -		.ops = &clk_rcg2_ops,
>> +		.ops = &clk_rcg2_ro_ops,
>>  	},
>>  };
>>  
> 
> If the rcg is read-only then it shouldn't need a .freq_tbl (the
> .recalc_rate() works without it). These clocks have one for some reason.
.get_parent needs it

> 
> Maybe we should also set .flags = CLK_GET_RATE_NOCACHE to ensure that
> clk_get_rate() doesn't return some stale value? Although I'm not sure if
> it's enough to set it here or if it would need to be set on all child
> clocks as well.
Hm, I'm not sure if it makes sense for the children..

Konrad

> 
> Thanks,
> Stephan
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Stephan Gerhold 2 years, 8 months ago
On Mon, Jun 12, 2023 at 01:46:26PM +0200, Konrad Dybcio wrote:
> On 12.06.2023 12:17, Stephan Gerhold wrote:
> > On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
> >> The config/periph/system NoC clocks are wholly controlled by the
> >> RPM firmware and Linux should never ever alter their configuration.
> >>
> >> Switch them over to read-only ops to avoid that.
> >>
> >> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
> >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> >> ---
> >>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
> >>  1 file changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
> >> index 5e44d1bcca9e..588e3b67657a 100644
> >> --- a/drivers/clk/qcom/gcc-msm8996.c
> >> +++ b/drivers/clk/qcom/gcc-msm8996.c
> >> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
> >>  		.name = "system_noc_clk_src",
> >>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
> >>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
> >> -		.ops = &clk_rcg2_ops,
> >> +		.ops = &clk_rcg2_ro_ops,
> >>  	},
> >>  };
> >>  
> >> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
> >>  		.name = "config_noc_clk_src",
> >>  		.parent_data = gcc_xo_gpll0,
> >>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> >> -		.ops = &clk_rcg2_ops,
> >> +		.ops = &clk_rcg2_ro_ops,
> >>  	},
> >>  };
> >>  
> >> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
> >>  		.name = "periph_noc_clk_src",
> >>  		.parent_data = gcc_xo_gpll0,
> >>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
> >> -		.ops = &clk_rcg2_ops,
> >> +		.ops = &clk_rcg2_ro_ops,
> >>  	},
> >>  };
> >>  
> > 
> > If the rcg is read-only then it shouldn't need a .freq_tbl (the
> > .recalc_rate() works without it). These clocks have one for some reason.
> .get_parent needs it
> 

Hm? .get_parent uses the ->parent_map but not the ->freq_tbl as far as I
can see. :)

Stephan
Re: [PATCH 2/2] clk: qcom: gcc-msm8996: Use read-only RCG ops for RPM bus clocks
Posted by Konrad Dybcio 2 years, 8 months ago

On 12.06.2023 14:23, Stephan Gerhold wrote:
> On Mon, Jun 12, 2023 at 01:46:26PM +0200, Konrad Dybcio wrote:
>> On 12.06.2023 12:17, Stephan Gerhold wrote:
>>> On Mon, Jun 12, 2023 at 11:22:48AM +0200, Konrad Dybcio wrote:
>>>> The config/periph/system NoC clocks are wholly controlled by the
>>>> RPM firmware and Linux should never ever alter their configuration.
>>>>
>>>> Switch them over to read-only ops to avoid that.
>>>>
>>>> Fixes: b1e010c0730a ("clk: qcom: Add MSM8996 Global Clock Control (GCC) driver")
>>>> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
>>>> ---
>>>>  drivers/clk/qcom/gcc-msm8996.c | 6 +++---
>>>>  1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
>>>> index 5e44d1bcca9e..588e3b67657a 100644
>>>> --- a/drivers/clk/qcom/gcc-msm8996.c
>>>> +++ b/drivers/clk/qcom/gcc-msm8996.c
>>>> @@ -264,7 +264,7 @@ static struct clk_rcg2 system_noc_clk_src = {
>>>>  		.name = "system_noc_clk_src",
>>>>  		.parent_data = gcc_xo_gpll0_gpll0_early_div,
>>>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
>>>> -		.ops = &clk_rcg2_ops,
>>>> +		.ops = &clk_rcg2_ro_ops,
>>>>  	},
>>>>  };
>>>>  
>>>> @@ -284,7 +284,7 @@ static struct clk_rcg2 config_noc_clk_src = {
>>>>  		.name = "config_noc_clk_src",
>>>>  		.parent_data = gcc_xo_gpll0,
>>>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>>>> -		.ops = &clk_rcg2_ops,
>>>> +		.ops = &clk_rcg2_ro_ops,
>>>>  	},
>>>>  };
>>>>  
>>>> @@ -306,7 +306,7 @@ static struct clk_rcg2 periph_noc_clk_src = {
>>>>  		.name = "periph_noc_clk_src",
>>>>  		.parent_data = gcc_xo_gpll0,
>>>>  		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
>>>> -		.ops = &clk_rcg2_ops,
>>>> +		.ops = &clk_rcg2_ro_ops,
>>>>  	},
>>>>  };
>>>>  
>>>
>>> If the rcg is read-only then it shouldn't need a .freq_tbl (the
>>> .recalc_rate() works without it). These clocks have one for some reason.
>> .get_parent needs it
>>
> 
> Hm? .get_parent uses the ->parent_map but not the ->freq_tbl as far as I
> can see. :)
Brainfart. I think the ftbls can be removed.

Konrad
> 
> Stephan