linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stu Hsieh <stu.hsieh@mediatek.com>
To: CK Hu <ck.hu@mediatek.com>, Philipp Zabel <p.zabel@pengutronix.de>
Cc: David Airlie <airlied@linux.ie>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	<dri-devel@lists.freedesktop.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-mediatek@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <srv_heupstream@mediatek.com>,
	Stu Hsieh <stu.hsieh@mediatek.com>
Subject: [PATCH v1 11/15] drm/mediatek: add dummy buffer for RDMA memory mode
Date: Tue, 24 Jul 2018 16:17:11 +0800	[thread overview]
Message-ID: <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> (raw)
In-Reply-To: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com>

This patch add dummy buffer for RDMA memory mode

When display power on, the drm frame work would modeset and
set up the display HW.

In this time, the RDMA would start wroking and read the data from memory.
But, user space not send the data to drm yet.

For this case, if user space not send data to display hw(RDMA) yet,
RDMA would read the wrong address to show garbage.

Therefore, we create dummy buffer for RDMA reading memory
when userspace not send the data yet.

Signed-off-by: Stu Hsieh <stu.hsieh@mediatek.com>
---
 drivers/gpu/drm/mediatek/mtk_disp_rdma.c    | 23 +++++++++++++++++++++++
 drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h |  1 +
 2 files changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
index 8d41f5cd485b..e28f368728cd 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_rdma.c
@@ -20,6 +20,7 @@
 
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
+#include "mtk_drm_gem.h"
 
 #define DISP_REG_RDMA_INT_ENABLE		0x0000
 #define DISP_REG_RDMA_INT_STATUS		0x0004
@@ -59,6 +60,9 @@
 #define MEM_MODE_INPUT_FORMAT_UYVY		(0x004 << 4)
 #define MEM_MODE_INPUT_FORMAT_YUYV		(0x005 << 4)
 
+#define RDMA_DUMMY_BUFFER_SIZE(h, v)		((h) * (v) * 4)
+#define RDMA_DUMMY_BUFFER_PITCH(h)		((h) * 4)
+
 struct mtk_disp_rdma_data {
 	unsigned int fifo_size;
 };
@@ -74,6 +78,7 @@ struct mtk_disp_rdma {
 	const struct mtk_disp_rdma_data	*data;
 	struct drm_device *drm_dev;
 	bool rdma_memory_mode;
+	unsigned int dummy_size;
 };
 
 static inline struct mtk_disp_rdma *comp_to_rdma(struct mtk_ddp_comp *comp)
@@ -126,14 +131,29 @@ static void mtk_rdma_disable_vblank(struct mtk_ddp_comp *comp)
 
 static void mtk_rdma_start(struct mtk_ddp_comp *comp)
 {
+	struct mtk_disp_rdma *rdma = comp_to_rdma(comp);
+	bool *rdma_memory_mode = comp->comp_mode;
+
+	if (*rdma_memory_mode == true) {
+		comp->mtk_gem = mtk_drm_gem_create(rdma->drm_dev,
+						   rdma->dummy_size, false);
+		writel(comp->mtk_gem->dma_addr & 0xFFFFFFFF,
+		       comp->regs + DISP_RDMA_MEM_START_ADDR);
+	}
+
 	rdma_update_bits(comp, DISP_REG_RDMA_GLOBAL_CON, RDMA_ENGINE_EN,
 			 RDMA_ENGINE_EN);
 }
 
 static void mtk_rdma_stop(struct mtk_ddp_comp *comp)
 {
+	bool *rdma_memory_mode = comp->comp_mode;
+
 	writel(RDMA_SOFT_RESET, comp->regs + DISP_REG_RDMA_GLOBAL_CON);
 	writel(0, comp->regs + DISP_REG_RDMA_GLOBAL_CON);
+
+	if (*rdma_memory_mode == true)
+		mtk_drm_gem_free_object(&comp->mtk_gem->base);
 }
 
 static void mtk_rdma_config(struct mtk_ddp_comp *comp, unsigned int width,
@@ -149,8 +169,11 @@ static void mtk_rdma_config(struct mtk_ddp_comp *comp, unsigned int width,
 	rdma_update_bits(comp, DISP_REG_RDMA_SIZE_CON_1, 0xfffff, height);
 
 	if (*rdma_memory_mode == true) {
+		rdma->dummy_size = RDMA_DUMMY_BUFFER_SIZE(width, height);
 		rdma_update_bits(comp, DISP_REG_RDMA_SIZE_CON_0, 0xff0000,
 				 MATRIX_INT_MTX_SEL_DEFAULT);
+		writel(RDMA_DUMMY_BUFFER_PITCH(width),
+		       comp->regs + DISP_RDMA_MEM_SRC_PITCH);
 		rdma_update_bits(comp, DISP_REG_RDMA_GLOBAL_CON,
 				 RDMA_MODE_MEMORY, RDMA_MODE_MEMORY);
 	}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
index a1988ce15141..6dbb83144a74 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
+++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
@@ -92,6 +92,7 @@ struct mtk_ddp_comp {
 	int irq;
 	struct device *larb_dev;
 	enum mtk_ddp_comp_id id;
+	struct mtk_drm_gem_obj *mtk_gem;
 	const struct mtk_ddp_comp_funcs *funcs;
 	void *comp_mode;
 };
-- 
2.12.5


  parent reply	other threads:[~2018-07-24  8:18 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-24  8:17 [PATCH v1 00/15] Add RDMA memory mode support for mediatek SOC MT2712 Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 01/15] drm/mediatek: add connection from RDMA0 to DPI1 Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 02/15] drm/mediatek: add connection from RDMA0 to DSI1 Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 03/15] drm/mediatek: add connection from RDMA1 to DSI0 Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 04/15] drm/mediatek: add connection from RDMA2 " Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 05/15] drm/mediatek: add RDMA memory mode for crtc created Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 06/15] drm/mediatek: add memory mode for RDMA Stu Hsieh
2018-07-25  2:40   ` CK Hu
2018-08-02 11:36     ` Stu Hsieh
2018-08-03  7:30       ` CK Hu
2018-07-24  8:17 ` [PATCH v1 07/15] drm/mediatek: add layer config to set RDMA for plane setting Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 08/15] drm/mediatek: add RGB color format support for RDMA Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 09/15] drm/mediatek: add YUYV/UYVY " Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 10/15] drm/mediatek: add drm_device in RDMA for mamory mode to reaquest buffer Stu Hsieh
2018-07-24  8:17 ` Stu Hsieh [this message]
2018-07-25  5:42   ` [PATCH v1 11/15] drm/mediatek: add dummy buffer for RDMA memory mode CK Hu
2018-08-02 11:45     ` Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 12/15] drm/mediatek: add layer number condition for RDMA to control plane Stu Hsieh
2018-07-25  3:02   ` CK Hu
2018-08-02 11:38     ` Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 13/15] drm/mediatek: Update some variable name from ovl to comp Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 14/15] drm/mediatek: fixed the error value for add DSI1 in mutex Stu Hsieh
2018-07-25  5:10   ` CK Hu
2018-08-02 11:39     ` Stu Hsieh
2018-07-24  8:17 ` [PATCH v1 15/15] drm/mediatek: fixed connection from RDMA2 to DSI1 Stu Hsieh
2018-07-25  1:39 ` [PATCH v1 00/15] Add RDMA memory mode support for mediatek SOC MT2712 CK Hu
2018-08-02 11:29   ` Stu Hsieh

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=1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com \
    --to=stu.hsieh@mediatek.com \
    --cc=airlied@linux.ie \
    --cc=ck.hu@mediatek.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=p.zabel@pengutronix.de \
    --cc=srv_heupstream@mediatek.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).