* [PATCH 2/5] drm/amdgpu/pm: Change the member function name of pp_hwmgr_func
2024-03-25 10:15 [PATCH 1/5] drm/amdgpu: Add a new runtime mode definition Ma Jun
@ 2024-03-25 10:15 ` Ma Jun
2024-03-25 10:15 ` [PATCH 3/5] drm/amdgpu/pm: Add support for MACO flag checking Ma Jun
` (2 subsequent siblings)
3 siblings, 0 replies; 10+ messages in thread
From: Ma Jun @ 2024-03-25 10:15 UTC (permalink / raw)
To: amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang, Ma Jun
Change the member function name of pp_hwmgr_func to
keep consistent with the function in pptable_funcs
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
---
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 4 ++--
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2 +-
12 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index aed0e2cefbf9..fafd4e0b7908 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1379,10 +1379,10 @@ static bool pp_get_asic_baco_capability(void *handle)
return false;
if (!(hwmgr->not_vf && amdgpu_dpm) ||
- !hwmgr->hwmgr_func->get_asic_baco_capability)
+ !hwmgr->hwmgr_func->baco_is_support)
return false;
- return hwmgr->hwmgr_func->get_asic_baco_capability(hwmgr);
+ return hwmgr->hwmgr_func->baco_is_support(hwmgr);
}
static int pp_get_asic_baco_state(void *handle, int *state)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
index e8a9471c1898..1ab4fbfe0cde 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
@@ -33,7 +33,7 @@
#include "smu/smu_7_1_2_d.h"
#include "smu/smu_7_1_2_sh_mask.h"
-bool smu7_baco_get_capability(struct pp_hwmgr *hwmgr)
+bool smu7_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
index 73a773f4ce2e..df142c2eec8e 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool smu7_baco_get_capability(struct pp_hwmgr *hwmgr);
+extern bool smu7_baco_is_support(struct pp_hwmgr *hwmgr);
extern int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
extern int smu7_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
index aa91730e4eaf..ae7032d43169 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
@@ -5791,7 +5791,7 @@ static const struct pp_hwmgr_func smu7_hwmgr_funcs = {
.get_power_profile_mode = smu7_get_power_profile_mode,
.set_power_profile_mode = smu7_set_power_profile_mode,
.get_performance_level = smu7_get_performance_level,
- .get_asic_baco_capability = smu7_baco_get_capability,
+ .baco_is_support = smu7_baco_is_support,
.get_asic_baco_state = smu7_baco_get_state,
.set_asic_baco_state = smu7_baco_set_state,
.power_off_asic = smu7_power_off_asic,
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
index c66ef9741535..687cd80ebad8 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
@@ -28,7 +28,7 @@
#include "vega10_inc.h"
#include "smu9_baco.h"
-bool smu9_baco_get_capability(struct pp_hwmgr *hwmgr)
+bool smu9_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg, data;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
index 9ff7c2ea1b58..24461f1e3b01 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool smu9_baco_get_capability(struct pp_hwmgr *hwmgr);
+extern bool smu9_baco_is_support(struct pp_hwmgr *hwmgr);
extern int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
#endif
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
index 6d6bc6a380b3..e86f27b06f23 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c
@@ -5756,7 +5756,7 @@ static const struct pp_hwmgr_func vega10_hwmgr_funcs = {
.set_power_limit = vega10_set_power_limit,
.odn_edit_dpm_table = vega10_odn_edit_dpm_table,
.get_performance_level = vega10_get_performance_level,
- .get_asic_baco_capability = smu9_baco_get_capability,
+ .baco_is_support = smu9_baco_is_support,
.get_asic_baco_state = smu9_baco_get_state,
.set_asic_baco_state = vega10_baco_set_state,
.enable_mgpu_fan_boost = vega10_enable_mgpu_fan_boost,
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
index 460067933de2..386c1d7f52d5 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c
@@ -2966,7 +2966,7 @@ static const struct pp_hwmgr_func vega12_hwmgr_funcs = {
.start_thermal_controller = vega12_start_thermal_controller,
.powergate_gfx = vega12_gfx_off_control,
.get_performance_level = vega12_get_performance_level,
- .get_asic_baco_capability = smu9_baco_get_capability,
+ .baco_is_support = smu9_baco_is_support,
.get_asic_baco_state = smu9_baco_get_state,
.set_asic_baco_state = vega12_baco_set_state,
.get_ppfeature_status = vega12_get_ppfeature_status,
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
index dad4c80aee58..bc0ff417921b 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
@@ -36,7 +36,7 @@ static const struct soc15_baco_cmd_entry clean_baco_tbl[] = {
{CMD_WRITE, SOC15_REG_ENTRY(NBIF, 0, mmBIOS_SCRATCH_7), 0, 0, 0, 0},
};
-bool vega20_baco_get_capability(struct pp_hwmgr *hwmgr)
+bool vega20_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
index bdad9c915631..006eb6633ce8 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool vega20_baco_get_capability(struct pp_hwmgr *hwmgr);
+extern bool vega20_baco_is_support(struct pp_hwmgr *hwmgr);
extern int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
extern int vega20_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
extern int vega20_baco_apply_vdci_flush_workaround(struct pp_hwmgr *hwmgr);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
index 3b33af30eb0f..bfecff6afc24 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c
@@ -4422,7 +4422,7 @@ static const struct pp_hwmgr_func vega20_hwmgr_funcs = {
.notify_cac_buffer_info = vega20_notify_cac_buffer_info,
.enable_mgpu_fan_boost = vega20_enable_mgpu_fan_boost,
/* BACO related */
- .get_asic_baco_capability = vega20_baco_get_capability,
+ .baco_is_support = vega20_baco_is_support,
.get_asic_baco_state = vega20_baco_get_state,
.set_asic_baco_state = vega20_baco_set_state,
.set_mp1_state = vega20_set_mp1_state,
diff --git a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
index 6f536159df4d..83f903d8e994 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
@@ -351,7 +351,7 @@ struct pp_hwmgr_func {
int (*set_hard_min_fclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
int (*set_hard_min_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
int (*set_soft_max_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
- bool (*get_asic_baco_capability)(struct pp_hwmgr *hwmgr);
+ bool (*baco_is_support)(struct pp_hwmgr *hwmgr);
int (*get_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
int (*set_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf);
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 3/5] drm/amdgpu/pm: Add support for MACO flag checking
2024-03-25 10:15 [PATCH 1/5] drm/amdgpu: Add a new runtime mode definition Ma Jun
2024-03-25 10:15 ` [PATCH 2/5] drm/amdgpu/pm: Change the member function name of pp_hwmgr_func Ma Jun
@ 2024-03-25 10:15 ` Ma Jun
2024-03-26 9:26 ` Lazar, Lijo
2024-03-25 10:15 ` [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking Ma Jun
2024-03-25 10:15 ` [PATCH 5/5] drm/amdgpu/pm: Check AMDGPU_RUNPM_BAMACO when setting baco state Ma Jun
3 siblings, 1 reply; 10+ messages in thread
From: Ma Jun @ 2024-03-25 10:15 UTC (permalink / raw)
To: amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang, Ma Jun
Add support for MACO flag checking.
MACO mode only works if BACO is supported.
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
drivers/gpu/drm/amd/amdgpu/cik.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/si.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/soc15.c | 10 +++++-----
drivers/gpu/drm/amd/amdgpu/vi.c | 8 ++++----
drivers/gpu/drm/amd/include/kgd_pp_interface.h | 2 +-
drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 8 ++++----
drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c | 6 +++---
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c | 8 ++++----
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h | 2 +-
.../gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c | 8 ++++----
.../gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h | 2 +-
drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2 +-
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 2 +-
drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2 +-
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h | 2 +-
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 2 +-
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h | 2 +-
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 14 +++++++++-----
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 4 ++--
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 14 +++++++++-----
.../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 4 ++--
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 14 +++++++++-----
27 files changed, 74 insertions(+), 62 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 9c62552bec34..3723235f5818 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -605,7 +605,7 @@ struct amdgpu_asic_funcs {
/* PCIe replay counter */
uint64_t (*get_pcie_replay_count)(struct amdgpu_device *adev);
/* device supports BACO */
- bool (*supports_baco)(struct amdgpu_device *adev);
+ int (*supports_baco)(struct amdgpu_device *adev);
/* pre asic_init quirks */
void (*pre_asic_init)(struct amdgpu_device *adev);
/* enter/exit umd stable pstate */
@@ -1407,7 +1407,7 @@ bool amdgpu_device_supports_atpx(struct drm_device *dev);
bool amdgpu_device_supports_px(struct drm_device *dev);
bool amdgpu_device_supports_boco(struct drm_device *dev);
bool amdgpu_device_supports_smart_shift(struct drm_device *dev);
-bool amdgpu_device_supports_baco(struct drm_device *dev);
+int amdgpu_device_supports_baco(struct drm_device *dev);
bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
struct amdgpu_device *peer_adev);
int amdgpu_device_baco_enter(struct drm_device *dev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 12dc71a6b5db..aecb55d6963a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -341,7 +341,7 @@ bool amdgpu_device_supports_boco(struct drm_device *dev)
* Returns true if the device supporte BACO,
* otherwise return false.
*/
-bool amdgpu_device_supports_baco(struct drm_device *dev)
+int amdgpu_device_supports_baco(struct drm_device *dev)
{
struct amdgpu_device *adev = drm_to_adev(dev);
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
index a3a643254d7a..fdbc26346b54 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik.c
@@ -1375,14 +1375,14 @@ static int cik_asic_pci_config_reset(struct amdgpu_device *adev)
return r;
}
-static bool cik_asic_supports_baco(struct amdgpu_device *adev)
+static int cik_asic_supports_baco(struct amdgpu_device *adev)
{
switch (adev->asic_type) {
case CHIP_BONAIRE:
case CHIP_HAWAII:
return amdgpu_dpm_is_baco_supported(adev);
default:
- return false;
+ return 0;
}
}
diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
index 23e4ef4fff7c..67e179c7e347 100644
--- a/drivers/gpu/drm/amd/amdgpu/si.c
+++ b/drivers/gpu/drm/amd/amdgpu/si.c
@@ -1409,9 +1409,9 @@ static int si_gpu_pci_config_reset(struct amdgpu_device *adev)
return r;
}
-static bool si_asic_supports_baco(struct amdgpu_device *adev)
+static int si_asic_supports_baco(struct amdgpu_device *adev)
{
- return false;
+ return 0;
}
static enum amd_reset_method
diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
index dec81ccf6240..c8abbf5da736 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -502,7 +502,7 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
static enum amd_reset_method
soc15_asic_reset_method(struct amdgpu_device *adev)
{
- bool baco_reset = false;
+ int baco_reset = 0;
bool connected_to_cpu = false;
struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
@@ -540,7 +540,7 @@ soc15_asic_reset_method(struct amdgpu_device *adev)
*/
if (ras && adev->ras_enabled &&
adev->pm.fw_version <= 0x283400)
- baco_reset = false;
+ baco_reset = 0;
} else {
baco_reset = amdgpu_dpm_is_baco_supported(adev);
}
@@ -620,7 +620,7 @@ static int soc15_asic_reset(struct amdgpu_device *adev)
}
}
-static bool soc15_supports_baco(struct amdgpu_device *adev)
+static int soc15_supports_baco(struct amdgpu_device *adev)
{
switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
case IP_VERSION(9, 0, 0):
@@ -628,13 +628,13 @@ static bool soc15_supports_baco(struct amdgpu_device *adev)
if (adev->asic_type == CHIP_VEGA20) {
if (adev->psp.sos.fw_version >= 0x80067)
return amdgpu_dpm_is_baco_supported(adev);
- return false;
+ return 0;
} else {
return amdgpu_dpm_is_baco_supported(adev);
}
break;
default:
- return false;
+ return 0;
}
}
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
index 1a98812981f4..2415355b037c 100644
--- a/drivers/gpu/drm/amd/amdgpu/vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
@@ -897,7 +897,7 @@ static int vi_asic_pci_config_reset(struct amdgpu_device *adev)
return r;
}
-static bool vi_asic_supports_baco(struct amdgpu_device *adev)
+static int vi_asic_supports_baco(struct amdgpu_device *adev)
{
switch (adev->asic_type) {
case CHIP_FIJI:
@@ -908,14 +908,14 @@ static bool vi_asic_supports_baco(struct amdgpu_device *adev)
case CHIP_TOPAZ:
return amdgpu_dpm_is_baco_supported(adev);
default:
- return false;
+ return 0;
}
}
static enum amd_reset_method
vi_asic_reset_method(struct amdgpu_device *adev)
{
- bool baco_reset;
+ int baco_reset;
if (amdgpu_reset_method == AMD_RESET_METHOD_LEGACY ||
amdgpu_reset_method == AMD_RESET_METHOD_BACO)
@@ -935,7 +935,7 @@ vi_asic_reset_method(struct amdgpu_device *adev)
baco_reset = amdgpu_dpm_is_baco_supported(adev);
break;
default:
- baco_reset = false;
+ baco_reset = 0;
break;
}
diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
index afb930b70615..805c9d37a2b4 100644
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -421,7 +421,7 @@ struct amd_pm_funcs {
int (*set_hard_min_dcefclk_by_freq)(void *handle, uint32_t clock);
int (*set_hard_min_fclk_by_freq)(void *handle, uint32_t clock);
int (*set_min_deep_sleep_dcefclk)(void *handle, uint32_t clock);
- bool (*get_asic_baco_capability)(void *handle);
+ int (*get_asic_baco_capability)(void *handle);
int (*get_asic_baco_state)(void *handle, int *state);
int (*set_asic_baco_state)(void *handle, int state);
int (*get_ppfeature_status)(void *handle, char *buf);
diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
index f84bfed50681..eee919577b44 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
@@ -199,14 +199,14 @@ int amdgpu_dpm_notify_rlc_state(struct amdgpu_device *adev, bool en)
return ret;
}
-bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
+int amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
{
const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
void *pp_handle = adev->powerplay.pp_handle;
- bool ret;
+ int ret;
if (!pp_funcs || !pp_funcs->get_asic_baco_capability)
- return false;
+ return 0;
/* Don't use baco for reset in S3.
* This is a workaround for some platforms
* where entering BACO during suspend
@@ -217,7 +217,7 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
* devices. Needs more investigation.
*/
if (adev->in_s3)
- return false;
+ return 0;
mutex_lock(&adev->pm.mutex);
diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
index e6cad9f7aaeb..501f8c726e8d 100644
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
@@ -411,7 +411,7 @@ int amdgpu_dpm_baco_reset(struct amdgpu_device *adev);
int amdgpu_dpm_mode2_reset(struct amdgpu_device *adev);
int amdgpu_dpm_enable_gfx_features(struct amdgpu_device *adev);
-bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev);
+int amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev);
bool amdgpu_dpm_is_mode1_reset_supported(struct amdgpu_device *adev);
int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
index fafd4e0b7908..d4b7a80c649a 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
@@ -1371,7 +1371,7 @@ static int pp_set_active_display_count(void *handle, uint32_t count)
return phm_set_active_display_count(hwmgr, count);
}
-static bool pp_get_asic_baco_capability(void *handle)
+static int pp_get_asic_baco_capability(void *handle)
{
struct pp_hwmgr *hwmgr = handle;
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
index 1ab4fbfe0cde..4ce068c08cb8 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
@@ -33,7 +33,7 @@
#include "smu/smu_7_1_2_d.h"
#include "smu/smu_7_1_2_sh_mask.h"
-bool smu7_baco_is_support(struct pp_hwmgr *hwmgr)
+int smu7_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg;
@@ -44,9 +44,9 @@ bool smu7_baco_is_support(struct pp_hwmgr *hwmgr)
reg = RREG32(mmCC_BIF_BX_FUSESTRAP0);
if (reg & CC_BIF_BX_FUSESTRAP0__STRAP_BIF_PX_CAPABLE_MASK)
- return true;
+ return BACO_SUPPORT;
- return false;
+ return 0;
}
int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
index df142c2eec8e..a2d6b71789f8 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool smu7_baco_is_support(struct pp_hwmgr *hwmgr);
+extern int smu7_baco_is_support(struct pp_hwmgr *hwmgr);
extern int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
extern int smu7_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
index 687cd80ebad8..3684bca772bb 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
@@ -28,13 +28,13 @@
#include "vega10_inc.h"
#include "smu9_baco.h"
-bool smu9_baco_is_support(struct pp_hwmgr *hwmgr)
+int smu9_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg, data;
if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
- return false;
+ return 0;
WREG32(0x12074, 0xFFF0003B);
data = RREG32(0x12075);
@@ -43,10 +43,10 @@ bool smu9_baco_is_support(struct pp_hwmgr *hwmgr)
reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK)
- return true;
+ return BACO_SUPPORT;
}
- return false;
+ return 0;
}
int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
index 24461f1e3b01..2decf7d549d5 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool smu9_baco_is_support(struct pp_hwmgr *hwmgr);
+extern int smu9_baco_is_support(struct pp_hwmgr *hwmgr);
extern int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
#endif
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
index bc0ff417921b..934d530a9cce 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
@@ -36,22 +36,22 @@ static const struct soc15_baco_cmd_entry clean_baco_tbl[] = {
{CMD_WRITE, SOC15_REG_ENTRY(NBIF, 0, mmBIOS_SCRATCH_7), 0, 0, 0, 0},
};
-bool vega20_baco_is_support(struct pp_hwmgr *hwmgr)
+int vega20_baco_is_support(struct pp_hwmgr *hwmgr)
{
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg;
if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
- return false;
+ return 0;
if (((RREG32(0x17569) & 0x20000000) >> 29) == 0x1) {
reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK)
- return true;
+ return BACO_SUPPORT;
}
- return false;
+ return 0;
}
int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
index 006eb6633ce8..13eef042ec42 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
@@ -25,7 +25,7 @@
#include "hwmgr.h"
#include "common_baco.h"
-extern bool vega20_baco_is_support(struct pp_hwmgr *hwmgr);
+extern int vega20_baco_is_support(struct pp_hwmgr *hwmgr);
extern int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
extern int vega20_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
extern int vega20_baco_apply_vdci_flush_workaround(struct pp_hwmgr *hwmgr);
diff --git a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
index 83f903d8e994..bee0eedc2b3f 100644
--- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
@@ -351,7 +351,7 @@ struct pp_hwmgr_func {
int (*set_hard_min_fclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
int (*set_hard_min_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
int (*set_soft_max_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
- bool (*baco_is_support)(struct pp_hwmgr *hwmgr);
+ int (*baco_is_support)(struct pp_hwmgr *hwmgr);
int (*get_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
int (*set_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 246b211b1e85..1f0a34251b9c 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -3200,7 +3200,7 @@ static int smu_set_xgmi_pstate(void *handle,
return ret;
}
-static bool smu_get_baco_capability(void *handle)
+static int smu_get_baco_capability(void *handle)
{
struct smu_context *smu = handle;
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
index a870bdd49a4e..dad43894cab2 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
@@ -1175,7 +1175,7 @@ struct pptable_funcs {
/**
* @baco_is_support: Check if GPU supports BACO (Bus Active, Chip Off).
*/
- bool (*baco_is_support)(struct smu_context *smu);
+ int (*baco_is_support)(struct smu_context *smu);
/**
* @baco_get_state: Get the current BACO state.
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
index a0e5ad0381d6..7cd991069a79 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
@@ -237,7 +237,7 @@ 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);
+int smu_v11_0_baco_is_support(struct smu_context *smu);
enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
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
index fbd57fa1a004..b81aa9c521e0 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
@@ -210,7 +210,7 @@ int smu_v13_0_set_azalia_d3_pme(struct smu_context *smu);
int smu_v13_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
struct pp_smu_nv_clock_table *max_clocks);
-bool smu_v13_0_baco_is_support(struct smu_context *smu);
+int smu_v13_0_baco_is_support(struct smu_context *smu);
int smu_v13_0_baco_enter(struct smu_context *smu);
int smu_v13_0_baco_exit(struct smu_context *smu);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
index 3f7463c1c1a9..5e887f551b3e 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
+++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
@@ -159,7 +159,7 @@ int smu_v14_0_register_irq_handler(struct smu_context *smu);
int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
enum smu_baco_seq baco_seq);
-bool smu_v14_0_baco_is_support(struct smu_context *smu);
+int smu_v14_0_baco_is_support(struct smu_context *smu);
enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu);
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
index 5e5da9b16718..d0c6dad24458 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -1557,23 +1557,27 @@ int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu,
return smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq, NULL);
}
-bool smu_v11_0_baco_is_support(struct smu_context *smu)
+int smu_v11_0_baco_is_support(struct smu_context *smu)
{
struct smu_baco_context *smu_baco = &smu->smu_baco;
+ int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support)
- return false;
+ return 0;
+
+ if (smu_baco->maco_support)
+ bamaco_support |= MACO_SUPPORT;
/* return true if ASIC is in BACO state already */
if (smu_v11_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
- return true;
+ return bamaco_support |= BACO_SUPPORT;
/* Arcturus does not support this bit mask */
if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
- return false;
+ return 0;
- return true;
+ return (bamaco_support |= BACO_SUPPORT);
}
enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
index 0467864a1aa8..33da5347880a 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -1582,11 +1582,11 @@ static void aldebaran_get_unique_id(struct smu_context *smu)
adev->unique_id = ((uint64_t)upper32 << 32) | lower32;
}
-static bool aldebaran_is_baco_supported(struct smu_context *smu)
+static int aldebaran_is_baco_supported(struct smu_context *smu)
{
/* aldebaran is not support baco */
- return false;
+ return 0;
}
static int aldebaran_set_df_cstate(struct smu_context *smu,
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
index ce16f2a08a47..a65877eeaa8d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -2268,22 +2268,26 @@ static int smu_v13_0_baco_set_state(struct smu_context *smu,
return ret;
}
-bool smu_v13_0_baco_is_support(struct smu_context *smu)
+int smu_v13_0_baco_is_support(struct smu_context *smu)
{
struct smu_baco_context *smu_baco = &smu->smu_baco;
+ int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support)
- return false;
+ return 0;
+
+ if (smu_baco->maco_support)
+ bamaco_support |= MACO_SUPPORT;
/* return true if ASIC is in BACO state already */
if (smu_v13_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
- return true;
+ return bamaco_support |= BACO_SUPPORT;
if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
- return false;
+ return 0;
- return true;
+ return (bamaco_support |= BACO_SUPPORT);
}
int smu_v13_0_baco_enter(struct smu_context *smu)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
index 443233563a52..02b098d81ebf 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
@@ -2078,11 +2078,11 @@ static void smu_v13_0_6_get_unique_id(struct smu_context *smu)
adev->unique_id = pptable->PublicSerialNumber_AID;
}
-static bool smu_v13_0_6_is_baco_supported(struct smu_context *smu)
+static int smu_v13_0_6_is_baco_supported(struct smu_context *smu)
{
/* smu_13_0_6 does not support baco */
- return false;
+ return 0;
}
static const char *const throttling_logging_label[] = {
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
index 9e39f99154f9..cc7cc2a6d871 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
@@ -1590,23 +1590,27 @@ int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
return 0;
}
-bool smu_v14_0_baco_is_support(struct smu_context *smu)
+int smu_v14_0_baco_is_support(struct smu_context *smu)
{
struct smu_baco_context *smu_baco = &smu->smu_baco;
+ int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) ||
!smu_baco->platform_support)
- return false;
+ return 0;
+
+ if (smu_baco->maco_support)
+ bamaco_support |= MACO_SUPPORT;
/* return true if ASIC is in BACO state already */
if (smu_v14_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
- return true;
+ return (bamaco_support |= BACO_SUPPORT);
if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
- return false;
+ return 0;
- return true;
+ return (bamaco_support |= BACO_SUPPORT);
}
enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu)
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH 3/5] drm/amdgpu/pm: Add support for MACO flag checking
2024-03-25 10:15 ` [PATCH 3/5] drm/amdgpu/pm: Add support for MACO flag checking Ma Jun
@ 2024-03-26 9:26 ` Lazar, Lijo
0 siblings, 0 replies; 10+ messages in thread
From: Lazar, Lijo @ 2024-03-26 9:26 UTC (permalink / raw)
To: amd-gfx
On 3/25/2024 3:45 PM, Ma Jun wrote:
> Add support for MACO flag checking.
> MACO mode only works if BACO is supported.
>
> Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 ++--
> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/cik.c | 4 ++--
> drivers/gpu/drm/amd/amdgpu/si.c | 4 ++--
> drivers/gpu/drm/amd/amdgpu/soc15.c | 10 +++++-----
> drivers/gpu/drm/amd/amdgpu/vi.c | 8 ++++----
> drivers/gpu/drm/amd/include/kgd_pp_interface.h | 2 +-
> drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 8 ++++----
> drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 2 +-
> drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 2 +-
> drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c | 6 +++---
> drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h | 2 +-
> drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c | 8 ++++----
> drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h | 2 +-
> .../gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c | 8 ++++----
> .../gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h | 2 +-
> drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h | 2 +-
> drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 14 +++++++++-----
> drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 4 ++--
> drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 14 +++++++++-----
> .../gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 4 ++--
> drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 14 +++++++++-----
> 27 files changed, 74 insertions(+), 62 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 9c62552bec34..3723235f5818 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -605,7 +605,7 @@ struct amdgpu_asic_funcs {
> /* PCIe replay counter */
> uint64_t (*get_pcie_replay_count)(struct amdgpu_device *adev);
> /* device supports BACO */
> - bool (*supports_baco)(struct amdgpu_device *adev);
> + int (*supports_baco)(struct amdgpu_device *adev);
> /* pre asic_init quirks */
> void (*pre_asic_init)(struct amdgpu_device *adev);
> /* enter/exit umd stable pstate */
> @@ -1407,7 +1407,7 @@ bool amdgpu_device_supports_atpx(struct drm_device *dev);
> bool amdgpu_device_supports_px(struct drm_device *dev);
> bool amdgpu_device_supports_boco(struct drm_device *dev);
> bool amdgpu_device_supports_smart_shift(struct drm_device *dev);
> -bool amdgpu_device_supports_baco(struct drm_device *dev);
> +int amdgpu_device_supports_baco(struct drm_device *dev);
> bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
> struct amdgpu_device *peer_adev);
> int amdgpu_device_baco_enter(struct drm_device *dev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index 12dc71a6b5db..aecb55d6963a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -341,7 +341,7 @@ bool amdgpu_device_supports_boco(struct drm_device *dev)
> * Returns true if the device supporte BACO,
> * otherwise return false.
> */
> -bool amdgpu_device_supports_baco(struct drm_device *dev)
> +int amdgpu_device_supports_baco(struct drm_device *dev)
> {
> struct amdgpu_device *adev = drm_to_adev(dev);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
> index a3a643254d7a..fdbc26346b54 100644
> --- a/drivers/gpu/drm/amd/amdgpu/cik.c
> +++ b/drivers/gpu/drm/amd/amdgpu/cik.c
> @@ -1375,14 +1375,14 @@ static int cik_asic_pci_config_reset(struct amdgpu_device *adev)
> return r;
> }
>
> -static bool cik_asic_supports_baco(struct amdgpu_device *adev)
> +static int cik_asic_supports_baco(struct amdgpu_device *adev)
> {
> switch (adev->asic_type) {
> case CHIP_BONAIRE:
> case CHIP_HAWAII:
> return amdgpu_dpm_is_baco_supported(adev);
> default:
> - return false;
> + return 0;
> }
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
> index 23e4ef4fff7c..67e179c7e347 100644
> --- a/drivers/gpu/drm/amd/amdgpu/si.c
> +++ b/drivers/gpu/drm/amd/amdgpu/si.c
> @@ -1409,9 +1409,9 @@ static int si_gpu_pci_config_reset(struct amdgpu_device *adev)
> return r;
> }
>
> -static bool si_asic_supports_baco(struct amdgpu_device *adev)
> +static int si_asic_supports_baco(struct amdgpu_device *adev)
> {
> - return false;
> + return 0;
> }
>
> static enum amd_reset_method
> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
> index dec81ccf6240..c8abbf5da736 100644
> --- a/drivers/gpu/drm/amd/amdgpu/soc15.c
> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
> @@ -502,7 +502,7 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
> static enum amd_reset_method
> soc15_asic_reset_method(struct amdgpu_device *adev)
> {
> - bool baco_reset = false;
> + int baco_reset = 0;
> bool connected_to_cpu = false;
> struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
>
> @@ -540,7 +540,7 @@ soc15_asic_reset_method(struct amdgpu_device *adev)
> */
> if (ras && adev->ras_enabled &&
> adev->pm.fw_version <= 0x283400)
> - baco_reset = false;
> + baco_reset = 0;
> } else {
> baco_reset = amdgpu_dpm_is_baco_supported(adev);
> }
> @@ -620,7 +620,7 @@ static int soc15_asic_reset(struct amdgpu_device *adev)
> }
> }
>
> -static bool soc15_supports_baco(struct amdgpu_device *adev)
> +static int soc15_supports_baco(struct amdgpu_device *adev)
> {
> switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
> case IP_VERSION(9, 0, 0):
> @@ -628,13 +628,13 @@ static bool soc15_supports_baco(struct amdgpu_device *adev)
> if (adev->asic_type == CHIP_VEGA20) {
> if (adev->psp.sos.fw_version >= 0x80067)
> return amdgpu_dpm_is_baco_supported(adev);
> - return false;
> + return 0;
> } else {
> return amdgpu_dpm_is_baco_supported(adev);
> }
> break;
> default:
> - return false;
> + return 0;
> }
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
> index 1a98812981f4..2415355b037c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vi.c
> @@ -897,7 +897,7 @@ static int vi_asic_pci_config_reset(struct amdgpu_device *adev)
> return r;
> }
>
> -static bool vi_asic_supports_baco(struct amdgpu_device *adev)
> +static int vi_asic_supports_baco(struct amdgpu_device *adev)
> {
> switch (adev->asic_type) {
> case CHIP_FIJI:
> @@ -908,14 +908,14 @@ static bool vi_asic_supports_baco(struct amdgpu_device *adev)
> case CHIP_TOPAZ:
> return amdgpu_dpm_is_baco_supported(adev);
> default:
> - return false;
> + return 0;
> }
> }
>
> static enum amd_reset_method
> vi_asic_reset_method(struct amdgpu_device *adev)
> {
> - bool baco_reset;
> + int baco_reset;
>
> if (amdgpu_reset_method == AMD_RESET_METHOD_LEGACY ||
> amdgpu_reset_method == AMD_RESET_METHOD_BACO)
> @@ -935,7 +935,7 @@ vi_asic_reset_method(struct amdgpu_device *adev)
> baco_reset = amdgpu_dpm_is_baco_supported(adev);
> break;
> default:
> - baco_reset = false;
> + baco_reset = 0;
> break;
> }
>
> diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
> index afb930b70615..805c9d37a2b4 100644
> --- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
> +++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
> @@ -421,7 +421,7 @@ struct amd_pm_funcs {
> int (*set_hard_min_dcefclk_by_freq)(void *handle, uint32_t clock);
> int (*set_hard_min_fclk_by_freq)(void *handle, uint32_t clock);
> int (*set_min_deep_sleep_dcefclk)(void *handle, uint32_t clock);
> - bool (*get_asic_baco_capability)(void *handle);
> + int (*get_asic_baco_capability)(void *handle);
> int (*get_asic_baco_state)(void *handle, int *state);
> int (*set_asic_baco_state)(void *handle, int state);
> int (*get_ppfeature_status)(void *handle, char *buf);
> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> index f84bfed50681..eee919577b44 100644
> --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> @@ -199,14 +199,14 @@ int amdgpu_dpm_notify_rlc_state(struct amdgpu_device *adev, bool en)
> return ret;
> }
>
> -bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
> +int amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
> {
> const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
> void *pp_handle = adev->powerplay.pp_handle;
> - bool ret;
> + int ret;
>
> if (!pp_funcs || !pp_funcs->get_asic_baco_capability)
> - return false;
> + return 0;
> /* Don't use baco for reset in S3.
> * This is a workaround for some platforms
> * where entering BACO during suspend
> @@ -217,7 +217,7 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
> * devices. Needs more investigation.
> */
> if (adev->in_s3)
> - return false;
> + return 0;
>
> mutex_lock(&adev->pm.mutex);
>
> diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> index e6cad9f7aaeb..501f8c726e8d 100644
> --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> @@ -411,7 +411,7 @@ int amdgpu_dpm_baco_reset(struct amdgpu_device *adev);
> int amdgpu_dpm_mode2_reset(struct amdgpu_device *adev);
> int amdgpu_dpm_enable_gfx_features(struct amdgpu_device *adev);
>
> -bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev);
> +int amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev);
>
> bool amdgpu_dpm_is_mode1_reset_supported(struct amdgpu_device *adev);
> int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> index fafd4e0b7908..d4b7a80c649a 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c
> @@ -1371,7 +1371,7 @@ static int pp_set_active_display_count(void *handle, uint32_t count)
> return phm_set_active_display_count(hwmgr, count);
> }
>
> -static bool pp_get_asic_baco_capability(void *handle)
> +static int pp_get_asic_baco_capability(void *handle)
> {
> struct pp_hwmgr *hwmgr = handle;
>
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
> index 1ab4fbfe0cde..4ce068c08cb8 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.c
> @@ -33,7 +33,7 @@
> #include "smu/smu_7_1_2_d.h"
> #include "smu/smu_7_1_2_sh_mask.h"
>
> -bool smu7_baco_is_support(struct pp_hwmgr *hwmgr)
> +int smu7_baco_is_support(struct pp_hwmgr *hwmgr)
> {
> struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
> uint32_t reg;
> @@ -44,9 +44,9 @@ bool smu7_baco_is_support(struct pp_hwmgr *hwmgr)
> reg = RREG32(mmCC_BIF_BX_FUSESTRAP0);
>
> if (reg & CC_BIF_BX_FUSESTRAP0__STRAP_BIF_PX_CAPABLE_MASK)
> - return true;
> + return BACO_SUPPORT;
>
> - return false;
> + return 0;
> }
>
> int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
> index df142c2eec8e..a2d6b71789f8 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_baco.h
> @@ -25,7 +25,7 @@
> #include "hwmgr.h"
> #include "common_baco.h"
>
> -extern bool smu7_baco_is_support(struct pp_hwmgr *hwmgr);
> +extern int smu7_baco_is_support(struct pp_hwmgr *hwmgr);
> extern int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
> extern int smu7_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
>
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
> index 687cd80ebad8..3684bca772bb 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.c
> @@ -28,13 +28,13 @@
> #include "vega10_inc.h"
> #include "smu9_baco.h"
>
> -bool smu9_baco_is_support(struct pp_hwmgr *hwmgr)
> +int smu9_baco_is_support(struct pp_hwmgr *hwmgr)
> {
> struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
> uint32_t reg, data;
>
> if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
> - return false;
> + return 0;
>
> WREG32(0x12074, 0xFFF0003B);
> data = RREG32(0x12075);
> @@ -43,10 +43,10 @@ bool smu9_baco_is_support(struct pp_hwmgr *hwmgr)
> reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
>
> if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK)
> - return true;
> + return BACO_SUPPORT;
> }
>
> - return false;
> + return 0;
> }
>
> int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
> index 24461f1e3b01..2decf7d549d5 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu9_baco.h
> @@ -25,7 +25,7 @@
> #include "hwmgr.h"
> #include "common_baco.h"
>
> -extern bool smu9_baco_is_support(struct pp_hwmgr *hwmgr);
> +extern int smu9_baco_is_support(struct pp_hwmgr *hwmgr);
> extern int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
>
> #endif
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
> index bc0ff417921b..934d530a9cce 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.c
> @@ -36,22 +36,22 @@ static const struct soc15_baco_cmd_entry clean_baco_tbl[] = {
> {CMD_WRITE, SOC15_REG_ENTRY(NBIF, 0, mmBIOS_SCRATCH_7), 0, 0, 0, 0},
> };
>
> -bool vega20_baco_is_support(struct pp_hwmgr *hwmgr)
> +int vega20_baco_is_support(struct pp_hwmgr *hwmgr)
> {
> struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
> uint32_t reg;
>
> if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
> - return false;
> + return 0;
>
> if (((RREG32(0x17569) & 0x20000000) >> 29) == 0x1) {
> reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
>
> if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK)
> - return true;
> + return BACO_SUPPORT;
> }
>
> - return false;
> + return 0;
> }
>
> int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
> index 006eb6633ce8..13eef042ec42 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_baco.h
> @@ -25,7 +25,7 @@
> #include "hwmgr.h"
> #include "common_baco.h"
>
> -extern bool vega20_baco_is_support(struct pp_hwmgr *hwmgr);
> +extern int vega20_baco_is_support(struct pp_hwmgr *hwmgr);
> extern int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
> extern int vega20_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
> extern int vega20_baco_apply_vdci_flush_workaround(struct pp_hwmgr *hwmgr);
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> index 83f903d8e994..bee0eedc2b3f 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> @@ -351,7 +351,7 @@ struct pp_hwmgr_func {
> int (*set_hard_min_fclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
> int (*set_hard_min_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
> int (*set_soft_max_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
> - bool (*baco_is_support)(struct pp_hwmgr *hwmgr);
> + int (*baco_is_support)(struct pp_hwmgr *hwmgr);
> int (*get_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
> int (*set_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
> int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf);
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index 246b211b1e85..1f0a34251b9c 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -3200,7 +3200,7 @@ static int smu_set_xgmi_pstate(void *handle,
> return ret;
> }
>
> -static bool smu_get_baco_capability(void *handle)
> +static int smu_get_baco_capability(void *handle)
> {
> struct smu_context *smu = handle;
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> index a870bdd49a4e..dad43894cab2 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/amdgpu_smu.h
> @@ -1175,7 +1175,7 @@ struct pptable_funcs {
> /**
> * @baco_is_support: Check if GPU supports BACO (Bus Active, Chip Off).
> */
> - bool (*baco_is_support)(struct smu_context *smu);
> + int (*baco_is_support)(struct smu_context *smu);
>
> /**
> * @baco_get_state: Get the current BACO state.
> 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
> index a0e5ad0381d6..7cd991069a79 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v11_0.h
> @@ -237,7 +237,7 @@ 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);
> +int smu_v11_0_baco_is_support(struct smu_context *smu);
>
> enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
>
> 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
> index fbd57fa1a004..b81aa9c521e0 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h
> @@ -210,7 +210,7 @@ int smu_v13_0_set_azalia_d3_pme(struct smu_context *smu);
> int smu_v13_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
> struct pp_smu_nv_clock_table *max_clocks);
>
> -bool smu_v13_0_baco_is_support(struct smu_context *smu);
> +int smu_v13_0_baco_is_support(struct smu_context *smu);
>
> int smu_v13_0_baco_enter(struct smu_context *smu);
> int smu_v13_0_baco_exit(struct smu_context *smu);
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
> index 3f7463c1c1a9..5e887f551b3e 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
> +++ b/drivers/gpu/drm/amd/pm/swsmu/inc/smu_v14_0.h
> @@ -159,7 +159,7 @@ int smu_v14_0_register_irq_handler(struct smu_context *smu);
> int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
> enum smu_baco_seq baco_seq);
>
> -bool smu_v14_0_baco_is_support(struct smu_context *smu);
> +int smu_v14_0_baco_is_support(struct smu_context *smu);
>
> enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu);
>
> 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
> index 5e5da9b16718..d0c6dad24458 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> @@ -1557,23 +1557,27 @@ int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu,
> return smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq, NULL);
> }
>
> -bool smu_v11_0_baco_is_support(struct smu_context *smu)
> +int smu_v11_0_baco_is_support(struct smu_context *smu)
> {
> struct smu_baco_context *smu_baco = &smu->smu_baco;
> + int bamaco_support = 0;
>
> if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support)
> - return false;
> + return 0;
> +
> + if (smu_baco->maco_support)
> + bamaco_support |= MACO_SUPPORT;
>
> /* return true if ASIC is in BACO state already */
> if (smu_v11_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
> - return true;
> + return bamaco_support |= BACO_SUPPORT;
>
> /* Arcturus does not support this bit mask */
> if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
> !smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
> - return false;
> + return 0;
>
> - return true;
> + return (bamaco_support |= BACO_SUPPORT);
If this is to report a set of flags instead of bool, better rename the
ppt function to get_bxco_support() or similar. That name aligns better
with the return value (flags representing BACO/BAMACO etc.)
Thanks,
Lijo
> }
>
> enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> index 0467864a1aa8..33da5347880a 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> @@ -1582,11 +1582,11 @@ static void aldebaran_get_unique_id(struct smu_context *smu)
> adev->unique_id = ((uint64_t)upper32 << 32) | lower32;
> }
>
> -static bool aldebaran_is_baco_supported(struct smu_context *smu)
> +static int aldebaran_is_baco_supported(struct smu_context *smu)
> {
> /* aldebaran is not support baco */
>
> - return false;
> + return 0;
> }
>
> static int aldebaran_set_df_cstate(struct smu_context *smu,
> 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
> index ce16f2a08a47..a65877eeaa8d 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> @@ -2268,22 +2268,26 @@ static int smu_v13_0_baco_set_state(struct smu_context *smu,
> return ret;
> }
>
> -bool smu_v13_0_baco_is_support(struct smu_context *smu)
> +int smu_v13_0_baco_is_support(struct smu_context *smu)
> {
> struct smu_baco_context *smu_baco = &smu->smu_baco;
> + int bamaco_support = 0;
>
> if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support)
> - return false;
> + return 0;
> +
> + if (smu_baco->maco_support)
> + bamaco_support |= MACO_SUPPORT;
>
> /* return true if ASIC is in BACO state already */
> if (smu_v13_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
> - return true;
> + return bamaco_support |= BACO_SUPPORT;
>
> if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
> !smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
> - return false;
> + return 0;
>
> - return true;
> + return (bamaco_support |= BACO_SUPPORT);
> }
>
> int smu_v13_0_baco_enter(struct smu_context *smu)
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
> index 443233563a52..02b098d81ebf 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c
> @@ -2078,11 +2078,11 @@ static void smu_v13_0_6_get_unique_id(struct smu_context *smu)
> adev->unique_id = pptable->PublicSerialNumber_AID;
> }
>
> -static bool smu_v13_0_6_is_baco_supported(struct smu_context *smu)
> +static int smu_v13_0_6_is_baco_supported(struct smu_context *smu)
> {
> /* smu_13_0_6 does not support baco */
>
> - return false;
> + return 0;
> }
>
> static const char *const throttling_logging_label[] = {
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
> index 9e39f99154f9..cc7cc2a6d871 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
> @@ -1590,23 +1590,27 @@ int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
> return 0;
> }
>
> -bool smu_v14_0_baco_is_support(struct smu_context *smu)
> +int smu_v14_0_baco_is_support(struct smu_context *smu)
> {
> struct smu_baco_context *smu_baco = &smu->smu_baco;
> + int bamaco_support = 0;
>
> if (amdgpu_sriov_vf(smu->adev) ||
> !smu_baco->platform_support)
> - return false;
> + return 0;
> +
> + if (smu_baco->maco_support)
> + bamaco_support |= MACO_SUPPORT;
>
> /* return true if ASIC is in BACO state already */
> if (smu_v14_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER)
> - return true;
> + return (bamaco_support |= BACO_SUPPORT);
>
> if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
> !smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
> - return false;
> + return 0;
>
> - return true;
> + return (bamaco_support |= BACO_SUPPORT);
> }
>
> enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking
2024-03-25 10:15 [PATCH 1/5] drm/amdgpu: Add a new runtime mode definition Ma Jun
2024-03-25 10:15 ` [PATCH 2/5] drm/amdgpu/pm: Change the member function name of pp_hwmgr_func Ma Jun
2024-03-25 10:15 ` [PATCH 3/5] drm/amdgpu/pm: Add support for MACO flag checking Ma Jun
@ 2024-03-25 10:15 ` Ma Jun
2024-03-26 9:29 ` Lazar, Lijo
2024-03-25 10:15 ` [PATCH 5/5] drm/amdgpu/pm: Check AMDGPU_RUNPM_BAMACO when setting baco state Ma Jun
3 siblings, 1 reply; 10+ messages in thread
From: Ma Jun @ 2024-03-25 10:15 UTC (permalink / raw)
To: amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang, Ma Jun
Optimize the code to add support for BAMACO mode checking
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 74 +++++++++++++++----------
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 4 +-
3 files changed, 50 insertions(+), 32 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index 80b9642f2bc4..e267ac032a1c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -2734,7 +2734,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
} else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BOCO) {
/* nothing to do */
- } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
+ } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
amdgpu_device_baco_enter(drm_dev);
}
@@ -2774,7 +2774,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
* PCI core handles it for _PR3.
*/
pci_set_master(pdev);
- } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
+ } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
amdgpu_device_baco_exit(drm_dev);
}
ret = amdgpu_device_resume(drm_dev, false);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index a66d47865e3b..81bb0a2c8227 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -133,6 +133,7 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
{
struct drm_device *dev;
+ int bamaco_support = 0;
int r, acpi_status;
dev = adev_to_drm(adev);
@@ -150,38 +151,55 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
}
adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
- if (amdgpu_device_supports_px(dev) &&
- (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
- adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
- dev_info(adev->dev, "Using ATPX for runtime pm\n");
- } else if (amdgpu_device_supports_boco(dev) &&
- (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
- adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
- dev_info(adev->dev, "Using BOCO for runtime pm\n");
- } else if (amdgpu_device_supports_baco(dev) &&
- (amdgpu_runtime_pm != 0)) {
- switch (adev->asic_type) {
- case CHIP_VEGA20:
- case CHIP_ARCTURUS:
- /* enable BACO as runpm mode if runpm=1 */
- if (amdgpu_runtime_pm > 0)
- adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
- break;
- case CHIP_VEGA10:
- /* enable BACO as runpm mode if noretry=0 */
- if (!adev->gmc.noretry)
+ if (amdgpu_runtime_pm == 2) {
+ adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
+ dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
+ } else if (amdgpu_runtime_pm == 1) {
+ adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
+ dev_info(adev->dev, "Forcing BACO for runtime pm\n");
+ } else if (amdgpu_runtime_pm != 0) {
+ if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
+ adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
+ dev_info(adev->dev, "Using ATPX for runtime pm\n");
+ } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
+ adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
+ dev_info(adev->dev, "Using BOCO for runtime pm\n");
+ } else {
+ bamaco_support = amdgpu_device_supports_baco(dev);
+
+ if (!bamaco_support)
+ goto no_runtime_pm;
+
+ switch (adev->asic_type) {
+ case CHIP_VEGA20:
+ case CHIP_ARCTURUS:
+ /* vega20 and arcturus don't support runtime pm */
+ break;
+ case CHIP_VEGA10:
+ /* enable BACO as runpm mode if noretry=0 */
+ if (!adev->gmc.noretry)
+ adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
+ break;
+ default:
+ /* enable BACO as runpm mode on CI+ */
adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
- break;
- default:
- /* enable BACO as runpm mode on CI+ */
- adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
- break;
+ break;
+ }
+ if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
+ if (bamaco_support & MACO_SUPPORT) {
+ adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
+ dev_info(adev->dev, "Using BAMACO for runtime pm\n");
+ } else {
+ dev_info(adev->dev, "Using BACO for runtime pm\n");
+ }
+ }
}
-
- if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
- dev_info(adev->dev, "Using BACO for runtime pm\n");
}
+no_runtime_pm:
+ if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
+ dev_info(adev->dev, "NO pm mode for runtime pm\n");
+
/* Call ACPI methods: require modeset init
* but failure is not fatal
*/
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
index 94b310fdb719..b4702a7961ec 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
@@ -2617,7 +2617,7 @@ static int psp_load_p2s_table(struct psp_context *psp)
struct amdgpu_firmware_info *ucode =
&adev->firmware.ucode[AMDGPU_UCODE_ID_P2S_TABLE];
- if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
+ if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
return 0;
if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6)) {
@@ -2647,7 +2647,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
* Skip SMU FW reloading in case of using BACO for runpm only,
* as SMU is always alive.
*/
- if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
+ if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
return 0;
if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking
2024-03-25 10:15 ` [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking Ma Jun
@ 2024-03-26 9:29 ` Lazar, Lijo
2024-03-26 9:34 ` Lazar, Lijo
2024-03-27 1:37 ` Ma, Jun
0 siblings, 2 replies; 10+ messages in thread
From: Lazar, Lijo @ 2024-03-26 9:29 UTC (permalink / raw)
To: Ma Jun, amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang
On 3/25/2024 3:45 PM, Ma Jun wrote:
> Optimize the code to add support for BAMACO mode checking
>
> Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 74 +++++++++++++++----------
> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 4 +-
> 3 files changed, 50 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> index 80b9642f2bc4..e267ac032a1c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
> @@ -2734,7 +2734,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
> drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
> } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BOCO) {
> /* nothing to do */
> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
This kind of checking doesn't work well if we have to add new RPM modes.
Instead use || or a wrapper.
Thanks,
Lijo
> amdgpu_device_baco_enter(drm_dev);
> }
>
> @@ -2774,7 +2774,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
> * PCI core handles it for _PR3.
> */
> pci_set_master(pdev);
> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
> amdgpu_device_baco_exit(drm_dev);
> }
> ret = amdgpu_device_resume(drm_dev, false);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> index a66d47865e3b..81bb0a2c8227 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
> @@ -133,6 +133,7 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
> int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
> {
> struct drm_device *dev;
> + int bamaco_support = 0;
> int r, acpi_status;
>
> dev = adev_to_drm(adev);
> @@ -150,38 +151,55 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
> }
>
> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
> - if (amdgpu_device_supports_px(dev) &&
> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
> - dev_info(adev->dev, "Using ATPX for runtime pm\n");
> - } else if (amdgpu_device_supports_boco(dev) &&
> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
> - dev_info(adev->dev, "Using BOCO for runtime pm\n");
> - } else if (amdgpu_device_supports_baco(dev) &&
> - (amdgpu_runtime_pm != 0)) {
> - switch (adev->asic_type) {
> - case CHIP_VEGA20:
> - case CHIP_ARCTURUS:
> - /* enable BACO as runpm mode if runpm=1 */
> - if (amdgpu_runtime_pm > 0)
> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
> - break;
> - case CHIP_VEGA10:
> - /* enable BACO as runpm mode if noretry=0 */
> - if (!adev->gmc.noretry)
> + if (amdgpu_runtime_pm == 2) {
> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
> + dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
> + } else if (amdgpu_runtime_pm == 1) {
> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
> + dev_info(adev->dev, "Forcing BACO for runtime pm\n");
> + } else if (amdgpu_runtime_pm != 0) {
> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
> + dev_info(adev->dev, "Using ATPX for runtime pm\n");
> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
> + dev_info(adev->dev, "Using BOCO for runtime pm\n");
> + } else {
> + bamaco_support = amdgpu_device_supports_baco(dev);
> +
> + if (!bamaco_support)
> + goto no_runtime_pm;
> +
> + switch (adev->asic_type) {
> + case CHIP_VEGA20:
> + case CHIP_ARCTURUS:
> + /* vega20 and arcturus don't support runtime pm */
> + break;
> + case CHIP_VEGA10:
> + /* enable BACO as runpm mode if noretry=0 */
> + if (!adev->gmc.noretry)
> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
> + break;
> + default:
> + /* enable BACO as runpm mode on CI+ */
> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
> - break;
> - default:
> - /* enable BACO as runpm mode on CI+ */
> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
> - break;
> + break;
> + }
> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
> + if (bamaco_support & MACO_SUPPORT) {
> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
> + dev_info(adev->dev, "Using BAMACO for runtime pm\n");
> + } else {
> + dev_info(adev->dev, "Using BACO for runtime pm\n");
> + }
> + }
> }
> -
> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
> - dev_info(adev->dev, "Using BACO for runtime pm\n");
> }
>
> +no_runtime_pm:
> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
> + dev_info(adev->dev, "NO pm mode for runtime pm\n");
> +
> /* Call ACPI methods: require modeset init
> * but failure is not fatal
> */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> index 94b310fdb719..b4702a7961ec 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
> @@ -2617,7 +2617,7 @@ static int psp_load_p2s_table(struct psp_context *psp)
> struct amdgpu_firmware_info *ucode =
> &adev->firmware.ucode[AMDGPU_UCODE_ID_P2S_TABLE];
>
> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
> return 0;
>
> if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6)) {
> @@ -2647,7 +2647,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
> * Skip SMU FW reloading in case of using BACO for runpm only,
> * as SMU is always alive.
> */
> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
> return 0;
>
> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking
2024-03-26 9:29 ` Lazar, Lijo
@ 2024-03-26 9:34 ` Lazar, Lijo
2024-03-27 5:27 ` Ma, Jun
2024-03-27 1:37 ` Ma, Jun
1 sibling, 1 reply; 10+ messages in thread
From: Lazar, Lijo @ 2024-03-26 9:34 UTC (permalink / raw)
To: Ma Jun, amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang
On 3/26/2024 2:59 PM, Lazar, Lijo wrote:
>
>
> On 3/25/2024 3:45 PM, Ma Jun wrote:
>> Optimize the code to add support for BAMACO mode checking
>>
>> Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 74 +++++++++++++++----------
>> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 4 +-
>> 3 files changed, 50 insertions(+), 32 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index 80b9642f2bc4..e267ac032a1c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -2734,7 +2734,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
>> drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
>> } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BOCO) {
>> /* nothing to do */
>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>
> This kind of checking doesn't work well if we have to add new RPM modes.
> Instead use || or a wrapper.
>
A few more comments below.
> Thanks,
> Lijo
>
>> amdgpu_device_baco_enter(drm_dev);
>> }
>>
>> @@ -2774,7 +2774,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
>> * PCI core handles it for _PR3.
>> */
>> pci_set_master(pdev);
>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>> amdgpu_device_baco_exit(drm_dev);
>> }
>> ret = amdgpu_device_resume(drm_dev, false);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> index a66d47865e3b..81bb0a2c8227 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> @@ -133,6 +133,7 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
>> int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>> {
>> struct drm_device *dev;
>> + int bamaco_support = 0;
>> int r, acpi_status;
>>
>> dev = adev_to_drm(adev);
>> @@ -150,38 +151,55 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>> }
>>
>> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
>> - if (amdgpu_device_supports_px(dev) &&
>> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>> - dev_info(adev->dev, "Using ATPX for runtime pm\n");
>> - } else if (amdgpu_device_supports_boco(dev) &&
>> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>> - dev_info(adev->dev, "Using BOCO for runtime pm\n");
>> - } else if (amdgpu_device_supports_baco(dev) &&
>> - (amdgpu_runtime_pm != 0)) {
>> - switch (adev->asic_type) {
>> - case CHIP_VEGA20:
>> - case CHIP_ARCTURUS:
>> - /* enable BACO as runpm mode if runpm=1 */
>> - if (amdgpu_runtime_pm > 0)
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> - case CHIP_VEGA10:
>> - /* enable BACO as runpm mode if noretry=0 */
>> - if (!adev->gmc.noretry)
>> + if (amdgpu_runtime_pm == 2) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>> + dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
>> + } else if (amdgpu_runtime_pm == 1) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> + dev_info(adev->dev, "Forcing BACO for runtime pm\n");
The above two don't work if SOC itself doesn't have the support. The
option should be considered as what to choose for runtime pm when both
BACO/BAMACO are supported rather than forcing irrespective of SOC
feature support.
If the forced mode is not supported, driver may decide to fallback to
auto mode or drop runpm altogether.
>> + } else if (amdgpu_runtime_pm != 0) {
Since it's refactored, explicitly do a check here for AUTO MODE instead
of any non-zero value.
Thanks,
Lijo
>> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>> + dev_info(adev->dev, "Using ATPX for runtime pm\n");
>> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>> + dev_info(adev->dev, "Using BOCO for runtime pm\n");
>> + } else {
>> + bamaco_support = amdgpu_device_supports_baco(dev);
>> +
>> + if (!bamaco_support)
>> + goto no_runtime_pm;
>> +
>> + switch (adev->asic_type) {
>> + case CHIP_VEGA20:
>> + case CHIP_ARCTURUS:
>> + /* vega20 and arcturus don't support runtime pm */
>> + break;
>> + case CHIP_VEGA10:
>> + /* enable BACO as runpm mode if noretry=0 */
>> + if (!adev->gmc.noretry)
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> + break;
>> + default:
>> + /* enable BACO as runpm mode on CI+ */
>> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> - default:
>> - /* enable BACO as runpm mode on CI+ */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> + break;
>> + }
>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + if (bamaco_support & MACO_SUPPORT) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>> + dev_info(adev->dev, "Using BAMACO for runtime pm\n");
>> + } else {
>> + dev_info(adev->dev, "Using BACO for runtime pm\n");
>> + }
>> + }
>> }
>> -
>> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
>> - dev_info(adev->dev, "Using BACO for runtime pm\n");
>> }
>>
>> +no_runtime_pm:
>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
>> + dev_info(adev->dev, "NO pm mode for runtime pm\n");
>> +
>> /* Call ACPI methods: require modeset init
>> * but failure is not fatal
>> */
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> index 94b310fdb719..b4702a7961ec 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> @@ -2617,7 +2617,7 @@ static int psp_load_p2s_table(struct psp_context *psp)
>> struct amdgpu_firmware_info *ucode =
>> &adev->firmware.ucode[AMDGPU_UCODE_ID_P2S_TABLE];
>>
>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>> return 0;
>>
>> if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6)) {
>> @@ -2647,7 +2647,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
>> * Skip SMU FW reloading in case of using BACO for runpm only,
>> * as SMU is always alive.
>> */
>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>> return 0;
>>
>> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking
2024-03-26 9:34 ` Lazar, Lijo
@ 2024-03-27 5:27 ` Ma, Jun
0 siblings, 0 replies; 10+ messages in thread
From: Ma, Jun @ 2024-03-27 5:27 UTC (permalink / raw)
To: Lazar, Lijo, Ma Jun, amd-gfx
Cc: majun, Kenneth.Feng, Alexander.Deucher, kevinyang.wang
On 3/26/2024 5:34 PM, Lazar, Lijo wrote:
>
>
> On 3/26/2024 2:59 PM, Lazar, Lijo wrote:
>>
>>
>> On 3/25/2024 3:45 PM, Ma Jun wrote:
>>> Optimize the code to add support for BAMACO mode checking
>>>
>>> Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 74 +++++++++++++++----------
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 4 +-
>>> 3 files changed, 50 insertions(+), 32 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> index 80b9642f2bc4..e267ac032a1c 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>>> @@ -2734,7 +2734,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
>>> drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
>>> } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BOCO) {
>>> /* nothing to do */
>>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>>
>> This kind of checking doesn't work well if we have to add new RPM modes.
>> Instead use || or a wrapper.
>>
>
> A few more comments below.
>
>> Thanks,
>> Lijo
>>
>>> amdgpu_device_baco_enter(drm_dev);
>>> }
>>>
>>> @@ -2774,7 +2774,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
>>> * PCI core handles it for _PR3.
>>> */
>>> pci_set_master(pdev);
>>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>>> amdgpu_device_baco_exit(drm_dev);
>>> }
>>> ret = amdgpu_device_resume(drm_dev, false);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> index a66d47865e3b..81bb0a2c8227 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>>> @@ -133,6 +133,7 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
>>> int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>>> {
>>> struct drm_device *dev;
>>> + int bamaco_support = 0;
>>> int r, acpi_status;
>>>
>>> dev = adev_to_drm(adev);
>>> @@ -150,38 +151,55 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>>> }
>>>
>>> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
>>> - if (amdgpu_device_supports_px(dev) &&
>>> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>>> - dev_info(adev->dev, "Using ATPX for runtime pm\n");
>>> - } else if (amdgpu_device_supports_boco(dev) &&
>>> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>>> - dev_info(adev->dev, "Using BOCO for runtime pm\n");
>>> - } else if (amdgpu_device_supports_baco(dev) &&
>>> - (amdgpu_runtime_pm != 0)) {
>>> - switch (adev->asic_type) {
>>> - case CHIP_VEGA20:
>>> - case CHIP_ARCTURUS:
>>> - /* enable BACO as runpm mode if runpm=1 */
>>> - if (amdgpu_runtime_pm > 0)
>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>> - break;
>>> - case CHIP_VEGA10:
>>> - /* enable BACO as runpm mode if noretry=0 */
>>> - if (!adev->gmc.noretry)
>>> + if (amdgpu_runtime_pm == 2) {
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>>> + dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
>>> + } else if (amdgpu_runtime_pm == 1) {
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>> + dev_info(adev->dev, "Forcing BACO for runtime pm\n");
>
> The above two don't work if SOC itself doesn't have the support. The
> option should be considered as what to choose for runtime pm when both
> BACO/BAMACO are supported rather than forcing irrespective of SOC
> feature support.
>
> If the forced mode is not supported, driver may decide to fallback to
> auto mode or drop runpm altogether.
>
>>> + } else if (amdgpu_runtime_pm != 0) {
>
> Since it's refactored, explicitly do a check here for AUTO MODE instead
> of any non-zero value.
>
Thanks. I will fix it.
Maybe I should have split this patch into two patches.
One is for BAMACO mode check, the other one is for this function refactor.
Regards,
Ma Jun
> Thanks,
> Lijo
>
>>> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>>> + dev_info(adev->dev, "Using ATPX for runtime pm\n");
>>> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>>> + dev_info(adev->dev, "Using BOCO for runtime pm\n");
>>> + } else {
>>> + bamaco_support = amdgpu_device_supports_baco(dev);
>>> +
>>> + if (!bamaco_support)
>>> + goto no_runtime_pm;
>>> +
>>> + switch (adev->asic_type) {
>>> + case CHIP_VEGA20:
>>> + case CHIP_ARCTURUS:
>>> + /* vega20 and arcturus don't support runtime pm */
>>> + break;
>>> + case CHIP_VEGA10:
>>> + /* enable BACO as runpm mode if noretry=0 */
>>> + if (!adev->gmc.noretry)
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>> + break;
>>> + default:
>>> + /* enable BACO as runpm mode on CI+ */
>>> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>> - break;
>>> - default:
>>> - /* enable BACO as runpm mode on CI+ */
>>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>>> - break;
>>> + break;
>>> + }
>>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>>> + if (bamaco_support & MACO_SUPPORT) {
>>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>>> + dev_info(adev->dev, "Using BAMACO for runtime pm\n");
>>> + } else {
>>> + dev_info(adev->dev, "Using BACO for runtime pm\n");
>>> + }
>>> + }
>>> }
>>> -
>>> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
>>> - dev_info(adev->dev, "Using BACO for runtime pm\n");
>>> }
>>>
>>> +no_runtime_pm:
>>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
>>> + dev_info(adev->dev, "NO pm mode for runtime pm\n");
>>> +
>>> /* Call ACPI methods: require modeset init
>>> * but failure is not fatal
>>> */
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> index 94b310fdb719..b4702a7961ec 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>>> @@ -2617,7 +2617,7 @@ static int psp_load_p2s_table(struct psp_context *psp)
>>> struct amdgpu_firmware_info *ucode =
>>> &adev->firmware.ucode[AMDGPU_UCODE_ID_P2S_TABLE];
>>>
>>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>>> return 0;
>>>
>>> if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6)) {
>>> @@ -2647,7 +2647,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
>>> * Skip SMU FW reloading in case of using BACO for runpm only,
>>> * as SMU is always alive.
>>> */
>>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>>> return 0;
>>>
>>> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking
2024-03-26 9:29 ` Lazar, Lijo
2024-03-26 9:34 ` Lazar, Lijo
@ 2024-03-27 1:37 ` Ma, Jun
1 sibling, 0 replies; 10+ messages in thread
From: Ma, Jun @ 2024-03-27 1:37 UTC (permalink / raw)
To: Lazar, Lijo, Ma Jun, amd-gfx
Cc: majun, Kenneth.Feng, Alexander.Deucher, kevinyang.wang
On 3/26/2024 5:29 PM, Lazar, Lijo wrote:
>
>
> On 3/25/2024 3:45 PM, Ma Jun wrote:
>> Optimize the code to add support for BAMACO mode checking
>>
>> Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
>> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 74 +++++++++++++++----------
>> drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 4 +-
>> 3 files changed, 50 insertions(+), 32 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> index 80b9642f2bc4..e267ac032a1c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
>> @@ -2734,7 +2734,7 @@ static int amdgpu_pmops_runtime_suspend(struct device *dev)
>> drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
>> } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BOCO) {
>> /* nothing to do */
>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>
> This kind of checking doesn't work well if we have to add new RPM modes.
> Instead use || or a wrapper.
Thanks, will fix in v2.
Regards,
Ma Jun
>
> Thanks,
> Lijo
>
>> amdgpu_device_baco_enter(drm_dev);
>> }
>>
>> @@ -2774,7 +2774,7 @@ static int amdgpu_pmops_runtime_resume(struct device *dev)
>> * PCI core handles it for _PR3.
>> */
>> pci_set_master(pdev);
>> - } else if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + } else if (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO) {
>> amdgpu_device_baco_exit(drm_dev);
>> }
>> ret = amdgpu_device_resume(drm_dev, false);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> index a66d47865e3b..81bb0a2c8227 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
>> @@ -133,6 +133,7 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)
>> int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>> {
>> struct drm_device *dev;
>> + int bamaco_support = 0;
>> int r, acpi_status;
>>
>> dev = adev_to_drm(adev);
>> @@ -150,38 +151,55 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)
>> }
>>
>> adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
>> - if (amdgpu_device_supports_px(dev) &&
>> - (amdgpu_runtime_pm != 0)) { /* enable PX as runtime mode */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>> - dev_info(adev->dev, "Using ATPX for runtime pm\n");
>> - } else if (amdgpu_device_supports_boco(dev) &&
>> - (amdgpu_runtime_pm != 0)) { /* enable boco as runtime mode */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>> - dev_info(adev->dev, "Using BOCO for runtime pm\n");
>> - } else if (amdgpu_device_supports_baco(dev) &&
>> - (amdgpu_runtime_pm != 0)) {
>> - switch (adev->asic_type) {
>> - case CHIP_VEGA20:
>> - case CHIP_ARCTURUS:
>> - /* enable BACO as runpm mode if runpm=1 */
>> - if (amdgpu_runtime_pm > 0)
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> - case CHIP_VEGA10:
>> - /* enable BACO as runpm mode if noretry=0 */
>> - if (!adev->gmc.noretry)
>> + if (amdgpu_runtime_pm == 2) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>> + dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
>> + } else if (amdgpu_runtime_pm == 1) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> + dev_info(adev->dev, "Forcing BACO for runtime pm\n");
>> + } else if (amdgpu_runtime_pm != 0) {
>> + if (amdgpu_device_supports_px(dev)) { /* enable PX as runtime mode */
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
>> + dev_info(adev->dev, "Using ATPX for runtime pm\n");
>> + } else if (amdgpu_device_supports_boco(dev)) { /* enable boco as runtime mode */
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
>> + dev_info(adev->dev, "Using BOCO for runtime pm\n");
>> + } else {
>> + bamaco_support = amdgpu_device_supports_baco(dev);
>> +
>> + if (!bamaco_support)
>> + goto no_runtime_pm;
>> +
>> + switch (adev->asic_type) {
>> + case CHIP_VEGA20:
>> + case CHIP_ARCTURUS:
>> + /* vega20 and arcturus don't support runtime pm */
>> + break;
>> + case CHIP_VEGA10:
>> + /* enable BACO as runpm mode if noretry=0 */
>> + if (!adev->gmc.noretry)
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> + break;
>> + default:
>> + /* enable BACO as runpm mode on CI+ */
>> adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> - default:
>> - /* enable BACO as runpm mode on CI+ */
>> - adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
>> - break;
>> + break;
>> + }
>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
>> + if (bamaco_support & MACO_SUPPORT) {
>> + adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
>> + dev_info(adev->dev, "Using BAMACO for runtime pm\n");
>> + } else {
>> + dev_info(adev->dev, "Using BACO for runtime pm\n");
>> + }
>> + }
>> }
>> -
>> - if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO)
>> - dev_info(adev->dev, "Using BACO for runtime pm\n");
>> }
>>
>> +no_runtime_pm:
>> + if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
>> + dev_info(adev->dev, "NO pm mode for runtime pm\n");
>> +
>> /* Call ACPI methods: require modeset init
>> * but failure is not fatal
>> */
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> index 94b310fdb719..b4702a7961ec 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
>> @@ -2617,7 +2617,7 @@ static int psp_load_p2s_table(struct psp_context *psp)
>> struct amdgpu_firmware_info *ucode =
>> &adev->firmware.ucode[AMDGPU_UCODE_ID_P2S_TABLE];
>>
>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>> return 0;
>>
>> if (amdgpu_ip_version(adev, MP0_HWIP, 0) == IP_VERSION(13, 0, 6)) {
>> @@ -2647,7 +2647,7 @@ static int psp_load_smu_fw(struct psp_context *psp)
>> * Skip SMU FW reloading in case of using BACO for runpm only,
>> * as SMU is always alive.
>> */
>> - if (adev->in_runpm && (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO))
>> + if (adev->in_runpm && (adev->pm.rpm_mode >= AMDGPU_RUNPM_BACO))
>> return 0;
>>
>> if (!ucode->fw || amdgpu_sriov_vf(psp->adev))
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 5/5] drm/amdgpu/pm: Check AMDGPU_RUNPM_BAMACO when setting baco state
2024-03-25 10:15 [PATCH 1/5] drm/amdgpu: Add a new runtime mode definition Ma Jun
` (2 preceding siblings ...)
2024-03-25 10:15 ` [PATCH 4/5] drm/amdgpu: Add support for BAMACO mode checking Ma Jun
@ 2024-03-25 10:15 ` Ma Jun
3 siblings, 0 replies; 10+ messages in thread
From: Ma Jun @ 2024-03-25 10:15 UTC (permalink / raw)
To: amd-gfx; +Cc: Kenneth.Feng, Alexander.Deucher, kevinyang.wang, Ma Jun
Check AMDGPU_RUNPM_BAMACO intead of amdgpu_runtime_pm
when setting baco state.
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
---
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 2 +-
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 5 ++---
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c | 2 +-
3 files changed, 4 insertions(+), 5 deletions(-)
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
index d0c6dad24458..a8046aaca936 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -1607,7 +1607,7 @@ int smu_v11_0_baco_set_state(struct smu_context *smu, enum smu_baco_state state)
case IP_VERSION(11, 0, 11):
case IP_VERSION(11, 0, 12):
case IP_VERSION(11, 0, 13):
- if (amdgpu_runtime_pm == 2)
+ if (adev->pm.rpm_mode == AMDGPU_RUNPM_BAMACO)
ret = smu_cmn_send_smc_msg_with_param(smu,
SMU_MSG_EnterBaco,
D3HOT_BAMACO_SEQUENCE,
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
index a65877eeaa8d..8247eeab3bd2 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -2247,7 +2247,7 @@ static int smu_v13_0_baco_set_state(struct smu_context *smu,
if (state == SMU_BACO_STATE_ENTER) {
ret = smu_cmn_send_smc_msg_with_param(smu,
SMU_MSG_EnterBaco,
- (smu_baco->maco_support && amdgpu_runtime_pm != 1) ?
+ (adev->pm.rpm_mode == AMDGPU_RUNPM_BAMACO) ?
BACO_SEQ_BAMACO : BACO_SEQ_BACO,
NULL);
} else {
@@ -2292,13 +2292,12 @@ int smu_v13_0_baco_is_support(struct smu_context *smu)
int smu_v13_0_baco_enter(struct smu_context *smu)
{
- struct smu_baco_context *smu_baco = &smu->smu_baco;
struct amdgpu_device *adev = smu->adev;
int ret;
if (adev->in_runpm && smu_cmn_is_audio_func_enabled(adev)) {
return smu_v13_0_baco_set_armd3_sequence(smu,
- (smu_baco->maco_support && amdgpu_runtime_pm != 1) ?
+ (adev->pm.rpm_mode == AMDGPU_RUNPM_BAMACO) ?
BACO_SEQ_BAMACO : BACO_SEQ_BACO);
} else {
ret = smu_v13_0_baco_set_state(smu, SMU_BACO_STATE_ENTER);
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
index cc7cc2a6d871..39f130035ec8 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0.c
@@ -1633,7 +1633,7 @@ int smu_v14_0_baco_set_state(struct smu_context *smu,
if (state == SMU_BACO_STATE_ENTER) {
ret = smu_cmn_send_smc_msg_with_param(smu,
SMU_MSG_EnterBaco,
- smu_baco->maco_support ?
+ (adev->pm.rpm_mode == AMDGPU_RUNPM_BAMACO) ?
BACO_SEQ_BAMACO : BACO_SEQ_BACO,
NULL);
} else {
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread