drivers/gpu/drm/openchrome/openchrome_crtc.c | 31 ------------ drivers/gpu/drm/openchrome/openchrome_cursor.c | 62 +++++++------------------ drivers/gpu/drm/openchrome/openchrome_drv.h | 5 -- 3 files changed, 20 insertions(+), 78 deletions(-)
New commits: commit fab99d966fdd8ddc87d976b147e92e7743eb5dbf Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Feb 4 13:57:14 2020 -0800 drm/openchrome: Version bumped to 3.1.26 Got rid of duplicated (wasted) hardware cursor storage. 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 401bdd831b16..26edb3863b47 100644 --- a/drivers/gpu/drm/openchrome/openchrome_drv.h +++ b/drivers/gpu/drm/openchrome/openchrome_drv.h @@ -61,10 +61,10 @@ #define DRIVER_MAJOR 3 #define DRIVER_MINOR 1 -#define DRIVER_PATCHLEVEL 25 +#define DRIVER_PATCHLEVEL 26 #define DRIVER_NAME "openchrome" #define DRIVER_DESC "OpenChrome DRM for VIA Technologies Chrome IGP" -#define DRIVER_DATE "20200131" +#define DRIVER_DATE "20200204" #define DRIVER_AUTHOR "OpenChrome Project" commit f2376ff3a67982adb53a7e2f47780d3e1a3e13f3 Author: Kevin Brace <kevinbr...@gmx.com> Date: Tue Feb 4 13:50:56 2020 -0800 drm/openchrome: Stop allocating hardware cursor storage Let the DDX allocate storage for hardware cursor(s). This avoids duplicated hardware cursor storage. 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 6fc69e5ebea2..728bff2a363c 100644 --- a/drivers/gpu/drm/openchrome/openchrome_crtc.c +++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c @@ -319,11 +319,6 @@ static void openchrome_crtc_destroy(struct drm_crtc *crtc) { struct via_crtc *iga = container_of(crtc, struct via_crtc, base); - if (iga->cursor_bo) { - openchrome_bo_destroy(iga->cursor_bo, true); - iga->cursor_bo = NULL; - } - drm_crtc_cleanup(&iga->base); kfree(iga); } @@ -2082,7 +2077,6 @@ int openchrome_crtc_init(struct openchrome_drm_private *dev_private, struct drm_plane *primary; struct drm_plane *cursor; uint32_t possible_crtcs; - uint64_t cursor_size; int ret; possible_crtcs = 1 << index; @@ -2143,33 +2137,8 @@ int openchrome_crtc_init(struct openchrome_drm_private *dev_private, iga->index = index; - if ((dev->pdev->device == PCI_DEVICE_ID_VIA_CLE266) || - (dev->pdev->device == PCI_DEVICE_ID_VIA_KM400)) { - cursor_size = - OPENCHROME_UNICHROME_CURSOR_SIZE * - OPENCHROME_UNICHROME_CURSOR_SIZE * 4; - } else { - cursor_size = - OPENCHROME_UNICHROME_PRO_CURSOR_SIZE * - OPENCHROME_UNICHROME_PRO_CURSOR_SIZE * 4; - } - - ret = openchrome_bo_create(dev, - &dev_private->bdev, - cursor_size, - ttm_bo_type_kernel, - TTM_PL_FLAG_VRAM, - true, - &iga->cursor_bo); - if (ret) { - DRM_ERROR("Failed to create cursor.\n"); - goto cleanup_crtc; - } - openchrome_crtc_param_init(dev_private, &iga->base, index); goto exit; -cleanup_crtc: - drm_crtc_cleanup(&iga->base); free_crtc: kfree(iga); cleanup_cursor: diff --git a/drivers/gpu/drm/openchrome/openchrome_cursor.c b/drivers/gpu/drm/openchrome/openchrome_cursor.c index 625565f475e7..796955dcd209 100644 --- a/drivers/gpu/drm/openchrome/openchrome_cursor.c +++ b/drivers/gpu/drm/openchrome/openchrome_cursor.c @@ -146,16 +146,21 @@ static void openchrome_show_cursor(struct drm_crtc *crtc) } } -static void openchrome_cursor_address(struct drm_crtc *crtc) +static void openchrome_cursor_address(struct drm_crtc *crtc, + struct openchrome_bo *ttm_bo) { struct drm_device *dev = crtc->dev; struct via_crtc *iga = container_of(crtc, struct via_crtc, base); struct openchrome_drm_private *dev_private = crtc->dev->dev_private; + int ret; - if (!iga->cursor_bo->kmap.bo) { - return; + ret = ttm_bo_kmap(&ttm_bo->ttm_bo, 0, + ttm_bo->ttm_bo.num_pages, + &ttm_bo->kmap); + if (ret) { + goto exit; } switch (dev->pdev->device) { @@ -169,17 +174,21 @@ static void openchrome_cursor_address(struct drm_crtc *crtc) /* Program the HI offset. */ if (iga->index) { VIA_WRITE(HI_FBOFFSET, - iga->cursor_bo->kmap.bo->offset); + ttm_bo->kmap.bo->offset); } else { VIA_WRITE(PRIM_HI_FBOFFSET, - iga->cursor_bo->kmap.bo->offset); + ttm_bo->kmap.bo->offset); } break; default: VIA_WRITE(HI_FBOFFSET, - iga->cursor_bo->kmap.bo->offset); + ttm_bo->kmap.bo->offset); break; } + + ttm_bo_kunmap(&ttm_bo->kmap); +exit: + return; } static void openchrome_set_hi_location(struct drm_crtc *crtc, @@ -253,15 +262,9 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane, struct drm_modeset_acquire_ctx *ctx) { struct drm_device *dev = plane->dev; - struct via_crtc *iga = container_of(crtc, - struct via_crtc, base); struct via_framebuffer *via_fb; - struct openchrome_bo *user_bo; + struct openchrome_bo *ttm_bo; struct drm_gem_object *gem; - uint32_t *user_bo_src, *cursor_dst; - bool is_iomem; - uint32_t i; - uint32_t width, height, cursor_width; int ret = 0; if (!crtc) { @@ -291,7 +294,6 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane, goto exit; } - cursor_width = OPENCHROME_UNICHROME_CURSOR_SIZE; } else { if ((fb->width != OPENCHROME_UNICHROME_PRO_CURSOR_SIZE) || (fb->height != OPENCHROME_UNICHROME_PRO_CURSOR_SIZE)) { @@ -299,8 +301,6 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane, ret = -EINVAL; goto exit; } - - cursor_width = OPENCHROME_UNICHROME_PRO_CURSOR_SIZE; } if (fb->width != fb->height) { @@ -311,36 +311,10 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane, } if (fb != crtc->cursor->fb) { - width = fb->width; - height = fb->height; - via_fb = container_of(fb, struct via_framebuffer, fb); gem = via_fb->gem; - user_bo = container_of(gem, struct openchrome_bo, gem); - ret = ttm_bo_kmap(&user_bo->ttm_bo, 0, - user_bo->ttm_bo.num_pages, - &user_bo->kmap); - if (ret) { - goto exit; - } - - user_bo_src = ttm_kmap_obj_virtual(&user_bo->kmap, - &is_iomem); - cursor_dst = - ttm_kmap_obj_virtual(&iga->cursor_bo->kmap, - &is_iomem); - memset_io(cursor_dst, 0x0, - iga->cursor_bo->kmap.bo->mem.size); - for (i = 0; i < height; i++) { - __iowrite32_copy(cursor_dst, user_bo_src, - width); - user_bo_src += width; - cursor_dst += cursor_width; - } - - ttm_bo_kunmap(&user_bo->kmap); - - openchrome_cursor_address(crtc); + ttm_bo = container_of(gem, struct openchrome_bo, gem); + openchrome_cursor_address(crtc, ttm_bo); } else { crtc->cursor_x = crtc_x; crtc->cursor_y = crtc_y; diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h index 94686959a998..401bdd831b16 100644 --- a/drivers/gpu/drm/openchrome/openchrome_drv.h +++ b/drivers/gpu/drm/openchrome/openchrome_drv.h @@ -160,7 +160,6 @@ typedef struct _via_fp_info { struct via_crtc { struct drm_crtc base; - struct openchrome_bo *cursor_bo; struct crtc_timings pixel_timings; struct crtc_timings timings; struct vga_registers display_queue; _______________________________________________ openchrome-devel mailing list openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel