Add special avfs handling for some polaris variants.

v2: fix copy paste typo.
v3: fix asic rid check

Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
---
 .../drm/amd/powerplay/smumgr/polaris10_smumgr.c    | 54 ++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c 
b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
index 94898b2da282..b41281667884 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
@@ -1639,6 +1639,7 @@ static int polaris10_populate_avfs_parameters(struct 
pp_hwmgr *hwmgr)
 {
        struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->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);
        int result = 0;
@@ -1659,6 +1660,59 @@ static int polaris10_populate_avfs_parameters(struct 
pp_hwmgr *hwmgr)
        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) {
                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].a2  = 
PP_HOST_TO_SMC_UL(avfs_params.ulGB_VDROOP_TABLE_CKSON_a2);
-- 
2.13.6

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to