#ifndef SMU_14_0_2_PPTABLE_H
#define SMU_14_0_2_PPTABLE_H
#pragma pack(push, 1)
#define SMU_14_0_2_TABLE_FORMAT_REVISION 23
#define SMU_14_0_2_CUSTOM_TABLE_FORMAT_REVISION 1
#define SMU_14_0_2_PP_PLATFORM_CAP_POWERPLAY 0x1
#define SMU_14_0_2_PP_PLATFORM_CAP_SBIOSPOWERSOURCE 0x2
#define SMU_14_0_2_PP_PLATFORM_CAP_HARDWAREDC 0x4
#define SMU_14_0_2_PP_PLATFORM_CAP_BACO 0x8
#define SMU_14_0_2_PP_PLATFORM_CAP_MACO 0x10
#define SMU_14_0_2_PP_PLATFORM_CAP_SHADOWPSTATE 0x20
#define SMU_14_0_2_PP_PLATFORM_CAP_LEDSUPPORTED 0x40
#define SMU_14_0_2_PP_PLATFORM_CAP_MOBILEOVERDRIVE 0x80
#define SMU_14_0_2_PP_THERMALCONTROLLER_NONE 0
#define SMU_14_0_2_PP_OVERDRIVE_VERSION 0x1
#define SMU_14_0_2_PP_CUSTOM_OVERDRIVE_VERSION 0x1
#define SMU_14_0_2_PP_POWERSAVINGCLOCK_VERSION 0x01
enum SMU_14_0_2_OD_SW_FEATURE_CAP
{
SMU_14_0_2_ODCAP_AUTO_FAN_ACOUSTIC_LIMIT = 0,
SMU_14_0_2_ODCAP_POWER_MODE = 1,
SMU_14_0_2_ODCAP_AUTO_UV_ENGINE = 2,
SMU_14_0_2_ODCAP_AUTO_OC_ENGINE = 3,
SMU_14_0_2_ODCAP_AUTO_OC_MEMORY = 4,
SMU_14_0_2_ODCAP_MEMORY_TIMING_TUNE = 5,
SMU_14_0_2_ODCAP_MANUAL_AC_TIMING = 6,
SMU_14_0_2_ODCAP_AUTO_VF_CURVE_OPTIMIZER = 7,
SMU_14_0_2_ODCAP_AUTO_SOC_UV = 8,
SMU_14_0_2_ODCAP_COUNT = 9,
};
enum SMU_14_0_2_OD_SW_FEATURE_ID
{
SMU_14_0_2_ODFEATURE_AUTO_FAN_ACOUSTIC_LIMIT = 1 << SMU_14_0_2_ODCAP_AUTO_FAN_ACOUSTIC_LIMIT,
SMU_14_0_2_ODFEATURE_POWER_MODE = 1 << SMU_14_0_2_ODCAP_POWER_MODE,
SMU_14_0_2_ODFEATURE_AUTO_UV_ENGINE = 1 << SMU_14_0_2_ODCAP_AUTO_UV_ENGINE,
SMU_14_0_2_ODFEATURE_AUTO_OC_ENGINE = 1 << SMU_14_0_2_ODCAP_AUTO_OC_ENGINE,
SMU_14_0_2_ODFEATURE_AUTO_OC_MEMORY = 1 << SMU_14_0_2_ODCAP_AUTO_OC_MEMORY,
SMU_14_0_2_ODFEATURE_MEMORY_TIMING_TUNE = 1 << SMU_14_0_2_ODCAP_MEMORY_TIMING_TUNE,
SMU_14_0_2_ODFEATURE_MANUAL_AC_TIMING = 1 << SMU_14_0_2_ODCAP_MANUAL_AC_TIMING,
SMU_14_0_2_ODFEATURE_AUTO_VF_CURVE_OPTIMIZER = 1 << SMU_14_0_2_ODCAP_AUTO_VF_CURVE_OPTIMIZER,
SMU_14_0_2_ODFEATURE_AUTO_SOC_UV = 1 << SMU_14_0_2_ODCAP_AUTO_SOC_UV,
};
#define SMU_14_0_2_MAX_ODFEATURE 32
enum SMU_14_0_2_OD_SW_FEATURE_SETTING_ID
{
SMU_14_0_2_ODSETTING_AUTO_FAN_ACOUSTIC_LIMIT = 0,
SMU_14_0_2_ODSETTING_POWER_MODE = 1,
SMU_14_0_2_ODSETTING_AUTOUVENGINE = 2,
SMU_14_0_2_ODSETTING_AUTOOCENGINE = 3,
SMU_14_0_2_ODSETTING_AUTOOCMEMORY = 4,
SMU_14_0_2_ODSETTING_ACTIMING = 5,
SMU_14_0_2_ODSETTING_MANUAL_AC_TIMING = 6,
SMU_14_0_2_ODSETTING_AUTO_VF_CURVE_OPTIMIZER = 7,
SMU_14_0_2_ODSETTING_AUTO_SOC_UV = 8,
SMU_14_0_2_ODSETTING_COUNT = 9,
};
#define SMU_14_0_2_MAX_ODSETTING 64
enum SMU_14_0_2_PWRMODE_SETTING
{
SMU_14_0_2_PMSETTING_POWER_LIMIT_QUIET = 0,
SMU_14_0_2_PMSETTING_POWER_LIMIT_BALANCE,
SMU_14_0_2_PMSETTING_POWER_LIMIT_TURBO,
SMU_14_0_2_PMSETTING_POWER_LIMIT_RAGE,
SMU_14_0_2_PMSETTING_ACOUSTIC_TEMP_QUIET,
SMU_14_0_2_PMSETTING_ACOUSTIC_TEMP_BALANCE,
SMU_14_0_2_PMSETTING_ACOUSTIC_TEMP_TURBO,
SMU_14_0_2_PMSETTING_ACOUSTIC_TEMP_RAGE,
SMU_14_0_2_PMSETTING_ACOUSTIC_TARGET_RPM_QUIET,
SMU_14_0_2_PMSETTING_ACOUSTIC_TARGET_RPM_BALANCE,
SMU_14_0_2_PMSETTING_ACOUSTIC_TARGET_RPM_TURBO,
SMU_14_0_2_PMSETTING_ACOUSTIC_TARGET_RPM_RAGE,
SMU_14_0_2_PMSETTING_ACOUSTIC_LIMIT_RPM_QUIET,
SMU_14_0_2_PMSETTING_ACOUSTIC_LIMIT_RPM_BALANCE,
SMU_14_0_2_PMSETTING_ACOUSTIC_LIMIT_RPM_TURBO,
SMU_14_0_2_PMSETTING_ACOUSTIC_LIMIT_RPM_RAGE,
SMU_14_0_2_PMSETTING_COUNT
};
#define SMU_14_0_2_MAX_PMSETTING 32
enum SMU_14_0_2_overdrive_table_id
{
SMU_14_0_2_OVERDRIVE_TABLE_BASIC = 0,
SMU_14_0_2_OVERDRIVE_TABLE_ADVANCED = 1,
SMU_14_0_2_OVERDRIVE_TABLE_COUNT = 2,
};
struct smu_14_0_2_overdrive_table
{
uint8_t revision;
uint8_t reserve[3];
uint8_t cap[SMU_14_0_2_OVERDRIVE_TABLE_COUNT][SMU_14_0_2_MAX_ODFEATURE];
int32_t max[SMU_14_0_2_OVERDRIVE_TABLE_COUNT][SMU_14_0_2_MAX_ODSETTING];
int32_t min[SMU_14_0_2_OVERDRIVE_TABLE_COUNT][SMU_14_0_2_MAX_ODSETTING];
int16_t pm_setting[SMU_14_0_2_MAX_PMSETTING];
};
enum smu_14_0_3_pptable_source {
PPTABLE_SOURCE_IFWI = 0,
PPTABLE_SOURCE_DRIVER_HARDCODED = 1,
PPTABLE_SOURCE_PPGEN_REGISTRY = 2,
PPTABLE_SOURCE_MAX = PPTABLE_SOURCE_PPGEN_REGISTRY,
};
struct smu_14_0_2_powerplay_table
{
struct atom_common_table_header header;
uint8_t table_revision;
uint8_t pptable_source;
uint16_t pmfw_pptable_start_offset;
uint16_t pmfw_pptable_size;
uint16_t pmfw_sku_table_start_offset;
uint16_t pmfw_sku_table_size;
uint16_t pmfw_board_table_start_offset;
uint16_t pmfw_board_table_size;
uint16_t pmfw_custom_sku_table_start_offset;
uint16_t pmfw_custom_sku_table_size;
uint32_t golden_pp_id;
uint32_t golden_revision;
uint16_t format_id;
uint32_t platform_caps;
uint8_t thermal_controller_type;
uint16_t small_power_limit1;
uint16_t small_power_limit2;
uint16_t boost_power_limit;
uint16_t software_shutdown_temp;
uint8_t reserve[143];
struct smu_14_0_2_overdrive_table overdrive_table;
PPTable_t smc_pptable;
};
enum SMU_14_0_2_CUSTOM_OD_SW_FEATURE_CAP {
SMU_14_0_2_CUSTOM_ODCAP_POWER_MODE = 0,
SMU_14_0_2_CUSTOM_ODCAP_COUNT
};
enum SMU_14_0_2_CUSTOM_OD_FEATURE_SETTING_ID {
SMU_14_0_2_CUSTOM_ODSETTING_POWER_MODE = 0,
SMU_14_0_2_CUSTOM_ODSETTING_COUNT,
};
struct smu_14_0_2_custom_overdrive_table {
uint8_t revision;
uint8_t reserve[3];
uint8_t cap[SMU_14_0_2_CUSTOM_ODCAP_COUNT];
int32_t max[SMU_14_0_2_CUSTOM_ODSETTING_COUNT];
int32_t min[SMU_14_0_2_CUSTOM_ODSETTING_COUNT];
int16_t pm_setting[SMU_14_0_2_PMSETTING_COUNT];
};
struct smu_14_0_3_custom_powerplay_table {
uint8_t custom_table_revision;
uint16_t custom_table_size;
uint16_t custom_sku_table_offset;
uint32_t custom_platform_caps;
uint16_t software_shutdown_temp;
struct smu_14_0_2_custom_overdrive_table custom_overdrive_table;
uint32_t reserve[8];
CustomSkuTable_t custom_sku_table_pmfw;
};
#pragma pack(pop)
#endif