diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 45 | 
1 files changed, 10 insertions, 35 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c index 65649026b836..474f88fbafce 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c @@ -359,7 +359,6 @@ static int amdgpu_ucode_patch_jt(struct amdgpu_firmware_info *ucode,  int amdgpu_ucode_init_bo(struct amdgpu_device *adev)  { -	struct amdgpu_bo **bo = &adev->firmware.fw_buf;  	uint64_t fw_offset = 0;  	int i, err;  	struct amdgpu_firmware_info *ucode = NULL; @@ -370,36 +369,16 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)  		return 0;  	} -	if (!amdgpu_sriov_vf(adev) || !adev->in_sriov_reset) { -		err = amdgpu_bo_create(adev, adev->firmware.fw_size, PAGE_SIZE, true, +	if (!adev->in_gpu_reset) { +		err = amdgpu_bo_create_kernel(adev, adev->firmware.fw_size, PAGE_SIZE,  					amdgpu_sriov_vf(adev) ? AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT, -					AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS, -					NULL, NULL, 0, bo); +					&adev->firmware.fw_buf, +					&adev->firmware.fw_buf_mc, +					&adev->firmware.fw_buf_ptr);  		if (err) { -			dev_err(adev->dev, "(%d) Firmware buffer allocate failed\n", err); +			dev_err(adev->dev, "failed to create kernel buffer for firmware.fw_buf\n");  			goto failed;  		} - -		err = amdgpu_bo_reserve(*bo, false); -		if (err) { -			dev_err(adev->dev, "(%d) Firmware buffer reserve failed\n", err); -			goto failed_reserve; -		} - -		err = amdgpu_bo_pin(*bo, amdgpu_sriov_vf(adev) ? AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT, -					&adev->firmware.fw_buf_mc); -		if (err) { -			dev_err(adev->dev, "(%d) Firmware buffer pin failed\n", err); -			goto failed_pin; -		} - -		err = amdgpu_bo_kmap(*bo, &adev->firmware.fw_buf_ptr); -		if (err) { -			dev_err(adev->dev, "(%d) Firmware buffer kmap failed\n", err); -			goto failed_kmap; -		} - -		amdgpu_bo_unreserve(*bo);  	}  	memset(adev->firmware.fw_buf_ptr, 0, adev->firmware.fw_size); @@ -436,12 +415,6 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)  	}  	return 0; -failed_kmap: -	amdgpu_bo_unpin(*bo); -failed_pin: -	amdgpu_bo_unreserve(*bo); -failed_reserve: -	amdgpu_bo_unref(bo);  failed:  	if (err)  		adev->firmware.load_type = AMDGPU_FW_LOAD_DIRECT; @@ -464,8 +437,10 @@ int amdgpu_ucode_fini_bo(struct amdgpu_device *adev)  			ucode->kaddr = NULL;  		}  	} -	amdgpu_bo_unref(&adev->firmware.fw_buf); -	adev->firmware.fw_buf = NULL; + +	amdgpu_bo_free_kernel(&adev->firmware.fw_buf, +				&adev->firmware.fw_buf_mc, +				&adev->firmware.fw_buf_ptr);  	return 0;  } |