diff mbox

ARM: clock-mx28: Fix end of loop condition

Message ID 1326740477-21576-1-git-send-email-fabio.estevam@freescale.com
State New
Headers show

Commit Message

Fabio Estevam Jan. 16, 2012, 7:01 p.m. UTC
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(-)

Comments

Fabio Estevam Jan. 16, 2012, 8:32 p.m. UTC | #1
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. UTC | #2
> 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. UTC | #3
> 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. UTC | #4
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. UTC | #5
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. UTC | #6
> 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
diff mbox

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;