diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 36 | 
1 files changed, 24 insertions, 12 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index 3fc49823f527..f8e574cc0e22 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -622,19 +622,37 @@ void amdgpu_virt_fini_data_exchange(struct amdgpu_device *adev)  void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)  { -	uint64_t bp_block_offset = 0; -	uint32_t bp_block_size = 0; -	struct amd_sriov_msg_pf2vf_info *pf2vf_v2 = NULL; -  	adev->virt.fw_reserve.p_pf2vf = NULL;  	adev->virt.fw_reserve.p_vf2pf = NULL;  	adev->virt.vf2pf_update_interval_ms = 0; -	if (adev->mman.fw_vram_usage_va != NULL) { +	if (adev->bios != NULL) {  		adev->virt.vf2pf_update_interval_ms = 2000;  		adev->virt.fw_reserve.p_pf2vf =  			(struct amd_sriov_msg_pf2vf_info_header *) +			(adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10)); + +		amdgpu_virt_read_pf2vf_data(adev); +	} + +	if (adev->virt.vf2pf_update_interval_ms != 0) { +		INIT_DELAYED_WORK(&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item); +		schedule_delayed_work(&(adev->virt.vf2pf_work), msecs_to_jiffies(adev->virt.vf2pf_update_interval_ms)); +	} +} + + +void amdgpu_virt_exchange_data(struct amdgpu_device *adev) +{ +	uint64_t bp_block_offset = 0; +	uint32_t bp_block_size = 0; +	struct amd_sriov_msg_pf2vf_info *pf2vf_v2 = NULL; + +	if (adev->mman.fw_vram_usage_va != NULL) { + +		adev->virt.fw_reserve.p_pf2vf = +			(struct amd_sriov_msg_pf2vf_info_header *)  			(adev->mman.fw_vram_usage_va + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));  		adev->virt.fw_reserve.p_vf2pf =  			(struct amd_sriov_msg_vf2pf_info_header *) @@ -663,16 +681,10 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)  			(adev->bios + (AMD_SRIOV_MSG_PF2VF_OFFSET_KB << 10));  		amdgpu_virt_read_pf2vf_data(adev); - -		return; -	} - -	if (adev->virt.vf2pf_update_interval_ms != 0) { -		INIT_DELAYED_WORK(&adev->virt.vf2pf_work, amdgpu_virt_update_vf2pf_work_item); -		schedule_delayed_work(&(adev->virt.vf2pf_work), adev->virt.vf2pf_update_interval_ms);  	}  } +  void amdgpu_detect_virtualization(struct amdgpu_device *adev)  {  	uint32_t reg; | 
