|
Patrik Jakobsson |
8e2842 |
From 8a82d005ba07e5323d0732e4404f5d9782debfcf Mon Sep 17 00:00:00 2001
|
|
Patrik Jakobsson |
8e2842 |
From: Evan Quan <evan.quan@amd.com>
|
|
Patrik Jakobsson |
8e2842 |
Date: Tue, 8 Nov 2022 15:44:46 +0800
|
|
Patrik Jakobsson |
8e2842 |
Subject: drm/amd/pm: enable runpm support over BACO for SMU13.0.0
|
|
Patrik Jakobsson |
8e2842 |
Git-commit: 8652da45d09abe1b3174dbb80dc5176b8c3fa08e
|
|
Patrik Jakobsson |
8e2842 |
Patch-mainline: v6.1-rc6
|
|
Patrik Jakobsson |
8e2842 |
References: jsc#PED-1166 jsc#PED-1168 jsc#PED-1170 jsc#PED-1218 jsc#PED-1220 jsc#PED-1222 jsc#PED-1223 jsc#PED-1225 jsc#PED-2849
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
Enable SMU13.0.0 runpm support.
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
Signed-off-by: Evan Quan <evan.quan@amd.com>
|
|
Patrik Jakobsson |
8e2842 |
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
|
|
Patrik Jakobsson |
8e2842 |
Reviewed-by: Feifei Xu <Feifei.Xu@amd.com>
|
|
Patrik Jakobsson |
8e2842 |
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Patrik Jakobsson |
8e2842 |
Cc: stable@vger.kernel.org # 6.0.x
|
|
Patrik Jakobsson |
8e2842 |
Acked-by: Patrik Jakobsson <pjakobsson@suse.de>
|
|
Patrik Jakobsson |
8e2842 |
---
|
|
Patrik Jakobsson |
8e2842 |
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 8 +++++
|
|
Patrik Jakobsson |
8e2842 |
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h | 10 +------
|
|
Patrik Jakobsson |
8e2842 |
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 11 ++-----
|
|
Patrik Jakobsson |
8e2842 |
.../gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 2 +-
|
|
Patrik Jakobsson |
8e2842 |
.../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 9 ++++++
|
|
Patrik Jakobsson |
8e2842 |
.../drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 30 +++++++++++++++++--
|
|
Patrik Jakobsson |
8e2842 |
6 files changed, 50 insertions(+), 20 deletions(-)
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
|
|
Patrik Jakobsson |
8e2842 |
index e2fa3b066b96..f816b1dd110e 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
|
|
Patrik Jakobsson |
8e2842 |
@@ -1388,6 +1388,14 @@ enum smu_cmn2asic_mapping_type {
|
|
Patrik Jakobsson |
8e2842 |
CMN2ASIC_MAPPING_WORKLOAD,
|
|
Patrik Jakobsson |
8e2842 |
};
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
+enum smu_baco_seq {
|
|
Patrik Jakobsson |
8e2842 |
+ BACO_SEQ_BACO = 0,
|
|
Patrik Jakobsson |
8e2842 |
+ BACO_SEQ_MSR,
|
|
Patrik Jakobsson |
8e2842 |
+ BACO_SEQ_BAMACO,
|
|
Patrik Jakobsson |
8e2842 |
+ BACO_SEQ_ULPS,
|
|
Patrik Jakobsson |
8e2842 |
+ BACO_SEQ_COUNT,
|
|
Patrik Jakobsson |
8e2842 |
+};
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
#define MSG_MAP(msg, index, valid_in_vf) \
|
|
Patrik Jakobsson |
8e2842 |
[SMU_MSG_##msg] = {1, (index), (valid_in_vf)}
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
|
|
Patrik Jakobsson |
8e2842 |
index a9215494dcdd..d466db6f0ad4 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
|
|
Patrik Jakobsson |
8e2842 |
@@ -147,14 +147,6 @@ struct smu_11_5_power_context {
|
|
Patrik Jakobsson |
8e2842 |
uint32_t max_fast_ppt_limit;
|
|
Patrik Jakobsson |
8e2842 |
};
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
-enum smu_v11_0_baco_seq {
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_BACO = 0,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_MSR,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_BAMACO,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_ULPS,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_COUNT,
|
|
Patrik Jakobsson |
8e2842 |
-};
|
|
Patrik Jakobsson |
8e2842 |
-
|
|
Patrik Jakobsson |
8e2842 |
#if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3)
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
int smu_v11_0_init_microcode(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
@@ -257,7 +249,7 @@ int smu_v11_0_baco_enter(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
int smu_v11_0_baco_exit(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
- enum smu_v11_0_baco_seq baco_seq);
|
|
Patrik Jakobsson |
8e2842 |
+ enum smu_baco_seq baco_seq);
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
int smu_v11_0_mode1_reset(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
|
|
Patrik Jakobsson |
8e2842 |
index 80fb583b18d9..b7f4569aff2a 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
|
|
Patrik Jakobsson |
8e2842 |
@@ -124,14 +124,6 @@ struct smu_13_0_power_context {
|
|
Patrik Jakobsson |
8e2842 |
enum smu_13_0_power_state power_state;
|
|
Patrik Jakobsson |
8e2842 |
};
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
-enum smu_v13_0_baco_seq {
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_BACO = 0,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_MSR,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_BAMACO,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_ULPS,
|
|
Patrik Jakobsson |
8e2842 |
- BACO_SEQ_COUNT,
|
|
Patrik Jakobsson |
8e2842 |
-};
|
|
Patrik Jakobsson |
8e2842 |
-
|
|
Patrik Jakobsson |
8e2842 |
#if defined(SWSMU_CODE_LAYER_L2) || defined(SWSMU_CODE_LAYER_L3)
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
int smu_v13_0_init_microcode(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
@@ -218,6 +210,9 @@ int smu_v13_0_set_azalia_d3_pme(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
int smu_v13_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
struct pp_smu_nv_clock_table *max_clocks);
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
+int smu_v13_0_baco_set_armd3_sequence(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
+ enum smu_baco_seq baco_seq);
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
bool smu_v13_0_baco_is_support(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
enum smu_baco_state smu_v13_0_baco_get_state(struct smu_context *smu);
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
|
|
Patrik Jakobsson |
8e2842 |
index dccbd9f70723..70b560737687 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
|
|
Patrik Jakobsson |
8e2842 |
@@ -1576,7 +1576,7 @@ int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu)
|
|
Patrik Jakobsson |
8e2842 |
}
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
- enum smu_v11_0_baco_seq baco_seq)
|
|
Patrik Jakobsson |
8e2842 |
+ enum smu_baco_seq baco_seq)
|
|
Patrik Jakobsson |
8e2842 |
{
|
|
Patrik Jakobsson |
8e2842 |
return smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq, NULL);
|
|
Patrik Jakobsson |
8e2842 |
}
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
|
|
Patrik Jakobsson |
8e2842 |
index 43fb102a65f5..89f0f6eb19f3 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
|
|
Patrik Jakobsson |
8e2842 |
@@ -2230,6 +2230,15 @@ int smu_v13_0_gfx_ulv_control(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
return ret;
|
|
Patrik Jakobsson |
8e2842 |
}
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
+int smu_v13_0_baco_set_armd3_sequence(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
+ enum smu_baco_seq baco_seq)
|
|
Patrik Jakobsson |
8e2842 |
+{
|
|
Patrik Jakobsson |
8e2842 |
+ return smu_cmn_send_smc_msg_with_param(smu,
|
|
Patrik Jakobsson |
8e2842 |
+ SMU_MSG_ArmD3,
|
|
Patrik Jakobsson |
8e2842 |
+ baco_seq,
|
|
Patrik Jakobsson |
8e2842 |
+ NULL);
|
|
Patrik Jakobsson |
8e2842 |
+}
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
bool smu_v13_0_baco_is_support(struct smu_context *smu)
|
|
Patrik Jakobsson |
8e2842 |
{
|
|
Patrik Jakobsson |
8e2842 |
struct smu_baco_context *smu_baco = &smu->smu_baco;
|
|
Patrik Jakobsson |
8e2842 |
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
|
|
Patrik Jakobsson |
8e2842 |
index 29529328152d..f0121d171630 100644
|
|
Patrik Jakobsson |
8e2842 |
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
|
|
Patrik Jakobsson |
8e2842 |
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
|
|
Patrik Jakobsson |
8e2842 |
@@ -120,6 +120,7 @@ static struct cmn2asic_msg_mapping smu_v13_0_0_message_map[SMU_MSG_MAX_COUNT] =
|
|
Patrik Jakobsson |
8e2842 |
MSG_MAP(Mode1Reset, PPSMC_MSG_Mode1Reset, 0),
|
|
Patrik Jakobsson |
8e2842 |
MSG_MAP(PrepareMp1ForUnload, PPSMC_MSG_PrepareMp1ForUnload, 0),
|
|
Patrik Jakobsson |
8e2842 |
MSG_MAP(DFCstateControl, PPSMC_MSG_SetExternalClientDfCstateAllow, 0),
|
|
Patrik Jakobsson |
8e2842 |
+ MSG_MAP(ArmD3, PPSMC_MSG_ArmD3, 0),
|
|
Patrik Jakobsson |
8e2842 |
};
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
static struct cmn2asic_mapping smu_v13_0_0_clk_map[SMU_CLK_COUNT] = {
|
|
Patrik Jakobsson |
8e2842 |
@@ -1566,6 +1567,31 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu,
|
|
Patrik Jakobsson |
8e2842 |
NULL);
|
|
Patrik Jakobsson |
8e2842 |
}
|
|
Patrik Jakobsson |
8e2842 |
|
|
Patrik Jakobsson |
8e2842 |
+static int smu_v13_0_0_baco_enter(struct smu_context *smu)
|
|
Patrik Jakobsson |
8e2842 |
+{
|
|
Patrik Jakobsson |
8e2842 |
+ struct smu_baco_context *smu_baco = &smu->smu_baco;
|
|
Patrik Jakobsson |
8e2842 |
+ struct amdgpu_device *adev = smu->adev;
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
+ if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev))
|
|
Patrik Jakobsson |
8e2842 |
+ return smu_v13_0_baco_set_armd3_sequence(smu,
|
|
Patrik Jakobsson |
8e2842 |
+ smu_baco->maco_support ? BACO_SEQ_BAMACO : BACO_SEQ_BACO);
|
|
Patrik Jakobsson |
8e2842 |
+ else
|
|
Patrik Jakobsson |
8e2842 |
+ return smu_v13_0_baco_enter(smu);
|
|
Patrik Jakobsson |
8e2842 |
+}
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
+static int smu_v13_0_0_baco_exit(struct smu_context *smu)
|
|
Patrik Jakobsson |
8e2842 |
+{
|
|
Patrik Jakobsson |
8e2842 |
+ struct amdgpu_device *adev = smu->adev;
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
+ if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) {
|
|
Patrik Jakobsson |
8e2842 |
+ /* Wait for PMFW handling for the Dstate change */
|
|
Patrik Jakobsson |
8e2842 |
+ usleep_range(10000, 11000);
|
|
Patrik Jakobsson |
8e2842 |
+ return smu_v13_0_baco_set_armd3_sequence(smu, BACO_SEQ_ULPS);
|
|
Patrik Jakobsson |
8e2842 |
+ } else {
|
|
Patrik Jakobsson |
8e2842 |
+ return smu_v13_0_baco_exit(smu);
|
|
Patrik Jakobsson |
8e2842 |
+ }
|
|
Patrik Jakobsson |
8e2842 |
+}
|
|
Patrik Jakobsson |
8e2842 |
+
|
|
Patrik Jakobsson |
8e2842 |
static bool smu_v13_0_0_is_mode1_reset_supported(struct smu_context *smu)
|
|
Patrik Jakobsson |
8e2842 |
{
|
|
Patrik Jakobsson |
8e2842 |
struct amdgpu_device *adev = smu->adev;
|
|
Patrik Jakobsson |
8e2842 |
@@ -1827,8 +1853,8 @@ static const struct pptable_funcs smu_v13_0_0_ppt_funcs = {
|
|
Patrik Jakobsson |
8e2842 |
.baco_is_support = smu_v13_0_baco_is_support,
|
|
Patrik Jakobsson |
8e2842 |
.baco_get_state = smu_v13_0_baco_get_state,
|
|
Patrik Jakobsson |
8e2842 |
.baco_set_state = smu_v13_0_baco_set_state,
|
|
Patrik Jakobsson |
8e2842 |
- .baco_enter = smu_v13_0_baco_enter,
|
|
Patrik Jakobsson |
8e2842 |
- .baco_exit = smu_v13_0_baco_exit,
|
|
Patrik Jakobsson |
8e2842 |
+ .baco_enter = smu_v13_0_0_baco_enter,
|
|
Patrik Jakobsson |
8e2842 |
+ .baco_exit = smu_v13_0_0_baco_exit,
|
|
Patrik Jakobsson |
8e2842 |
.mode1_reset_is_support = smu_v13_0_0_is_mode1_reset_supported,
|
|
Patrik Jakobsson |
8e2842 |
.mode1_reset = smu_v13_0_mode1_reset,
|
|
Patrik Jakobsson |
8e2842 |
.set_mp1_state = smu_v13_0_0_set_mp1_state,
|
|
Patrik Jakobsson |
8e2842 |
--
|
|
Patrik Jakobsson |
8e2842 |
2.38.1
|
|
Patrik Jakobsson |
8e2842 |
|