From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH v1 7/7] drm: add Atmel LCDC display controller support Date: Fri, 24 Aug 2018 14:31:25 +0200 Message-ID: <20180824143125.4e99e791@bbrezillon> References: <20180812184152.GA22343@ravnborg.org> <20180812184629.3808-7-sam@ravnborg.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180812184629.3808-7-sam@ravnborg.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sam Ravnborg Cc: Mark Rutland , devicetree@vger.kernel.org, Alexandre Belloni , linux-pwm@vger.kernel.org, Boris Brezillon , Nicolas Ferre , Nicolas Ferre , dri-devel@lists.freedesktop.org, Rob Herring , Lee Jones , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org K05vcmFsZgoKSGkgU2FtLAoKT24gU3VuLCAxMiBBdWcgMjAxOCAyMDo0NjoyOSArMDIwMApTYW0g UmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+IHdyb3RlOgoKPiBUaGlzIGlzIGEgRFJNIGJhc2Vk IGRyaXZlciBmb3IgdGhlIEF0bWVsIExDREMgSVAuCj4gVGhlcmUgZXhpc3QgdG9kYXkgYSBmcmFt ZWJ1ZmZlciBiYXNlZCBkcml2ZXIgYW5kCj4gdGhpcyBpcyBhIHJlLWltcGxtZW50YXRpb24gb2Yg dGhlIHNhbWUgb24gdG9wIG9mIERSTS4KPiAKPiBUaGUgcmV3cml0ZSB3YXMgYmFzZWQgb24gdGhl IG9yaWdpbmFsIGZiZGV2IGRyaXZlcgo+IGJ1dCB0aGUgZHJpdmVyIGhhcyBhbHNvIHNlZW4gaW5z cGlyYXRpb24gZnJvbQo+IHRoZSBhdG1lbC1obGNkY19kYyBkcml2ZXIgYW5kIG90aGVycy4KPiAK PiBUaGUgZHJpdmVyIGlzIG5vdCBhIGZ1bGwgcmVwbGFjZW1lbnQ6Cj4gLSBTVE4gZGlzcGxheXMg YXJlIG5vdCBzdXBwb3J0ZWQKPiAJQmluZGluZyBzdXBwb3J0IGlzIG1pc3NpbmcgYnV0IG1vc3Qg b2YgdGhlCj4gCVNUTiBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIG90aGVyd2lzZSBwb3J0ZWQK PiAJZnJvbSB0aGUgZmJkZXYgZHJpdmVyLgo+IC0gZ2FtbWEgc3VwcG9ydCBpcyBtaXNzaW5nCj4g CVRoZSBkcml2ZXIgdXRpbGlzZXMgZHJtX3NpbXBsZV9rbXNfaGVscGVyIGFuZAo+IAl0aGlzIGhl bHBlciBsYWNrcyBzdXBwb3J0IGZvciBzZXR0dGluZyB1cCBnYW1tYQo+IC0gbW9kZXNldHRpbmcg aXMgbm90IGNoZWNrZWQgKHNlZSBUT0RPIGluIGZpbGUpCj4gLSBzdXBwb3J0IGZvciBleHRyYSBt b2RlcyBhcyBhcHBsaWNhYmxlIChhbmQgbGNkLXdpcmluZy1tb2RlKQo+IC0gc3VwcG9ydCBmb3Ig QVZSMzIgKGlzIGl0IHJlbGV2YW50PykKPiAKPiBTaWduZWQtb2ZmLWJ5OiBTYW0gUmF2bmJvcmcg PHNhbUByYXZuYm9yZy5vcmc+Cj4gQ2M6IE5pY29sYXMgRmVycmUgPG5pY29sYXMuZmVycmVAYXRt ZWwuY29tPgo+IENjOiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0 cm9ucy5jb20+Cj4gQ2M6IEFsZXhhbmRyZSBCZWxsb25pIDxhbGV4YW5kcmUuYmVsbG9uaUBib290 bGluLmNvbT4KPiAtLS0KPiAgTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDcgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXRtZWwvS2NvbmZpZyAgICAgICAgIHwgICAxMiAr Cj4gIGRyaXZlcnMvZ3B1L2RybS9hdG1lbC9NYWtlZmlsZSAgICAgICAgfCAgICAyICsKPiAgZHJp dmVycy9ncHUvZHJtL2F0bWVsL2F0bWVsX2xjZGMtZGMuYyB8IDEwOTQgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgMTExNSBpbnNlcnRpb25zKCsp Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXRtZWwvYXRtZWxfbGNkYy1k Yy5jCj4gCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiBpbmRleCAw OWNlNzZhOWExZGMuLjBhNTk0ZDAyYTdjMCAxMDA2NDQKPiAtLS0gYS9NQUlOVEFJTkVSUwo+ICsr KyBiL01BSU5UQUlORVJTCj4gQEAgLTQ2ODUsNiArNDY4NSwxMyBAQCBGOglkcml2ZXJzL2dwdS9k cm0vYXRtZWwvYXRtZWwtaGxjZGMqCj4gIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9kaXNwbGF5L2F0bWVsLwo+ICBUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5v cmcvZHJtL2RybS1taXNjCj4gIAo+ICtEUk0gRFJJVkVSUyBGT1IgQVRNRUwgTENEQwo+ICtNOglT YW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+Cj4gK0w6CWRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKPiArUzoJTWFpbnRhaW5lZAo+ICtGOglkcml2ZXJzL2dwdS9kcm0vYXRtZWwv YXRtZWwtbGNkYyoKPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3Bs YXkvYXRtZWwvCj4gKwoKQXMgc3RhdGVkIGluIG9uZSBvZiBteSBwcmV2aW91cyByZXBsaWVzLCBJ IHRoaW5rIHdlIHNob3VsZCBrZWVwIGEKc2luZ2xlIGVudHJ5IGZvciBib3RoIGRyaXZlcnMsIGp1 c3QgdXBkYXRlIHRoZSBleGlzdGluZyBvbmUgYW5kIHdlCnNob3VsZCBiZSBnb29kLgoKPiAgRFJN IERSSVZFUlMgRk9SIEJSSURHRSBDSElQUwo+ICBNOglBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNv ZGVhdXJvcmEub3JnPgo+ICBNOglBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgoK Wy4uLl0KCj4gKy8qCj4gKyAqIFRoZSBBdG1lbCBMQ0QgY29udHJvbGxlciBkaXNwbGF5LWNvbnRy b2xsZXIgc3VwcG9ydHMgc2V2ZXJhbCBmb3JtYXRzIGJ1dAo+ICsgKiB0aGlzIGRyaXZlciBzdXBw b3J0cyBvbmx5IGEgc21hbGwgc3Vic2V0Lgo+ICsgKiBUT0RPOiBhdG1lbF9sY2RmYiBzdXBwb3J0 cyBtb3JlIC0gcG9ydCBpdCBvdmVyCj4gKyAqIE1heWJlIGFjdHVhbCB3aXJpbmcgd2lsbCBpbXBh Y3QgbW9kZSBzdXBwb3J0Pwo+ICsgKi8KPiArc3RhdGljIGNvbnN0IHUzMiBsY2RjX2RjX2Zvcm1h dHNbXSA9IHsKPiArCURSTV9GT1JNQVRfQkdSNTY1LAo+ICt9Owo+ICsKPiArLyogU3RhcnQgTENE IENvbnRyb2xsZXIgKERNQSArIFBXUikgKi8KPiArc3RhdGljIHZvaWQgbGNkY19kY19zdGFydChz dHJ1Y3QgbGNkY19kYyAqbGNkY19kYykKPiArewo+ICsJLy8gRW5hYmxlIERNQQoKQXZvaWQgdXNp bmcgQysrIHN0eWxlIGNvbW1lbnRzLgoKPiArCXJlZ21hcF93cml0ZShsY2RjX2RjLT5yZWdtYXAs IEFUTUVMX0xDRENfRE1BQ09OLCBBVE1FTF9MQ0RDX0RNQUVOKTsKPiArCS8vIEVuYWJsZSBMQ0QK PiArCXJlZ21hcF93cml0ZShsY2RjX2RjLT5yZWdtYXAsIEFUTUVMX0xDRENfUFdSQ09OLAo+ICsJ CSAgICAgKGxjZGNfZGMtPmRlc2MtPmd1YXJkX3RpbWUgPDwgQVRNRUxfTENEQ19HVUFSRFRfT0ZG U0VUKQo+ICsJCSAgICAgfCBBVE1FTF9MQ0RDX1BXUik7Cj4gK30KCj4gKwo+ICtzdGF0aWMgaW50 IGxjZGNfZGNfZGlzcGxheV9jaGVjayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBp cGUsCj4gKwkJCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlLAo+ICsJCQkJIHN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3N0YXRlKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqZG1vZGU7Cj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmI7Cj4gKwlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKPiArCj4gKwlkbW9kZSA9ICZjc3RhdGUtPm1vZGU7 Cj4gKwlvbGRfZmIgPSBwaXBlLT5wbGFuZS5zdGF0ZS0+ZmI7Cj4gKwlmYiA9IHBzdGF0ZS0+ZmI7 Cj4gKwo+ICsJLyogQ2hlY2sgdGltaW5nPyAqLwoKRGlkIHlvdSBsb29rIGF0IHdoYXQgb3RoZXIg c2ltcGxlIERSTSBkcml2ZXJzIGNoZWNrIGluIHRoaXMgaG9vaz8KCj4gKwkvKiBUT0RPICovCj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KCgo+ICsKPiArLyogc2NoZWR1bGVkIHdvcmtlciB0byByZXNl dCBMQ0QgKi8KPiArc3RhdGljIHZvaWQgcmVzZXRfbGNkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKPiArewo+ICsJc3RydWN0IGxjZGNfZGMgKmxjZGNfZGM7Cj4gKwo+ICsJbGNkY19k YyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGNkY19kYywgcmVzZXRfbGNkY193b3JrKTsK PiArCgpIbSwgeW91IG5lZWQgYSBsb2NrIHRvIHByb3RlY3QgdGhpcyBzZWN0aW9uIGFuZCB5b3Ug aGF2ZSB0byBjaGVjayB0aGUKTENEQyBzdGF0ZSwgYmVjYXVzZSBpdCBtaWdodCBoYXZlIGJlZW4g ZGlzYWJsZWQgdGhyb3VnaCB0aGUgLT5kaXNhYmxlKCkKaG9vayBqdXN0IGFmdGVyIHlvdSBoYXZl IHNjaGVkdWxlZCB0aGlzIHJlc2V0IG9wZXJhdGlvbi4KCj4gKwlsY2RjX2RjX3N0b3AobGNkY19k Yyk7Cj4gKwlsY2RjX2RjX3N0YXJ0KGxjZGNfZGMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgbGNkY19kY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0 cnVjdCBsY2RjX2RjICpsY2RjX2RjOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiArCXVu c2lnbmVkIGludCBzdGF0dXM7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwl1bnNpZ25lZCBp bnQgaW1yOwo+ICsJdW5zaWduZWQgaW50IGlzcjsKPiArCj4gKwlkcm0gPSBhcmc7Cj4gKwlsY2Rj X2RjID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCWRldiA9IGxjZGNfZGMtPmRldjsKPiArCj4gKwly ZWdtYXBfcmVhZChsY2RjX2RjLT5yZWdtYXAsIEFUTUVMX0xDRENfSU1SLCAmaW1yKTsKPiArCXJl Z21hcF9yZWFkKGxjZGNfZGMtPnJlZ21hcCwgQVRNRUxfTENEQ19JU1IsICZpc3IpOwo+ICsJc3Rh dHVzID0gaW1yICYgaXNyOwo+ICsJaWYgKCFzdGF0dXMpCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ ICsKPiArCWlmIChzdGF0dXMgJiBBVE1FTF9MQ0RDX0xTVExOSSkKPiArCQlkcm1fY3J0Y19oYW5k bGVfdmJsYW5rKCZsY2RjX2RjLT5waXBlLmNydGMpOwo+ICsKPiArCWlmIChzdGF0dXMgJiBBVE1F TF9MQ0RDX1VGTFdJKSB7Cj4gKwkJRFJNX0RFVl9JTkZPKGRldiwgIkZJRk8gdW5kZXJmbG93ICUj eFxuIiwgc3RhdHVzKTsKPiArCQkvKiByZXNldCBETUEgYW5kIEZJRk8gdG8gYXZvaWQgc2NyZWVu IHNoaWZ0aW5nICovCj4gKwkJc2NoZWR1bGVfd29yaygmbGNkY19kYy0+cmVzZXRfbGNkY193b3Jr KTsKPiArCX0KCkFkZCBhIGJsYW5rIGxpbmUgaGVyZS4KCj4gKwlpZiAoc3RhdHVzICYgQVRNRUxf TENEQ19PV1JJKQo+ICsJCURSTV9ERVZfSU5GTyhkZXYsICJGSUZPIG92ZXJ3cml0ZSBpbnRlcnJ1 cHQiKTsKPiArCj4gKwlpZiAoc3RhdHVzICYgQVRNRUxfTENEQ19NRVJJKQo+ICsJCURSTV9ERVZf SU5GTyhkZXYsICJETUEgbWVtb3J5IGVycm9yIik7Cj4gKwo+ICsJLyogQ2xlYXIgYWxsIHJlcG9y dGVkIChmcm9tIElTUikgaW50ZXJydXB0cyAqLwo+ICsJcmVnbWFwX3dyaXRlKGxjZGNfZGMtPnJl Z21hcCwgQVRNRUxfTENEQ19JQ1IsIGlzcik7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ ICt9Cj4gKwoKWy4uLl0KCj4gK3N0YXRpYyBpbnQgbGNkY19kY19tb2Rlc2V0X2luaXQoc3RydWN0 IGxjZGNfZGMgKmxjZGNfZGMsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiArCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCWRldiA9IGRybS0+ZGV2Owo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRy bSk7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCAgPSBsY2RjX2RjLT5kZXNjLT5taW5f d2lkdGg7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBsY2RjX2RjLT5kZXNjLT5t aW5faGVpZ2h0Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggID0gbGNkY19kYy0+ZGVz Yy0+bWF4X3dpZHRoOwo+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gbGNkY19kYy0+ ZGVzYy0+bWF4X2hlaWdodDsKPiArCWRybS0+bW9kZV9jb25maWcuZnVuY3MJICAgID0gJm1vZGVf Y29uZmlnX2Z1bmNzOwo+ICsKPiArCW5wID0gZGV2LT5vZl9ub2RlOwo+ICsJLyogcG9ydEAwIGlz IHRoZSBvdXRwdXQgcG9ydCAqLwo+ICsJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdl KG5wLCAwLCAwLCAmcGFuZWwsICZicmlkZ2UpOwo+ICsJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RF Vikgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGZpbmQgcGFuZWwgKCVkKVxu IiwgcmV0KTsKPiArCQlnb3RvIGVycl9vdXQ7CgoJCXJldHVybiByZXQ7Cgo+ICsJfQo+ICsKPiAr CWJyaWRnZSA9IGRybV9wYW5lbF9icmlkZ2VfYWRkKHBhbmVsLCBEUk1fTU9ERV9DT05ORUNUT1Jf VW5rbm93bik7Cgpkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoKSBtaWdodCBkaXJlY3RseSBy ZXR1cm4gYSBicmlkZ2UuIEFuZCBtYXliZQp3ZSBzaG91bGQgZGVjbGFyZSBhIERQSSBjb25uZWN0 b3IuIEFuZCBmaW5hbGx5LCB5b3UgY2FuIG1pZ2h0IHdhbnQgdG8KdXNlIGRldm1fZHJtX3BhbmVs X2JyaWRnZV9hZGQoKSBpbnN0ZWFkIG9mIGRybV9wYW5lbF9icmlkZ2VfYWRkKCkKCglpZiAocGFu ZWwpCgkJYnJpZGdlID0gZGV2bV9kcm1fcGFuZWxfYnJpZGdlX2FkZChkZXYsIHBhbmVsLAoJCQkJ CQkgICBEUk1fTU9ERV9DT05ORUNUT1JfRFBJKTsKCgo+ICsJaWYgKElTX0VSUihicmlkZ2UpKSB7 Cj4gKwkJcmV0ID0gUFRSX0VSUihicmlkZ2UpOwo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIGFkZCBicmlkZ2UgKCVkKSIsIHJldCk7Cj4gKwkJZ290byBlcnJfcGFuZWxfcmVtb3Zl OwoKSG0sIGlmIGRybV9wYW5lbF9icmlkZ2VfYWRkKCkgZmFpbGVkLCB5b3Ugc2hvdWxkbid0IGNh bGwKZHJtX3BhbmVsX2JyaWRnZV9yZW1vdmUoYnJpZGdlKS4gWW91IGNhbiBqdXN0IGRvCgoJCXJl dHVybiByZXQ7Cgo+ICsJfQo+ICsKPiArCWxjZGNfZGMtPnBhbmVsID0gcGFuZWw7Cj4gKwlsY2Rj X2RjLT5icmlkZ2UgPSBicmlkZ2U7Cj4gKwo+ICsJcmV0ID0gZHJtX3NpbXBsZV9kaXNwbGF5X3Bp cGVfaW5pdChkcm0sCj4gKwkJCQkJICAgJmxjZGNfZGMtPnBpcGUsCj4gKwkJCQkJICAgJmxjZGNf ZGNfZGlzcGxheV9mdW5jcywKPiArCQkJCQkgICBsY2RjX2RjX2Zvcm1hdHMsCj4gKwkJCQkJICAg QVJSQVlfU0laRShsY2RjX2RjX2Zvcm1hdHMpLAo+ICsJCQkJCSAgIE5VTEwsCj4gKwkJCQkJICAg JmxjZGNfZGMtPmNvbm5lY3Rvcik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJGYWlsZWQgdG8gaW5pdCBkaXNwbGF5IHBpcGUgKCVkKVxuIiwgcmV0KTsKPiArCQlnb3Rv IGVycl9wYW5lbF9yZW1vdmU7CgpJZiB5b3UgdXNlIGRldm1fZHJtX3BhbmVsX2JyaWRnZV9hZGQo KSwgeW91IGNhbiByZXR1cm4gZGlyZWN0bHkuCgo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9zaW1w bGVfZGlzcGxheV9waXBlX2F0dGFjaF9icmlkZ2UoJmxjZGNfZGMtPnBpcGUsIGJyaWRnZSk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gYXR0YWNoIGJy aWRnZSAoJWQpIiwgcmV0KTsKPiArCQlnb3RvIGVycl9wYW5lbF9yZW1vdmU7CgpEaXR0by4KCj4g Kwl9Cj4gKwo+ICsJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gKwo+ICtlcnJfcGFuZWxfcmVtb3ZlOgo+ICsJaWYgKHBhbmVsKQo+ICsJCWRybV9wYW5lbF9i cmlkZ2VfcmVtb3ZlKGJyaWRnZSk7Cj4gKwo+ICtlcnJfb3V0Ogo+ICsJcmV0dXJuIHJldDsKCkFu ZCBub3cgeW91IHNob3VsZCBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhlIGVycm9yIHBhdGggZW50 aXJlbHkuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxjZGNfZGNfbG9hZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKPiAr CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgbGNkY19kYyAqbGNkY19k YzsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZGV2ID0gZHJt LT5kZXY7Cj4gKwlwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4gKwo+ICsJbWF0Y2gg PSBvZl9tYXRjaF9ub2RlKGF0bWVsX2xjZGNfb2ZfbWF0Y2gsIGRldi0+cGFyZW50LT5vZl9ub2Rl KTsKPiArCWlmICghbWF0Y2gpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImludmFsaWQgY29t cGF0aWJsZSBzdHJpbmcgKG5vZGU9JXMpIiwKPiArCQkJICAgICAgZGV2LT5wYXJlbnQtPm9mX25v ZGUtPm5hbWUpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCWlmICghbWF0Y2gt PmRhdGEpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImludmFsaWQgbGNkY19kYyBkZXNjcmlw dGlvblxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJbGNkY19kYyA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGNkY19kYyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFs Y2RjX2RjKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbGNk Y19kY1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJLyogcmVzZXQgb2Yg bGNkYyBtaWdodCBzbGVlcCBhbmQgcmVxdWlyZSBhIHByZWVtcHRpYmxlIHRhc2sgY29udGV4dCAq Lwo+ICsJSU5JVF9XT1JLKCZsY2RjX2RjLT5yZXNldF9sY2RjX3dvcmssIHJlc2V0X2xjZGNfd29y ayk7Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJtKTsKPiArCWRldl9zZXRf ZHJ2ZGF0YShkZXYsIGxjZGNfZGMpOwo+ICsKPiArCWxjZGNfZGMtPm1mZF9sY2RjID0gZGV2X2dl dF9kcnZkYXRhKGRldi0+cGFyZW50KTsKPiArCWRybS0+ZGV2X3ByaXZhdGUgPSBsY2RjX2RjOwo+ ICsKPiArCWxjZGNfZGMtPnJlZ21hcCA9IGxjZGNfZGMtPm1mZF9sY2RjLT5yZWdtYXA7Cj4gKwls Y2RjX2RjLT5kZXNjID0gbWF0Y2gtPmRhdGE7Cj4gKwlsY2RjX2RjLT5kZXYgPSBkZXY7Cj4gKwo+ ICsJbGNkY19kYy0+bGNkX3N1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJsY2QiKTsK PiArCWlmIChJU19FUlIobGNkY19kYy0+bGNkX3N1cHBseSkpIHsKPiArCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBnZXQgbGNkLXN1cHBseSAoJWxkKVxuIiwKPiArCQkJICAgICAgUFRS X0VSUihsY2RjX2RjLT5sY2Rfc3VwcGx5KSk7Cj4gKwkJbGNkY19kYy0+bGNkX3N1cHBseSA9IE5V TEw7Cj4gKwl9Cj4gKwo+ICsJbGNkY19kY19zdGFydF9jbG9jayhsY2RjX2RjKTsKCkhtLCBkbyB5 b3UgcmVhbGx5IG5lZWQgdG8gY2FsbCB0aGF0IGhlcmU/IEknZCBtYWtlIGl0IHBhcnQgb2YgdGhl CnJ1bnRpbWUgUE0gcmVzdW1lIGhvb2ssIGFuZCBwdXQgYSBsY2RjX2RjX3N0b3BfY2xvY2soKSBp biB0aGUgc3VzcGVuZApob29rLgoKPiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsK PiArCXJldCA9IGRybV92YmxhbmtfaW5pdChkcm0sIDEpOwo+ICsJaWYgKHJldCkgewo+ICsJCURS TV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdmJsYW5rICglZClcbiIsCj4g KwkJCSAgICAgIHJldCk7Cj4gKwkJZ290byBlcnJfcG1fcnVudGltZV9kaXNhYmxlOwo+ICsJfQo+ ICsKPiArCXJldCA9IGxjZGNfZGNfbW9kZXNldF9pbml0KGxjZGNfZGMsIGRybSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJtb2Rlc2V0X2luaXQgZmFpbGVkICglZCki LCByZXQpOwo+ICsJCWdvdG8gZXJyX3BtX3J1bnRpbWVfZGlzYWJsZTsKPiArCX0KPiArCj4gKwlw bV9ydW50aW1lX2dldF9zeW5jKGRldik7CgpUaGlzIGNhbGwgd2lsbCBhdXRvbWF0aWNhbGx5IGNh bGwgdGhlIHJ1bnRpbWUgUE0gcmVzdW1lIGhvb2ssIHNvIGlmIHlvdQpuZWVkIHRoZSBjbGsgdG8g YmUgZW5hYmxlZCBiZWZvcmUgdGhhdCBwb2ludCB5b3Ugc2hvdWxkIHB1dCBpdCBlYXJsaWVyLgoK QWxzbywgeW91IHNob3VsZCBjYWxsIHBtX3J1bnRpbWVfZ2V0X3N5bmMoKSBpbiB0aGUgLT5lbmFi bGUoKSBwYXRoIGFuZApwbV9ydW50aW1lX3B1dCgpIGluIHRoZSAtPmRpc2FibGUoKSBwYXRoLgoK PiArCXJldCA9IGRybV9pcnFfaW5zdGFsbChkcm0sIGxjZGNfZGMtPm1mZF9sY2RjLT5pcnEpOwo+ ICsJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBpbnN0YWxsIElSUSAoJWQpXG4iLCByZXQpOwo+ICsK PiArCQlnb3RvIGVycl9wbV9ydW50aW1lX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAq IFBhc3NpbmcgaW4gMTYgaGVyZSB3aWxsIG1ha2UgdGhlIFJHQjY1NiBtb2RlIHRoZSBkZWZhdWx0 Cj4gKwkgKiBQYXNzaW5nIGluIDMyIHdpbGwgdXNlIFhSR0I4ODg4IG1vZGUKPiArCSAqLwo+ICsJ ZHJtX2ZiX2NtYV9mYmRldl9pbml0KGRybSwgMTYsIDApOwo+ICsKPiArCWRybV9rbXNfaGVscGVy X3BvbGxfaW5pdChkcm0pOwo+ICsKPiArCWxjZGNfZGMtPmZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9p bml0KGRybSwgOCwgMSk7Cj4gKwlpZiAoSVNfRVJSKGxjZGNfZGMtPmZiZGV2KSkgewo+ICsJCXJl dCA9IFBUUl9FUlIobGNkY19kYy0+ZmJkZXYpOwo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIGluaXQgRkIgQ01BIGFyZWEgKCVkKSIsIHJldCk7Cj4gKwkJZ290byBlcnJfaXJxX3Vu aW5zdGFsbDsKPiArCX0KPiArCj4gKwlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHJtKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9pcnFfdW5pbnN0YWxsOgo+ICsJcG1fcnVudGltZV9n ZXRfc3luYyhkZXYpOwo+ICsJZHJtX2lycV91bmluc3RhbGwoZHJtKTsKPiArCXBtX3J1bnRpbWVf cHV0X3N5bmMoZGV2KTsKPiArCj4gK2Vycl9wbV9ydW50aW1lX2Rpc2FibGU6Cj4gKwlwbV9ydW50 aW1lX2Rpc2FibGUoZGV2KTsKPiArCWxjZGNfZGNfc3RvcF9jbG9jayhsY2RjX2RjKTsKPiArCj4g KwljYW5jZWxfd29ya19zeW5jKCZsY2RjX2RjLT5yZXNldF9sY2RjX3dvcmspOwoKSXNuJ3QgdGhl cmUgYSByYWNlIGhlcmU/IFdoYXQgaWYgdGhlcmUgd2FzIGEgd29yayBxdWV1ZWQgYnV0IHlvdQpk aXNhYmxlZCB0aGUgY2xrPyBJIGd1ZXNzIHJlZyByZWFkL3dyaXRlIGFjY2Vzc2VzIG1pZ2h0IGZh aWwgKGRvbid0Cmtub3cgaG93IGJhZCB0aGlzIGNhbiBnbyB0aG91Z2gpLgoKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBsY2RjX2RjX3VubG9hZChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbGNkY19kYyAqbGNkY19kYyA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwo+ICsJZHJtX2ZiX2NtYV9mYmRldl9maW5pKGRldik7Cj4gKwlmbHVzaF93 b3JrKCZsY2RjX2RjLT5yZXNldF9sY2RjX3dvcmspOwo+ICsJZHJtX2ttc19oZWxwZXJfcG9sbF9m aW5pKGRldik7Cj4gKwlpZiAobGNkY19kYy0+cGFuZWwpCj4gKwkJZHJtX3BhbmVsX2JyaWRnZV9y ZW1vdmUobGNkY19kYy0+YnJpZGdlKTsKCllvdSBjYW4gZHJvcCB0aGF0IG9uZSBpZiB5b3UgdXNl IHRoZSBkZXZtXyB2ZXJzaW9uLgoKPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRldik7Cj4g Kwo+ICsJcG1fcnVudGltZV9nZXRfc3luYyhkZXYtPmRldik7Cj4gKwlkcm1faXJxX3VuaW5zdGFs bChkZXYpOwo+ICsJcG1fcnVudGltZV9wdXRfc3luYyhkZXYtPmRldik7Cj4gKwo+ICsJZGV2LT5k ZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gKwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRldi0+ZGV2KTsK PiArCWxjZGNfZGNfc3RvcF9jbG9jayhsY2RjX2RjKTsKPiArCWNhbmNlbF93b3JrX3N5bmMoJmxj ZGNfZGMtPnJlc2V0X2xjZGNfd29yayk7CgpBbmQgYWdhaW4sIGl0IG1pZ2h0IGJlIHRvbyBsYXRl LiBTaG91bGQgYmUgbW92ZWQganVzdCBhZnRlciBkaXNhYmxpbmcKdGhlIElSUSwgc2luY2UgdGhp cyBpcyB0aGUgb25seSBwYXRoIHdoZXJlIHlvdSBxdWV1ZSB0aGlzIHdvcmsuCgo+ICt9Cj4gKwo+ ICsKPiArc3RhdGljIGludCBsY2RjX2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldiA9ICZwZGV2LT5kZXY7Cj4gKwo+ICsJZHJtID0g ZHJtX2Rldl9hbGxvYygmbGNkY19kY19kcm1fZHJpdmVyLCBkZXYpOwo+ICsJaWYgKElTX0VSUihk cm0pKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgZHJtIGRl dmljZVxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoZHJtKTsKPiArCX0KPiArCj4gKwlyZXQgPSBs Y2RjX2RjX2xvYWQoZHJtKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfcHV0X3JlZjsKPiAr Cj4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZHJtICglZClcbiIsIHJldCk7 Cj4gKwkJZ290byBlcnJfdW5sb2FkOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJy X3VubG9hZDoKPiArCWxjZGNfZGNfdW5sb2FkKGRybSk7Cj4gKwo+ICtlcnJfcHV0X3JlZjoKPiAr CWRybV9kZXZfcHV0KGRybSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9CgpUaGF0J3MgYWxsIEkgc2Vl IGZvciBub3csIGJ1dCBrZWVwIGluIG1pbmQgdGhhdCBJIGRvbid0IGtub3cgbXVjaCBhYm91dAp0 aGUgRFJNIHNpbXBsZSBpbnRlcmZhY2UsIHNvIHlvdSdkIGJldHRlciB3YWl0IGZvciBhIHJldmll dyBmcm9tCnNvbWVvbmUgd2hvIGtub3dzIGJldHRlciAoTm9yYWxmPykuCgpSZWdhcmRzLAoKQm9y aXMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==