From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Date: Fri, 12 May 2017 12:38:17 +0300 Message-ID: <1645078.FS6fmucJTb@avalon> References: <20170510134109.GF12629@intel.com> <20170510151433.7ewizmeeidrqonan@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id 942EA6E0AD for ; Fri, 12 May 2017 09:38:16 +0000 (UTC) In-Reply-To: <20170510151433.7ewizmeeidrqonan@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKT24gV2VkbmVzZGF5IDEwIE1heSAyMDE3IDE3OjE0OjMzIERhbmllbCBWZXR0 ZXIgd3JvdGU6Cj4gT24gV2VkLCBNYXkgMTAsIDIwMTcgYXQgMDQ6NDE6MDlQTSArMDMwMCwgVmls bGUgU3lyasOkbMOkIHdyb3RlOgo+ID4gT24gVHVlLCBNYXkgMDksIDIwMTcgYXQgMDY6MDA6MTNQ TSArMDEwMCwgSm9zZSBBYnJldSB3cm90ZToKPiA+ID4gSW50cm9kdWNlIGEgbmV3IGhlbHBlciBm dW5jdGlvbiB3aGljaCBjYWxscyBtb2RlX3ZhbGlkKCkgY2FsbGJhY2sKPiA+ID4gZm9yIGFsbCBi cmlkZ2VzIGluIGFuIGVuY29kZXIgY2hhaW4uCj4gPiA+IAo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBK b3NlIEFicmV1IDxqb2FicmV1QHN5bm9wc3lzLmNvbT4KPiA+ID4gQ2M6IENhcmxvcyBQYWxtaW5o YSA8cGFsbWluaGFAc3lub3BzeXMuY29tPgo+ID4gPiBDYzogQWxleGV5IEJyb2RraW4gPGFicm9k a2luQHN5bm9wc3lzLmNvbT4KPiA+ID4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFs YUBsaW51eC5pbnRlbC5jb20+Cj4gPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVy QGZmd2xsLmNoPgo+ID4gPiBDYzogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Cj4gPiA+ IENjOiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgo+ID4gPiBDYzogQXJjaGl0 IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPiA+ID4gLS0tCj4gPiA+IAo+ID4gPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gPiAgaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oICAgICB8ICAyICsrCj4g PiA+ICAyIGZpbGVzIGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKykKPiA+ID4gCj4gPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9icmlkZ2UuYwo+ID4gPiBpbmRleCA4NmE3NjM3Li5kYzhjZGZlIDEwMDY0NAo+ID4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYnJpZGdlLmMKPiA+ID4gQEAgLTIwNiw2ICsyMDYsMzkgQEAgYm9vbCBkcm1fYnJpZGdl X21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UKPiA+ID4gKmJyaWRnZSwKPiA+ID4gCj4gPiA+ ICBFWFBPUlRfU1lNQk9MKGRybV9icmlkZ2VfbW9kZV9maXh1cCk7Cj4gPiA+ICAKPiA+ID4gIC8q Kgo+ID4gPiAKPiA+ID4gKyAqIGRybV9icmlkZ2VfbW9kZV92YWxpZCAtIHZhbGlkYXRlIHRoZSBt b2RlIGFnYWluc3QgYWxsIGJyaWRnZXMgaW4gdGhlCj4gPiA+ICsgKiAJCQkgICBlbmNvZGVyIGNo YWluLgo+ID4gPiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4gPiA+ICsg KiBAbW9kZTogZGVzaXJlZCBtb2RlIHRvIGJlIHZhbGlkYXRlZAo+ID4gPiArICoKPiA+ID4gKyAq IENhbGxzICZkcm1fYnJpZGdlX2Z1bmNzLm1vZGVfdmFsaWQgZm9yIGFsbCB0aGUgYnJpZGdlcyBp biB0aGUKPiA+ID4gZW5jb2Rlcgo+ID4gPiArICogY2hhaW4sIHN0YXJ0aW5nIGZyb20gdGhlIGZp cnN0IGJyaWRnZSB0byB0aGUgbGFzdC4gSWYgYXQgbGVhc3Qgb25lCj4gPiA+IGJyaWRnZSArICog ZG9lcyBub3QgYWNjZXB0IHRoZSBtb2RlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBlcnJvcgo+ ID4gPiBjb2RlLgo+ID4gPiArICoKPiA+ID4gKyAqIE5vdGU6IHRoZSBicmlkZ2UgcGFzc2VkIHNo b3VsZCBiZSB0aGUgb25lIGNsb3Nlc3QgdG8gdGhlIGVuY29kZXIuCj4gPiA+ICsgKgo+ID4gPiAr ICogUkVUVVJOUzoKPiA+ID4gKyAqIE1PREVfT0sgb24gc3VjY2VzcywgZHJtX21vZGVfc3RhdHVz IEVudW0gZXJyb3IgY29kZSBvbiBmYWlsdXJlCj4gPiA+ICsgKi8KPiA+ID4gK2VudW0gZHJtX21v ZGVfc3RhdHVzIGRybV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAo+ID4gPiArCQkJCQkgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAKKm1vZGUpCj4g PiA+ICt7Cj4gPiA+ICsJZW51bSBkcm1fbW9kZV9zdGF0dXMgcmV0ID0gTU9ERV9PSzsKPiA+ID4g Kwo+ID4gPiArCWlmICghYnJpZGdlKQo+ID4gPiArCQlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ ICsJaWYgKGJyaWRnZS0+ZnVuY3MtPm1vZGVfdmFsaWQpCj4gPiA+ICsJCXJldCA9IGJyaWRnZS0+ ZnVuY3MtPm1vZGVfdmFsaWQoYnJpZGdlLCBtb2RlKTsKPiA+ID4gKwo+ID4gPiArCWlmIChyZXQg IT0gTU9ERV9PSykKPiA+ID4gKwkJcmV0dXJuIHJldDsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBk cm1fYnJpZGdlX21vZGVfdmFsaWQoYnJpZGdlLT5uZXh0LCBtb2RlKTsKPiA+IAo+ID4gTG9va3Mg bGlrZSBpdCBzaG91bGQgYmUgcHJldHR5IHRyaXZpYWwgdG8gYXZvaWQgdGhlIHJlY3Vyc2lvbi4K PiA+IAo+ID4gQW0gSSBjb3JyZWN0IGluIGludGVycHJldGluZyB0aGlzIHRoYXQgYnJpZGdlcyBo YXZlIHNvbWUga2luZCBvZgo+ID4gYSBoYW5kIHJvbGxlZCBsaW5rZWQgbGlzdCBpbXBsZW1lbnRh dGlvbj8gUmV1c2luZyB0aGUgc3RhbmRhcmQKPiA+IGxpbmtlZCBsaXN0cyB3b3VsZCBhbGxvdyB5 b3UgdG8gdXNlIGxpc3RfZm9yX2VhY2goKSBldGMuCj4gCj4gWWVhaCBpdCdzIGEgaGFuZC1yb2xs ZWQgbGlzdCwgYnV0IGN1cnJlbnQgaHcgYWxzbyBoYXMgYSBicmlkZ2UgbmVzdGluZwo+IGRlcHRo IG9mIDIsIHNvIGl0IHJlYWxseSBkb2Vzbid0IG1hdHRlci4gSSBndWVzcyBvbmNlIHdlIGhhdmUg cmVhbCBsb25nCj4gY2hhaW5zIG9mIGJyaWRnZXMgd2UgY2FuIGZpeCB0aGlzIChhbmQganVzdCB1 c2luZyBsaXN0X2hlYWQgc291bmRzIGxpa2UgYQo+IGdyZWF0IGlkZWEpLgoKRXZlbiBpZiBub3Qg cmVhbGx5IG5lZWRlZCByaWdodCBub3csIGl0J3MgYSBwcmV0dHkgZWFzeSBjbGVhbnVwLCBpZiBK b3NlIGhhcyAKdGltZSB0byBoYW5kbGUgaXQgaW4gdjMgb2YgdGhpcyBzZXJpZXMgbGV0J3Mgbm90 IHBvc3Rwb25lIGl0IDstKQoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757186AbdELJis (ORCPT ); Fri, 12 May 2017 05:38:48 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:36394 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756633AbdELJiQ (ORCPT ); Fri, 12 May 2017 05:38:16 -0400 From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Cc: Daniel Vetter , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Date: Fri, 12 May 2017 12:38:17 +0300 Message-ID: <1645078.FS6fmucJTb@avalon> User-Agent: KMail/4.14.10 (Linux/4.9.16-gentoo; KDE/4.14.29; x86_64; ; ) In-Reply-To: <20170510151433.7ewizmeeidrqonan@phenom.ffwll.local> References: <20170510134109.GF12629@intel.com> <20170510151433.7ewizmeeidrqonan@phenom.ffwll.local> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v4C9dhBU026282 Hi Daniel, On Wednesday 10 May 2017 17:14:33 Daniel Vetter wrote: > On Wed, May 10, 2017 at 04:41:09PM +0300, Ville Syrjälä wrote: > > On Tue, May 09, 2017 at 06:00:13PM +0100, Jose Abreu wrote: > > > Introduce a new helper function which calls mode_valid() callback > > > for all bridges in an encoder chain. > > > > > > Signed-off-by: Jose Abreu > > > Cc: Carlos Palminha > > > Cc: Alexey Brodkin > > > Cc: Ville Syrjälä > > > Cc: Daniel Vetter > > > Cc: Dave Airlie > > > Cc: Andrzej Hajda > > > Cc: Archit Taneja > > > --- > > > > > > drivers/gpu/drm/drm_bridge.c | 33 +++++++++++++++++++++++++++++++++ > > > include/drm/drm_bridge.h | 2 ++ > > > 2 files changed, 35 insertions(+) > > > > > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c > > > index 86a7637..dc8cdfe 100644 > > > --- a/drivers/gpu/drm/drm_bridge.c > > > +++ b/drivers/gpu/drm/drm_bridge.c > > > @@ -206,6 +206,39 @@ bool drm_bridge_mode_fixup(struct drm_bridge > > > *bridge, > > > > > > EXPORT_SYMBOL(drm_bridge_mode_fixup); > > > > > > /** > > > > > > + * drm_bridge_mode_valid - validate the mode against all bridges in the > > > + * encoder chain. > > > + * @bridge: bridge control structure > > > + * @mode: desired mode to be validated > > > + * > > > + * Calls &drm_bridge_funcs.mode_valid for all the bridges in the > > > encoder > > > + * chain, starting from the first bridge to the last. If at least one > > > bridge + * does not accept the mode the function returns the error > > > code. > > > + * > > > + * Note: the bridge passed should be the one closest to the encoder. > > > + * > > > + * RETURNS: > > > + * MODE_OK on success, drm_mode_status Enum error code on failure > > > + */ > > > +enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge, > > > + const struct drm_display_mode *mode) > > > +{ > > > + enum drm_mode_status ret = MODE_OK; > > > + > > > + if (!bridge) > > > + return ret; > > > + > > > + if (bridge->funcs->mode_valid) > > > + ret = bridge->funcs->mode_valid(bridge, mode); > > > + > > > + if (ret != MODE_OK) > > > + return ret; > > > + > > > + return drm_bridge_mode_valid(bridge->next, mode); > > > > Looks like it should be pretty trivial to avoid the recursion. > > > > Am I correct in interpreting this that bridges have some kind of > > a hand rolled linked list implementation? Reusing the standard > > linked lists would allow you to use list_for_each() etc. > > Yeah it's a hand-rolled list, but current hw also has a bridge nesting > depth of 2, so it really doesn't matter. I guess once we have real long > chains of bridges we can fix this (and just using list_head sounds like a > great idea). Even if not really needed right now, it's a pretty easy cleanup, if Jose has time to handle it in v3 of this series let's not postpone it ;-) -- Regards, Laurent Pinchart