[2/2] clk: qcom: lpasscc: Add resets for SC7280 audioreach clock controller

Message ID 1671618061-6329-3-git-send-email-quic_srivasam@quicinc.com
State New
Headers
Series Add resets for ADSP based audio clock controller driver. |

Commit Message

Srinivasa Rao Mandadapu Dec. 21, 2022, 10:21 a.m. UTC
  The clock gating control for TX/RX/WSA core bus clocks would be required
to be reset(moved from hardware control) from audio core driver. Thus
add the support for the reset clocks in audioreach based clock driver.

Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
---
 drivers/clk/qcom/lpasscc-sc7280.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
  

Comments

Krzysztof Kozlowski Dec. 21, 2022, 10:39 a.m. UTC | #1
On 21/12/2022 11:21, Srinivasa Rao Mandadapu wrote:
> The clock gating control for TX/RX/WSA core bus clocks would be required
> to be reset(moved from hardware control) from audio core driver. Thus
> add the support for the reset clocks in audioreach based clock driver.
> 
> Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
> ---
>  drivers/clk/qcom/lpasscc-sc7280.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
> index 5c1e17b..d81d81b 100644
> --- a/drivers/clk/qcom/lpasscc-sc7280.c
> +++ b/drivers/clk/qcom/lpasscc-sc7280.c
> @@ -12,10 +12,12 @@
>  #include <linux/regmap.h>
>  
>  #include <dt-bindings/clock/qcom,lpass-sc7280.h>
> +#include <dt-bindings/clock/qcom,lpassaudiocc-sc7280.h>

These are bindings for different device.

>  
>  #include "clk-regmap.h"
>  #include "clk-branch.h"
>  #include "common.h"
> +#include "reset.h"
>  
>  static struct clk_branch lpass_top_cc_lpi_q6_axim_hs_clk = {
>  	.halt_reg = 0x0,
> @@ -102,6 +104,18 @@ static const struct qcom_cc_desc lpass_qdsp6ss_sc7280_desc = {
>  	.num_clks = ARRAY_SIZE(lpass_qdsp6ss_sc7280_clocks),
>  };
>  
> +static const struct qcom_reset_map lpass_cc_sc7280_resets[] = {
> +	[LPASS_AUDIO_SWR_RX_CGCR] =  { 0xa0, 1 },
> +	[LPASS_AUDIO_SWR_TX_CGCR] =  { 0xa8, 1 },
> +	[LPASS_AUDIO_SWR_WSA_CGCR] = { 0xb0, 1 },

These are example the same - IDs and values - as
qcom,sc7280-lpassaudiocc. Aren't you duplicating same control?

Best regards,
Krzysztof
  
Srinivasa Rao Mandadapu Dec. 21, 2022, 1:18 p.m. UTC | #2
On 12/21/2022 4:09 PM, Krzysztof Kozlowski wrote:
Thanks for your time Krzysztof!!!
> On 21/12/2022 11:21, Srinivasa Rao Mandadapu wrote:
>> The clock gating control for TX/RX/WSA core bus clocks would be required
>> to be reset(moved from hardware control) from audio core driver. Thus
>> add the support for the reset clocks in audioreach based clock driver.
>>
>> Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
>> ---
>>   drivers/clk/qcom/lpasscc-sc7280.c | 18 ++++++++++++++++++
>>   1 file changed, 18 insertions(+)
>>
>> diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
>> index 5c1e17b..d81d81b 100644
>> --- a/drivers/clk/qcom/lpasscc-sc7280.c
>> +++ b/drivers/clk/qcom/lpasscc-sc7280.c
>> @@ -12,10 +12,12 @@
>>   #include <linux/regmap.h>
>>   
>>   #include <dt-bindings/clock/qcom,lpass-sc7280.h>
>> +#include <dt-bindings/clock/qcom,lpassaudiocc-sc7280.h>
> These are bindings for different device.

They are not exactly for different device. It's for same device with 
ADSP enabled platforms.

Basically lpassaudiocc-sc7280.c and lpasscorecc-sc7280.c are for legacy 
path.

lpasscc-sc7280.c is for ADSP based AudioReach Solution.

>
>>   
>>   #include "clk-regmap.h"
>>   #include "clk-branch.h"
>>   #include "common.h"
>> +#include "reset.h"
>>   
>>   static struct clk_branch lpass_top_cc_lpi_q6_axim_hs_clk = {
>>   	.halt_reg = 0x0,
>> @@ -102,6 +104,18 @@ static const struct qcom_cc_desc lpass_qdsp6ss_sc7280_desc = {
>>   	.num_clks = ARRAY_SIZE(lpass_qdsp6ss_sc7280_clocks),
>>   };
>>   
>> +static const struct qcom_reset_map lpass_cc_sc7280_resets[] = {
>> +	[LPASS_AUDIO_SWR_RX_CGCR] =  { 0xa0, 1 },
>> +	[LPASS_AUDIO_SWR_TX_CGCR] =  { 0xa8, 1 },
>> +	[LPASS_AUDIO_SWR_WSA_CGCR] = { 0xb0, 1 },
> These are example the same - IDs and values - as
> qcom,sc7280-lpassaudiocc. Aren't you duplicating same control?

As explained above legacy path drivers and ADSP path drivers are 
enabled/used exclusively,

adding reset controls here.

>
> Best regards,
> Krzysztof
>
  
Krzysztof Kozlowski Dec. 22, 2022, 10:44 a.m. UTC | #3
On 21/12/2022 14:18, Srinivasa Rao Mandadapu wrote:
> 
> On 12/21/2022 4:09 PM, Krzysztof Kozlowski wrote:
> Thanks for your time Krzysztof!!!
>> On 21/12/2022 11:21, Srinivasa Rao Mandadapu wrote:
>>> The clock gating control for TX/RX/WSA core bus clocks would be required
>>> to be reset(moved from hardware control) from audio core driver. Thus
>>> add the support for the reset clocks in audioreach based clock driver.
>>>
>>> Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
>>> ---
>>>   drivers/clk/qcom/lpasscc-sc7280.c | 18 ++++++++++++++++++
>>>   1 file changed, 18 insertions(+)
>>>
>>> diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
>>> index 5c1e17b..d81d81b 100644
>>> --- a/drivers/clk/qcom/lpasscc-sc7280.c
>>> +++ b/drivers/clk/qcom/lpasscc-sc7280.c
>>> @@ -12,10 +12,12 @@
>>>   #include <linux/regmap.h>
>>>   
>>>   #include <dt-bindings/clock/qcom,lpass-sc7280.h>
>>> +#include <dt-bindings/clock/qcom,lpassaudiocc-sc7280.h>
>> These are bindings for different device.
> 
> They are not exactly for different device. It's for same device with 
> ADSP enabled platforms.
> 
> Basically lpassaudiocc-sc7280.c and lpasscorecc-sc7280.c are for legacy 
> path.
> 
> lpasscc-sc7280.c is for ADSP based AudioReach Solution.

I see two different devices:
lpasscc@3000000
clock-controller@3300000

clock inputs and outputs are different, so it does not look like for
same device.

Best regards,
Krzysztof
  
Srinivasa Rao Mandadapu Dec. 26, 2022, 5:40 a.m. UTC | #4
On 12/22/2022 4:14 PM, Krzysztof Kozlowski wrote:
Thanks for Your Time Krzyszto!!!
> On 21/12/2022 14:18, Srinivasa Rao Mandadapu wrote:
>> On 12/21/2022 4:09 PM, Krzysztof Kozlowski wrote:
>> Thanks for your time Krzysztof!!!
>>> On 21/12/2022 11:21, Srinivasa Rao Mandadapu wrote:
>>>> The clock gating control for TX/RX/WSA core bus clocks would be required
>>>> to be reset(moved from hardware control) from audio core driver. Thus
>>>> add the support for the reset clocks in audioreach based clock driver.
>>>>
>>>> Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
>>>> ---
>>>>    drivers/clk/qcom/lpasscc-sc7280.c | 18 ++++++++++++++++++
>>>>    1 file changed, 18 insertions(+)
>>>>
>>>> diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
>>>> index 5c1e17b..d81d81b 100644
>>>> --- a/drivers/clk/qcom/lpasscc-sc7280.c
>>>> +++ b/drivers/clk/qcom/lpasscc-sc7280.c
>>>> @@ -12,10 +12,12 @@
>>>>    #include <linux/regmap.h>
>>>>    
>>>>    #include <dt-bindings/clock/qcom,lpass-sc7280.h>
>>>> +#include <dt-bindings/clock/qcom,lpassaudiocc-sc7280.h>
>>> These are bindings for different device.
>> They are not exactly for different device. It's for same device with
>> ADSP enabled platforms.
>>
>> Basically lpassaudiocc-sc7280.c and lpasscorecc-sc7280.c are for legacy
>> path.
>>
>> lpasscc-sc7280.c is for ADSP based AudioReach Solution.
> I see two different devices:
> lpasscc@3000000
> clock-controller@3300000
>
> clock inputs and outputs are different, so it does not look like for
> same device.

Actually, even though there are 2 different device nodes, they are being 
used exclusively.

In ADSP enabled path(on same sc7280 based platform it's enabled for some 
vendors) only lpasscc node is being used

and legacy path nodes are being disabled due to register region conflicts.

Below is the patch for the same:
https://patchwork.kernel.org/project/linux-arm-msm/patch/1671702170-24781-8-git-send-email-quic_srivasam@quicinc.com/

>
> Best regards,
> Krzysztof
>
  

Patch

diff --git a/drivers/clk/qcom/lpasscc-sc7280.c b/drivers/clk/qcom/lpasscc-sc7280.c
index 5c1e17b..d81d81b 100644
--- a/drivers/clk/qcom/lpasscc-sc7280.c
+++ b/drivers/clk/qcom/lpasscc-sc7280.c
@@ -12,10 +12,12 @@ 
 #include <linux/regmap.h>
 
 #include <dt-bindings/clock/qcom,lpass-sc7280.h>
+#include <dt-bindings/clock/qcom,lpassaudiocc-sc7280.h>
 
 #include "clk-regmap.h"
 #include "clk-branch.h"
 #include "common.h"
+#include "reset.h"
 
 static struct clk_branch lpass_top_cc_lpi_q6_axim_hs_clk = {
 	.halt_reg = 0x0,
@@ -102,6 +104,18 @@  static const struct qcom_cc_desc lpass_qdsp6ss_sc7280_desc = {
 	.num_clks = ARRAY_SIZE(lpass_qdsp6ss_sc7280_clocks),
 };
 
+static const struct qcom_reset_map lpass_cc_sc7280_resets[] = {
+	[LPASS_AUDIO_SWR_RX_CGCR] =  { 0xa0, 1 },
+	[LPASS_AUDIO_SWR_TX_CGCR] =  { 0xa8, 1 },
+	[LPASS_AUDIO_SWR_WSA_CGCR] = { 0xb0, 1 },
+};
+
+static const struct qcom_cc_desc lpass_audio_cc_reset_sc7280_desc = {
+	.config = &lpass_regmap_config,
+	.resets = lpass_cc_sc7280_resets,
+	.num_resets = ARRAY_SIZE(lpass_cc_sc7280_resets),
+};
+
 static int lpass_cc_sc7280_probe(struct platform_device *pdev)
 {
 	const struct qcom_cc_desc *desc;
@@ -132,6 +146,10 @@  static int lpass_cc_sc7280_probe(struct platform_device *pdev)
 	if (ret)
 		goto destroy_pm_clk;
 
+	ret = qcom_cc_probe_by_index(pdev, 1, &lpass_audio_cc_reset_sc7280_desc);
+	if (ret)
+		goto destroy_pm_clk;
+
 	return 0;
 
 destroy_pm_clk: