All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Delaunay <patrick.delaunay@st.com>
To: u-boot@lists.denx.de
Subject: [PATCH 4/9] ram: stm32mp1: tuning: add timeout for polling BISTGSR.BDDONE
Date: Fri, 6 Mar 2020 11:14:06 +0100	[thread overview]
Message-ID: <20200306111355.4.If03eb32f9863bed008f5367b47116f667bb85099@changeid> (raw)
In-Reply-To: <20200306101412.15376-1-patrick.delaunay@st.com>

Avoid to block the tuning procedure on BIST error (not finished
BIST procedure) by adding a 1000us timeout on the polling of
BISTGSR.BDDONE executed to detect the end of BIST.

The normal duration of the BIST test is around 5us.

This patch also cleanup comments.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---

 drivers/ram/stm32mp1/stm32mp1_tuning.c | 45 ++++++++++++++------------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/drivers/ram/stm32mp1/stm32mp1_tuning.c b/drivers/ram/stm32mp1/stm32mp1_tuning.c
index e3e6f0f79c..cab6cf087a 100644
--- a/drivers/ram/stm32mp1/stm32mp1_tuning.c
+++ b/drivers/ram/stm32mp1/stm32mp1_tuning.c
@@ -8,6 +8,7 @@
 #include <ram.h>
 #include <reset.h>
 #include <asm/io.h>
+#include <linux/iopoll.h>
 
 #include "stm32mp1_ddr_regs.h"
 #include "stm32mp1_ddr.h"
@@ -246,6 +247,8 @@ static void BIST_test(struct stm32mp1_ddrphy *phy, u8 byte,
 	bool result = true; /* BIST_SUCCESS */
 	u32 cnt = 0;
 	u32 error = 0;
+	u32 val;
+	int ret;
 
 	bist->test_result = true;
 
@@ -274,27 +277,29 @@ run:
 			0x00000001);
 	/* Write BISTRR.BINST = 3?b001; */
 
-	/* Wait for a number of CTL clocks before reading BIST register*/
-	/* Wait 300 ctl_clk cycles;  ... IS it really needed?? */
-	/* Perform BIST Instruction Stop*/
-	/* Write BISTRR.BINST = 3?b010;*/
-
-	/* poll on BISTGSR.BDONE. If 0, wait.  ++TODO Add timeout */
-	while (!(readl(&phy->bistgsr) & DDRPHYC_BISTGSR_BDDONE))
-		;
-
-	/*Check if received correct number of words*/
-	/* if (Read BISTWCSR.DXWCNT = Read BISTWCR.BWCNT) */
-	if (((readl(&phy->bistwcsr)) >> DDRPHYC_BISTWCSR_DXWCNT_SHIFT) ==
-	    readl(&phy->bistwcr)) {
-		/*Determine if there is a data comparison error*/
-		/* if (Read BISTGSR.BDXERR = 1?b0) */
-		if (readl(&phy->bistgsr) & DDRPHYC_BISTGSR_BDXERR)
-			result = false; /* BIST_FAIL; */
-		else
-			result = true; /* BIST_SUCCESS; */
-	} else {
+	/* poll on BISTGSR.BDONE and wait max 1000 us */
+	ret = readl_poll_timeout(&phy->bistgsr, val,
+				 val & DDRPHYC_BISTGSR_BDDONE, 1000);
+
+	if (ret < 0) {
+		printf("warning: BIST timeout\n");
 		result = false; /* BIST_FAIL; */
+		/*Perform BIST Stop */
+		clrsetbits_le32(&phy->bistrr, 0x00000007, 0x00000002);
+	} else {
+		/*Check if received correct number of words*/
+		/* if (Read BISTWCSR.DXWCNT = Read BISTWCR.BWCNT) */
+		if (((readl(&phy->bistwcsr)) >> DDRPHYC_BISTWCSR_DXWCNT_SHIFT)
+		    == readl(&phy->bistwcr)) {
+			/*Determine if there is a data comparison error*/
+			/* if (Read BISTGSR.BDXERR = 1?b0) */
+			if (readl(&phy->bistgsr) & DDRPHYC_BISTGSR_BDXERR)
+				result = false; /* BIST_FAIL; */
+			else
+				result = true; /* BIST_SUCCESS; */
+		} else {
+			result = false; /* BIST_FAIL; */
+		}
 	}
 
 	/* loop while success */
-- 
2.17.1

  parent reply	other threads:[~2020-03-06 10:14 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-06 10:14 [PATCH 0/9] ram: stm32mp1: fixes Patrick Delaunay
2020-03-06 10:14 ` [PATCH 1/9] ram: stm32mp1: increase vdd2_ddr: buck2 for 32bits LPDDR Patrick Delaunay
2020-03-18  9:39   ` Patrice CHOTARD
2020-03-24  8:48   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 2/9] ram: stm32mp1: display result for software read DQS gating Patrick Delaunay
2020-03-18  9:39   ` Patrice CHOTARD
2020-03-24  8:48   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 3/9] ram: stm32mp1: don't display the prompt two times Patrick Delaunay
2020-03-18  9:39   ` Patrice CHOTARD
2020-03-24  8:49   ` Patrick DELAUNAY
2020-03-06 10:14 ` Patrick Delaunay [this message]
2020-03-18  9:40   ` [PATCH 4/9] ram: stm32mp1: tuning: add timeout for polling BISTGSR.BDDONE Patrice CHOTARD
2020-03-24  8:49   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 5/9] ram: stm32mp1: tuning: deactivate derating during BIST test Patrick Delaunay
2020-03-18  9:43   ` Patrice CHOTARD
2020-03-24  8:50   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 6/9] ram: stm32mp1: update BIST config for tuning Patrick Delaunay
2020-03-18  9:45   ` Patrice CHOTARD
2020-03-24  8:50   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 7/9] ram: stm32mp1_ddr: fix self refresh disable during DQS training Patrick Delaunay
2020-03-18  9:46   ` Patrice CHOTARD
2020-03-24  8:51   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 8/9] ram: stm32mp1: reduce delay after BIST reset for tuning Patrick Delaunay
2020-03-18  9:46   ` Patrice CHOTARD
2020-03-24  8:51   ` Patrick DELAUNAY
2020-03-06 10:14 ` [PATCH 9/9] ram: stm32mp1: the property st,phy-cal becomes optional Patrick Delaunay
2020-03-18  9:52   ` Patrice CHOTARD
2020-03-24  8:51   ` Patrick DELAUNAY

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200306111355.4.If03eb32f9863bed008f5367b47116f667bb85099@changeid \
    --to=patrick.delaunay@st.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.