Am 14.11.2017 um 10:07 schrieb Monk Liu: > 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 at amd.com> Nice, wanted to do this for a long time as well. Patch is Reviewed-by: Christian König <christian.koenig at 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 e195e3c..4b5ec15 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c > @@ -59,63 +59,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 > @@ -127,75 +70,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); > } > > /** > @@ -209,10 +86,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 cf21b38..e8401a9 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; > amdgpu_ttm_debugfs_fini(adev); > diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c > index f4603a7..aac493b 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 322edfe..dede91a 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 ed6b88f..847c046 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 3a855e0..d0acf26 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c > @@ -651,7 +651,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 > * > @@ -715,9 +715,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: > @@ -795,7 +792,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)