in meta-bf/meta-mavericks/recipes-utils/openbmc-utils/files/btools.py [0:0]
def ir_voltage_set_mavericks(arg_ir, p0c):
a = ir_open_i2c_switch()
UPPER_IR_I2C_BUS = "0x9"
UPPER_IR_PMBUS_ADDR = {1: "0x40", 2: "0x74", 3: "0x71"}
string_upper = {1: "VDD_CORE", 2: "AVDD", 3: "QSFP_UPPER"}
LOWER_IR_I2C_BUS = "0x1"
if (p0c == 1):
LOWER_IR_PMBUS_ADDR = {1: "0x71", 2: "0x72", 3: "0x70"}
lower_string = {1: "QSFP_LOWER", 2: "RETIMER_VDDA", 3: "RETIMER_VDD"}
else :
LOWER_IR_PMBUS_ADDR = {1: "0x71", 2: "0x72"}
lower_string = {1: "QSFP_LOWER", 2: "REPEATER"}
IR_MARGIN_LOW_AOF_OP = "0x98"
IR_MARGIN_HIGH_AOF_OP = "0xA8"
IR_MARGIN_OFF = "0x80"
IR_OPERATION = "0x1"
IR_VOUT_MARGIN_HIGH = "0x25"
IR_VOUT_MARGIN_LOW = "0x26"
IR_VOUT_CMD = "0x21"
if arg_ir[3] == "AVDD":
# voltage +3% -3% 0x1b6=>438
VOLT_MARGIN_HIGH = "0x1DB"
VOLT_MARGIN_LOW = "0x1BF"
VOLT_NORMAL = "0x1CE"
i2c_addr = UPPER_IR_PMBUS_ADDR.get(2)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], UPPER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
elif arg_ir[3] == "VDD_CORE":
# voltage +2% -2% 0x1AE=>430
VOLT_MARGIN_HIGH = "0x0DB"
VOLT_MARGIN_LOW = "0x0D3"
VOLT_NORMAL = "0x0D7"
i2c_addr = UPPER_IR_PMBUS_ADDR.get(1)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], UPPER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
elif arg_ir[3] == "QSFP_UPPER":
VOLT_MARGIN_HIGH = "0x361"
VOLT_MARGIN_LOW = "0x323"
VOLT_NORMAL = "0x34D"
i2c_addr = UPPER_IR_PMBUS_ADDR.get(3)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], UPPER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
elif arg_ir[3] == "QSFP_LOWER":
VOLT_MARGIN_HIGH = "0x361"
VOLT_MARGIN_LOW = "0x323"
VOLT_NORMAL = "0x34D"
i2c_addr = LOWER_IR_PMBUS_ADDR.get(1)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], LOWER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
elif arg_ir[3] == "RETIMER_VDD":
if (p0c != 1):
error_ir_usage()
VOLT_MARGIN_HIGH = "0x20F"
VOLT_MARGIN_LOW = "0x1F1"
VOLT_NORMAL = "0x200"
#set VDD
i2c_addr = LOWER_IR_PMBUS_ADDR.get(3)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], LOWER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
#set VDDA
elif arg_ir[3] == "RETIMER_VDDA":
if (p0c != 1):
error_ir_usage()
i2c_addr = LOWER_IR_PMBUS_ADDR.get(2)
VOLT_A_MARGIN_HIGH = "0x3B5"
VOLT_A_MARGIN_LOW = "0x37E"
VOLT_A_NORMAL = "0x39A"
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_A_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_A_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_A_NORMAL
set_ir_voltage(arg_ir[3], LOWER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
elif arg_ir[3] == "REPEATER":
if (p0c != 0):
error_ir_usage()
VOLT_MARGIN_HIGH = "0x2A0"
VOLT_MARGIN_LOW = "0x260"
VOLT_NORMAL = "0x280"
i2c_addr = LOWER_IR_PMBUS_ADDR.get(2)
if arg_ir[2] == "l":
margin_cmd = IR_VOUT_MARGIN_LOW
margin_apply = IR_MARGIN_LOW_AOF_OP
voltage = VOLT_MARGIN_LOW
elif arg_ir[2] == "h":
margin_cmd = IR_VOUT_MARGIN_HIGH
margin_apply = IR_MARGIN_HIGH_AOF_OP
voltage = VOLT_MARGIN_HIGH
else:
margin_cmd = IR_VOUT_CMD
margin_apply = IR_MARGIN_OFF
voltage = VOLT_NORMAL
set_ir_voltage(arg_ir[3], LOWER_IR_I2C_BUS, i2c_addr, margin_cmd, margin_apply, voltage)
else:
error_ir_usage()
ir_restore_i2c_switch(a)
return