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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 63013C38142 for ; Mon, 23 Jan 2023 08:14:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1AzoSfqklgA+bd33znvprbzfG3WPzVJQsikVdWGO6eU=; b=bjbKKNd9mEdpT9 3FFV9/nfL0r/whU/xv6XqAg+FwPGcpHO7AglL45jvn+cGn3rvBR0CN1hya5ek961MIhztHl522J/t dUwWJ3WEMsvnRgRsmr3tBOLVp2I7GQUADnPT/52Wk4bUVb8VD2ALfBeDRASVDG3rjBeOtzsy+skYV 0iEf/1Je8poj46v2+cydrNipmIaAn98cUkCJlwI1r4+zD+6tqlf/t1diZAwisYeh7bV8Xwq9TzpeX fUlc16FMtnDicFBmZI4ctxuwX/aJ3Xq0wD1SIZgr8VR8MUAZbTv0+ns4oEP0Bs48pVEwT2IFT2WUr uX3OHWyD8gU9zmCeRP5A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pJrxC-00GJcQ-2f; Mon, 23 Jan 2023 08:13:22 +0000 Received: from smtprelay02.ispgateway.de ([80.67.18.14]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pJrx8-00GJZD-MQ for linux-arm-kernel@lists.infradead.org; Mon, 23 Jan 2023 08:13:20 +0000 Received: from [89.1.81.74] (helo=karo-electronics.de) by smtprelay02.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pJrxh-0005ss-PT; Mon, 23 Jan 2023 09:13:53 +0100 Date: Mon, 23 Jan 2023 09:13:07 +0100 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= To: Liu Ying Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, marex@denx.de, stefan@agner.ch, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com Subject: Re: [PATCH 2/2] drm: lcdif: Add i.MX93 LCDIF support Message-ID: <20230123091307.46ace33f@karo-electronics.de> In-Reply-To: <20230123072358.1060670-3-victor.liu@nxp.com> References: <20230123072358.1060670-1-victor.liu@nxp.com> <20230123072358.1060670-3-victor.liu@nxp.com> Organization: Ka-Ro electronics GmbH MIME-Version: 1.0 X-Df-Sender: bHdAa2Fyby1lbGVjdHJvbmljcy5kb21haW5mYWN0b3J5LWt1bmRlLmRl X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230123_001318_791428_ABFCFDE4 X-CRM114-Status: GOOD ( 22.21 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpPbiBNb24sIDIzIEphbiAyMDIzIDE1OjIzOjU4ICswODAwIExpdSBZaW5nIHdyb3RlOgo+ IFRoZSBMQ0RJRiBlbWJlZGRlZCBpbiBpLk1YOTMgU29DIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1l IHRvIHRob3NlCj4gaW4gaS5NWDhtcCBTb0MuICBIb3dldmVyLCBpLk1YOTMgTENESUYgbWF5IGNv bm5lY3Qgd2l0aCBNSVBJIERTSQo+IGNvbnRyb2xsZXIgdGhyb3VnaCBMQ0RJRiBjcm9zcyBsaW5l IHBhdHRlcm4oY29udHJvbGxlZCBieSBtZWRpYW1peAo+IGJsay1jdHJsKSBvciBjb25uZWN0IHdp dGggTFZEUyBkaXNwbGF5IGJyaWRnZShMREIpIGRpcmVjdGx5IG9yIGEKPiBwYXJhbGxlbCBkaXNw bGF5KGFsc28gdGhyb3VnaCBtZWRpYW1peCBibGstY3RybCksIHNvIGFkZCBtdWx0aXBsZQo+IGVu Y29kZXJzKHdpdGggRFJNX01PREVfRU5DT0RFUl9OT05FIGVuY29kZXIgdHlwZSkgc3VwcG9ydCBp biB0aGUKPiBMQ0RJRiBEUk0gZHJpdmVyIGFuZCBmaW5kIGEgYnJpZGdlIHRvIGF0dGFjaCB0aGUg cmVsZXZhbnQgZW5jb2RlcidzCj4gY2hhaW4gd2hlbiBuZWVkZWQuICBXaGlsZSBhdCBpdCwgZGVy aXZlIGxjZGlmX2NydGNfc3RhdGUgc3RydWN0dXJlCj4gZnJvbSBkcm1fY3J0Y19zdGF0ZSBzdHJ1 Y3R1cmUgdG8gaW50cm9kdWNlIGJ1c19mb3JtYXQgYW5kIGJ1c19mbGFncwo+IHN0YXRlcyBzbyB0 aGF0IHRoZSBuZXh0IGRvd25zdHJlYW0gYnJpZGdlcyBtYXkgdXNlIGNvbnNpc3RlbnQgYnVzCj4g Zm9ybWF0IGFuZCBidXMgZmxhZ3MuCj4gCj4gU2lnbmVkLW9mZi1ieTogTGl1IFlpbmcgPHZpY3Rv ci5saXVAbnhwLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL214c2ZiL2xjZGlmX2Rydi5j IHwgIDczICsrKysrKysrKy0tCj4gIGRyaXZlcnMvZ3B1L2RybS9teHNmYi9sY2RpZl9kcnYuaCB8 ICAgNiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMgfCAyMDYgKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tCj4gIDMgZmlsZXMgY2hhbmdlZCwgMjA4IGluc2VydGlv bnMoKyksIDc3IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bXhzZmIvbGNkaWZfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfZHJ2LmMKPiBp bmRleCBjYzJjZWIzMDFiOTYuLjRkNDFmNmI2ZWIxNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbXhzZmIvbGNkaWZfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNk aWZfZHJ2LmMKPiBAQCAtOSwxMyArOSwxNiBAQAo+ICAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBp bmcuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2Uu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiAgCj4gICNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fYnJp ZGdlLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9l bmNvZGVyLmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2ZiZGV2X2dlbmVyaWMuaD4KPiAgI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX2RtYV9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2Zy YW1lYnVmZmVyX2hlbHBlci5oPgo+IEBAIC0zOCwyMSArNDEsNzAgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIGxjZGlmX21vZGVfY29uZmlnX2hlbHBl cnMgPSB7Cj4gIAkuYXRvbWljX2NvbW1pdF90YWlsID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0 X3RhaWxfcnBtLAo+ICB9Owo+ICAKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9m dW5jcyBsY2RpZl9lbmNvZGVyX2Z1bmNzID0gewo+ICsJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9j bGVhbnVwLAo+ICt9Owo+ICsKPiAgc3RhdGljIGludCBsY2RpZl9hdHRhY2hfYnJpZGdlKHN0cnVj dCBsY2RpZl9kcm1fcHJpdmF0ZSAqbGNkaWYpCj4gIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk cm0gPSBsY2RpZi0+ZHJtOwo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbGNkaWYtPmRybS0+ZGV2 Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICplcDsKPiAgCXN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2U7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCWJyaWRnZSA9IGRldm1fZHJtX29mX2dldF9icmlkZ2Uo ZHJtLT5kZXYsIGRybS0+ZGV2LT5vZl9ub2RlLCAwLCAwKTsKPiAtCWlmIChJU19FUlIoYnJpZGdl KSkKPiAtCQlyZXR1cm4gUFRSX0VSUihicmlkZ2UpOwo+IC0KPiAtCXJldCA9IGRybV9icmlkZ2Vf YXR0YWNoKCZsY2RpZi0+ZW5jb2RlciwgYnJpZGdlLCBOVUxMLCAwKTsKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZHJtLT5kZXYsIHJldCwgIkZhaWxlZCB0byBhdHRhY2gg YnJpZGdlXG4iKTsKPiAtCj4gLQlsY2RpZi0+YnJpZGdlID0gYnJpZGdlOwo+ICsJZm9yX2VhY2hf ZW5kcG9pbnRfb2Zfbm9kZShkZXYtPm9mX25vZGUsIGVwKSB7Cj4gKwkJc3RydWN0IGRldmljZV9u b2RlICpyZW1vdGU7Cj4gKwkJc3RydWN0IG9mX2VuZHBvaW50IG9mX2VwOwo+ICsJCXN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcjsKPiArCj4gKwkJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90 ZV9wb3J0X3BhcmVudChlcCk7Cj4gKwkJaWYgKCFyZW1vdGUgfHwgIW9mX2RldmljZV9pc19hdmFp bGFibGUocmVtb3RlKSkgewonIXJlbW90ZSB8fCcgaXMgcmVkdW5kYW50LCBzaW5jZSBvZl9kZXZp Y2VfaXNfYXZhaWxhYmxlIGFscmVhZHkgY2hlY2tzCmZvciBhIE5VTEwgcG9pbnRlci4KClsuLi5d Cgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMKPiBpbmRleCAyNjJiYzQzYjEwNzkuLmJhMzY0 NDdlZDkwMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXhzZmIvbGNkaWZfa21zLmMKWy4uLl0KPiBAQCAtNTI5 LDYgKzU4MCw0NiBAQCBzdGF0aWMgdm9pZCBsY2RpZl9jcnRjX2F0b21pY19kaXNhYmxlKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKPiAgCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYpOwo+ICB9 Cj4gIAo+ICtzdGF0aWMgdm9pZCBsY2RpZl9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPiArewo+ICsJc3RydWN0IGxjZGlmX2NydGNfc3RhdGUgKnN0YXRlOwo+ICsKPiArCWlmIChj cnRjLT5zdGF0ZSkKPiArCQlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZShj cnRjLT5zdGF0ZSk7Cj4gKwo+ICsJa2ZyZWUodG9fbGNkaWZfY3J0Y19zdGF0ZShjcnRjLT5zdGF0 ZSkpOwo+CklmIGNydGMtc3RhdGUgY2FuIGJlIE5VTEwgYXQgdGhpcyBwb2ludCwgdGhpcyB3aWxs IG9ubHkgd29yayBhcyBsb25nIGFzCidiYXNlJyBpcyB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBs Y2RpZl9jcnRjX3N0YXRlIHN0cnVjdCAod2hpY2gKY3VycmVudGx5IGlzIHRoZSBjYXNlLCBidXQg dGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhpcyB3aWxsIGFsd2F5cwpiZSB0aGlzIHdheSks IG90aGVyd2lzZSB0aGUgaWYgY2xhdXNlIGFib3ZlIGlzIG5vdCBuZWVkZWQuCgoKCkxvdGhhciBX YcOfbWFubgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo= 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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6D11DC38142 for ; Mon, 23 Jan 2023 08:39:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231478AbjAWIjP convert rfc822-to-8bit (ORCPT ); Mon, 23 Jan 2023 03:39:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230360AbjAWIjO (ORCPT ); Mon, 23 Jan 2023 03:39:14 -0500 X-Greylist: delayed 1556 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Mon, 23 Jan 2023 00:39:11 PST Received: from smtprelay02.ispgateway.de (smtprelay02.ispgateway.de [80.67.18.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4ED731CAFD; Mon, 23 Jan 2023 00:39:11 -0800 (PST) Received: from [89.1.81.74] (helo=karo-electronics.de) by smtprelay02.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pJrxh-0005ss-PT; Mon, 23 Jan 2023 09:13:53 +0100 Date: Mon, 23 Jan 2023 09:13:07 +0100 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= To: Liu Ying Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, marex@denx.de, stefan@agner.ch, airlied@gmail.com, daniel@ffwll.ch, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com Subject: Re: [PATCH 2/2] drm: lcdif: Add i.MX93 LCDIF support Message-ID: <20230123091307.46ace33f@karo-electronics.de> In-Reply-To: <20230123072358.1060670-3-victor.liu@nxp.com> References: <20230123072358.1060670-1-victor.liu@nxp.com> <20230123072358.1060670-3-victor.liu@nxp.com> Organization: Ka-Ro electronics GmbH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT X-Df-Sender: bHdAa2Fyby1lbGVjdHJvbmljcy5kb21haW5mYWN0b3J5LWt1bmRlLmRl Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Hi, On Mon, 23 Jan 2023 15:23:58 +0800 Liu Ying wrote: > The LCDIF embedded in i.MX93 SoC is essentially the same to those > in i.MX8mp SoC. However, i.MX93 LCDIF may connect with MIPI DSI > controller through LCDIF cross line pattern(controlled by mediamix > blk-ctrl) or connect with LVDS display bridge(LDB) directly or a > parallel display(also through mediamix blk-ctrl), so add multiple > encoders(with DRM_MODE_ENCODER_NONE encoder type) support in the > LCDIF DRM driver and find a bridge to attach the relevant encoder's > chain when needed. While at it, derive lcdif_crtc_state structure > from drm_crtc_state structure to introduce bus_format and bus_flags > states so that the next downstream bridges may use consistent bus > format and bus flags. > > Signed-off-by: Liu Ying > --- > drivers/gpu/drm/mxsfb/lcdif_drv.c | 73 +++++++++-- > drivers/gpu/drm/mxsfb/lcdif_drv.h | 6 +- > drivers/gpu/drm/mxsfb/lcdif_kms.c | 206 ++++++++++++++++++++---------- > 3 files changed, 208 insertions(+), 77 deletions(-) > > diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lcdif_drv.c > index cc2ceb301b96..4d41f6b6eb14 100644 > --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c > +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c > @@ -9,13 +9,16 @@ > #include > #include > #include > +#include > #include > +#include > #include > #include > > #include > #include > #include > +#include > #include > #include > #include > @@ -38,21 +41,70 @@ static const struct drm_mode_config_helper_funcs lcdif_mode_config_helpers = { > .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, > }; > > +static const struct drm_encoder_funcs lcdif_encoder_funcs = { > + .destroy = drm_encoder_cleanup, > +}; > + > static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif) > { > - struct drm_device *drm = lcdif->drm; > + struct device *dev = lcdif->drm->dev; > + struct device_node *ep; > struct drm_bridge *bridge; > int ret; > > - bridge = devm_drm_of_get_bridge(drm->dev, drm->dev->of_node, 0, 0); > - if (IS_ERR(bridge)) > - return PTR_ERR(bridge); > - > - ret = drm_bridge_attach(&lcdif->encoder, bridge, NULL, 0); > - if (ret) > - return dev_err_probe(drm->dev, ret, "Failed to attach bridge\n"); > - > - lcdif->bridge = bridge; > + for_each_endpoint_of_node(dev->of_node, ep) { > + struct device_node *remote; > + struct of_endpoint of_ep; > + struct drm_encoder *encoder; > + > + remote = of_graph_get_remote_port_parent(ep); > + if (!remote || !of_device_is_available(remote)) { '!remote ||' is redundant, since of_device_is_available already checks for a NULL pointer. [...] > diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lcdif_kms.c > index 262bc43b1079..ba36447ed900 100644 > --- a/drivers/gpu/drm/mxsfb/lcdif_kms.c > +++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c [...] > @@ -529,6 +580,46 @@ static void lcdif_crtc_atomic_disable(struct drm_crtc *crtc, > pm_runtime_put_sync(drm->dev); > } > > +static void lcdif_crtc_reset(struct drm_crtc *crtc) > +{ > + struct lcdif_crtc_state *state; > + > + if (crtc->state) > + __drm_atomic_helper_crtc_destroy_state(crtc->state); > + > + kfree(to_lcdif_crtc_state(crtc->state)); > If crtc-state can be NULL at this point, this will only work as long as 'base' is the first member of the lcdif_crtc_state struct (which currently is the case, but there is no guarantee that this will always be this way), otherwise the if clause above is not needed. Lothar Waßmann 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 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C159BC05027 for ; Mon, 23 Jan 2023 08:39:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C79E610E312; Mon, 23 Jan 2023 08:39:13 +0000 (UTC) X-Greylist: delayed 1556 seconds by postgrey-1.36 at gabe; Mon, 23 Jan 2023 08:39:11 UTC Received: from smtprelay02.ispgateway.de (smtprelay02.ispgateway.de [80.67.18.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4F19B10E1E2 for ; Mon, 23 Jan 2023 08:39:11 +0000 (UTC) Received: from [89.1.81.74] (helo=karo-electronics.de) by smtprelay02.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1pJrxh-0005ss-PT; Mon, 23 Jan 2023 09:13:53 +0100 Date: Mon, 23 Jan 2023 09:13:07 +0100 From: Lothar =?UTF-8?B?V2HDn21hbm4=?= To: Liu Ying Subject: Re: [PATCH 2/2] drm: lcdif: Add i.MX93 LCDIF support Message-ID: <20230123091307.46ace33f@karo-electronics.de> In-Reply-To: <20230123072358.1060670-3-victor.liu@nxp.com> References: <20230123072358.1060670-1-victor.liu@nxp.com> <20230123072358.1060670-3-victor.liu@nxp.com> Organization: Ka-Ro electronics GmbH MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Df-Sender: bHdAa2Fyby1lbGVjdHJvbmljcy5kb21haW5mYWN0b3J5LWt1bmRlLmRl X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: marex@denx.de, devicetree@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, linux-kernel@vger.kernel.org, robh+dt@kernel.org, dri-devel@lists.freedesktop.org, kernel@pengutronix.de, linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi, On Mon, 23 Jan 2023 15:23:58 +0800 Liu Ying wrote: > The LCDIF embedded in i.MX93 SoC is essentially the same to those > in i.MX8mp SoC. However, i.MX93 LCDIF may connect with MIPI DSI > controller through LCDIF cross line pattern(controlled by mediamix > blk-ctrl) or connect with LVDS display bridge(LDB) directly or a > parallel display(also through mediamix blk-ctrl), so add multiple > encoders(with DRM_MODE_ENCODER_NONE encoder type) support in the > LCDIF DRM driver and find a bridge to attach the relevant encoder's > chain when needed. While at it, derive lcdif_crtc_state structure > from drm_crtc_state structure to introduce bus_format and bus_flags > states so that the next downstream bridges may use consistent bus > format and bus flags. >=20 > Signed-off-by: Liu Ying > --- > drivers/gpu/drm/mxsfb/lcdif_drv.c | 73 +++++++++-- > drivers/gpu/drm/mxsfb/lcdif_drv.h | 6 +- > drivers/gpu/drm/mxsfb/lcdif_kms.c | 206 ++++++++++++++++++++---------- > 3 files changed, 208 insertions(+), 77 deletions(-) >=20 > diff --git a/drivers/gpu/drm/mxsfb/lcdif_drv.c b/drivers/gpu/drm/mxsfb/lc= dif_drv.c > index cc2ceb301b96..4d41f6b6eb14 100644 > --- a/drivers/gpu/drm/mxsfb/lcdif_drv.c > +++ b/drivers/gpu/drm/mxsfb/lcdif_drv.c > @@ -9,13 +9,16 @@ > #include > #include > #include > +#include > #include > +#include > #include > #include > =20 > #include > #include > #include > +#include > #include > #include > #include > @@ -38,21 +41,70 @@ static const struct drm_mode_config_helper_funcs lcdi= f_mode_config_helpers =3D { > .atomic_commit_tail =3D drm_atomic_helper_commit_tail_rpm, > }; > =20 > +static const struct drm_encoder_funcs lcdif_encoder_funcs =3D { > + .destroy =3D drm_encoder_cleanup, > +}; > + > static int lcdif_attach_bridge(struct lcdif_drm_private *lcdif) > { > - struct drm_device *drm =3D lcdif->drm; > + struct device *dev =3D lcdif->drm->dev; > + struct device_node *ep; > struct drm_bridge *bridge; > int ret; > =20 > - bridge =3D devm_drm_of_get_bridge(drm->dev, drm->dev->of_node, 0, 0); > - if (IS_ERR(bridge)) > - return PTR_ERR(bridge); > - > - ret =3D drm_bridge_attach(&lcdif->encoder, bridge, NULL, 0); > - if (ret) > - return dev_err_probe(drm->dev, ret, "Failed to attach bridge\n"); > - > - lcdif->bridge =3D bridge; > + for_each_endpoint_of_node(dev->of_node, ep) { > + struct device_node *remote; > + struct of_endpoint of_ep; > + struct drm_encoder *encoder; > + > + remote =3D of_graph_get_remote_port_parent(ep); > + if (!remote || !of_device_is_available(remote)) { '!remote ||' is redundant, since of_device_is_available already checks for a NULL pointer. [...] > diff --git a/drivers/gpu/drm/mxsfb/lcdif_kms.c b/drivers/gpu/drm/mxsfb/lc= dif_kms.c > index 262bc43b1079..ba36447ed900 100644 > --- a/drivers/gpu/drm/mxsfb/lcdif_kms.c > +++ b/drivers/gpu/drm/mxsfb/lcdif_kms.c [...] > @@ -529,6 +580,46 @@ static void lcdif_crtc_atomic_disable(struct drm_crt= c *crtc, > pm_runtime_put_sync(drm->dev); > } > =20 > +static void lcdif_crtc_reset(struct drm_crtc *crtc) > +{ > + struct lcdif_crtc_state *state; > + > + if (crtc->state) > + __drm_atomic_helper_crtc_destroy_state(crtc->state); > + > + kfree(to_lcdif_crtc_state(crtc->state)); > If crtc-state can be NULL at this point, this will only work as long as 'base' is the first member of the lcdif_crtc_state struct (which currently is the case, but there is no guarantee that this will always be this way), otherwise the if clause above is not needed. Lothar Wa=C3=9Fmann