linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
@ 2015-09-23 19:09 Stephen Boyd
  2015-10-01  8:23 ` Rajendra Nayak
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Boyd @ 2015-09-23 19:09 UTC (permalink / raw)
  To: Mike Turquette, Stephen Boyd
  Cc: linux-kernel, linux-clk, linux-arm-msm, linux-pm, Rajendra Nayak

The oxili_cx GDSC is inside the power domain of the oxili GDSC.
Add the dependency so that the CX domain can properly power up.

Reported-by: Rob Clark <robdclark@gmail.com>
Cc: Rajendra Nayak <rnayak@codeaurora.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---
 drivers/clk/qcom/mmcc-msm8974.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c
index fe8320dc41db..3613db0a73e3 100644
--- a/drivers/clk/qcom/mmcc-msm8974.c
+++ b/drivers/clk/qcom/mmcc-msm8974.c
@@ -2615,6 +2615,7 @@ MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
 static int mmcc_msm8974_probe(struct platform_device *pdev)
 {
 	struct regmap *regmap;
+	int ret;
 
 	regmap = qcom_cc_map(pdev, &mmcc_msm8974_desc);
 	if (IS_ERR(regmap))
@@ -2623,7 +2624,14 @@ static int mmcc_msm8974_probe(struct platform_device *pdev)
 	clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
 	clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
 
-	return qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
+	ret = qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
+	if (ret)
+		return ret;
+
+	ret = pm_genpd_add_subdomain(&oxili_gdsc.pd, &oxilicx_gdsc.pd);
+	if (ret)
+		qcom_cc_remove(pdev);
+	return ret;
 }
 
 static int mmcc_msm8974_remove(struct platform_device *pdev)
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-09-23 19:09 [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC Stephen Boyd
@ 2015-10-01  8:23 ` Rajendra Nayak
  2015-10-01 17:52   ` Stephen Boyd
  0 siblings, 1 reply; 8+ messages in thread
From: Rajendra Nayak @ 2015-10-01  8:23 UTC (permalink / raw)
  To: Stephen Boyd, Mike Turquette
  Cc: linux-kernel, linux-clk, linux-arm-msm, linux-pm

On 09/24/2015 12:39 AM, Stephen Boyd wrote:
> The oxili_cx GDSC is inside the power domain of the oxili GDSC.
> Add the dependency so that the CX domain can properly power up.
>
> Reported-by: Rob Clark <robdclark@gmail.com>
> Cc: Rajendra Nayak <rnayak@codeaurora.org>
> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> ---
>   drivers/clk/qcom/mmcc-msm8974.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c
> index fe8320dc41db..3613db0a73e3 100644
> --- a/drivers/clk/qcom/mmcc-msm8974.c
> +++ b/drivers/clk/qcom/mmcc-msm8974.c
> @@ -2615,6 +2615,7 @@ MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
>   static int mmcc_msm8974_probe(struct platform_device *pdev)
>   {
>   	struct regmap *regmap;
> +	int ret;
>
>   	regmap = qcom_cc_map(pdev, &mmcc_msm8974_desc);
>   	if (IS_ERR(regmap))
> @@ -2623,7 +2624,14 @@ static int mmcc_msm8974_probe(struct platform_device *pdev)
>   	clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
>   	clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
>
> -	return qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
> +	ret = qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
> +	if (ret)
> +		return ret;
> +
> +	ret = pm_genpd_add_subdomain(&oxili_gdsc.pd, &oxilicx_gdsc.pd);

We'll need pm_genpd_add_subdomain() to be EXPORT_SYMBOL_GPL'ed so
clk-qcom can be built as a module.

It would also be nicer if this parent/child relationship can
somehow be represented in data (struct gdsc) that gets passed to
the gdsc driver which then sets it up, instead of individual
clock drivers doing it.

> +	if (ret)
> +		qcom_cc_remove(pdev);
> +	return ret;
>   }
>
>   static int mmcc_msm8974_remove(struct platform_device *pdev)
>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-01  8:23 ` Rajendra Nayak
@ 2015-10-01 17:52   ` Stephen Boyd
  2015-10-01 19:06     ` Stephen Boyd
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Boyd @ 2015-10-01 17:52 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: Mike Turquette, linux-kernel, linux-clk, linux-arm-msm, linux-pm

On 10/01, Rajendra Nayak wrote:
> On 09/24/2015 12:39 AM, Stephen Boyd wrote:
> >The oxili_cx GDSC is inside the power domain of the oxili GDSC.
> >Add the dependency so that the CX domain can properly power up.
> >
> >Reported-by: Rob Clark <robdclark@gmail.com>
> >Cc: Rajendra Nayak <rnayak@codeaurora.org>
> >Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> >---
> >  drivers/clk/qcom/mmcc-msm8974.c | 10 +++++++++-
> >  1 file changed, 9 insertions(+), 1 deletion(-)
> >
> >diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c
> >index fe8320dc41db..3613db0a73e3 100644
> >--- a/drivers/clk/qcom/mmcc-msm8974.c
> >+++ b/drivers/clk/qcom/mmcc-msm8974.c
> >@@ -2615,6 +2615,7 @@ MODULE_DEVICE_TABLE(of, mmcc_msm8974_match_table);
> >  static int mmcc_msm8974_probe(struct platform_device *pdev)
> >  {
> >  	struct regmap *regmap;
> >+	int ret;
> >
> >  	regmap = qcom_cc_map(pdev, &mmcc_msm8974_desc);
> >  	if (IS_ERR(regmap))
> >@@ -2623,7 +2624,14 @@ static int mmcc_msm8974_probe(struct platform_device *pdev)
> >  	clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
> >  	clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
> >
> >-	return qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
> >+	ret = qcom_cc_really_probe(pdev, &mmcc_msm8974_desc, regmap);
> >+	if (ret)
> >+		return ret;
> >+
> >+	ret = pm_genpd_add_subdomain(&oxili_gdsc.pd, &oxilicx_gdsc.pd);
> 
> We'll need pm_genpd_add_subdomain() to be EXPORT_SYMBOL_GPL'ed so
> clk-qcom can be built as a module.

Good catch! Do we need to call pm_genpd_remove_subdomain() too?

> 
> It would also be nicer if this parent/child relationship can
> somehow be represented in data (struct gdsc) that gets passed to
> the gdsc driver which then sets it up, instead of individual
> clock drivers doing it.

Agreed. I'd rather that we do nothing besides register domains
and then let the core code handle hooking up domains and
subdomains.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-01 17:52   ` Stephen Boyd
@ 2015-10-01 19:06     ` Stephen Boyd
  2015-10-05  5:07       ` Rajendra Nayak
  0 siblings, 1 reply; 8+ messages in thread
From: Stephen Boyd @ 2015-10-01 19:06 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: Mike Turquette, linux-kernel, linux-clk, linux-arm-msm, linux-pm

On 10/01, Stephen Boyd wrote:
> On 10/01, Rajendra Nayak wrote:
> > On 09/24/2015 12:39 AM, Stephen Boyd wrote:
> > >+
> > >+	ret = pm_genpd_add_subdomain(&oxili_gdsc.pd, &oxilicx_gdsc.pd);
> > 
> > We'll need pm_genpd_add_subdomain() to be EXPORT_SYMBOL_GPL'ed so
> > clk-qcom can be built as a module.
> 
> Good catch! Do we need to call pm_genpd_remove_subdomain() too?

Looks like yes.

> 
> > 
> > It would also be nicer if this parent/child relationship can
> > somehow be represented in data (struct gdsc) that gets passed to
> > the gdsc driver which then sets it up, instead of individual
> > clock drivers doing it.
> 
> Agreed. I'd rather that we do nothing besides register domains
> and then let the core code handle hooking up domains and
> subdomains.

A little closer inspection makes me want to skip this. PM domains
can have multiple "master" domains, and pm_genpd_init() is the
only API that would be able to do the linking. That API is mostly
about initializing things to default values, so it doesn't seem
like a good fit. I'll send a v2 with the remove part and the
exports.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-01 19:06     ` Stephen Boyd
@ 2015-10-05  5:07       ` Rajendra Nayak
  2015-10-05  5:45         ` kbuild test robot
                           ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Rajendra Nayak @ 2015-10-05  5:07 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Mike Turquette, linux-kernel, linux-clk, linux-arm-msm, linux-pm

[]...

>>> It would also be nicer if this parent/child relationship can
>>> somehow be represented in data (struct gdsc) that gets passed to
>>> the gdsc driver which then sets it up, instead of individual
>>> clock drivers doing it.
>>
>> Agreed. I'd rather that we do nothing besides register domains
>> and then let the core code handle hooking up domains and
>> subdomains.
> 
> A little closer inspection makes me want to skip this. PM domains
> can have multiple "master" domains, and pm_genpd_init() is the
> only API that would be able to do the linking. That API is mostly
> about initializing things to default values, so it doesn't seem
> like a good fit. I'll send a v2 with the remove part and the
> exports.

What I was suggesting is that the qcom gdsc driver handle this
instead of the qcom clock drivers.
Something like..

diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c
index da9fad8..00edb2d 100644
--- a/drivers/clk/qcom/gdsc.c
+++ b/drivers/clk/qcom/gdsc.c
@@ -226,6 +226,8 @@ int gdsc_register(struct device *dev, struct gdsc **scs, size_t num,
 		if (ret)
 			return ret;
 		data->domains[i] = &scs[i]->pd;
+		if (scs[i]->parent)
+			pm_genpd_add_subdomain(scs[i]->parent, &scs[i]->pd);
 	}
 
 	return of_genpd_add_provider_onecell(dev->of_node, data);
diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h
index 5ded268..bc5791f 100644
--- a/drivers/clk/qcom/gdsc.h
+++ b/drivers/clk/qcom/gdsc.h
@@ -49,6 +49,7 @@ struct gdsc {
 	struct reset_controller_dev	*rcdev;
 	unsigned int			*resets;
 	unsigned int			reset_count;
+	struct generic_pm_domain	*parent;
 };
 
 #ifdef CONFIG_QCOM_GDSC
diff --git a/drivers/clk/qcom/mmcc-msm8974.c b/drivers/clk/qcom/mmcc-msm8974.c
index fe8320d..51ad8de 100644
--- a/drivers/clk/qcom/mmcc-msm8974.c
+++ b/drivers/clk/qcom/mmcc-msm8974.c
@@ -2400,6 +2400,7 @@ static struct gdsc oxilicx_gdsc = {
 	.pd = {
 		.name = "oxilicx",
 	},
+	.parent = &oxili_gdsc.pd,
 	.pwrsts = PWRSTS_OFF_ON,
 };

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by The Linux Foundation

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-05  5:07       ` Rajendra Nayak
@ 2015-10-05  5:45         ` kbuild test robot
  2015-10-05 14:24         ` kbuild test robot
  2015-10-05 18:13         ` Stephen Boyd
  2 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2015-10-05  5:45 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: kbuild-all, Stephen Boyd, Mike Turquette, linux-kernel, linux-clk,
	linux-arm-msm, linux-pm

[-- Attachment #1: Type: text/plain, Size: 487 bytes --]

Hi Rajendra,

[auto build test ERROR on next-20151002 -- if it's inappropriate base, please ignore]

config: i386-allmodconfig (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

>> ERROR: "pm_genpd_add_subdomain" undefined!

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 51904 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-05  5:07       ` Rajendra Nayak
  2015-10-05  5:45         ` kbuild test robot
@ 2015-10-05 14:24         ` kbuild test robot
  2015-10-05 18:13         ` Stephen Boyd
  2 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2015-10-05 14:24 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: kbuild-all, Stephen Boyd, Mike Turquette, linux-kernel, linux-clk,
	linux-arm-msm, linux-pm

[-- Attachment #1: Type: text/plain, Size: 532 bytes --]

Hi Rajendra,

[auto build test ERROR on next-20151002 -- if it's inappropriate base, please ignore]

config: x86_64-randconfig-r0-10051645 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

>> ERROR: "pm_genpd_add_subdomain" [drivers/clk/qcom/clk-qcom.ko] undefined!

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 30187 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC
  2015-10-05  5:07       ` Rajendra Nayak
  2015-10-05  5:45         ` kbuild test robot
  2015-10-05 14:24         ` kbuild test robot
@ 2015-10-05 18:13         ` Stephen Boyd
  2 siblings, 0 replies; 8+ messages in thread
From: Stephen Boyd @ 2015-10-05 18:13 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: Mike Turquette, linux-kernel, linux-clk, linux-arm-msm, linux-pm

On 10/05, Rajendra Nayak wrote:
> []...
> 
> >>> It would also be nicer if this parent/child relationship can
> >>> somehow be represented in data (struct gdsc) that gets passed to
> >>> the gdsc driver which then sets it up, instead of individual
> >>> clock drivers doing it.
> >>
> >> Agreed. I'd rather that we do nothing besides register domains
> >> and then let the core code handle hooking up domains and
> >> subdomains.
> > 
> > A little closer inspection makes me want to skip this. PM domains
> > can have multiple "master" domains, and pm_genpd_init() is the
> > only API that would be able to do the linking. That API is mostly
> > about initializing things to default values, so it doesn't seem
> > like a good fit. I'll send a v2 with the remove part and the
> > exports.
> 
> What I was suggesting is that the qcom gdsc driver handle this
> instead of the qcom clock drivers.
> Something like..

Ah ok. This patch will still need the gdscs to be in a certain
order though so that we don't add a subdomain on an uninitialized
domain. So I guess some list of pointer pairs to call the
function on could be done in the qcom_cc_desc structure if we
need to do this more than a couple times.

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-10-05 18:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-23 19:09 [PATCH] clk: qcom: Make oxili GDSC parent of oxili_cx GDSC Stephen Boyd
2015-10-01  8:23 ` Rajendra Nayak
2015-10-01 17:52   ` Stephen Boyd
2015-10-01 19:06     ` Stephen Boyd
2015-10-05  5:07       ` Rajendra Nayak
2015-10-05  5:45         ` kbuild test robot
2015-10-05 14:24         ` kbuild test robot
2015-10-05 18:13         ` Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).