From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v7] drm/rockchip: Refactor the component match logic. Date: Tue, 21 Mar 2017 15:55:55 -0400 Message-ID: <20170321195555.GD19389@art_vandelay> References: <1490078531-5100-1-git-send-email-jeffy.chen@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1490078531-5100-1-git-send-email-jeffy.chen@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jeffy Chen Cc: linux-rockchip@lists.infradead.org, Brian Norris , Douglas Anderson , dri-devel@lists.freedesktop.org, Tomasz Figa , Guenter Roeck , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org T24gVHVlLCBNYXIgMjEsIDIwMTcgYXQgMDI6NDI6MTFQTSArMDgwMCwgSmVmZnkgQ2hlbiB3cm90 ZToKPiBDdXJyZW50bHkgd2UgYXJlIGFkZGluZyBhbGwgY29tcG9uZW50cyBmcm9tIHRoZSBkdHMs IGlmIG9uZSBvZiB0aGVpcgo+IGRyaXZlcnMgYmVlbiBkaXNhYmxlZCwgd2Ugd291bGQgbm90IGJl IGFibGUgdG8gYnJpbmcgdXAgb3RoZXJzLgo+IAo+IFJlZmFjdG9yIGNvbXBvbmVudCBtYXRjaCBs b2dpYywgZm9sbG93IGV4eW5vcyBkcm0uCj4gCj4gU2lnbmVkLW9mZi1ieTogSmVmZnkgQ2hlbiA8 amVmZnkuY2hlbkByb2NrLWNoaXBzLmNvbT4KPiBSZXZpZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8 YS5oYWpkYUBzYW1zdW5nLmNvbT4KPiBBY2tlZC1ieTogTWFyayBZYW8gPG1hcmsueWFvQHJvY2st Y2hpcHMuY29tPgo+IFRlc3RlZC1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4K PiAKPiAtLS0KPiAKPiBDaGFuZ2VzIGluIHY3Ogo+IEFkZCBIZWlrbyBTdHVlYm5lciA8aGVpa29A c250ZWNoLmRlPidzIFRlc3RlZC1ieS4KPiAKPiBDaGFuZ2VzIGluIHY2Ogo+IEFkZCBNYXJrIFlh byA8bWFyay55YW9Acm9jay1jaGlwcy5jb20+J3MgQWNrZWQtYnkuCj4gCj4gQ2hhbmdlcyBpbiB2 NToKPiBGaXggY29tcGlsZSBlcnJvciByZXBvcnRlZCBieSBIZWlrbyBTdHVlYm5lciA8aGVpa29A c250ZWNoLmRlPi4KPiAKPiBDaGFuZ2VzIGluIHY0Ogo+IFVzZSBwbGF0Zm9ybV9kcml2ZXIgaGVs cGVycyB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGRyaXZlcnMuCj4gRml4IG51bGwgcG9pbnRlciBl cnJvciByZXBvcnRlZCBieSBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPi4KPiAKPiBD aGFuZ2VzIGluIHYzOgo+IEFkZHJlc3MgQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNv bT4ncyBjb21tZW50cy4KPiAKPiBDaGFuZ2VzIGluIHYyOgo+IEFkZHJlc3MgU2VhbiBQYXVsIDxz ZWFucGF1bEBjaHJvbWl1bS5vcmc+J3MgY29tbWVudHMuCj4gCj4gIGRyaXZlcnMvZ3B1L2RybS9y b2NrY2hpcC9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDEwICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgIDE2ICstLQo+ICBkcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvYW5hbG9naXhfZHAtcm9ja2NoaXAuYyB8ICAgOSArLQo+ICBkcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyAgICAgICAgICB8ICAgOCArLQo+ICBkcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyAgICAgICAgICB8ICAgOCArLQo+ICBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jICAgICB8ICAxMCArLQo+ ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmMgICAgICAgICAgICB8ICAxMCAr LQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jICAgICB8IDEz OCArKysrKysrKysrKysrKystLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX2RybV9kcnYuaCAgICAgfCAgIDYgKysKPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L3JvY2tjaGlwX3ZvcF9yZWcuYyAgICAgfCAgIDggKy0KPiAgMTAgZmlsZXMgY2hhbmdlZCwgMTE1 IGluc2VydGlvbnMoKyksIDEwOCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZwo+IGluZGV4IDBlNGViODQuLjUwYzQxYzAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JvY2tjaGlwL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2Nv bmZpZwo+IEBAIC0xMyw3ICsxMyw3IEBAIGNvbmZpZyBEUk1fUk9DS0NISVAKPiAgCSAgSVAgZm91 bmQgb24gdGhlIFNvQy4KPiAgCj4gIGNvbmZpZyBST0NLQ0hJUF9BTkFMT0dJWF9EUAo+IC0JdHJp c3RhdGUgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIEFuYWxvZ2l4IERQIGRyaXZl ciIKPiArCWJvb2wgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIEFuYWxvZ2l4IERQ IGRyaXZlciIKPiAgCWRlcGVuZHMgb24gRFJNX1JPQ0tDSElQCj4gIAlzZWxlY3QgRFJNX0FOQUxP R0lYX0RQCj4gIAloZWxwCj4gQEAgLTIyLDcgKzIyLDcgQEAgY29uZmlnIFJPQ0tDSElQX0FOQUxP R0lYX0RQCj4gIAkgIG9uIFJLMzI4OCBiYXNlZCBTb0MsIHlvdSBzaG91bGQgc2VsZXQgdGhpcyBv cHRpb24uCj4gIAo+ICBjb25maWcgUk9DS0NISVBfQ0ROX0RQCj4gLSAgICAgICAgdHJpc3RhdGUg IlJvY2tjaGlwIGNkbiBEUCIKPiArICAgICAgICBib29sICJSb2NrY2hpcCBjZG4gRFAiCj4gICAg ICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKPiAgCWRlcGVuZHMgb24gRVhUQ09OCj4gIAlz ZWxlY3QgU05EX1NPQ19IRE1JX0NPREVDIGlmIFNORF9TT0MKPiBAQCAtMzMsNyArMzMsNyBAQCBj b25maWcgUk9DS0NISVBfQ0ROX0RQCj4gIAkgIG9wdGlvbi4KPiAgCj4gIGNvbmZpZyBST0NLQ0hJ UF9EV19IRE1JCj4gLSAgICAgICAgdHJpc3RhdGUgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lv bnMgZm9yIFN5bm9wc3lzIERXIEhETUkiCj4gKyAgICAgICAgYm9vbCAiUm9ja2NoaXAgc3BlY2lm aWMgZXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgSERNSSIKPiAgICAgICAgICBkZXBlbmRzIG9u IERSTV9ST0NLQ0hJUAo+ICAgICAgICAgIHNlbGVjdCBEUk1fRFdfSERNSQo+ICAgICAgICAgIGhl bHAKPiBAQCAtNDMsNyArNDMsNyBAQCBjb25maWcgUk9DS0NISVBfRFdfSERNSQo+ICAJICBvcHRp b24uCj4gIAo+ICBjb25maWcgUk9DS0NISVBfRFdfTUlQSV9EU0kKPiAtCXRyaXN0YXRlICJSb2Nr Y2hpcCBzcGVjaWZpYyBleHRlbnNpb25zIGZvciBTeW5vcHN5cyBEVyBNSVBJIERTSSIKPiArCWJv b2wgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIFN5bm9wc3lzIERXIE1JUEkgRFNJ Igo+ICAJZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKPiAgCXNlbGVjdCBEUk1fTUlQSV9EU0kKPiAg CWhlbHAKPiBAQCAtNTMsNyArNTMsNyBAQCBjb25maWcgUk9DS0NISVBfRFdfTUlQSV9EU0kKPiAg CSBvcHRpb24uCj4gIAo+ICBjb25maWcgUk9DS0NISVBfSU5OT19IRE1JCj4gLQl0cmlzdGF0ZSAi Um9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgSW5ub3NpbGljb24gSERNSSIKPiArCWJv b2wgIlJvY2tjaGlwIHNwZWNpZmljIGV4dGVuc2lvbnMgZm9yIElubm9zaWxpY29uIEhETUkiCj4g IAlkZXBlbmRzIG9uIERSTV9ST0NLQ0hJUAo+ICAJaGVscAo+ICAJICBUaGlzIHNlbGVjdHMgc3Vw cG9ydCBmb3IgUm9ja2NoaXAgU29DIHNwZWNpZmljIGV4dGVuc2lvbnMKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL01ha2VmaWxlCj4gaW5kZXggYzkzMWUyYS4uZmE4ZGM5ZCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvTWFrZWZpbGUKPiBAQCAtMywxNCArMywxNCBAQAo+ICAjIERpcmVjdCBSZW5kZXJpbmcg SW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgo+ICAKPiAg cm9ja2NoaXBkcm0teSA6PSByb2NrY2hpcF9kcm1fZHJ2Lm8gcm9ja2NoaXBfZHJtX2ZiLm8gXAo+ IC0JCXJvY2tjaGlwX2RybV9nZW0ubyByb2NrY2hpcF9kcm1fcHNyLm8gcm9ja2NoaXBfZHJtX3Zv cC5vCj4gKwkJcm9ja2NoaXBfZHJtX2dlbS5vIHJvY2tjaGlwX2RybV9wc3IubyBcCj4gKwkJcm9j a2NoaXBfZHJtX3ZvcC5vIHJvY2tjaGlwX3ZvcF9yZWcubwo+ICByb2NrY2hpcGRybS0kKENPTkZJ R19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwo+ICAKPiAtb2Jq LSQoQ09ORklHX1JPQ0tDSElQX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeF9kcC1yb2NrY2hpcC5v Cj4gLW9iai0kKENPTkZJR19ST0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC5vCj4gLWNkbi1kcC1v YmpzIDo9IGNkbi1kcC1jb3JlLm8gY2RuLWRwLXJlZy5vCj4gLW9iai0kKENPTkZJR19ST0NLQ0hJ UF9EV19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KPiAtb2JqLSQoQ09ORklHX1JPQ0tDSElQ X0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5vCj4gLW9iai0kKENPTkZJR19ST0NLQ0hJUF9J Tk5PX0hETUkpICs9IGlubm9faGRtaS5vCj4gK3JvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQ X0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeF9kcC1yb2NrY2hpcC5vCj4gK3JvY2tjaGlwZHJtLSQo Q09ORklHX1JPQ0tDSElQX0NETl9EUCkgKz0gY2RuLWRwLWNvcmUubyBjZG4tZHAtcmVnLm8KPiAr cm9ja2NoaXBkcm0tJChDT05GSUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hp cC5vCj4gK3JvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKSArPSBkdy1t aXBpLWRzaS5vCj4gK3JvY2tjaGlwZHJtLSQoQ09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSkgKz0g aW5ub19oZG1pLm8KPiAgCj4gLW9iai0kKENPTkZJR19EUk1fUk9DS0NISVApICs9IHJvY2tjaGlw ZHJtLm8gcm9ja2NoaXBfdm9wX3JlZy5vCj4gK29iai0kKENPTkZJR19EUk1fUk9DS0NISVApICs9 IHJvY2tjaGlwZHJtLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Fu YWxvZ2l4X2RwLXJvY2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvYW5hbG9naXhf ZHAtcm9ja2NoaXAuYwo+IGluZGV4IDg1NDhlODIuLjkxZWJlNWMgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL2FuYWxvZ2l4X2RwLXJvY2tjaGlwLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvYW5hbG9naXhfZHAtcm9ja2NoaXAuYwo+IEBAIC01MDcsNyAr NTA3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcm9ja2NoaXBfZHBfZHRf aWRzW10gPSB7Cj4gIH07Cj4gIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJvY2tjaGlwX2RwX2R0 X2lkcyk7Cj4gIAo+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByb2NrY2hpcF9kcF9k cml2ZXIgPSB7Cj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfZHBfZHJpdmVyID0g ewo+ICAJLnByb2JlID0gcm9ja2NoaXBfZHBfcHJvYmUsCj4gIAkucmVtb3ZlID0gcm9ja2NoaXBf ZHBfcmVtb3ZlLAo+ICAJLmRyaXZlciA9IHsKPiBAQCAtNTE2LDEwICs1MTYsMyBAQCBzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciByb2NrY2hpcF9kcF9kcml2ZXIgPSB7Cj4gIAkJICAgLm9m X21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHJvY2tjaGlwX2RwX2R0X2lkcyksCj4gIAl9LAo+ ICB9Owo+IC0KPiAtbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyb2NrY2hpcF9kcF9kcml2ZXIpOwo+ IC0KPiAtTU9EVUxFX0FVVEhPUigiWWFraXIgWWFuZyA8eWtrQHJvY2stY2hpcHMuY29tPiIpOwo+ IC1NT0RVTEVfQVVUSE9SKCJKZWZmIGNoZW4gPGplZmYuY2hlbkByb2NrLWNoaXBzLmNvbT4iKTsK PiAtTU9EVUxFX0RFU0NSSVBUSU9OKCJSb2NrY2hpcCBTcGVjaWZpYyBBbmFsb2dpeC1EUCBEcml2 ZXIgRXh0ZW5zaW9uIik7Cj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwo+IGluZGV4IGZkNzlhNzAuLmUxNzk2ZDAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwo+IEBAIC0xMjQzLDcgKzEyNDMs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgY2RuX2RwX3BtX29wcyA9IHsKPiAg CQkJCWNkbl9kcF9yZXN1bWUpCj4gIH07Cj4gIAo+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBjZG5fZHBfZHJpdmVyID0gewo+ICtzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbl9kcF9k cml2ZXIgPSB7Cj4gIAkucHJvYmUgPSBjZG5fZHBfcHJvYmUsCj4gIAkucmVtb3ZlID0gY2RuX2Rw X3JlbW92ZSwKPiAgCS5zaHV0ZG93biA9IGNkbl9kcF9zaHV0ZG93biwKPiBAQCAtMTI1NCw5ICsx MjU0LDMgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuX2RwX2RyaXZlciA9IHsK PiAgCQkgICAucG0gPSAmY2RuX2RwX3BtX29wcywKPiAgCX0sCj4gIH07Cj4gLQo+IC1tb2R1bGVf cGxhdGZvcm1fZHJpdmVyKGNkbl9kcF9kcml2ZXIpOwo+IC0KPiAtTU9EVUxFX0FVVEhPUigiQ2hy aXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKPiAtTU9EVUxFX0RFU0NSSVBUSU9OKCJj ZG4gRFAgRHJpdmVyIik7Cj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYwo+IGluZGV4IGY4NGY5YWUuLjkzNjAyNTAgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYwo+IEBAIC0xMzA0LDcgKzEzMDQs NyBAQCBzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGR3X21pcGlfZHNpX2RyaXZlciA9IHsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciBk d19taXBpX2RzaV9kcml2ZXIgPSB7Cj4gIAkucHJvYmUJCT0gZHdfbWlwaV9kc2lfcHJvYmUsCj4g IAkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3JlbW92ZSwKPiAgCS5kcml2ZXIJCT0gewo+IEBAIC0x MzEyLDkgKzEzMTIsMyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2Rz aV9kcml2ZXIgPSB7Cj4gIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKPiAgCX0sCj4gIH07Cj4gLW1v ZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdfbWlwaV9kc2lfZHJpdmVyKTsKPiAtCj4gLU1PRFVMRV9E RVNDUklQVElPTigiUk9DS0NISVAgTUlQSSBEU0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOwo+ IC1NT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOwo+IC1N T0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gLU1PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUklWRVJf TkFNRSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kd19oZG1pLXJv Y2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jCj4g aW5kZXggYTZkNGEwMi4uOTc2ZWE3OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvZHdfaGRtaS1yb2NrY2hpcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2R3X2hkbWktcm9ja2NoaXAuYwo+IEBAIC0zMjYsNyArMzI2LDcgQEAgc3RhdGljIGludCBkd19o ZG1pX3JvY2tjaGlwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJcmV0 dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hkbWlf cm9ja2NoaXBfcGx0Zm1fZHJpdmVyID0gewo+ICtzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hk bWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyID0gewo+ICAJLnByb2JlICA9IGR3X2hkbWlfcm9ja2No aXBfcHJvYmUsCj4gIAkucmVtb3ZlID0gZHdfaGRtaV9yb2NrY2hpcF9yZW1vdmUsCj4gIAkuZHJp dmVyID0gewo+IEBAIC0zMzQsMTEgKzMzNCwzIEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIGR3X2hkbWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyID0gewo+ICAJCS5vZl9tYXRjaF90YWJs ZSA9IGR3X2hkbWlfcm9ja2NoaXBfZHRfaWRzLAo+ICAJfSwKPiAgfTsKPiAtCj4gLW1vZHVsZV9w bGF0Zm9ybV9kcml2ZXIoZHdfaGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXIpOwo+IC0KPiAtTU9E VUxFX0FVVEhPUigiQW5keSBZYW4gPGFuZHkueWFuQHJvY2stY2hpcHMuY29tPiIpOwo+IC1NT0RV TEVfQVVUSE9SKCJZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+Iik7Cj4gLU1PRFVMRV9E RVNDUklQVElPTigiUm9ja2NoaXAgU3BlY2lmaWMgRFctSERNSSBEcml2ZXIgRXh0ZW5zaW9uIik7 Cj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiAtTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkd2hk bWktcm9ja2NoaXAiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lu bm9faGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2lubm9faGRtaS5jCj4gaW5kZXgg MDA2MjYwZC4uN2Q5Yjc1ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv aW5ub19oZG1pLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvaW5ub19oZG1pLmMK PiBAQCAtOTIzLDcgKzkyMyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGlu bm9faGRtaV9kdF9pZHNbXSA9IHsKPiAgfTsKPiAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW5u b19oZG1pX2R0X2lkcyk7Cj4gIAo+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbm5v X2hkbWlfZHJpdmVyID0gewo+ICtzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlubm9faGRtaV9kcml2 ZXIgPSB7Cj4gIAkucHJvYmUgID0gaW5ub19oZG1pX3Byb2JlLAo+ICAJLnJlbW92ZSA9IGlubm9f aGRtaV9yZW1vdmUsCj4gIAkuZHJpdmVyID0gewo+IEBAIC05MzEsMTEgKzkzMSwzIEBAIHN0YXRp YyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlubm9faGRtaV9kcml2ZXIgPSB7Cj4gIAkJLm9mX21h dGNoX3RhYmxlID0gaW5ub19oZG1pX2R0X2lkcywKPiAgCX0sCj4gIH07Cj4gLQo+IC1tb2R1bGVf cGxhdGZvcm1fZHJpdmVyKGlubm9faGRtaV9kcml2ZXIpOwo+IC0KPiAtTU9EVUxFX0FVVEhPUigi WmhlbmcgWWFuZyA8emhlbmd5YW5nQHJvY2stY2hpcHMuY29tPiIpOwo+IC1NT0RVTEVfQVVUSE9S KCJZYWtpciBZYW5nIDx5a2tAcm9jay1jaGlwcy5jb20+Iik7Cj4gLU1PRFVMRV9ERVNDUklQVElP TigiUm9ja2NoaXAgU3BlY2lmaWMgSU5OTy1IRE1JIERyaXZlciIpOwo+IC1NT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cj4gLU1PRFVMRV9BTElBUygicGxhdGZvcm06aW5ub2hkbWktcm9ja2NoaXAi KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9k cnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiBpbmRl eCBjY2Y0NTY5Li5jNGZkMDc3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX2Rydi5jCj4gQEAgLTMwNCwzNCArMzA0LDQyIEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZGV2X3BtX29wcyByb2NrY2hpcF9kcm1fcG1fb3BzID0gewo+ICAJCQkJcm9ja2NoaXBfZHJt X3N5c19yZXN1bWUpCj4gIH07Cj4gIAo+IC1zdGF0aWMgaW50IGNvbXBhcmVfb2Yoc3RydWN0IGRl dmljZSAqZGV2LCB2b2lkICpkYXRhKQo+IC17Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g ZGF0YTsKPiArI2RlZmluZSBNQVhfUk9DS0NISVBfRFJNX0RSVlMgMTYKPiArc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgKnJvY2tjaGlwX2RybV9kcnZzW01BWF9ST0NLQ0hJUF9EUk1fRFJW U107Cj4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX2RydnNfY250OwoKSSdtIG5vdCBjcmF6eSBh Ym91dCB0aGUgbmFtZXMsIGNhbiB5b3UgcmVuYW1lIHRoZW0gdG8gYmUgYSBsaXR0bGUgbW9yZQpk ZXNjcmlwdGl2ZT8KCk1BWF9ST0NLQ0hJUF9TVUJfRFJJVkVSUwpyb2NrY2hpcF9zdWJfZHJpdmVy cwpudW1fcm9ja2NoaXBfc3ViX2RyaXZlcnMKCj4gIAo+IC0JcmV0dXJuIGRldi0+b2Zfbm9kZSA9 PSBucDsKPiArI2RlZmluZSBST0NLQ0hJUF9EUk1fRFJWKGRydiwgY29uZCkgeyBcCgpJIHRoaW5r IHRoaXMgc2hvdWxkIG1vdmUgdG8gcmlnaHQgYWJvdmUgcm9ja2NoaXBfZHJtX2luaXQsIHNvIGl0 J3MgZWFzaWVyIGZvcgp0aGUgcmVhZGVyIHRvIHNlZSB3aGF0IHRoZSBtYWNybyBkb2VzIGluIGNv bnRleHQuIEFsc28sIHJlbmFtZSB0bwpBRERfUk9DS0NISVBfU1VCX0RSSVZFUgoKPiArCWlmIChJ U19FTkFCTEVEKGNvbmQpKSBcCgpZb3Ugc2hvdWxkIHByb2JhYmx5IGFsc28gZW5zdXJlIHlvdSdy ZSBub3QgZ29pbmcgdG8gb3ZlcnJ1biB0aGUgYXJyYXksIGllOgoKaWYgKElTX0VOQUJMRUQoY29u ZCkgJiYgXAogICAgIVdBUk5fT04obnVtX3JvY2tjaGlwX3N1Yl9kcml2ZXJzID49IE1BWF9ST0NL Q0hJUF9TVUJfRFJJVkVSUykpIFwKCgo+ICsJCXJvY2tjaGlwX2RybV9kcnZzW3JvY2tjaGlwX2Ry bV9kcnZzX2NudCsrXSA9ICZkcnY7IFwKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgcm9ja2NoaXBf YWRkX2VuZHBvaW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJCQkgICBzdHJ1Y3QgY29tcG9u ZW50X21hdGNoICoqbWF0Y2gsCj4gLQkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQpCj4g K3N0YXRpYyBpbnQgY29tcGFyZV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ ICB7Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwLCAqcmVtb3RlOwo+ICsJcmV0dXJuIGRldiA9 PSAoc3RydWN0IGRldmljZSAqKWRhdGE7Cj4gK30KPiAgCj4gLQlmb3JfZWFjaF9jaGlsZF9vZl9u b2RlKHBvcnQsIGVwKSB7Cj4gLQkJcmVtb3RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChlcCk7Cj4gLQkJaWYgKCFyZW1vdGUgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUocmVt b3RlKSkgewo+IC0JCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+IC0JCQljb250aW51ZTsKPiAtCQl9 IGVsc2UgaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHJlbW90ZS0+cGFyZW50KSkgewo+IC0J CQlkZXZfd2FybihkZXYsICJwYXJlbnQgZGV2aWNlIG9mICVzIGlzIG5vdCBhdmFpbGFibGVcbiIs Cj4gLQkJCQkgcmVtb3RlLT5mdWxsX25hbWUpOwo+IC0JCQlvZl9ub2RlX3B1dChyZW1vdGUpOwo+ IC0JCQljb250aW51ZTsKPiAtCQl9Cj4gK3N0YXRpYyBzdHJ1Y3QgY29tcG9uZW50X21hdGNoICpy b2NrY2hpcF9kcm1fbWF0Y2hfYWRkKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0 IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ICsJaW50IGk7Cj4gIAo+IC0JCWRybV9v Zl9jb21wb25lbnRfbWF0Y2hfYWRkKGRldiwgbWF0Y2gsIGNvbXBhcmVfb2YsIHJlbW90ZSk7Cj4g LQkJb2Zfbm9kZV9wdXQocmVtb3RlKTsKPiArCWZvciAoaSA9IDA7IGkgPCByb2NrY2hpcF9kcm1f ZHJ2c19jbnQ7IGkrKykgewo+ICsJCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHJvY2tj aGlwX2RybV9kcnZzW2ldOwo+ICsJCXN0cnVjdCBkZXZpY2UgKnAgPSBOVUxMLCAqZDsKPiArCj4g KwkJZG8gewo+ICsJCQlkID0gYnVzX2ZpbmRfZGV2aWNlKCZwbGF0Zm9ybV9idXNfdHlwZSwgcCwg JmRydi0+ZHJpdmVyLAo+ICsJCQkJCSAgICAodm9pZCAqKXBsYXRmb3JtX2J1c190eXBlLm1hdGNo KTsKPiArCQkJcHV0X2RldmljZShwKTsKPiArCQkJcCA9IGQ7Cj4gKwo+ICsJCQlpZiAoIWQpCj4g KwkJCQlicmVhazsKPiArCQkJY29tcG9uZW50X21hdGNoX2FkZChkZXYsICZtYXRjaCwgY29tcGFy ZV9kZXYsIGQpOwo+ICsJCX0gd2hpbGUgKHRydWUpOwo+ICAJfQo+ICsKPiArCXJldHVybiBtYXRj aCA/OiBFUlJfUFRSKC1FTk9ERVYpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGNv bXBvbmVudF9tYXN0ZXJfb3BzIHJvY2tjaGlwX2RybV9vcHMgPSB7Cj4gQEAgLTMzOSwyMSArMzQ3 LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgcm9ja2NoaXBf ZHJtX29wcyA9IHsKPiAgCS51bmJpbmQgPSByb2NrY2hpcF9kcm1fdW5iaW5kLAo+ICB9Owo+ICAK PiAtc3RhdGljIGludCByb2NrY2hpcF9kcm1fcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiArc3RhdGljIGludCByb2NrY2hpcF9kcm1fcGxhdGZvcm1fb2ZfcHJv YmUoc3RydWN0IGRldmljZSAqZGV2KQo+ICB7Cj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRl di0+ZGV2Owo+IC0Jc3RydWN0IGNvbXBvbmVudF9tYXRjaCAqbWF0Y2ggPSBOVUxMOwo+ICAJc3Ry dWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKPiAgCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqcG9ydDsKPiArCWJvb2wgZm91bmQgPSBmYWxzZTsKPiAgCWludCBpOwo+ICAKPiAgCWlmICgh bnApCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gLQkvKgo+IC0JICogQmluZCB0aGUgY3J0YyBwb3J0 cyBmaXJzdCwgc28gdGhhdAo+IC0JICogZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3MgY2FsbGVk IGZyb20gZW5jb2RlciAuYmluZCBjYWxsYmFja3MKPiAtCSAqIHdvcmtzIGFzIGV4cGVjdGVkLgo+ IC0JICovCj4gKwo+ICAJZm9yIChpID0gMDs7IGkrKykgewo+ICAJCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqaW9tbXU7Cj4gIAo+IEBAIC0zNzcsOSArMzgwLDkgQEAgc3RhdGljIGludCByb2NrY2hpcF9k cm1fcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAgCQkJaXNf c3VwcG9ydF9pb21tdSA9IGZhbHNlOwo+ICAJCX0KPiAgCj4gKwkJZm91bmQgPSB0cnVlOwo+ICsK PiAgCQlvZl9ub2RlX3B1dChpb21tdSk7Cj4gLQkJZHJtX29mX2NvbXBvbmVudF9tYXRjaF9hZGQo ZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsCj4gLQkJCQkJICAgcG9ydC0+cGFyZW50KTsKPiAgCQlv Zl9ub2RlX3B1dChwb3J0KTsKPiAgCX0KPiAgCj4gQEAgLTM4OCwyNyArMzkxLDI3IEBAIHN0YXRp YyBpbnQgcm9ja2NoaXBfZHJtX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gIAkJcmV0dXJuIC1FTk9ERVY7Cj4gIAl9Cj4gIAo+IC0JaWYgKCFtYXRjaCkgewo+ ICsJaWYgKCFmb3VuZCkgewo+ICAJCWRldl9lcnIoZGV2LCAiTm8gYXZhaWxhYmxlIHZvcCBmb3Vu ZCBmb3IgZGlzcGxheS1zdWJzeXN0ZW0uXG4iKTsKPiAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgCX0K PiAtCS8qCj4gLQkgKiBGb3IgZWFjaCBib3VuZCBjcnRjLCBiaW5kIHRoZSBlbmNvZGVycyBhdHRh Y2hlZCB0byBpdHMKPiAtCSAqIHJlbW90ZSBlbmRwb2ludC4KPiAtCSAqLwo+IC0JZm9yIChpID0g MDs7IGkrKykgewo+IC0JCXBvcnQgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAicG9ydHMiLCBpKTsK PiAtCQlpZiAoIXBvcnQpCj4gLQkJCWJyZWFrOwo+ICAKPiAtCQlpZiAoIW9mX2RldmljZV9pc19h dmFpbGFibGUocG9ydC0+cGFyZW50KSkgewo+IC0JCQlvZl9ub2RlX3B1dChwb3J0KTsKPiAtCQkJ Y29udGludWU7Cj4gLQkJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiAgCj4gLQkJcm9ja2NoaXBfYWRk X2VuZHBvaW50cyhkZXYsICZtYXRjaCwgcG9ydCk7Cj4gLQkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4g LQl9Cj4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfZHJtX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7Cj4gKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCXJldCA9IHJvY2tjaGlwX2RybV9wbGF0Zm9ybV9vZl9wcm9iZShkZXYpOwo+ICsJ aWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1hdGNoID0gcm9ja2NoaXBfZHJtX21h dGNoX2FkZChkZXYpOwo+ICsJaWYgKElTX0VSUihtYXRjaCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIo bWF0Y2gpOwo+ICAKPiAgCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZF93aXRoX21hdGNoKGRl diwgJnJvY2tjaGlwX2RybV9vcHMsIG1hdGNoKTsKPiAgfQo+IEBAIC00MzYsNyArNDM5LDQ2IEBA IHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX2RybV9wbGF0Zm9ybV9kcml2 ZXIgPSB7Cj4gIAl9LAo+ICB9Owo+ICAKPiAtbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihyb2NrY2hp cF9kcm1fcGxhdGZvcm1fZHJpdmVyKTsKPiArc3RhdGljIGludCBfX2luaXQgcm9ja2NoaXBfZHJt X2luaXQodm9pZCkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyb2NrY2hpcF9kcm1fZHJ2c19j bnQgPSAwOwo+ICsJUk9DS0NISVBfRFJNX0RSVih2b3BfcGxhdGZvcm1fZHJpdmVyLCBDT05GSUdf RFJNX1JPQ0tDSElQKTsKPiArCVJPQ0tDSElQX0RSTV9EUlYocm9ja2NoaXBfZHBfZHJpdmVyLCBD T05GSUdfUk9DS0NISVBfQU5BTE9HSVhfRFApOwo+ICsJUk9DS0NISVBfRFJNX0RSVihjZG5fZHBf ZHJpdmVyLCBDT05GSUdfUk9DS0NISVBfQ0ROX0RQKTsKPiArCVJPQ0tDSElQX0RSTV9EUlYoZHdf aGRtaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXIsCj4gKwkJCSBDT05GSUdfUk9DS0NISVBfRFdfSERN SSk7Cj4gKwlST0NLQ0hJUF9EUk1fRFJWKGR3X21pcGlfZHNpX2RyaXZlciwgQ09ORklHX1JPQ0tD SElQX0RXX01JUElfRFNJKTsKPiArCVJPQ0tDSElQX0RSTV9EUlYoaW5ub19oZG1pX2RyaXZlciwg Q09ORklHX1JPQ0tDSElQX0lOTk9fSERNSSk7Cj4gKwo+ICsJcmV0ID0gcGxhdGZvcm1fcmVnaXN0 ZXJfZHJpdmVycyhyb2NrY2hpcF9kcm1fZHJ2cywKPiArCQkJCQlyb2NrY2hpcF9kcm1fZHJ2c19j bnQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IHBsYXRmb3Jt X2RyaXZlcl9yZWdpc3Rlcigmcm9ja2NoaXBfZHJtX3BsYXRmb3JtX2RyaXZlcik7Cj4gKwlpZiAo cmV0KQo+ICsJCWdvdG8gZXJyX3VucmVnX2RyaXZlcnM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnJfdW5yZWdfZHJpdmVyczoKPiArCXBsYXRmb3JtX3VucmVnaXN0ZXJfZHJpdmVycyhyb2Nr Y2hpcF9kcm1fZHJ2cywKPiArCQkJCSAgICByb2NrY2hpcF9kcm1fZHJ2c19jbnQpOwo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0IHJvY2tjaGlwX2RybV9maW5p KHZvaWQpCj4gK3sKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyb2NrY2hpcF9kcm1f cGxhdGZvcm1fZHJpdmVyKTsKPiArCj4gKwlwbGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnMocm9j a2NoaXBfZHJtX2RydnMsCj4gKwkJCQkgICAgcm9ja2NoaXBfZHJtX2RydnNfY250KTsKPiArfQo+ ICsKPiArbW9kdWxlX2luaXQocm9ja2NoaXBfZHJtX2luaXQpOwo+ICttb2R1bGVfZXhpdChyb2Nr Y2hpcF9kcm1fZmluaSk7Cj4gIAo+ICBNT0RVTEVfQVVUSE9SKCJNYXJrIFlhbyA8bWFyay55YW9A cm9jay1jaGlwcy5jb20+Iik7Cj4gIE1PRFVMRV9ERVNDUklQVElPTigiUk9DS0NISVAgRFJNIERy aXZlciIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBf ZHJtX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAo+ IGluZGV4IDhhY2EyMTkuLmE0OGZjY2UgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9yb2NrY2hpcF9kcm1fZHJ2LmgKPiBAQCAtNjUsNCArNjUsMTAgQEAgdm9pZCByb2NrY2hpcF9k cm1fZG1hX2RldGFjaF9kZXZpY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCj4gIGludCBy b2NrY2hpcF9kcm1fd2FpdF9saW5lX2ZsYWcoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25l ZCBpbnQgbGluZV9udW0sCj4gIAkJCQl1bnNpZ25lZCBpbnQgbXN0aW1lb3V0KTsKPiAgCj4gK2V4 dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNkbl9kcF9kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2hkbWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyOwo+ICtleHRl cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9kcml2ZXI7Cj4gK2V4dGVybiBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlubm9faGRtaV9kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX2RwX2RyaXZlcjsKPiArZXh0ZXJuIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgdm9wX3BsYXRmb3JtX2RyaXZlcjsKPiAgI2VuZGlmIC8qIF9ST0NLQ0hJUF9E Uk1fRFJWX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF92b3BfcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3Jl Zy5jCj4gaW5kZXggOTFmYmM3Yi4uMGRhNDQ0NCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvcm9ja2NoaXBfdm9wX3JlZy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYwo+IEBAIC00MDQsNyArNDA0LDcgQEAgc3RhdGljIGlu dCB2b3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdm9wX3BsYXRmb3JtX2Ry aXZlciA9IHsKPiArc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2b3BfcGxhdGZvcm1fZHJpdmVyID0g ewo+ICAJLnByb2JlID0gdm9wX3Byb2JlLAo+ICAJLnJlbW92ZSA9IHZvcF9yZW1vdmUsCj4gIAku ZHJpdmVyID0gewo+IEBAIC00MTIsOSArNDEyLDMgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgdm9wX3BsYXRmb3JtX2RyaXZlciA9IHsKPiAgCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9t YXRjaF9wdHIodm9wX2RyaXZlcl9kdF9tYXRjaCksCj4gIAl9LAo+ICB9Owo+IC0KPiAtbW9kdWxl X3BsYXRmb3JtX2RyaXZlcih2b3BfcGxhdGZvcm1fZHJpdmVyKTsKPiAtCj4gLU1PRFVMRV9BVVRI T1IoIk1hcmsgWWFvIDxtYXJrLnlhb0Byb2NrLWNoaXBzLmNvbT4iKTsKPiAtTU9EVUxFX0RFU0NS SVBUSU9OKCJST0NLQ0hJUCBWT1AgRHJpdmVyIik7Cj4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKPiAtLSAKPiAyLjEuNAo+IAoKLS0gClNlYW4gUGF1bCwgU29mdHdhcmUgRW5naW5lZXIsIEdv b2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: seanpaul@chromium.org (Sean Paul) Date: Tue, 21 Mar 2017 15:55:55 -0400 Subject: [PATCH v7] drm/rockchip: Refactor the component match logic. In-Reply-To: <1490078531-5100-1-git-send-email-jeffy.chen@rock-chips.com> References: <1490078531-5100-1-git-send-email-jeffy.chen@rock-chips.com> Message-ID: <20170321195555.GD19389@art_vandelay> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, Mar 21, 2017 at 02:42:11PM +0800, Jeffy Chen wrote: > Currently we are adding all components from the dts, if one of their > drivers been disabled, we would not be able to bring up others. > > Refactor component match logic, follow exynos drm. > > Signed-off-by: Jeffy Chen > Reviewed-by: Andrzej Hajda > Acked-by: Mark Yao > Tested-by: Heiko Stuebner > > --- > > Changes in v7: > Add Heiko Stuebner 's Tested-by. > > Changes in v6: > Add Mark Yao 's Acked-by. > > Changes in v5: > Fix compile error reported by Heiko Stuebner . > > Changes in v4: > Use platform_driver helpers to register/unregister drivers. > Fix null pointer error reported by Heiko Stuebner . > > Changes in v3: > Address Andrzej Hajda 's comments. > > Changes in v2: > Address Sean Paul 's comments. > > drivers/gpu/drm/rockchip/Kconfig | 10 +- > drivers/gpu/drm/rockchip/Makefile | 16 +-- > drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 9 +- > drivers/gpu/drm/rockchip/cdn-dp-core.c | 8 +- > drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 8 +- > drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 10 +- > drivers/gpu/drm/rockchip/inno_hdmi.c | 10 +- > drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 138 +++++++++++++++--------- > drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 6 ++ > drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 8 +- > 10 files changed, 115 insertions(+), 108 deletions(-) > > diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig > index 0e4eb84..50c41c0 100644 > --- a/drivers/gpu/drm/rockchip/Kconfig > +++ b/drivers/gpu/drm/rockchip/Kconfig > @@ -13,7 +13,7 @@ config DRM_ROCKCHIP > IP found on the SoC. > > config ROCKCHIP_ANALOGIX_DP > - tristate "Rockchip specific extensions for Analogix DP driver" > + bool "Rockchip specific extensions for Analogix DP driver" > depends on DRM_ROCKCHIP > select DRM_ANALOGIX_DP > help > @@ -22,7 +22,7 @@ config ROCKCHIP_ANALOGIX_DP > on RK3288 based SoC, you should selet this option. > > config ROCKCHIP_CDN_DP > - tristate "Rockchip cdn DP" > + bool "Rockchip cdn DP" > depends on DRM_ROCKCHIP > depends on EXTCON > select SND_SOC_HDMI_CODEC if SND_SOC > @@ -33,7 +33,7 @@ config ROCKCHIP_CDN_DP > option. > > config ROCKCHIP_DW_HDMI > - tristate "Rockchip specific extensions for Synopsys DW HDMI" > + bool "Rockchip specific extensions for Synopsys DW HDMI" > depends on DRM_ROCKCHIP > select DRM_DW_HDMI > help > @@ -43,7 +43,7 @@ config ROCKCHIP_DW_HDMI > option. > > config ROCKCHIP_DW_MIPI_DSI > - tristate "Rockchip specific extensions for Synopsys DW MIPI DSI" > + bool "Rockchip specific extensions for Synopsys DW MIPI DSI" > depends on DRM_ROCKCHIP > select DRM_MIPI_DSI > help > @@ -53,7 +53,7 @@ config ROCKCHIP_DW_MIPI_DSI > option. > > config ROCKCHIP_INNO_HDMI > - tristate "Rockchip specific extensions for Innosilicon HDMI" > + bool "Rockchip specific extensions for Innosilicon HDMI" > depends on DRM_ROCKCHIP > help > This selects support for Rockchip SoC specific extensions > diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile > index c931e2a..fa8dc9d 100644 > --- a/drivers/gpu/drm/rockchip/Makefile > +++ b/drivers/gpu/drm/rockchip/Makefile > @@ -3,14 +3,14 @@ > # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. > > rockchipdrm-y := rockchip_drm_drv.o rockchip_drm_fb.o \ > - rockchip_drm_gem.o rockchip_drm_psr.o rockchip_drm_vop.o > + rockchip_drm_gem.o rockchip_drm_psr.o \ > + rockchip_drm_vop.o rockchip_vop_reg.o > rockchipdrm-$(CONFIG_DRM_FBDEV_EMULATION) += rockchip_drm_fbdev.o > > -obj-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o > -obj-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp.o > -cdn-dp-objs := cdn-dp-core.o cdn-dp-reg.o > -obj-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o > -obj-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi.o > -obj-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.o > +rockchipdrm-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o > +rockchipdrm-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp-core.o cdn-dp-reg.o > +rockchipdrm-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o > +rockchipdrm-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi.o > +rockchipdrm-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.o > > -obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o rockchip_vop_reg.o > +obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o > diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > index 8548e82..91ebe5c 100644 > --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c > @@ -507,7 +507,7 @@ static const struct of_device_id rockchip_dp_dt_ids[] = { > }; > MODULE_DEVICE_TABLE(of, rockchip_dp_dt_ids); > > -static struct platform_driver rockchip_dp_driver = { > +struct platform_driver rockchip_dp_driver = { > .probe = rockchip_dp_probe, > .remove = rockchip_dp_remove, > .driver = { > @@ -516,10 +516,3 @@ static struct platform_driver rockchip_dp_driver = { > .of_match_table = of_match_ptr(rockchip_dp_dt_ids), > }, > }; > - > -module_platform_driver(rockchip_dp_driver); > - > -MODULE_AUTHOR("Yakir Yang "); > -MODULE_AUTHOR("Jeff chen "); > -MODULE_DESCRIPTION("Rockchip Specific Analogix-DP Driver Extension"); > -MODULE_LICENSE("GPL v2"); > diff --git a/drivers/gpu/drm/rockchip/cdn-dp-core.c b/drivers/gpu/drm/rockchip/cdn-dp-core.c > index fd79a70..e1796d0 100644 > --- a/drivers/gpu/drm/rockchip/cdn-dp-core.c > +++ b/drivers/gpu/drm/rockchip/cdn-dp-core.c > @@ -1243,7 +1243,7 @@ static const struct dev_pm_ops cdn_dp_pm_ops = { > cdn_dp_resume) > }; > > -static struct platform_driver cdn_dp_driver = { > +struct platform_driver cdn_dp_driver = { > .probe = cdn_dp_probe, > .remove = cdn_dp_remove, > .shutdown = cdn_dp_shutdown, > @@ -1254,9 +1254,3 @@ static struct platform_driver cdn_dp_driver = { > .pm = &cdn_dp_pm_ops, > }, > }; > - > -module_platform_driver(cdn_dp_driver); > - > -MODULE_AUTHOR("Chris Zhong "); > -MODULE_DESCRIPTION("cdn DP Driver"); > -MODULE_LICENSE("GPL v2"); > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > index f84f9ae..9360250 100644 > --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c > @@ -1304,7 +1304,7 @@ static int dw_mipi_dsi_remove(struct platform_device *pdev) > return 0; > } > > -static struct platform_driver dw_mipi_dsi_driver = { > +struct platform_driver dw_mipi_dsi_driver = { > .probe = dw_mipi_dsi_probe, > .remove = dw_mipi_dsi_remove, > .driver = { > @@ -1312,9 +1312,3 @@ static struct platform_driver dw_mipi_dsi_driver = { > .name = DRIVER_NAME, > }, > }; > -module_platform_driver(dw_mipi_dsi_driver); > - > -MODULE_DESCRIPTION("ROCKCHIP MIPI DSI host controller driver"); > -MODULE_AUTHOR("Chris Zhong "); > -MODULE_LICENSE("GPL"); > -MODULE_ALIAS("platform:" DRIVER_NAME); > diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > index a6d4a02..976ea79 100644 > --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c > @@ -326,7 +326,7 @@ static int dw_hdmi_rockchip_remove(struct platform_device *pdev) > return 0; > } > > -static struct platform_driver dw_hdmi_rockchip_pltfm_driver = { > +struct platform_driver dw_hdmi_rockchip_pltfm_driver = { > .probe = dw_hdmi_rockchip_probe, > .remove = dw_hdmi_rockchip_remove, > .driver = { > @@ -334,11 +334,3 @@ static struct platform_driver dw_hdmi_rockchip_pltfm_driver = { > .of_match_table = dw_hdmi_rockchip_dt_ids, > }, > }; > - > -module_platform_driver(dw_hdmi_rockchip_pltfm_driver); > - > -MODULE_AUTHOR("Andy Yan "); > -MODULE_AUTHOR("Yakir Yang "); > -MODULE_DESCRIPTION("Rockchip Specific DW-HDMI Driver Extension"); > -MODULE_LICENSE("GPL"); > -MODULE_ALIAS("platform:dwhdmi-rockchip"); > diff --git a/drivers/gpu/drm/rockchip/inno_hdmi.c b/drivers/gpu/drm/rockchip/inno_hdmi.c > index 006260d..7d9b75e 100644 > --- a/drivers/gpu/drm/rockchip/inno_hdmi.c > +++ b/drivers/gpu/drm/rockchip/inno_hdmi.c > @@ -923,7 +923,7 @@ static const struct of_device_id inno_hdmi_dt_ids[] = { > }; > MODULE_DEVICE_TABLE(of, inno_hdmi_dt_ids); > > -static struct platform_driver inno_hdmi_driver = { > +struct platform_driver inno_hdmi_driver = { > .probe = inno_hdmi_probe, > .remove = inno_hdmi_remove, > .driver = { > @@ -931,11 +931,3 @@ static struct platform_driver inno_hdmi_driver = { > .of_match_table = inno_hdmi_dt_ids, > }, > }; > - > -module_platform_driver(inno_hdmi_driver); > - > -MODULE_AUTHOR("Zheng Yang "); > -MODULE_AUTHOR("Yakir Yang "); > -MODULE_DESCRIPTION("Rockchip Specific INNO-HDMI Driver"); > -MODULE_LICENSE("GPL v2"); > -MODULE_ALIAS("platform:innohdmi-rockchip"); > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > index ccf4569..c4fd077 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c > @@ -304,34 +304,42 @@ static const struct dev_pm_ops rockchip_drm_pm_ops = { > rockchip_drm_sys_resume) > }; > > -static int compare_of(struct device *dev, void *data) > -{ > - struct device_node *np = data; > +#define MAX_ROCKCHIP_DRM_DRVS 16 > +static struct platform_driver *rockchip_drm_drvs[MAX_ROCKCHIP_DRM_DRVS]; > +static int rockchip_drm_drvs_cnt; I'm not crazy about the names, can you rename them to be a little more descriptive? MAX_ROCKCHIP_SUB_DRIVERS rockchip_sub_drivers num_rockchip_sub_drivers > > - return dev->of_node == np; > +#define ROCKCHIP_DRM_DRV(drv, cond) { \ I think this should move to right above rockchip_drm_init, so it's easier for the reader to see what the macro does in context. Also, rename to ADD_ROCKCHIP_SUB_DRIVER > + if (IS_ENABLED(cond)) \ You should probably also ensure you're not going to overrun the array, ie: if (IS_ENABLED(cond) && \ !WARN_ON(num_rockchip_sub_drivers >= MAX_ROCKCHIP_SUB_DRIVERS)) \ > + rockchip_drm_drvs[rockchip_drm_drvs_cnt++] = &drv; \ > } > > -static void rockchip_add_endpoints(struct device *dev, > - struct component_match **match, > - struct device_node *port) > +static int compare_dev(struct device *dev, void *data) > { > - struct device_node *ep, *remote; > + return dev == (struct device *)data; > +} > > - for_each_child_of_node(port, ep) { > - remote = of_graph_get_remote_port_parent(ep); > - if (!remote || !of_device_is_available(remote)) { > - of_node_put(remote); > - continue; > - } else if (!of_device_is_available(remote->parent)) { > - dev_warn(dev, "parent device of %s is not available\n", > - remote->full_name); > - of_node_put(remote); > - continue; > - } > +static struct component_match *rockchip_drm_match_add(struct device *dev) > +{ > + struct component_match *match = NULL; > + int i; > > - drm_of_component_match_add(dev, match, compare_of, remote); > - of_node_put(remote); > + for (i = 0; i < rockchip_drm_drvs_cnt; i++) { > + struct platform_driver *drv = rockchip_drm_drvs[i]; > + struct device *p = NULL, *d; > + > + do { > + d = bus_find_device(&platform_bus_type, p, &drv->driver, > + (void *)platform_bus_type.match); > + put_device(p); > + p = d; > + > + if (!d) > + break; > + component_match_add(dev, &match, compare_dev, d); > + } while (true); > } > + > + return match ?: ERR_PTR(-ENODEV); > } > > static const struct component_master_ops rockchip_drm_ops = { > @@ -339,21 +347,16 @@ static const struct component_master_ops rockchip_drm_ops = { > .unbind = rockchip_drm_unbind, > }; > > -static int rockchip_drm_platform_probe(struct platform_device *pdev) > +static int rockchip_drm_platform_of_probe(struct device *dev) > { > - struct device *dev = &pdev->dev; > - struct component_match *match = NULL; > struct device_node *np = dev->of_node; > struct device_node *port; > + bool found = false; > int i; > > if (!np) > return -ENODEV; > - /* > - * Bind the crtc ports first, so that > - * drm_of_find_possible_crtcs called from encoder .bind callbacks > - * works as expected. > - */ > + > for (i = 0;; i++) { > struct device_node *iommu; > > @@ -377,9 +380,9 @@ static int rockchip_drm_platform_probe(struct platform_device *pdev) > is_support_iommu = false; > } > > + found = true; > + > of_node_put(iommu); > - drm_of_component_match_add(dev, &match, compare_of, > - port->parent); > of_node_put(port); > } > > @@ -388,27 +391,27 @@ static int rockchip_drm_platform_probe(struct platform_device *pdev) > return -ENODEV; > } > > - if (!match) { > + if (!found) { > dev_err(dev, "No available vop found for display-subsystem.\n"); > return -ENODEV; > } > - /* > - * For each bound crtc, bind the encoders attached to its > - * remote endpoint. > - */ > - for (i = 0;; i++) { > - port = of_parse_phandle(np, "ports", i); > - if (!port) > - break; > > - if (!of_device_is_available(port->parent)) { > - of_node_put(port); > - continue; > - } > + return 0; > +} > > - rockchip_add_endpoints(dev, &match, port); > - of_node_put(port); > - } > +static int rockchip_drm_platform_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct component_match *match = NULL; > + int ret; > + > + ret = rockchip_drm_platform_of_probe(dev); > + if (ret) > + return ret; > + > + match = rockchip_drm_match_add(dev); > + if (IS_ERR(match)) > + return PTR_ERR(match); > > return component_master_add_with_match(dev, &rockchip_drm_ops, match); > } > @@ -436,7 +439,46 @@ static struct platform_driver rockchip_drm_platform_driver = { > }, > }; > > -module_platform_driver(rockchip_drm_platform_driver); > +static int __init rockchip_drm_init(void) > +{ > + int ret; > + > + rockchip_drm_drvs_cnt = 0; > + ROCKCHIP_DRM_DRV(vop_platform_driver, CONFIG_DRM_ROCKCHIP); > + ROCKCHIP_DRM_DRV(rockchip_dp_driver, CONFIG_ROCKCHIP_ANALOGIX_DP); > + ROCKCHIP_DRM_DRV(cdn_dp_driver, CONFIG_ROCKCHIP_CDN_DP); > + ROCKCHIP_DRM_DRV(dw_hdmi_rockchip_pltfm_driver, > + CONFIG_ROCKCHIP_DW_HDMI); > + ROCKCHIP_DRM_DRV(dw_mipi_dsi_driver, CONFIG_ROCKCHIP_DW_MIPI_DSI); > + ROCKCHIP_DRM_DRV(inno_hdmi_driver, CONFIG_ROCKCHIP_INNO_HDMI); > + > + ret = platform_register_drivers(rockchip_drm_drvs, > + rockchip_drm_drvs_cnt); > + if (ret) > + return ret; > + > + ret = platform_driver_register(&rockchip_drm_platform_driver); > + if (ret) > + goto err_unreg_drivers; > + > + return 0; > + > +err_unreg_drivers: > + platform_unregister_drivers(rockchip_drm_drvs, > + rockchip_drm_drvs_cnt); > + return ret; > +} > + > +static void __exit rockchip_drm_fini(void) > +{ > + platform_driver_unregister(&rockchip_drm_platform_driver); > + > + platform_unregister_drivers(rockchip_drm_drvs, > + rockchip_drm_drvs_cnt); > +} > + > +module_init(rockchip_drm_init); > +module_exit(rockchip_drm_fini); > > MODULE_AUTHOR("Mark Yao "); > MODULE_DESCRIPTION("ROCKCHIP DRM Driver"); > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h > index 8aca219..a48fcce 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h > @@ -65,4 +65,10 @@ void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, > int rockchip_drm_wait_line_flag(struct drm_crtc *crtc, unsigned int line_num, > unsigned int mstimeout); > > +extern struct platform_driver cdn_dp_driver; > +extern struct platform_driver dw_hdmi_rockchip_pltfm_driver; > +extern struct platform_driver dw_mipi_dsi_driver; > +extern struct platform_driver inno_hdmi_driver; > +extern struct platform_driver rockchip_dp_driver; > +extern struct platform_driver vop_platform_driver; > #endif /* _ROCKCHIP_DRM_DRV_H_ */ > diff --git a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > index 91fbc7b..0da4444 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > +++ b/drivers/gpu/drm/rockchip/rockchip_vop_reg.c > @@ -404,7 +404,7 @@ static int vop_remove(struct platform_device *pdev) > return 0; > } > > -static struct platform_driver vop_platform_driver = { > +struct platform_driver vop_platform_driver = { > .probe = vop_probe, > .remove = vop_remove, > .driver = { > @@ -412,9 +412,3 @@ static struct platform_driver vop_platform_driver = { > .of_match_table = of_match_ptr(vop_driver_dt_match), > }, > }; > - > -module_platform_driver(vop_platform_driver); > - > -MODULE_AUTHOR("Mark Yao "); > -MODULE_DESCRIPTION("ROCKCHIP VOP Driver"); > -MODULE_LICENSE("GPL v2"); > -- > 2.1.4 > -- Sean Paul, Software Engineer, Google / Chromium OS