From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754188AbdEOETD (ORCPT ); Mon, 15 May 2017 00:19:03 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:48854 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750772AbdEOETB (ORCPT ); Mon, 15 May 2017 00:19:01 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 5AE7D60729 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=architt@codeaurora.org Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() To: Laurent Pinchart References: <1645078.FS6fmucJTb@avalon> <2203839.UYlrXxpDjl@avalon> Cc: dri-devel@lists.freedesktop.org, Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, Carlos Palminha From: Archit Taneja Message-ID: <6490c0e0-d69c-fbd0-7bbe-583fec6386f9@codeaurora.org> Date: Mon, 15 May 2017 09:48:52 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <2203839.UYlrXxpDjl@avalon> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/12/2017 04:31 PM, Laurent Pinchart wrote: > Hi Archit, > > On Friday 12 May 2017 16:20:07 Archit Taneja wrote: >> On 05/12/2017 03:08 PM, Laurent Pinchart wrote: >>> 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 ;-) >> >> jfyi, some of the bridge functions call the ops from the last bridge in the >> chain to first, so we'd need to use list_for_each_entry_prev() (or something >> like that) for them. > > And now that I think about it, for some of the operations (especially > enable/disable) I believe that the bridge should be able to decide whether to > call the next/previous bridge first or to configure its hardware first. I can > image bridges that need the previous bridge in the chain to provide a valid > clock before they get started, as well as bridges that need to be started with > the incoming video signal stopped. I guess converting into list would be a good start to achieve this. We'd probably need to extend/redo the drm_bridge_attach() API to tweak the order in the which the ops are called. Thanks, Archit -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v2 6/8] drm: Introduce drm_bridge_mode_valid() Date: Mon, 15 May 2017 09:48:52 +0530 Message-ID: <6490c0e0-d69c-fbd0-7bbe-583fec6386f9@codeaurora.org> References: <1645078.FS6fmucJTb@avalon> <2203839.UYlrXxpDjl@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id 549E489E15 for ; Mon, 15 May 2017 04:19:01 +0000 (UTC) In-Reply-To: <2203839.UYlrXxpDjl@avalon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Jose Abreu , Daniel Vetter , Alexey Brodkin , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlos Palminha List-Id: dri-devel@lists.freedesktop.org CgpPbiAwNS8xMi8yMDE3IDA0OjMxIFBNLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+IEhpIEFy Y2hpdCwKPgo+IE9uIEZyaWRheSAxMiBNYXkgMjAxNyAxNjoyMDowNyBBcmNoaXQgVGFuZWphIHdy b3RlOgo+PiBPbiAwNS8xMi8yMDE3IDAzOjA4IFBNLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ Pj4gT24gV2VkbmVzZGF5IDEwIE1heSAyMDE3IDE3OjE0OjMzIERhbmllbCBWZXR0ZXIgd3JvdGU6 Cj4+Pj4gT24gV2VkLCBNYXkgMTAsIDIwMTcgYXQgMDQ6NDE6MDlQTSArMDMwMCwgVmlsbGUgU3ly asOkbMOkIHdyb3RlOgo+Pj4+PiBPbiBUdWUsIE1heSAwOSwgMjAxNyBhdCAwNjowMDoxM1BNICsw MTAwLCBKb3NlIEFicmV1IHdyb3RlOgo+Pj4+Pj4gSW50cm9kdWNlIGEgbmV3IGhlbHBlciBmdW5j dGlvbiB3aGljaCBjYWxscyBtb2RlX3ZhbGlkKCkgY2FsbGJhY2sKPj4+Pj4+IGZvciBhbGwgYnJp ZGdlcyBpbiBhbiBlbmNvZGVyIGNoYWluLgo+Pj4+Pj4KPj4+Pj4+IFNpZ25lZC1vZmYtYnk6IEpv c2UgQWJyZXUgPGpvYWJyZXVAc3lub3BzeXMuY29tPgo+Pj4+Pj4gQ2M6IENhcmxvcyBQYWxtaW5o YSA8cGFsbWluaGFAc3lub3BzeXMuY29tPgo+Pj4+Pj4gQ2M6IEFsZXhleSBCcm9ka2luIDxhYnJv ZGtpbkBzeW5vcHN5cy5jb20+Cj4+Pj4+PiBDYzogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPj4+Pj4+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGZmd2xsLmNoPgo+Pj4+Pj4gQ2M6IERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgo+ Pj4+Pj4gQ2M6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+Cj4+Pj4+PiBDYzog QXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPj4+Pj4+IC0tLQo+Pj4+Pj4K Pj4+Pj4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2JyaWRnZS5jIHwgMzMgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4+Pj4+PiAgaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oICAgICB8 ICAyICsrCj4+Pj4+PiAgMiBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspCj4+Pj4+Pgo+ Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPj4+Pj4+IGIv ZHJpdmVycy9ncHUvZHJtL2RybV9icmlkZ2UuYwo+Pj4+Pj4gaW5kZXggODZhNzYzNy4uZGM4Y2Rm ZSAxMDA2NDQKPj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPj4+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPj4+Pj4+IEBAIC0yMDYsNiArMjA2 LDM5IEBAIGJvb2wgZHJtX2JyaWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlCj4+Pj4+ PiAqYnJpZGdlLAo+Pj4+Pj4KPj4+Pj4+ICBFWFBPUlRfU1lNQk9MKGRybV9icmlkZ2VfbW9kZV9m aXh1cCk7Cj4+Pj4+Pgo+Pj4+Pj4gIC8qKgo+Pj4+Pj4KPj4+Pj4+ICsgKiBkcm1fYnJpZGdlX21v ZGVfdmFsaWQgLSB2YWxpZGF0ZSB0aGUgbW9kZSBhZ2FpbnN0IGFsbCBicmlkZ2VzIGluCj4+Pj4+ PiB0aGUKPj4+Pj4+ICsgKiAJCQkgICBlbmNvZGVyIGNoYWluLgo+Pj4+Pj4gKyAqIEBicmlkZ2U6 IGJyaWRnZSBjb250cm9sIHN0cnVjdHVyZQo+Pj4+Pj4gKyAqIEBtb2RlOiBkZXNpcmVkIG1vZGUg dG8gYmUgdmFsaWRhdGVkCj4+Pj4+PiArICoKPj4+Pj4+ICsgKiBDYWxscyAmZHJtX2JyaWRnZV9m dW5jcy5tb2RlX3ZhbGlkIGZvciBhbGwgdGhlIGJyaWRnZXMgaW4gdGhlCj4+Pj4+PiBlbmNvZGVy Cj4+Pj4+PiArICogY2hhaW4sIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IGJyaWRnZSB0byB0aGUg bGFzdC4gSWYgYXQgbGVhc3Qgb25lCj4+Pj4+PiBicmlkZ2UgKyAqIGRvZXMgbm90IGFjY2VwdCB0 aGUgbW9kZSB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IKPj4+Pj4+IGNvZGUuCj4+Pj4+ PiArICoKPj4+Pj4+ICsgKiBOb3RlOiB0aGUgYnJpZGdlIHBhc3NlZCBzaG91bGQgYmUgdGhlIG9u ZSBjbG9zZXN0IHRvIHRoZSBlbmNvZGVyLgo+Pj4+Pj4gKyAqCj4+Pj4+PiArICogUkVUVVJOUzoK Pj4+Pj4+ICsgKiBNT0RFX09LIG9uIHN1Y2Nlc3MsIGRybV9tb2RlX3N0YXR1cyBFbnVtIGVycm9y IGNvZGUgb24gZmFpbHVyZQo+Pj4+Pj4gKyAqLwo+Pj4+Pj4gK2VudW0gZHJtX21vZGVfc3RhdHVz IGRybV9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+Pj4+Pj4g KwkJCQkJICAgY29uc3Qgc3RydWN0Cj4gZHJtX2Rpc3BsYXlfbW9kZQo+Pj4KPj4+ICptb2RlKQo+ Pj4KPj4+Pj4+ICt7Cj4+Pj4+PiArCWVudW0gZHJtX21vZGVfc3RhdHVzIHJldCA9IE1PREVfT0s7 Cj4+Pj4+PiArCj4+Pj4+PiArCWlmICghYnJpZGdlKQo+Pj4+Pj4gKwkJcmV0dXJuIHJldDsKPj4+ Pj4+ICsKPj4+Pj4+ICsJaWYgKGJyaWRnZS0+ZnVuY3MtPm1vZGVfdmFsaWQpCj4+Pj4+PiArCQly ZXQgPSBicmlkZ2UtPmZ1bmNzLT5tb2RlX3ZhbGlkKGJyaWRnZSwgbW9kZSk7Cj4+Pj4+PiArCj4+ Pj4+PiArCWlmIChyZXQgIT0gTU9ERV9PSykKPj4+Pj4+ICsJCXJldHVybiByZXQ7Cj4+Pj4+PiAr Cj4+Pj4+PiArCXJldHVybiBkcm1fYnJpZGdlX21vZGVfdmFsaWQoYnJpZGdlLT5uZXh0LCBtb2Rl KTsKPj4+Pj4KPj4+Pj4gTG9va3MgbGlrZSBpdCBzaG91bGQgYmUgcHJldHR5IHRyaXZpYWwgdG8g YXZvaWQgdGhlIHJlY3Vyc2lvbi4KPj4+Pj4KPj4+Pj4gQW0gSSBjb3JyZWN0IGluIGludGVycHJl dGluZyB0aGlzIHRoYXQgYnJpZGdlcyBoYXZlIHNvbWUga2luZCBvZgo+Pj4+PiBhIGhhbmQgcm9s bGVkIGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9uPyBSZXVzaW5nIHRoZSBzdGFuZGFyZAo+Pj4+ PiBsaW5rZWQgbGlzdHMgd291bGQgYWxsb3cgeW91IHRvIHVzZSBsaXN0X2Zvcl9lYWNoKCkgZXRj Lgo+Pj4+Cj4+Pj4gWWVhaCBpdCdzIGEgaGFuZC1yb2xsZWQgbGlzdCwgYnV0IGN1cnJlbnQgaHcg YWxzbyBoYXMgYSBicmlkZ2UgbmVzdGluZwo+Pj4+IGRlcHRoIG9mIDIsIHNvIGl0IHJlYWxseSBk b2Vzbid0IG1hdHRlci4gSSBndWVzcyBvbmNlIHdlIGhhdmUgcmVhbCBsb25nCj4+Pj4gY2hhaW5z IG9mIGJyaWRnZXMgd2UgY2FuIGZpeCB0aGlzIChhbmQganVzdCB1c2luZyBsaXN0X2hlYWQgc291 bmRzIGxpa2UgYQo+Pj4+IGdyZWF0IGlkZWEpLgo+Pj4KPj4+IEV2ZW4gaWYgbm90IHJlYWxseSBu ZWVkZWQgcmlnaHQgbm93LCBpdCdzIGEgcHJldHR5IGVhc3kgY2xlYW51cCwgaWYgSm9zZQo+Pj4g aGFzIHRpbWUgdG8gaGFuZGxlIGl0IGluIHYzIG9mIHRoaXMgc2VyaWVzIGxldCdzIG5vdCBwb3N0 cG9uZSBpdCA7LSkKPj4KPj4gamZ5aSwgc29tZSBvZiB0aGUgYnJpZGdlIGZ1bmN0aW9ucyBjYWxs IHRoZSBvcHMgZnJvbSB0aGUgbGFzdCBicmlkZ2UgaW4gdGhlCj4+IGNoYWluIHRvIGZpcnN0LCBz byB3ZSdkIG5lZWQgdG8gdXNlIGxpc3RfZm9yX2VhY2hfZW50cnlfcHJldigpIChvciBzb21ldGhp bmcKPj4gbGlrZSB0aGF0KSBmb3IgdGhlbS4KPgo+IEFuZCBub3cgdGhhdCBJIHRoaW5rIGFib3V0 IGl0LCBmb3Igc29tZSBvZiB0aGUgb3BlcmF0aW9ucyAoZXNwZWNpYWxseQo+IGVuYWJsZS9kaXNh YmxlKSBJIGJlbGlldmUgdGhhdCB0aGUgYnJpZGdlIHNob3VsZCBiZSBhYmxlIHRvIGRlY2lkZSB3 aGV0aGVyIHRvCj4gY2FsbCB0aGUgbmV4dC9wcmV2aW91cyBicmlkZ2UgZmlyc3Qgb3IgdG8gY29u ZmlndXJlIGl0cyBoYXJkd2FyZSBmaXJzdC4gSSBjYW4KPiBpbWFnZSBicmlkZ2VzIHRoYXQgbmVl ZCB0aGUgcHJldmlvdXMgYnJpZGdlIGluIHRoZSBjaGFpbiB0byBwcm92aWRlIGEgdmFsaWQKPiBj bG9jayBiZWZvcmUgdGhleSBnZXQgc3RhcnRlZCwgYXMgd2VsbCBhcyBicmlkZ2VzIHRoYXQgbmVl ZCB0byBiZSBzdGFydGVkIHdpdGgKPiB0aGUgaW5jb21pbmcgdmlkZW8gc2lnbmFsIHN0b3BwZWQu CgpJIGd1ZXNzIGNvbnZlcnRpbmcgaW50byBsaXN0IHdvdWxkIGJlIGEgZ29vZCBzdGFydCB0byBh Y2hpZXZlIHRoaXMuIFdlJ2QgcHJvYmFibHkKbmVlZCB0byBleHRlbmQvcmVkbyB0aGUgZHJtX2Jy aWRnZV9hdHRhY2goKSBBUEkgdG8gdHdlYWsgdGhlIG9yZGVyIGluIHRoZSB3aGljaAp0aGUgb3Bz IGFyZSBjYWxsZWQuCgpUaGFua3MsCkFyY2hpdAoKLS0gClF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5k YXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=