drm/amd/powerplay: add callbacks to move smc firmware request into sw_init phase
authorHuang Rui <ray.huang@amd.com>
Wed, 14 Dec 2016 08:26:54 +0000 (16:26 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 27 Jan 2017 16:12:36 +0000 (11:12 -0500)
Signed-off-by: Huang Rui <ray.huang@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/powerplay/amd_powerplay.c
drivers/gpu/drm/amd/powerplay/inc/hwmgr.h

index c81cf14127289b7746e987f580cb132188d86e4e..cc7219084fadc20ffa8366eba10d465226326f3b 100644 (file)
@@ -76,9 +76,18 @@ static int pp_sw_init(void *handle)
        if (ret)
                goto err1;
 
+       if (hwmgr->hwmgr_func->request_firmware) {
+               ret = hwmgr->hwmgr_func->request_firmware(hwmgr);
+               if (ret)
+                       goto err2;
+       }
+
        pr_info("amdgpu: powerplay initialized\n");
 
        return 0;
+err2:
+       if (hwmgr->hwmgr_func->backend_fini)
+               hwmgr->hwmgr_func->backend_fini(hwmgr);
 err1:
        if (hwmgr->pptable_func->pptable_fini)
                hwmgr->pptable_func->pptable_fini(hwmgr);
@@ -101,6 +110,9 @@ static int pp_sw_fini(void *handle)
 
        PP_CHECK_HW(hwmgr);
 
+       if (hwmgr->hwmgr_func->release_firmware)
+                ret = hwmgr->hwmgr_func->release_firmware(hwmgr);
+
        if (hwmgr->hwmgr_func->backend_fini != NULL)
                ret = hwmgr->hwmgr_func->backend_fini(hwmgr);
 
index 6cdb7cbf515e261654f89913ef5a8a58ffab3ef3..3b7450ee7163a748e4dd9b42e9202bfa2d630a9b 100644 (file)
@@ -358,6 +358,8 @@ struct pp_hwmgr_func {
        int (*get_mclk_od)(struct pp_hwmgr *hwmgr);
        int (*set_mclk_od)(struct pp_hwmgr *hwmgr, uint32_t value);
        int (*read_sensor)(struct pp_hwmgr *hwmgr, int idx, int32_t *value);
+       int (*request_firmware)(struct pp_hwmgr *hwmgr);
+       int (*release_firmware)(struct pp_hwmgr *hwmgr);
 };
 
 struct pp_table_func {