]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/amdgpu: add register distance members into vmhub structure
authorHuang Rui <ray.huang@amd.com>
Wed, 1 Jul 2020 01:37:56 +0000 (09:37 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 Jul 2020 13:03:00 +0000 (09:03 -0400)
This patch is to abstract register distances between two continuous
context domains and invalidation engines. In different ip headers, these
distances may be differences.

Signed-off-by: Huang Rui <ray.huang@amd.com>
Tested-by: AnZhong Huang <anzhong.huang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.h
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.c
drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.c
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c

index 2bd9423c1dabbbd3106e98ff4b3c823b994e35bd..acdb61cfa24cd4ab2150cceec93cc964bacfee42 100644 (file)
@@ -83,6 +83,15 @@ struct amdgpu_vmhub {
        uint32_t        vm_context0_cntl;
        uint32_t        vm_l2_pro_fault_status;
        uint32_t        vm_l2_pro_fault_cntl;
+
+       /*
+        * store the register distances between two continuous context domain
+        * and invalidation engine.
+        */
+       uint32_t        ctx_distance;
+       uint32_t        ctx_addr_distance; /* include LO32/HI32 */
+       uint32_t        eng_distance;
+       uint32_t        eng_addr_distance; /* include LO32/HI32 */
 };
 
 /*
index 6682b843bafe467ac3a4c87bc87a6bb73b197d30..c51833fefc7d5ffc50867f7fa132856844b0ee85 100644 (file)
@@ -386,4 +386,11 @@ void gfxhub_v1_0_init(struct amdgpu_device *adev)
                SOC15_REG_OFFSET(GC, 0, mmVM_L2_PROTECTION_FAULT_STATUS);
        hub->vm_l2_pro_fault_cntl =
                SOC15_REG_OFFSET(GC, 0, mmVM_L2_PROTECTION_FAULT_CNTL);
+
+       hub->ctx_distance = mmVM_CONTEXT1_CNTL - mmVM_CONTEXT0_CNTL;
+       hub->ctx_addr_distance = mmVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+               mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+       hub->eng_distance = mmVM_INVALIDATE_ENG1_REQ - mmVM_INVALIDATE_ENG0_REQ;
+       hub->eng_addr_distance = mmVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+               mmVM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
 }
index 6939edfc5232325402b4daf0e4f0d2891da610f5..e4340b27d204ed26788e96e3506a995e87a1ac5a 100644 (file)
@@ -373,4 +373,12 @@ void gfxhub_v2_0_init(struct amdgpu_device *adev)
                SOC15_REG_OFFSET(GC, 0, mmGCVM_L2_PROTECTION_FAULT_STATUS);
        hub->vm_l2_pro_fault_cntl =
                SOC15_REG_OFFSET(GC, 0, mmGCVM_L2_PROTECTION_FAULT_CNTL);
+
+       hub->ctx_distance = mmGCVM_CONTEXT1_CNTL - mmGCVM_CONTEXT0_CNTL;
+       hub->ctx_addr_distance = mmGCVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+               mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+       hub->eng_distance = mmGCVM_INVALIDATE_ENG1_REQ -
+               mmGCVM_INVALIDATE_ENG0_REQ;
+       hub->eng_addr_distance = mmGCVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+               mmGCVM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
 }
index fcc4c19125136c4a42d7de1e7d32959cf684f6c8..39c9c7856d0f1ea399f0a8bc6f8e33d024684906 100644 (file)
@@ -372,6 +372,14 @@ void gfxhub_v2_1_init(struct amdgpu_device *adev)
                SOC15_REG_OFFSET(GC, 0, mmGCVM_L2_PROTECTION_FAULT_STATUS);
        hub->vm_l2_pro_fault_cntl =
                SOC15_REG_OFFSET(GC, 0, mmGCVM_L2_PROTECTION_FAULT_CNTL);
+
+       hub->ctx_distance = mmGCVM_CONTEXT1_CNTL - mmGCVM_CONTEXT0_CNTL;
+       hub->ctx_addr_distance = mmGCVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+               mmGCVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+       hub->eng_distance = mmGCVM_INVALIDATE_ENG1_REQ -
+               mmGCVM_INVALIDATE_ENG0_REQ;
+       hub->eng_addr_distance = mmGCVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+               mmGCVM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
 }
 
 int gfxhub_v2_1_get_xgmi_info(struct amdgpu_device *adev)
index 405767208a4d1be56e6474ecfb16ea8fcdd00236..ec3a40dd52e56fcafe68ebb29f671572e754c048 100755 (executable)
@@ -429,6 +429,12 @@ void mmhub_v1_0_init(struct amdgpu_device *adev)
        hub->vm_l2_pro_fault_cntl =
                SOC15_REG_OFFSET(MMHUB, 0, mmVM_L2_PROTECTION_FAULT_CNTL);
 
+       hub->ctx_distance = mmVM_CONTEXT1_CNTL - mmVM_CONTEXT0_CNTL;
+       hub->ctx_addr_distance = mmVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+               mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+       hub->eng_distance = mmVM_INVALIDATE_ENG1_REQ - mmVM_INVALIDATE_ENG0_REQ;
+       hub->eng_addr_distance = mmVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+               mmVM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
 }
 
 static void mmhub_v1_0_update_medium_grain_clock_gating(struct amdgpu_device *adev,
index af0866af63a5f183508b300d95c16e8cd44823ee..9bfb77c42fa473cbc5c14f325131426889ed2ba9 100644 (file)
@@ -365,6 +365,13 @@ void mmhub_v2_0_init(struct amdgpu_device *adev)
        hub->vm_l2_pro_fault_cntl =
                SOC15_REG_OFFSET(MMHUB, 0, mmMMVM_L2_PROTECTION_FAULT_CNTL);
 
+       hub->ctx_distance = mmMMVM_CONTEXT1_CNTL - mmMMVM_CONTEXT0_CNTL;
+       hub->ctx_addr_distance = mmMMVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+               mmMMVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+       hub->eng_distance = mmMMVM_INVALIDATE_ENG1_REQ -
+               mmMMVM_INVALIDATE_ENG0_REQ;
+       hub->eng_addr_distance = mmMMVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+               mmMMVM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
 }
 
 static void mmhub_v2_0_update_medium_grain_clock_gating(struct amdgpu_device *adev,
index c0e3efcb09bfa0f7916e33404cb3e0a35a2c4099..df2c316accde725c14843b53ab3a03398e0a62f4 100644 (file)
@@ -534,6 +534,15 @@ void mmhub_v9_4_init(struct amdgpu_device *adev)
                        SOC15_REG_OFFSET(MMHUB, 0,
                                    mmVML2PF0_VM_L2_PROTECTION_FAULT_CNTL) +
                                    i * MMHUB_INSTANCE_REGISTER_OFFSET;
+
+               hub[i]->ctx_distance = mmVML2VC0_VM_CONTEXT1_CNTL -
+                       mmVML2VC0_VM_CONTEXT0_CNTL;
+               hub[i]->ctx_addr_distance = mmVML2VC0_VM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
+                       mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
+               hub[i]->eng_distance = mmVML2VC0_VM_INVALIDATE_ENG1_REQ -
+                       mmVML2VC0_VM_INVALIDATE_ENG0_REQ;
+               hub[i]->eng_addr_distance = mmVML2VC0_VM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
+                       mmVML2VC0_VM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
        }
 }