From 8daa3468b52f89e069bca469a68b866c2583a4a5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Beh=C3=BAn?= Date: Fri, 4 Aug 2017 15:28:25 +0200 Subject: [PATCH] mvebu: turris_omnia: Fix PEX vs SATA detection for board topology 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 Signed-off-by: Stefan Roese --- 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; } -- 2.39.5