diff --git a/kestrel/src/kestrel.c b/kestrel/src/kestrel.c index 918a15ebd7a591db98b005dc9d3d2147d2a7752d..b370cf93ca862f876d0a96e072162777dcda62cb 100644 --- a/kestrel/src/kestrel.c +++ b/kestrel/src/kestrel.c @@ -166,7 +166,11 @@ typedef struct uint8_t *i2c_master; uint32_t i2c_frequency; uint8_t vdd_regulator_addr; + uint8_t vdd_regulator_page; + uint8_t vcs_regulator_addr; + uint8_t vcs_regulator_page; uint8_t vdn_regulator_addr; + uint8_t vdn_regulator_page; uint8_t vdd_smbus_addr; uint8_t vdn_smbus_addr; } cpu_info_t; @@ -176,7 +180,11 @@ static const cpu_info_t g_cpu_info[] = { .i2c_master = (uint8_t *)I2CMASTER1_BASE, .i2c_frequency = 100000, .vdd_regulator_addr = 0x70, + .vdd_regulator_page = 0x00, + .vcs_regulator_addr = 0x70, + .vcs_regulator_page = 0x01, .vdn_regulator_addr = 0x73, + .vdn_regulator_page = 0x00, .vdd_smbus_addr = 0x28, .vdn_smbus_addr = 0x2b, @@ -187,7 +195,12 @@ static const cpu_info_t g_cpu_info[] = { .i2c_master = (uint8_t *)I2CMASTER2_BASE, .i2c_frequency = 100000, .vdd_regulator_addr = 0x70, + .vdd_regulator_page = 0x00, + .vcs_regulator_addr = 0x70, + .vcs_regulator_addr = 0x70, + .vcs_regulator_page = 0x01, .vdn_regulator_addr = 0x73, + .vdn_regulator_page = 0x00, .vdd_smbus_addr = 0x28, .vdn_smbus_addr = 0x2b, }, @@ -2089,7 +2102,7 @@ static int apply_avsbus_workarounds(const cpu_info_t *cpu_info, int cpu_count) static int enable_avsbus_pmbus_cpu(const cpu_info_t *cpu) { KESTREL_LOG("\tVDD %d: Placing device in AVSBus voltage command mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, 0x00)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, cpu->vdd_regulator_page)) { return -1; } @@ -2099,17 +2112,17 @@ static int enable_avsbus_pmbus_cpu(const cpu_info_t *cpu) } KESTREL_LOG("\tVCS %d: Placing device in AVSBus voltage command mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, 0x01)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vcs_regulator_addr, 0x00, cpu->vcs_regulator_page)) { return -1; } - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x01, 0xb0)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vcs_regulator_addr, 0x01, 0xb0)) { return -1; } KESTREL_LOG("\tVDN %d: Placing device in AVSBus voltage command mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x00, 0x00)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x00, cpu->vdn_regulator_page)) { return -1; } @@ -2140,31 +2153,31 @@ static int enable_avsbus_pmbus(const cpu_info_t *cpu_info, int cpu_count) static int disable_avsbus_pmbus_cpu(const cpu_info_t *cpu) { KESTREL_LOG("\tVDD %d: Placing device in immediate off mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, 0x00)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, cpu->vdd_regulator_page)) { return -1; } - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x01, 0xb0)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x01, 0x80)) { return -1; } KESTREL_LOG("\tVCS %d: Placing device in immediate off mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x00, 0x01)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vcs_regulator_addr, 0x00, cpu->vcs_regulator_page)) { return -1; } - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdd_regulator_addr, 0x01, 0xb0)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vcs_regulator_addr, 0x01, 0x80)) { return -1; } KESTREL_LOG("\tVDN %d: Placing device in immediate off mode", cpu->index); - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x00, 0x00)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x00, cpu->vdn_regulator_page)) { return -1; } - if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x01, 0xb0)) + if (i2c_write_register_byte(cpu->i2c_master, cpu->vdn_regulator_addr, 0x01, 0x80)) { return -1; }