Commit b2207dc6 authored by Ma Jun's avatar Ma Jun Committed by Alex Deucher

drm/amdgpu/pm: Add support for MACO flag checking

Add support for MACO flag checking.
MACO mode only works if BACO is supported.
Signed-off-by: default avatarMa Jun <Jun.Ma2@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1b199594
...@@ -606,7 +606,7 @@ struct amdgpu_asic_funcs { ...@@ -606,7 +606,7 @@ struct amdgpu_asic_funcs {
/* PCIe replay counter */ /* PCIe replay counter */
uint64_t (*get_pcie_replay_count)(struct amdgpu_device *adev); uint64_t (*get_pcie_replay_count)(struct amdgpu_device *adev);
/* device supports BACO */ /* device supports BACO */
bool (*supports_baco)(struct amdgpu_device *adev); int (*supports_baco)(struct amdgpu_device *adev);
/* pre asic_init quirks */ /* pre asic_init quirks */
void (*pre_asic_init)(struct amdgpu_device *adev); void (*pre_asic_init)(struct amdgpu_device *adev);
/* enter/exit umd stable pstate */ /* enter/exit umd stable pstate */
...@@ -1408,7 +1408,7 @@ bool amdgpu_device_supports_atpx(struct drm_device *dev); ...@@ -1408,7 +1408,7 @@ bool amdgpu_device_supports_atpx(struct drm_device *dev);
bool amdgpu_device_supports_px(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_boco(struct drm_device *dev);
bool amdgpu_device_supports_smart_shift(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, bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
struct amdgpu_device *peer_adev); struct amdgpu_device *peer_adev);
int amdgpu_device_baco_enter(struct drm_device *dev); int amdgpu_device_baco_enter(struct drm_device *dev);
......
...@@ -338,10 +338,12 @@ bool amdgpu_device_supports_boco(struct drm_device *dev) ...@@ -338,10 +338,12 @@ bool amdgpu_device_supports_boco(struct drm_device *dev)
* *
* @dev: drm_device pointer * @dev: drm_device pointer
* *
* Returns true if the device supporte BACO, * Return:
* otherwise return false. * 1 if the device supporte BACO;
* 3 if the device support MACO (only works if BACO is supported)
* otherwise return 0.
*/ */
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); struct amdgpu_device *adev = drm_to_adev(dev);
......
...@@ -1375,14 +1375,14 @@ static int cik_asic_pci_config_reset(struct amdgpu_device *adev) ...@@ -1375,14 +1375,14 @@ static int cik_asic_pci_config_reset(struct amdgpu_device *adev)
return r; 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) { switch (adev->asic_type) {
case CHIP_BONAIRE: case CHIP_BONAIRE:
case CHIP_HAWAII: case CHIP_HAWAII:
return amdgpu_dpm_is_baco_supported(adev); return amdgpu_dpm_is_baco_supported(adev);
default: default:
return false; return 0;
} }
} }
......
...@@ -1409,9 +1409,9 @@ static int si_gpu_pci_config_reset(struct amdgpu_device *adev) ...@@ -1409,9 +1409,9 @@ static int si_gpu_pci_config_reset(struct amdgpu_device *adev)
return r; 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 static enum amd_reset_method
......
...@@ -502,7 +502,7 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev) ...@@ -502,7 +502,7 @@ static int soc15_asic_baco_reset(struct amdgpu_device *adev)
static enum amd_reset_method static enum amd_reset_method
soc15_asic_reset_method(struct amdgpu_device *adev) soc15_asic_reset_method(struct amdgpu_device *adev)
{ {
bool baco_reset = false; int baco_reset = 0;
bool connected_to_cpu = false; bool connected_to_cpu = false;
struct amdgpu_ras *ras = amdgpu_ras_get_context(adev); struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
...@@ -540,7 +540,7 @@ soc15_asic_reset_method(struct amdgpu_device *adev) ...@@ -540,7 +540,7 @@ soc15_asic_reset_method(struct amdgpu_device *adev)
*/ */
if (ras && adev->ras_enabled && if (ras && adev->ras_enabled &&
adev->pm.fw_version <= 0x283400) adev->pm.fw_version <= 0x283400)
baco_reset = false; baco_reset = 0;
} else { } else {
baco_reset = amdgpu_dpm_is_baco_supported(adev); baco_reset = amdgpu_dpm_is_baco_supported(adev);
} }
...@@ -620,7 +620,7 @@ static int soc15_asic_reset(struct amdgpu_device *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)) { switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
case IP_VERSION(9, 0, 0): case IP_VERSION(9, 0, 0):
...@@ -628,13 +628,13 @@ static bool soc15_supports_baco(struct amdgpu_device *adev) ...@@ -628,13 +628,13 @@ static bool soc15_supports_baco(struct amdgpu_device *adev)
if (adev->asic_type == CHIP_VEGA20) { if (adev->asic_type == CHIP_VEGA20) {
if (adev->psp.sos.fw_version >= 0x80067) if (adev->psp.sos.fw_version >= 0x80067)
return amdgpu_dpm_is_baco_supported(adev); return amdgpu_dpm_is_baco_supported(adev);
return false; return 0;
} else { } else {
return amdgpu_dpm_is_baco_supported(adev); return amdgpu_dpm_is_baco_supported(adev);
} }
break; break;
default: default:
return false; return 0;
} }
} }
......
...@@ -897,7 +897,7 @@ static int vi_asic_pci_config_reset(struct amdgpu_device *adev) ...@@ -897,7 +897,7 @@ static int vi_asic_pci_config_reset(struct amdgpu_device *adev)
return r; 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) { switch (adev->asic_type) {
case CHIP_FIJI: case CHIP_FIJI:
...@@ -908,14 +908,14 @@ static bool vi_asic_supports_baco(struct amdgpu_device *adev) ...@@ -908,14 +908,14 @@ static bool vi_asic_supports_baco(struct amdgpu_device *adev)
case CHIP_TOPAZ: case CHIP_TOPAZ:
return amdgpu_dpm_is_baco_supported(adev); return amdgpu_dpm_is_baco_supported(adev);
default: default:
return false; return 0;
} }
} }
static enum amd_reset_method static enum amd_reset_method
vi_asic_reset_method(struct amdgpu_device *adev) vi_asic_reset_method(struct amdgpu_device *adev)
{ {
bool baco_reset; int baco_reset;
if (amdgpu_reset_method == AMD_RESET_METHOD_LEGACY || if (amdgpu_reset_method == AMD_RESET_METHOD_LEGACY ||
amdgpu_reset_method == AMD_RESET_METHOD_BACO) amdgpu_reset_method == AMD_RESET_METHOD_BACO)
...@@ -935,7 +935,7 @@ vi_asic_reset_method(struct amdgpu_device *adev) ...@@ -935,7 +935,7 @@ vi_asic_reset_method(struct amdgpu_device *adev)
baco_reset = amdgpu_dpm_is_baco_supported(adev); baco_reset = amdgpu_dpm_is_baco_supported(adev);
break; break;
default: default:
baco_reset = false; baco_reset = 0;
break; break;
} }
......
...@@ -421,7 +421,7 @@ struct amd_pm_funcs { ...@@ -421,7 +421,7 @@ struct amd_pm_funcs {
int (*set_hard_min_dcefclk_by_freq)(void *handle, uint32_t clock); 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_hard_min_fclk_by_freq)(void *handle, uint32_t clock);
int (*set_min_deep_sleep_dcefclk)(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 (*get_asic_baco_state)(void *handle, int *state);
int (*set_asic_baco_state)(void *handle, int state); int (*set_asic_baco_state)(void *handle, int state);
int (*get_ppfeature_status)(void *handle, char *buf); int (*get_ppfeature_status)(void *handle, char *buf);
......
...@@ -199,14 +199,14 @@ int amdgpu_dpm_notify_rlc_state(struct amdgpu_device *adev, bool en) ...@@ -199,14 +199,14 @@ int amdgpu_dpm_notify_rlc_state(struct amdgpu_device *adev, bool en)
return ret; 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; const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
void *pp_handle = adev->powerplay.pp_handle; void *pp_handle = adev->powerplay.pp_handle;
bool ret; int ret;
if (!pp_funcs || !pp_funcs->get_asic_baco_capability) if (!pp_funcs || !pp_funcs->get_asic_baco_capability)
return false; return 0;
/* Don't use baco for reset in S3. /* Don't use baco for reset in S3.
* This is a workaround for some platforms * This is a workaround for some platforms
* where entering BACO during suspend * where entering BACO during suspend
...@@ -217,7 +217,7 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev) ...@@ -217,7 +217,7 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)
* devices. Needs more investigation. * devices. Needs more investigation.
*/ */
if (adev->in_s3) if (adev->in_s3)
return false; return 0;
mutex_lock(&adev->pm.mutex); mutex_lock(&adev->pm.mutex);
......
...@@ -411,7 +411,7 @@ int amdgpu_dpm_baco_reset(struct amdgpu_device *adev); ...@@ -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_mode2_reset(struct amdgpu_device *adev);
int amdgpu_dpm_enable_gfx_features(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); bool amdgpu_dpm_is_mode1_reset_supported(struct amdgpu_device *adev);
int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev); int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev);
......
...@@ -1371,7 +1371,7 @@ static int pp_set_active_display_count(void *handle, uint32_t count) ...@@ -1371,7 +1371,7 @@ static int pp_set_active_display_count(void *handle, uint32_t count)
return phm_set_active_display_count(hwmgr, 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; struct pp_hwmgr *hwmgr = handle;
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include "smu/smu_7_1_2_d.h" #include "smu/smu_7_1_2_d.h"
#include "smu/smu_7_1_2_sh_mask.h" #include "smu/smu_7_1_2_sh_mask.h"
bool smu7_get_bamaco_support(struct pp_hwmgr *hwmgr) int smu7_get_bamaco_support(struct pp_hwmgr *hwmgr)
{ {
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg; uint32_t reg;
...@@ -44,9 +44,9 @@ bool smu7_get_bamaco_support(struct pp_hwmgr *hwmgr) ...@@ -44,9 +44,9 @@ bool smu7_get_bamaco_support(struct pp_hwmgr *hwmgr)
reg = RREG32(mmCC_BIF_BX_FUSESTRAP0); reg = RREG32(mmCC_BIF_BX_FUSESTRAP0);
if (reg & CC_BIF_BX_FUSESTRAP0__STRAP_BIF_PX_CAPABLE_MASK) 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) int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "hwmgr.h" #include "hwmgr.h"
#include "common_baco.h" #include "common_baco.h"
extern bool smu7_get_bamaco_support(struct pp_hwmgr *hwmgr); extern int smu7_get_bamaco_support(struct pp_hwmgr *hwmgr);
extern int smu7_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state); 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); extern int smu7_baco_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
......
...@@ -28,13 +28,13 @@ ...@@ -28,13 +28,13 @@
#include "vega10_inc.h" #include "vega10_inc.h"
#include "smu9_baco.h" #include "smu9_baco.h"
bool smu9_get_bamaco_support(struct pp_hwmgr *hwmgr) int smu9_get_bamaco_support(struct pp_hwmgr *hwmgr)
{ {
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg, data; uint32_t reg, data;
if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO)) if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
return false; return 0;
WREG32(0x12074, 0xFFF0003B); WREG32(0x12074, 0xFFF0003B);
data = RREG32(0x12075); data = RREG32(0x12075);
...@@ -43,10 +43,10 @@ bool smu9_get_bamaco_support(struct pp_hwmgr *hwmgr) ...@@ -43,10 +43,10 @@ bool smu9_get_bamaco_support(struct pp_hwmgr *hwmgr)
reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0); reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) 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) int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "hwmgr.h" #include "hwmgr.h"
#include "common_baco.h" #include "common_baco.h"
extern bool smu9_get_bamaco_support(struct pp_hwmgr *hwmgr); extern int smu9_get_bamaco_support(struct pp_hwmgr *hwmgr);
extern int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state); extern int smu9_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state);
#endif #endif
...@@ -36,22 +36,22 @@ static const struct soc15_baco_cmd_entry clean_baco_tbl[] = { ...@@ -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}, {CMD_WRITE, SOC15_REG_ENTRY(NBIF, 0, mmBIOS_SCRATCH_7), 0, 0, 0, 0},
}; };
bool vega20_get_bamaco_support(struct pp_hwmgr *hwmgr) int vega20_get_bamaco_support(struct pp_hwmgr *hwmgr)
{ {
struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev); struct amdgpu_device *adev = (struct amdgpu_device *)(hwmgr->adev);
uint32_t reg; uint32_t reg;
if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO)) if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_BACO))
return false; return 0;
if (((RREG32(0x17569) & 0x20000000) >> 29) == 0x1) { if (((RREG32(0x17569) & 0x20000000) >> 29) == 0x1) {
reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0); reg = RREG32_SOC15(NBIF, 0, mmRCC_BIF_STRAP0);
if (reg & RCC_BIF_STRAP0__STRAP_PX_CAPABLE_MASK) 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) int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state)
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "hwmgr.h" #include "hwmgr.h"
#include "common_baco.h" #include "common_baco.h"
extern bool vega20_get_bamaco_support(struct pp_hwmgr *hwmgr); extern int vega20_get_bamaco_support(struct pp_hwmgr *hwmgr);
extern int vega20_baco_get_state(struct pp_hwmgr *hwmgr, enum BACO_STATE *state); 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_set_state(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
extern int vega20_baco_apply_vdci_flush_workaround(struct pp_hwmgr *hwmgr); extern int vega20_baco_apply_vdci_flush_workaround(struct pp_hwmgr *hwmgr);
......
...@@ -351,7 +351,7 @@ struct pp_hwmgr_func { ...@@ -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_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_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); int (*set_soft_max_gfxclk_by_freq)(struct pp_hwmgr *hwmgr, uint32_t clock);
bool (*get_bamaco_support)(struct pp_hwmgr *hwmgr); int (*get_bamaco_support)(struct pp_hwmgr *hwmgr);
int (*get_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE *state); 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 (*set_asic_baco_state)(struct pp_hwmgr *hwmgr, enum BACO_STATE state);
int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf); int (*get_ppfeature_status)(struct pp_hwmgr *hwmgr, char *buf);
......
...@@ -737,6 +737,7 @@ static int smu_early_init(void *handle) ...@@ -737,6 +737,7 @@ static int smu_early_init(void *handle)
smu->is_apu = false; smu->is_apu = false;
smu->smu_baco.state = SMU_BACO_STATE_NONE; smu->smu_baco.state = SMU_BACO_STATE_NONE;
smu->smu_baco.platform_support = false; smu->smu_baco.platform_support = false;
smu->smu_baco.maco_support = false;
smu->user_dpm_profile.fan_mode = -1; smu->user_dpm_profile.fan_mode = -1;
mutex_init(&smu->message_lock); mutex_init(&smu->message_lock);
...@@ -3223,7 +3224,7 @@ static int smu_set_xgmi_pstate(void *handle, ...@@ -3223,7 +3224,7 @@ static int smu_set_xgmi_pstate(void *handle,
return ret; return ret;
} }
static bool smu_get_baco_capability(void *handle) static int smu_get_baco_capability(void *handle)
{ {
struct smu_context *smu = handle; struct smu_context *smu = handle;
......
...@@ -1178,7 +1178,7 @@ struct pptable_funcs { ...@@ -1178,7 +1178,7 @@ struct pptable_funcs {
* BACO: Bus Active, Chip Off * BACO: Bus Active, Chip Off
* MACO: Memory Active, Chip Off * MACO: Memory Active, Chip Off
*/ */
bool (*get_bamaco_support)(struct smu_context *smu); int (*get_bamaco_support)(struct smu_context *smu);
/** /**
* @baco_get_state: Get the current BACO state. * @baco_get_state: Get the current BACO state.
......
...@@ -237,7 +237,7 @@ int smu_v11_0_set_azalia_d3_pme(struct smu_context *smu); ...@@ -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, int smu_v11_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
struct pp_smu_nv_clock_table *max_clocks); struct pp_smu_nv_clock_table *max_clocks);
bool smu_v11_0_get_bamaco_support(struct smu_context *smu); int smu_v11_0_get_bamaco_support(struct smu_context *smu);
enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu); enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu);
......
...@@ -210,7 +210,7 @@ int smu_v13_0_set_azalia_d3_pme(struct smu_context *smu); ...@@ -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, int smu_v13_0_get_max_sustainable_clocks_by_dc(struct smu_context *smu,
struct pp_smu_nv_clock_table *max_clocks); struct pp_smu_nv_clock_table *max_clocks);
bool smu_v13_0_get_bamaco_support(struct smu_context *smu); int smu_v13_0_get_bamaco_support(struct smu_context *smu);
int smu_v13_0_baco_enter(struct smu_context *smu); int smu_v13_0_baco_enter(struct smu_context *smu);
int smu_v13_0_baco_exit(struct smu_context *smu); int smu_v13_0_baco_exit(struct smu_context *smu);
......
...@@ -160,7 +160,7 @@ int smu_v14_0_register_irq_handler(struct smu_context *smu); ...@@ -160,7 +160,7 @@ int smu_v14_0_register_irq_handler(struct smu_context *smu);
int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu, int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
enum smu_baco_seq baco_seq); enum smu_baco_seq baco_seq);
bool smu_v14_0_get_bamaco_support(struct smu_context *smu); int smu_v14_0_get_bamaco_support(struct smu_context *smu);
enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu); enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu);
......
...@@ -1557,23 +1557,27 @@ int smu_v11_0_baco_set_armd3_sequence(struct smu_context *smu, ...@@ -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); return smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_ArmD3, baco_seq, NULL);
} }
bool smu_v11_0_get_bamaco_support(struct smu_context *smu) int smu_v11_0_get_bamaco_support(struct smu_context *smu)
{ {
struct smu_baco_context *smu_baco = &smu->smu_baco; struct smu_baco_context *smu_baco = &smu->smu_baco;
int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support) 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 */ /* return true if ASIC is in BACO state already */
if (smu_v11_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER) 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 */ /* Arcturus does not support this bit mask */
if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) && if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(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) enum smu_baco_state smu_v11_0_baco_get_state(struct smu_context *smu)
......
...@@ -1581,11 +1581,11 @@ static void aldebaran_get_unique_id(struct smu_context *smu) ...@@ -1581,11 +1581,11 @@ static void aldebaran_get_unique_id(struct smu_context *smu)
adev->unique_id = ((uint64_t)upper32 << 32) | lower32; adev->unique_id = ((uint64_t)upper32 << 32) | lower32;
} }
static bool aldebaran_get_bamaco_support(struct smu_context *smu) static int aldebaran_get_bamaco_support(struct smu_context *smu)
{ {
/* aldebaran is not support baco */ /* aldebaran is not support baco */
return false; return 0;
} }
static int aldebaran_set_df_cstate(struct smu_context *smu, static int aldebaran_set_df_cstate(struct smu_context *smu,
......
...@@ -2268,22 +2268,26 @@ static int smu_v13_0_baco_set_state(struct smu_context *smu, ...@@ -2268,22 +2268,26 @@ static int smu_v13_0_baco_set_state(struct smu_context *smu,
return ret; return ret;
} }
bool smu_v13_0_get_bamaco_support(struct smu_context *smu) int smu_v13_0_get_bamaco_support(struct smu_context *smu)
{ {
struct smu_baco_context *smu_baco = &smu->smu_baco; struct smu_baco_context *smu_baco = &smu->smu_baco;
int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) || !smu_baco->platform_support) 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 */ /* return true if ASIC is in BACO state already */
if (smu_v13_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER) 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) && if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(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) int smu_v13_0_baco_enter(struct smu_context *smu)
......
...@@ -2077,11 +2077,11 @@ static void smu_v13_0_6_get_unique_id(struct smu_context *smu) ...@@ -2077,11 +2077,11 @@ static void smu_v13_0_6_get_unique_id(struct smu_context *smu)
adev->unique_id = pptable->PublicSerialNumber_AID; adev->unique_id = pptable->PublicSerialNumber_AID;
} }
static bool smu_v13_0_6_get_bamaco_support(struct smu_context *smu) static int smu_v13_0_6_get_bamaco_support(struct smu_context *smu)
{ {
/* smu_13_0_6 does not support baco */ /* smu_13_0_6 does not support baco */
return false; return 0;
} }
static const char *const throttling_logging_label[] = { static const char *const throttling_logging_label[] = {
......
...@@ -1590,23 +1590,27 @@ int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu, ...@@ -1590,23 +1590,27 @@ int smu_v14_0_baco_set_armd3_sequence(struct smu_context *smu,
return 0; return 0;
} }
bool smu_v14_0_get_bamaco_support(struct smu_context *smu) int smu_v14_0_get_bamaco_support(struct smu_context *smu)
{ {
struct smu_baco_context *smu_baco = &smu->smu_baco; struct smu_baco_context *smu_baco = &smu->smu_baco;
int bamaco_support = 0;
if (amdgpu_sriov_vf(smu->adev) || if (amdgpu_sriov_vf(smu->adev) ||
!smu_baco->platform_support) !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 */ /* return true if ASIC is in BACO state already */
if (smu_v14_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER) 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) && if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) &&
!smu_cmn_feature_is_enabled(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) enum smu_baco_state smu_v14_0_baco_get_state(struct smu_context *smu)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment