diff options
| -rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 17 | ||||
| -rw-r--r-- | include/uapi/linux/kfd_ioctl.h | 2 | 
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c index 96ccff79902c..4b4f3bf8b823 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c @@ -1159,6 +1159,7 @@ svm_range_get_pte_flags(struct amdgpu_device *adev, struct svm_range *prange,  	uint64_t pte_flags;  	bool snoop = (domain != SVM_RANGE_VRAM_DOMAIN);  	bool coherent = flags & KFD_IOCTL_SVM_FLAG_COHERENT; +	bool uncached = flags & KFD_IOCTL_SVM_FLAG_UNCACHED;  	if (domain == SVM_RANGE_VRAM_DOMAIN)  		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,  				AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;  		}  		break; +	case IP_VERSION(9, 4, 3): +		//TODO: Need more work for handling multiple memory partitions +		//e.g. NPS4. Current approch is only applicable without memory +		//partitions. +		snoop = true; +		if (uncached) +			mapping_flags |= AMDGPU_VM_MTYPE_UC; +		/* local HBM region close to partition*/ +		else if (bo_adev == adev) +			mapping_flags |= AMDGPU_VM_MTYPE_RW; +		/* local HBM region far from partition or remote XGMI GPU or +		 * system memory +		 */ +		else +			mapping_flags |= AMDGPU_VM_MTYPE_NC; +		break;  	default:  		mapping_flags |= coherent ?  			AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC; diff --git a/include/uapi/linux/kfd_ioctl.h b/include/uapi/linux/kfd_ioctl.h index 2da5c3ad71bd..2a9671e1ddb5 100644 --- a/include/uapi/linux/kfd_ioctl.h +++ b/include/uapi/linux/kfd_ioctl.h @@ -623,6 +623,8 @@ enum kfd_mmio_remap {  #define KFD_IOCTL_SVM_FLAG_GPU_READ_MOSTLY     0x00000020  /* Keep GPU memory mapping always valid as if XNACK is disable */  #define KFD_IOCTL_SVM_FLAG_GPU_ALWAYS_MAPPED   0x00000040 +/* Uncached access to memory */ +#define KFD_IOCTL_SVM_FLAG_UNCACHED 0x00000080  /**   * kfd_ioctl_svm_op - SVM ioctl operations  | 
