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=-2.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT 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 027DEECDFB8 for ; Tue, 24 Jul 2018 08:18:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BC27E20880 for ; Tue, 24 Jul 2018 08:18:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC27E20880 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 S2388838AbeGXJXr (ORCPT ); Tue, 24 Jul 2018 05:23:47 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:64251 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2388598AbeGXJWq (ORCPT ); Tue, 24 Jul 2018 05:22:46 -0400 X-UUID: 2ca3f72f16564daf9f435802eea515ff-20180724 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 130998489; Tue, 24 Jul 2018 16:17:28 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs01n1.mediatek.inc (172.21.101.68) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Tue, 24 Jul 2018 16:17:22 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1210.3 via Frontend Transport; Tue, 24 Jul 2018 16:17:22 +0800 From: Stu Hsieh To: CK Hu , Philipp Zabel CC: David Airlie , Matthias Brugger , , , , , , Stu Hsieh Subject: [PATCH v1 12/15] drm/mediatek: add layer number condition for RDMA to control plane Date: Tue, 24 Jul 2018 16:17:12 +0800 Message-ID: <1532420235-22268-13-git-send-email-stu.hsieh@mediatek.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> References: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch add layer number condition for RDMA to control plane When plane init in crtc create, it use the number of OVL layer to init plane. That's OVL can read 4 memory address. For mt2712 third ddp, it use RDMA to read memory. RDMA can read 1 memory address, so it just init one plane. For compatibility, this patch use two define OVL_LAYER_NR and RDMA_LAYER_NR to distingush two difference HW engine. Signed-off-by: Stu Hsieh --- drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 25 +++++++++++++++++-------- drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 4bf636e466f2..8ad90c62caa6 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -45,7 +45,8 @@ struct mtk_drm_crtc { bool pending_needs_vblank; struct drm_pending_vblank_event *event; - struct drm_plane planes[OVL_LAYER_NR]; + struct drm_plane planes[MAX_LAYER_NR]; + unsigned int layer_nr; bool pending_planes; void __iomem *config_regs; @@ -286,7 +287,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc) } /* Initially configure all planes */ - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -351,7 +352,7 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc) } if (mtk_crtc->pending_planes) { - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -403,7 +404,7 @@ static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc, return; /* Set all pending plane state to disabled */ - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -450,7 +451,7 @@ static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, if (mtk_crtc->event) mtk_crtc->pending_needs_vblank = true; - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -559,6 +560,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, if (!mtk_crtc) return -ENOMEM; + mtk_crtc->layer_nr = OVL_LAYER_NR; mtk_crtc->config_regs = priv->config_regs; mtk_crtc->ddp_comp_nr = path_len; mtk_crtc->ddp_comp = devm_kmalloc_array(dev, mtk_crtc->ddp_comp_nr, @@ -601,12 +603,13 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, comp_id == DDP_COMPONENT_RDMA2)) { rdma_memory_mode = comp->comp_mode; *rdma_memory_mode = true; + mtk_crtc->layer_nr = RDMA_LAYER_NR; } mtk_crtc->ddp_comp[i] = comp; } - for (zpos = 0; zpos < OVL_LAYER_NR; zpos++) { + for (zpos = 0; zpos < mtk_crtc->layer_nr; zpos++) { type = (zpos == 0) ? DRM_PLANE_TYPE_PRIMARY : (zpos == 1) ? DRM_PLANE_TYPE_CURSOR : DRM_PLANE_TYPE_OVERLAY; @@ -616,8 +619,14 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, goto unprepare; } - ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], - &mtk_crtc->planes[1], pipe); + if (mtk_crtc->layer_nr == 1) { + ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], + NULL, pipe); + } else { + ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], + &mtk_crtc->planes[1], pipe); + } + if (ret < 0) goto unprepare; drm_mode_crtc_set_gamma_size(&mtk_crtc->base, MTK_LUT_SIZE); diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h index 9d9410c67ae9..b44fefadf14a 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h @@ -18,7 +18,9 @@ #include "mtk_drm_ddp_comp.h" #include "mtk_drm_plane.h" +#define MAX_LAYER_NR 4 #define OVL_LAYER_NR 4 +#define RDMA_LAYER_NR 1 #define MTK_LUT_SIZE 512 #define MTK_MAX_BPC 10 #define MTK_MIN_BPC 3 -- 2.12.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stu Hsieh Subject: [PATCH v1 12/15] drm/mediatek: add layer number condition for RDMA to control plane Date: Tue, 24 Jul 2018 16:17:12 +0800 Message-ID: <1532420235-22268-13-git-send-email-stu.hsieh@mediatek.com> References: <1532420235-22268-1-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-1-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: CK Hu , Philipp Zabel Cc: srv_heupstream@mediatek.com, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, Stu Hsieh , Matthias Brugger , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org VGhpcyBwYXRjaCBhZGQgbGF5ZXIgbnVtYmVyIGNvbmRpdGlvbiBmb3IgUkRNQSB0byBjb250cm9s IHBsYW5lCgpXaGVuIHBsYW5lIGluaXQgaW4gY3J0YyBjcmVhdGUsCml0IHVzZSB0aGUgbnVtYmVy IG9mIE9WTCBsYXllciB0byBpbml0IHBsYW5lLgpUaGF0J3MgT1ZMIGNhbiByZWFkIDQgbWVtb3J5 IGFkZHJlc3MuCgpGb3IgbXQyNzEyIHRoaXJkIGRkcCwgaXQgdXNlIFJETUEgdG8gcmVhZCBtZW1v cnkuClJETUEgY2FuIHJlYWQgMSBtZW1vcnkgYWRkcmVzcywgc28gaXQganVzdCBpbml0IG9uZSBw bGFuZS4KCkZvciBjb21wYXRpYmlsaXR5LCB0aGlzIHBhdGNoIHVzZSB0d28gZGVmaW5lIE9WTF9M QVlFUl9OUiBhbmQKUkRNQV9MQVlFUl9OUiB0byBkaXN0aW5ndXNoIHR3byBkaWZmZXJlbmNlIEhX IGVuZ2luZS4KClNpZ25lZC1vZmYtYnk6IFN0dSBIc2llaCA8c3R1LmhzaWVoQG1lZGlhdGVrLmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgfCAyNSArKysr KysrKysrKysrKysrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9j cnRjLmggfCAgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA4IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Ny dGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwppbmRleCA0YmY2 MzZlNDY2ZjIuLjhhZDkwYzYyY2FhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2NydGMuYwpAQCAtNDUsNyArNDUsOCBAQCBzdHJ1Y3QgbXRrX2RybV9jcnRjIHsKIAlib29sCQkJ CXBlbmRpbmdfbmVlZHNfdmJsYW5rOwogCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQJ KmV2ZW50OwogCi0Jc3RydWN0IGRybV9wbGFuZQkJcGxhbmVzW09WTF9MQVlFUl9OUl07CisJc3Ry dWN0IGRybV9wbGFuZQkJcGxhbmVzW01BWF9MQVlFUl9OUl07CisJdW5zaWduZWQgaW50CQkJbGF5 ZXJfbnI7CiAJYm9vbAkJCQlwZW5kaW5nX3BsYW5lczsKIAogCXZvaWQgX19pb21lbQkJCSpjb25m aWdfcmVnczsKQEAgLTI4Niw3ICsyODcsNyBAQCBzdGF0aWMgaW50IG10a19jcnRjX2RkcF9od19p bml0KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQogCX0KIAogCS8qIEluaXRpYWxseSBj b25maWd1cmUgYWxsIHBsYW5lcyAqLwotCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkr KykgeworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+bGF5ZXJfbnI7IGkrKykgewogCQlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldOwogCQlzdHJ1Y3QgbXRr X3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKIApAQCAtMzUxLDcgKzM1Miw3IEBAIHN0YXRpYyB2 b2lkIG10a19jcnRjX2RkcF9jb25maWcoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCX0KIAogCWlm IChtdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlF Ul9OUjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+bGF5ZXJfbnI7IGkrKykg ewogCQkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXTsKIAkJ CXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOwogCkBAIC00MDMsNyArNDA0LDcg QEAgc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YywKIAkJcmV0dXJuOwogCiAJLyogU2V0IGFsbCBwZW5kaW5nIHBsYW5lIHN0YXRlIHRv IGRpc2FibGVkICovCi0JZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsrKSB7CisJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5sYXllcl9ucjsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV07CiAJCXN0cnVjdCBtdGtfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlOwogCkBAIC00NTAsNyArNDUxLDcgQEAgc3RhdGljIHZvaWQgbXRrX2Ry bV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIAlpZiAobXRrX2Ny dGMtPmV2ZW50KQogCQltdGtfY3J0Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSB0cnVlOwotCWZv ciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtdGtf Y3J0Yy0+bGF5ZXJfbnI7IGkrKykgewogCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtf Y3J0Yy0+cGxhbmVzW2ldOwogCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsK IApAQCAtNTU5LDYgKzU2MCw3IEBAIGludCBtdGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm1fZGV2LAogCWlmICghbXRrX2NydGMpCiAJCXJldHVybiAtRU5PTUVNOwogCisJ bXRrX2NydGMtPmxheWVyX25yID0gT1ZMX0xBWUVSX05SOwogCW10a19jcnRjLT5jb25maWdfcmVn cyA9IHByaXYtPmNvbmZpZ19yZWdzOwogCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBhdGhfbGVu OwogCW10a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10a19jcnRj LT5kZHBfY29tcF9uciwKQEAgLTYwMSwxMiArNjAzLDEzIEBAIGludCBtdGtfZHJtX2NydGNfY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAogCQkJICAgICAgIGNvbXBfaWQgPT0gRERQ X0NPTVBPTkVOVF9SRE1BMikpIHsKIAkJCXJkbWFfbWVtb3J5X21vZGUgPSBjb21wLT5jb21wX21v ZGU7CiAJCQkqcmRtYV9tZW1vcnlfbW9kZSA9IHRydWU7CisJCQltdGtfY3J0Yy0+bGF5ZXJfbnIg PSBSRE1BX0xBWUVSX05SOwogCQl9CiAKIAkJbXRrX2NydGMtPmRkcF9jb21wW2ldID0gY29tcDsK IAl9CiAKLQlmb3IgKHpwb3MgPSAwOyB6cG9zIDwgT1ZMX0xBWUVSX05SOyB6cG9zKyspIHsKKwlm b3IgKHpwb3MgPSAwOyB6cG9zIDwgbXRrX2NydGMtPmxheWVyX25yOyB6cG9zKyspIHsKIAkJdHlw ZSA9ICh6cG9zID09IDApID8gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSA6CiAJCQkJKHpwb3MgPT0g MSkgPyBEUk1fUExBTkVfVFlQRV9DVVJTT1IgOgogCQkJCQkJRFJNX1BMQU5FX1RZUEVfT1ZFUkxB WTsKQEAgLTYxNiw4ICs2MTksMTQgQEAgaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRy bV9kZXZpY2UgKmRybV9kZXYsCiAJCQlnb3RvIHVucHJlcGFyZTsKIAl9CiAKLQlyZXQgPSBtdGtf ZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0sCi0J CQkJJm10a19jcnRjLT5wbGFuZXNbMV0sIHBpcGUpOworCWlmIChtdGtfY3J0Yy0+bGF5ZXJfbnIg PT0gMSkgeworCQlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0YywgJm10 a19jcnRjLT5wbGFuZXNbMF0sCisJCQkJCU5VTEwsIHBpcGUpOworCX0gZWxzZSB7CisJCXJldCA9 IG10a19kcm1fY3J0Y19pbml0KGRybV9kZXYsIG10a19jcnRjLCAmbXRrX2NydGMtPnBsYW5lc1sw XSwKKwkJCQkJJm10a19jcnRjLT5wbGFuZXNbMV0sIHBpcGUpOworCX0KKwogCWlmIChyZXQgPCAw KQogCQlnb3RvIHVucHJlcGFyZTsKIAlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKCZtdGtf Y3J0Yy0+YmFzZSwgTVRLX0xVVF9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2NydGMuaAppbmRleCA5ZDk0MTBjNjdhZTkuLmI0NGZlZmFkZjE0YSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApAQCAtMTgsNyArMTgsOSBAQAogI2luY2x1ZGUgIm10 a19kcm1fZGRwX2NvbXAuaCIKICNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCiAKKyNkZWZpbmUg TUFYX0xBWUVSX05SCTQKICNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKKyNkZWZpbmUgUkRNQV9MQVlF Ul9OUgkxCiAjZGVmaW5lIE1US19MVVRfU0laRQk1MTIKICNkZWZpbmUgTVRLX01BWF9CUEMJMTAK ICNkZWZpbmUgTVRLX01JTl9CUEMJMwotLSAKMi4xMi41CgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: stu.hsieh@mediatek.com (Stu Hsieh) Date: Tue, 24 Jul 2018 16:17:12 +0800 Subject: [PATCH v1 12/15] drm/mediatek: add layer number condition for RDMA to control plane In-Reply-To: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> References: <1532420235-22268-1-git-send-email-stu.hsieh@mediatek.com> Message-ID: <1532420235-22268-13-git-send-email-stu.hsieh@mediatek.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org This patch add layer number condition for RDMA to control plane When plane init in crtc create, it use the number of OVL layer to init plane. That's OVL can read 4 memory address. For mt2712 third ddp, it use RDMA to read memory. RDMA can read 1 memory address, so it just init one plane. For compatibility, this patch use two define OVL_LAYER_NR and RDMA_LAYER_NR to distingush two difference HW engine. Signed-off-by: Stu Hsieh --- drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 25 +++++++++++++++++-------- drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index 4bf636e466f2..8ad90c62caa6 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -45,7 +45,8 @@ struct mtk_drm_crtc { bool pending_needs_vblank; struct drm_pending_vblank_event *event; - struct drm_plane planes[OVL_LAYER_NR]; + struct drm_plane planes[MAX_LAYER_NR]; + unsigned int layer_nr; bool pending_planes; void __iomem *config_regs; @@ -286,7 +287,7 @@ static int mtk_crtc_ddp_hw_init(struct mtk_drm_crtc *mtk_crtc) } /* Initially configure all planes */ - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -351,7 +352,7 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc) } if (mtk_crtc->pending_planes) { - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -403,7 +404,7 @@ static void mtk_drm_crtc_atomic_disable(struct drm_crtc *crtc, return; /* Set all pending plane state to disabled */ - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -450,7 +451,7 @@ static void mtk_drm_crtc_atomic_flush(struct drm_crtc *crtc, if (mtk_crtc->event) mtk_crtc->pending_needs_vblank = true; - for (i = 0; i < OVL_LAYER_NR; i++) { + for (i = 0; i < mtk_crtc->layer_nr; i++) { struct drm_plane *plane = &mtk_crtc->planes[i]; struct mtk_plane_state *plane_state; @@ -559,6 +560,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, if (!mtk_crtc) return -ENOMEM; + mtk_crtc->layer_nr = OVL_LAYER_NR; mtk_crtc->config_regs = priv->config_regs; mtk_crtc->ddp_comp_nr = path_len; mtk_crtc->ddp_comp = devm_kmalloc_array(dev, mtk_crtc->ddp_comp_nr, @@ -601,12 +603,13 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, comp_id == DDP_COMPONENT_RDMA2)) { rdma_memory_mode = comp->comp_mode; *rdma_memory_mode = true; + mtk_crtc->layer_nr = RDMA_LAYER_NR; } mtk_crtc->ddp_comp[i] = comp; } - for (zpos = 0; zpos < OVL_LAYER_NR; zpos++) { + for (zpos = 0; zpos < mtk_crtc->layer_nr; zpos++) { type = (zpos == 0) ? DRM_PLANE_TYPE_PRIMARY : (zpos == 1) ? DRM_PLANE_TYPE_CURSOR : DRM_PLANE_TYPE_OVERLAY; @@ -616,8 +619,14 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, goto unprepare; } - ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], - &mtk_crtc->planes[1], pipe); + if (mtk_crtc->layer_nr == 1) { + ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], + NULL, pipe); + } else { + ret = mtk_drm_crtc_init(drm_dev, mtk_crtc, &mtk_crtc->planes[0], + &mtk_crtc->planes[1], pipe); + } + if (ret < 0) goto unprepare; drm_mode_crtc_set_gamma_size(&mtk_crtc->base, MTK_LUT_SIZE); diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h index 9d9410c67ae9..b44fefadf14a 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h @@ -18,7 +18,9 @@ #include "mtk_drm_ddp_comp.h" #include "mtk_drm_plane.h" +#define MAX_LAYER_NR 4 #define OVL_LAYER_NR 4 +#define RDMA_LAYER_NR 1 #define MTK_LUT_SIZE 512 #define MTK_MAX_BPC 10 #define MTK_MIN_BPC 3 -- 2.12.5