aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmber Lin <[email protected]>2022-11-28 11:26:02 -0500
committerAlex Deucher <[email protected]>2023-06-09 09:50:54 -0400
commit85b45b60722f506322393320bb6cc195378f2e4f (patch)
treeb0cb3a5c54b2b6ea4a8ca8fe0a1f7730f293db51
parentd524180b88009d9158bff7fd20f3916455e0c32c (diff)
amd/amdgpu: Set MTYPE_UC for access over PCIe
For GFX v9_4_3, set MTYPE_UC for memory access over PCIe. v4 - add missing indentation pointed out by Felix and add his reviewed-by tag. v3 - add missing logic for the svm path. v2 - add amdgpu_xgmi_same_hive to separate access over xgmi from pcie Reviewed-by: Felix Kuehling <[email protected]> Signed-off-by: Amber Lin <[email protected]> Signed-off-by: Rajneesh Bhardwaj <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_svm.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index 5d6e02559d8e..6daba0582bf3 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -1195,16 +1195,29 @@ svm_range_get_pte_flags(struct kfd_node *node,
//e.g. NPS4. Current approch is only applicable without memory
//partitions.
snoop = true;
- if (uncached)
+ if (uncached) {
mapping_flags |= AMDGPU_VM_MTYPE_UC;
- /* local HBM region close to partition*/
- else if (bo_node == node)
- mapping_flags |= AMDGPU_VM_MTYPE_RW;
- /* local HBM region far from partition or remote XGMI GPU or
- * system memory
- */
- else
+ } else if (domain == SVM_RANGE_VRAM_DOMAIN) {
+ /* local HBM region close to partition with a workaround
+ * for Endpoint systems.
+ */
+ if (bo_node == node)
+ mapping_flags |=
+ (node->adev->flags & AMD_IS_APU) ?
+ AMDGPU_VM_MTYPE_RW : AMDGPU_VM_MTYPE_NC;
+ /* local HBM region far from partition or remote XGMI GPU */
+ else if (svm_nodes_in_same_hive(bo_node, node))
+ mapping_flags |= AMDGPU_VM_MTYPE_NC;
+ /* PCIe P2P */
+ else
+ mapping_flags |= AMDGPU_VM_MTYPE_UC;
+ /* system memory accessed by the APU */
+ } else if (node->adev->flags & AMD_IS_APU) {
mapping_flags |= AMDGPU_VM_MTYPE_NC;
+ /* system memory accessed by the dGPU */
+ } else {
+ mapping_flags |= AMDGPU_VM_MTYPE_UC;
+ }
break;
default:
mapping_flags |= coherent ?