diff mbox series

[RESEND] amba: Allow pclk to be controlled by power domain

Message ID 20190131020141.28352-1-bjorn.andersson@linaro.org
State New
Headers show
Series [RESEND] amba: Allow pclk to be controlled by power domain | expand

Commit Message

Bjorn Andersson Jan. 31, 2019, 2:01 a.m. UTC
On the Qualcomm SDM845 platform the apb_pclk is controlled as part of
the QDSS power/clock domain. Handle this by allowing amba to operate
without direct apb_pclk control, when a powerdomain is attached and no
clock is described.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

---

Resending this separate from the series it was originally part of.

 drivers/amba/bus.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

-- 
2.18.0

Comments

Sai Prakash Ranjan Jan. 31, 2019, 10:32 a.m. UTC | #1
On 1/31/2019 7:31 AM, Bjorn Andersson wrote:
> On the Qualcomm SDM845 platform the apb_pclk is controlled as part of

> the QDSS power/clock domain. Handle this by allowing amba to operate

> without direct apb_pclk control, when a powerdomain is attached and no

> clock is described.

> 

> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

> ---

> 

> Resending this separate from the series it was originally part of.

> 

>   drivers/amba/bus.c | 9 +++++++--

>   1 file changed, 7 insertions(+), 2 deletions(-)

> 

> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c

> index 41b706403ef7..3e13050c6d59 100644

> --- a/drivers/amba/bus.c

> +++ b/drivers/amba/bus.c

> @@ -219,8 +219,13 @@ static int amba_get_enable_pclk(struct amba_device *pcdev)

>   	int ret;

>   

>   	pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");

> -	if (IS_ERR(pcdev->pclk))

> -		return PTR_ERR(pcdev->pclk);

> +	if (IS_ERR(pcdev->pclk)) {

> +		/* Continue with no clock specified, but pm_domain attached */

> +		if (PTR_ERR(pcdev->pclk) == -ENOENT && pcdev->dev.pm_domain)

> +			pcdev->pclk = NULL;

> +		else

> +			return PTR_ERR(pcdev->pclk);

> +	}

>   

>   	ret = clk_prepare_enable(pcdev->pclk);

>   	if (ret)

> 


Thanks.

Tested-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>


-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
Ulf Hansson Feb. 5, 2019, 2:58 p.m. UTC | #2
On Thu, 31 Jan 2019 at 03:01, Bjorn Andersson
<bjorn.andersson@linaro.org> wrote:
>

> On the Qualcomm SDM845 platform the apb_pclk is controlled as part of

> the QDSS power/clock domain. Handle this by allowing amba to operate

> without direct apb_pclk control, when a powerdomain is attached and no

> clock is described.

>

> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

> ---

>

> Resending this separate from the series it was originally part of.

>

>  drivers/amba/bus.c | 9 +++++++--

>  1 file changed, 7 insertions(+), 2 deletions(-)

>

> diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c

> index 41b706403ef7..3e13050c6d59 100644

> --- a/drivers/amba/bus.c

> +++ b/drivers/amba/bus.c

> @@ -219,8 +219,13 @@ static int amba_get_enable_pclk(struct amba_device *pcdev)

>         int ret;

>

>         pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");

> -       if (IS_ERR(pcdev->pclk))

> -               return PTR_ERR(pcdev->pclk);

> +       if (IS_ERR(pcdev->pclk)) {

> +               /* Continue with no clock specified, but pm_domain attached */

> +               if (PTR_ERR(pcdev->pclk) == -ENOENT && pcdev->dev.pm_domain)

> +                       pcdev->pclk = NULL;


This looks fragile to me.

I would prefer to make a do match with DT, to check whether the clock
is needed or not. Moreover, there should be no reason to check for the
->dev.pm_domain, because, if there was an error while doing the
attach, that should already have been reported/propagated.

> +               else

> +                       return PTR_ERR(pcdev->pclk);

> +       }

>

>         ret = clk_prepare_enable(pcdev->pclk);

>         if (ret)

> --

> 2.18.0

>


Kind regards
Uffe
Bjorn Andersson Feb. 19, 2019, 6:43 a.m. UTC | #3
On Tue 05 Feb 06:58 PST 2019, Ulf Hansson wrote:

> On Thu, 31 Jan 2019 at 03:01, Bjorn Andersson

> <bjorn.andersson@linaro.org> wrote:

> >

> > On the Qualcomm SDM845 platform the apb_pclk is controlled as part of

> > the QDSS power/clock domain. Handle this by allowing amba to operate

> > without direct apb_pclk control, when a powerdomain is attached and no

> > clock is described.

> >

> > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

> > ---

> >

> > Resending this separate from the series it was originally part of.

> >

> >  drivers/amba/bus.c | 9 +++++++--

> >  1 file changed, 7 insertions(+), 2 deletions(-)

> >

> > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c

> > index 41b706403ef7..3e13050c6d59 100644

> > --- a/drivers/amba/bus.c

> > +++ b/drivers/amba/bus.c

> > @@ -219,8 +219,13 @@ static int amba_get_enable_pclk(struct amba_device *pcdev)

> >         int ret;

> >

> >         pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");

> > -       if (IS_ERR(pcdev->pclk))

> > -               return PTR_ERR(pcdev->pclk);

> > +       if (IS_ERR(pcdev->pclk)) {

> > +               /* Continue with no clock specified, but pm_domain attached */

> > +               if (PTR_ERR(pcdev->pclk) == -ENOENT && pcdev->dev.pm_domain)

> > +                       pcdev->pclk = NULL;

> 

> This looks fragile to me.

> 

> I would prefer to make a do match with DT, to check whether the clock

> is needed or not.


Can you please elaborate on what you want me to match on?

As an example you can find the patch depending on this here:
https://lore.kernel.org/lkml/60ebf1617f0285c89e921bf3839cba6906d493c9.1548419933.git.saiprakash.ranjan@codeaurora.org/

> Moreover, there should be no reason to check for the

> ->dev.pm_domain, because, if there was an error while doing the

> attach, that should already have been reported/propagated.

> 


The purpose of this check was to extend the current requirement of a
clock to require either a clock or a power domain, rather than just
making the clock optional - which would be the result if this part is
omitted.

Regards,
Bjorn

> > +               else

> > +                       return PTR_ERR(pcdev->pclk);

> > +       }

> >

> >         ret = clk_prepare_enable(pcdev->pclk);

> >         if (ret)

> > --

> > 2.18.0

> >

> 

> Kind regards

> Uffe
Ulf Hansson Feb. 21, 2019, 7:55 a.m. UTC | #4
On Tue, 19 Feb 2019 at 07:43, Bjorn Andersson
<bjorn.andersson@linaro.org> wrote:
>

> On Tue 05 Feb 06:58 PST 2019, Ulf Hansson wrote:

>

> > On Thu, 31 Jan 2019 at 03:01, Bjorn Andersson

> > <bjorn.andersson@linaro.org> wrote:

> > >

> > > On the Qualcomm SDM845 platform the apb_pclk is controlled as part of

> > > the QDSS power/clock domain. Handle this by allowing amba to operate

> > > without direct apb_pclk control, when a powerdomain is attached and no

> > > clock is described.

> > >

> > > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

> > > ---

> > >

> > > Resending this separate from the series it was originally part of.

> > >

> > >  drivers/amba/bus.c | 9 +++++++--

> > >  1 file changed, 7 insertions(+), 2 deletions(-)

> > >

> > > diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c

> > > index 41b706403ef7..3e13050c6d59 100644

> > > --- a/drivers/amba/bus.c

> > > +++ b/drivers/amba/bus.c

> > > @@ -219,8 +219,13 @@ static int amba_get_enable_pclk(struct amba_device *pcdev)

> > >         int ret;

> > >

> > >         pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");

> > > -       if (IS_ERR(pcdev->pclk))

> > > -               return PTR_ERR(pcdev->pclk);

> > > +       if (IS_ERR(pcdev->pclk)) {

> > > +               /* Continue with no clock specified, but pm_domain attached */

> > > +               if (PTR_ERR(pcdev->pclk) == -ENOENT && pcdev->dev.pm_domain)

> > > +                       pcdev->pclk = NULL;

> >

> > This looks fragile to me.

> >

> > I would prefer to make a do match with DT, to check whether the clock

> > is needed or not.

>

> Can you please elaborate on what you want me to match on?

>

> As an example you can find the patch depending on this here:

> https://lore.kernel.org/lkml/60ebf1617f0285c89e921bf3839cba6906d493c9.1548419933.git.saiprakash.ranjan@codeaurora.org/


I would extend the compatible with a "soc-id" prefix and match on that.

If that doesn't work, I guess we need check for the soc family/id,
thus use soc_device_match().

>

> > Moreover, there should be no reason to check for the

> > ->dev.pm_domain, because, if there was an error while doing the

> > attach, that should already have been reported/propagated.

> >

>

> The purpose of this check was to extend the current requirement of a

> clock to require either a clock or a power domain, rather than just

> making the clock optional - which would be the result if this part is

> omitted.


Well, that would break the current requirement for everybody else,
which is that the clock is required and the PM domain is optional.

[...]

Kind regards
Uffe
diff mbox series

Patch

diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 41b706403ef7..3e13050c6d59 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -219,8 +219,13 @@  static int amba_get_enable_pclk(struct amba_device *pcdev)
 	int ret;
 
 	pcdev->pclk = clk_get(&pcdev->dev, "apb_pclk");
-	if (IS_ERR(pcdev->pclk))
-		return PTR_ERR(pcdev->pclk);
+	if (IS_ERR(pcdev->pclk)) {
+		/* Continue with no clock specified, but pm_domain attached */
+		if (PTR_ERR(pcdev->pclk) == -ENOENT && pcdev->dev.pm_domain)
+			pcdev->pclk = NULL;
+		else
+			return PTR_ERR(pcdev->pclk);
+	}
 
 	ret = clk_prepare_enable(pcdev->pclk);
 	if (ret)