diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch new file mode 100644 index 00000000..b9f3b803 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch @@ -0,0 +1,48 @@ +From fb5b1de5f22ffa0a1ab04d46a88f65c11f4fdf2e Mon Sep 17 00:00:00 2001 +From: shaoyunl <shaoyun.liu@amd.com> +Date: Wed, 14 Nov 2018 15:16:19 -0500 +Subject: [PATCH 3821/4256] drm/amdgpu: check large bar when map peer device + +CPU_ACCESS flag may be cleared on VRAM migration + +Change-Id: Ic2edf02cd23cb3d3d2b5a726dffeb5c55a50e274 +Signed-off-by: shaoyunl <shaoyun.liu@amd.com> +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 23 ++++++++++++++++++++++ + 1 file changed, 23 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 74c7723ad5e2..63ec56c38bd8 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -4113,3 +4113,26 @@ static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev) + } + } + ++/** ++ * amdgpu_device_is_peer_accessible - Check peer access through PCIe BAR ++ * ++ * @adev: amdgpu_device pointer ++ * @peer_adev: amdgpu_device pointer for peer device trying to access @adev ++ * ++ * Return true if @peer_adev can access (DMA) @adev through the PCIe ++ * BAR, i.e. @adev is "large BAR" and the BAR matches the DMA mask of ++ * @peer_adev. ++ */ ++bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev, ++ struct amdgpu_device *peer_adev) ++{ ++ uint64_t address_mask = peer_adev->dev->dma_mask ? ++ ~*peer_adev->dev->dma_mask : ~((1ULL << 32) - 1); ++ resource_size_t aper_limit = ++ adev->gmc.aper_base + adev->gmc.aper_size - 1; ++ ++ return adev->gmc.visible_vram_size && ++ adev->gmc.real_vram_size == adev->gmc.visible_vram_size && ++ !(adev->gmc.aper_base & address_mask || ++ aper_limit & address_mask); ++} +-- +2.17.1 + |