Commit c103a23f authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Thomas Hellström

drm/amd: Convert amdgpu to use suballocation helper.

Now that we have a generic suballocation helper, Use it in amdgpu.
For lines that get moved or changed, also fix up pre-existing style issues.
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Co-developed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Acked-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230224095152.30134-3-thomas.hellstrom@linux.intel.com
parent 849ee8a2
...@@ -18,6 +18,7 @@ config DRM_AMDGPU ...@@ -18,6 +18,7 @@ config DRM_AMDGPU
select BACKLIGHT_CLASS_DEVICE select BACKLIGHT_CLASS_DEVICE
select INTERVAL_TREE select INTERVAL_TREE
select DRM_BUDDY select DRM_BUDDY
select DRM_SUBALLOC_HELPER
# amdgpu depends on ACPI_VIDEO when ACPI is enabled, for select to work # amdgpu depends on ACPI_VIDEO when ACPI is enabled, for select to work
# ACPI_VIDEO's dependencies must also be selected. # ACPI_VIDEO's dependencies must also be selected.
select INPUT if ACPI select INPUT if ACPI
......
...@@ -423,29 +423,11 @@ struct amdgpu_clock { ...@@ -423,29 +423,11 @@ struct amdgpu_clock {
* alignment). * alignment).
*/ */
#define AMDGPU_SA_NUM_FENCE_LISTS 32
struct amdgpu_sa_manager { struct amdgpu_sa_manager {
wait_queue_head_t wq; struct drm_suballoc_manager base;
struct amdgpu_bo *bo; struct amdgpu_bo *bo;
struct list_head *hole; uint64_t gpu_addr;
struct list_head flist[AMDGPU_SA_NUM_FENCE_LISTS]; void *cpu_ptr;
struct list_head olist;
unsigned size;
uint64_t gpu_addr;
void *cpu_ptr;
uint32_t domain;
uint32_t align;
};
/* sub-allocation buffer */
struct amdgpu_sa_bo {
struct list_head olist;
struct list_head flist;
struct amdgpu_sa_manager *manager;
unsigned soffset;
unsigned eoffset;
struct dma_fence *fence;
}; };
int amdgpu_fence_slab_init(void); int amdgpu_fence_slab_init(void);
......
...@@ -69,7 +69,7 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm, ...@@ -69,7 +69,7 @@ int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm,
if (size) { if (size) {
r = amdgpu_sa_bo_new(&adev->ib_pools[pool_type], r = amdgpu_sa_bo_new(&adev->ib_pools[pool_type],
&ib->sa_bo, size, 256); &ib->sa_bo, size);
if (r) { if (r) {
dev_err(adev->dev, "failed to get a new IB (%d)\n", r); dev_err(adev->dev, "failed to get a new IB (%d)\n", r);
return r; return r;
...@@ -309,8 +309,7 @@ int amdgpu_ib_pool_init(struct amdgpu_device *adev) ...@@ -309,8 +309,7 @@ int amdgpu_ib_pool_init(struct amdgpu_device *adev)
for (i = 0; i < AMDGPU_IB_POOL_MAX; i++) { for (i = 0; i < AMDGPU_IB_POOL_MAX; i++) {
r = amdgpu_sa_bo_manager_init(adev, &adev->ib_pools[i], r = amdgpu_sa_bo_manager_init(adev, &adev->ib_pools[i],
AMDGPU_IB_POOL_SIZE, AMDGPU_IB_POOL_SIZE, 256,
AMDGPU_GPU_PAGE_SIZE,
AMDGPU_GEM_DOMAIN_GTT); AMDGPU_GEM_DOMAIN_GTT);
if (r) if (r)
goto error; goto error;
......
...@@ -336,15 +336,22 @@ uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev, ...@@ -336,15 +336,22 @@ uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev,
/* /*
* sub allocation * sub allocation
*/ */
static inline struct amdgpu_sa_manager *
to_amdgpu_sa_manager(struct drm_suballoc_manager *manager)
{
return container_of(manager, struct amdgpu_sa_manager, base);
}
static inline uint64_t amdgpu_sa_bo_gpu_addr(struct amdgpu_sa_bo *sa_bo) static inline uint64_t amdgpu_sa_bo_gpu_addr(struct drm_suballoc *sa_bo)
{ {
return sa_bo->manager->gpu_addr + sa_bo->soffset; return to_amdgpu_sa_manager(sa_bo->manager)->gpu_addr +
drm_suballoc_soffset(sa_bo);
} }
static inline void * amdgpu_sa_bo_cpu_addr(struct amdgpu_sa_bo *sa_bo) static inline void *amdgpu_sa_bo_cpu_addr(struct drm_suballoc *sa_bo)
{ {
return sa_bo->manager->cpu_ptr + sa_bo->soffset; return to_amdgpu_sa_manager(sa_bo->manager)->cpu_ptr +
drm_suballoc_soffset(sa_bo);
} }
int amdgpu_sa_bo_manager_init(struct amdgpu_device *adev, int amdgpu_sa_bo_manager_init(struct amdgpu_device *adev,
...@@ -355,11 +362,11 @@ void amdgpu_sa_bo_manager_fini(struct amdgpu_device *adev, ...@@ -355,11 +362,11 @@ void amdgpu_sa_bo_manager_fini(struct amdgpu_device *adev,
int amdgpu_sa_bo_manager_start(struct amdgpu_device *adev, int amdgpu_sa_bo_manager_start(struct amdgpu_device *adev,
struct amdgpu_sa_manager *sa_manager); struct amdgpu_sa_manager *sa_manager);
int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager, int amdgpu_sa_bo_new(struct amdgpu_sa_manager *sa_manager,
struct amdgpu_sa_bo **sa_bo, struct drm_suballoc **sa_bo,
unsigned size, unsigned align); unsigned int size);
void amdgpu_sa_bo_free(struct amdgpu_device *adev, void amdgpu_sa_bo_free(struct amdgpu_device *adev,
struct amdgpu_sa_bo **sa_bo, struct drm_suballoc **sa_bo,
struct dma_fence *fence); struct dma_fence *fence);
#if defined(CONFIG_DEBUG_FS) #if defined(CONFIG_DEBUG_FS)
void amdgpu_sa_bo_dump_debug_info(struct amdgpu_sa_manager *sa_manager, void amdgpu_sa_bo_dump_debug_info(struct amdgpu_sa_manager *sa_manager,
struct seq_file *m); struct seq_file *m);
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <drm/amdgpu_drm.h> #include <drm/amdgpu_drm.h>
#include <drm/gpu_scheduler.h> #include <drm/gpu_scheduler.h>
#include <drm/drm_print.h> #include <drm/drm_print.h>
#include <drm/drm_suballoc.h>
struct amdgpu_device; struct amdgpu_device;
struct amdgpu_ring; struct amdgpu_ring;
...@@ -92,7 +93,7 @@ enum amdgpu_ib_pool_type { ...@@ -92,7 +93,7 @@ enum amdgpu_ib_pool_type {
}; };
struct amdgpu_ib { struct amdgpu_ib {
struct amdgpu_sa_bo *sa_bo; struct drm_suballoc *sa_bo;
uint32_t length_dw; uint32_t length_dw;
uint64_t gpu_addr; uint64_t gpu_addr;
uint32_t *ptr; uint32_t *ptr;
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment