* [PATCH 1/5] drm/amdgpu: Add a new runtime mode definition
@ 2024-03-25 10:15 Ma Jun
2024-03-25 10:15 ` [PATCH 2/5] drm/amdgpu/pm: Change the member function name of pp_hwmgr_func Ma Jun
` (3 more replies)
0 siblings, 4 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
Add a new runtime pm mode AMDGPU_RUNPM_BAMACO
and related macro definition
Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
---
drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
index 621200e0823f..e6cad9f7aaeb 100644
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
@@ -50,8 +50,12 @@ enum amdgpu_runpm_mode {
AMDGPU_RUNPM_PX,
AMDGPU_RUNPM_BOCO,
AMDGPU_RUNPM_BACO,
+ AMDGPU_RUNPM_BAMACO,
};
+#define BACO_SUPPORT (1<<0)
+#define MACO_SUPPORT (1<<1)
+
struct amdgpu_ps {
u32 caps; /* vbios flags */
u32 class; /* vbios flags */
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [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
* [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
* [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
* 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
* 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: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
* 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
end of thread, other threads:[~2024-03-27 5:28 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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-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-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
2024-03-25 10:15 ` [PATCH 5/5] drm/amdgpu/pm: Check AMDGPU_RUNPM_BAMACO when setting baco state Ma Jun
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.