Re: [PATCH] drm/amdgpu/gmc9: convert to IP version checking

2021-10-04 Thread Christian König

Am 01.10.21 um 21:48 schrieb Alex Deucher:

Use IP versions rather than asic_type to differentiate
IP version specific features.

Signed-off-by: Alex Deucher 


Acked-by: Christian König 


---
  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 136 ++
  1 file changed, 71 insertions(+), 65 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 5551359d5dfd..cb82404df534 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -579,7 +579,7 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device 
*adev,
 * the new fast GRBM interface.
 */
if ((entry->vmid_src == AMDGPU_GFXHUB_0) &&
-   (adev->asic_type < CHIP_ALDEBARAN))
+   (adev->ip_versions[GC_HWIP][0] < IP_VERSION(9, 4, 2)))
RREG32(hub->vm_l2_pro_fault_status);
  
  	status = RREG32(hub->vm_l2_pro_fault_status);

@@ -597,26 +597,28 @@ static int gmc_v9_0_process_interrupt(struct 
amdgpu_device *adev,
gfxhub_client_ids[cid],
cid);
} else {
-   switch (adev->asic_type) {
-   case CHIP_VEGA10:
+   switch (adev->ip_versions[MMHUB_HWIP][0]) {
+   case IP_VERSION(9, 0, 0):
mmhub_cid = mmhub_client_ids_vega10[cid][rw];
break;
-   case CHIP_VEGA12:
+   case IP_VERSION(9, 3, 0):
mmhub_cid = mmhub_client_ids_vega12[cid][rw];
break;
-   case CHIP_VEGA20:
+   case IP_VERSION(9, 4, 0):
mmhub_cid = mmhub_client_ids_vega20[cid][rw];
break;
-   case CHIP_ARCTURUS:
+   case IP_VERSION(9, 4, 1):
mmhub_cid = mmhub_client_ids_arcturus[cid][rw];
break;
-   case CHIP_RAVEN:
+   case IP_VERSION(9, 1, 0):
+   case IP_VERSION(9, 2, 0):
mmhub_cid = mmhub_client_ids_raven[cid][rw];
break;
-   case CHIP_RENOIR:
+   case IP_VERSION(1, 5, 0):
+   case IP_VERSION(2, 4, 0):
mmhub_cid = mmhub_client_ids_renoir[cid][rw];
break;
-   case CHIP_ALDEBARAN:
+   case IP_VERSION(9, 4, 2):
mmhub_cid = mmhub_client_ids_aldebaran[cid][rw];
break;
default:
@@ -694,7 +696,7 @@ static uint32_t gmc_v9_0_get_invalidate_req(unsigned int 
vmid,
  static bool gmc_v9_0_use_invalidate_semaphore(struct amdgpu_device *adev,
   uint32_t vmhub)
  {
-   if (adev->asic_type == CHIP_ALDEBARAN)
+   if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 2))
return false;
  
  	return ((vmhub == AMDGPU_MMHUB_0 ||

@@ -745,7 +747,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
*adev, uint32_t vmid,
  
  	hub = >vmhub[vmhub];

if (adev->gmc.xgmi.num_physical_nodes &&
-   adev->asic_type == CHIP_VEGA20) {
+   adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 0)) {
/* Vega20+XGMI caches PTEs in TC and TLB. Add a
 * heavy-weight TLB flush (type 2), which flushes
 * both. Due to a race condition with concurrent
@@ -808,7 +810,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
*adev, uint32_t vmid,
 * GRBM interface.
 */
if ((vmhub == AMDGPU_GFXHUB_0) &&
-   (adev->asic_type < CHIP_ALDEBARAN))
+   (adev->ip_versions[GC_HWIP][0] < IP_VERSION(9, 4, 2)))
RREG32_NO_KIQ(hub->vm_inv_eng0_req +
  hub->eng_distance * eng);
  
@@ -874,7 +876,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct amdgpu_device *adev,

 * still need a second TLB flush after this.
 */
bool vega20_xgmi_wa = (adev->gmc.xgmi.num_physical_nodes &&
-  adev->asic_type == CHIP_VEGA20);
+  adev->ip_versions[GC_HWIP][0] == 
IP_VERSION(9, 4, 0));
/* 2 dwords flush + 8 dwords fence */
unsigned int ndw = kiq->pmf->invalidate_tlbs_size + 8;
  
@@ -1088,13 +1090,13 @@ static void gmc_v9_0_get_vm_pte(struct amdgpu_device *adev,

*flags &= ~AMDGPU_PTE_VALID;
}
  
-	if ((adev->asic_type == CHIP_ARCTURUS ||

-   adev->asic_type == CHIP_ALDEBARAN) &&
+   if ((adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 1) ||
+adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 2)) &&
!(*flags & AMDGPU_PTE_SYSTEM) &&
mapping->bo_va->is_xgmi)
*flags |= AMDGPU_PTE_SNOOPED;
  
-	

[PATCH] drm/amdgpu/gmc9: convert to IP version checking

2021-10-01 Thread Alex Deucher
Use IP versions rather than asic_type to differentiate
IP version specific features.

Signed-off-by: Alex Deucher 
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 136 ++
 1 file changed, 71 insertions(+), 65 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 5551359d5dfd..cb82404df534 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -579,7 +579,7 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device 
*adev,
 * the new fast GRBM interface.
 */
if ((entry->vmid_src == AMDGPU_GFXHUB_0) &&
-   (adev->asic_type < CHIP_ALDEBARAN))
+   (adev->ip_versions[GC_HWIP][0] < IP_VERSION(9, 4, 2)))
RREG32(hub->vm_l2_pro_fault_status);
 
status = RREG32(hub->vm_l2_pro_fault_status);
@@ -597,26 +597,28 @@ static int gmc_v9_0_process_interrupt(struct 
amdgpu_device *adev,
gfxhub_client_ids[cid],
cid);
} else {
-   switch (adev->asic_type) {
-   case CHIP_VEGA10:
+   switch (adev->ip_versions[MMHUB_HWIP][0]) {
+   case IP_VERSION(9, 0, 0):
mmhub_cid = mmhub_client_ids_vega10[cid][rw];
break;
-   case CHIP_VEGA12:
+   case IP_VERSION(9, 3, 0):
mmhub_cid = mmhub_client_ids_vega12[cid][rw];
break;
-   case CHIP_VEGA20:
+   case IP_VERSION(9, 4, 0):
mmhub_cid = mmhub_client_ids_vega20[cid][rw];
break;
-   case CHIP_ARCTURUS:
+   case IP_VERSION(9, 4, 1):
mmhub_cid = mmhub_client_ids_arcturus[cid][rw];
break;
-   case CHIP_RAVEN:
+   case IP_VERSION(9, 1, 0):
+   case IP_VERSION(9, 2, 0):
mmhub_cid = mmhub_client_ids_raven[cid][rw];
break;
-   case CHIP_RENOIR:
+   case IP_VERSION(1, 5, 0):
+   case IP_VERSION(2, 4, 0):
mmhub_cid = mmhub_client_ids_renoir[cid][rw];
break;
-   case CHIP_ALDEBARAN:
+   case IP_VERSION(9, 4, 2):
mmhub_cid = mmhub_client_ids_aldebaran[cid][rw];
break;
default:
@@ -694,7 +696,7 @@ static uint32_t gmc_v9_0_get_invalidate_req(unsigned int 
vmid,
 static bool gmc_v9_0_use_invalidate_semaphore(struct amdgpu_device *adev,
   uint32_t vmhub)
 {
-   if (adev->asic_type == CHIP_ALDEBARAN)
+   if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 2))
return false;
 
return ((vmhub == AMDGPU_MMHUB_0 ||
@@ -745,7 +747,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
*adev, uint32_t vmid,
 
hub = >vmhub[vmhub];
if (adev->gmc.xgmi.num_physical_nodes &&
-   adev->asic_type == CHIP_VEGA20) {
+   adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 0)) {
/* Vega20+XGMI caches PTEs in TC and TLB. Add a
 * heavy-weight TLB flush (type 2), which flushes
 * both. Due to a race condition with concurrent
@@ -808,7 +810,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
*adev, uint32_t vmid,
 * GRBM interface.
 */
if ((vmhub == AMDGPU_GFXHUB_0) &&
-   (adev->asic_type < CHIP_ALDEBARAN))
+   (adev->ip_versions[GC_HWIP][0] < IP_VERSION(9, 4, 2)))
RREG32_NO_KIQ(hub->vm_inv_eng0_req +
  hub->eng_distance * eng);
 
@@ -874,7 +876,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct 
amdgpu_device *adev,
 * still need a second TLB flush after this.
 */
bool vega20_xgmi_wa = (adev->gmc.xgmi.num_physical_nodes &&
-  adev->asic_type == CHIP_VEGA20);
+  adev->ip_versions[GC_HWIP][0] == 
IP_VERSION(9, 4, 0));
/* 2 dwords flush + 8 dwords fence */
unsigned int ndw = kiq->pmf->invalidate_tlbs_size + 8;
 
@@ -1088,13 +1090,13 @@ static void gmc_v9_0_get_vm_pte(struct amdgpu_device 
*adev,
*flags &= ~AMDGPU_PTE_VALID;
}
 
-   if ((adev->asic_type == CHIP_ARCTURUS ||
-   adev->asic_type == CHIP_ALDEBARAN) &&
+   if ((adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 1) ||
+adev->ip_versions[GC_HWIP][0] == IP_VERSION(9, 4, 2)) &&
!(*flags & AMDGPU_PTE_SYSTEM) &&
mapping->bo_va->is_xgmi)
*flags |= AMDGPU_PTE_SNOOPED;
 
-   if (adev->asic_type == CHIP_ALDEBARAN)
+   if