diff mbox

[U-Boot] mvebu: turris_omnia: Fix PEX vs SATA detection for board topology

Message ID 20170804132825.20849-1-marek.behun@nic.cz
State Accepted
Commit 8daa3468b52f89e069bca469a68b866c2583a4a5
Delegated to: Stefan Roese
Headers show

Commit Message

Marek BehĂșn Aug. 4, 2017, 1:28 p.m. UTC
The I2C reading in the PEX vs SATA detection code often fails on the
first try. Try three times, as the code for EEPROM reading does.

Signed-off-by: Marek Behun <marek.behun@nic.cz>
---
 board/CZ.NIC/turris_omnia/turris_omnia.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Stefan Roese Aug. 8, 2017, 12:23 p.m. UTC | #1
On 04.08.2017 15:28, Marek BehĂșn wrote:
> The I2C reading in the PEX vs SATA detection code often fails on the
> first try. Try three times, as the code for EEPROM reading does.
> 
> Signed-off-by: Marek Behun <marek.behun@nic.cz>
> ---
>   board/CZ.NIC/turris_omnia/turris_omnia.c | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
> index 86926f8050..a4275091d2 100644
> --- a/board/CZ.NIC/turris_omnia/turris_omnia.c
> +++ b/board/CZ.NIC/turris_omnia/turris_omnia.c
> @@ -90,7 +90,7 @@ static struct serdes_map board_serdes_map_sata[] = {
>   static bool omnia_detect_sata(void)
>   {
>   	struct udevice *bus, *dev;
> -	int ret;
> +	int ret, retry = 3;
>   	u16 mode;
>   
>   	puts("SERDES0 card detect: ");
> @@ -106,8 +106,13 @@ static bool omnia_detect_sata(void)
>   		return false;
>   	}
>   
> -	ret = dm_i2c_read(dev, OMNIA_I2C_MCU_ADDR_STATUS, (uchar *) &mode, 2);
> -	if (ret) {
> +	for (; retry > 0; --retry) {
> +		ret = dm_i2c_read(dev, OMNIA_I2C_MCU_ADDR_STATUS, (uchar *) &mode, 2);
> +		if (!ret)
> +			break;
> +	}
> +
> +	if (!retry) {
>   		puts("I2C read failed! Default PEX\n");
>   		return false;
>   	}
> 

Applied to u-boot-marvell/master.

Thanks,
Stefan
diff mbox

Patch

diff --git a/board/CZ.NIC/turris_omnia/turris_omnia.c b/board/CZ.NIC/turris_omnia/turris_omnia.c
index 86926f8050..a4275091d2 100644
--- a/board/CZ.NIC/turris_omnia/turris_omnia.c
+++ b/board/CZ.NIC/turris_omnia/turris_omnia.c
@@ -90,7 +90,7 @@  static struct serdes_map board_serdes_map_sata[] = {
 static bool omnia_detect_sata(void)
 {
 	struct udevice *bus, *dev;
-	int ret;
+	int ret, retry = 3;
 	u16 mode;
 
 	puts("SERDES0 card detect: ");
@@ -106,8 +106,13 @@  static bool omnia_detect_sata(void)
 		return false;
 	}
 
-	ret = dm_i2c_read(dev, OMNIA_I2C_MCU_ADDR_STATUS, (uchar *) &mode, 2);
-	if (ret) {
+	for (; retry > 0; --retry) {
+		ret = dm_i2c_read(dev, OMNIA_I2C_MCU_ADDR_STATUS, (uchar *) &mode, 2);
+		if (!ret)
+			break;
+	}
+
+	if (!retry) {
 		puts("I2C read failed! Default PEX\n");
 		return false;
 	}