All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Herring <robh@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: linux-arm-kernel@lists.infradead.org,
	"Alexandre Torgue" <alexandre.torgue@st.com>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	"Chen Feng" <puck.chen@hisilicon.com>,
	"Chen-Yu Tsai" <wens@csie.org>, "CK Hu" <ck.hu@mediatek.com>,
	"Daniel Vetter" <daniel@ffwll.ch>,
	"David Airlie" <airlied@linux.ie>,
	"Heiko Stübner" <heiko@sntech.de>,
	"James (Qian) Wang" <james.qian.wang@arm.com>,
	"Kevin Hilman" <khilman@baylibre.com>,
	"Kieran Bingham" <kieran.bingham+renesas@ideasonboard.com>,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
	linux-mediatek@lists.infradead.org,
	linux-rockchip@lists.infradead.org,
	"Liviu Dudau" <liviu.dudau@arm.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Neil Armstrong" <narmstrong@baylibre.com>,
	"Noralf Trønnes" <noralf@tronnes.org>,
	"Philippe Cornu" <philippe.cornu@st.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Rongrong Zou" <zourongrong@gmail.com>,
	"Sandy Huang" <hjc@rock-chips.com>, "Sean Paul" <sean@poorly.run>,
	"Vincent Abriou" <vincent.abriou@st.com>,
	"Xinliang Liu" <z.liuxinliang@hisilicon.com>,
	"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
	"Yannick Fertre" <yannick.fertre@st.com>,
	"Brian Starkey" <brian.starkey@arm.com>,
	linux-amlogic@lists.infradead.org,
	linux-renesas-soc@vger.kernel.org,
	linux-stm32@st-md-mailman.stormreply.com
Subject: [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag
Date: Mon, 21 Oct 2019 16:45:48 -0500	[thread overview]
Message-ID: <20191021214550.1461-5-robh@kernel.org> (raw)
In-Reply-To: <20191021214550.1461-1-robh@kernel.org>

Add support in CMA helpers to handle callers specifying
DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this
change. drm_gem_cma_dumb_create() always creates a kernel mapping as
before. drm_gem_cma_dumb_create_internal() lets the caller set the flags
as desired. Therefore, update all the existing callers of
drm_gem_cma_dumb_create_internal() to also set the
DRM_MODE_DUMB_KERNEL_MAP flag.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .../gpu/drm/arm/display/komeda/komeda_kms.c   |  1 +
 drivers/gpu/drm/arm/malidp_drv.c              |  1 +
 drivers/gpu/drm/drm_gem_cma_helper.c          | 48 +++++++++++--------
 drivers/gpu/drm/meson/meson_drv.c             |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c         |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c   |  1 +
 drivers/gpu/drm/stm/drv.c                     |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  1 +
 8 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index d49772de93e0..7cf0dc4cbfc1 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file *file,
 	u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 
 	args->pitch = ALIGN(pitch, mdev->chip.bus_width);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 8a76315aaa0f..aeb1a779ecc1 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file *file_priv,
 	u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
 
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 4cebfe01e6ea..f91e9e8adeaf 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size)
 	return ERR_PTR(ret);
 }
 
-/**
- * drm_gem_cma_create - allocate an object with the given size
- * @drm: DRM device
- * @size: size of the object to allocate
- *
- * This function creates a CMA GEM object and allocates a contiguous chunk of
- * memory as backing store. The backing memory has the writecombine attribute
- * set.
- *
- * Returns:
- * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
- * error code on failure.
- */
-struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
-					      size_t size)
+static struct drm_gem_cma_object *
+drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags)
 {
 	struct drm_gem_cma_object *cma_obj;
 	int ret;
@@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
+	if (!(flags & DRM_MODE_DUMB_KERNEL_MAP))
+		cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
+
 	cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr,
 					 GFP_KERNEL | __GFP_NOWARN,
 					 cma_obj->dma_attrs);
@@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	drm_gem_object_put_unlocked(&cma_obj->base);
 	return ERR_PTR(ret);
 }
+
+/**
+ * drm_gem_cma_create - allocate an object with the given size
+ * @drm: DRM device
+ * @size: size of the object to allocate
+ *
+ * This function creates a CMA GEM object and allocates a contiguous chunk of
+ * memory as backing store. The backing memory has the writecombine attribute
+ * set.
+ *
+ * Returns:
+ * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
+ * error code on failure.
+ */
+struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
+					      size_t size)
+{
+	return drm_gem_cma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP);
+}
 EXPORT_SYMBOL_GPL(drm_gem_cma_create);
 
 /**
@@ -139,14 +148,14 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_create);
  */
 static struct drm_gem_cma_object *
 drm_gem_cma_create_with_handle(struct drm_file *file_priv,
-			       struct drm_device *drm, size_t size,
+			       struct drm_device *drm, size_t size, u32 flags,
 			       uint32_t *handle)
 {
 	struct drm_gem_cma_object *cma_obj;
 	struct drm_gem_object *gem_obj;
 	int ret;
 
-	cma_obj = drm_gem_cma_create(drm, size);
+	cma_obj = drm_gem_cma_create_flags(drm, size, flags);
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
@@ -225,7 +234,7 @@ int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
 		args->size = args->pitch * args->height;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create_internal);
@@ -256,9 +265,10 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
 
 	args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 	args->size = args->pitch * args->height;
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create);
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 397c33182f4f..1593518dcbe4 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -81,6 +81,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 	 */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64);
 	args->size = PAGE_ALIGN(args->pitch * args->height);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 2dc9caee8767..c9b1f298ce7e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -299,6 +299,7 @@ int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
 		align = 16 * args->bpp / 8;
 
 	args->pitch = roundup(min_pitch, align);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 7582d0e6a60a..f09b9a035376 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -419,6 +419,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 	 * align to 64 bytes since Mali requires it.
 	 */
 	args->pitch = ALIGN(min_pitch, 64);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 	args->size = args->pitch * args->height;
 
 	rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 5a9f9aca8bc2..0f76a4ac95b3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -47,6 +47,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 	 */
 	args->pitch = roundup(min_pitch, 128);
 	args->height = roundup(args->height, 4);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index a5757b11b730..f653a5d1e2d6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -34,6 +34,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 {
 	/* The hardware only allows even pitches for YUV buffers. */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
-- 
2.20.1


WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: Neil Armstrong <narmstrong@baylibre.com>,
	David Airlie <airlied@linux.ie>,
	Liviu Dudau <liviu.dudau@arm.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	linux-amlogic@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com,
	Yannick Fertre <yannick.fertre@st.com>,
	Kevin Hilman <khilman@baylibre.com>,
	Xinwei Kong <kong.kongxinwei@hisilicon.com>,
	Xinliang Liu <z.liuxinliang@hisilicon.com>,
	linux-rockchip@lists.infradead.org, Chen-Yu Tsai <wens@csie.org>,
	Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>,
	"James (Qian) Wang" <james.qian.wang@arm.com>,
	Alexandre Torgue <alexandre.torgue@st.com>,
	Chen Feng <puck.chen@hisilicon.com>,
	linux-renesas-soc@vger.kernel.org,
	linux-mediatek@lists.infradead.org,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Sean Paul <sean@poorly.run>,
	linux-arm-kernel@lists.infradead.org,
	Philippe Cornu <philippe.cornu@st.com>
Subject: [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag
Date: Mon, 21 Oct 2019 16:45:48 -0500	[thread overview]
Message-ID: <20191021214550.1461-5-robh@kernel.org> (raw)
In-Reply-To: <20191021214550.1461-1-robh@kernel.org>

Add support in CMA helpers to handle callers specifying
DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this
change. drm_gem_cma_dumb_create() always creates a kernel mapping as
before. drm_gem_cma_dumb_create_internal() lets the caller set the flags
as desired. Therefore, update all the existing callers of
drm_gem_cma_dumb_create_internal() to also set the
DRM_MODE_DUMB_KERNEL_MAP flag.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .../gpu/drm/arm/display/komeda/komeda_kms.c   |  1 +
 drivers/gpu/drm/arm/malidp_drv.c              |  1 +
 drivers/gpu/drm/drm_gem_cma_helper.c          | 48 +++++++++++--------
 drivers/gpu/drm/meson/meson_drv.c             |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c         |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c   |  1 +
 drivers/gpu/drm/stm/drv.c                     |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  1 +
 8 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index d49772de93e0..7cf0dc4cbfc1 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file *file,
 	u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 
 	args->pitch = ALIGN(pitch, mdev->chip.bus_width);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 8a76315aaa0f..aeb1a779ecc1 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file *file_priv,
 	u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
 
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 4cebfe01e6ea..f91e9e8adeaf 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size)
 	return ERR_PTR(ret);
 }
 
-/**
- * drm_gem_cma_create - allocate an object with the given size
- * @drm: DRM device
- * @size: size of the object to allocate
- *
- * This function creates a CMA GEM object and allocates a contiguous chunk of
- * memory as backing store. The backing memory has the writecombine attribute
- * set.
- *
- * Returns:
- * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
- * error code on failure.
- */
-struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
-					      size_t size)
+static struct drm_gem_cma_object *
+drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags)
 {
 	struct drm_gem_cma_object *cma_obj;
 	int ret;
@@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
+	if (!(flags & DRM_MODE_DUMB_KERNEL_MAP))
+		cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
+
 	cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr,
 					 GFP_KERNEL | __GFP_NOWARN,
 					 cma_obj->dma_attrs);
@@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	drm_gem_object_put_unlocked(&cma_obj->base);
 	return ERR_PTR(ret);
 }
+
+/**
+ * drm_gem_cma_create - allocate an object with the given size
+ * @drm: DRM device
+ * @size: size of the object to allocate
+ *
+ * This function creates a CMA GEM object and allocates a contiguous chunk of
+ * memory as backing store. The backing memory has the writecombine attribute
+ * set.
+ *
+ * Returns:
+ * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
+ * error code on failure.
+ */
+struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
+					      size_t size)
+{
+	return drm_gem_cma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP);
+}
 EXPORT_SYMBOL_GPL(drm_gem_cma_create);
 
 /**
@@ -139,14 +148,14 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_create);
  */
 static struct drm_gem_cma_object *
 drm_gem_cma_create_with_handle(struct drm_file *file_priv,
-			       struct drm_device *drm, size_t size,
+			       struct drm_device *drm, size_t size, u32 flags,
 			       uint32_t *handle)
 {
 	struct drm_gem_cma_object *cma_obj;
 	struct drm_gem_object *gem_obj;
 	int ret;
 
-	cma_obj = drm_gem_cma_create(drm, size);
+	cma_obj = drm_gem_cma_create_flags(drm, size, flags);
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
@@ -225,7 +234,7 @@ int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
 		args->size = args->pitch * args->height;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create_internal);
@@ -256,9 +265,10 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
 
 	args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 	args->size = args->pitch * args->height;
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create);
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 397c33182f4f..1593518dcbe4 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -81,6 +81,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 	 */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64);
 	args->size = PAGE_ALIGN(args->pitch * args->height);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 2dc9caee8767..c9b1f298ce7e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -299,6 +299,7 @@ int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
 		align = 16 * args->bpp / 8;
 
 	args->pitch = roundup(min_pitch, align);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 7582d0e6a60a..f09b9a035376 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -419,6 +419,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 	 * align to 64 bytes since Mali requires it.
 	 */
 	args->pitch = ALIGN(min_pitch, 64);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 	args->size = args->pitch * args->height;
 
 	rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 5a9f9aca8bc2..0f76a4ac95b3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -47,6 +47,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 	 */
 	args->pitch = roundup(min_pitch, 128);
 	args->height = roundup(args->height, 4);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index a5757b11b730..f653a5d1e2d6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -34,6 +34,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 {
 	/* The hardware only allows even pitches for YUV buffers. */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: "Heiko Stübner" <heiko@sntech.de>,
	"Neil Armstrong" <narmstrong@baylibre.com>,
	"David Airlie" <airlied@linux.ie>,
	"Liviu Dudau" <liviu.dudau@arm.com>,
	"Sandy Huang" <hjc@rock-chips.com>,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	linux-amlogic@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com,
	"Yannick Fertre" <yannick.fertre@st.com>,
	"Kevin Hilman" <khilman@baylibre.com>,
	"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
	"Xinliang Liu" <z.liuxinliang@hisilicon.com>,
	linux-rockchip@lists.infradead.org,
	"Chen-Yu Tsai" <wens@csie.org>,
	"Noralf Trønnes" <noralf@tronnes.org>,
	"James (Qian) Wang" <james.qian.wang@arm.com>,
	"CK Hu" <ck.hu@mediatek.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Alexandre Torgue" <alexandre.torgue@st.com>,
	"Chen Feng" <puck.chen@hisilicon.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	linux-renesas-soc@vger.kernel.org,
	"Maxime Ripard" <mripard@kernel.org>,
	linux-mediatek@lists.infradead.org,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Daniel Vetter" <daniel@ffwll.ch>, "Sean Paul" <sean@poorly.run>,
	linux-arm-kernel@lists.infradead.org,
	"Philippe Cornu" <philippe.cornu@st.com>,
	"Vincent Abriou" <vincent.abriou@st.com>,
	"Kieran Bingham" <kieran.bingham+renesas@ideasonboard.com>,
	"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
	"Rongrong Zou" <zourongrong@gmail.com>,
	"Brian Starkey" <brian.starkey@arm.com>
Subject: [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag
Date: Mon, 21 Oct 2019 16:45:48 -0500	[thread overview]
Message-ID: <20191021214550.1461-5-robh@kernel.org> (raw)
In-Reply-To: <20191021214550.1461-1-robh@kernel.org>

Add support in CMA helpers to handle callers specifying
DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this
change. drm_gem_cma_dumb_create() always creates a kernel mapping as
before. drm_gem_cma_dumb_create_internal() lets the caller set the flags
as desired. Therefore, update all the existing callers of
drm_gem_cma_dumb_create_internal() to also set the
DRM_MODE_DUMB_KERNEL_MAP flag.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .../gpu/drm/arm/display/komeda/komeda_kms.c   |  1 +
 drivers/gpu/drm/arm/malidp_drv.c              |  1 +
 drivers/gpu/drm/drm_gem_cma_helper.c          | 48 +++++++++++--------
 drivers/gpu/drm/meson/meson_drv.c             |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c         |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c   |  1 +
 drivers/gpu/drm/stm/drv.c                     |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  1 +
 8 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index d49772de93e0..7cf0dc4cbfc1 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file *file,
 	u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 
 	args->pitch = ALIGN(pitch, mdev->chip.bus_width);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 8a76315aaa0f..aeb1a779ecc1 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file *file_priv,
 	u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
 
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 4cebfe01e6ea..f91e9e8adeaf 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size)
 	return ERR_PTR(ret);
 }
 
-/**
- * drm_gem_cma_create - allocate an object with the given size
- * @drm: DRM device
- * @size: size of the object to allocate
- *
- * This function creates a CMA GEM object and allocates a contiguous chunk of
- * memory as backing store. The backing memory has the writecombine attribute
- * set.
- *
- * Returns:
- * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
- * error code on failure.
- */
-struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
-					      size_t size)
+static struct drm_gem_cma_object *
+drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags)
 {
 	struct drm_gem_cma_object *cma_obj;
 	int ret;
@@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
+	if (!(flags & DRM_MODE_DUMB_KERNEL_MAP))
+		cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
+
 	cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr,
 					 GFP_KERNEL | __GFP_NOWARN,
 					 cma_obj->dma_attrs);
@@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	drm_gem_object_put_unlocked(&cma_obj->base);
 	return ERR_PTR(ret);
 }
+
+/**
+ * drm_gem_cma_create - allocate an object with the given size
+ * @drm: DRM device
+ * @size: size of the object to allocate
+ *
+ * This function creates a CMA GEM object and allocates a contiguous chunk of
+ * memory as backing store. The backing memory has the writecombine attribute
+ * set.
+ *
+ * Returns:
+ * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
+ * error code on failure.
+ */
+struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
+					      size_t size)
+{
+	return drm_gem_cma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP);
+}
 EXPORT_SYMBOL_GPL(drm_gem_cma_create);
 
 /**
@@ -139,14 +148,14 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_create);
  */
 static struct drm_gem_cma_object *
 drm_gem_cma_create_with_handle(struct drm_file *file_priv,
-			       struct drm_device *drm, size_t size,
+			       struct drm_device *drm, size_t size, u32 flags,
 			       uint32_t *handle)
 {
 	struct drm_gem_cma_object *cma_obj;
 	struct drm_gem_object *gem_obj;
 	int ret;
 
-	cma_obj = drm_gem_cma_create(drm, size);
+	cma_obj = drm_gem_cma_create_flags(drm, size, flags);
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
@@ -225,7 +234,7 @@ int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
 		args->size = args->pitch * args->height;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create_internal);
@@ -256,9 +265,10 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
 
 	args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 	args->size = args->pitch * args->height;
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create);
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 397c33182f4f..1593518dcbe4 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -81,6 +81,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 	 */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64);
 	args->size = PAGE_ALIGN(args->pitch * args->height);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 2dc9caee8767..c9b1f298ce7e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -299,6 +299,7 @@ int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
 		align = 16 * args->bpp / 8;
 
 	args->pitch = roundup(min_pitch, align);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 7582d0e6a60a..f09b9a035376 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -419,6 +419,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 	 * align to 64 bytes since Mali requires it.
 	 */
 	args->pitch = ALIGN(min_pitch, 64);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 	args->size = args->pitch * args->height;
 
 	rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 5a9f9aca8bc2..0f76a4ac95b3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -47,6 +47,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 	 */
 	args->pitch = roundup(min_pitch, 128);
 	args->height = roundup(args->height, 4);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index a5757b11b730..f653a5d1e2d6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -34,6 +34,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 {
 	/* The hardware only allows even pitches for YUV buffers. */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
-- 
2.20.1


_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: "Heiko Stübner" <heiko@sntech.de>,
	"Neil Armstrong" <narmstrong@baylibre.com>,
	"David Airlie" <airlied@linux.ie>,
	"Liviu Dudau" <liviu.dudau@arm.com>,
	"Sandy Huang" <hjc@rock-chips.com>,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	linux-amlogic@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com,
	"Yannick Fertre" <yannick.fertre@st.com>,
	"Kevin Hilman" <khilman@baylibre.com>,
	"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
	"Xinliang Liu" <z.liuxinliang@hisilicon.com>,
	linux-rockchip@lists.infradead.org,
	"Chen-Yu Tsai" <wens@csie.org>,
	"Noralf Trønnes" <noralf@tronnes.org>,
	"James (Qian) Wang" <james.qian.wang@arm.com>,
	"CK Hu" <ck.hu@mediatek.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Alexandre Torgue" <alexandre.torgue@st.com>,
	"Chen Feng" <puck.chen@hisilicon.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	linux-renesas-soc@vger.kernel.org,
	"Maxime Ripard" <mripard@kernel.org>,
	linux-mediatek@lists.infradead.org,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Daniel Vetter" <daniel@ffwll.ch>, "Sean Paul" <sean@poorly.run>,
	linux-arm-kernel@lists.infradead.org,
	"Philippe Cornu" <philippe.cornu@st.com>,
	"Vincent Abriou" <vincent.abriou@st.com>,
	"Kieran Bingham" <kieran.bingham+renesas@ideasonboard.com>,
	"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
	"Rongrong Zou" <zourongrong@gmail.com>,
	"Brian Starkey" <brian.starkey@arm.com>
Subject: [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag
Date: Mon, 21 Oct 2019 16:45:48 -0500	[thread overview]
Message-ID: <20191021214550.1461-5-robh@kernel.org> (raw)
In-Reply-To: <20191021214550.1461-1-robh@kernel.org>

Add support in CMA helpers to handle callers specifying
DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this
change. drm_gem_cma_dumb_create() always creates a kernel mapping as
before. drm_gem_cma_dumb_create_internal() lets the caller set the flags
as desired. Therefore, update all the existing callers of
drm_gem_cma_dumb_create_internal() to also set the
DRM_MODE_DUMB_KERNEL_MAP flag.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .../gpu/drm/arm/display/komeda/komeda_kms.c   |  1 +
 drivers/gpu/drm/arm/malidp_drv.c              |  1 +
 drivers/gpu/drm/drm_gem_cma_helper.c          | 48 +++++++++++--------
 drivers/gpu/drm/meson/meson_drv.c             |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c         |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c   |  1 +
 drivers/gpu/drm/stm/drv.c                     |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  1 +
 8 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index d49772de93e0..7cf0dc4cbfc1 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file *file,
 	u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 
 	args->pitch = ALIGN(pitch, mdev->chip.bus_width);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 8a76315aaa0f..aeb1a779ecc1 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file *file_priv,
 	u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
 
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 4cebfe01e6ea..f91e9e8adeaf 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size)
 	return ERR_PTR(ret);
 }
 
-/**
- * drm_gem_cma_create - allocate an object with the given size
- * @drm: DRM device
- * @size: size of the object to allocate
- *
- * This function creates a CMA GEM object and allocates a contiguous chunk of
- * memory as backing store. The backing memory has the writecombine attribute
- * set.
- *
- * Returns:
- * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
- * error code on failure.
- */
-struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
-					      size_t size)
+static struct drm_gem_cma_object *
+drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags)
 {
 	struct drm_gem_cma_object *cma_obj;
 	int ret;
@@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
+	if (!(flags & DRM_MODE_DUMB_KERNEL_MAP))
+		cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
+
 	cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr,
 					 GFP_KERNEL | __GFP_NOWARN,
 					 cma_obj->dma_attrs);
@@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	drm_gem_object_put_unlocked(&cma_obj->base);
 	return ERR_PTR(ret);
 }
+
+/**
+ * drm_gem_cma_create - allocate an object with the given size
+ * @drm: DRM device
+ * @size: size of the object to allocate
+ *
+ * This function creates a CMA GEM object and allocates a contiguous chunk of
+ * memory as backing store. The backing memory has the writecombine attribute
+ * set.
+ *
+ * Returns:
+ * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
+ * error code on failure.
+ */
+struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
+					      size_t size)
+{
+	return drm_gem_cma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP);
+}
 EXPORT_SYMBOL_GPL(drm_gem_cma_create);
 
 /**
@@ -139,14 +148,14 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_create);
  */
 static struct drm_gem_cma_object *
 drm_gem_cma_create_with_handle(struct drm_file *file_priv,
-			       struct drm_device *drm, size_t size,
+			       struct drm_device *drm, size_t size, u32 flags,
 			       uint32_t *handle)
 {
 	struct drm_gem_cma_object *cma_obj;
 	struct drm_gem_object *gem_obj;
 	int ret;
 
-	cma_obj = drm_gem_cma_create(drm, size);
+	cma_obj = drm_gem_cma_create_flags(drm, size, flags);
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
@@ -225,7 +234,7 @@ int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
 		args->size = args->pitch * args->height;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create_internal);
@@ -256,9 +265,10 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
 
 	args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 	args->size = args->pitch * args->height;
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create);
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 397c33182f4f..1593518dcbe4 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -81,6 +81,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 	 */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64);
 	args->size = PAGE_ALIGN(args->pitch * args->height);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 2dc9caee8767..c9b1f298ce7e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -299,6 +299,7 @@ int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
 		align = 16 * args->bpp / 8;
 
 	args->pitch = roundup(min_pitch, align);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 7582d0e6a60a..f09b9a035376 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -419,6 +419,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 	 * align to 64 bytes since Mali requires it.
 	 */
 	args->pitch = ALIGN(min_pitch, 64);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 	args->size = args->pitch * args->height;
 
 	rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 5a9f9aca8bc2..0f76a4ac95b3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -47,6 +47,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 	 */
 	args->pitch = roundup(min_pitch, 128);
 	args->height = roundup(args->height, 4);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index a5757b11b730..f653a5d1e2d6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -34,6 +34,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 {
 	/* The hardware only allows even pitches for YUV buffers. */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
-- 
2.20.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
From: Rob Herring <robh@kernel.org>
To: dri-devel@lists.freedesktop.org
Cc: "Heiko Stübner" <heiko@sntech.de>,
	"Neil Armstrong" <narmstrong@baylibre.com>,
	"David Airlie" <airlied@linux.ie>,
	"Liviu Dudau" <liviu.dudau@arm.com>,
	"Sandy Huang" <hjc@rock-chips.com>,
	"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
	"Benjamin Gaignard" <benjamin.gaignard@linaro.org>,
	linux-amlogic@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com,
	"Yannick Fertre" <yannick.fertre@st.com>,
	"Kevin Hilman" <khilman@baylibre.com>,
	"Xinwei Kong" <kong.kongxinwei@hisilicon.com>,
	"Xinliang Liu" <z.liuxinliang@hisilicon.com>,
	linux-rockchip@lists.infradead.org,
	"Chen-Yu Tsai" <wens@csie.org>,
	"Noralf Trønnes" <noralf@tronnes.org>,
	"James (Qian) Wang" <james.qian.wang@arm.com>,
	"CK Hu" <ck.hu@mediatek.com>,
	"Philipp Zabel" <p.zabel@pengutronix.de>,
	"Alexandre Torgue" <alexandre.torgue@st.com>,
	"Chen Feng" <puck.chen@hisilicon.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	linux-renesas-soc@vger.kernel.org,
	"Maxime Ripard" <mripard@kernel.org>,
	linux-mediatek@lists.infradead.org,
	"Matthias Brugger" <matthias.bgg@gmail.com>,
	"Daniel Vetter" <daniel@ffwll.ch>, "Sean Paul" <sean@poorly.run>,
	linux-arm-kernel@lists.infradead.org,
	"Philippe Cornu" <philippe.cornu@st.com>,
	"Vincent Abriou" <vincent.abriou@st.com>,
	"Kieran Bingham" <kieran.bingham+renesas@ideasonboard.com>,
	"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
	"Rongrong Zou" <zourongrong@gmail.com>,
	"Brian Starkey" <brian.starkey@arm.com>
Subject: [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag
Date: Mon, 21 Oct 2019 16:45:48 -0500	[thread overview]
Message-ID: <20191021214550.1461-5-robh@kernel.org> (raw)
In-Reply-To: <20191021214550.1461-1-robh@kernel.org>

Add support in CMA helpers to handle callers specifying
DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this
change. drm_gem_cma_dumb_create() always creates a kernel mapping as
before. drm_gem_cma_dumb_create_internal() lets the caller set the flags
as desired. Therefore, update all the existing callers of
drm_gem_cma_dumb_create_internal() to also set the
DRM_MODE_DUMB_KERNEL_MAP flag.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: "James (Qian) Wang" <james.qian.wang@arm.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Brian Starkey <brian.starkey@arm.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Yannick Fertre <yannick.fertre@st.com>
Cc: Philippe Cornu <philippe.cornu@st.com>
Cc: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Cc: Vincent Abriou <vincent.abriou@st.com>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: Chen-Yu Tsai <wens@csie.org>
Cc: linux-amlogic@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-renesas-soc@vger.kernel.org
Cc: linux-rockchip@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Signed-off-by: Rob Herring <robh@kernel.org>
---
 .../gpu/drm/arm/display/komeda/komeda_kms.c   |  1 +
 drivers/gpu/drm/arm/malidp_drv.c              |  1 +
 drivers/gpu/drm/drm_gem_cma_helper.c          | 48 +++++++++++--------
 drivers/gpu/drm/meson/meson_drv.c             |  1 +
 drivers/gpu/drm/rcar-du/rcar_du_kms.c         |  1 +
 drivers/gpu/drm/rockchip/rockchip_drm_gem.c   |  1 +
 drivers/gpu/drm/stm/drv.c                     |  1 +
 drivers/gpu/drm/sun4i/sun4i_drv.c             |  1 +
 8 files changed, 36 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index d49772de93e0..7cf0dc4cbfc1 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -31,6 +31,7 @@ static int komeda_gem_cma_dumb_create(struct drm_file *file,
 	u32 pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 
 	args->pitch = ALIGN(pitch, mdev->chip.bus_width);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index 8a76315aaa0f..aeb1a779ecc1 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -465,6 +465,7 @@ static int malidp_dumb_create(struct drm_file *file_priv,
 	u8 alignment = malidp_hw_get_pitch_align(malidp->dev, 1);
 
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
index 4cebfe01e6ea..f91e9e8adeaf 100644
--- a/drivers/gpu/drm/drm_gem_cma_helper.c
+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
@@ -78,21 +78,8 @@ __drm_gem_cma_create(struct drm_device *drm, size_t size)
 	return ERR_PTR(ret);
 }
 
-/**
- * drm_gem_cma_create - allocate an object with the given size
- * @drm: DRM device
- * @size: size of the object to allocate
- *
- * This function creates a CMA GEM object and allocates a contiguous chunk of
- * memory as backing store. The backing memory has the writecombine attribute
- * set.
- *
- * Returns:
- * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
- * error code on failure.
- */
-struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
-					      size_t size)
+static struct drm_gem_cma_object *
+drm_gem_cma_create_flags(struct drm_device *drm, size_t size, u32 flags)
 {
 	struct drm_gem_cma_object *cma_obj;
 	int ret;
@@ -103,6 +90,9 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
+	if (!(flags & DRM_MODE_DUMB_KERNEL_MAP))
+		cma_obj->dma_attrs |= DMA_ATTR_NO_KERNEL_MAPPING;
+
 	cma_obj->vaddr = dma_alloc_attrs(drm->dev, size, &cma_obj->paddr,
 					 GFP_KERNEL | __GFP_NOWARN,
 					 cma_obj->dma_attrs);
@@ -119,6 +109,25 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
 	drm_gem_object_put_unlocked(&cma_obj->base);
 	return ERR_PTR(ret);
 }
+
+/**
+ * drm_gem_cma_create - allocate an object with the given size
+ * @drm: DRM device
+ * @size: size of the object to allocate
+ *
+ * This function creates a CMA GEM object and allocates a contiguous chunk of
+ * memory as backing store. The backing memory has the writecombine attribute
+ * set.
+ *
+ * Returns:
+ * A struct drm_gem_cma_object * on success or an ERR_PTR()-encoded negative
+ * error code on failure.
+ */
+struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
+					      size_t size)
+{
+	return drm_gem_cma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP);
+}
 EXPORT_SYMBOL_GPL(drm_gem_cma_create);
 
 /**
@@ -139,14 +148,14 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_create);
  */
 static struct drm_gem_cma_object *
 drm_gem_cma_create_with_handle(struct drm_file *file_priv,
-			       struct drm_device *drm, size_t size,
+			       struct drm_device *drm, size_t size, u32 flags,
 			       uint32_t *handle)
 {
 	struct drm_gem_cma_object *cma_obj;
 	struct drm_gem_object *gem_obj;
 	int ret;
 
-	cma_obj = drm_gem_cma_create(drm, size);
+	cma_obj = drm_gem_cma_create_flags(drm, size, flags);
 	if (IS_ERR(cma_obj))
 		return cma_obj;
 
@@ -225,7 +234,7 @@ int drm_gem_cma_dumb_create_internal(struct drm_file *file_priv,
 		args->size = args->pitch * args->height;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create_internal);
@@ -256,9 +265,10 @@ int drm_gem_cma_dumb_create(struct drm_file *file_priv,
 
 	args->pitch = DIV_ROUND_UP(args->width * args->bpp, 8);
 	args->size = args->pitch * args->height;
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	cma_obj = drm_gem_cma_create_with_handle(file_priv, drm, args->size,
-						 &args->handle);
+						 args->flags, &args->handle);
 	return PTR_ERR_OR_ZERO(cma_obj);
 }
 EXPORT_SYMBOL_GPL(drm_gem_cma_dumb_create);
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c
index 397c33182f4f..1593518dcbe4 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -81,6 +81,7 @@ static int meson_dumb_create(struct drm_file *file, struct drm_device *dev,
 	 */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), SZ_64);
 	args->size = PAGE_ALIGN(args->pitch * args->height);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 2dc9caee8767..c9b1f298ce7e 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -299,6 +299,7 @@ int rcar_du_dumb_create(struct drm_file *file, struct drm_device *dev,
 		align = 16 * args->bpp / 8;
 
 	args->pitch = roundup(min_pitch, align);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
index 7582d0e6a60a..f09b9a035376 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_gem.c
@@ -419,6 +419,7 @@ int rockchip_gem_dumb_create(struct drm_file *file_priv,
 	 * align to 64 bytes since Mali requires it.
 	 */
 	args->pitch = ALIGN(min_pitch, 64);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 	args->size = args->pitch * args->height;
 
 	rk_obj = rockchip_gem_create_with_handle(file_priv, dev, args->size,
diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c
index 5a9f9aca8bc2..0f76a4ac95b3 100644
--- a/drivers/gpu/drm/stm/drv.c
+++ b/drivers/gpu/drm/stm/drv.c
@@ -47,6 +47,7 @@ static int stm_gem_cma_dumb_create(struct drm_file *file,
 	 */
 	args->pitch = roundup(min_pitch, 128);
 	args->height = roundup(args->height, 4);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file, dev, args);
 }
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
index a5757b11b730..f653a5d1e2d6 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -34,6 +34,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *file_priv,
 {
 	/* The hardware only allows even pitches for YUV buffers. */
 	args->pitch = ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2);
+	args->flags = DRM_MODE_DUMB_KERNEL_MAP;
 
 	return drm_gem_cma_dumb_create_internal(file_priv, drm, args);
 }
-- 
2.20.1


_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic

  parent reply	other threads:[~2019-10-21 21:46 UTC|newest]

Thread overview: 103+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-21 21:45 [PATCH 0/6] drm: Support CMA per allocation kernel mappings Rob Herring
2019-10-21 21:45 ` Rob Herring
2019-10-21 21:45 ` Rob Herring
2019-10-21 21:45 ` [PATCH 1/6] drm/kirin: Use DRM_GEM_CMA_VMAP_DRIVER_OPS Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45 ` [PATCH 2/6] drm: Introduce DRM_MODE_DUMB_KERNEL_MAP flag Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-22 11:14   ` Laurent Pinchart
2019-10-22 11:14     ` Laurent Pinchart
2019-10-22 11:14     ` Laurent Pinchart
2019-10-22 12:42     ` Rob Herring
2019-10-22 12:42       ` Rob Herring
2019-10-22 12:42       ` Rob Herring
2019-10-23 14:28       ` Laurent Pinchart
2019-10-23 14:28         ` Laurent Pinchart
2019-10-23 14:28         ` Laurent Pinchart
2019-10-23 14:28         ` Laurent Pinchart
2019-10-23 17:03         ` Rob Herring
2019-10-23 17:03           ` Rob Herring
2019-10-23 17:03           ` Rob Herring
2019-10-23 17:03           ` Rob Herring
2019-10-21 21:45 ` [PATCH 3/6] drm/cma-helper: Use the dma_*_attr API variant Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-22  1:01   ` kbuild test robot
2019-10-22  1:01     ` kbuild test robot
2019-10-22  1:01     ` kbuild test robot
2019-10-22  1:01     ` kbuild test robot
2019-10-22 11:18   ` Laurent Pinchart
2019-10-22 11:18     ` Laurent Pinchart
2019-10-22 11:18     ` Laurent Pinchart
2019-10-21 21:45 ` Rob Herring [this message]
2019-10-21 21:45   ` [PATCH 4/6] drm/cma-helper: Support DRM_MODE_DUMB_KERNEL_MAP flag Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-22  6:13   ` james qian wang (Arm Technology China)
2019-10-22  6:13     ` james qian wang (Arm Technology China)
2019-10-22  6:13     ` james qian wang (Arm Technology China)
2019-10-22  6:13     ` james qian wang (Arm Technology China)
2019-10-22  6:13     ` james qian wang (Arm Technology China)
2019-10-22  7:50   ` Neil Armstrong
2019-10-22  7:50     ` Neil Armstrong
2019-10-22  7:50     ` Neil Armstrong
2019-10-22  7:50     ` Neil Armstrong
2019-10-22  7:50     ` Neil Armstrong
2019-10-22 11:30   ` Laurent Pinchart
2019-10-22 11:30     ` Laurent Pinchart
2019-10-22 11:30     ` Laurent Pinchart
2019-10-22 11:30     ` Laurent Pinchart
2019-10-22 11:30     ` Laurent Pinchart
2019-10-22 11:40     ` Geert Uytterhoeven
2019-10-22 11:40       ` Geert Uytterhoeven
2019-10-22 11:40       ` Geert Uytterhoeven
2019-10-22 11:40       ` Geert Uytterhoeven
2019-10-22 11:40       ` Geert Uytterhoeven
2019-10-22 19:52       ` Rob Herring
2019-10-22 19:52         ` Rob Herring
2019-10-22 19:52         ` Rob Herring
2019-10-22 19:52         ` Rob Herring
2019-10-22 19:52         ` Rob Herring
2019-10-22 20:02     ` Rob Herring
2019-10-22 20:02       ` Rob Herring
2019-10-22 20:02       ` Rob Herring
2019-10-22 20:02       ` Rob Herring
2019-10-22 20:02       ` Rob Herring
2019-10-23 14:27       ` Laurent Pinchart
2019-10-23 14:27         ` Laurent Pinchart
2019-10-23 14:27         ` Laurent Pinchart
2019-10-23 14:27         ` Laurent Pinchart
2019-10-23 14:27         ` Laurent Pinchart
2019-10-23 14:27         ` Laurent Pinchart
2019-10-21 21:45 ` [PATCH 5/6] drm/mediatek: Convert to use CMA helpers Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-22 17:07   ` Matthias Brugger
2019-10-22 17:07     ` Matthias Brugger
2019-10-22 17:07     ` Matthias Brugger
2019-10-23 17:42     ` Rob Herring
2019-10-23 17:42       ` Rob Herring
2019-10-23 17:42       ` Rob Herring
2019-10-23 17:42       ` Rob Herring
2019-10-23 21:06       ` CK Hu
2019-10-23 21:06         ` CK Hu
2019-10-23 21:06         ` CK Hu
2019-10-23 21:06         ` CK Hu
2019-10-23 22:56         ` Rob Herring
2019-10-23 22:56           ` Rob Herring
2019-10-23 22:56           ` Rob Herring
2019-10-23 22:56           ` Rob Herring
2019-10-24  7:02           ` CK Hu
2019-10-24  7:02             ` CK Hu
2019-10-24  7:02             ` CK Hu
2019-10-24  7:02             ` CK Hu
2019-12-17  1:12             ` Laurent Pinchart
2019-12-17  1:12               ` Laurent Pinchart
2019-12-17  1:12               ` Laurent Pinchart
2019-12-17  1:12               ` Laurent Pinchart
2019-10-21 21:45 ` [PATCH 6/6] drm/rockchip: Convert to use generic fbdev emulation Rob Herring
2019-10-21 21:45   ` Rob Herring
2019-10-21 21:45   ` Rob Herring

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191021214550.1461-5-robh@kernel.org \
    --to=robh@kernel.org \
    --cc=airlied@linux.ie \
    --cc=alexandre.torgue@st.com \
    --cc=benjamin.gaignard@linaro.org \
    --cc=brian.starkey@arm.com \
    --cc=ck.hu@mediatek.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=heiko@sntech.de \
    --cc=hjc@rock-chips.com \
    --cc=james.qian.wang@arm.com \
    --cc=khilman@baylibre.com \
    --cc=kieran.bingham+renesas@ideasonboard.com \
    --cc=kong.kongxinwei@hisilicon.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=liviu.dudau@arm.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=matthias.bgg@gmail.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=mripard@kernel.org \
    --cc=narmstrong@baylibre.com \
    --cc=noralf@tronnes.org \
    --cc=p.zabel@pengutronix.de \
    --cc=philippe.cornu@st.com \
    --cc=puck.chen@hisilicon.com \
    --cc=sean@poorly.run \
    --cc=vincent.abriou@st.com \
    --cc=wens@csie.org \
    --cc=yannick.fertre@st.com \
    --cc=z.liuxinliang@hisilicon.com \
    --cc=zourongrong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.