From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 4/5] drm/imx: drop deprecated load/unload drm_driver ops Date: Fri, 17 Jun 2016 14:48:38 +0200 Message-ID: <20160617124838.GQ23520@phenom.ffwll.local> References: <1466158422-12579-1-git-send-email-l.stach@pengutronix.de> <1466158422-12579-4-git-send-email-l.stach@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D6416E364 for ; Fri, 17 Jun 2016 12:48:43 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id k184so18432881wme.2 for ; Fri, 17 Jun 2016 05:48:42 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1466158422-12579-4-git-send-email-l.stach@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lucas Stach Cc: dri-devel@lists.freedesktop.org, kernel@pengutronix.de, patchwork-lst@pengutronix.de List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBKdW4gMTcsIDIwMTYgYXQgMTI6MTM6NDFQTSArMDIwMCwgTHVjYXMgU3RhY2ggd3Jv dGU6Cj4gRHJvcCB0aGUgbG9hZC91bmxvYWQgZHJpdmVyIG9wcywgYXMgdGhleSBhcmUgZGVwcmVj YXRlZCBiZWNhdXNlIG9mIHRoZWlyCj4gaW5oZXJlbnQgcmFjZXMsIHdpdGggZGV2aWNlcyBiZWlu ZyB2aXNpYmxlIHRvIHVzZXJzcGFjZSBiZWZvcmUgdGhleSBhcmUKPiBmdWxseSBpbml0aWFsaXpl ZC4KPiAKPiBNb3ZlIHRoaXMgY29kZSBpbnRvIHRoZSBkcml2ZXIgYmluZC91bmJpbmQgcm91dGlu ZXMgYnJhY2tldGVkIGJ5IHRoZQo+IHByb3BlciBkcm1fZGV2X2FsbG9jL3JlZ2lzdGVyIGFuZCBk cm1fZGV2X3VucmVnaXN0ZXIvdW5yZWYgY2FsbHMuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHVjYXMg U3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9p bXgvaW14LWRybS1jb3JlLmMgfCAyNDcgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMTIxIGluc2VydGlvbnMoKyksIDEyNiBkZWxldGlvbnMo LSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtZHJtLWNvcmUuYyBi L2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS1jb3JlLmMKPiBpbmRleCBjNjMzNzg2NjFlMTEu Ljc5OWE2ODk3NjU5MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lteC1kcm0t Y29yZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtZHJtLWNvcmUuYwo+IEBAIC03 OCwyNSArNzgsNiBAQCBzdGF0aWMgdm9pZCBpbXhfZHJtX2RyaXZlcl9sYXN0Y2xvc2Uoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiAgCX0KPiAgfQo+ICAKPiAtc3RhdGljIGludCBpbXhfZHJtX2Ry aXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiAtewo+IC0Jc3RydWN0IGlteF9k cm1fZGV2aWNlICppbXhkcm0gPSBkcm0tPmRldl9wcml2YXRlOwo+IC0KPiAtCWRybV9rbXNfaGVs cGVyX3BvbGxfZmluaShkcm0pOwo+IC0KPiAtCWlmIChpbXhkcm0tPmZiaGVscGVyKQo+IC0JCWRy bV9mYmRldl9jbWFfZmluaShpbXhkcm0tPmZiaGVscGVyKTsKPiAtCj4gLQljb21wb25lbnRfdW5i aW5kX2FsbChkcm0tPmRldiwgZHJtKTsKPiAtCj4gLQlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsK PiAtCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gLQo+IC0JcGxhdGZvcm1fc2V0X2Ry dmRhdGEoZHJtLT5wbGF0Zm9ybWRldiwgTlVMTCk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gIHN0YXRpYyBzdHJ1Y3QgaW14X2RybV9jcnRjICppbXhfZHJtX2ZpbmRfY3J0YyhzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCj4gIHsKPiAgCXN0cnVjdCBpbXhfZHJtX2RldmljZSAqaW14ZHJtID0g Y3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiBAQCAtMjIzLDEwOSArMjA0LDYgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgaW14X2RybV9tb2RlX2NvbmZpZ19mdW5j cyA9IHsKPiAgfTsKPiAgCj4gIC8qCj4gLSAqIE1haW4gRFJNIGluaXRpYWxpc2F0aW9uLiBUaGlz IGJpbmRzLCBpbml0aWFsaXNlcyBhbmQgcmVnaXN0ZXJzCj4gLSAqIHdpdGggRFJNIHRoZSBzdWJj b21wb25lbnRzIG9mIHRoZSBkcml2ZXIuCj4gLSAqLwo+IC1zdGF0aWMgaW50IGlteF9kcm1fZHJp dmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgbG9uZyBmbGFncykKPiAt ewo+IC0Jc3RydWN0IGlteF9kcm1fZGV2aWNlICppbXhkcm07Cj4gLQlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpbXhkcm0gPSBkZXZtX2t6YWxs b2MoZHJtLT5kZXYsIHNpemVvZigqaW14ZHJtKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWlteGRy bSkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlpbXhkcm0tPmRybSA9IGRybTsKPiAtCj4g LQlkcm0tPmRldl9wcml2YXRlID0gaW14ZHJtOwo+IC0KPiAtCS8qCj4gLQkgKiBlbmFibGUgZHJt IGlycSBtb2RlLgo+IC0JICogLSB3aXRoIGlycV9lbmFibGVkID0gdHJ1ZSwgd2UgY2FuIHVzZSB0 aGUgdmJsYW5rIGZlYXR1cmUuCj4gLQkgKgo+IC0JICogUC5TLiBub3RlIHRoYXQgd2Ugd291bGRu J3QgdXNlIGRybSBpcnEgaGFuZGxlciBidXQKPiAtCSAqICAgICAganVzdCBzcGVjaWZpYyBkcml2 ZXIgb3duIG9uZSBpbnN0ZWFkIGJlY2F1c2UKPiAtCSAqICAgICAgZHJtIGZyYW1ld29yayBzdXBw b3J0cyBvbmx5IG9uZSBpcnEgaGFuZGxlciBhbmQKPiAtCSAqICAgICAgZHJpdmVycyBjYW4gd2Vs bCB0YWtlIGNhcmUgb2YgdGhlaXIgaW50ZXJydXB0cwo+IC0JICovCj4gLQlkcm0tPmlycV9lbmFi bGVkID0gdHJ1ZTsKPiAtCj4gLQkvKgo+IC0JICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFz IGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4KPiAtCSAqIHRoaXMgdmFsdWUgd291bGQgYmUgdXNl ZCB0byBjaGVjayBmcmFtZWJ1ZmZlciBzaXplIGxpbWl0YXRpb24KPiAtCSAqIGF0IGRybV9tb2Rl X2FkZGZiKCkuCj4gLQkgKi8KPiAtCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7Cj4g LQlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKPiAtCWRybS0+bW9kZV9jb25maWcu bWF4X3dpZHRoID0gNDA5NjsKPiAtCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IDQwOTY7 Cj4gLQlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJmlteF9kcm1fbW9kZV9jb25maWdfZnVuY3M7 Cj4gLQo+IC0JZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKPiAtCj4gLQlyZXQgPSBkcm1fdmJs YW5rX2luaXQoZHJtLCBNQVhfQ1JUQyk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gZXJyX2ttczsK PiAtCj4gLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkcm0tPnBsYXRmb3JtZGV2LCBkcm0pOwo+IC0K PiAtCS8qIE5vdyB0cnkgYW5kIGJpbmQgYWxsIG91ciBzdWItY29tcG9uZW50cyAqLwo+IC0JcmV0 ID0gY29tcG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOwo+IC0JaWYgKHJldCkKPiAtCQln b3RvIGVycl92Ymxhbms7Cj4gLQo+IC0JLyoKPiAtCSAqIEFsbCBjb21wb25lbnRzIGFyZSBub3cg YWRkZWQsIHdlIGNhbiBwdWJsaXNoIHRoZSBjb25uZWN0b3Igc3lzZnMKPiAtCSAqIGVudHJpZXMg dG8gdXNlcnNwYWNlLiAgVGhpcyB3aWxsIGdlbmVyYXRlIGhvdHBsdWcgZXZlbnRzIGFuZCBzbwo+ IC0JICogdXNlcnNwYWNlIHdpbGwgZXhwZWN0IHRvIGJlIGFibGUgdG8gYWNjZXNzIERSTSBhdCB0 aGlzIHBvaW50Lgo+IC0JICovCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRy bS0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKPiAtCQlyZXQgPSBkcm1fY29u bmVjdG9yX3JlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlkZXZfZXJy KGRybS0+ZGV2LAo+IC0JCQkJIltDT05ORUNUT1I6JWQ6JXNdIGRybV9jb25uZWN0b3JfcmVnaXN0 ZXIgZmFpbGVkOiAlZFxuIiwKPiAtCQkJCWNvbm5lY3Rvci0+YmFzZS5pZCwKPiAtCQkJCWNvbm5l Y3Rvci0+bmFtZSwgcmV0KTsKPiAtCQkJZ290byBlcnJfdW5iaW5kOwo+IC0JCX0KPiAtCX0KPiAt Cj4gLQkvKgo+IC0JICogQWxsIGNvbXBvbmVudHMgYXJlIG5vdyBpbml0aWFsaXNlZCwgc28gc2V0 dXAgdGhlIGZiIGhlbHBlci4KPiAtCSAqIFRoZSBmYiBoZWxwZXIgdGFrZXMgY29waWVzIG9mIGtl eSBoYXJkd2FyZSBpbmZvcm1hdGlvbiwgc28gdGhlCj4gLQkgKiBjcnRjcy9jb25uZWN0b3JzL2Vu Y29kZXJzIG11c3Qgbm90IGNoYW5nZSBhZnRlciB0aGlzIHBvaW50Lgo+IC0JICovCj4gLSNpZiBJ U19FTkFCTEVEKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKQo+IC0JaWYgKGxlZ2FjeWZiX2Rl cHRoICE9IDE2ICYmIGxlZ2FjeWZiX2RlcHRoICE9IDMyKSB7Cj4gLQkJZGV2X3dhcm4oZHJtLT5k ZXYsICJJbnZhbGlkIGxlZ2FjeWZiX2RlcHRoLiAgRGVmYXVsdGluZyB0byAxNmJwcFxuIik7Cj4g LQkJbGVnYWN5ZmJfZGVwdGggPSAxNjsKPiAtCX0KPiAtCWRybV9oZWxwZXJfZGlzYWJsZV91bnVz ZWRfZnVuY3Rpb25zKGRybSk7Cj4gLQlpbXhkcm0tPmZiaGVscGVyID0gZHJtX2ZiZGV2X2NtYV9p bml0KGRybSwgbGVnYWN5ZmJfZGVwdGgsCj4gLQkJCQlkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRj LCBNQVhfQ1JUQyk7Cj4gLQlpZiAoSVNfRVJSKGlteGRybS0+ZmJoZWxwZXIpKSB7Cj4gLQkJcmV0 ID0gUFRSX0VSUihpbXhkcm0tPmZiaGVscGVyKTsKPiAtCQlpbXhkcm0tPmZiaGVscGVyID0gTlVM TDsKPiAtCQlnb3RvIGVycl91bmJpbmQ7Cj4gLQl9Cj4gLSNlbmRpZgo+IC0KPiAtCWRybV9rbXNf aGVscGVyX3BvbGxfaW5pdChkcm0pOwo+IC0KPiAtCXJldHVybiAwOwo+IC0KPiAtZXJyX3VuYmlu ZDoKPiAtCWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOwo+IC1lcnJfdmJsYW5r Ogo+IC0JZHJtX3ZibGFua19jbGVhbnVwKGRybSk7Cj4gLWVycl9rbXM6Cj4gLQlkcm1fbW9kZV9j b25maWdfY2xlYW51cChkcm0pOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLS8qCj4g ICAqIGlteF9kcm1fYWRkX2NydGMgLSBhZGQgYSBuZXcgY3J0Ywo+ICAgKi8KPiAgaW50IGlteF9k cm1fYWRkX2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRybV9jcnRjICpjcnRj LAo+IEBAIC00MTYsOCArMjk0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVz YyBpbXhfZHJtX2lvY3Rsc1tdID0gewo+ICAKPiAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGlt eF9kcm1fZHJpdmVyID0gewo+ICAJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9NT0RFU0VUIHwg RFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSwKPiAtCS5sb2FkCQkJPSBpbXhfZHJtX2RyaXZlcl9s b2FkLAo+IC0JLnVubG9hZAkJCT0gaW14X2RybV9kcml2ZXJfdW5sb2FkLAo+ICAJLmxhc3RjbG9z ZQkJPSBpbXhfZHJtX2RyaXZlcl9sYXN0Y2xvc2UsCj4gIAkuc2V0X2J1c2lkCQk9IGRybV9wbGF0 Zm9ybV9zZXRfYnVzaWQsCj4gIAkuZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gZHJtX2dlbV9j bWFfZnJlZV9vYmplY3QsCj4gQEAgLTQ3MSwxMiArMzQ3LDEzMSBAQCBzdGF0aWMgaW50IGNvbXBh cmVfb2Yoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ICAKPiAgc3RhdGljIGludCBp bXhfZHJtX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICB7Cj4gLQlyZXR1cm4gZHJtX3BsYXRm b3JtX2luaXQoJmlteF9kcm1fZHJpdmVyLCB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJc3RydWN0IGlteF9kcm1fZGV2aWNlICppbXhkcm07 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRybSA9IGRybV9kZXZfYWxsb2MoJmlteF9kcm1fZHJpdmVy LCBkZXYpOwo+ICsJaWYgKCFkcm0pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJaW14ZHJt ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbXhkcm0pLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghaW14ZHJtKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl91bnJlZjsKPiAr CX0KPiArCj4gKwlpbXhkcm0tPmRybSA9IGRybTsKPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBpbXhk cm07Cj4gKwo+ICsJLyoKPiArCSAqIGVuYWJsZSBkcm0gaXJxIG1vZGUuCj4gKwkgKiAtIHdpdGgg aXJxX2VuYWJsZWQgPSB0cnVlLCB3ZSBjYW4gdXNlIHRoZSB2YmxhbmsgZmVhdHVyZS4KPiArCSAq Cj4gKwkgKiBQLlMuIG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCB1c2UgZHJtIGlycSBoYW5kbGVyIGJ1 dAo+ICsJICogICAgICBqdXN0IHNwZWNpZmljIGRyaXZlciBvd24gb25lIGluc3RlYWQgYmVjYXVz ZQo+ICsJICogICAgICBkcm0gZnJhbWV3b3JrIHN1cHBvcnRzIG9ubHkgb25lIGlycSBoYW5kbGVy IGFuZAo+ICsJICogICAgICBkcml2ZXJzIGNhbiB3ZWxsIHRha2UgY2FyZSBvZiB0aGVpciBpbnRl cnJ1cHRzCj4gKwkgKi8KPiArCWRybS0+aXJxX2VuYWJsZWQgPSB0cnVlOwo+ICsKPiArCS8qCj4g KwkgKiBzZXQgbWF4IHdpZHRoIGFuZCBoZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZSg0MDk2eDQwOTYp Lgo+ICsJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZyYW1lYnVmZmVyIHNp emUgbGltaXRhdGlvbgo+ICsJICogYXQgZHJtX21vZGVfYWRkZmIoKS4KPiArCSAqLwo+ICsJZHJt LT5tb2RlX2NvbmZpZy5taW5fd2lkdGggPSA2NDsKPiArCWRybS0+bW9kZV9jb25maWcubWluX2hl aWdodCA9IDY0Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk2Owo+ICsJZHJt LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5NjsKPiArCWRybS0+bW9kZV9jb25maWcuZnVu Y3MgPSAmaW14X2RybV9tb2RlX2NvbmZpZ19mdW5jczsKPiArCj4gKwlkcm1fbW9kZV9jb25maWdf aW5pdChkcm0pOwo+ICsKPiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIE1BWF9DUlRDKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfa21zOwo+ICsKPiArCWRldl9zZXRfZHJ2ZGF0YShk ZXYsIGRybSk7Cj4gKwo+ICsJLyogTm93IHRyeSBhbmQgYmluZCBhbGwgb3VyIHN1Yi1jb21wb25l bnRzICovCj4gKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJaWYgKHJl dCkKPiArCQlnb3RvIGVycl92Ymxhbms7Cj4gKwo+ICsJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihk cm0sIDApOwoKSW4gcHJpbmNpcGxlIHRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IHN0ZXAgaW4gdGhl IGluaXQgc2VxdWVuY2UsIG90aGVyd2lzZQp5b3UgbWlnaHQgaGF2ZSB1c2Vyc3BhY2UgZmlnaHRp bmcgd2l0aCB5b3VyIGluaXQgY29kZSBvdmVyIHRoZSBody4gUGxlYXNlCm1vdmUgZG93bi4KCj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3VuYmluZDsKPiArCj4gKwkvKgo+ICsJICogQWxsIGNv bXBvbmVudHMgYXJlIG5vdyBhZGRlZCwgd2UgY2FuIHB1Ymxpc2ggdGhlIGNvbm5lY3RvciBzeXNm cwo+ICsJICogZW50cmllcyB0byB1c2Vyc3BhY2UuICBUaGlzIHdpbGwgZ2VuZXJhdGUgaG90cGx1 ZyBldmVudHMgYW5kIHNvCj4gKwkgKiB1c2Vyc3BhY2Ugd2lsbCBleHBlY3QgdG8gYmUgYWJsZSB0 byBhY2Nlc3MgRFJNIGF0IHRoaXMgcG9pbnQuCj4gKwkgKi8KPiArCXJldCA9IGRybV9jb25uZWN0 b3JfcmVnaXN0ZXJfYWxsKGRybSk7CgpUaGlzIChhbmQgY29ubmVjdG9yX3VucmVnaXN0ZXJfYWxs KSBqdXN0IGJlY2FtZSB1bmVjZXNzYXJ5IHdpdGggdGhlCnBhdGNoZXMgZnJvbSBDaHJpcyB0aGF0 IEkgbWVyZ2VkIGludG8gZHJtLW1pc2MgdG9kYXkuIFBsZWFzZSByZW1vdmUuCgo+ICsJaWYgKHJl dCkKPiArCQlnb3RvIGVycl91bnJlZ2lzdGVyOwo+ICsKPiArCS8qCj4gKwkgKiBBbGwgY29tcG9u ZW50cyBhcmUgbm93IGluaXRpYWxpc2VkLCBzbyBzZXR1cCB0aGUgZmIgaGVscGVyLgo+ICsJICog VGhlIGZiIGhlbHBlciB0YWtlcyBjb3BpZXMgb2Yga2V5IGhhcmR3YXJlIGluZm9ybWF0aW9uLCBz byB0aGUKPiArCSAqIGNydGNzL2Nvbm5lY3RvcnMvZW5jb2RlcnMgbXVzdCBub3QgY2hhbmdlIGFm dGVyIHRoaXMgcG9pbnQuCj4gKwkgKi8KPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9GQkRF Vl9FTVVMQVRJT04pCj4gKwlpZiAobGVnYWN5ZmJfZGVwdGggIT0gMTYgJiYgbGVnYWN5ZmJfZGVw dGggIT0gMzIpIHsKPiArCQlkZXZfd2FybihkZXYsICJJbnZhbGlkIGxlZ2FjeWZiX2RlcHRoLiAg RGVmYXVsdGluZyB0byAxNmJwcFxuIik7Cj4gKwkJbGVnYWN5ZmJfZGVwdGggPSAxNjsKPiArCX0K PiArCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRybSk7CgpmeWksIHlvdSBu ZWVkIHRvIG51a2UgdGhpcyB3aGVuIHN3aXRjaGluZyB0byBhdG9taWMuCgo+ICsJaW14ZHJtLT5m YmhlbHBlciA9IGRybV9mYmRldl9jbWFfaW5pdChkcm0sIGxlZ2FjeWZiX2RlcHRoLAo+ICsJCQkJ ZHJtLT5tb2RlX2NvbmZpZy5udW1fY3J0YywgTUFYX0NSVEMpOwo+ICsJaWYgKElTX0VSUihpbXhk cm0tPmZiaGVscGVyKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoaW14ZHJtLT5mYmhlbHBlcik7Cj4g KwkJaW14ZHJtLT5mYmhlbHBlciA9IE5VTEw7Cj4gKwkJZ290byBlcnJfdW5yZWdpc3RlcjsKPiAr CX0KPiArI2VuZGlmCj4gKwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdW5yZWdpc3RlcjoKPiArCWRybV9kZXZfdW5yZWdpc3Rl cihkcm0pOwo+ICtlcnJfdW5iaW5kOgo+ICsJY29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYs IGRybSk7Cj4gK2Vycl92Ymxhbms6Cj4gKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiArZXJy X2ttczoKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gK2Vycl91bnJlZjoKPiAr CWRybV9kZXZfdW5yZWYoZHJtKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBzdGF0 aWMgdm9pZCBpbXhfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIHsKPiAtCWRybV9w dXRfZGV2KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0g PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCBpbXhfZHJtX2RldmljZSAqaW14ZHJt ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmhlbHBlciA9 IGlteGRybS0+ZmJoZWxwZXI7Cj4gKwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9maW5pKGRybSk7 Cj4gKwkvKiBkZXZpY2UgaXMgZ29pbmcgZG93biwgc28gbm8gbmVlZCB0byByZXN0b3JlIGZiZGV2 IG1vZGVzICovCj4gKwlpbXhkcm0tPmZiaGVscGVyID0gTlVMTDsKPiArCj4gKwlkcm1fY29ubmVj dG9yX3VucmVnaXN0ZXJfYWxsKGRybSk7Cj4gKwlkcm1fZGV2X3VucmVnaXN0ZXIoZHJtKTsKClNh bWUgaGVyZTogdW5yZWdpc3RlciBzaG91bGQgYmUgZmlyc3QsIGNvbm5lY3Rvcl91bnJlZ2lzdGVy X2FsbCBpc24ndApuZWVkZWQgYW55IG1vcmUuCi1EYW5pZWwKCj4gKwo+ICsJaWYgKGZiaGVscGVy KQo+ICsJCWRybV9mYmRldl9jbWFfZmluaShmYmhlbHBlcik7Cj4gKwo+ICsJY29tcG9uZW50X3Vu YmluZF9hbGwoZHJtLT5kZXYsIGRybSk7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsK PiArCj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICsKPiArCWRybV9kZXZfdW5y ZWYoZHJtKTsKPiAgfQo+ICAKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVy X29wcyBpbXhfZHJtX29wcyA9IHsKPiAtLSAKPiAyLjguMQo+IAo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29m dHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=