mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
drm/amd/pm: Add message control for SMUv13
Initialize smu message control in SMUv13 SOCs. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Asad Kamal <asad.kamal@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
067e46a36b
commit
667912bbab
|
|
@ -252,6 +252,8 @@ int smu_v13_0_od_edit_dpm_table(struct smu_context *smu,
|
|||
int smu_v13_0_set_default_dpm_tables(struct smu_context *smu);
|
||||
|
||||
void smu_v13_0_set_smu_mailbox_registers(struct smu_context *smu);
|
||||
void smu_v13_0_init_msg_ctl(struct smu_context *smu,
|
||||
const struct cmn2asic_msg_mapping *message_map);
|
||||
|
||||
int smu_v13_0_mode1_reset(struct smu_context *smu);
|
||||
|
||||
|
|
|
|||
|
|
@ -2038,4 +2038,5 @@ void aldebaran_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->table_map = aldebaran_table_map;
|
||||
smu->smc_driver_if_version = SMU13_DRIVER_IF_VERSION_ALDE;
|
||||
smu_v13_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, aldebaran_message_map);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2357,6 +2357,23 @@ void smu_v13_0_set_smu_mailbox_registers(struct smu_context *smu)
|
|||
smu->resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90);
|
||||
}
|
||||
|
||||
void smu_v13_0_init_msg_ctl(struct smu_context *smu,
|
||||
const struct cmn2asic_msg_mapping *message_map)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
struct smu_msg_ctl *ctl = &smu->msg_ctl;
|
||||
|
||||
ctl->smu = smu;
|
||||
mutex_init(&ctl->lock);
|
||||
ctl->config.msg_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_66);
|
||||
ctl->config.resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90);
|
||||
ctl->config.arg_regs[0] = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_82);
|
||||
ctl->config.num_arg_regs = 1;
|
||||
ctl->ops = &smu_msg_v1_ops;
|
||||
ctl->default_timeout = adev->usec_timeout * 20;
|
||||
ctl->message_map = message_map;
|
||||
}
|
||||
|
||||
int smu_v13_0_mode1_reset(struct smu_context *smu)
|
||||
{
|
||||
int ret = 0;
|
||||
|
|
|
|||
|
|
@ -3231,6 +3231,7 @@ void smu_v13_0_0_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->workload_map = smu_v13_0_0_workload_map;
|
||||
smu->smc_driver_if_version = SMU13_0_0_DRIVER_IF_VERSION;
|
||||
smu_v13_0_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, smu_v13_0_0_message_map);
|
||||
|
||||
if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) ==
|
||||
IP_VERSION(13, 0, 10) &&
|
||||
|
|
|
|||
|
|
@ -1133,6 +1133,22 @@ static void smu_v13_0_4_set_smu_mailbox_registers(struct smu_context *smu)
|
|||
smu->resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90);
|
||||
}
|
||||
|
||||
static void smu_v13_0_4_init_msg_ctl(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
struct smu_msg_ctl *ctl = &smu->msg_ctl;
|
||||
|
||||
ctl->smu = smu;
|
||||
mutex_init(&ctl->lock);
|
||||
ctl->config.msg_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_66);
|
||||
ctl->config.resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_90);
|
||||
ctl->config.arg_regs[0] = SOC15_REG_OFFSET(MP1, 0, mmMP1_SMN_C2PMSG_82);
|
||||
ctl->config.num_arg_regs = 1;
|
||||
ctl->ops = &smu_msg_v1_ops;
|
||||
ctl->default_timeout = adev->usec_timeout * 20;
|
||||
ctl->message_map = smu_v13_0_4_message_map;
|
||||
}
|
||||
|
||||
void smu_v13_0_4_set_ppt_funcs(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
|
|
@ -1144,8 +1160,11 @@ void smu_v13_0_4_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->smc_driver_if_version = SMU13_0_4_DRIVER_IF_VERSION;
|
||||
smu->is_apu = true;
|
||||
|
||||
if (amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 4))
|
||||
if (amdgpu_ip_version(adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 4)) {
|
||||
smu_v13_0_4_set_smu_mailbox_registers(smu);
|
||||
else
|
||||
smu_v13_0_4_init_msg_ctl(smu);
|
||||
} else {
|
||||
smu_v13_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, smu_v13_0_4_message_map);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1126,6 +1126,22 @@ static const struct pptable_funcs smu_v13_0_5_ppt_funcs = {
|
|||
.set_fine_grain_gfx_freq_parameters = smu_v13_0_5_set_fine_grain_gfx_freq_parameters,
|
||||
};
|
||||
|
||||
static void smu_v13_0_5_init_msg_ctl(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
struct smu_msg_ctl *ctl = &smu->msg_ctl;
|
||||
|
||||
ctl->smu = smu;
|
||||
mutex_init(&ctl->lock);
|
||||
ctl->config.msg_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_2);
|
||||
ctl->config.resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_33);
|
||||
ctl->config.arg_regs[0] = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_34);
|
||||
ctl->config.num_arg_regs = 1;
|
||||
ctl->ops = &smu_msg_v1_ops;
|
||||
ctl->default_timeout = adev->usec_timeout * 20;
|
||||
ctl->message_map = smu_v13_0_5_message_map;
|
||||
}
|
||||
|
||||
void smu_v13_0_5_set_ppt_funcs(struct smu_context *smu)
|
||||
{
|
||||
struct amdgpu_device *adev = smu->adev;
|
||||
|
|
@ -1139,4 +1155,5 @@ void smu_v13_0_5_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->param_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_34);
|
||||
smu->msg_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_2);
|
||||
smu->resp_reg = SOC15_REG_OFFSET(MP1, 0, mmMP1_C2PMSG_33);
|
||||
smu_v13_0_5_init_msg_ctl(smu);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3911,6 +3911,7 @@ void smu_v13_0_6_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->smc_driver_if_version = SMU_IGNORE_IF_VERSION;
|
||||
smu->smc_fw_caps |= SMU_FW_CAP_RAS_PRI;
|
||||
smu_v13_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, smu->message_map);
|
||||
smu_v13_0_6_set_temp_funcs(smu);
|
||||
amdgpu_mca_smu_init_funcs(smu->adev, &smu_v13_0_6_mca_smu_funcs);
|
||||
amdgpu_aca_set_smu_funcs(smu->adev, &smu_v13_0_6_aca_smu_funcs);
|
||||
|
|
|
|||
|
|
@ -2817,4 +2817,5 @@ void smu_v13_0_7_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->workload_map = smu_v13_0_7_workload_map;
|
||||
smu->smc_driver_if_version = SMU13_0_7_DRIVER_IF_VERSION;
|
||||
smu_v13_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, smu_v13_0_7_message_map);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1366,4 +1366,5 @@ void yellow_carp_set_ppt_funcs(struct smu_context *smu)
|
|||
smu->is_apu = true;
|
||||
smu->smc_driver_if_version = SMU13_YELLOW_CARP_DRIVER_IF_VERSION;
|
||||
smu_v13_0_set_smu_mailbox_registers(smu);
|
||||
smu_v13_0_init_msg_ctl(smu, yellow_carp_message_map);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user