diff mbox

arm: mx28: check for gated clocks when setting saif divider

Message ID 1315650583-4793-1-git-send-email-w.sang@pengutronix.de
State New
Headers show

Commit Message

Wolfram Sang Sept. 10, 2011, 10:29 a.m. UTC
Like with all other clocks, the divider for the SAIF devices should not
be altered when the clock is gated. Bail out when this is the case like
the other clocks do.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Shawn Guo <shawn.guo@freescale.com>
Cc: Dong Aisheng-B29396 <B29396@freescale.com>
---

Aisheng: I think this is the correct solution for clock-mx28.c. If setting the
rate of the saif clocks hit the error path, it should be fixed in the driver?

 arch/arm/mach-mxs/clock-mx28.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Wolfram Sang Nov. 16, 2011, 1:22 p.m. UTC | #1
On Sat, Sep 10, 2011 at 12:29:43PM +0200, Wolfram Sang wrote:
> Like with all other clocks, the divider for the SAIF devices should not
> be altered when the clock is gated. Bail out when this is the case like
> the other clocks do.
> 
> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Shawn Guo <shawn.guo@freescale.com>
> Cc: Dong Aisheng-B29396 <B29396@freescale.com>
> ---
> 
> Aisheng: I think this is the correct solution for clock-mx28.c. If setting the
> rate of the saif clocks hit the error path, it should be fixed in the driver?

Ping. Trying to catch up, has this been resolved meanwhile?

> 
>  arch/arm/mach-mxs/clock-mx28.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
> index 63d6117..c9482b5 100644
> --- a/arch/arm/mach-mxs/clock-mx28.c
> +++ b/arch/arm/mach-mxs/clock-mx28.c
> @@ -457,6 +457,10 @@ static int name##_set_rate(struct clk *clk, unsigned long rate)		\
>  	reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
>  	reg &= ~BM_CLKCTRL_##rs##_DIV;					\
>  	reg |= div << BP_CLKCTRL_##rs##_DIV;				\
> +	if (reg & (1 << clk->enable_shift)) {				\
> +		pr_err("%s: clock is gated\n", __func__);		\
> +		return -EINVAL;						\
> +	}								\
>  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
>  									\
>  	for (i = 10000; i; i--)						\
> -- 
> 1.7.5.4
>
Dong Aisheng Nov. 16, 2011, 1:35 p.m. UTC | #2
> -----Original Message-----
> From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> Sent: Wednesday, November 16, 2011 9:22 PM
> To: linux-arm-kernel@lists.infradead.org
> Cc: Sascha Hauer; Guo Shawn-R65073; Dong Aisheng-B29396
> Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting saif
> divider
> 
> On Sat, Sep 10, 2011 at 12:29:43PM +0200, Wolfram Sang wrote:
> > Like with all other clocks, the divider for the SAIF devices should
> > not be altered when the clock is gated. Bail out when this is the case
> > like the other clocks do.
> >
> > Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Shawn Guo <shawn.guo@freescale.com>
> > Cc: Dong Aisheng-B29396 <B29396@freescale.com>
> > ---
> >
> > Aisheng: I think this is the correct solution for clock-mx28.c. If
> > setting the rate of the saif clocks hit the error path, it should be
> fixed in the driver?
> 
> Ping. Trying to catch up, has this been resolved meanwhile?
> 
Sorry, I missed this patch.

If I understand right, the convention way is to clk_set_rate() then
clk_enable().I f that, is it reasonable for driver to do something like:
Clk_enable -> clk_set_rate->clk_disable to set a proper rate,
then when needs the clock on, do clk_enable again?


> >
> >  arch/arm/mach-mxs/clock-mx28.c |    4 ++++
> >  1 files changed, 4 insertions(+), 0 deletions(-)
> >
> > diff --git a/arch/arm/mach-mxs/clock-mx28.c
> > b/arch/arm/mach-mxs/clock-mx28.c index 63d6117..c9482b5 100644
> > --- a/arch/arm/mach-mxs/clock-mx28.c
> > +++ b/arch/arm/mach-mxs/clock-mx28.c
> > @@ -457,6 +457,10 @@ static int name##_set_rate(struct clk *clk,
> unsigned long rate)		\
> >  	reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
> >  	reg &= ~BM_CLKCTRL_##rs##_DIV;					\
> >  	reg |= div << BP_CLKCTRL_##rs##_DIV;				\
> > +	if (reg & (1 << clk->enable_shift)) {				\
> > +		pr_err("%s: clock is gated\n", __func__);		\
> > +		return -EINVAL;						\
> > +	}								\
> >  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
> >  									\
> >  	for (i = 10000; i; i--)						\
> > --
> > 1.7.5.4
> >
> 
> --
> Pengutronix e.K.                           | Wolfram Sang
> |
> Industrial Linux Solutions                 | http://www.pengutronix.de/
> |
Wolfram Sang Nov. 16, 2011, 1:51 p.m. UTC | #3
On Wed, Nov 16, 2011 at 01:35:04PM +0000, Dong Aisheng-B29396 wrote:
> > -----Original Message-----
> > From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> > Sent: Wednesday, November 16, 2011 9:22 PM
> > To: linux-arm-kernel@lists.infradead.org
> > Cc: Sascha Hauer; Guo Shawn-R65073; Dong Aisheng-B29396
> > Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting saif
> > divider
> > 
> > On Sat, Sep 10, 2011 at 12:29:43PM +0200, Wolfram Sang wrote:
> > > Like with all other clocks, the divider for the SAIF devices should
> > > not be altered when the clock is gated. Bail out when this is the case
> > > like the other clocks do.
> > >
> > > Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > Cc: Shawn Guo <shawn.guo@freescale.com>
> > > Cc: Dong Aisheng-B29396 <B29396@freescale.com>
> > > ---
> > >
> > > Aisheng: I think this is the correct solution for clock-mx28.c. If
> > > setting the rate of the saif clocks hit the error path, it should be
> > fixed in the driver?
> > 
> > Ping. Trying to catch up, has this been resolved meanwhile?
> > 
> Sorry, I missed this patch.
> 
> If I understand right, the convention way is to clk_set_rate() then
> clk_enable().I f that, is it reasonable for driver to do something like:
> Clk_enable -> clk_set_rate->clk_disable to set a proper rate,
> then when needs the clock on, do clk_enable again?

Confused, do you really mean enable -> set_rate -> disable? Because you
can't set clocks when they are enabled?

Well, to be honest, this is all is not very nice due to mxs
restrictions. I chose this approach because this is the common pattern
in all other clocks. There might be a better way of handling this, but
then we'd need to adapt all other clocks as well. What we definately
should not have is one kind of handling the 'already enabled' case for a
few clocks and another kind for others.

Regards,

   Wolfram
Dong Aisheng Nov. 16, 2011, 2:23 p.m. UTC | #4
> -----Original Message-----
> From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> Sent: Wednesday, November 16, 2011 9:51 PM
> To: Dong Aisheng-B29396
> Cc: linux-arm-kernel@lists.infradead.org; Sascha Hauer; Guo Shawn-R65073
> Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting saif
> divider
> 
> On Wed, Nov 16, 2011 at 01:35:04PM +0000, Dong Aisheng-B29396 wrote:
> > > -----Original Message-----
> > > From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> > > Sent: Wednesday, November 16, 2011 9:22 PM
> > > To: linux-arm-kernel@lists.infradead.org
> > > Cc: Sascha Hauer; Guo Shawn-R65073; Dong Aisheng-B29396
> > > Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting
> > > saif divider
> > >
> > > On Sat, Sep 10, 2011 at 12:29:43PM +0200, Wolfram Sang wrote:
> > > > Like with all other clocks, the divider for the SAIF devices
> > > > should not be altered when the clock is gated. Bail out when this
> > > > is the case like the other clocks do.
> > > >
> > > > Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> > > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > > Cc: Shawn Guo <shawn.guo@freescale.com>
> > > > Cc: Dong Aisheng-B29396 <B29396@freescale.com>
> > > > ---
> > > >
> > > > Aisheng: I think this is the correct solution for clock-mx28.c. If
> > > > setting the rate of the saif clocks hit the error path, it should
> > > > be
> > > fixed in the driver?
> > >
> > > Ping. Trying to catch up, has this been resolved meanwhile?
> > >
> > Sorry, I missed this patch.
> >
> > If I understand right, the convention way is to clk_set_rate() then
> > clk_enable().I f that, is it reasonable for driver to do something like:
> > Clk_enable -> clk_set_rate->clk_disable to set a proper rate, then
> > when needs the clock on, do clk_enable again?
> 
> Confused, do you really mean enable -> set_rate -> disable? Because you
> can't set clocks when they are enabled?
> 
Yes.

> Well, to be honest, this is all is not very nice due to mxs restrictions.
Yes, it's truly not comfortable for drivers know this restrictions
(not handled by clock code).

> I chose this approach because this is the common pattern in all other
> clocks. There might be a better way of handling this, but then we'd need
> to adapt all other clocks as well. What we definately should not have is
> one kind of handling the 'already enabled' case for a few clocks and
> another kind for others.
> 
I agree with you point here.
I was wondering formerly that maybe we can handle this restriction in clock code
that not make clk_set_rate function blocked by clock is still not enable issue.
I know that all other clocks are using the pattern as you said now.
If we decide to follow that pattern, I will agree (although not comfortable)
and update the driver side.

Regards
Dong Aisheng
Shawn Guo Nov. 17, 2011, 1:18 a.m. UTC | #5
On Wed, Nov 16, 2011 at 02:51:26PM +0100, Wolfram Sang wrote:
> On Wed, Nov 16, 2011 at 01:35:04PM +0000, Dong Aisheng-B29396 wrote:
> > > -----Original Message-----
> > > From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> > > Sent: Wednesday, November 16, 2011 9:22 PM
> > > To: linux-arm-kernel@lists.infradead.org
> > > Cc: Sascha Hauer; Guo Shawn-R65073; Dong Aisheng-B29396
> > > Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting saif
> > > divider
> > > 
> > > On Sat, Sep 10, 2011 at 12:29:43PM +0200, Wolfram Sang wrote:
> > > > Like with all other clocks, the divider for the SAIF devices should
> > > > not be altered when the clock is gated. Bail out when this is the case
> > > > like the other clocks do.
> > > >
> > > > Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
> > > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > > Cc: Shawn Guo <shawn.guo@freescale.com>
> > > > Cc: Dong Aisheng-B29396 <B29396@freescale.com>
> > > > ---
> > > >
> > > > Aisheng: I think this is the correct solution for clock-mx28.c. If
> > > > setting the rate of the saif clocks hit the error path, it should be
> > > fixed in the driver?
> > > 
> > > Ping. Trying to catch up, has this been resolved meanwhile?
> > > 
> > Sorry, I missed this patch.
> > 
> > If I understand right, the convention way is to clk_set_rate() then
> > clk_enable().I f that, is it reasonable for driver to do something like:
> > Clk_enable -> clk_set_rate->clk_disable to set a proper rate,
> > then when needs the clock on, do clk_enable again?
> 
> Confused, do you really mean enable -> set_rate -> disable? Because you
> can't set clocks when they are enabled?
> 
> Well, to be honest, this is all is not very nice due to mxs
> restrictions.

When the code was written, it inherited the restriction from FSL
internal code.  I doubt the restriction is the hardware one, and I
would try to remove the restriction when migrating to common clock
framework.

> I chose this approach because this is the common pattern
> in all other clocks. There might be a better way of handling this, but
> then we'd need to adapt all other clocks as well. What we definately
> should not have is one kind of handling the 'already enabled' case for a
> few clocks and another kind for others.
> 
What about leaving it as it is for now, and try to consolidate when
we rework the code for common clock framework migration?
Wolfram Sang Nov. 17, 2011, 9:29 a.m. UTC | #6
> > I chose this approach because this is the common pattern
> > in all other clocks. There might be a better way of handling this, but
> > then we'd need to adapt all other clocks as well. What we definately
> > should not have is one kind of handling the 'already enabled' case for a
> > few clocks and another kind for others.
> > 
> What about leaving it as it is for now, and try to consolidate when
> we rework the code for common clock framework migration?

In general, very fine with me. I seem to recall saif-drivers will need a
hack then, but Aisheng surely knows better.
Dong Aisheng Nov. 17, 2011, 9:42 a.m. UTC | #7
> -----Original Message-----
> From: Wolfram Sang [mailto:w.sang@pengutronix.de]
> Sent: Thursday, November 17, 2011 5:30 PM
> To: Guo Shawn-R65073
> Cc: Dong Aisheng-B29396; linux-arm-kernel@lists.infradead.org; Sascha
> Hauer; Guo Shawn-R65073
> Subject: Re: [PATCH] arm: mx28: check for gated clocks when setting saif
> divider
> 
> > > I chose this approach because this is the common pattern in all
> > > other clocks. There might be a better way of handling this, but then
> > > we'd need to adapt all other clocks as well. What we definately
> > > should not have is one kind of handling the 'already enabled' case
> > > for a few clocks and another kind for others.
> > >
> > What about leaving it as it is for now, and try to consolidate when we
> > rework the code for common clock framework migration?
> 
> In general, very fine with me. I seem to recall saif-drivers will need a
> hack then, but Aisheng surely knows better.
> 
Yes, saif driver enables clock until trigger happens. Before that,
it needs set the clock rate as preparation.
Obviously, it cannot work since current clock code does not allow to set rate
before the clock is enabled.

My consider is that can my mxs-specific patchs adding record support go in first
since it's only related to clock driver?
Then this clock issue can be fixed later when move to common clock.

Regards
Dong Aisheng
Shawn Guo Jan. 19, 2012, 3:24 a.m. UTC | #8
On Thu, Nov 17, 2011 at 09:18:34AM +0800, Shawn Guo wrote:
> On Wed, Nov 16, 2011 at 02:51:26PM +0100, Wolfram Sang wrote:
...
> > I chose this approach because this is the common pattern
> > in all other clocks. There might be a better way of handling this, but
> > then we'd need to adapt all other clocks as well. What we definately
> > should not have is one kind of handling the 'already enabled' case for a
> > few clocks and another kind for others.
> > 
> What about leaving it as it is for now, and try to consolidate when
> we rework the code for common clock framework migration?
> 
I confirmed this patch is needed and decide to apply it immediately
without waiting for common clock consolidation effort.

PS. I'm changing the subject prefix to "ARM: mx28: ...".
diff mbox

Patch

diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
index 63d6117..c9482b5 100644
--- a/arch/arm/mach-mxs/clock-mx28.c
+++ b/arch/arm/mach-mxs/clock-mx28.c
@@ -457,6 +457,10 @@  static int name##_set_rate(struct clk *clk, unsigned long rate)		\
 	reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
 	reg &= ~BM_CLKCTRL_##rs##_DIV;					\
 	reg |= div << BP_CLKCTRL_##rs##_DIV;				\
+	if (reg & (1 << clk->enable_shift)) {				\
+		pr_err("%s: clock is gated\n", __func__);		\
+		return -EINVAL;						\
+	}								\
 	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
 									\
 	for (i = 10000; i; i--)						\