diff options
author | Huang Rui <ray.huang@amd.com> | 2016-12-14 03:26:54 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-01-27 11:12:36 -0500 |
commit | 167112bff8a753f0b1e5f649a3dfb48246bc6afe (patch) | |
tree | ec3402d1598a69507fbef94444065e4a0edff92d /drivers/gpu | |
parent | a5b2b6ebf34b20e70a2bdb5214c371744e7fa260 (diff) |
drm/amd/powerplay: add callbacks to move smc firmware request into sw_init phase
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>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 2 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c index c81cf1412728..cc7219084fad 100644 --- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c +++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c | |||
@@ -76,9 +76,18 @@ static int pp_sw_init(void *handle) | |||
76 | if (ret) | 76 | if (ret) |
77 | goto err1; | 77 | goto err1; |
78 | 78 | ||
79 | if (hwmgr->hwmgr_func->request_firmware) { | ||
80 | ret = hwmgr->hwmgr_func->request_firmware(hwmgr); | ||
81 | if (ret) | ||
82 | goto err2; | ||
83 | } | ||
84 | |||
79 | pr_info("amdgpu: powerplay initialized\n"); | 85 | pr_info("amdgpu: powerplay initialized\n"); |
80 | 86 | ||
81 | return 0; | 87 | return 0; |
88 | err2: | ||
89 | if (hwmgr->hwmgr_func->backend_fini) | ||
90 | hwmgr->hwmgr_func->backend_fini(hwmgr); | ||
82 | err1: | 91 | err1: |
83 | if (hwmgr->pptable_func->pptable_fini) | 92 | if (hwmgr->pptable_func->pptable_fini) |
84 | hwmgr->pptable_func->pptable_fini(hwmgr); | 93 | hwmgr->pptable_func->pptable_fini(hwmgr); |
@@ -101,6 +110,9 @@ static int pp_sw_fini(void *handle) | |||
101 | 110 | ||
102 | PP_CHECK_HW(hwmgr); | 111 | PP_CHECK_HW(hwmgr); |
103 | 112 | ||
113 | if (hwmgr->hwmgr_func->release_firmware) | ||
114 | ret = hwmgr->hwmgr_func->release_firmware(hwmgr); | ||
115 | |||
104 | if (hwmgr->hwmgr_func->backend_fini != NULL) | 116 | if (hwmgr->hwmgr_func->backend_fini != NULL) |
105 | ret = hwmgr->hwmgr_func->backend_fini(hwmgr); | 117 | ret = hwmgr->hwmgr_func->backend_fini(hwmgr); |
106 | 118 | ||
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h index 6cdb7cbf515e..3b7450ee7163 100644 --- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h +++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | |||
@@ -358,6 +358,8 @@ struct pp_hwmgr_func { | |||
358 | int (*get_mclk_od)(struct pp_hwmgr *hwmgr); | 358 | int (*get_mclk_od)(struct pp_hwmgr *hwmgr); |
359 | int (*set_mclk_od)(struct pp_hwmgr *hwmgr, uint32_t value); | 359 | int (*set_mclk_od)(struct pp_hwmgr *hwmgr, uint32_t value); |
360 | int (*read_sensor)(struct pp_hwmgr *hwmgr, int idx, int32_t *value); | 360 | int (*read_sensor)(struct pp_hwmgr *hwmgr, int idx, int32_t *value); |
361 | int (*request_firmware)(struct pp_hwmgr *hwmgr); | ||
362 | int (*release_firmware)(struct pp_hwmgr *hwmgr); | ||
361 | }; | 363 | }; |
362 | 364 | ||
363 | struct pp_table_func { | 365 | struct pp_table_func { |