aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoger He <Hongbo.He@amd.com>2017-08-11 08:00:41 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-08-17 15:46:08 -0400
commite618d306ded38dc9d37c04dc37e24bf9d62e9c7b (patch)
tree9373307774e178887e6723a13ecc0c1e9ac8b705
parent27c7b9aeecd7c06a3b527795807c19a0bbe25c1e (diff)
drm/amd/amdgpu: store fragment_size in vm_manager
adds fragment_size in the vm_manager structure and implements hardware setup for it. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Roger He <Hongbo.He@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c9
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c9
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c5
9 files changed, 33 insertions, 26 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 1aac5821ac8f..e16229000a98 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -590,11 +590,8 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
590 dev_info.virtual_address_offset = AMDGPU_VA_RESERVED_SIZE; 590 dev_info.virtual_address_offset = AMDGPU_VA_RESERVED_SIZE;
591 dev_info.virtual_address_max = (uint64_t)adev->vm_manager.max_pfn * AMDGPU_GPU_PAGE_SIZE; 591 dev_info.virtual_address_max = (uint64_t)adev->vm_manager.max_pfn * AMDGPU_GPU_PAGE_SIZE;
592 dev_info.virtual_address_alignment = max((int)PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE); 592 dev_info.virtual_address_alignment = max((int)PAGE_SIZE, AMDGPU_GPU_PAGE_SIZE);
593 dev_info.pte_fragment_size = 593 dev_info.pte_fragment_size = (1 << adev->vm_manager.fragment_size) * AMDGPU_GPU_PAGE_SIZE;
594 (1 << AMDGPU_LOG2_PAGES_PER_FRAG(adev)) *
595 AMDGPU_GPU_PAGE_SIZE;
596 dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE; 594 dev_info.gart_page_size = AMDGPU_GPU_PAGE_SIZE;
597
598 dev_info.cu_active_number = adev->gfx.cu_info.number; 595 dev_info.cu_active_number = adev->gfx.cu_info.number;
599 dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask; 596 dev_info.cu_ao_mask = adev->gfx.cu_info.ao_cu_mask;
600 dev_info.ce_ram_size = adev->gfx.ce_ram_size; 597 dev_info.ce_ram_size = adev->gfx.ce_ram_size;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 2ed99b8f7da7..efac05d489c9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1410,9 +1410,7 @@ static int amdgpu_vm_frag_ptes(struct amdgpu_pte_update_params *params,
1410 * Userspace can support this by aligning virtual base address and 1410 * Userspace can support this by aligning virtual base address and
1411 * allocation size to the fragment size. 1411 * allocation size to the fragment size.
1412 */ 1412 */
1413 1413 unsigned pages_per_frag = params->adev->vm_manager.fragment_size;
1414 /* SI and newer are optimized for 64KB */
1415 unsigned pages_per_frag = AMDGPU_LOG2_PAGES_PER_FRAG(params->adev);
1416 uint64_t frag_flags = AMDGPU_PTE_FRAG(pages_per_frag); 1414 uint64_t frag_flags = AMDGPU_PTE_FRAG(pages_per_frag);
1417 uint64_t frag_align = 1 << pages_per_frag; 1415 uint64_t frag_align = 1 << pages_per_frag;
1418 1416
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index a740b57e9eee..45a276960d02 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -50,11 +50,6 @@ struct amdgpu_bo_list_entry;
50/* PTBs (Page Table Blocks) need to be aligned to 32K */ 50/* PTBs (Page Table Blocks) need to be aligned to 32K */
51#define AMDGPU_VM_PTB_ALIGN_SIZE 32768 51#define AMDGPU_VM_PTB_ALIGN_SIZE 32768
52 52
53/* LOG2 number of continuous pages for the fragment field */
54#define AMDGPU_LOG2_PAGES_PER_FRAG(adev) \
55 ((adev)->asic_type < CHIP_VEGA10 ? 4 : \
56 (adev)->vm_manager.block_size)
57
58#define AMDGPU_PTE_VALID (1ULL << 0) 53#define AMDGPU_PTE_VALID (1ULL << 0)
59#define AMDGPU_PTE_SYSTEM (1ULL << 1) 54#define AMDGPU_PTE_SYSTEM (1ULL << 1)
60#define AMDGPU_PTE_SNOOPED (1ULL << 2) 55#define AMDGPU_PTE_SNOOPED (1ULL << 2)
@@ -200,6 +195,7 @@ struct amdgpu_vm_manager {
200 uint32_t num_level; 195 uint32_t num_level;
201 uint64_t vm_size; 196 uint64_t vm_size;
202 uint32_t block_size; 197 uint32_t block_size;
198 uint32_t fragment_size;
203 /* vram base address for page table entry */ 199 /* vram base address for page table entry */
204 u64 vram_base_offset; 200 u64 vram_base_offset;
205 /* vm pte handling */ 201 /* vm pte handling */
diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
index 6c8040e616c4..4f2788b61a08 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
@@ -124,7 +124,7 @@ static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
124 124
125static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev) 125static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
126{ 126{
127 uint32_t tmp; 127 uint32_t tmp, field;
128 128
129 /* Setup L2 cache */ 129 /* Setup L2 cache */
130 tmp = RREG32_SOC15(GC, 0, mmVM_L2_CNTL); 130 tmp = RREG32_SOC15(GC, 0, mmVM_L2_CNTL);
@@ -143,8 +143,9 @@ static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
143 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1); 143 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
144 WREG32_SOC15(GC, 0, mmVM_L2_CNTL2, tmp); 144 WREG32_SOC15(GC, 0, mmVM_L2_CNTL2, tmp);
145 145
146 field = adev->vm_manager.fragment_size;
146 tmp = mmVM_L2_CNTL3_DEFAULT; 147 tmp = mmVM_L2_CNTL3_DEFAULT;
147 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9); 148 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
148 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6); 149 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
149 WREG32_SOC15(GC, 0, mmVM_L2_CNTL3, tmp); 150 WREG32_SOC15(GC, 0, mmVM_L2_CNTL3, tmp);
150 151
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 93c45f26b7c8..2db5c71d696c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -461,6 +461,7 @@ static void gmc_v6_0_set_prt(struct amdgpu_device *adev, bool enable)
461static int gmc_v6_0_gart_enable(struct amdgpu_device *adev) 461static int gmc_v6_0_gart_enable(struct amdgpu_device *adev)
462{ 462{
463 int r, i; 463 int r, i;
464 u32 field;
464 465
465 if (adev->gart.robj == NULL) { 466 if (adev->gart.robj == NULL) {
466 dev_err(adev->dev, "No VRAM object for PCIE GART.\n"); 467 dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
@@ -488,10 +489,12 @@ static int gmc_v6_0_gart_enable(struct amdgpu_device *adev)
488 WREG32(mmVM_L2_CNTL2, 489 WREG32(mmVM_L2_CNTL2,
489 VM_L2_CNTL2__INVALIDATE_ALL_L1_TLBS_MASK | 490 VM_L2_CNTL2__INVALIDATE_ALL_L1_TLBS_MASK |
490 VM_L2_CNTL2__INVALIDATE_L2_CACHE_MASK); 491 VM_L2_CNTL2__INVALIDATE_L2_CACHE_MASK);
492
493 field = adev->vm_manager.fragment_size;
491 WREG32(mmVM_L2_CNTL3, 494 WREG32(mmVM_L2_CNTL3,
492 VM_L2_CNTL3__L2_CACHE_BIGK_ASSOCIATIVITY_MASK | 495 VM_L2_CNTL3__L2_CACHE_BIGK_ASSOCIATIVITY_MASK |
493 (4UL << VM_L2_CNTL3__BANK_SELECT__SHIFT) | 496 (field << VM_L2_CNTL3__BANK_SELECT__SHIFT) |
494 (4UL << VM_L2_CNTL3__L2_CACHE_BIGK_FRAGMENT_SIZE__SHIFT)); 497 (field << VM_L2_CNTL3__L2_CACHE_BIGK_FRAGMENT_SIZE__SHIFT));
495 /* setup context0 */ 498 /* setup context0 */
496 WREG32(mmVM_CONTEXT0_PAGE_TABLE_START_ADDR, adev->mc.gart_start >> 12); 499 WREG32(mmVM_CONTEXT0_PAGE_TABLE_START_ADDR, adev->mc.gart_start >> 12);
497 WREG32(mmVM_CONTEXT0_PAGE_TABLE_END_ADDR, adev->mc.gart_end >> 12); 500 WREG32(mmVM_CONTEXT0_PAGE_TABLE_END_ADDR, adev->mc.gart_end >> 12);
@@ -812,6 +815,7 @@ static int gmc_v6_0_sw_init(void *handle)
812 return r; 815 return r;
813 816
814 amdgpu_vm_adjust_size(adev, 64); 817 amdgpu_vm_adjust_size(adev, 64);
818 adev->vm_manager.fragment_size = 4;
815 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 819 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
816 820
817 adev->mc.mc_mask = 0xffffffffffULL; 821 adev->mc.mc_mask = 0xffffffffffULL;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index 4a9e84062874..8ffdad954a4a 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -562,7 +562,7 @@ static void gmc_v7_0_set_prt(struct amdgpu_device *adev, bool enable)
562static int gmc_v7_0_gart_enable(struct amdgpu_device *adev) 562static int gmc_v7_0_gart_enable(struct amdgpu_device *adev)
563{ 563{
564 int r, i; 564 int r, i;
565 u32 tmp; 565 u32 tmp, field;
566 566
567 if (adev->gart.robj == NULL) { 567 if (adev->gart.robj == NULL) {
568 dev_err(adev->dev, "No VRAM object for PCIE GART.\n"); 568 dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
@@ -592,10 +592,12 @@ static int gmc_v7_0_gart_enable(struct amdgpu_device *adev)
592 tmp = REG_SET_FIELD(0, VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS, 1); 592 tmp = REG_SET_FIELD(0, VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS, 1);
593 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1); 593 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
594 WREG32(mmVM_L2_CNTL2, tmp); 594 WREG32(mmVM_L2_CNTL2, tmp);
595
596 field = adev->vm_manager.fragment_size;
595 tmp = RREG32(mmVM_L2_CNTL3); 597 tmp = RREG32(mmVM_L2_CNTL3);
596 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY, 1); 598 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY, 1);
597 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 4); 599 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
598 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 4); 600 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, field);
599 WREG32(mmVM_L2_CNTL3, tmp); 601 WREG32(mmVM_L2_CNTL3, tmp);
600 /* setup context0 */ 602 /* setup context0 */
601 WREG32(mmVM_CONTEXT0_PAGE_TABLE_START_ADDR, adev->mc.gart_start >> 12); 603 WREG32(mmVM_CONTEXT0_PAGE_TABLE_START_ADDR, adev->mc.gart_start >> 12);
@@ -949,6 +951,7 @@ static int gmc_v7_0_sw_init(void *handle)
949 * Max GPUVM size for cayman and SI is 40 bits. 951 * Max GPUVM size for cayman and SI is 40 bits.
950 */ 952 */
951 amdgpu_vm_adjust_size(adev, 64); 953 amdgpu_vm_adjust_size(adev, 64);
954 adev->vm_manager.fragment_size = 4;
952 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 955 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
953 956
954 /* Set the internal MC address mask 957 /* Set the internal MC address mask
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 85c937b5e40b..a13f6617de79 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -762,7 +762,7 @@ static void gmc_v8_0_set_prt(struct amdgpu_device *adev, bool enable)
762static int gmc_v8_0_gart_enable(struct amdgpu_device *adev) 762static int gmc_v8_0_gart_enable(struct amdgpu_device *adev)
763{ 763{
764 int r, i; 764 int r, i;
765 u32 tmp; 765 u32 tmp, field;
766 766
767 if (adev->gart.robj == NULL) { 767 if (adev->gart.robj == NULL) {
768 dev_err(adev->dev, "No VRAM object for PCIE GART.\n"); 768 dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
@@ -793,10 +793,12 @@ static int gmc_v8_0_gart_enable(struct amdgpu_device *adev)
793 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS, 1); 793 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS, 1);
794 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1); 794 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
795 WREG32(mmVM_L2_CNTL2, tmp); 795 WREG32(mmVM_L2_CNTL2, tmp);
796
797 field = adev->vm_manager.fragment_size;
796 tmp = RREG32(mmVM_L2_CNTL3); 798 tmp = RREG32(mmVM_L2_CNTL3);
797 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY, 1); 799 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY, 1);
798 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 4); 800 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
799 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 4); 801 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, field);
800 WREG32(mmVM_L2_CNTL3, tmp); 802 WREG32(mmVM_L2_CNTL3, tmp);
801 /* XXX: set to enable PTE/PDE in system memory */ 803 /* XXX: set to enable PTE/PDE in system memory */
802 tmp = RREG32(mmVM_L2_CNTL4); 804 tmp = RREG32(mmVM_L2_CNTL4);
@@ -1047,6 +1049,7 @@ static int gmc_v8_0_sw_init(void *handle)
1047 * Max GPUVM size for cayman and SI is 40 bits. 1049 * Max GPUVM size for cayman and SI is 40 bits.
1048 */ 1050 */
1049 amdgpu_vm_adjust_size(adev, 64); 1051 amdgpu_vm_adjust_size(adev, 64);
1052 adev->vm_manager.fragment_size = 4;
1050 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18; 1053 adev->vm_manager.max_pfn = adev->vm_manager.vm_size << 18;
1051 1054
1052 /* Set the internal MC address mask 1055 /* Set the internal MC address mask
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index c22899a08106..f721b4f4373e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -541,10 +541,12 @@ static int gmc_v9_0_sw_init(void *handle)
541 adev->vm_manager.vm_size = 1U << 18; 541 adev->vm_manager.vm_size = 1U << 18;
542 adev->vm_manager.block_size = 9; 542 adev->vm_manager.block_size = 9;
543 adev->vm_manager.num_level = 3; 543 adev->vm_manager.num_level = 3;
544 adev->vm_manager.fragment_size = 9;
544 } else { 545 } else {
545 /* vm_size is 64GB for legacy 2-level page support*/ 546 /* vm_size is 64GB for legacy 2-level page support*/
546 amdgpu_vm_adjust_size(adev, 64); 547 amdgpu_vm_adjust_size(adev, 64);
547 adev->vm_manager.num_level = 1; 548 adev->vm_manager.num_level = 1;
549 adev->vm_manager.fragment_size = 9;
548 } 550 }
549 break; 551 break;
550 case CHIP_VEGA10: 552 case CHIP_VEGA10:
@@ -558,14 +560,16 @@ static int gmc_v9_0_sw_init(void *handle)
558 adev->vm_manager.vm_size = 1U << 18; 560 adev->vm_manager.vm_size = 1U << 18;
559 adev->vm_manager.block_size = 9; 561 adev->vm_manager.block_size = 9;
560 adev->vm_manager.num_level = 3; 562 adev->vm_manager.num_level = 3;
563 adev->vm_manager.fragment_size = 9;
561 break; 564 break;
562 default: 565 default:
563 break; 566 break;
564 } 567 }
565 568
566 DRM_INFO("vm size is %llu GB, block size is %u-bit\n", 569 DRM_INFO("vm size is %llu GB, block size is %u-bit,fragment size is %u-bit\n",
567 adev->vm_manager.vm_size, 570 adev->vm_manager.vm_size,
568 adev->vm_manager.block_size); 571 adev->vm_manager.block_size,
572 adev->vm_manager.fragment_size);
569 573
570 /* This interrupt is VMC page fault.*/ 574 /* This interrupt is VMC page fault.*/
571 r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_VMC, 0, 575 r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_VMC, 0,
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
index 74cb647da30e..4395a4f12149 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -138,7 +138,7 @@ static void mmhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
138 138
139static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev) 139static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
140{ 140{
141 uint32_t tmp; 141 uint32_t tmp, field;
142 142
143 /* Setup L2 cache */ 143 /* Setup L2 cache */
144 tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL); 144 tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL);
@@ -157,8 +157,9 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
157 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1); 157 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
158 WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL2, tmp); 158 WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL2, tmp);
159 159
160 field = adev->vm_manager.fragment_size;
160 tmp = mmVM_L2_CNTL3_DEFAULT; 161 tmp = mmVM_L2_CNTL3_DEFAULT;
161 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9); 162 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
162 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6); 163 tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
163 WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, tmp); 164 WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, tmp);
164 165