aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3821-drm-amdgpu-check-large-bar-when-map-peer-device.patch
diff options
context:
space:
mode:
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.patch48
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
+