drivers/gpu/drm/openchrome/openchrome_crtc.c | 2 drivers/gpu/drm/openchrome/openchrome_drv.c | 2 drivers/gpu/drm/openchrome/openchrome_drv.h | 10 +- drivers/gpu/drm/openchrome/openchrome_fb.c | 23 +++--- drivers/gpu/drm/openchrome/openchrome_ioctl.c | 3 drivers/gpu/drm/openchrome/openchrome_object.c | 25 ++++--- drivers/gpu/drm/openchrome/openchrome_ttm.c | 85 +++++++++---------------- 7 files changed, 67 insertions(+), 83 deletions(-)
New commits: commit 84cc9003a62d5b6bac8006ba24d9ee2084b88f34 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 16:38:57 2020 -0700 drm/openchrome: Version bumped to 3.4.0 TTM discontinued TTM_PL_FLAG_SYSTEM, TTM_PL_FLAG_TT, and TTM_PL_FLAG_VRAM placement flag macros. Since OpenChrome DDX was passing them to OpenChrome DRM, there is now a uAPI breakage. Instead, pass TTM placement macros. Increment the minor version number to indicate a uAPI change. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h index 3a6f3efbbc42..22b85efaefaa 100644 --- a/drivers/gpu/drm/openchrome/openchrome_drv.h +++ b/drivers/gpu/drm/openchrome/openchrome_drv.h @@ -60,11 +60,11 @@ #define DRIVER_MAJOR 3 -#define DRIVER_MINOR 3 -#define DRIVER_PATCHLEVEL 8 +#define DRIVER_MINOR 4 +#define DRIVER_PATCHLEVEL 0 #define DRIVER_NAME "openchrome" #define DRIVER_DESC "OpenChrome DRM for VIA Technologies Chrome IGP" -#define DRIVER_DATE "20200916" +#define DRIVER_DATE "20201027" #define DRIVER_AUTHOR "OpenChrome Project" commit 7f3bee19fa33ca4b535a670d076b6a0c87b21498 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:42:34 2020 -0700 drm/ttm: remove available_caching Based on commit 9c3006a (drm/ttm: remove available_caching). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index c605234ef72f..24b421672a58 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -273,7 +273,6 @@ int openchrome_mm_init(struct openchrome_drm_private *dev_private) * Initialize TTM range manager for VRAM management. */ ret = ttm_range_man_init(&dev_private->bdev, TTM_PL_VRAM, - TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC, false, dev_private->vram_size >> PAGE_SHIFT); if (ret) { commit 8ad671b1372393a48a6699a41cf94e2622d3b7c0 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:42:26 2020 -0700 drm/ttm: remove default caching Based on commit 0fe438c (drm/ttm: remove default caching). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index da5a79607656..c605234ef72f 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -274,7 +274,6 @@ int openchrome_mm_init(struct openchrome_drm_private *dev_private) */ ret = ttm_range_man_init(&dev_private->bdev, TTM_PL_VRAM, TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC, - TTM_PL_FLAG_WC, false, dev_private->vram_size >> PAGE_SHIFT); if (ret) { commit 6fba8723e9ff19da66d6d7b415314a3b30df44a3 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:42:19 2020 -0700 drm/ttm: nuke memory type flags Based on commit 48e07c2 (drm/ttm: nuke memory type flags). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c index e42b98f906fe..b8499e21aa34 100644 --- a/drivers/gpu/drm/openchrome/openchrome_crtc.c +++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c @@ -1704,7 +1704,7 @@ static int openchrome_crtc_mode_set_base(struct drm_crtc *crtc, goto exit; } - ret = openchrome_bo_pin(bo, TTM_PL_FLAG_VRAM); + ret = openchrome_bo_pin(bo, TTM_PL_VRAM); ttm_bo_unreserve(&bo->ttm_bo); if (ret) { DRM_DEBUG_KMS("Failed to pin FB.\n"); diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.c b/drivers/gpu/drm/openchrome/openchrome_drv.c index 7a106b50f572..86bb3cdd120f 100644 --- a/drivers/gpu/drm/openchrome/openchrome_drv.c +++ b/drivers/gpu/drm/openchrome/openchrome_drv.c @@ -97,7 +97,7 @@ static int openchrome_drm_driver_dumb_create( &dev_private->bdev, size, ttm_bo_type_device, - TTM_PL_FLAG_VRAM, + TTM_PL_VRAM, false, &bo); if (ret) { diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index 94ad1900c695..e327e8f9b7da 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -185,7 +185,7 @@ openchrome_fb_probe(struct drm_fb_helper *helper, &dev_private->bdev, size, ttm_bo_type_kernel, - TTM_PL_FLAG_VRAM, + TTM_PL_VRAM, true, &openchrome_fb->bo); if (ret) { diff --git a/drivers/gpu/drm/openchrome/openchrome_ioctl.c b/drivers/gpu/drm/openchrome/openchrome_ioctl.c index 15670ca57f46..b3693748ae4a 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ioctl.c +++ b/drivers/gpu/drm/openchrome/openchrome_ioctl.c @@ -66,8 +66,7 @@ static int openchrome_gem_create_ioctl(struct drm_device *dev, } args->size = bo->ttm_bo.mem.size; - args->domain = bo->ttm_bo.mem.placement & - TTM_PL_MASK_MEM; + args->domain = bo->ttm_bo.mem.placement; args->handle = handle; args->offset = bo->ttm_bo.mem.start << PAGE_SHIFT; exit: diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index 5cbd17524c67..da5a79607656 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -51,28 +51,28 @@ void openchrome_ttm_domain_to_placement(struct openchrome_bo *bo, bo->placement.placement = bo->placements; bo->placement.busy_placement = bo->placements; - if (ttm_domain & TTM_PL_FLAG_SYSTEM) { + if (ttm_domain == TTM_PL_SYSTEM) { bo->placements[i].fpfn = 0; bo->placements[i].lpfn = 0; - bo->placements[i].flags = TTM_PL_FLAG_CACHED | - TTM_PL_FLAG_SYSTEM; + bo->placements[i].mem_type = TTM_PL_SYSTEM; + bo->placements[i].flags = TTM_PL_FLAG_CACHED; i++; } - if (ttm_domain & TTM_PL_FLAG_TT) { + if (ttm_domain == TTM_PL_TT) { bo->placements[i].fpfn = 0; bo->placements[i].lpfn = 0; - bo->placements[i].flags = TTM_PL_FLAG_CACHED | - TTM_PL_FLAG_TT; + bo->placements[i].mem_type = TTM_PL_TT; + bo->placements[i].flags = TTM_PL_FLAG_CACHED; i++; } - if (ttm_domain & TTM_PL_FLAG_VRAM) { + if (ttm_domain == TTM_PL_VRAM) { bo->placements[i].fpfn = 0; bo->placements[i].lpfn = 0; + bo->placements[i].mem_type = TTM_PL_VRAM; bo->placements[i].flags = TTM_PL_FLAG_WC | - TTM_PL_FLAG_UNCACHED | - TTM_PL_FLAG_VRAM; + TTM_PL_FLAG_UNCACHED; i++; } diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index d42f436a28db..0ddb24828357 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -88,11 +88,11 @@ static void openchrome_bo_evict_flags(struct ttm_buffer_object *bo, switch (bo->mem.mem_type) { case TTM_PL_VRAM: openchrome_ttm_domain_to_placement(driver_bo, - TTM_PL_FLAG_VRAM); + TTM_PL_VRAM); break; default: openchrome_ttm_domain_to_placement(driver_bo, - TTM_PL_FLAG_SYSTEM); + TTM_PL_SYSTEM); break; } commit af8d8e6a37bc09bfcadb46e4044898bf618b8db3 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:42:07 2020 -0700 drm/ttm: merge offset and base in ttm_bus_placement Based on commit 54d04ea (drm/ttm: merge offset and base in ttm_bus_placement). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index 7e20a0726843..94ad1900c695 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -209,8 +209,8 @@ openchrome_fb_probe(struct drm_fb_helper *helper, info->fbops = &via_fb_ops; - info->fix.smem_start = openchrome_fb->bo->ttm_bo.mem.bus.base + - openchrome_fb->bo->ttm_bo.mem.bus.offset; + info->fix.smem_start = openchrome_fb->bo-> + ttm_bo.mem.bus.offset; info->fix.smem_len = openchrome_fb->bo->ttm_bo.mem.num_pages << PAGE_SHIFT; info->screen_base = ttm_kmap_obj_virtual( diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index 8541dd3593c2..d42f436a28db 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -123,8 +123,8 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, case TTM_PL_SYSTEM: break; case TTM_PL_VRAM: - mem->bus.base = dev_private->vram_start; - mem->bus.offset = mem->start << PAGE_SHIFT; + mem->bus.offset = dev_private->vram_start + + (mem->start << PAGE_SHIFT); mem->bus.is_iomem = true; break; default: commit 9955ca62a0afd4e132304d2d20c17f69bbf61032 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:39:01 2020 -0700 drm/ttm: init mem->bus in common code. Based on commit 098754f (drm/ttm: init mem->bus in common code.). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index 7c6f77c38a79..8541dd3593c2 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -121,16 +121,9 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, switch (mem->mem_type) { case TTM_PL_SYSTEM: - mem->bus.addr = NULL; - mem->bus.base = 0; - mem->bus.size = mem->num_pages << PAGE_SHIFT; - mem->bus.offset = 0; - mem->bus.is_iomem = false; break; case TTM_PL_VRAM: - mem->bus.addr = NULL; mem->bus.base = dev_private->vram_start; - mem->bus.size = mem->num_pages << PAGE_SHIFT; mem->bus.offset = mem->start << PAGE_SHIFT; mem->bus.is_iomem = true; break; commit b81adb8484ca0a47d2d054b79bc0e46c2105af62 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:38:38 2020 -0700 drm/ttm: rename ttm_mem_reg to ttm_resource. Based on commit 2966141 (drm/ttm: rename ttm_mem_reg to ttm_resource.). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index b6421f7be406..7c6f77c38a79 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -111,7 +111,7 @@ static int openchrome_bo_verify_access(struct ttm_buffer_object *bo, } static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, - struct ttm_mem_reg *mem) + struct ttm_resource *mem) { struct openchrome_drm_private *dev_private = container_of(bdev, struct openchrome_drm_private, bdev); @@ -144,7 +144,7 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, } static void openchrome_bo_io_mem_free(struct ttm_bo_device *bdev, - struct ttm_mem_reg *mem) + struct ttm_resource *mem) { DRM_DEBUG_KMS("Entered %s.\n", __func__); commit 9c3bf6500f9d9d72fdb4150f417906dac5af789e Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:36:27 2020 -0700 drm/ttm: make ttm_range_man_init/takedown take type + args Based on commit 3720589 (drm/ttm: make ttm_range_man_init/takedown take type + args). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index 57ee69f01ca7..5cbd17524c67 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -248,9 +248,6 @@ exit: int openchrome_mm_init(struct openchrome_drm_private *dev_private) { struct drm_device *dev = dev_private->dev; - struct ttm_mem_type_manager *man = - ttm_manager_type(&dev_private->bdev.man, - TTM_PL_VRAM); int ret; DRM_DEBUG_KMS("Entered %s.\n", __func__); @@ -275,7 +272,10 @@ int openchrome_mm_init(struct openchrome_drm_private *dev_private) /* * Initialize TTM range manager for VRAM management. */ - ret = ttm_range_man_init(&dev_private->bdev, man, + ret = ttm_range_man_init(&dev_private->bdev, TTM_PL_VRAM, + TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC, + TTM_PL_FLAG_WC, + false, dev_private->vram_size >> PAGE_SHIFT); if (ret) { DRM_ERROR("Failed initializing TTM VRAM memory manager.\n"); @@ -291,9 +291,7 @@ void openchrome_mm_fini(struct openchrome_drm_private *dev_private) { DRM_DEBUG_KMS("Entered %s.\n", __func__); - ttm_range_man_fini(&dev_private->bdev, - ttm_manager_type(&dev_private->bdev.man, - TTM_PL_VRAM)); + ttm_range_man_fini(&dev_private->bdev, TTM_PL_VRAM); ttm_bo_device_release(&dev_private->bdev); drm_vma_offset_manager_destroy(&dev_private->vma_manager); commit 424143475fe9ad831fe211c3ac1dd2d58bb83993 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:33:44 2020 -0700 drm/openchrome/ttm: use wrapper to access memory manager Based on commit 47c0550 (drm/radeon/ttm: use wrapper to access memory manager). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index 532c0821f6d8..57ee69f01ca7 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -249,7 +249,8 @@ int openchrome_mm_init(struct openchrome_drm_private *dev_private) { struct drm_device *dev = dev_private->dev; struct ttm_mem_type_manager *man = - &dev_private->bdev.man[TTM_PL_VRAM]; + ttm_manager_type(&dev_private->bdev.man, + TTM_PL_VRAM); int ret; DRM_DEBUG_KMS("Entered %s.\n", __func__); @@ -291,7 +292,8 @@ void openchrome_mm_fini(struct openchrome_drm_private *dev_private) DRM_DEBUG_KMS("Entered %s.\n", __func__); ttm_range_man_fini(&dev_private->bdev, - &dev_private->bdev.man[TTM_PL_VRAM]); + ttm_manager_type(&dev_private->bdev.man, + TTM_PL_VRAM)); ttm_bo_device_release(&dev_private->bdev); drm_vma_offset_manager_destroy(&dev_private->vma_manager); commit b73e1ae9fee01c47a5b37119b318aeb6d32efa01 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:33:24 2020 -0700 drm/openchrome/ttm: use new takedown paths Based on commit f0fe3f7 (drm/radeon/ttm: use new takedown paths). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index f24d0a7a8927..532c0821f6d8 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -290,7 +290,8 @@ void openchrome_mm_fini(struct openchrome_drm_private *dev_private) { DRM_DEBUG_KMS("Entered %s.\n", __func__); - ttm_bo_clean_mm(&dev_private->bdev, TTM_PL_VRAM); + ttm_range_man_fini(&dev_private->bdev, + &dev_private->bdev.man[TTM_PL_VRAM]); ttm_bo_device_release(&dev_private->bdev); drm_vma_offset_manager_destroy(&dev_private->vma_manager); commit 6552905aefc1fec7fcdf35c0d231518551049586 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:32:51 2020 -0700 drm/openchrome: use new ttm man init path Based on commit e33dc18 (drm/radeon: use new ttm man init path). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index dae25e1583f9..f24d0a7a8927 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -248,6 +248,8 @@ exit: int openchrome_mm_init(struct openchrome_drm_private *dev_private) { struct drm_device *dev = dev_private->dev; + struct ttm_mem_type_manager *man = + &dev_private->bdev.man[TTM_PL_VRAM]; int ret; DRM_DEBUG_KMS("Entered %s.\n", __func__); @@ -270,9 +272,9 @@ int openchrome_mm_init(struct openchrome_drm_private *dev_private) } /* - * Initialize TTM memory manager for VRAM management. + * Initialize TTM range manager for VRAM management. */ - ret = ttm_bo_init_mm(&dev_private->bdev, TTM_PL_VRAM, + ret = ttm_range_man_init(&dev_private->bdev, man, dev_private->vram_size >> PAGE_SHIFT); if (ret) { DRM_ERROR("Failed initializing TTM VRAM memory manager.\n"); commit c363d8a39807cb55573db93b6728ca5b38091668 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:26:54 2020 -0700 drm/ttm: remove the init_mem_type callback Based on commit 1a3fb59 (drm/ttm: remove the init_mem_type callback). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index 610548b298e4..b6421f7be406 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -73,35 +73,6 @@ static void openchrome_ttm_tt_destroy(struct ttm_bo_device *bdev, kfree(tt); } -static int openchrome_bo_init_mem_type(struct ttm_bo_device *bdev, - uint32_t type, - struct ttm_mem_type_manager *man) -{ - int ret = 0; - - DRM_DEBUG_KMS("Entered %s.\n", __func__); - - switch (type) { - case TTM_PL_SYSTEM: - man->available_caching = TTM_PL_FLAG_CACHED; - man->default_caching = TTM_PL_FLAG_CACHED; - break; - case TTM_PL_VRAM: - man->available_caching = TTM_PL_FLAG_UNCACHED | - TTM_PL_FLAG_WC; - man->default_caching = TTM_PL_FLAG_WC; - man->func = &ttm_bo_manager_func; - break; - default: - DRM_ERROR("Unsupported TTM memory type.\n"); - ret = -EINVAL; - break; - } - - DRM_DEBUG_KMS("Exiting %s.\n", __func__); - return ret; -} - static void openchrome_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *placement) { @@ -183,7 +154,6 @@ static void openchrome_bo_io_mem_free(struct ttm_bo_device *bdev, struct ttm_bo_driver openchrome_bo_driver = { .ttm_tt_create = openchrome_ttm_tt_create, .ttm_tt_destroy = openchrome_ttm_tt_destroy, - .init_mem_type = openchrome_bo_init_mem_type, .eviction_valuable = ttm_bo_eviction_valuable, .evict_flags = openchrome_bo_evict_flags, .verify_access = openchrome_bo_verify_access, commit eb407f49cbf1c10168ce4621404ace7f3f7a2113 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:25:45 2020 -0700 drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED v2 Based on commit be1213a (drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED v2). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index d17c788ebffb..610548b298e4 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -83,12 +83,10 @@ static int openchrome_bo_init_mem_type(struct ttm_bo_device *bdev, switch (type) { case TTM_PL_SYSTEM: - man->flags = 0; man->available_caching = TTM_PL_FLAG_CACHED; man->default_caching = TTM_PL_FLAG_CACHED; break; case TTM_PL_VRAM: - man->flags = TTM_MEMTYPE_FLAG_FIXED; man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; man->default_caching = TTM_PL_FLAG_WC; commit 07df055dd40e6f69519770a33456702df67bb496 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:19:43 2020 -0700 drm/openchrome: stop using TTM_MEMTYPE_FLAG_MAPPABLE Based on commit 8401e2e (drm/radeon: stop using TTM_MEMTYPE_FLAG_MAPPABLE). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index efd73004e886..d17c788ebffb 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -83,13 +83,12 @@ static int openchrome_bo_init_mem_type(struct ttm_bo_device *bdev, switch (type) { case TTM_PL_SYSTEM: - man->flags = TTM_MEMTYPE_FLAG_MAPPABLE; + man->flags = 0; man->available_caching = TTM_PL_FLAG_CACHED; man->default_caching = TTM_PL_FLAG_CACHED; break; case TTM_PL_VRAM: - man->flags = TTM_MEMTYPE_FLAG_FIXED | - TTM_MEMTYPE_FLAG_MAPPABLE; + man->flags = TTM_MEMTYPE_FLAG_FIXED; man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC; man->default_caching = TTM_PL_FLAG_WC; @@ -147,16 +146,10 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, { struct openchrome_drm_private *dev_private = container_of(bdev, struct openchrome_drm_private, bdev); - struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; int ret = 0; DRM_DEBUG_KMS("Entered %s.\n", __func__); - if (!(man->flags & TTM_MEMTYPE_FLAG_MAPPABLE)) { - ret= -EINVAL; - goto exit; - } - switch (mem->mem_type) { case TTM_PL_SYSTEM: mem->bus.addr = NULL; @@ -177,7 +170,6 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, break; } -exit: DRM_DEBUG_KMS("Exiting %s.\n", __func__); return ret; } commit b0a41de3424c73ef9ae592a79d44026973f1b74c Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:19:23 2020 -0700 drm/openchrome: Add ttm_tt_create/destroy callbacks Christian König, who is one of the TTM maintainers, suggested that implementing ttm_tt_create/destroy callbacks of ttm_bo_driver struct is mandatory. Not having them causes a null pointer crash with drm-next 5.10 TTM code. The code added here was borrowed from drm/drm_gem_vram_helper.c. Suggested-by: Christian König <christian.koe...@amd.com> Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index ea1537ff7d28..efd73004e886 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -43,6 +43,36 @@ #include "openchrome_drv.h" +static struct ttm_tt *openchrome_ttm_tt_create( + struct ttm_buffer_object *bo, + uint32_t page_flags) +{ + struct ttm_tt *tt; + int ret; + + tt = kzalloc(sizeof(*tt), GFP_KERNEL); + if (!tt) + return NULL; + + ret = ttm_tt_init(tt, bo, page_flags); + if (ret < 0) + goto err_ttm_tt_init; + + return tt; + +err_ttm_tt_init: + kfree(tt); + return NULL; +} + +static void openchrome_ttm_tt_destroy(struct ttm_bo_device *bdev, + struct ttm_tt *tt) +{ + ttm_tt_destroy_common(bdev, tt); + ttm_tt_fini(tt); + kfree(tt); +} + static int openchrome_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type, struct ttm_mem_type_manager *man) @@ -161,6 +191,8 @@ static void openchrome_bo_io_mem_free(struct ttm_bo_device *bdev, } struct ttm_bo_driver openchrome_bo_driver = { + .ttm_tt_create = openchrome_ttm_tt_create, + .ttm_tt_destroy = openchrome_ttm_tt_destroy, .init_mem_type = openchrome_bo_init_mem_type, .eviction_valuable = ttm_bo_eviction_valuable, .evict_flags = openchrome_bo_evict_flags, commit 58aa61859d42ed7d1330055cfe4d7247b9a06414 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:15:33 2020 -0700 drm/openchrome: Forgot to call ttm_bo_clean_mm() when cleaning up ttm_bo_clean_mm() should have been called inside openchrome_mm_fini(). openchrome_mm_init() calls ttm_bo_init_mm(), but openchrome_mm_fini() was not calling ttm_bo_clean_mm(). Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_object.c b/drivers/gpu/drm/openchrome/openchrome_object.c index 3289bf7ce3f0..dae25e1583f9 100644 --- a/drivers/gpu/drm/openchrome/openchrome_object.c +++ b/drivers/gpu/drm/openchrome/openchrome_object.c @@ -288,6 +288,8 @@ void openchrome_mm_fini(struct openchrome_drm_private *dev_private) { DRM_DEBUG_KMS("Entered %s.\n", __func__); + ttm_bo_clean_mm(&dev_private->bdev, TTM_PL_VRAM); + ttm_bo_device_release(&dev_private->bdev); drm_vma_offset_manager_destroy(&dev_private->vma_manager); commit f77fdfb91a439035f37890deffff17d2a2b50c52 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:12:43 2020 -0700 drm/openchrome: Base TTM VRAM base address on VRAM start address Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c index 17124db4bc72..ea1537ff7d28 100644 --- a/drivers/gpu/drm/openchrome/openchrome_ttm.c +++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c @@ -117,7 +117,6 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, { struct openchrome_drm_private *dev_private = container_of(bdev, struct openchrome_drm_private, bdev); - struct drm_device *dev = dev_private->dev; struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; int ret = 0; @@ -138,12 +137,7 @@ static int openchrome_bo_io_mem_reserve(struct ttm_bo_device *bdev, break; case TTM_PL_VRAM: mem->bus.addr = NULL; - if (dev->pdev->device == PCI_DEVICE_ID_VIA_VX900_VGA) { - mem->bus.base = pci_resource_start(dev->pdev, 2); - } else { - mem->bus.base = pci_resource_start(dev->pdev, 0); - } - + mem->bus.base = dev_private->vram_start; mem->bus.size = mem->num_pages << PAGE_SHIFT; mem->bus.offset = mem->start << PAGE_SHIFT; mem->bus.is_iomem = true; commit 9e184ca52b9673d31aa68a48e6f3dfa0bde02746 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:06:17 2020 -0700 drm/openchrome: Base fb_info struct’s size on the number of pages This is for fixed screen size (fix.smem_len) and current screen size (screen_size) members. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index 1bb02c26e1f4..7e20a0726843 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -211,10 +211,12 @@ openchrome_fb_probe(struct drm_fb_helper *helper, info->fix.smem_start = openchrome_fb->bo->ttm_bo.mem.bus.base + openchrome_fb->bo->ttm_bo.mem.bus.offset; - info->fix.smem_len = size; + info->fix.smem_len = openchrome_fb->bo->ttm_bo.mem.num_pages << + PAGE_SHIFT; info->screen_base = ttm_kmap_obj_virtual( &openchrome_fb->bo->kmap, &is_iomem); - info->screen_size = size; + info->screen_size = openchrome_fb->bo->ttm_bo.mem.num_pages << + PAGE_SHIFT; info->apertures->ranges[0].base = dev_private->vram_start; info->apertures->ranges[0].size = dev_private->vram_size; commit cd839a8a53d7cccec1a4c6b971d2e2bb946a13dd Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:03:20 2020 -0700 drm/openchrome: Obtain base and offset from TTM BO directly Rather than via TTM BO pointed by bo member of kmap struct. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index 5886cd943eb7..1bb02c26e1f4 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -209,8 +209,8 @@ openchrome_fb_probe(struct drm_fb_helper *helper, info->fbops = &via_fb_ops; - info->fix.smem_start = openchrome_fb->bo->kmap.bo->mem.bus.base + - openchrome_fb->bo->kmap.bo->mem.bus.offset; + info->fix.smem_start = openchrome_fb->bo->ttm_bo.mem.bus.base + + openchrome_fb->bo->ttm_bo.mem.bus.offset; info->fix.smem_len = size; info->screen_base = ttm_kmap_obj_virtual( &openchrome_fb->bo->kmap, &is_iomem); commit 955151ab7339e294e82bbb359f9d46434e6c3a59 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 15:01:29 2020 -0700 drm/openchrome: Use ttm_kmap_obj_virtual() for screen_base Use an address obtained from ttm_kmap_obj_virtual() for screen_base member of fb_info struct. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index cef8672beb84..5886cd943eb7 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -163,6 +163,7 @@ openchrome_fb_probe(struct drm_fb_helper *helper, struct fb_info *info = helper->fbdev; const struct drm_format_info *format_info; struct drm_mode_fb_cmd2 mode_cmd; + bool is_iomem; int size, cpp; int ret = 0; @@ -211,7 +212,8 @@ openchrome_fb_probe(struct drm_fb_helper *helper, info->fix.smem_start = openchrome_fb->bo->kmap.bo->mem.bus.base + openchrome_fb->bo->kmap.bo->mem.bus.offset; info->fix.smem_len = size; - info->screen_base = openchrome_fb->bo->kmap.virtual; + info->screen_base = ttm_kmap_obj_virtual( + &openchrome_fb->bo->kmap, &is_iomem); info->screen_size = size; info->apertures->ranges[0].base = dev_private->vram_start; commit 2dbef428c659418347c59235575a3de53367dd51 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Oct 27 14:57:41 2020 -0700 drm/openchrome: Change fb_info struct aperture source Use address and size obtained from PCI Configuration Space BAR and detected VRAM size, respectively. Signed-off-by: Kevin Brace <kevinbr...@gmx.com> diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h index 34302cd52082..3a6f3efbbc42 100644 --- a/drivers/gpu/drm/openchrome/openchrome_drv.h +++ b/drivers/gpu/drm/openchrome/openchrome_drv.h @@ -225,8 +225,8 @@ struct openchrome_drm_private { struct openchrome_framebuffer *openchrome_fb; u8 vram_type; - unsigned long long vram_start; - unsigned int vram_size; + resource_size_t vram_start; + resource_size_t vram_size; int vram_mtrr; unsigned long long mmio_base; diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c index d36a42d484db..cef8672beb84 100644 --- a/drivers/gpu/drm/openchrome/openchrome_fb.c +++ b/drivers/gpu/drm/openchrome/openchrome_fb.c @@ -214,9 +214,8 @@ openchrome_fb_probe(struct drm_fb_helper *helper, info->screen_base = openchrome_fb->bo->kmap.virtual; info->screen_size = size; - info->apertures->ranges[0].size = openchrome_fb->bo->kmap.bo->bdev-> - man[openchrome_fb->bo->kmap.bo->mem.mem_type].size; - info->apertures->ranges[0].base = openchrome_fb->bo->kmap.bo->mem.bus.base; + info->apertures->ranges[0].base = dev_private->vram_start; + info->apertures->ranges[0].size = dev_private->vram_size; drm_fb_helper_fill_info(info, helper, sizes); goto exit; _______________________________________________ openchrome-devel mailing list openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel