From aa86dcf45f155326b9774ae57d37b2188d4c1976 Mon Sep 17 00:00:00 2001 From: Eric Yang Date: Thu, 4 Jun 2026 08:53:56 +0000 Subject: [PATCH] [asgvolt64][as7535-28xb]Add BMC detection in init.py Signed-off-by: Eric Yang --- .../x86_64_accton_as7535_28xb_r0/__init__.py | 70 ++++++++++++++++++ .../x86_64_accton_asgvolt64_r0/__init__.py | 71 +++++++++++++++++++ 2 files changed, 141 insertions(+) diff --git a/packages/platforms/accton/x86-64/as7535-28xb/platform-config/r0/src/python/x86_64_accton_as7535_28xb_r0/__init__.py b/packages/platforms/accton/x86-64/as7535-28xb/platform-config/r0/src/python/x86_64_accton_as7535_28xb_r0/__init__.py index c7120080b..8c1b52e04 100644 --- a/packages/platforms/accton/x86-64/as7535-28xb/platform-config/r0/src/python/x86_64_accton_as7535_28xb_r0/__init__.py +++ b/packages/platforms/accton/x86-64/as7535-28xb/platform-config/r0/src/python/x86_64_accton_as7535_28xb_r0/__init__.py @@ -1,5 +1,71 @@ from onl.platform.base import * from onl.platform.accton import * +from time import sleep + +init_ipmi_dev = [ + 'echo "remove,kcs,i/o,0xca2" > /sys/module/ipmi_si/parameters/hotmod', + 'echo "add,kcs,i/o,0xca2" > /sys/module/ipmi_si/parameters/hotmod'] + +ATTEMPTS = 5 +INTERVAL = 3 + +def init_ipmi_dev_intf(): + attempts = ATTEMPTS + interval = INTERVAL + + while attempts: + if os.path.exists('/dev/ipmi0') or os.path.exists('/dev/ipmidev/0'): + return (True, (ATTEMPTS - attempts) * interval) + + for i in range(0, len(init_ipmi_dev)): + process = subprocess.Popen(init_ipmi_dev[i], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + + attempts -= 1 + sleep(interval) + + return (False, ATTEMPTS * interval) + +def init_ipmi_oem_cmd(): + attempts = ATTEMPTS + interval = INTERVAL + + while attempts: + cmd = "ipmitool raw 0x34 0x95" + process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + status = process.returncode + if status: + attempts -= 1 + sleep(interval) + continue + + return (True, (ATTEMPTS - attempts) * interval) + + return (False, ATTEMPTS * interval) + +def init_ipmi(): + attempts = ATTEMPTS + interval = 60 + + while attempts: + attempts -= 1 + + (status, elapsed_dev) = init_ipmi_dev_intf() + if status is not True: + sleep(interval - elapsed_dev) + continue + + (status, elapsed_oem) = init_ipmi_oem_cmd() + if status is not True: + sleep(interval - elapsed_dev - elapsed_oem) + continue + + print('IPMI dev interface is ready.') + return True + + print('Failed to initialize IPMI dev interface') + return False class OnlPlatform_x86_64_accton_as7535_28xb_r0(OnlPlatformAccton, OnlPlatformPortConfig_2x100_2x400_24x25): @@ -8,6 +74,10 @@ class OnlPlatform_x86_64_accton_as7535_28xb_r0(OnlPlatformAccton, SYS_OBJECT_ID=".7535.28" def baseconfig(self): + + if init_ipmi() is not True: + return False + self.insmod('optoe') self.insmod("accton_ipmi_intf") for m in [ 'sys', 'cpld', 'fan', 'psu', 'thermal', 'leds', 'fpga']: diff --git a/packages/platforms/accton/x86-64/asgvolt64/platform-config/r0/src/python/x86_64_accton_asgvolt64_r0/__init__.py b/packages/platforms/accton/x86-64/asgvolt64/platform-config/r0/src/python/x86_64_accton_asgvolt64_r0/__init__.py index 6de2d92d9..bf18c0853 100755 --- a/packages/platforms/accton/x86-64/asgvolt64/platform-config/r0/src/python/x86_64_accton_asgvolt64_r0/__init__.py +++ b/packages/platforms/accton/x86-64/asgvolt64/platform-config/r0/src/python/x86_64_accton_asgvolt64_r0/__init__.py @@ -1,8 +1,75 @@ from onl.platform.base import * from onl.platform.accton import * +from time import sleep import commands + +init_ipmi_dev = [ + 'echo "remove,kcs,i/o,0xca2" > /sys/module/ipmi_si/parameters/hotmod', + 'echo "add,kcs,i/o,0xca2" > /sys/module/ipmi_si/parameters/hotmod'] + +ATTEMPTS = 5 +INTERVAL = 3 + +def init_ipmi_dev_intf(): + attempts = ATTEMPTS + interval = INTERVAL + + while attempts: + if os.path.exists('/dev/ipmi0') or os.path.exists('/dev/ipmidev/0'): + return (True, (ATTEMPTS - attempts) * interval) + + for i in range(0, len(init_ipmi_dev)): + process = subprocess.Popen(init_ipmi_dev[i], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + + attempts -= 1 + sleep(interval) + + return (False, ATTEMPTS * interval) + +def init_ipmi_oem_cmd(): + attempts = ATTEMPTS + interval = INTERVAL + + while attempts: + cmd = "ipmitool raw 0x34 0x95" + process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + status = process.returncode + if status: + attempts -= 1 + sleep(interval) + continue + + return (True, (ATTEMPTS - attempts) * interval) + + return (False, ATTEMPTS * interval) + +def init_ipmi(): + attempts = ATTEMPTS + interval = 60 + + while attempts: + attempts -= 1 + + (status, elapsed_dev) = init_ipmi_dev_intf() + if status is not True: + sleep(interval - elapsed_dev) + continue + + (status, elapsed_oem) = init_ipmi_oem_cmd() + if status is not True: + sleep(interval - elapsed_dev - elapsed_oem) + continue + + print('IPMI dev interface is ready.') + return True + + print('Failed to initialize IPMI dev interface') + return False + def fpga_pcie_init(): cmd= "setpci -s 16:00.0 0x04.B=0x7" status, output = commands.getstatusoutput(cmd) @@ -60,6 +127,10 @@ class OnlPlatform_x86_64_accton_asgvolt64_r0(OnlPlatformAccton, } def baseconfig(self): + + if init_ipmi() is not True: + return False + #self.insmod('ym2651y') self.insmod('optoe') for m in [ 'cpld', 'fan', 'psu', 'leds', 'thermal', 'sys', 'fpga' ]: