|
@@ -116,14 +116,16 @@ static int init_thermal_controller(
|
|
|
const ATOM_Vega10_POWERPLAYTABLE *powerplay_table)
|
|
|
{
|
|
|
const ATOM_Vega10_Thermal_Controller *thermal_controller;
|
|
|
- const ATOM_Vega10_Fan_Table *fan_table;
|
|
|
+ const Vega10_PPTable_Generic_SubTable_Header *header;
|
|
|
+ const ATOM_Vega10_Fan_Table *fan_table_v1;
|
|
|
+ const ATOM_Vega10_Fan_Table_V2 *fan_table_v2;
|
|
|
|
|
|
thermal_controller = (ATOM_Vega10_Thermal_Controller *)
|
|
|
(((unsigned long)powerplay_table) +
|
|
|
le16_to_cpu(powerplay_table->usThermalControllerOffset));
|
|
|
|
|
|
PP_ASSERT_WITH_CODE((powerplay_table->usThermalControllerOffset != 0),
|
|
|
- "Thermal controller table not set!", return -1);
|
|
|
+ "Thermal controller table not set!", return -EINVAL);
|
|
|
|
|
|
hwmgr->thermal_controller.ucType = thermal_controller->ucType;
|
|
|
hwmgr->thermal_controller.ucI2cLine = thermal_controller->ucI2cLine;
|
|
@@ -142,6 +144,9 @@ static int init_thermal_controller(
|
|
|
hwmgr->thermal_controller.fanInfo.ulMaxRPM =
|
|
|
thermal_controller->ucFanMaxRPM * 100UL;
|
|
|
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ulCycleDelay
|
|
|
+ = 100000;
|
|
|
+
|
|
|
set_hw_cap(
|
|
|
hwmgr,
|
|
|
ATOM_VEGA10_PP_THERMALCONTROLLER_NONE != hwmgr->thermal_controller.ucType,
|
|
@@ -150,54 +155,101 @@ static int init_thermal_controller(
|
|
|
if (!powerplay_table->usFanTableOffset)
|
|
|
return 0;
|
|
|
|
|
|
- fan_table = (const ATOM_Vega10_Fan_Table *)
|
|
|
+ header = (const Vega10_PPTable_Generic_SubTable_Header *)
|
|
|
(((unsigned long)powerplay_table) +
|
|
|
le16_to_cpu(powerplay_table->usFanTableOffset));
|
|
|
|
|
|
- PP_ASSERT_WITH_CODE((fan_table->ucRevId >= 8),
|
|
|
- "Invalid Input Fan Table!", return -1);
|
|
|
+ if (header->ucRevId == 10) {
|
|
|
+ fan_table_v1 = (ATOM_Vega10_Fan_Table *)header;
|
|
|
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.ulCycleDelay
|
|
|
- = 100000;
|
|
|
- phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
|
|
- PHM_PlatformCaps_MicrocodeFanControl);
|
|
|
-
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity =
|
|
|
- le16_to_cpu(fan_table->usFanOutputSensitivity);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM =
|
|
|
- le16_to_cpu(fan_table->usFanRPMMax);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit =
|
|
|
- le16_to_cpu(fan_table->usThrottlingRPM);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit =
|
|
|
- le32_to_cpu((uint32_t)(fan_table->usFanAcousticLimit));
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usTMax =
|
|
|
- le16_to_cpu(fan_table->usTargetTemperature);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin =
|
|
|
- le16_to_cpu(fan_table->usMinimumPWMLimit);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk =
|
|
|
- le32_to_cpu((uint32_t)(fan_table->usTargetGfxClk));
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge =
|
|
|
- le16_to_cpu(fan_table->usFanGainEdge);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot =
|
|
|
- le16_to_cpu(fan_table->usFanGainHotspot);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid =
|
|
|
- le16_to_cpu(fan_table->usFanGainLiquid);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc =
|
|
|
- le16_to_cpu(fan_table->usFanGainVrVddc);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd =
|
|
|
- le16_to_cpu(fan_table->usFanGainVrMvdd);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx =
|
|
|
- le16_to_cpu(fan_table->usFanGainPlx);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm =
|
|
|
- le16_to_cpu(fan_table->usFanGainHbm);
|
|
|
-
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM =
|
|
|
- fan_table->ucEnableZeroRPM;
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature =
|
|
|
- le16_to_cpu(fan_table->usFanStopTemperature);
|
|
|
- hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
|
|
|
- le16_to_cpu(fan_table->usFanStartTemperature);
|
|
|
+ PP_ASSERT_WITH_CODE((fan_table_v1->ucRevId >= 8),
|
|
|
+ "Invalid Input Fan Table!", return -EINVAL);
|
|
|
+
|
|
|
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
|
|
+ PHM_PlatformCaps_MicrocodeFanControl);
|
|
|
+
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanOutputSensitivity);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanRPMMax);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit =
|
|
|
+ le16_to_cpu(fan_table_v1->usThrottlingRPM);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanAcousticLimit);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usTMax =
|
|
|
+ le16_to_cpu(fan_table_v1->usTargetTemperature);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin =
|
|
|
+ le16_to_cpu(fan_table_v1->usMinimumPWMLimit);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk =
|
|
|
+ le16_to_cpu(fan_table_v1->usTargetGfxClk);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainEdge);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainHotspot);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainLiquid);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainVrVddc);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainVrMvdd);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainPlx);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanGainHbm);
|
|
|
+
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM =
|
|
|
+ fan_table_v1->ucEnableZeroRPM;
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanStopTemperature);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
|
|
|
+ le16_to_cpu(fan_table_v1->usFanStartTemperature);
|
|
|
+ } else if (header->ucRevId > 10) {
|
|
|
+ fan_table_v2 = (ATOM_Vega10_Fan_Table_V2 *)header;
|
|
|
+
|
|
|
+ hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
|
|
|
+ fan_table_v2->ucFanParameters & ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
|
|
|
+ hwmgr->thermal_controller.fanInfo.ulMinRPM = fan_table_v2->ucFanMinRPM * 100UL;
|
|
|
+ hwmgr->thermal_controller.fanInfo.ulMaxRPM = fan_table_v2->ucFanMaxRPM * 100UL;
|
|
|
|
|
|
+ phm_cap_set(hwmgr->platform_descriptor.platformCaps,
|
|
|
+ PHM_PlatformCaps_MicrocodeFanControl);
|
|
|
+
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanOutputSensitivity);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM =
|
|
|
+ fan_table_v2->ucFanMaxRPM * 100UL;
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit =
|
|
|
+ le16_to_cpu(fan_table_v2->usThrottlingRPM);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanAcousticLimitRpm);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usTMax =
|
|
|
+ le16_to_cpu(fan_table_v2->usTargetTemperature);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin =
|
|
|
+ le16_to_cpu(fan_table_v2->usMinimumPWMLimit);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk =
|
|
|
+ le16_to_cpu(fan_table_v2->usTargetGfxClk);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainEdge);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainHotspot);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainLiquid);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainVrVddc);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainVrMvdd);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainPlx);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanGainHbm);
|
|
|
+
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM =
|
|
|
+ fan_table_v2->ucEnableZeroRPM;
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanStopTemperature);
|
|
|
+ hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
|
|
|
+ le16_to_cpu(fan_table_v2->usFanStartTemperature);
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -261,6 +313,48 @@ static int get_mm_clock_voltage_table(
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void get_scl_sda_value(uint8_t line, uint8_t *scl, uint8_t* sda)
|
|
|
+{
|
|
|
+ switch(line){
|
|
|
+ case Vega10_I2CLineID_DDC1:
|
|
|
+ *scl = Vega10_I2C_DDC1CLK;
|
|
|
+ *sda = Vega10_I2C_DDC1DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDC2:
|
|
|
+ *scl = Vega10_I2C_DDC2CLK;
|
|
|
+ *sda = Vega10_I2C_DDC2DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDC3:
|
|
|
+ *scl = Vega10_I2C_DDC3CLK;
|
|
|
+ *sda = Vega10_I2C_DDC3DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDC4:
|
|
|
+ *scl = Vega10_I2C_DDC4CLK;
|
|
|
+ *sda = Vega10_I2C_DDC4DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDC5:
|
|
|
+ *scl = Vega10_I2C_DDC5CLK;
|
|
|
+ *sda = Vega10_I2C_DDC5DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDC6:
|
|
|
+ *scl = Vega10_I2C_DDC6CLK;
|
|
|
+ *sda = Vega10_I2C_DDC6DATA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_SCLSDA:
|
|
|
+ *scl = Vega10_I2C_SCL;
|
|
|
+ *sda = Vega10_I2C_SDA;
|
|
|
+ break;
|
|
|
+ case Vega10_I2CLineID_DDCVGA:
|
|
|
+ *scl = Vega10_I2C_DDCVGACLK;
|
|
|
+ *sda = Vega10_I2C_DDCVGADATA;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ *scl = 0;
|
|
|
+ *sda = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int get_tdp_table(
|
|
|
struct pp_hwmgr *hwmgr,
|
|
|
struct phm_tdp_table **info_tdp_table,
|
|
@@ -268,59 +362,99 @@ static int get_tdp_table(
|
|
|
{
|
|
|
uint32_t table_size;
|
|
|
struct phm_tdp_table *tdp_table;
|
|
|
-
|
|
|
- const ATOM_Vega10_PowerTune_Table *power_tune_table =
|
|
|
- (ATOM_Vega10_PowerTune_Table *)table;
|
|
|
-
|
|
|
- table_size = sizeof(uint32_t) + sizeof(struct phm_cac_tdp_table);
|
|
|
- hwmgr->dyn_state.cac_dtp_table = (struct phm_cac_tdp_table *)
|
|
|
- kzalloc(table_size, GFP_KERNEL);
|
|
|
-
|
|
|
- if (!hwmgr->dyn_state.cac_dtp_table)
|
|
|
- return -ENOMEM;
|
|
|
+ uint8_t scl;
|
|
|
+ uint8_t sda;
|
|
|
+ const ATOM_Vega10_PowerTune_Table *power_tune_table;
|
|
|
+ const ATOM_Vega10_PowerTune_Table_V2 *power_tune_table_v2;
|
|
|
|
|
|
table_size = sizeof(uint32_t) + sizeof(struct phm_tdp_table);
|
|
|
+
|
|
|
tdp_table = kzalloc(table_size, GFP_KERNEL);
|
|
|
|
|
|
- if (!tdp_table) {
|
|
|
- kfree(hwmgr->dyn_state.cac_dtp_table);
|
|
|
- hwmgr->dyn_state.cac_dtp_table = NULL;
|
|
|
+ if (!tdp_table)
|
|
|
return -ENOMEM;
|
|
|
- }
|
|
|
|
|
|
- tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table->usSocketPowerLimit);
|
|
|
- tdp_table->usTDC = le16_to_cpu(power_tune_table->usTdcLimit);
|
|
|
- tdp_table->usEDCLimit = le16_to_cpu(power_tune_table->usEdcLimit);
|
|
|
- tdp_table->usSoftwareShutdownTemp =
|
|
|
- le16_to_cpu(power_tune_table->usSoftwareShutdownTemp);
|
|
|
- tdp_table->usTemperatureLimitTedge =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitTedge);
|
|
|
- tdp_table->usTemperatureLimitHotspot =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitHotSpot);
|
|
|
- tdp_table->usTemperatureLimitLiquid1 =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitLiquid1);
|
|
|
- tdp_table->usTemperatureLimitLiquid2 =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitLiquid2);
|
|
|
- tdp_table->usTemperatureLimitHBM =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitHBM);
|
|
|
- tdp_table->usTemperatureLimitVrVddc =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitVrSoc);
|
|
|
- tdp_table->usTemperatureLimitVrMvdd =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitVrMem);
|
|
|
- tdp_table->usTemperatureLimitPlx =
|
|
|
- le16_to_cpu(power_tune_table->usTemperatureLimitPlx);
|
|
|
- tdp_table->ucLiquid1_I2C_address = power_tune_table->ucLiquid1_I2C_address;
|
|
|
- tdp_table->ucLiquid2_I2C_address = power_tune_table->ucLiquid2_I2C_address;
|
|
|
- tdp_table->ucLiquid_I2C_Line = power_tune_table->ucLiquid_I2C_LineSCL;
|
|
|
- tdp_table->ucLiquid_I2C_LineSDA = power_tune_table->ucLiquid_I2C_LineSDA;
|
|
|
- tdp_table->ucVr_I2C_address = power_tune_table->ucVr_I2C_address;
|
|
|
- tdp_table->ucVr_I2C_Line = power_tune_table->ucVr_I2C_LineSCL;
|
|
|
- tdp_table->ucVr_I2C_LineSDA = power_tune_table->ucVr_I2C_LineSDA;
|
|
|
- tdp_table->ucPlx_I2C_address = power_tune_table->ucPlx_I2C_address;
|
|
|
- tdp_table->ucPlx_I2C_Line = power_tune_table->ucPlx_I2C_LineSCL;
|
|
|
- tdp_table->ucPlx_I2C_LineSDA = power_tune_table->ucPlx_I2C_LineSDA;
|
|
|
-
|
|
|
- hwmgr->platform_descriptor.LoadLineSlope = power_tune_table->usLoadLineResistance;
|
|
|
+ if (table->ucRevId == 5) {
|
|
|
+ power_tune_table = (ATOM_Vega10_PowerTune_Table *)table;
|
|
|
+ tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table->usSocketPowerLimit);
|
|
|
+ tdp_table->usTDC = le16_to_cpu(power_tune_table->usTdcLimit);
|
|
|
+ tdp_table->usEDCLimit = le16_to_cpu(power_tune_table->usEdcLimit);
|
|
|
+ tdp_table->usSoftwareShutdownTemp =
|
|
|
+ le16_to_cpu(power_tune_table->usSoftwareShutdownTemp);
|
|
|
+ tdp_table->usTemperatureLimitTedge =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitTedge);
|
|
|
+ tdp_table->usTemperatureLimitHotspot =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitHotSpot);
|
|
|
+ tdp_table->usTemperatureLimitLiquid1 =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitLiquid1);
|
|
|
+ tdp_table->usTemperatureLimitLiquid2 =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitLiquid2);
|
|
|
+ tdp_table->usTemperatureLimitHBM =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitHBM);
|
|
|
+ tdp_table->usTemperatureLimitVrVddc =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitVrSoc);
|
|
|
+ tdp_table->usTemperatureLimitVrMvdd =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitVrMem);
|
|
|
+ tdp_table->usTemperatureLimitPlx =
|
|
|
+ le16_to_cpu(power_tune_table->usTemperatureLimitPlx);
|
|
|
+ tdp_table->ucLiquid1_I2C_address = power_tune_table->ucLiquid1_I2C_address;
|
|
|
+ tdp_table->ucLiquid2_I2C_address = power_tune_table->ucLiquid2_I2C_address;
|
|
|
+ tdp_table->ucLiquid_I2C_Line = power_tune_table->ucLiquid_I2C_LineSCL;
|
|
|
+ tdp_table->ucLiquid_I2C_LineSDA = power_tune_table->ucLiquid_I2C_LineSDA;
|
|
|
+ tdp_table->ucVr_I2C_address = power_tune_table->ucVr_I2C_address;
|
|
|
+ tdp_table->ucVr_I2C_Line = power_tune_table->ucVr_I2C_LineSCL;
|
|
|
+ tdp_table->ucVr_I2C_LineSDA = power_tune_table->ucVr_I2C_LineSDA;
|
|
|
+ tdp_table->ucPlx_I2C_address = power_tune_table->ucPlx_I2C_address;
|
|
|
+ tdp_table->ucPlx_I2C_Line = power_tune_table->ucPlx_I2C_LineSCL;
|
|
|
+ tdp_table->ucPlx_I2C_LineSDA = power_tune_table->ucPlx_I2C_LineSDA;
|
|
|
+ hwmgr->platform_descriptor.LoadLineSlope = power_tune_table->usLoadLineResistance;
|
|
|
+ } else {
|
|
|
+ power_tune_table_v2 = (ATOM_Vega10_PowerTune_Table_V2 *)table;
|
|
|
+ tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table_v2->usSocketPowerLimit);
|
|
|
+ tdp_table->usTDC = le16_to_cpu(power_tune_table_v2->usTdcLimit);
|
|
|
+ tdp_table->usEDCLimit = le16_to_cpu(power_tune_table_v2->usEdcLimit);
|
|
|
+ tdp_table->usSoftwareShutdownTemp =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usSoftwareShutdownTemp);
|
|
|
+ tdp_table->usTemperatureLimitTedge =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitTedge);
|
|
|
+ tdp_table->usTemperatureLimitHotspot =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitHotSpot);
|
|
|
+ tdp_table->usTemperatureLimitLiquid1 =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitLiquid1);
|
|
|
+ tdp_table->usTemperatureLimitLiquid2 =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitLiquid2);
|
|
|
+ tdp_table->usTemperatureLimitHBM =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitHBM);
|
|
|
+ tdp_table->usTemperatureLimitVrVddc =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitVrSoc);
|
|
|
+ tdp_table->usTemperatureLimitVrMvdd =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitVrMem);
|
|
|
+ tdp_table->usTemperatureLimitPlx =
|
|
|
+ le16_to_cpu(power_tune_table_v2->usTemperatureLimitPlx);
|
|
|
+ tdp_table->ucLiquid1_I2C_address = power_tune_table_v2->ucLiquid1_I2C_address;
|
|
|
+ tdp_table->ucLiquid2_I2C_address = power_tune_table_v2->ucLiquid2_I2C_address;
|
|
|
+
|
|
|
+ get_scl_sda_value(power_tune_table_v2->ucLiquid_I2C_Line, &scl, &sda);
|
|
|
+
|
|
|
+ tdp_table->ucLiquid_I2C_Line = scl;
|
|
|
+ tdp_table->ucLiquid_I2C_LineSDA = sda;
|
|
|
+
|
|
|
+ tdp_table->ucVr_I2C_address = power_tune_table_v2->ucVr_I2C_address;
|
|
|
+
|
|
|
+ get_scl_sda_value(power_tune_table_v2->ucVr_I2C_Line, &scl, &sda);
|
|
|
+
|
|
|
+ tdp_table->ucVr_I2C_Line = scl;
|
|
|
+ tdp_table->ucVr_I2C_LineSDA = sda;
|
|
|
+ tdp_table->ucPlx_I2C_address = power_tune_table_v2->ucPlx_I2C_address;
|
|
|
+
|
|
|
+ get_scl_sda_value(power_tune_table_v2->ucPlx_I2C_Line, &scl, &sda);
|
|
|
+
|
|
|
+ tdp_table->ucPlx_I2C_Line = scl;
|
|
|
+ tdp_table->ucPlx_I2C_LineSDA = sda;
|
|
|
+
|
|
|
+ hwmgr->platform_descriptor.LoadLineSlope =
|
|
|
+ power_tune_table_v2->usLoadLineResistance;
|
|
|
+ }
|
|
|
|
|
|
*info_tdp_table = tdp_table;
|
|
|
|
|
@@ -836,7 +970,7 @@ static int init_dpm_2_parameters(
|
|
|
(((unsigned long)powerplay_table) +
|
|
|
le16_to_cpu(powerplay_table->usVddcLookupTableOffset));
|
|
|
result = get_vddc_lookup_table(hwmgr,
|
|
|
- &pp_table_info->vddc_lookup_table, vddc_table, 16);
|
|
|
+ &pp_table_info->vddc_lookup_table, vddc_table, 8);
|
|
|
}
|
|
|
|
|
|
if (powerplay_table->usVddmemLookupTableOffset) {
|
|
@@ -845,7 +979,7 @@ static int init_dpm_2_parameters(
|
|
|
(((unsigned long)powerplay_table) +
|
|
|
le16_to_cpu(powerplay_table->usVddmemLookupTableOffset));
|
|
|
result = get_vddc_lookup_table(hwmgr,
|
|
|
- &pp_table_info->vddmem_lookup_table, vdd_mem_table, 16);
|
|
|
+ &pp_table_info->vddmem_lookup_table, vdd_mem_table, 4);
|
|
|
}
|
|
|
|
|
|
if (powerplay_table->usVddciLookupTableOffset) {
|
|
@@ -854,7 +988,7 @@ static int init_dpm_2_parameters(
|
|
|
(((unsigned long)powerplay_table) +
|
|
|
le16_to_cpu(powerplay_table->usVddciLookupTableOffset));
|
|
|
result = get_vddc_lookup_table(hwmgr,
|
|
|
- &pp_table_info->vddci_lookup_table, vddci_table, 16);
|
|
|
+ &pp_table_info->vddci_lookup_table, vddci_table, 4);
|
|
|
}
|
|
|
|
|
|
return result;
|