aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch347
1 files changed, 347 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch
new file mode 100644
index 00000000..145a9aaf
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2205-drm-amdgpu-cleanup-GMC-gart-garbage-function.patch
@@ -0,0 +1,347 @@
+From 344b4764c8c1014888556a38a8bb92d66fec2649 Mon Sep 17 00:00:00 2001
+From: Monk Liu <Monk.Liu@amd.com>
+Date: Tue, 14 Nov 2017 11:52:35 +0800
+Subject: [PATCH 2205/4131] drm/amdgpu:cleanup GMC & gart garbage function
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+for gart_ram_alloc/free, they are never used in driver thus
+ripe them out totally.
+
+for gart_vram_pin/unpin, they are not needed becuase we can
+use bo_creat_kernel/free to replace the original manual way
+in the gart_vram_alloc/free, thus gart_vram_pin/unpin can
+also be riped out.
+
+Change-Id: Ic60949b59d8b363e5199f6c11d9ea4a15ec57519
+Signed-off-by: Monk Liu <Monk.Liu@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 136 ++-----------------------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h | 4 -
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 -
+ drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c | 7 +-
+ drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c | 7 +-
+ drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c | 7 +-
+ drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 6 +-
+ 7 files changed, 13 insertions(+), 156 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+index fe81850..10eeb30 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+@@ -57,63 +57,6 @@
+ */
+
+ /**
+- * amdgpu_gart_table_ram_alloc - allocate system ram for gart page table
+- *
+- * @adev: amdgpu_device pointer
+- *
+- * Allocate system memory for GART page table
+- * (r1xx-r3xx, non-pcie r4xx, rs400). These asics require the
+- * gart table to be in system memory.
+- * Returns 0 for success, -ENOMEM for failure.
+- */
+-int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev)
+-{
+- void *ptr;
+-
+- ptr = pci_alloc_consistent(adev->pdev, adev->gart.table_size,
+- &adev->gart.table_addr);
+- if (ptr == NULL) {
+- return -ENOMEM;
+- }
+-#ifdef CONFIG_X86
+- if (0) {
+- set_memory_uc((unsigned long)ptr,
+- adev->gart.table_size >> PAGE_SHIFT);
+- }
+-#endif
+- adev->gart.ptr = ptr;
+- memset((void *)adev->gart.ptr, 0, adev->gart.table_size);
+- return 0;
+-}
+-
+-/**
+- * amdgpu_gart_table_ram_free - free system ram for gart page table
+- *
+- * @adev: amdgpu_device pointer
+- *
+- * Free system memory for GART page table
+- * (r1xx-r3xx, non-pcie r4xx, rs400). These asics require the
+- * gart table to be in system memory.
+- */
+-void amdgpu_gart_table_ram_free(struct amdgpu_device *adev)
+-{
+- if (adev->gart.ptr == NULL) {
+- return;
+- }
+-#ifdef CONFIG_X86
+- if (0) {
+- set_memory_wb((unsigned long)adev->gart.ptr,
+- adev->gart.table_size >> PAGE_SHIFT);
+- }
+-#endif
+- pci_free_consistent(adev->pdev, adev->gart.table_size,
+- (void *)adev->gart.ptr,
+- adev->gart.table_addr);
+- adev->gart.ptr = NULL;
+- adev->gart.table_addr = 0;
+-}
+-
+-/**
+ * amdgpu_gart_table_vram_alloc - allocate vram for gart page table
+ *
+ * @adev: amdgpu_device pointer
+@@ -125,75 +68,9 @@ void amdgpu_gart_table_ram_free(struct amdgpu_device *adev)
+ */
+ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev)
+ {
+- int r;
+-
+- if (adev->gart.robj == NULL) {
+- r = amdgpu_bo_create(adev, adev->gart.table_size,
+- PAGE_SIZE, true, AMDGPU_GEM_DOMAIN_VRAM,
+- AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+- AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+- NULL, NULL, 0, &adev->gart.robj);
+- if (r) {
+- return r;
+- }
+- }
+- return 0;
+-}
+-
+-/**
+- * amdgpu_gart_table_vram_pin - pin gart page table in vram
+- *
+- * @adev: amdgpu_device pointer
+- *
+- * Pin the GART page table in vram so it will not be moved
+- * by the memory manager (pcie r4xx, r5xx+). These asics require the
+- * gart table to be in video memory.
+- * Returns 0 for success, error for failure.
+- */
+-int amdgpu_gart_table_vram_pin(struct amdgpu_device *adev)
+-{
+- uint64_t gpu_addr;
+- int r;
+-
+- r = amdgpu_bo_reserve(adev->gart.robj, false);
+- if (unlikely(r != 0))
+- return r;
+- r = amdgpu_bo_pin(adev->gart.robj,
+- AMDGPU_GEM_DOMAIN_VRAM, &gpu_addr);
+- if (r) {
+- amdgpu_bo_unreserve(adev->gart.robj);
+- return r;
+- }
+- r = amdgpu_bo_kmap(adev->gart.robj, &adev->gart.ptr);
+- if (r)
+- amdgpu_bo_unpin(adev->gart.robj);
+- amdgpu_bo_unreserve(adev->gart.robj);
+- adev->gart.table_addr = gpu_addr;
+- return r;
+-}
+-
+-/**
+- * amdgpu_gart_table_vram_unpin - unpin gart page table in vram
+- *
+- * @adev: amdgpu_device pointer
+- *
+- * Unpin the GART page table in vram (pcie r4xx, r5xx+).
+- * These asics require the gart table to be in video memory.
+- */
+-void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev)
+-{
+- int r;
+-
+- if (adev->gart.robj == NULL) {
+- return;
+- }
+- r = amdgpu_bo_reserve(adev->gart.robj, true);
+- if (likely(r == 0)) {
+- amdgpu_bo_kunmap(adev->gart.robj);
+- amdgpu_bo_unpin(adev->gart.robj);
+- amdgpu_bo_unreserve(adev->gart.robj);
+- adev->gart.ptr = NULL;
+- }
++ return amdgpu_bo_create_kernel(adev, adev->gart.table_size, PAGE_SIZE,
++ AMDGPU_GEM_DOMAIN_VRAM, &adev->gart.robj,
++ &adev->gart.table_addr, &adev->gart.ptr);
+ }
+
+ /**
+@@ -207,10 +84,9 @@ void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev)
+ */
+ void amdgpu_gart_table_vram_free(struct amdgpu_device *adev)
+ {
+- if (adev->gart.robj == NULL) {
+- return;
+- }
+- amdgpu_bo_unref(&adev->gart.robj);
++ amdgpu_bo_free_kernel(&adev->gart.robj,
++ &adev->gart.table_addr,
++ &adev->gart.ptr);
+ }
+
+ /*
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
+index afbe803..f15e319 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
+@@ -56,12 +56,8 @@ struct amdgpu_gart {
+ const struct amdgpu_gart_funcs *gart_funcs;
+ };
+
+-int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev);
+-void amdgpu_gart_table_ram_free(struct amdgpu_device *adev);
+ int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev);
+ void amdgpu_gart_table_vram_free(struct amdgpu_device *adev);
+-int amdgpu_gart_table_vram_pin(struct amdgpu_device *adev);
+-void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev);
+ int amdgpu_gart_init(struct amdgpu_device *adev);
+ void amdgpu_gart_fini(struct amdgpu_device *adev);
+ int amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+index dc1bad5..b905a25 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+@@ -1634,8 +1634,6 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
+
+ void amdgpu_ttm_fini(struct amdgpu_device *adev)
+ {
+- int r;
+-
+ if (!adev->mman.initialized)
+ return;
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+index c9f144d..1e6e50a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+@@ -477,16 +477,14 @@ static void gmc_v6_0_set_prt(struct amdgpu_device *adev, bool enable)
+
+ static int gmc_v6_0_gart_enable(struct amdgpu_device *adev)
+ {
+- int r, i;
++ int i;
+ u32 field;
+
+ if (adev->gart.robj == NULL) {
+ dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
+ return -EINVAL;
+ }
+- r = amdgpu_gart_table_vram_pin(adev);
+- if (r)
+- return r;
++
+ /* Setup TLB control */
+ WREG32(mmMC_VM_MX_L1_TLB_CNTL,
+ (0xA << 7) |
+@@ -613,7 +611,6 @@ static void gmc_v6_0_gart_disable(struct amdgpu_device *adev)
+ WREG32(mmVM_L2_CNTL3,
+ VM_L2_CNTL3__L2_CACHE_BIGK_ASSOCIATIVITY_MASK |
+ (0UL << VM_L2_CNTL3__L2_CACHE_BIGK_FRAGMENT_SIZE__SHIFT));
+- amdgpu_gart_table_vram_unpin(adev);
+ }
+
+ static void gmc_v6_0_gart_fini(struct amdgpu_device *adev)
+diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+index cf23c70..2e0cc17 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+@@ -582,16 +582,14 @@ static void gmc_v7_0_set_prt(struct amdgpu_device *adev, bool enable)
+ */
+ static int gmc_v7_0_gart_enable(struct amdgpu_device *adev)
+ {
+- int r, i;
++ int i;
+ u32 tmp, field;
+
+ if (adev->gart.robj == NULL) {
+ dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
+ return -EINVAL;
+ }
+- r = amdgpu_gart_table_vram_pin(adev);
+- if (r)
+- return r;
++
+ /* Setup TLB control */
+ tmp = RREG32(mmMC_VM_MX_L1_TLB_CNTL);
+ tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, 1);
+@@ -724,7 +722,6 @@ static void gmc_v7_0_gart_disable(struct amdgpu_device *adev)
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 0);
+ WREG32(mmVM_L2_CNTL, tmp);
+ WREG32(mmVM_L2_CNTL2, 0);
+- amdgpu_gart_table_vram_unpin(adev);
+ }
+
+ /**
+diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+index 868dff2..4529af5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+@@ -785,16 +785,14 @@ static void gmc_v8_0_set_prt(struct amdgpu_device *adev, bool enable)
+ */
+ static int gmc_v8_0_gart_enable(struct amdgpu_device *adev)
+ {
+- int r, i;
++ int i;
+ u32 tmp, field;
+
+ if (adev->gart.robj == NULL) {
+ dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
+ return -EINVAL;
+ }
+- r = amdgpu_gart_table_vram_pin(adev);
+- if (r)
+- return r;
++
+ /* Setup TLB control */
+ tmp = RREG32(mmMC_VM_MX_L1_TLB_CNTL);
+ tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, 1);
+@@ -944,7 +942,6 @@ static void gmc_v8_0_gart_disable(struct amdgpu_device *adev)
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 0);
+ WREG32(mmVM_L2_CNTL, tmp);
+ WREG32(mmVM_L2_CNTL2, 0);
+- amdgpu_gart_table_vram_unpin(adev);
+ }
+
+ /**
+diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+index 4b5adf7..205195c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+@@ -866,7 +866,7 @@ static int gmc_v9_0_sw_init(void *handle)
+ }
+
+ /**
+- * gmc_v8_0_gart_fini - vm fini callback
++ * gmc_v9_0_gart_fini - vm fini callback
+ *
+ * @adev: amdgpu_device pointer
+ *
+@@ -930,9 +930,6 @@ static int gmc_v9_0_gart_enable(struct amdgpu_device *adev)
+ dev_err(adev->dev, "No VRAM object for PCIE GART.\n");
+ return -EINVAL;
+ }
+- r = amdgpu_gart_table_vram_pin(adev);
+- if (r)
+- return r;
+
+ switch (adev->asic_type) {
+ case CHIP_RAVEN:
+@@ -1010,7 +1007,6 @@ static void gmc_v9_0_gart_disable(struct amdgpu_device *adev)
+ {
+ gfxhub_v1_0_gart_disable(adev);
+ mmhub_v1_0_gart_disable(adev);
+- amdgpu_gart_table_vram_unpin(adev);
+ }
+
+ static int gmc_v9_0_hw_fini(void *handle)
+--
+2.7.4
+