Patchwork ARM: clock-mx28: Fix end of loop condition

login
register
mail settings
Submitter Fabio Estevam
Date Jan. 16, 2012, 7:01 p.m.
Message ID <1326740477-21576-1-git-send-email-fabio.estevam@freescale.com>
Download mbox | patch
Permalink /patch/136350/
State New
Headers show

Comments

Fabio Estevam - Jan. 16, 2012, 7:01 p.m.
From: Fabio Estevam <festevam@gmail.com>

Selecting audio on a mx28evk the saif driver was failing:

[    0.660000] saif0_clk_set_rate: divider writing timeout                     
[    0.670000] mxs-sgtl5000: probe of mxs-sgtl5000.0 failed with error -110    
[    0.670000] ALSA device list:                                               
[    0.680000]   No soundcards found.    

The timeout on saif0_clk_set_rate was due to the wrong condition for the end of loop.

After fixing it, the audio driver can be correctly probed and becomes functional.

While at it, fix the other locations where the similar issue occurs.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
 arch/arm/mach-mxs/clock-mx28.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
Fabio Estevam - Jan. 16, 2012, 8:32 p.m.
On Mon, Jan 16, 2012 at 5:01 PM, Fabio Estevam
<fabio.estevam@freescale.com> wrote:
> From: Fabio Estevam <festevam@gmail.com>
>
> Selecting audio on a mx28evk the saif driver was failing:
>
> [    0.660000] saif0_clk_set_rate: divider writing timeout
> [    0.670000] mxs-sgtl5000: probe of mxs-sgtl5000.0 failed with error -110
> [    0.670000] ALSA device list:
> [    0.680000]   No soundcards found.
>
> The timeout on saif0_clk_set_rate was due to the wrong condition for the end of loop.
>
> After fixing it, the audio driver can be correctly probed and becomes functional.
>
> While at it, fix the other locations where the similar issue occurs.
>
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>

Please disregard this version.
Marek Vasut - Jan. 16, 2012, 8:52 p.m.
> From: Fabio Estevam <festevam@gmail.com>
> 
> Selecting audio on a mx28evk the saif driver was failing:
> 
> [    0.660000] saif0_clk_set_rate: divider writing timeout
> [    0.670000] mxs-sgtl5000: probe of mxs-sgtl5000.0 failed with error -110
> [    0.670000] ALSA device list:
> [    0.680000]   No soundcards found.
> 
> The timeout on saif0_clk_set_rate was due to the wrong condition for the
> end of loop.
> 
> After fixing it, the audio driver can be correctly probed and becomes
> functional.
> 
> While at it, fix the other locations where the similar issue occurs.

What? The patch doesn't make sense.

> 
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
>  arch/arm/mach-mxs/clock-mx28.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/arm/mach-mxs/clock-mx28.c
> b/arch/arm/mach-mxs/clock-mx28.c index 5d68e41..ee9e04b 100644
> --- a/arch/arm/mach-mxs/clock-mx28.c
> +++ b/arch/arm/mach-mxs/clock-mx28.c
> @@ -396,7 +396,7 @@ static int name##_set_rate(struct clk *clk, unsigned
> long rate)		\ }								
\
>  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr);		\
>  									\
> -	for (i = 10000; i; i--)						\
> +	for (i = 10000; i < 0; i--)					\
>  		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
>  			HW_CLKCTRL_##dr) & bm_busy))			\
>  			break;						\
> @@ -439,7 +439,7 @@ static int name##_set_rate(struct clk *clk, unsigned
> long rate)		\ }								
\
>  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr);		\
>  									\
> -	for (i = 10000; i; i--)						\
> +	for (i = 10000; i < 0; i--)					\
>  		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
>  			HW_CLKCTRL_##dr) & BM_CLKCTRL_##dr##_BUSY))	\
>  			break;						\
> @@ -479,7 +479,7 @@ static int name##_set_rate(struct clk *clk, unsigned
> long rate)		\ reg |= div << BP_CLKCTRL_##rs##_DIV;				
\
>  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
>  									\
> -	for (i = 10000; i; i--)						\
> +	for (i = 10000; i < 0; i--)					\
>  		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
>  			HW_CLKCTRL_##rs) & BM_CLKCTRL_##rs##_BUSY))	\
>  			break;						\
> @@ -756,7 +756,7 @@ static int clk_misc_init(void)
>  	reg |= 3 << BP_CLKCTRL_HBUS_DIV;
>  	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_HBUS);
> 
> -	for (i = 10000; i; i--)
> +	for (i = 10000; i < 0; i--)
>  		if (!(__raw_readl(CLKCTRL_BASE_ADDR +
>  			HW_CLKCTRL_HBUS) & BM_CLKCTRL_HBUS_ASM_BUSY))
>  			break;
Marek Vasut - Jan. 16, 2012, 8:52 p.m.
> On Mon, Jan 16, 2012 at 5:01 PM, Fabio Estevam
> 
> <fabio.estevam@freescale.com> wrote:
> > From: Fabio Estevam <festevam@gmail.com>
> > 
> > Selecting audio on a mx28evk the saif driver was failing:
> > 
> > [    0.660000] saif0_clk_set_rate: divider writing timeout
> > [    0.670000] mxs-sgtl5000: probe of mxs-sgtl5000.0 failed with error
> > -110 [    0.670000] ALSA device list:
> > [    0.680000]   No soundcards found.
> > 
> > The timeout on saif0_clk_set_rate was due to the wrong condition for the
> > end of loop.
> > 
> > After fixing it, the audio driver can be correctly probed and becomes
> > functional.
> > 
> > While at it, fix the other locations where the similar issue occurs.
> > 
> > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> 
> Please disregard this version.

I see ... ignore my previous comment ;-)

M
Fabio Estevam - Jan. 16, 2012, 8:55 p.m.
On Mon, Jan 16, 2012 at 6:52 PM, Marek Vasut <marek.vasut@gmail.com> wrote:

> I see ... ignore my previous comment ;-)

Sorry for the noise of my previous patch. I think this issue can be
solved by just increasing the timeout value.

I will make more tests to confirm and post a new patch.

Regards,

Fabio Estevam
Wolfram Sang - Jan. 16, 2012, 9:07 p.m.
On Mon, Jan 16, 2012 at 06:55:04PM -0200, Fabio Estevam wrote:
> On Mon, Jan 16, 2012 at 6:52 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
> 
> > I see ... ignore my previous comment ;-)
> 
> Sorry for the noise of my previous patch. I think this issue can be
> solved by just increasing the timeout value.
> 
> I will make more tests to confirm and post a new patch.

Please make it proper and use some real timeout value (measured in us) instead
of this random loop counter.
Marek Vasut - Jan. 16, 2012, 9:19 p.m.
> On Mon, Jan 16, 2012 at 06:55:04PM -0200, Fabio Estevam wrote:
> > On Mon, Jan 16, 2012 at 6:52 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
> > > I see ... ignore my previous comment ;-)
> > 
> > Sorry for the noise of my previous patch. I think this issue can be
> > solved by just increasing the timeout value.
> > 
> > I will make more tests to confirm and post a new patch.
> 
> Please make it proper and use some real timeout value (measured in us)
> instead of this random loop counter.

Good point

Patch

diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
index 5d68e41..ee9e04b 100644
--- a/arch/arm/mach-mxs/clock-mx28.c
+++ b/arch/arm/mach-mxs/clock-mx28.c
@@ -396,7 +396,7 @@  static int name##_set_rate(struct clk *clk, unsigned long rate)		\
 	}								\
 	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr);		\
 									\
-	for (i = 10000; i; i--)						\
+	for (i = 10000; i < 0; i--)					\
 		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
 			HW_CLKCTRL_##dr) & bm_busy))			\
 			break;						\
@@ -439,7 +439,7 @@  static int name##_set_rate(struct clk *clk, unsigned long rate)		\
 	}								\
 	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##dr);		\
 									\
-	for (i = 10000; i; i--)						\
+	for (i = 10000; i < 0; i--)					\
 		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
 			HW_CLKCTRL_##dr) & BM_CLKCTRL_##dr##_BUSY))	\
 			break;						\
@@ -479,7 +479,7 @@  static int name##_set_rate(struct clk *clk, unsigned long rate)		\
 	reg |= div << BP_CLKCTRL_##rs##_DIV;				\
 	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_##rs);		\
 									\
-	for (i = 10000; i; i--)						\
+	for (i = 10000; i < 0; i--)					\
 		if (!(__raw_readl(CLKCTRL_BASE_ADDR +			\
 			HW_CLKCTRL_##rs) & BM_CLKCTRL_##rs##_BUSY))	\
 			break;						\
@@ -756,7 +756,7 @@  static int clk_misc_init(void)
 	reg |= 3 << BP_CLKCTRL_HBUS_DIV;
 	__raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_HBUS);
 
-	for (i = 10000; i; i--)
+	for (i = 10000; i < 0; i--)
 		if (!(__raw_readl(CLKCTRL_BASE_ADDR +
 			HW_CLKCTRL_HBUS) & BM_CLKCTRL_HBUS_ASM_BUSY))
 			break;