From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Date: Wed, 10 May 2017 16:41:09 +0300 Message-ID: <20170510134109.GF12629@intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33FE56E04C for ; Wed, 10 May 2017 13:41:15 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jose Abreu Cc: Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMDksIDIwMTcgYXQgMDY6MDA6MTNQTSArMDEwMCwgSm9zZSBBYnJldSB3cm90 ZToKPiBJbnRyb2R1Y2UgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIG1vZGVfdmFs aWQoKSBjYWxsYmFjawo+IGZvciBhbGwgYnJpZGdlcyBpbiBhbiBlbmNvZGVyIGNoYWluLgo+IAo+ IFNpZ25lZC1vZmYtYnk6IEpvc2UgQWJyZXUgPGpvYWJyZXVAc3lub3BzeXMuY29tPgo+IENjOiBD YXJsb3MgUGFsbWluaGEgPHBhbG1pbmhhQHN5bm9wc3lzLmNvbT4KPiBDYzogQWxleGV5IEJyb2Rr aW4gPGFicm9ka2luQHN5bm9wc3lzLmNvbT4KPiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRl ckBmZndsbC5jaD4KPiBDYzogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Cj4gQ2M6IEFu ZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+Cj4gQ2M6IEFyY2hpdCBUYW5lamEgPGFy Y2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdl LmMgfCAzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9kcm0v ZHJtX2JyaWRnZS5oICAgICB8ICAyICsrCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9u cygrKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+IGluZGV4IDg2YTc2MzcuLmRjOGNkZmUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYnJpZGdlLmMKPiBAQCAtMjA2LDYgKzIwNiwzOSBAQCBib29sIGRybV9icmlkZ2Vf bW9kZV9maXh1cChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICBFWFBPUlRfU1lNQk9MKGRy bV9icmlkZ2VfbW9kZV9maXh1cCk7Cj4gIAo+ICAvKioKPiArICogZHJtX2JyaWRnZV9tb2RlX3Zh bGlkIC0gdmFsaWRhdGUgdGhlIG1vZGUgYWdhaW5zdCBhbGwgYnJpZGdlcyBpbiB0aGUKPiArICog CQkJICAgZW5jb2RlciBjaGFpbi4KPiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0 dXJlCj4gKyAqIEBtb2RlOiBkZXNpcmVkIG1vZGUgdG8gYmUgdmFsaWRhdGVkCj4gKyAqCj4gKyAq IENhbGxzICZkcm1fYnJpZGdlX2Z1bmNzLm1vZGVfdmFsaWQgZm9yIGFsbCB0aGUgYnJpZGdlcyBp biB0aGUgZW5jb2Rlcgo+ICsgKiBjaGFpbiwgc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgYnJpZGdl IHRvIHRoZSBsYXN0LiBJZiBhdCBsZWFzdCBvbmUgYnJpZGdlCj4gKyAqIGRvZXMgbm90IGFjY2Vw dCB0aGUgbW9kZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgY29kZS4KPiArICoKPiAr ICogTm90ZTogdGhlIGJyaWRnZSBwYXNzZWQgc2hvdWxkIGJlIHRoZSBvbmUgY2xvc2VzdCB0byB0 aGUgZW5jb2Rlci4KPiArICoKPiArICogUkVUVVJOUzoKPiArICogTU9ERV9PSyBvbiBzdWNjZXNz LCBkcm1fbW9kZV9zdGF0dXMgRW51bSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK2Vu dW0gZHJtX21vZGVfc3RhdHVzIGRybV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLAo+ICsJCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl KQo+ICt7Cj4gKwllbnVtIGRybV9tb2RlX3N0YXR1cyByZXQgPSBNT0RFX09LOwo+ICsKPiArCWlm ICghYnJpZGdlKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaWYgKGJyaWRnZS0+ZnVuY3MtPm1v ZGVfdmFsaWQpCj4gKwkJcmV0ID0gYnJpZGdlLT5mdW5jcy0+bW9kZV92YWxpZChicmlkZ2UsIG1v ZGUpOwo+ICsKPiArCWlmIChyZXQgIT0gTU9ERV9PSykKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXJldHVybiBkcm1fYnJpZGdlX21vZGVfdmFsaWQoYnJpZGdlLT5uZXh0LCBtb2RlKTsKCkxvb2tz IGxpa2UgaXQgc2hvdWxkIGJlIHByZXR0eSB0cml2aWFsIHRvIGF2b2lkIHRoZSByZWN1cnNpb24u CgpBbSBJIGNvcnJlY3QgaW4gaW50ZXJwcmV0aW5nIHRoaXMgdGhhdCBicmlkZ2VzIGhhdmUgc29t ZSBraW5kIG9mCmEgaGFuZCByb2xsZWQgbGlua2VkIGxpc3QgaW1wbGVtZW50YXRpb24/IFJldXNp bmcgdGhlIHN0YW5kYXJkCmxpbmtlZCBsaXN0cyB3b3VsZCBhbGxvdyB5b3UgdG8gdXNlIGxpc3Rf Zm9yX2VhY2goKSBldGMuCgo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2JyaWRnZV9tb2RlX3Zh bGlkKTsKPiArCj4gKy8qKgo+ICAgKiBkcm1fYnJpZGdlX2Rpc2FibGUgLSBkaXNhYmxlcyBhbGwg YnJpZGdlcyBpbiB0aGUgZW5jb2RlciBjaGFpbgo+ICAgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJv bCBzdHJ1Y3R1cmUKPiAgICoKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5o IGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gaW5kZXggMDBjNmMzNi4uODM1OGViMyAxMDA2 NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fYnJpZGdlLmgKPiArKysgYi9pbmNsdWRlL2RybS9k cm1fYnJpZGdlLmgKPiBAQCAtMjMzLDYgKzIzMyw4IEBAIGludCBkcm1fYnJpZGdlX2F0dGFjaChz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4g IGJvb2wgZHJtX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4g IAkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICAJCQlzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSk7Cj4gK2VudW0gZHJtX21vZGVfc3RhdHVzIGRy bV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKPiAgdm9pZCBkcm1fYnJpZGdl X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gIHZvaWQgZHJtX2JyaWRnZV9w b3N0X2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gIHZvaWQgZHJtX2JyaWRn ZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+IC0tIAo+IDEuOS4xCj4gCgot LSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753375AbdEJNlR (ORCPT ); Wed, 10 May 2017 09:41:17 -0400 Received: from mga14.intel.com ([192.55.52.115]:26566 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752778AbdEJNlQ (ORCPT ); Wed, 10 May 2017 09:41:16 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,319,1491289200"; d="scan'208";a="855173498" Date: Wed, 10 May 2017 16:41:09 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Jose Abreu Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Carlos Palminha , Alexey Brodkin , Daniel Vetter , Dave Airlie , Andrzej Hajda , Archit Taneja Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Message-ID: <20170510134109.GF12629@intel.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. > +} > +EXPORT_SYMBOL(drm_bridge_mode_valid); > + > +/** > * drm_bridge_disable - disables all bridges in the encoder chain > * @bridge: bridge control structure > * > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 00c6c36..8358eb3 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -233,6 +233,8 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, > bool drm_bridge_mode_fixup(struct drm_bridge *bridge, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode); > +enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge, > + const struct drm_display_mode *mode); > void drm_bridge_disable(struct drm_bridge *bridge); > void drm_bridge_post_disable(struct drm_bridge *bridge); > void drm_bridge_mode_set(struct drm_bridge *bridge, > -- > 1.9.1 > -- Ville Syrjälä Intel OTC