Recently introduced commit "drm/amdgpu: Set cache coherency for GC 9.4.3" did not update the settings applicable for svm ranges. Add the coherence settings for svm ranges for GFX IP 9.4.3.
Unified · Split
| @@ -1159,6 +1159,7 @@ svm_range_get_pte_flags(struct amdgpu_device *adev, struct svm_range *prange, · 1158 unmodified lines | ||
| 1159 | 1159 | uint64_t pte_flags; |
| 1160 | 1160 | bool snoop = (domain != SVM_RANGE_VRAM_DOMAIN); |
| 1161 | 1161 | bool coherent = flags & KFD_IOCTL_SVM_FLAG_COHERENT; |
| 1162 | + bool uncached = flags & KFD_IOCTL_SVM_FLAG_UNCACHED; | |
| 1162 | 1163 | |
| 1163 | 1164 | if (domain == SVM_RANGE_VRAM_DOMAIN) |
| 1164 | 1165 | bo_adev = amdgpu_ttm_adev(prange->svm_bo->bo->tbo.bdev); |
| @@ -1198,6 +1199,22 @@ svm_range_get_pte_flags(struct amdgpu_device *adev, struct svm_range *prange, · 33 unmodified lines | ||
| 1198 | 1199 | AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC; |
| 1199 | 1200 | } |
| 1200 | 1201 | break; |
| 1202 | + case IP_VERSION(9, 4, 3): | |
| 1203 | + //TODO: Need more work for handling multiple memory partitions | |
| 1204 | + //e.g. NPS4. Current approch is only applicable without memory | |
| 1205 | + //partitions. | |
| 1206 | + snoop = true; | |
| 1207 | + if (uncached) | |
| 1208 | + mapping_flags |= AMDGPU_VM_MTYPE_UC; | |
| 1209 | + /* local HBM region close to partition*/ | |
| 1210 | + else if (bo_adev == adev) | |
| 1211 | + mapping_flags |= AMDGPU_VM_MTYPE_RW; | |
| 1212 | + /* local HBM region far from partition or remote XGMI GPU or | |
| 1213 | + * system memory | |
| 1214 | + */ | |
| 1215 | + else | |
| 1216 | + mapping_flags |= AMDGPU_VM_MTYPE_NC; | |
| 1217 | + break; | |
| 1201 | 1218 | default: |
| 1202 | 1219 | mapping_flags |= coherent ? |
| 1203 | 1220 | AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC; |
| @@ -623,6 +623,8 @@ enum kfd_mmio_remap { · 622 unmodified lines | ||
| 623 | 623 | #define KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY 0x00000020 |
| 624 | 624 | /* Keep GPU memory mapping always valid as if XNACK is disable */ |
| 625 | 625 | #define KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED 0x00000040 |
| 626 | +/* Uncached access to memory */ | |
| 627 | +#define KFD_IOCTL_SVM_FLAG_UNCACHED 0x00000080 | |
| 626 | 628 | |
| 627 | 629 | /** |
| 628 | 630 | * kfd_ioctl_svm_op - SVM ioctl operations |