diff options
author | Roger He <Hongbo.He@amd.com> | 2017-08-11 08:00:41 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-08-17 15:46:08 -0400 |
commit | e618d306ded38dc9d37c04dc37e24bf9d62e9c7b (patch) | |
tree | 9373307774e178887e6723a13ecc0c1e9ac8b705 | |
parent | 27c7b9aeecd7c06a3b527795807c19a0bbe25c1e (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.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 5 |
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 | ||
125 | static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev) | 125 | static 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) | |||
461 | static int gmc_v6_0_gart_enable(struct amdgpu_device *adev) | 461 | static 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) | |||
562 | static int gmc_v7_0_gart_enable(struct amdgpu_device *adev) | 562 | static 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) | |||
762 | static int gmc_v8_0_gart_enable(struct amdgpu_device *adev) | 762 | static 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 | ||
139 | static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev) | 139 | static 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 | ||