diff options
author | Huang Rui <ray.huang@amd.com> | 2016-09-11 22:16:21 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-14 15:10:25 -0400 |
commit | fd5065584d5f3532d9ffb6e3832e8064f9242c7e (patch) | |
tree | 58b69322188ee6a473ad5c8378c5874b76196968 /drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | |
parent | f166d9f297684faa153dabc2b8887f61bbe7858c (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.c | 25 |
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 | ||
288 | failed_kmap: | ||
289 | amdgpu_bo_unpin(*bo); | ||
290 | failed_pin: | ||
291 | amdgpu_bo_unreserve(*bo); | ||
292 | failed_reserve: | ||
293 | amdgpu_bo_unref(bo); | ||
294 | failed: | 294 | failed: |
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 | } |