drm/amdgpu/powerplay: Add special avfs cases for some polaris asics (v3)
Add special avfs handling for some polaris variants. v2: fix copy paste typo. v3: fix asic rid check Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -1639,6 +1639,7 @@ static int polaris10_populate_avfs_parameters(struct pp_hwmgr *hwmgr)
|
|||||||
{
|
{
|
||||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||||
struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smu_backend);
|
struct polaris10_smumgr *smu_data = (struct polaris10_smumgr *)(hwmgr->smu_backend);
|
||||||
|
struct amdgpu_device *adev = hwmgr->adev;
|
||||||
|
|
||||||
SMU74_Discrete_DpmTable *table = &(smu_data->smc_state_table);
|
SMU74_Discrete_DpmTable *table = &(smu_data->smc_state_table);
|
||||||
int result = 0;
|
int result = 0;
|
||||||
@@ -1658,6 +1659,59 @@ static int polaris10_populate_avfs_parameters(struct pp_hwmgr *hwmgr)
|
|||||||
|
|
||||||
result = atomctrl_get_avfs_information(hwmgr, &avfs_params);
|
result = atomctrl_get_avfs_information(hwmgr, &avfs_params);
|
||||||
|
|
||||||
|
if (0 == result) {
|
||||||
|
if (((adev->pdev->device == 0x67ef) &&
|
||||||
|
((adev->pdev->revision == 0xe0) ||
|
||||||
|
(adev->pdev->revision == 0xe5))) ||
|
||||||
|
((adev->pdev->device == 0x67ff) &&
|
||||||
|
((adev->pdev->revision == 0xcf) ||
|
||||||
|
(adev->pdev->revision == 0xef) ||
|
||||||
|
(adev->pdev->revision == 0xff)))) {
|
||||||
|
avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage = 1;
|
||||||
|
if ((adev->pdev->device == 0x67ef && adev->pdev->revision == 0xe5) ||
|
||||||
|
(adev->pdev->device == 0x67ff && adev->pdev->revision == 0xef)) {
|
||||||
|
if ((avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0 == 0xEA522DD3) &&
|
||||||
|
(avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1 == 0x5645A) &&
|
||||||
|
(avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2 == 0x33F9E) &&
|
||||||
|
(avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 == 0xFFFFC5CC) &&
|
||||||
|
(avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 == 0x1B1A) &&
|
||||||
|
(avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b == 0xFFFFFCED)) {
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0 = 0xF718F1D4;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1 = 0x323FD;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2 = 0x1E455;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 = 0;
|
||||||
|
avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 = 0;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b = 0x23;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (hwmgr->chip_id == CHIP_POLARIS12 && !hwmgr->is_kicker) {
|
||||||
|
avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage = 1;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0 = 0xF6B024DD;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1 = 0x3005E;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2 = 0x18A5F;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 = 0x315;
|
||||||
|
avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 = 0xFED1;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b = 0x3B;
|
||||||
|
} else if (((adev->pdev->device == 0x67df) &&
|
||||||
|
((adev->pdev->revision == 0xe0) ||
|
||||||
|
(adev->pdev->revision == 0xe3) ||
|
||||||
|
(adev->pdev->revision == 0xe4) ||
|
||||||
|
(adev->pdev->revision == 0xe5) ||
|
||||||
|
(adev->pdev->revision == 0xe7) ||
|
||||||
|
(adev->pdev->revision == 0xef))) ||
|
||||||
|
((adev->pdev->device == 0x6fdf) &&
|
||||||
|
((adev->pdev->revision == 0xef) ||
|
||||||
|
(adev->pdev->revision == 0xff)))) {
|
||||||
|
avfs_params.ucEnableApplyAVFS_CKS_OFF_Voltage = 1;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a0 = 0xF843B66B;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a1 = 0x59CB5;
|
||||||
|
avfs_params.ulGB_VDROOP_TABLE_CKSOFF_a2 = 0xFFFF287F;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_m1 = 0;
|
||||||
|
avfs_params.usAVFSGB_FUSE_TABLE_CKSOFF_m2 = 0xFF23;
|
||||||
|
avfs_params.ulAVFSGB_FUSE_TABLE_CKSOFF_b = 0x58;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (0 == result) {
|
if (0 == result) {
|
||||||
table->BTCGB_VDROOP_TABLE[0].a0 = PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a0);
|
table->BTCGB_VDROOP_TABLE[0].a0 = PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a0);
|
||||||
table->BTCGB_VDROOP_TABLE[0].a1 = PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a1);
|
table->BTCGB_VDROOP_TABLE[0].a1 = PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a1);
|
||||||
|
Reference in New Issue
Block a user