From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 22BA0C67790 for ; Wed, 25 Jul 2018 05:43:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C8BD220852 for ; Wed, 25 Jul 2018 05:43:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C8BD220852 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728386AbeGYGxP (ORCPT ); Wed, 25 Jul 2018 02:53:15 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:61880 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727826AbeGYGxP (ORCPT ); Wed, 25 Jul 2018 02:53:15 -0400 X-UUID: 0c1b27ae9d7b4b7682abd4d89302525f-20180725 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 1860895348; Wed, 25 Jul 2018 13:43:08 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs03n2.mediatek.inc (172.21.101.182) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Wed, 25 Jul 2018 13:43:06 +0800 Received: from [172.21.77.4] (172.21.77.4) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1210.3 via Frontend Transport; Wed, 25 Jul 2018 13:42:59 +0800 Message-ID: <1532497379.9280.32.camel@mtksdaap41> Subject: Re: [PATCH v1 11/15] drm/mediatek: add dummy buffer for RDMA memory mode From: CK Hu To: Stu Hsieh CC: Philipp Zabel , David Airlie , Matthias Brugger , , , , , Date: Wed, 25 Jul 2018 13:42:59 +0800 In-Reply-To: <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> References: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Stu: On Tue, 2018-07-24 at 16:17 +0800, Stu Hsieh wrote: > 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. > Is this the only solution? If panel resolution is 1920x1080, the buffer size is 8294400 bytes. How large it is. If we have another solution, I'll not accept this one. As far as I know, DSI or DPI could output single color even though there is no input data. If this is true, when encoder is enabled, it output the single color. When crtc enable, config all setting except 'start'. When receive the buffer, 'start' the pipeline which include encoder. When encoder 'start', it disable the single color function and output the data from input. Regards, CK > Signed-off-by: Stu Hsieh > --- > 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; > }; From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v1 11/15] drm/mediatek: add dummy buffer for RDMA memory mode Date: Wed, 25 Jul 2018 13:42:59 +0800 Message-ID: <1532497379.9280.32.camel@mtksdaap41> References: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Stu Hsieh Cc: srv_heupstream@mediatek.com, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, Matthias Brugger , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIFN0dToKCk9uIFR1ZSwgMjAxOC0wNy0yNCBhdCAxNjoxNyArMDgwMCwgU3R1IEhzaWVoIHdy b3RlOgo+IFRoaXMgcGF0Y2ggYWRkIGR1bW15IGJ1ZmZlciBmb3IgUkRNQSBtZW1vcnkgbW9kZQo+ IAo+IFdoZW4gZGlzcGxheSBwb3dlciBvbiwgdGhlIGRybSBmcmFtZSB3b3JrIHdvdWxkIG1vZGVz ZXQgYW5kCj4gc2V0IHVwIHRoZSBkaXNwbGF5IEhXLgo+IAo+IEluIHRoaXMgdGltZSwgdGhlIFJE TUEgd291bGQgc3RhcnQgd3Jva2luZyBhbmQgcmVhZCB0aGUgZGF0YSBmcm9tIG1lbW9yeS4KPiBC dXQsIHVzZXIgc3BhY2Ugbm90IHNlbmQgdGhlIGRhdGEgdG8gZHJtIHlldC4KPiAKPiBGb3IgdGhp cyBjYXNlLCBpZiB1c2VyIHNwYWNlIG5vdCBzZW5kIGRhdGEgdG8gZGlzcGxheSBodyhSRE1BKSB5 ZXQsCj4gUkRNQSB3b3VsZCByZWFkIHRoZSB3cm9uZyBhZGRyZXNzIHRvIHNob3cgZ2FyYmFnZS4K PiAKPiBUaGVyZWZvcmUsIHdlIGNyZWF0ZSBkdW1teSBidWZmZXIgZm9yIFJETUEgcmVhZGluZyBt ZW1vcnkKPiB3aGVuIHVzZXJzcGFjZSBub3Qgc2VuZCB0aGUgZGF0YSB5ZXQuCj4gCgpJcyB0aGlz IHRoZSBvbmx5IHNvbHV0aW9uPyBJZiBwYW5lbCByZXNvbHV0aW9uIGlzIDE5MjB4MTA4MCwgdGhl IGJ1ZmZlcgpzaXplIGlzIDgyOTQ0MDAgYnl0ZXMuIEhvdyBsYXJnZSBpdCBpcy4gSWYgd2UgaGF2 ZSBhbm90aGVyIHNvbHV0aW9uLApJJ2xsIG5vdCBhY2NlcHQgdGhpcyBvbmUuIEFzIGZhciBhcyBJ IGtub3csIERTSSBvciBEUEkgY291bGQgb3V0cHV0CnNpbmdsZSBjb2xvciBldmVuIHRob3VnaCB0 aGVyZSBpcyBubyBpbnB1dCBkYXRhLiBJZiB0aGlzIGlzIHRydWUsIHdoZW4KZW5jb2RlciBpcyBl bmFibGVkLCBpdCBvdXRwdXQgdGhlIHNpbmdsZSBjb2xvci4gV2hlbiBjcnRjIGVuYWJsZSwgY29u ZmlnCmFsbCBzZXR0aW5nIGV4Y2VwdCAnc3RhcnQnLiBXaGVuIHJlY2VpdmUgdGhlIGJ1ZmZlciwg J3N0YXJ0JyB0aGUKcGlwZWxpbmUgd2hpY2ggaW5jbHVkZSBlbmNvZGVyLiBXaGVuIGVuY29kZXIg J3N0YXJ0JywgaXQgZGlzYWJsZSB0aGUKc2luZ2xlIGNvbG9yIGZ1bmN0aW9uIGFuZCBvdXRwdXQg dGhlIGRhdGEgZnJvbSBpbnB1dC4KClJlZ2FyZHMsCkNLCgoKPiBTaWduZWQtb2ZmLWJ5OiBTdHUg SHNpZWggPHN0dS5oc2llaEBtZWRpYXRlay5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMgICAgfCAyMyArKysrKysrKysrKysrKysrKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIHwgIDEgKwo+ICAy IGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfZGlzcF9yZG1hLmMKPiBpbmRleCA4ZDQxZjVjZDQ4NWIuLmUyOGYzNjg3MjhjZCAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYwo+IEBAIC0yMCw2 ICsyMCw3IEBACj4gIAo+ICAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCj4gICNpbmNsdWRlICJt dGtfZHJtX2RkcF9jb21wLmgiCj4gKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgo+ICAKPiAgI2Rl ZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUJCTB4MDAwMAo+ICAjZGVmaW5lIERJU1BfUkVH X1JETUFfSU5UX1NUQVRVUwkJMHgwMDA0Cj4gQEAgLTU5LDYgKzYwLDkgQEAKPiAgI2RlZmluZSBN RU1fTU9ERV9JTlBVVF9GT1JNQVRfVVlWWQkJKDB4MDA0IDw8IDQpCj4gICNkZWZpbmUgTUVNX01P REVfSU5QVVRfRk9STUFUX1lVWVYJCSgweDAwNSA8PCA0KQo+ICAKPiArI2RlZmluZSBSRE1BX0RV TU1ZX0JVRkZFUl9TSVpFKGgsIHYpCQkoKGgpICogKHYpICogNCkKPiArI2RlZmluZSBSRE1BX0RV TU1ZX0JVRkZFUl9QSVRDSChoKQkJKChoKSAqIDQpCj4gKwo+ICBzdHJ1Y3QgbXRrX2Rpc3BfcmRt YV9kYXRhIHsKPiAgCXVuc2lnbmVkIGludCBmaWZvX3NpemU7Cj4gIH07Cj4gQEAgLTc0LDYgKzc4 LDcgQEAgc3RydWN0IG10a19kaXNwX3JkbWEgewo+ICAJY29uc3Qgc3RydWN0IG10a19kaXNwX3Jk bWFfZGF0YQkqZGF0YTsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2Owo+ICAJYm9vbCBy ZG1hX21lbW9yeV9tb2RlOwo+ICsJdW5zaWduZWQgaW50IGR1bW15X3NpemU7Cj4gIH07Cj4gIAo+ ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZGlzcF9yZG1hICpjb21wX3RvX3JkbWEoc3RydWN0 IG10a19kZHBfY29tcCAqY29tcCkKPiBAQCAtMTI2LDE0ICsxMzEsMjkgQEAgc3RhdGljIHZvaWQg bXRrX3JkbWFfZGlzYWJsZV92Ymxhbmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKPiAgCj4g IHN0YXRpYyB2b2lkIG10a19yZG1hX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCj4g IHsKPiArCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpyZG1hID0gY29tcF90b19yZG1hKGNvbXApOwo+ ICsJYm9vbCAqcmRtYV9tZW1vcnlfbW9kZSA9IGNvbXAtPmNvbXBfbW9kZTsKPiArCj4gKwlpZiAo KnJkbWFfbWVtb3J5X21vZGUgPT0gdHJ1ZSkgewo+ICsJCWNvbXAtPm10a19nZW0gPSBtdGtfZHJt X2dlbV9jcmVhdGUocmRtYS0+ZHJtX2RldiwKPiArCQkJCQkJICAgcmRtYS0+ZHVtbXlfc2l6ZSwg ZmFsc2UpOwo+ICsJCXdyaXRlbChjb21wLT5tdGtfZ2VtLT5kbWFfYWRkciAmIDB4RkZGRkZGRkYs Cj4gKwkJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX1JETUFfTUVNX1NUQVJUX0FERFIpOwo+ICsJ fQo+ICsKPiAgCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09O LCBSRE1BX0VOR0lORV9FTiwKPiAgCQkJIFJETUFfRU5HSU5FX0VOKTsKPiAgfQo+ICAKPiAgc3Rh dGljIHZvaWQgbXRrX3JkbWFfc3RvcChzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQo+ICB7Cj4g Kwlib29sICpyZG1hX21lbW9yeV9tb2RlID0gY29tcC0+Y29tcF9tb2RlOwo+ICsKPiAgCXdyaXRl bChSRE1BX1NPRlRfUkVTRVQsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04p Owo+ICAJd3JpdGVsKDAsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04pOwo+ ICsKPiArCWlmICgqcmRtYV9tZW1vcnlfbW9kZSA9PSB0cnVlKQo+ICsJCW10a19kcm1fZ2VtX2Zy ZWVfb2JqZWN0KCZjb21wLT5tdGtfZ2VtLT5iYXNlKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQg bXRrX3JkbWFfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIHVuc2lnbmVkIGludCB3 aWR0aCwKPiBAQCAtMTQ5LDggKzE2OSwxMSBAQCBzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWco c3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHdpZHRoLAo+ICAJcmRtYV91 cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEsIDB4ZmZmZmYsIGhlaWdo dCk7Cj4gIAo+ICAJaWYgKCpyZG1hX21lbW9yeV9tb2RlID09IHRydWUpIHsKPiArCQlyZG1hLT5k dW1teV9zaXplID0gUkRNQV9EVU1NWV9CVUZGRVJfU0laRSh3aWR0aCwgaGVpZ2h0KTsKPiAgCQly ZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfU0laRV9DT05fMCwgMHhmZjAwMDAs Cj4gIAkJCQkgTUFUUklYX0lOVF9NVFhfU0VMX0RFRkFVTFQpOwo+ICsJCXdyaXRlbChSRE1BX0RV TU1ZX0JVRkZFUl9QSVRDSCh3aWR0aCksCj4gKwkJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX1JE TUFfTUVNX1NSQ19QSVRDSCk7Cj4gIAkJcmRtYV91cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19S RE1BX0dMT0JBTF9DT04sCj4gIAkJCQkgUkRNQV9NT0RFX01FTU9SWSwgUkRNQV9NT0RFX01FTU9S WSk7Cj4gIAl9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcF9jb21wLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5o Cj4gaW5kZXggYTE5ODhjZTE1MTQxLi42ZGJiODMxNDRhNzQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmgKPiBAQCAtOTIsNiArOTIsNyBAQCBzdHJ1 Y3QgbXRrX2RkcF9jb21wIHsKPiAgCWludCBpcnE7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpsYXJiX2Rl djsKPiAgCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkOwo+ICsJc3RydWN0IG10a19kcm1fZ2VtX29i aiAqbXRrX2dlbTsKPiAgCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgKmZ1bmNzOwo+ ICAJdm9pZCAqY29tcF9tb2RlOwo+ICB9OwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: ck.hu@mediatek.com (CK Hu) Date: Wed, 25 Jul 2018 13:42:59 +0800 Subject: [PATCH v1 11/15] drm/mediatek: add dummy buffer for RDMA memory mode In-Reply-To: <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> References: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> <1532420235-22268-12-git-send-email-stu.hsieh@mediatek.com> Message-ID: <1532497379.9280.32.camel@mtksdaap41> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, Stu: On Tue, 2018-07-24 at 16:17 +0800, Stu Hsieh wrote: > 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. > Is this the only solution? If panel resolution is 1920x1080, the buffer size is 8294400 bytes. How large it is. If we have another solution, I'll not accept this one. As far as I know, DSI or DPI could output single color even though there is no input data. If this is true, when encoder is enabled, it output the single color. When crtc enable, config all setting except 'start'. When receive the buffer, 'start' the pipeline which include encoder. When encoder 'start', it disable the single color function and output the data from input. Regards, CK > Signed-off-by: Stu Hsieh > --- > 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; > };