aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
diff options
context:
space:
mode:
authorHuang Rui <ray.huang@amd.com>2016-09-11 22:16:21 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-09-14 15:10:25 -0400
commitfd5065584d5f3532d9ffb6e3832e8064f9242c7e (patch)
tree58b69322188ee6a473ad5c8378c5874b76196968 /drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
parentf166d9f297684faa153dabc2b8887f61bbe7858c (diff)
drm/amdgpu: move some release handles into fail labels (v2)
Clean up the codes to move the release handles into fail labels. v2: squash in Christian's regression fix Signed-off-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
index 5cc95f1a7dab..7a05f79818f1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
@@ -247,35 +247,28 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
247 const struct common_firmware_header *header = NULL; 247 const struct common_firmware_header *header = NULL;
248 248
249 err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true, 249 err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true,
250 AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL, bo); 250 AMDGPU_GEM_DOMAIN_GTT, 0, NULL, NULL, bo);
251 if (err) { 251 if (err) {
252 dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err); 252 dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err);
253 err = -ENOMEM;
254 goto failed; 253 goto failed;
255 } 254 }
256 255
257 err = amdgpu_bo_reserve(*bo, false); 256 err = amdgpu_bo_reserve(*bo, false);
258 if (err) { 257 if (err) {
259 amdgpu_bo_unref(bo);
260 dev_err(adev->dev, "(%d) Firmware buffer reserve failed\n", err); 258 dev_err(adev->dev, "(%d) Firmware buffer reserve failed\n", err);
261 goto failed; 259 goto failed_reserve;
262 } 260 }
263 261
264 err = amdgpu_bo_pin(*bo, AMDGPU_GEM_DOMAIN_GTT, &fw_mc_addr); 262 err = amdgpu_bo_pin(*bo, AMDGPU_GEM_DOMAIN_GTT, &fw_mc_addr);
265 if (err) { 263 if (err) {
266 amdgpu_bo_unreserve(*bo);
267 amdgpu_bo_unref(bo);
268 dev_err(adev->dev, "(%d) Firmware buffer pin failed\n", err); 264 dev_err(adev->dev, "(%d) Firmware buffer pin failed\n", err);
269 goto failed; 265 goto failed_pin;
270 } 266 }
271 267
272 err = amdgpu_bo_kmap(*bo, &fw_buf_ptr); 268 err = amdgpu_bo_kmap(*bo, &fw_buf_ptr);
273 if (err) { 269 if (err) {
274 dev_err(adev->dev, "(%d) Firmware buffer kmap failed\n", err); 270 dev_err(adev->dev, "(%d) Firmware buffer kmap failed\n", err);
275 amdgpu_bo_unpin(*bo); 271 goto failed_kmap;
276 amdgpu_bo_unreserve(*bo);
277 amdgpu_bo_unref(bo);
278 goto failed;
279 } 272 }
280 273
281 amdgpu_bo_unreserve(*bo); 274 amdgpu_bo_unreserve(*bo);
@@ -290,10 +283,16 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
290 fw_offset += ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); 283 fw_offset += ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE);
291 } 284 }
292 } 285 }
286 return 0;
293 287
288failed_kmap:
289 amdgpu_bo_unpin(*bo);
290failed_pin:
291 amdgpu_bo_unreserve(*bo);
292failed_reserve:
293 amdgpu_bo_unref(bo);
294failed: 294failed:
295 if (err) 295 adev->firmware.smu_load = false;
296 adev->firmware.smu_load = false;
297 296
298 return err; 297 return err;
299} 298}