diff mbox series

[U-Boot,V2] ddr: socfpga: Fix EMIF clear timeout

Message ID 20190308205137.9374-1-marex@denx.de
State Superseded
Delegated to: Marek Vasut
Headers show
Series [U-Boot,V2] ddr: socfpga: Fix EMIF clear timeout | expand

Commit Message

Marek Vasut March 8, 2019, 8:51 p.m. UTC
The current EMIF clear timeout handling code was applying bitwise
operations to signed data types and as it was, was extremely hard
to read. Replace it with simple wait_for_bit(). Expand the error
handling to make it more readable too.

This patch also changes the timeout for emif_clear() from 14 hours
to 1 second.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Chin Liang See <chin.liang.see@intel.com>
Cc: Dinh Nguyen <dinguyen@kernel.org>
Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Cc: Tien Fong Chee <tien.fong.chee@intel.com>
---
V2: Subject should read ddr: socfpga: , fix this
---
 drivers/ddr/altera/sdram_arria10.c | 24 +++++++++++-------------
 1 file changed, 11 insertions(+), 13 deletions(-)

Comments

Simon Goldschmidt March 8, 2019, 8:55 p.m. UTC | #1
On 08.03.2019 21:51, Marek Vasut wrote:
> The current EMIF clear timeout handling code was applying bitwise
> operations to signed data types and as it was, was extremely hard
> to read. Replace it with simple wait_for_bit(). Expand the error
> handling to make it more readable too.
> 
> This patch also changes the timeout for emif_clear() from 14 hours
> to 1 second.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Chin Liang See <chin.liang.see@intel.com>
> Cc: Dinh Nguyen <dinguyen@kernel.org>
> Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> Cc: Tien Fong Chee <tien.fong.chee@intel.com>
> ---
> V2: Subject should read ddr: socfpga: , fix this
> ---
>   drivers/ddr/altera/sdram_arria10.c | 24 +++++++++++-------------
>   1 file changed, 11 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/ddr/altera/sdram_arria10.c b/drivers/ddr/altera/sdram_arria10.c
> index be5ce778e8..6e6938fdb0 100644
> --- a/drivers/ddr/altera/sdram_arria10.c
> +++ b/drivers/ddr/altera/sdram_arria10.c
> @@ -133,22 +133,16 @@ static unsigned char ddr_wait_bit(u32 ereg, u32 bit,
>   
>   static int emif_clear(void)
>   {
> -	u32 i = DDR_MAX_TRIES;

Wasn't this the last usage of this define?

Other than that:
Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>

> -	u8 ret = 0;
> -
>   	writel(0, DDR_REG_CORE2SEQ);
>   
> -	do {
> -		ret = !wait_for_bit_le32((u32 *)DDR_REG_SEQ2CORE,
> -				   SEQ2CORE_MASK, 1, 50, 0);
> -	} while (ret && (--i > 0));
> -
> -	return !i;
> +	return wait_for_bit_le32((u32 *)DDR_REG_SEQ2CORE,
> +				SEQ2CORE_MASK, 0, 1000, 0);
>   }
>   
>   static int emif_reset(void)
>   {
>   	u32 c2s, s2c;
> +	int ret;
>   
>   	c2s = readl(DDR_REG_CORE2SEQ);
>   	s2c = readl(DDR_REG_SEQ2CORE);
> @@ -159,9 +153,12 @@ static int emif_reset(void)
>   	     readl(IO48_MMR_NIOS2_RESERVE2),
>   	     readl(IO48_MMR_DRAMSTS));
>   
> -	if ((s2c & SEQ2CORE_MASK) && emif_clear()) {
> -		debug("failed emif_clear()\n");
> -		return -EPERM;
> +	if (s2c & SEQ2CORE_MASK) {
> +		ret = emif_clear();
> +		if (ret) {
> +			debug("failed emif_clear()\n");
> +			return -EPERM;
> +		}
>   	}
>   
>   	writel(CORE2SEQ_INT_REQ, DDR_REG_CORE2SEQ);
> @@ -173,7 +170,8 @@ static int emif_reset(void)
>   		debug("emif_reset interrupt acknowledged\n");
>   	}
>   
> -	if (emif_clear()) {
> +	ret = emif_clear();
> +	if (ret) {
>   		debug("emif_clear() failed\n");
>   		return -EPERM;
>   	}
>
diff mbox series

Patch

diff --git a/drivers/ddr/altera/sdram_arria10.c b/drivers/ddr/altera/sdram_arria10.c
index be5ce778e8..6e6938fdb0 100644
--- a/drivers/ddr/altera/sdram_arria10.c
+++ b/drivers/ddr/altera/sdram_arria10.c
@@ -133,22 +133,16 @@  static unsigned char ddr_wait_bit(u32 ereg, u32 bit,
 
 static int emif_clear(void)
 {
-	u32 i = DDR_MAX_TRIES;
-	u8 ret = 0;
-
 	writel(0, DDR_REG_CORE2SEQ);
 
-	do {
-		ret = !wait_for_bit_le32((u32 *)DDR_REG_SEQ2CORE,
-				   SEQ2CORE_MASK, 1, 50, 0);
-	} while (ret && (--i > 0));
-
-	return !i;
+	return wait_for_bit_le32((u32 *)DDR_REG_SEQ2CORE,
+				SEQ2CORE_MASK, 0, 1000, 0);
 }
 
 static int emif_reset(void)
 {
 	u32 c2s, s2c;
+	int ret;
 
 	c2s = readl(DDR_REG_CORE2SEQ);
 	s2c = readl(DDR_REG_SEQ2CORE);
@@ -159,9 +153,12 @@  static int emif_reset(void)
 	     readl(IO48_MMR_NIOS2_RESERVE2),
 	     readl(IO48_MMR_DRAMSTS));
 
-	if ((s2c & SEQ2CORE_MASK) && emif_clear()) {
-		debug("failed emif_clear()\n");
-		return -EPERM;
+	if (s2c & SEQ2CORE_MASK) {
+		ret = emif_clear();
+		if (ret) {
+			debug("failed emif_clear()\n");
+			return -EPERM;
+		}
 	}
 
 	writel(CORE2SEQ_INT_REQ, DDR_REG_CORE2SEQ);
@@ -173,7 +170,8 @@  static int emif_reset(void)
 		debug("emif_reset interrupt acknowledged\n");
 	}
 
-	if (emif_clear()) {
+	ret = emif_clear();
+	if (ret) {
 		debug("emif_clear() failed\n");
 		return -EPERM;
 	}