sonic-buildimage/platform/broadcom/sonic-platform-modules-ragile/common/script/avscontrol.py
pettershao-ragilenetworks abccdaeb6c
[Ragile]Adapt kernel 5.10 for broadcom on RA-B6510-48V8C (#14809)
* Adapt kernel 5.10 for broadcom on RA-B6510-48V4C

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* update

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* update

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* update

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* update

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* modify one-image.mk file

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* modify debian/rule.mk

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

* Add platform.json file

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>

---------

Signed-off-by: pettershao-ragilenetworks <pettershao@ragilenetworks.com>
2023-08-04 12:01:49 -07:00

204 lines
5.8 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import os
import time
import syslog
import glob
import click
from platform_config import MAC_DEFAULT_PARAM
from platform_util import getSdkReg, write_sysfs, get_value, get_format_value
AVSCTROL_DEBUG_FILE = "/etc/.avscontrol_debug_flag"
AVSCTROLERROR = 1
AVSCTROLDEBUG = 2
debuglevel = 0
CONTEXT_SETTINGS = {"help_option_names": ['-h', '--help']}
class AliasedGroup(click.Group):
def get_command(self, ctx, cmd_name):
rv = click.Group.get_command(self, ctx, cmd_name)
if rv is not None:
return rv
matches = [x for x in self.list_commands(ctx)
if x.startswith(cmd_name)]
if not matches:
return None
if len(matches) == 1:
return click.Group.get_command(self, ctx, matches[0])
ctx.fail('Too many matches: %s' % ', '.join(sorted(matches)))
return None
def avscontrol_debug(s):
if AVSCTROLDEBUG & debuglevel:
syslog.openlog("AVSCONTROL", syslog.LOG_PID)
syslog.syslog(syslog.LOG_DEBUG, s)
def avscontrol_error(s):
if AVSCTROLERROR & debuglevel:
syslog.openlog("AVSCONTROL", syslog.LOG_PID)
syslog.syslog(syslog.LOG_ERR, s)
def avserror(s):
# s = s.decode('utf-8').encode('gb2312')
syslog.openlog("AVSCONTROL", syslog.LOG_PID)
syslog.syslog(syslog.LOG_ERR, s)
def avsinfo(s):
syslog.openlog("AVSCONTROL", syslog.LOG_PID)
syslog.syslog(syslog.LOG_INFO, s)
def debug_init():
global debuglevel
if os.path.exists(AVSCTROL_DEBUG_FILE):
debuglevel = debuglevel | AVSCTROLDEBUG | AVSCTROLERROR
else:
debuglevel = debuglevel & ~(AVSCTROLDEBUG | AVSCTROLERROR)
def set_avs_value_sysfs(conf, dcdc_value):
msg = ""
formula = conf.get("formula", None)
loc = conf.get("loc")
locations = glob.glob(loc)
if len(locations) == 0:
msg = "avs sysfs loc: %s not found" % loc
avscontrol_error(msg)
return False, msg
sysfs_loc = locations[0]
avscontrol_debug("set_avs_value_sysfs, loc: %s, origin dcdc value: %s, formula: %s" %
(sysfs_loc, dcdc_value, formula))
if formula is not None:
dcdc_value = get_format_value(formula % (dcdc_value))
wr_val = str(dcdc_value)
avscontrol_debug("set_avs_value_sysfs, write val: %s" % wr_val)
ret, log = write_sysfs(sysfs_loc, wr_val)
if ret is False:
msg = "set_avs_value_sysfs failed, msg: %s" % log
avscontrol_error(msg)
return ret, msg
def set_avs_value(avs_conf, dcdc_value):
set_avs_way = avs_conf.get("set_avs", {}).get("gettype")
if set_avs_way != "sysfs":
msg = "unsupport set avs value type: %s" % set_avs_way
avscontrol_error(msg)
return False, msg
ret, msg = set_avs_value_sysfs(avs_conf["set_avs"], dcdc_value)
return ret, msg
def get_dcdc_value(avs_conf, rov_value):
msg = ""
mac_avs_param = avs_conf.get("mac_avs_param", {})
if rov_value not in mac_avs_param.keys():
if avs_conf["type"] == 0:
msg = "VID:0x%x out of range, voltage regulate stop" % rov_value
avsinfo(msg)
return False, msg
dcdc_value = mac_avs_param[avs_conf["default"]]
avsinfo("VID:0x%x out of range, use default VID:0x%x" % (rov_value, dcdc_value))
else:
dcdc_value = mac_avs_param[rov_value]
return True, dcdc_value
def get_rov_value_cpld(avs_conf):
cpld_avs_config = avs_conf["cpld_avs"]
return get_value(cpld_avs_config)
def get_rov_value_sdk(avs_conf):
name = avs_conf["sdkreg"]
ret, status = getSdkReg(name)
if ret is False:
return False, status
status = int(status, 16)
# shift operation
if avs_conf["sdktype"] != 0:
status = (status >> avs_conf["macregloc"]) & avs_conf["mask"]
macavs = status
return True, macavs
def doAvsCtrol_single(avs_conf):
try:
avs_name = avs_conf.get("name")
rov_source = avs_conf["rov_source"]
if rov_source == 0:
ret, rov_value = get_rov_value_cpld(avs_conf) # get rov from cpld reg
else:
ret, rov_value = get_rov_value_sdk(avs_conf) # get rov from sdk reg
if ret is False:
msg = "%s get rov_value failed, msg: %s" % (avs_name, rov_value)
avscontrol_error(msg)
return False, msg
avscontrol_debug("%s rov_value: 0x%x" % (avs_name, rov_value))
ret, dcdc_value = get_dcdc_value(avs_conf, rov_value)
if ret is False:
msg = "%s get output voltage value failed, msg: %s" % (avs_name, dcdc_value)
avscontrol_error(msg)
return False, msg
ret, msg = set_avs_value(avs_conf, dcdc_value)
return ret, msg
except Exception as e:
msg = "%s avscontrol raise exception, msg: %s" % (avs_name, str(e))
avscontrol_error(msg)
return False, msg
def doAvsCtrol(avs_conf):
retry_time = avs_conf.get("retry", 10)
for i in range(retry_time):
debug_init()
ret, log = doAvsCtrol_single(avs_conf)
if ret is True:
return True, log
time.sleep(1)
return False, log
def run():
# wait 30s for device steady
time.sleep(30)
errcnt = 0
msg = ""
for item in MAC_DEFAULT_PARAM:
status, log = doAvsCtrol(item)
if status is False:
errcnt += 1
msg += log
if errcnt == 0:
avsinfo("%%AVSCONTROL success")
sys.exit(0)
avserror("%%DEV_MONITOR-AVS: MAC Voltage adjust failed.")
avserror("%%DEV_MONITOR-AVS: errmsg: %s" % msg)
sys.exit(1)
@click.group(cls=AliasedGroup, context_settings=CONTEXT_SETTINGS)
def main():
'''device operator'''
@main.command()
def start():
'''start AVS control'''
avsinfo("%%AVSCONTROL start")
run()
if __name__ == '__main__':
main()