From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Norris Subject: Re: [PATCH v3 4/5] drm/rockchip: Add ROCKCHIP DW MIPI DSI controller driver Date: Tue, 28 Nov 2017 14:55:41 -0800 Message-ID: <20171128225540.GA23117@google.com> References: <1511868006-27130-1-git-send-email-nickey.yang@rock-chips.com> <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> <20171128204843.GB58379@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20171128204843.GB58379@google.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Matthias Kaehlcke Cc: mark.rutland@arm.com, airlied@linux.ie, hoegsberg@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, Nickey Yang , robh+dt@kernel.org, zyw@rock-chips.com, xbl@rock-chips.com, hl@rock-chips.com List-Id: linux-rockchip.vger.kernel.org SGkgTmlja2V5LAoKT24gVHVlLCBOb3YgMjgsIDIwMTcgYXQgMTI6NDg6NDNQTSAtMDgwMCwgTWF0 dGhpYXMgS2FlaGxja2Ugd3JvdGU6Cj4gRWwgVHVlLCBOb3YgMjgsIDIwMTcgYXQgMDc6MjA6MDVQ TSArMDgwMCBOaWNrZXkgWWFuZyBoYSBkaXQ6Cj4gCj4gPiBBZGQgdGhlIFJPQ0tDSElQIERTSSBj b250cm9sbGVyIGRyaXZlciB0aGF0IHVzZXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUKPiA+IE1J UEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UuCj4gPiAKPiA+IHYyOgo+ID4gICAgYWRkIGVy cl9wbGxyZWYsIHJlbW92ZSB1bm5lY2Vzc2FyeSBlbmNvZGVyLmVuYWJsZSAmIGRpc2FibGUKPiA+ ICAgIGNvcnJlY3Qgc3BlbGxpbmcgbWlzdGFrZXMKPiA+IHYzOgo+ID4gICAgY2FsbCBkd19taXBp X2RzaV91bmJpbmQoKSBpbiBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJpbmQoKQo+ID4gICAgZml4 IHR5cG8sIHVzZSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKSwKPiA+ICAgIGNoYW5nZSBzb21l IOKAmGJpbmQoKeKAmSBsb2dpYyBpbnRvICdwcm9iZSgpJwo+ID4gICAgYWRkICdkZXZfc2V0X2Ry dmRhdGEoKScKCkkgYmVsaWV2ZSB0aGUgY2hhbmdlbG9nIG5vcm1hbGx5IGdvZXMgYmVsb3cgdGhl ICItLS0iLCBzbyBpdCBnZXRzCmRyb3BwZWQgd2hlbiBhIG1haW50YWluZXIgYXBwbGllcyBhIGZp bmFsIHZlcnNpb24uCgo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBOaWNrZXkgWWFuZyA8bmlja2V5 LnlhbmdAcm9jay1jaGlwcy5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgIDIgKy0KPiA+ICBkcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgIDIgKy0KPiA+ICBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyAgICAgICAgICB8IDEzNDkgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2lfcm9j a2NoaXAuYyB8ICA3NjQgKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fZHJ2LmMgICAgIHwgICAgMiArLQo+ID4gIGRyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmggICAgIHwgICAgMiArLQo+ID4gIDYgZmlsZXMgY2hh bmdlZCwgNzY4IGluc2VydGlvbnMoKyksIDEzNTMgZGVsZXRpb25zKC0pCj4gPiAgZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCj4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaV9yb2Nr Y2hpcC5jCj4gPiAKCi4uLgoKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvZHctbWlwaS1kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5j Cj4gPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IGIxNTc1NWIuLjAwMDAwMDAK PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCj4gPiArKysg L2Rldi9udWxsCj4gPiBAQCAtMSwxMzQ5ICswLDAgQEAKCi4uLgoKPiA+IC1zdGF0aWMgaW50IGR3 X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAo+ID4gLQkJ CQkgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCj4gPiAtewo+ID4gLQlzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwo+ID4gLQo+ID4gLQlpZiAoZGV2 aWNlLT5sYW5lcyA+IGRzaS0+cGRhdGEtPm1heF9kYXRhX2xhbmVzKSB7Cj4gPiAtCQlEUk1fREVW X0VSUk9SKGRzaS0+ZGV2LAo+ID4gLQkJCSAgICAgICJ0aGUgbnVtYmVyIG9mIGRhdGEgbGFuZXMo JXUpIGlzIHRvbyBtYW55XG4iLAo+ID4gLQkJCSAgICAgIGRldmljZS0+bGFuZXMpOwo+ID4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JZHNpLT5sYW5lcyA9IGRldmljZS0+ bGFuZXM7Cj4gPiAtCWRzaS0+Y2hhbm5lbCA9IGRldmljZS0+Y2hhbm5lbDsKPiA+IC0JZHNpLT5m b3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKPiA+IC0JZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5t b2RlX2ZsYWdzOwo+ID4gLQlkc2ktPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwoZGV2aWNlLT5k ZXYub2Zfbm9kZSk7CgpJSVVDLCB5b3UncmUgaW1wbGljaXRseSBtYWtpbmcgYSBkZXZpY2UgdHJl ZSBiaW5kaW5nIGNoYW5nZSwgYmVjYXVzZSB0aGUKb3JpZ2luYWwgZHJpdmVyIHVzZXMganVzdCBv Zl9kcm1fZmluZF9wYW5lbCgpLCBhcyBhYm92ZSwgYnV0IHRoZSBjb21tb24KYnJpZGdlIGRyaXZl ciBpcyB1c2luZyBkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoKSwgd2hpY2ggcHV0cyBhCmxp dHRsZSBtb3JlIHN0cmluZ2VudCByZXF1aXJlbWVudHMgb24gdGhlIGRldmljZSB0cmVlLgoKSSBk b24ndCB0aGluayB0aGF0J3MgbmVjZXNzYXJpbHkgYSBiYWQgdGhpbmcsIGFuZCB0aGVyZSBpc24n dCBtdWNoIGluCnRoZSB3YXkgb2YgInJlYWwiIGRldmljZSB0cmVlcyB0aGF0IGFjdHVhbGx5IHVz ZWQgdGhlIGV4aXN0aW5nIGRyaXZlcgphbmQgYmluZGluZyAocHJvYmFibHkgbW9zdGx5IHRlc3Qg ZGV2aWNlcyBhbmQgcHJvdG90eXBlcyksIHNvIG1heWJlIGl0J3MKYmV0dGVyIHRvIGp1c3QgbWFr ZSB0aGUgc3dpdGNoIGFuZCBub3Qgd29ycnkgYWJvdXQgY29tcGF0aWJpbGl0eS4gQnV0IEkKanVz dCB3YW50ZWQgdG8gcG9pbnQgdGhhdCBvdXQsIGluIGNhc2UgYW55b25lIGVsc2Ugd2FzIGludGVy ZXN0ZWQgb3IKY29uY2VybmVkLgoKPiA+IC0JaWYgKGRzaS0+cGFuZWwpCj4gPiAtCQlyZXR1cm4g ZHJtX3BhbmVsX2F0dGFjaChkc2ktPnBhbmVsLCAmZHNpLT5jb25uZWN0b3IpOwo+ID4gLQo+ID4g LQlyZXR1cm4gLUVJTlZBTDsKPiA+IC19Cj4gPiAtCgouLi4KCj4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpX3JvY2tjaGlwLmMgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2lfcm9ja2NoaXAuYwo+ID4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmM2ODJlZDIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaV9yb2NrY2hpcC5jCj4gPiBA QCAtMCwwICsxLDc2NCBAQAoKLi4uCgo+ID4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcGh5X2lu aXQodm9pZCAqcHJpdl9kYXRhKQo+ID4gK3sKPiA+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tj aGlwICpkc2kgPSBwcml2X2RhdGE7Cj4gPiArCWludCByZXQsIGksIHZjbzsKPiA+ICsKPiA+ICsJ dmNvID0gKGRzaS0+bGFuZV9tYnBzIDwgMjAwKSA/IDAgOiAoZHNpLT5sYW5lX21icHMgKyAxMDAp IC8gMjAwOwo+IAo+IFBsZWFzZSBhZGQgYSBjbGFyaWZ5aW5nIGNvbW1lbnQgYXMgcmVxdWVzdGVk IGJ5IFNlYW4gb24KPiBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tLyMv Yy9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5L2tlcm5lbC8rLzc4MDEyMC8KCkZXSVcsIHRoYXQgY29k ZSB3YXMgYWxyZWFkeSBpbiB0aGUgZXhpc3RpbmcgZHJpdmVyLiBXb3VsZCBiZSBuaWNlIHRvCmlt cHJvdmUgYW55d2F5LCBvZiBjb3Vyc2UuCgouLi4KCj4gPiArc3RhdGljIGludAo+ID4gK2R3X21p cGlfZHNpX2dldF9sYW5lX21icHModm9pZCAqcHJpdl9kYXRhLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSwKPiA+ICsJCQkgIHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFncywgdTMyIGxhbmVz LCB1MzIgZm9ybWF0LAo+ID4gKwkJCSAgdW5zaWduZWQgaW50ICpsYW5lX21icHMpCj4gPiArewo+ ID4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKPiA+ICsJ aW50IGJwcDsKPiA+ICsJdW5zaWduZWQgbG9uZyBtcGNsaywgdG1wOwo+ID4gKwl1bnNpZ25lZCBp bnQgdGFyZ2V0X21icHMgPSAxMDAwOwo+ID4gKwl1bnNpZ25lZCBpbnQgbWF4X21icHMgPSBkcHBh X21hcFtBUlJBWV9TSVpFKGRwcGFfbWFwKSAtIDFdLm1heF9tYnBzOwo+ID4gKwl1bnNpZ25lZCBs b25nIGJlc3RfZnJlcSA9IDA7Cj4gPiArCXVuc2lnbmVkIGxvbmcgZnZjb19taW4sIGZ2Y29fbWF4 LCBmaW4sIGZvdXQ7Cj4gPiArCXVuc2lnbmVkIGludCBtaW5fcHJlZGl2LCBtYXhfcHJlZGl2Owo+ ID4gKwl1bnNpZ25lZCBpbnQgX3ByZWRpdiwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9wcmVkaXYp Owo+ID4gKwl1bnNpZ25lZCBsb25nIF9mYmRpdiwgdW5pbml0aWFsaXplZF92YXIoYmVzdF9mYmRp dik7Cj4gPiArCXVuc2lnbmVkIGxvbmcgbWluX2RlbHRhID0gVUxPTkdfTUFYOwo+ID4gKwo+ID4g Kwlkc2ktPmZvcm1hdCA9IGZvcm1hdDsKPiA+ICsJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0 X3RvX2JwcChkc2ktPmZvcm1hdCk7Cj4gPiArCWlmIChicHAgPCAwKSB7Cj4gPiArCQlEUk1fREVW X0VSUk9SKGRzaS0+ZGV2LAo+ID4gKwkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGJwcCBmb3IgcGl4 ZWwgZm9ybWF0ICVkXG4iLAo+ID4gKwkJCSAgICAgIGRzaS0+Zm9ybWF0KTsKPiA+ICsJCXJldHVy biBicHA7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbXBjbGsgPSBESVZfUk9VTkRfVVAobW9kZS0+Y2xv Y2ssIE1TRUNfUEVSX1NFQyk7Cj4gPiArCWlmIChtcGNsaykgewo+ID4gKwkJLyogdGFrZSAxIC8g MC44LCBzaW5jZSBtYnBzIG11c3QgYmlnIHRoYW4gYmFuZHdpZHRoIG9mIFJHQiAqLwo+ID4gKwkJ dG1wID0gbXBjbGsgKiAoYnBwIC8gbGFuZXMpICogMTAgLyA4Owo+ID4gKwkJaWYgKHRtcCA8IG1h eF9tYnBzKQo+ID4gKwkJCXRhcmdldF9tYnBzID0gdG1wOwo+ID4gKwkJZWxzZQo+ID4gKwkJCURS TV9ERVZfRVJST1IoZHNpLT5kZXYsCj4gPiArCQkJCSAgICAgICJEUEhZIGNsb2NrIGZyZXF1ZW5j eSBpcyBvdXQgb2YgcmFuZ2VcbiIpOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZpbiA9IGNsa19nZXRf cmF0ZShkc2ktPnBsbHJlZl9jbGspOwo+ID4gKwlmb3V0ID0gdGFyZ2V0X21icHMgKiBVU0VDX1BF Ul9TRUM7Cj4gPiArCj4gPiArCS8qIGNvbnN0cmFpbnQ6IDVNaHogPD0gRnJlZiAvIE4gPD0gNDBN SHogKi8KPiA+ICsJbWluX3ByZWRpdiA9IERJVl9ST1VORF9VUChmaW4sIDQwICogVVNFQ19QRVJf U0VDKTsKPiA+ICsJbWF4X3ByZWRpdiA9IGZpbiAvICg1ICogVVNFQ19QRVJfU0VDKTsKPiA+ICsK PiA+ICsJLyogY29uc3RyYWludDogODBNSHogPD0gRnZjbyA8PSAxNTAwTWh6ICovCj4gPiArCWZ2 Y29fbWluID0gODAgKiBVU0VDX1BFUl9TRUM7Cj4gPiArCWZ2Y29fbWF4ID0gMTUwMCAqIFVTRUNf UEVSX1NFQzsKPiA+ICsKPiA+ICsJZm9yIChfcHJlZGl2ID0gbWluX3ByZWRpdjsgX3ByZWRpdiA8 PSBtYXhfcHJlZGl2OyBfcHJlZGl2KyspIHsKPiA+ICsJCXU2NCB0bXA7Cj4gPiArCQl1MzIgZGVs dGE7Cj4gPiArCQkvKiBGdmNvID0gRnJlZiAqIE0gLyBOICovCj4gPiArCQl0bXAgPSAodTY0KWZv dXQgKiBfcHJlZGl2Owo+ID4gKwkJZG9fZGl2KHRtcCwgZmluKTsKPiA+ICsJCV9mYmRpdiA9IHRt cDsKPiA+ICsJCS8qCj4gPiArCQkgKiBEdWUgdG8gdGhlIHVzZSBvZiBhICJieSAyIHByZS1zY2Fs ZXIsIiB0aGUgcmFuZ2Ugb2YgdGhlCj4gPiArCQkgKiBmZWVkYmFjayBtdWx0aXBsaWNhdGlvbiB2 YWx1ZSBNIGlzIGxpbWl0ZWQgdG8gZXZlbiBkaXZpc2lvbgo+ID4gKwkJICogbnVtYmVycywgYW5k IG0gbXVzdCBiZSBncmVhdGVyIHRoYW4gNiwgbGVzcyB0aGFuIDUxMi4KPiA+ICsJCSAqLwo+IAo+ IEl0IHNlZW1zIHRoaXMgc2hvdWxkIGJlICJub3QgYmlnZ2VyIHRoYW4gNTEyIiBvciBzb21ldGhp bmcgc2ltaWxhci4KPiAKPiA+ICsJCWlmIChfZmJkaXYgPCA2IHx8IF9mYmRpdiA+IDUxMikKPiA+ ICsJCQljb250aW51ZTsKPiA+ICsKPiA+ICsJCV9mYmRpdiArPSBfZmJkaXYgJSAyOwo+ID4gKwo+ ID4gKwkJdG1wID0gKHU2NClfZmJkaXYgKiBmaW47Cj4gPiArCQlkb19kaXYodG1wLCBfcHJlZGl2 KTsKPiAKPiBTaG91bGQgd2UgYmFpbCBvdXQgZWFybHkgaWYgbWluX3ByZWRpdiA9PSAwIGR1ZSB0 byBzb21lIGJvZ3VzCj4gY29uZmlndXJhdGlvbiBvZiBwbGxyZWZfY2xrPwo+IAo+ID4gKwkJaWYg KHRtcCA8IGZ2Y29fbWluIHx8IHRtcCA+IGZ2Y29fbWF4KQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4g Kwo+ID4gKwkJZGVsdGEgPSBhYnMoZm91dCAtIHRtcCk7Cj4gPiArCQlpZiAoZGVsdGEgPCBtaW5f ZGVsdGEpIHsKPiA+ICsJCQliZXN0X3ByZWRpdiA9IF9wcmVkaXY7Cj4gPiArCQkJYmVzdF9mYmRp diA9IF9mYmRpdjsKPiA+ICsJCQltaW5fZGVsdGEgPSBkZWx0YTsKPiA+ICsJCQliZXN0X2ZyZXEg PSB0bXA7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKGJlc3RfZnJlcSkgewo+ID4g KwkJZHNpLT5sYW5lX21icHMgPSBESVZfUk9VTkRfVVAoYmVzdF9mcmVxLCBVU0VDX1BFUl9TRUMp Owo+ID4gKwkJKmxhbmVfbWJwcyA9IGRzaS0+bGFuZV9tYnBzOwo+ID4gKwkJZHNpLT5pbnB1dF9k aXYgPSBiZXN0X3ByZWRpdjsKPiA+ICsJCWRzaS0+ZmVlZGJhY2tfZGl2ID0gYmVzdF9mYmRpdjsK PiA+ICsJfSBlbHNlIHsKPiA+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJDYW4gbm90IGZp bmQgYmVzdF9mcmVxIGZvciBEUEhZXG4iKTsKPiAKPiByZXR1cm4gLTE7CgpPciBhIHJlYWwgZXJy b3IgY29kZSB3b3VsZCBiZSBuaWNlci4gLUVJTlZBTD8KCj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 dXJuIDA7Cj4gPiArfQo+ID4gKwoKLi4uCgpPdGhlciB0aGFuIHRoZXNlIHJlbGF0aXZlbHkgc21h bGwgdGhpbmdzLCB0aGlzIGlzIGxvb2tpbmcgcHJldHR5IGdvb2QgdG8KbXkgKG5vdC13ZWxsLXZl cnNlZC1pbi1kcm0pIGV5ZToKClJldmlld2VkLWJ5OiBCcmlhbiBOb3JyaXMgPGJyaWFubm9ycmlz QGNocm9taXVtLm9yZz4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752944AbdK1Wzs (ORCPT ); Tue, 28 Nov 2017 17:55:48 -0500 Received: from mail-pl0-f65.google.com ([209.85.160.65]:40682 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751712AbdK1Wzq (ORCPT ); Tue, 28 Nov 2017 17:55:46 -0500 X-Google-Smtp-Source: AGs4zMawczAZejXlXn99U2PCi1o7icVMS7bcAfPtLDixoR7cYSCnmMbqIs2WYotalkK9Ks/JKmrgmA== Date: Tue, 28 Nov 2017 14:55:41 -0800 From: Brian Norris To: Matthias Kaehlcke , Nickey Yang Cc: Nickey Yang , robh+dt@kernel.org, heiko@sntech.de, mark.rutland@arm.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, seanpaul@chromium.org, hoegsberg@gmail.com, architt@codeaurora.org, philippe.cornu@st.com, yannick.fertre@st.com, hl@rock-chips.com, zyw@rock-chips.com, xbl@rock-chips.com Subject: Re: [PATCH v3 4/5] drm/rockchip: Add ROCKCHIP DW MIPI DSI controller driver Message-ID: <20171128225540.GA23117@google.com> References: <1511868006-27130-1-git-send-email-nickey.yang@rock-chips.com> <1511868006-27130-5-git-send-email-nickey.yang@rock-chips.com> <20171128204843.GB58379@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171128204843.GB58379@google.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Nickey, On Tue, Nov 28, 2017 at 12:48:43PM -0800, Matthias Kaehlcke wrote: > El Tue, Nov 28, 2017 at 07:20:05PM +0800 Nickey Yang ha dit: > > > Add the ROCKCHIP DSI controller driver that uses the Synopsys DesignWare > > MIPI DSI host controller bridge. > > > > v2: > > add err_pllref, remove unnecessary encoder.enable & disable > > correct spelling mistakes > > v3: > > call dw_mipi_dsi_unbind() in dw_mipi_dsi_rockchip_unbind() > > fix typo, use of_device_get_match_data(), > > change some ‘bind()’ logic into 'probe()' > > add 'dev_set_drvdata()' I believe the changelog normally goes below the "---", so it gets dropped when a maintainer applies a final version. > > > > Signed-off-by: Nickey Yang > > --- > > drivers/gpu/drm/rockchip/Kconfig | 2 +- > > drivers/gpu/drm/rockchip/Makefile | 2 +- > > drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 1349 ----------------------- > > drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c | 764 +++++++++++++ > > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +- > > drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 2 +- > > 6 files changed, 768 insertions(+), 1353 deletions(-) > > delete mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi.c > > create mode 100644 drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c > > ... > > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > > deleted file mode 100644 > > index b15755b..0000000 > > --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > > +++ /dev/null > > @@ -1,1349 +0,0 @@ ... > > -static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host, > > - struct mipi_dsi_device *device) > > -{ > > - struct dw_mipi_dsi *dsi = host_to_dsi(host); > > - > > - if (device->lanes > dsi->pdata->max_data_lanes) { > > - DRM_DEV_ERROR(dsi->dev, > > - "the number of data lanes(%u) is too many\n", > > - device->lanes); > > - return -EINVAL; > > - } > > - > > - dsi->lanes = device->lanes; > > - dsi->channel = device->channel; > > - dsi->format = device->format; > > - dsi->mode_flags = device->mode_flags; > > - dsi->panel = of_drm_find_panel(device->dev.of_node); IIUC, you're implicitly making a device tree binding change, because the original driver uses just of_drm_find_panel(), as above, but the common bridge driver is using drm_of_find_panel_or_bridge(), which puts a little more stringent requirements on the device tree. I don't think that's necessarily a bad thing, and there isn't much in the way of "real" device trees that actually used the existing driver and binding (probably mostly test devices and prototypes), so maybe it's better to just make the switch and not worry about compatibility. But I just wanted to point that out, in case anyone else was interested or concerned. > > - if (dsi->panel) > > - return drm_panel_attach(dsi->panel, &dsi->connector); > > - > > - return -EINVAL; > > -} > > - ... > > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c > > new file mode 100644 > > index 0000000..c682ed2 > > --- /dev/null > > +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi_rockchip.c > > @@ -0,0 +1,764 @@ ... > > +static int dw_mipi_dsi_phy_init(void *priv_data) > > +{ > > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > > + int ret, i, vco; > > + > > + vco = (dsi->lane_mbps < 200) ? 0 : (dsi->lane_mbps + 100) / 200; > > Please add a clarifying comment as requested by Sean on > https://chromium-review.googlesource.com/#/c/chromiumos/third_party/kernel/+/780120/ FWIW, that code was already in the existing driver. Would be nice to improve anyway, of course. ... > > +static int > > +dw_mipi_dsi_get_lane_mbps(void *priv_data, struct drm_display_mode *mode, > > + unsigned long mode_flags, u32 lanes, u32 format, > > + unsigned int *lane_mbps) > > +{ > > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > > + int bpp; > > + unsigned long mpclk, tmp; > > + unsigned int target_mbps = 1000; > > + unsigned int max_mbps = dppa_map[ARRAY_SIZE(dppa_map) - 1].max_mbps; > > + unsigned long best_freq = 0; > > + unsigned long fvco_min, fvco_max, fin, fout; > > + unsigned int min_prediv, max_prediv; > > + unsigned int _prediv, uninitialized_var(best_prediv); > > + unsigned long _fbdiv, uninitialized_var(best_fbdiv); > > + unsigned long min_delta = ULONG_MAX; > > + > > + dsi->format = format; > > + bpp = mipi_dsi_pixel_format_to_bpp(dsi->format); > > + if (bpp < 0) { > > + DRM_DEV_ERROR(dsi->dev, > > + "failed to get bpp for pixel format %d\n", > > + dsi->format); > > + return bpp; > > + } > > + > > + mpclk = DIV_ROUND_UP(mode->clock, MSEC_PER_SEC); > > + if (mpclk) { > > + /* take 1 / 0.8, since mbps must big than bandwidth of RGB */ > > + tmp = mpclk * (bpp / lanes) * 10 / 8; > > + if (tmp < max_mbps) > > + target_mbps = tmp; > > + else > > + DRM_DEV_ERROR(dsi->dev, > > + "DPHY clock frequency is out of range\n"); > > + } > > + > > + fin = clk_get_rate(dsi->pllref_clk); > > + fout = target_mbps * USEC_PER_SEC; > > + > > + /* constraint: 5Mhz <= Fref / N <= 40MHz */ > > + min_prediv = DIV_ROUND_UP(fin, 40 * USEC_PER_SEC); > > + max_prediv = fin / (5 * USEC_PER_SEC); > > + > > + /* constraint: 80MHz <= Fvco <= 1500Mhz */ > > + fvco_min = 80 * USEC_PER_SEC; > > + fvco_max = 1500 * USEC_PER_SEC; > > + > > + for (_prediv = min_prediv; _prediv <= max_prediv; _prediv++) { > > + u64 tmp; > > + u32 delta; > > + /* Fvco = Fref * M / N */ > > + tmp = (u64)fout * _prediv; > > + do_div(tmp, fin); > > + _fbdiv = tmp; > > + /* > > + * Due to the use of a "by 2 pre-scaler," the range of the > > + * feedback multiplication value M is limited to even division > > + * numbers, and m must be greater than 6, less than 512. > > + */ > > It seems this should be "not bigger than 512" or something similar. > > > + if (_fbdiv < 6 || _fbdiv > 512) > > + continue; > > + > > + _fbdiv += _fbdiv % 2; > > + > > + tmp = (u64)_fbdiv * fin; > > + do_div(tmp, _prediv); > > Should we bail out early if min_prediv == 0 due to some bogus > configuration of pllref_clk? > > > + if (tmp < fvco_min || tmp > fvco_max) > > + continue; > > + > > + delta = abs(fout - tmp); > > + if (delta < min_delta) { > > + best_prediv = _prediv; > > + best_fbdiv = _fbdiv; > > + min_delta = delta; > > + best_freq = tmp; > > + } > > + } > > + > > + if (best_freq) { > > + dsi->lane_mbps = DIV_ROUND_UP(best_freq, USEC_PER_SEC); > > + *lane_mbps = dsi->lane_mbps; > > + dsi->input_div = best_prediv; > > + dsi->feedback_div = best_fbdiv; > > + } else { > > + DRM_DEV_ERROR(dsi->dev, "Can not find best_freq for DPHY\n"); > > return -1; Or a real error code would be nicer. -EINVAL? > > + } > > + > > + return 0; > > +} > > + ... Other than these relatively small things, this is looking pretty good to my (not-well-versed-in-drm) eye: Reviewed-by: Brian Norris