drm/amdkfd: Add SVM API support capability bits
authorPhilip Yang <Philip.Yang@amd.com>
Thu, 10 Dec 2020 02:51:50 +0000 (21:51 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 21 Apr 2021 01:50:29 +0000 (21:50 -0400)
SVMAPISupported property added to HSA_CAPABILITY, the value match
HSA_CAPABILITY defined in Thunk spec:

SVMAPISupported: it will not be supported on older kernels that don't
have HMM or on systems with GFXv8 or older GPUs without support for
48-bit virtual addresses.

CoherentHostAccess property added to HSA_MEMORYPROPERTY, the value match
HSA_MEMORYPROPERTY defined in Thunk spec:

CoherentHostAccess: whether or not device memory can be coherently
accessed by the host CPU.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdkfd/kfd_topology.c
drivers/gpu/drm/amd/amdkfd/kfd_topology.h

index cdef608db4f42d615e419cc4e52c28bf2457d656..083ac9babfa8c83384301465bd74293be493666c 100644 (file)
@@ -1419,6 +1419,12 @@ int kfd_topology_add_device(struct kfd_dev *gpu)
                dev->node_props.capability |= (adev->ras_features != 0) ?
                        HSA_CAP_RASEVENTNOTIFY : 0;
 
+       /* SVM API and HMM page migration work together, device memory type
+        * is initialized to not 0 when page migration register device memory.
+        */
+       if (adev->kfd.dev->pgmap.type != 0)
+               dev->node_props.capability |= HSA_CAP_SVMAPI_SUPPORTED;
+
        kfd_debug_print_topology();
 
        if (!res)
index b8b68087bd7a3085120b98f98bad335312eb6a9f..6bd6380b0ee08961606d4ac7d117e761c840ad12 100644 (file)
@@ -53,8 +53,9 @@
 #define HSA_CAP_ASIC_REVISION_MASK             0x03c00000
 #define HSA_CAP_ASIC_REVISION_SHIFT            22
 #define HSA_CAP_SRAM_EDCSUPPORTED              0x04000000
+#define HSA_CAP_SVMAPI_SUPPORTED               0x08000000
 
-#define HSA_CAP_RESERVED                       0xf80f8000
+#define HSA_CAP_RESERVED                       0xf00f8000
 
 struct kfd_node_properties {
        uint64_t hive_id;
@@ -98,9 +99,10 @@ struct kfd_node_properties {
 #define HSA_MEM_HEAP_TYPE_GPU_LDS      4
 #define HSA_MEM_HEAP_TYPE_GPU_SCRATCH  5
 
-#define HSA_MEM_FLAGS_HOT_PLUGGABLE    0x00000001
-#define HSA_MEM_FLAGS_NON_VOLATILE     0x00000002
-#define HSA_MEM_FLAGS_RESERVED         0xfffffffc
+#define HSA_MEM_FLAGS_HOT_PLUGGABLE            0x00000001
+#define HSA_MEM_FLAGS_NON_VOLATILE             0x00000002
+#define HSA_MEM_FLAGS_COHERENTHOSTACCESS       0x00000004
+#define HSA_MEM_FLAGS_RESERVED                 0xfffffff8
 
 struct kfd_mem_properties {
        struct list_head        list;