diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 | 
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 981a9cfb63b5..5c7d40873ee2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3757,6 +3757,12 @@ int amdgpu_device_init(struct amdgpu_device *adev,  		adev->have_atomics_support = ((struct amd_sriov_msg_pf2vf_info *)  			adev->virt.fw_reserve.p_pf2vf)->pcie_atomic_ops_support_flags ==  			(PCI_EXP_DEVCAP2_ATOMIC_COMP32 | PCI_EXP_DEVCAP2_ATOMIC_COMP64); +	/* APUs w/ gfx9 onwards doesn't reply on PCIe atomics, rather it is a +	 * internal path natively support atomics, set have_atomics_support to true. +	 */ +	else if ((adev->flags & AMD_IS_APU) && +		(adev->ip_versions[GC_HWIP][0] > IP_VERSION(9, 0, 0))) +		adev->have_atomics_support = true;  	else  		adev->have_atomics_support =  			!pci_enable_atomic_ops_to_root(adev->pdev, @@ -4506,7 +4512,11 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)  	dev_info(adev->dev, "recover vram bo from shadow start\n");  	mutex_lock(&adev->shadow_list_lock);  	list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) { -		shadow = &vmbo->bo; +		/* If vm is compute context or adev is APU, shadow will be NULL */ +		if (!vmbo->shadow) +			continue; +		shadow = vmbo->shadow; +  		/* No need to recover an evicted BO */  		if (shadow->tbo.resource->mem_type != TTM_PL_TT ||  		    shadow->tbo.resource->start == AMDGPU_BO_INVALID_OFFSET ||  | 
