UCHAR   ucFanMaxRPM;
 } ATOM_Vega10_Fan_Table_V2;
 
+typedef struct _ATOM_Vega10_Fan_Table_V3 {
+       UCHAR   ucRevId;
+       USHORT  usFanOutputSensitivity;
+       USHORT  usFanAcousticLimitRpm;
+       USHORT  usThrottlingRPM;
+       USHORT  usTargetTemperature;
+       USHORT  usMinimumPWMLimit;
+       USHORT  usTargetGfxClk;
+       USHORT  usFanGainEdge;
+       USHORT  usFanGainHotspot;
+       USHORT  usFanGainLiquid;
+       USHORT  usFanGainVrVddc;
+       USHORT  usFanGainVrMvdd;
+       USHORT  usFanGainPlx;
+       USHORT  usFanGainHbm;
+       UCHAR   ucEnableZeroRPM;
+       USHORT  usFanStopTemperature;
+       USHORT  usFanStartTemperature;
+       UCHAR   ucFanParameters;
+       UCHAR   ucFanMinRPM;
+       UCHAR   ucFanMaxRPM;
+       USHORT  usMGpuThrottlingRPM;
+} ATOM_Vega10_Fan_Table_V3;
+
 typedef struct _ATOM_Vega10_Thermal_Controller {
        UCHAR ucRevId;
        UCHAR ucType;           /* one of ATOM_VEGA10_PP_THERMALCONTROLLER_*/
 
        const Vega10_PPTable_Generic_SubTable_Header *header;
        const ATOM_Vega10_Fan_Table *fan_table_v1;
        const ATOM_Vega10_Fan_Table_V2 *fan_table_v2;
+       const ATOM_Vega10_Fan_Table_V3 *fan_table_v3;
 
        thermal_controller = (ATOM_Vega10_Thermal_Controller *)
                        (((unsigned long)powerplay_table) +
                                le16_to_cpu(fan_table_v1->usFanStopTemperature);
                hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
                                le16_to_cpu(fan_table_v1->usFanStartTemperature);
-       } else if (header->ucRevId > 10) {
+       } else if (header->ucRevId == 0xb) {
                fan_table_v2 = (ATOM_Vega10_Fan_Table_V2 *)header;
 
                hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
                                le16_to_cpu(fan_table_v2->usFanStopTemperature);
                hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
                                le16_to_cpu(fan_table_v2->usFanStartTemperature);
+       } else if (header->ucRevId > 0xb) {
+               fan_table_v3 = (ATOM_Vega10_Fan_Table_V3 *)header;
+
+               hwmgr->thermal_controller.fanInfo.ucTachometerPulsesPerRevolution =
+                               fan_table_v3->ucFanParameters & ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK;
+               hwmgr->thermal_controller.fanInfo.ulMinRPM = fan_table_v3->ucFanMinRPM * 100UL;
+               hwmgr->thermal_controller.fanInfo.ulMaxRPM = fan_table_v3->ucFanMaxRPM * 100UL;
+               phm_cap_set(hwmgr->platform_descriptor.platformCaps,
+                               PHM_PlatformCaps_MicrocodeFanControl);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanOutputSensitivity =
+                               le16_to_cpu(fan_table_v3->usFanOutputSensitivity);
+               hwmgr->thermal_controller.advanceFanControlParameters.usMaxFanRPM =
+                               fan_table_v3->ucFanMaxRPM * 100UL;
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanRPMMaxLimit =
+                               le16_to_cpu(fan_table_v3->usThrottlingRPM);
+               hwmgr->thermal_controller.advanceFanControlParameters.ulMinFanSCLKAcousticLimit =
+                               le16_to_cpu(fan_table_v3->usFanAcousticLimitRpm);
+               hwmgr->thermal_controller.advanceFanControlParameters.usTMax =
+                               le16_to_cpu(fan_table_v3->usTargetTemperature);
+               hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin =
+                               le16_to_cpu(fan_table_v3->usMinimumPWMLimit);
+               hwmgr->thermal_controller.advanceFanControlParameters.ulTargetGfxClk =
+                               le16_to_cpu(fan_table_v3->usTargetGfxClk);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainEdge =
+                               le16_to_cpu(fan_table_v3->usFanGainEdge);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHotspot =
+                               le16_to_cpu(fan_table_v3->usFanGainHotspot);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainLiquid =
+                               le16_to_cpu(fan_table_v3->usFanGainLiquid);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrVddc =
+                               le16_to_cpu(fan_table_v3->usFanGainVrVddc);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainVrMvdd =
+                               le16_to_cpu(fan_table_v3->usFanGainVrMvdd);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainPlx =
+                               le16_to_cpu(fan_table_v3->usFanGainPlx);
+               hwmgr->thermal_controller.advanceFanControlParameters.usFanGainHbm =
+                               le16_to_cpu(fan_table_v3->usFanGainHbm);
+
+               hwmgr->thermal_controller.advanceFanControlParameters.ucEnableZeroRPM =
+                               fan_table_v3->ucEnableZeroRPM;
+               hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStopTemperature =
+                               le16_to_cpu(fan_table_v3->usFanStopTemperature);
+               hwmgr->thermal_controller.advanceFanControlParameters.usZeroRPMStartTemperature =
+                               le16_to_cpu(fan_table_v3->usFanStartTemperature);
+               hwmgr->thermal_controller.advanceFanControlParameters.usMGpuThrottlingRPMLimit =
+                               le16_to_cpu(fan_table_v3->usMGpuThrottlingRPM);
        }
+
        return 0;
 }