From fd26292cbf1c4b0dee9e8bae0d3eb3af89f90edd Mon Sep 17 00:00:00 2001
From: Andriy Moroz <c_andriym@mellanox.com>
Date: Tue, 9 Apr 2019 13:55:18 +0300
Subject: [PATCH 1/2] Improve eeprom access reliability

Signed-off-by: Andriy Moroz <c_andriym@mellanox.com>
---
 .../x86_64-mlnx_msn2700-r0/plugins/eeprom.py  | 23 ++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
index 3650d9c8b70b..50304e696415 100644
--- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
+++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
@@ -17,16 +17,37 @@
     import warnings
     import os
     import sys
+    import syslog
     from sonic_eeprom import eeprom_base
     from sonic_eeprom import eeprom_tlvinfo
     import subprocess
 except ImportError, e:
     raise ImportError (str(e) + "- required module not found")
 
+SYSLOG_IDENTIFIER = "eeprom.py"
+EEPROM_SYMLINK = "/bsp/eeprom/sys_eeprom"
+CACHE_FILE = "/var/cache/sonic/decode-syseeprom/syseeprom_cache"
+
+def log_error(msg):
+    syslog.openlog(SYSLOG_IDENTIFIER)
+    syslog.syslog(syslog.LOG_ERR, msg)
+    syslog.closelog()
+
 class board(eeprom_tlvinfo.TlvInfoDecoder):
 
     _TLV_INFO_MAX_LEN = 256
+    RETRIES = 5
 
     def __init__(self, name, path, cpld_root, ro):
-        self.eeprom_path = "/bsp/eeprom/sys_eeprom"
+        for attempt in range(self.RETRIES):
+            if not os.path.islink(EEPROM_SYMLINK):
+                time.sleep(1)
+            else:
+                break
+
+        if not (os.path.exists(EEPROM_SYMLINK) or os.path.isfile(CACHE_FILE)):
+            log_error("Nowhere to read syseeprom from! No symlink or cache file found")
+            raise RuntimeError("No syseeprom symlink or cache file found")
+
+        self.eeprom_path = EEPROM_SYMLINK
         super(board, self).__init__(self.eeprom_path, 0, '', True)

From 23c0f1101856fd74c2bb69d3d8e3cb7dfb281a01 Mon Sep 17 00:00:00 2001
From: Qi Luo <qiluo-msft@users.noreply.github.com>
Date: Wed, 10 Apr 2019 14:25:42 +0300
Subject: [PATCH 2/2] Update
 device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py

Co-Authored-By: andriymoroz-mlnx <c_andriym@mellanox.com>
---
 device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
index 50304e696415..108bf5f4f65f 100644
--- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
+++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py
@@ -40,7 +40,7 @@ class board(eeprom_tlvinfo.TlvInfoDecoder):
 
     def __init__(self, name, path, cpld_root, ro):
         for attempt in range(self.RETRIES):
-            if not os.path.islink(EEPROM_SYMLINK):
+            if not (os.path.exists(EEPROM_SYMLINK) or os.path.isfile(CACHE_FILE)):
                 time.sleep(1)
             else:
                 break