Sfoglia il codice sorgente

Merge "disp: remove kernel mapping of writeback framebuffer"

qctecmdr 5 anni fa
parent
commit
5cd8505102
5 ha cambiato i file con 2 aggiunte e 103 eliminazioni
  1. 0 1
      msm/msm_drv.h
  2. 1 90
      msm/msm_fb.c
  3. 0 9
      msm/sde/sde_connector.c
  4. 0 2
      msm/sde/sde_connector.h
  5. 1 1
      rotator/sde_rotator_r3.c

+ 0 - 1
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);

+ 1 - 90
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 <[email protected]>
  *
@@ -16,8 +16,6 @@
  * this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <linux/dma-mapping.h>
-#include <linux/dma-buf.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_damage_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -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++) {

+ 0 - 9
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,

+ 0 - 2
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;
 

+ 1 - 1
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);