drivers/gpu/drm/via/init_ttm.c | 137 ----------------------------------------- drivers/gpu/drm/via/via_drv.h | 4 - drivers/gpu/drm/via/via_mem.h | 36 +++++----- drivers/gpu/drm/via/via_ttm.c | 137 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 157 insertions(+), 157 deletions(-)
New commits: commit ad98a5a420743050d37d886942ceaada39cdf8ed Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Jan 19 22:22:07 2017 -0600 Version bumped to 3.0.15 Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h index dd7f03f..0ac0c2c 100644 --- a/drivers/gpu/drm/via/via_drv.h +++ b/drivers/gpu/drm/via/via_drv.h @@ -27,11 +27,11 @@ #define DRIVER_AUTHOR "The OpenChrome Project" #define DRIVER_NAME "via" #define DRIVER_DESC "OpenChrome DRM for VIA Technologies Chrome IGP" -#define DRIVER_DATE "20170117" +#define DRIVER_DATE "20170118" #define DRIVER_MAJOR 3 #define DRIVER_MINOR 0 -#define DRIVER_PATCHLEVEL 14 +#define DRIVER_PATCHLEVEL 15 #include <linux/module.h> commit 05e74009d66f1feed2e2e0f7af282110693c94c2 Author: Kevin Brace <kevinbr...@gmx.com> Date: Thu Jan 19 22:20:33 2017 -0600 Moved most functions out of init_ttm.c Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/via/init_ttm.c b/drivers/gpu/drm/via/init_ttm.c index b574765..0fe0565 100644 --- a/drivers/gpu/drm/via/init_ttm.c +++ b/drivers/gpu/drm/via/init_ttm.c @@ -24,143 +24,6 @@ #include "drmP.h" #include "via_mem.h" -static void -ttm_buffer_object_destroy(struct ttm_buffer_object *bo) -{ - struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); - - kfree(heap); - heap = NULL; -} - -/* - * the buffer object domain - */ -void -ttm_placement_from_domain(struct ttm_buffer_object *bo, struct ttm_placement *placement, u32 domains, - struct ttm_bo_device *bdev) -{ - struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); - int cnt = 0, i = 0; - - if (!(domains & TTM_PL_MASK_MEM)) - domains = TTM_PL_FLAG_SYSTEM; - - do { - int domain = (domains & (1 << i)); - - if (domain) { - heap->busy_placements[cnt].flags = (domain | bdev->man[i].default_caching); - heap->busy_placements[cnt].fpfn = heap->busy_placements[cnt].lpfn = 0; - heap->placements[cnt].flags = (domain | bdev->man[i].available_caching); - heap->placements[cnt].fpfn = heap->placements[cnt].lpfn = 0; - cnt++; - } - } while (i++ < TTM_NUM_MEM_TYPES); - - placement->num_busy_placement = placement->num_placement = cnt; - placement->busy_placement = heap->busy_placements; - placement->placement = heap->placements; -} - -int -via_bo_create(struct ttm_bo_device *bdev, - unsigned long size, - enum ttm_bo_type origin, - uint32_t domains, - uint32_t byte_align, - uint32_t page_align, - bool interruptible, - struct sg_table *sg, - struct reservation_object *resv, - struct ttm_buffer_object **p_bo) -{ - struct ttm_buffer_object *bo = NULL; - struct ttm_placement placement; - struct ttm_heap *heap; - size_t acc_size; - int ret = -ENOMEM; - - DRM_DEBUG("Entered via_bo_create.\n"); - - size = round_up(size, byte_align); - size = ALIGN(size, page_align); - - heap = kzalloc(sizeof(struct ttm_heap), GFP_KERNEL); - if (unlikely(!heap)) { - DRM_ERROR("Failed to allocate kernel memory."); - goto exit; - } - - bo = &heap->pbo; - - ttm_placement_from_domain(bo, &placement, domains, bdev); - - acc_size = ttm_bo_dma_acc_size(bdev, size, - sizeof(struct ttm_heap)); - - ret = ttm_bo_init(bdev, bo, size, origin, &placement, - page_align >> PAGE_SHIFT, - interruptible, NULL, acc_size, - sg, NULL, ttm_buffer_object_destroy); - - if (unlikely(ret)) { - DRM_ERROR("Failed to initialize a TTM Buffer Object."); - goto error; - } - - *p_bo = bo; - goto exit; -error: - kfree(heap); -exit: - DRM_DEBUG("Exiting via_bo_create.\n"); - return ret; -} - -int -via_bo_pin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap) -{ - struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); - struct ttm_placement placement; - int ret; - - ret = ttm_bo_reserve(bo, true, false, false, 0); - if (!ret) { - placement.placement = heap->placements; - placement.num_placement = 1; - - heap->placements[0].flags = (bo->mem.placement | TTM_PL_FLAG_NO_EVICT); - ret = ttm_bo_validate(bo, &placement, false, false); - if (!ret && kmap) - ret = ttm_bo_kmap(bo, 0, bo->num_pages, kmap); - ttm_bo_unreserve(bo); - } - return ret; -} - -int -ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap) -{ - struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); - struct ttm_placement placement; - int ret; - - ret = ttm_bo_reserve(bo, true, false, false, 0); - if (!ret) { - if (kmap) - ttm_bo_kunmap(kmap); - - placement.placement = heap->placements; - placement.num_placement = 1; - - heap->placements[0].flags = (bo->mem.placement & ~TTM_PL_FLAG_NO_EVICT); - ret = ttm_bo_validate(bo, &placement, false, false); - ttm_bo_unreserve(bo); - } - return ret; -} - int ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, unsigned long size, uint32_t alignment, uint32_t domain, diff --git a/drivers/gpu/drm/via/via_mem.h b/drivers/gpu/drm/via/via_mem.h index 350d622..d2b64e8 100644 --- a/drivers/gpu/drm/via/via_mem.h +++ b/drivers/gpu/drm/via/via_mem.h @@ -35,6 +35,10 @@ struct ttm_heap { struct ttm_buffer_object pbo; }; +extern int ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, unsigned long size, + uint32_t alignment, uint32_t domain, + struct ttm_bo_kmap_obj *kmap); + extern void via_ttm_global_release(struct drm_global_reference *global_ref, struct ttm_bo_global_ref *global_bo, struct ttm_bo_device *bdev); @@ -45,26 +49,18 @@ extern int via_ttm_global_init(struct drm_global_reference *global_ref, struct drm_device *dev, bool dma32); extern int via_ttm_init(struct drm_device *dev); -extern struct ttm_tt * -via_sgdma_backend_init(struct ttm_bo_device *bdev, unsigned long size, - uint32_t page_flags, struct page *dummy_read_page); - - -extern int via_bo_create(struct ttm_bo_device *bdev, unsigned long size, - enum ttm_bo_type origin, uint32_t domains, - uint32_t byte_align, uint32_t page_align, - bool interruptible, struct sg_table *sg, - struct reservation_object *resv, - struct ttm_buffer_object **p_bo); +void via_mm_fini(struct drm_device *dev); extern void ttm_placement_from_domain(struct ttm_buffer_object *bo, - struct ttm_placement *placement, - u32 domains, struct ttm_bo_device *bdev); -extern int ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap); + struct ttm_placement *placement, + u32 domains, struct ttm_bo_device *bdev); +extern int via_bo_create(struct ttm_bo_device *bdev, unsigned long size, + enum ttm_bo_type origin, uint32_t domains, + uint32_t byte_align, uint32_t page_align, + bool interruptible, struct sg_table *sg, + struct reservation_object *resv, + struct ttm_buffer_object **p_bo); extern int via_bo_pin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap); -extern int ttm_allocate_kernel_buffer(struct ttm_bo_device *bdev, unsigned long size, - uint32_t alignment, uint32_t domain, - struct ttm_bo_kmap_obj *kmap); -void via_mm_fini(struct drm_device *dev); +extern int ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap); extern int ttm_mmap(struct file *filp, struct vm_area_struct *vma); @@ -78,4 +74,8 @@ extern struct drm_gem_object *ttm_gem_create(struct drm_device *dev, unsigned long size); extern struct ttm_buffer_object *ttm_gem_mapping(struct drm_gem_object *obj); +extern struct ttm_tt * +via_sgdma_backend_init(struct ttm_bo_device *bdev, unsigned long size, + uint32_t page_flags, struct page *dummy_read_page); + #endif /* _VIA_MEM_H_ */ diff --git a/drivers/gpu/drm/via/via_ttm.c b/drivers/gpu/drm/via/via_ttm.c index 5357849..6d55ae3 100644 --- a/drivers/gpu/drm/via/via_ttm.c +++ b/drivers/gpu/drm/via/via_ttm.c @@ -106,6 +106,15 @@ via_ttm_global_init(struct drm_global_reference *global_ref, return rc; } +static void +ttm_buffer_object_destroy(struct ttm_buffer_object *bo) +{ + struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); + + kfree(heap); + heap = NULL; +} + static struct ttm_tt * via_ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size, uint32_t page_flags, struct page *dummy_read_page) @@ -589,3 +598,131 @@ void via_mm_fini(struct drm_device *dev) DRM_DEBUG("Exiting via_mm_fini.\n"); } + +/* + * the buffer object domain + */ +void +ttm_placement_from_domain(struct ttm_buffer_object *bo, struct ttm_placement *placement, u32 domains, + struct ttm_bo_device *bdev) +{ + struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); + int cnt = 0, i = 0; + + if (!(domains & TTM_PL_MASK_MEM)) + domains = TTM_PL_FLAG_SYSTEM; + + do { + int domain = (domains & (1 << i)); + + if (domain) { + heap->busy_placements[cnt].flags = (domain | bdev->man[i].default_caching); + heap->busy_placements[cnt].fpfn = heap->busy_placements[cnt].lpfn = 0; + heap->placements[cnt].flags = (domain | bdev->man[i].available_caching); + heap->placements[cnt].fpfn = heap->placements[cnt].lpfn = 0; + cnt++; + } + } while (i++ < TTM_NUM_MEM_TYPES); + + placement->num_busy_placement = placement->num_placement = cnt; + placement->busy_placement = heap->busy_placements; + placement->placement = heap->placements; +} + +int +via_bo_create(struct ttm_bo_device *bdev, + unsigned long size, + enum ttm_bo_type origin, + uint32_t domains, + uint32_t byte_align, + uint32_t page_align, + bool interruptible, + struct sg_table *sg, + struct reservation_object *resv, + struct ttm_buffer_object **p_bo) +{ + struct ttm_buffer_object *bo = NULL; + struct ttm_placement placement; + struct ttm_heap *heap; + size_t acc_size; + int ret = -ENOMEM; + + DRM_DEBUG("Entered via_bo_create.\n"); + + size = round_up(size, byte_align); + size = ALIGN(size, page_align); + + heap = kzalloc(sizeof(struct ttm_heap), GFP_KERNEL); + if (unlikely(!heap)) { + DRM_ERROR("Failed to allocate kernel memory."); + goto exit; + } + + bo = &heap->pbo; + + ttm_placement_from_domain(bo, &placement, domains, bdev); + + acc_size = ttm_bo_dma_acc_size(bdev, size, + sizeof(struct ttm_heap)); + + ret = ttm_bo_init(bdev, bo, size, origin, &placement, + page_align >> PAGE_SHIFT, + interruptible, NULL, acc_size, + sg, NULL, ttm_buffer_object_destroy); + + if (unlikely(ret)) { + DRM_ERROR("Failed to initialize a TTM Buffer Object."); + goto error; + } + + *p_bo = bo; + goto exit; +error: + kfree(heap); +exit: + DRM_DEBUG("Exiting via_bo_create.\n"); + return ret; +} + +int +via_bo_pin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap) +{ + struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); + struct ttm_placement placement; + int ret; + + ret = ttm_bo_reserve(bo, true, false, false, 0); + if (!ret) { + placement.placement = heap->placements; + placement.num_placement = 1; + + heap->placements[0].flags = (bo->mem.placement | TTM_PL_FLAG_NO_EVICT); + ret = ttm_bo_validate(bo, &placement, false, false); + if (!ret && kmap) + ret = ttm_bo_kmap(bo, 0, bo->num_pages, kmap); + ttm_bo_unreserve(bo); + } + return ret; +} + +int +ttm_bo_unpin(struct ttm_buffer_object *bo, struct ttm_bo_kmap_obj *kmap) +{ + struct ttm_heap *heap = container_of(bo, struct ttm_heap, pbo); + struct ttm_placement placement; + int ret; + + ret = ttm_bo_reserve(bo, true, false, false, 0); + if (!ret) { + if (kmap) + ttm_bo_kunmap(kmap); + + placement.placement = heap->placements; + placement.num_placement = 1; + + heap->placements[0].flags = (bo->mem.placement & ~TTM_PL_FLAG_NO_EVICT); + ret = ttm_bo_validate(bo, &placement, false, false); + ttm_bo_unreserve(bo); + } + return ret; +} _______________________________________________ Openchrome-devel mailing list Openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel