2018-11-29 06:01:47 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2019 Advanced Micro Devices, Inc.
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
|
|
* to deal in the Software without restriction, including without limitation
|
|
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
|
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#ifndef __SMU_V11_0_H__
|
|
|
|
#define __SMU_V11_0_H__
|
|
|
|
|
|
|
|
#include "amdgpu_smu.h"
|
|
|
|
|
2019-08-08 03:57:28 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_INV 0xFFFFFFFF
|
2020-05-21 03:50:44 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_ARCT 0x17
|
2020-03-06 10:08:41 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_NV10 0x36
|
2020-08-10 05:27:56 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_NV12 0x36
|
2020-02-10 07:06:35 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_NV14 0x36
|
2020-10-20 08:50:03 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_Sienna_Cichlid 0x3A
|
2020-09-10 09:08:47 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_Navy_Flounder 0x5
|
2020-10-13 08:40:59 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_VANGOGH 0x02
|
2020-10-20 08:47:10 +00:00
|
|
|
#define SMU11_DRIVER_IF_VERSION_Dimgrey_Cavefish 0xB
|
2019-08-08 03:57:28 +00:00
|
|
|
|
2018-12-10 05:31:56 +00:00
|
|
|
/* MP Apertures */
|
|
|
|
#define MP0_Public 0x03800000
|
|
|
|
#define MP0_SRAM 0x03900000
|
|
|
|
#define MP1_Public 0x03b00000
|
|
|
|
#define MP1_SRAM 0x03c00004
|
|
|
|
|
|
|
|
/* address block */
|
|
|
|
#define smnMP1_FIRMWARE_FLAGS 0x3010024
|
|
|
|
#define smnMP0_FW_INTF 0x30101c0
|
|
|
|
#define smnMP1_PUB_CTRL 0x3010b14
|
|
|
|
|
2019-05-14 03:46:27 +00:00
|
|
|
#define TEMP_RANGE_MIN (0)
|
|
|
|
#define TEMP_RANGE_MAX (80 * 1000)
|
|
|
|
|
2019-03-31 03:53:28 +00:00
|
|
|
#define SMU11_TOOL_SIZE 0x19000
|
|
|
|
|
2020-06-10 06:32:58 +00:00
|
|
|
#define MAX_DPM_LEVELS 16
|
2019-11-12 08:27:11 +00:00
|
|
|
#define MAX_PCIE_CONF 2
|
|
|
|
|
2020-07-02 06:48:03 +00:00
|
|
|
#define CTF_OFFSET_EDGE 5
|
|
|
|
#define CTF_OFFSET_HOTSPOT 5
|
|
|
|
#define CTF_OFFSET_MEM 5
|
|
|
|
|
2019-08-16 09:11:46 +00:00
|
|
|
static const struct smu_temperature_range smu11_thermal_policy[] =
|
|
|
|
{
|
|
|
|
{-273150, 99000, 99000, -273150, 99000, 99000, -273150, 99000, 99000},
|
|
|
|
{ 120000, 120000, 120000, 120000, 120000, 120000, 120000, 120000, 120000},
|
|
|
|
};
|
|
|
|
|
2018-12-25 08:34:39 +00:00
|
|
|
struct smu_11_0_max_sustainable_clocks {
|
|
|
|
uint32_t display_clock;
|
|
|
|
uint32_t phy_clock;
|
|
|
|
uint32_t pixel_clock;
|
|
|
|
uint32_t uclock;
|
|
|
|
uint32_t dcef_clock;
|
|
|
|
uint32_t soc_clock;
|
|
|
|
};
|
2018-12-17 11:48:59 +00:00
|
|
|
|
2020-06-10 06:32:58 +00:00
|
|
|
struct smu_11_0_dpm_clk_level {
|
|
|
|
bool enabled;
|
|
|
|
uint32_t value;
|
|
|
|
};
|
|
|
|
|
2018-12-17 11:48:59 +00:00
|
|
|
struct smu_11_0_dpm_table {
|
2020-06-10 06:32:58 +00:00
|
|
|
uint32_t min; /* MHz */
|
|
|
|
uint32_t max; /* MHz */
|
|
|
|
uint32_t count;
|
|
|
|
bool is_fine_grained;
|
|
|
|
struct smu_11_0_dpm_clk_level dpm_levels[MAX_DPM_LEVELS];
|
2018-12-17 11:48:59 +00:00
|
|
|
};
|
|
|
|
|
2019-11-12 08:27:11 +00:00
|
|
|
struct smu_11_0_pcie_table {
|
|
|
|
uint8_t pcie_gen[MAX_PCIE_CONF];
|
|
|
|
uint8_t pcie_lane[MAX_PCIE_CONF];
|
|
|
|
};
|
|
|
|
|
2018-12-17 11:48:59 +00:00
|
|
|
struct smu_11_0_dpm_tables {
|
|
|
|
struct smu_11_0_dpm_table soc_table;
|
|
|
|
struct smu_11_0_dpm_table gfx_table;
|
|
|
|
struct smu_11_0_dpm_table uclk_table;
|
|
|
|
struct smu_11_0_dpm_table eclk_table;
|
|
|
|
struct smu_11_0_dpm_table vclk_table;
|
2020-06-10 06:32:58 +00:00
|
|
|
struct smu_11_0_dpm_table vclk1_table;
|
2018-12-17 11:48:59 +00:00
|
|
|
struct smu_11_0_dpm_table dclk_table;
|
2020-06-10 06:32:58 +00:00
|
|
|
struct smu_11_0_dpm_table dclk1_table;
|
2018-12-17 11:48:59 +00:00
|
|
|
struct smu_11_0_dpm_table dcef_table;
|
|
|
|
struct smu_11_0_dpm_table pixel_table;
|
|
|
|
struct smu_11_0_dpm_table display_table;
|
|
|
|
struct smu_11_0_dpm_table phy_table;
|
|
|
|
struct smu_11_0_dpm_table fclk_table;
|
2019-11-12 08:27:11 +00:00
|
|
|
struct smu_11_0_pcie_table pcie_table;
|
2018-12-17 11:48:59 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct smu_11_0_dpm_context {
|
|
|
|
struct smu_11_0_dpm_tables dpm_tables;
|
|
|
|
uint32_t workload_policy_mask;
|
|
|
|
uint32_t dcef_min_ds_clk;
|
|
|
|
};
|
|
|
|
|
2018-12-15 02:50:03 +00:00
|
|
|
enum smu_11_0_power_state {
|
|
|
|
SMU_11_0_POWER_STATE__D0 = 0,
|
|
|
|
SMU_11_0_POWER_STATE__D1,
|
|
|
|
SMU_11_0_POWER_STATE__D3, /* Sleep*/
|
|
|
|
SMU_11_0_POWER_STATE__D4, /* Hibernate*/
|
|
|
|
SMU_11_0_POWER_STATE__D5, /* Power off*/
|
|
|
|
};
|
|
|
|
|
|
|
|
struct smu_11_0_power_context {
|
|
|
|
uint32_t power_source;
|
|
|
|
uint8_t in_power_limit_boost_mode;
|
|
|
|
enum smu_11_0_power_state power_state;
|
|
|
|
};
|
|
|
|
|
2019-07-05 20:58:46 +00:00
|
|
|
enum smu_v11_0_baco_seq {
|
|
|
|
BACO_SEQ_BACO = 0,
|
|
|
|
BACO_SEQ_MSR,
|
|
|
|
BACO_SEQ_BAMACO,
|
|
|
|
BACO_SEQ_ULPS,
|
|
|
|
BACO_SEQ_COUNT,
|
|
|
|
};
|
|
|
|
|
2020-07-08 04:45:00 +00:00
|
|
|
#if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3)
|
|
|
|
|
2019-10-17 11:59:29 +00:00
|
|
|
int smu_v11_0_init_microcode(struct smu_context *smu);
|
|
|
|
|
2020-06-01 06:03:57 +00:00
|
|
|
void smu_v11_0_fini_microcode(struct smu_context *smu);
|
|
|
|
|
2019-10-17 11:59:29 +00:00
|
|
|
int smu_v11_0_load_microcode(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_init_smc_tables(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_fini_smc_tables(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_init_power(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_fini_power(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_check_fw_status(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_setup_pptable(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_get_vbios_bootup_values(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_check_fw_version(struct smu_context *smu);
|
|
|
|
|
2019-12-31 02:39:34 +00:00
|
|
|
int smu_v11_0_set_driver_table_location(struct smu_context *smu);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
|
|
|
int smu_v11_0_set_tool_table_location(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_notify_memory_pool_location(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_system_features_control(struct smu_context *smu,
|
|
|
|
bool en);
|
|
|
|
|
|
|
|
int smu_v11_0_init_display_count(struct smu_context *smu, uint32_t count);
|
|
|
|
|
|
|
|
int smu_v11_0_set_allowed_mask(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_notify_display_change(struct smu_context *smu);
|
|
|
|
|
2020-06-08 08:29:41 +00:00
|
|
|
int smu_v11_0_get_current_power_limit(struct smu_context *smu,
|
|
|
|
uint32_t *power_limit);
|
|
|
|
|
2019-10-17 11:59:29 +00:00
|
|
|
int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n);
|
|
|
|
|
|
|
|
int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu);
|
|
|
|
|
2020-05-26 09:06:04 +00:00
|
|
|
int smu_v11_0_enable_thermal_alert(struct smu_context *smu);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
2020-05-26 09:06:04 +00:00
|
|
|
int smu_v11_0_disable_thermal_alert(struct smu_context *smu);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
2020-06-09 05:32:18 +00:00
|
|
|
int smu_v11_0_get_gfx_vdd(struct smu_context *smu, uint32_t *value);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
2020-06-08 11:31:03 +00:00
|
|
|
int smu_v11_0_set_min_deep_sleep_dcefclk(struct smu_context *smu, uint32_t clk);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
|
|
|
int
|
|
|
|
smu_v11_0_display_clock_voltage_request(struct smu_context *smu,
|
|
|
|
struct pp_display_clock_request
|
|
|
|
*clock_req);
|
|
|
|
|
|
|
|
uint32_t
|
|
|
|
smu_v11_0_get_fan_control_mode(struct smu_context *smu);
|
|
|
|
|
|
|
|
int
|
|
|
|
smu_v11_0_set_fan_control_mode(struct smu_context *smu,
|
|
|
|
uint32_t mode);
|
|
|
|
|
|
|
|
int smu_v11_0_set_fan_speed_rpm(struct smu_context *smu,
|
|
|
|
uint32_t speed);
|
|
|
|
|
2020-08-25 18:35:50 +00:00
|
|
|
int smu_v11_0_get_fan_speed_rpm(struct smu_context *smu,
|
|
|
|
uint32_t *speed);
|
|
|
|
|
2019-10-17 11:59:29 +00:00
|
|
|
int smu_v11_0_set_xgmi_pstate(struct smu_context *smu,
|
|
|
|
uint32_t pstate);
|
|
|
|
|
|
|
|
int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable);
|
|
|
|
|
|
|
|
int smu_v11_0_register_irq_handler(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
|
|
|
|
struct pp_smu_nv_clock_table *max_clocks);
|
|
|
|
|
|
|
|
bool smu_v11_0_baco_is_support(struct smu_context *smu);
|
|
|
|
|
|
|
|
enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state);
|
|
|
|
|
2019-10-28 19:20:03 +00:00
|
|
|
int smu_v11_0_baco_enter(struct smu_context *smu);
|
|
|
|
int smu_v11_0_baco_exit(struct smu_context *smu);
|
2019-10-17 11:59:29 +00:00
|
|
|
|
2020-07-10 09:39:24 +00:00
|
|
|
int smu_v11_0_mode1_reset(struct smu_context *smu);
|
|
|
|
|
2019-10-17 11:59:29 +00:00
|
|
|
int smu_v11_0_get_dpm_ultimate_freq(struct smu_context *smu, enum smu_clk_type clk_type,
|
|
|
|
uint32_t *min, uint32_t *max);
|
|
|
|
|
|
|
|
int smu_v11_0_set_soft_freq_limited_range(struct smu_context *smu, enum smu_clk_type clk_type,
|
|
|
|
uint32_t min, uint32_t max);
|
|
|
|
|
2020-06-09 06:39:21 +00:00
|
|
|
int smu_v11_0_set_hard_freq_limited_range(struct smu_context *smu,
|
|
|
|
enum smu_clk_type clk_type,
|
|
|
|
uint32_t min,
|
|
|
|
uint32_t max);
|
|
|
|
|
2019-12-20 21:34:42 +00:00
|
|
|
int smu_v11_0_set_performance_level(struct smu_context *smu,
|
|
|
|
enum amd_dpm_forced_level level);
|
|
|
|
|
2020-03-20 17:42:26 +00:00
|
|
|
int smu_v11_0_set_power_source(struct smu_context *smu,
|
|
|
|
enum smu_power_src_type power_src);
|
|
|
|
|
2020-06-09 09:26:39 +00:00
|
|
|
int smu_v11_0_get_dpm_freq_by_index(struct smu_context *smu,
|
|
|
|
enum smu_clk_type clk_type,
|
|
|
|
uint16_t level,
|
|
|
|
uint32_t *value);
|
|
|
|
|
|
|
|
int smu_v11_0_get_dpm_level_count(struct smu_context *smu,
|
|
|
|
enum smu_clk_type clk_type,
|
|
|
|
uint32_t *value);
|
|
|
|
|
2020-07-10 02:46:48 +00:00
|
|
|
int smu_v11_0_set_single_dpm_table(struct smu_context *smu,
|
|
|
|
enum smu_clk_type clk_type,
|
|
|
|
struct smu_11_0_dpm_table *single_dpm_table);
|
|
|
|
|
2020-06-09 09:26:39 +00:00
|
|
|
int smu_v11_0_get_dpm_level_range(struct smu_context *smu,
|
|
|
|
enum smu_clk_type clk_type,
|
|
|
|
uint32_t *min_value,
|
|
|
|
uint32_t *max_value);
|
|
|
|
|
2020-07-24 10:39:33 +00:00
|
|
|
int smu_v11_0_get_current_pcie_link_width_level(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_get_current_pcie_link_width(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_get_current_pcie_link_speed_level(struct smu_context *smu);
|
|
|
|
|
|
|
|
int smu_v11_0_get_current_pcie_link_speed(struct smu_context *smu);
|
|
|
|
|
2020-07-24 02:42:39 +00:00
|
|
|
void smu_v11_0_init_gpu_metrics_v1_0(struct gpu_metrics_v1_0 *gpu_metrics);
|
|
|
|
|
2020-08-17 07:08:16 +00:00
|
|
|
int smu_v11_0_gfx_ulv_control(struct smu_context *smu,
|
|
|
|
bool enablement);
|
|
|
|
|
2020-08-17 08:05:10 +00:00
|
|
|
int smu_v11_0_deep_sleep_control(struct smu_context *smu,
|
|
|
|
bool enablement);
|
|
|
|
|
2020-10-01 14:43:28 +00:00
|
|
|
void smu_v11_0_interrupt_work(struct smu_context *smu);
|
|
|
|
|
2018-11-29 06:01:47 +00:00
|
|
|
#endif
|
2020-07-08 04:45:00 +00:00
|
|
|
#endif
|