From: Le Ma <le...@amd.com>

As the layout of VMHUB definition has been changed to cover multiple
XCD/AID case, the original num_vmhubs is not appropriate to do vmhub
iteration any more.

Drop num_vmhubs and introduce vmhubs_mask instead.

v2: switch to the new VMHUB layout
v3: use DECLARE_BITMAP to define vmhubs_mask

Change-Id: I3028c4cb607759253861cb10bf62f2fd13791e03
Signed-off-by: Le Ma <le...@amd.com>
Reviewed-by: Christian König <christian.koe...@amd.com>
Reviewed-by: Hawking Zhang <hawking.zh...@amd.com>
Signed-off-by: Yifan Zhang <yifan1.zh...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h        |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c   |  4 ++--
 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c     |  5 +++--
 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c      |  2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c      |  2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c      |  2 +-
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c      | 22 +++++++++++++---------
 8 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 5ded5a90dc68..9ac7ea452dee 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -848,7 +848,7 @@ struct amdgpu_device {
        dma_addr_t                      dummy_page_addr;
        struct amdgpu_vm_manager        vm_manager;
        struct amdgpu_vmhub             vmhub[AMDGPU_MAX_VMHUBS];
-       unsigned                        num_vmhubs;
+       DECLARE_BITMAP(vmhubs_mask, AMDGPU_MAX_VMHUBS);
 
        /* memory management */
        struct amdgpu_mman              mman;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index f0a136d35279..5afbcc390d89 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -733,7 +733,7 @@ int amdgpu_amdkfd_flush_gpu_tlb_vmid(struct amdgpu_device 
*adev,
        if (adev->family == AMDGPU_FAMILY_AI) {
                int i;
 
-               for (i = 0; i < adev->num_vmhubs; i++)
+               for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS)
                        amdgpu_gmc_flush_gpu_tlb(adev, vmid, i, 0);
        } else {
                amdgpu_gmc_flush_gpu_tlb(adev, vmid, AMDGPU_GFXHUB(0), 0);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 01cb89ffbd56..6b12f4a75fc3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -182,7 +182,7 @@ void amdgpu_gart_unbind(struct amdgpu_device *adev, 
uint64_t offset,
        }
        mb();
        amdgpu_device_flush_hdp(adev, NULL);
-       for (i = 0; i < adev->num_vmhubs; i++)
+       for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS)
                amdgpu_gmc_flush_gpu_tlb(adev, 0, i, 0);
 
        drm_dev_exit(idx);
@@ -264,7 +264,7 @@ void amdgpu_gart_invalidate_tlb(struct amdgpu_device *adev)
 
        mb();
        amdgpu_device_flush_hdp(adev, NULL);
-       for (i = 0; i < adev->num_vmhubs; i++)
+       for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS)
                amdgpu_gmc_flush_gpu_tlb(adev, 0, i, 0);
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
index ea2a448147e3..ff96f11c2adf 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
@@ -460,7 +460,7 @@ static int gmc_v10_0_flush_gpu_tlb_pasid(struct 
amdgpu_device *adev,
                                &queried_pasid);
                if (ret && queried_pasid == pasid) {
                        if (all_hub) {
-                               for (i = 0; i < adev->num_vmhubs; i++)
+                               for_each_set_bit(i, adev->vmhubs_mask, 
AMDGPU_MAX_VMHUBS)
                                        gmc_v10_0_flush_gpu_tlb(adev, vmid,
                                                        i, flush_type);
                        } else {
@@ -928,7 +928,8 @@ static int gmc_v10_0_sw_init(void *handle)
        case IP_VERSION(10, 3, 6):
        case IP_VERSION(10, 3, 3):
        case IP_VERSION(10, 3, 7):
-               adev->num_vmhubs = 2;
+               set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
+               set_bit(AMDGPU_MMHUB0(0), adev->vmhubs_mask);
                /*
                 * To fulfill 4-level page support,
                 * vm size is 256TB (48bit), maximum size of 
Navi10/Navi14/Navi12,
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index b7dad4e67813..aa754c95a0b3 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -808,7 +808,7 @@ static int gmc_v6_0_sw_init(void *handle)
        int r;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       adev->num_vmhubs = 1;
+       set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
 
        if (adev->flags & AMD_IS_APU) {
                adev->gmc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 402960b0174e..81609a2b226f 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -977,7 +977,7 @@ static int gmc_v7_0_sw_init(void *handle)
        int r;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       adev->num_vmhubs = 1;
+       set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
 
        if (adev->flags & AMD_IS_APU) {
                adev->gmc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 504c1b34dab7..d48e33738a88 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -1093,7 +1093,7 @@ static int gmc_v8_0_sw_init(void *handle)
        int r;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       adev->num_vmhubs = 1;
+       set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
 
        if (adev->flags & AMD_IS_APU) {
                adev->gmc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 193ba4d912a6..53ae82e497cc 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -481,7 +481,7 @@ static int gmc_v9_0_vm_fault_interrupt_state(struct 
amdgpu_device *adev,
 
        switch (state) {
        case AMDGPU_IRQ_STATE_DISABLE:
-               for (j = 0; j < adev->num_vmhubs; j++) {
+               for_each_set_bit(j, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) {
                        hub = &adev->vmhub[j];
                        for (i = 0; i < 16; i++) {
                                reg = hub->vm_context0_cntl + i;
@@ -509,7 +509,7 @@ static int gmc_v9_0_vm_fault_interrupt_state(struct 
amdgpu_device *adev,
                }
                break;
        case AMDGPU_IRQ_STATE_ENABLE:
-               for (j = 0; j < adev->num_vmhubs; j++) {
+               for_each_set_bit(j, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) {
                        hub = &adev->vmhub[j];
                        for (i = 0; i < 16; i++) {
                                reg = hub->vm_context0_cntl + i;
@@ -803,7 +803,7 @@ static void gmc_v9_0_flush_gpu_tlb(struct amdgpu_device 
*adev, uint32_t vmid,
        u32 j, inv_req, inv_req2, tmp;
        struct amdgpu_vmhub *hub;
 
-       BUG_ON(vmhub >= adev->num_vmhubs);
+       BUG_ON(vmhub >= AMDGPU_MAX_VMHUBS);
 
        hub = &adev->vmhub[vmhub];
        if (adev->gmc.xgmi.num_physical_nodes &&
@@ -987,7 +987,7 @@ static int gmc_v9_0_flush_gpu_tlb_pasid(struct 
amdgpu_device *adev,
                                &queried_pasid);
                if (ret && queried_pasid == pasid) {
                        if (all_hub) {
-                               for (i = 0; i < adev->num_vmhubs; i++)
+                               for_each_set_bit(i, adev->vmhubs_mask, 
AMDGPU_MAX_VMHUBS)
                                        gmc_v9_0_flush_gpu_tlb(adev, vmid,
                                                        i, flush_type);
                        } else {
@@ -1684,7 +1684,8 @@ static int gmc_v9_0_sw_init(void *handle)
        switch (adev->ip_versions[GC_HWIP][0]) {
        case IP_VERSION(9, 1, 0):
        case IP_VERSION(9, 2, 2):
-               adev->num_vmhubs = 2;
+               set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
+               set_bit(AMDGPU_MMHUB0(0), adev->vmhubs_mask);
 
                if (adev->rev_id == 0x0 || adev->rev_id == 0x1) {
                        amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48);
@@ -1701,8 +1702,8 @@ static int gmc_v9_0_sw_init(void *handle)
        case IP_VERSION(9, 3, 0):
        case IP_VERSION(9, 4, 2):
        case IP_VERSION(9, 4, 3):
-               adev->num_vmhubs = 2;
-
+               set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
+               set_bit(AMDGPU_MMHUB0(0), adev->vmhubs_mask);
 
                /*
                 * To fulfill 4-level page support,
@@ -1718,7 +1719,9 @@ static int gmc_v9_0_sw_init(void *handle)
                        adev->gmc.translate_further = 
adev->vm_manager.num_level > 1;
                break;
        case IP_VERSION(9, 4, 1):
-               adev->num_vmhubs = 3;
+               set_bit(AMDGPU_GFXHUB(0), adev->vmhubs_mask);
+               set_bit(AMDGPU_MMHUB0(0), adev->vmhubs_mask);
+               set_bit(AMDGPU_MMHUB1(0), adev->vmhubs_mask);
 
                /* Keep the vm size same with Vega20 */
                amdgpu_vm_adjust_size(adev, 256 * 1024, 9, 3, 48);
@@ -1944,7 +1947,8 @@ static int gmc_v9_0_hw_init(void *handle)
                        adev->gfxhub.funcs->set_fault_enable_default(adev, 
value);
                adev->mmhub.funcs->set_fault_enable_default(adev, value);
        }
-       for (i = 0; i < adev->num_vmhubs; ++i) {
+
+       for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS){
                if (adev->in_s0ix && (i == AMDGPU_GFXHUB(0)))
                        continue;
                gmc_v9_0_flush_gpu_tlb(adev, 0, i, 0);
-- 
2.37.3

Reply via email to