drm/amd/powerplay: keep soft_pp_table pointer value for re-uploading
authorEric Huang <JinHuiEric.Huang@amd.com>
Tue, 31 May 2016 21:02:43 +0000 (17:02 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 7 Jul 2016 18:51:34 +0000 (14:51 -0400)
Necessary for updating pptables at runtime.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/hwmgr/processpptables.c
drivers/gpu/drm/amd/powerplay/hwmgr/tonga_processpptables.c

index 2f1a14fe05b1d9f3ebe6fd950f45888f49b95ec0..696012c78e3ef324c5e34436c1db3eff8c1a9e00 100644 (file)
@@ -794,15 +794,18 @@ static const ATOM_PPLIB_STATE_V2 *get_state_entry_v2(
 static const ATOM_PPLIB_POWERPLAYTABLE *get_powerplay_table(
                                     struct pp_hwmgr *hwmgr)
 {
-       const void *table_addr = NULL;
+       const void *table_addr = hwmgr->soft_pp_table;
        uint8_t frev, crev;
        uint16_t size;
 
-       table_addr = cgs_atom_get_data_table(hwmgr->device,
-                       GetIndexIntoMasterTable(DATA, PowerPlayInfo),
-                       &size, &frev, &crev);
+       if (!table_addr) {
+               table_addr = cgs_atom_get_data_table(hwmgr->device,
+                               GetIndexIntoMasterTable(DATA, PowerPlayInfo),
+                               &size, &frev, &crev);
 
-       hwmgr->soft_pp_table = table_addr;
+               hwmgr->soft_pp_table = table_addr;
+               hwmgr->soft_pp_table_size = size;
+       }
 
        return (const ATOM_PPLIB_POWERPLAYTABLE *)table_addr;
 }
@@ -1589,11 +1592,6 @@ static int pp_tables_initialize(struct pp_hwmgr *hwmgr)
 
 static int pp_tables_uninitialize(struct pp_hwmgr *hwmgr)
 {
-       if (NULL != hwmgr->soft_pp_table) {
-               kfree(hwmgr->soft_pp_table);
-               hwmgr->soft_pp_table = NULL;
-       }
-
        if (NULL != hwmgr->dyn_state.vddc_dependency_on_sclk) {
                kfree(hwmgr->dyn_state.vddc_dependency_on_sclk);
                hwmgr->dyn_state.vddc_dependency_on_sclk = NULL;
index 671fdb4d615a4812d624c30daa20e8192e159346..94d6b472e1fe40bb0ca5718704c03cbfec93458d 100644 (file)
@@ -1077,9 +1077,6 @@ int tonga_pp_tables_uninitialize(struct pp_hwmgr *hwmgr)
        struct phm_ppt_v1_information *pp_table_information =
                (struct phm_ppt_v1_information *)(hwmgr->pptable);
 
-       if (NULL != hwmgr->soft_pp_table)
-               hwmgr->soft_pp_table = NULL;
-
        kfree(pp_table_information->vdd_dep_on_sclk);
        pp_table_information->vdd_dep_on_sclk = NULL;