diff --git a/msm/msm_drv.h b/msm/msm_drv.h index 356fb6404c..d4c33bf430 100644 --- a/msm/msm_drv.h +++ b/msm/msm_drv.h @@ -1099,7 +1099,6 @@ void msm_gem_object_set_name(struct drm_gem_object *bo, const char *fmt, ...); int msm_gem_delayed_import(struct drm_gem_object *obj); -void msm_framebuffer_set_kmap(struct drm_framebuffer *fb, bool enable); void msm_framebuffer_set_keepattrs(struct drm_framebuffer *fb, bool enable); int msm_framebuffer_prepare(struct drm_framebuffer *fb, struct msm_gem_address_space *aspace); diff --git a/msm/msm_fb.c b/msm/msm_fb.c index 12b7effad4..5c59ac17f3 100644 --- a/msm/msm_fb.c +++ b/msm/msm_fb.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark * @@ -16,8 +16,6 @@ * this program. If not, see . */ -#include -#include #include #include #include @@ -27,14 +25,9 @@ #include "msm_kms.h" #include "msm_gem.h" -#define MSM_FRAMEBUFFER_FLAG_KMAP BIT(0) - struct msm_framebuffer { struct drm_framebuffer base; const struct msm_format *format; - void *vaddr[MAX_PLANE]; - atomic_t kmap_count; - u32 flags; }; #define to_msm_framebuffer(x) container_of(x, struct msm_framebuffer, base) @@ -101,81 +94,6 @@ void msm_framebuffer_set_keepattrs(struct drm_framebuffer *fb, bool enable) } } -void msm_framebuffer_set_kmap(struct drm_framebuffer *fb, bool enable) -{ - struct msm_framebuffer *msm_fb; - - if (!fb) { - DRM_ERROR("from:%pS null fb\n", __builtin_return_address(0)); - return; - } - - msm_fb = to_msm_framebuffer(fb); - if (enable) - msm_fb->flags |= MSM_FRAMEBUFFER_FLAG_KMAP; - else - msm_fb->flags &= ~MSM_FRAMEBUFFER_FLAG_KMAP; -} - -static int msm_framebuffer_kmap(struct drm_framebuffer *fb) -{ - struct msm_framebuffer *msm_fb; - int i, n; - struct drm_gem_object *bo; - - if (!fb) { - DRM_ERROR("from:%pS null fb\n", __builtin_return_address(0)); - return -EINVAL; - } - - msm_fb = to_msm_framebuffer(fb); - n = fb->format->num_planes; - if (atomic_inc_return(&msm_fb->kmap_count) > 1) - return 0; - - for (i = 0; i < n; i++) { - bo = msm_framebuffer_bo(fb, i); - if (!bo || !bo->dma_buf) { - msm_fb->vaddr[i] = NULL; - continue; - } - dma_buf_begin_cpu_access(bo->dma_buf, DMA_BIDIRECTIONAL); - msm_fb->vaddr[i] = dma_buf_kmap(bo->dma_buf, 0); - DRM_INFO("FB[%u]: vaddr[%d]:%ux%u:0x%llx\n", fb->base.id, i, - fb->width, fb->height, (u64) msm_fb->vaddr[i]); - } - - return 0; -} - -static void msm_framebuffer_kunmap(struct drm_framebuffer *fb) -{ - struct msm_framebuffer *msm_fb; - int i, n; - struct drm_gem_object *bo; - - if (!fb) { - DRM_ERROR("from:%pS null fb\n", __builtin_return_address(0)); - return; - } - - msm_fb = to_msm_framebuffer(fb); - n = fb->format->num_planes; - if (atomic_dec_return(&msm_fb->kmap_count) > 0) - return; - - for (i = 0; i < n; i++) { - bo = msm_framebuffer_bo(fb, i); - if (!bo || !msm_fb->vaddr[i]) - continue; - if (bo->dma_buf) { - dma_buf_kunmap(bo->dma_buf, 0, msm_fb->vaddr[i]); - dma_buf_end_cpu_access(bo->dma_buf, DMA_BIDIRECTIONAL); - } - msm_fb->vaddr[i] = NULL; - } -} - /* prepare/pin all the fb's bo's for scanout. Note that it is not valid * to prepare an fb more multiple different initiator 'id's. But that * should be fine, since only the scanout (mdpN) side of things needs @@ -202,9 +120,6 @@ int msm_framebuffer_prepare(struct drm_framebuffer *fb, return ret; } - if (msm_fb->flags & MSM_FRAMEBUFFER_FLAG_KMAP) - msm_framebuffer_kmap(fb); - return 0; } @@ -222,9 +137,6 @@ void msm_framebuffer_cleanup(struct drm_framebuffer *fb, msm_fb = to_msm_framebuffer(fb); n = fb->format->num_planes; - if (msm_fb->flags & MSM_FRAMEBUFFER_FLAG_KMAP) - msm_framebuffer_kunmap(fb); - for (i = 0; i < n; i++) msm_gem_put_iova(fb->obj[i], aspace); } @@ -351,7 +263,6 @@ struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev, fb = &msm_fb->base; msm_fb->format = format; - atomic_set(&msm_fb->kmap_count, 0); if (mode_cmd->flags & DRM_MODE_FB_MODIFIERS) { for (i = 0; i < ARRAY_SIZE(mode_cmd->modifier); i++) { diff --git a/msm/sde/sde_connector.c b/msm/sde/sde_connector.c index 2fec656470..759b1bf5b3 100644 --- a/msm/sde/sde_connector.c +++ b/msm/sde/sde_connector.c @@ -1431,9 +1431,6 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector, } else if (!c_state->out_fb && !val) { SDE_DEBUG("cleared fb_id\n"); rc = 0; - } else { - msm_framebuffer_set_kmap(c_state->out_fb, - c_conn->fb_kmap); } break; case CONNECTOR_PROP_RETIRE_FENCE: @@ -2159,12 +2156,6 @@ static int sde_connector_init_debugfs(struct drm_connector *connector) &sde_connector->esd_status_interval); } - if (!debugfs_create_bool("fb_kmap", 0600, connector->debugfs_entry, - &sde_connector->fb_kmap)) { - SDE_ERROR("failed to create connector fb_kmap\n"); - return -ENOMEM; - } - if (sde_connector->ops.cmd_transfer) { if (!debugfs_create_file("tx_cmd", 0600, connector->debugfs_entry, diff --git a/msm/sde/sde_connector.h b/msm/sde/sde_connector.h index 58a8413319..41407892db 100644 --- a/msm/sde/sde_connector.h +++ b/msm/sde/sde_connector.h @@ -421,7 +421,6 @@ struct sde_connector_dyn_hdr_metadata { * @blob_dither: Pointer to blob structure for default dither config * @blob_mode_info: Pointer to blob structure for mode info * @blob_panel_id: Pointer to blob structure for blob_panel_id - * @fb_kmap: true if kernel mapping of framebuffer is requested * @event_table: Array of registered events * @event_lock: Lock object for event_table * @bl_device: backlight device node @@ -482,7 +481,6 @@ struct sde_connector { struct drm_property_blob *blob_mode_info; struct drm_property_blob *blob_panel_id; - bool fb_kmap; struct sde_connector_evt event_table[SDE_CONN_EVENT_COUNT]; spinlock_t event_lock; diff --git a/rotator/sde_rotator_r3.c b/rotator/sde_rotator_r3.c index 8a867201ec..5a1f4ebae7 100644 --- a/rotator/sde_rotator_r3.c +++ b/rotator/sde_rotator_r3.c @@ -1220,7 +1220,7 @@ static void sde_hw_rotator_map_vaddr(struct sde_dbg_buf *dbgbuf, if (dbgbuf->dmabuf && (dbgbuf->buflen > 0)) { dma_buf_begin_cpu_access(dbgbuf->dmabuf, DMA_FROM_DEVICE); - dbgbuf->vaddr = dma_buf_kmap(dbgbuf->dmabuf, 0); + dbgbuf->vaddr = dma_buf_vmap(dbgbuf->dmabuf); SDEROT_DBG("vaddr mapping: 0x%pK/%ld w:%d/h:%d\n", dbgbuf->vaddr, dbgbuf->buflen, dbgbuf->width, dbgbuf->height);