From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/2] dma: xilinx: Add driver for Video Framebuffer IP From: Vinod Koul Message-Id: <20171220170555.GI18649@localhost> Date: Wed, 20 Dec 2017 22:35:55 +0530 To: Vishal Sagar Cc: dmaengine@vger.kernel.org, dineshk@xilinx.com, michal.simek@xilinx.com, jmouroux@xilinx.com, radheys@xilinx.com, hyunk@xilinx.com, mpenner@xilinx.com, Vishal Sagar , John Nichols , Hyun Kwon List-ID: T24gV2VkLCBEZWMgMjAsIDIwMTcgYXQgMDI6MDA6MThQTSArMDUzMCwgVmlzaGFsIFNhZ2FyIHdy b3RlOgo+IFRoZSBWaWRlbyBGcmFtZWJ1ZmZlciBJUCBpcyBhdmFpbGFibGUgaW4gdHdvIGZvcm1z OiByZWFkIG9yIHdyaXRlLgo+IFRoaXMgZHJpdmVyIHN1cHBvcnRzIGVpdGhlciBmb3JtIG9mIHRo ZSBJUC4KPiBFYWNoIElQIGlzIGEgc2luZ2xlIGNoYW5uZWwgRE1BIGFuZCBpcyB2aWRlbyBmb3Jt YXQgYXdhcmUuCj4gSXQgY2FuIHJlYWQvd3JpdGUgdmlkZW8gZGF0YSBhcnJhbmdlZCBmcm9tL3Rv IG1lbW9yeSBhcyBwYWNrZWQgb3IKPiBzZW1pLXBsYW5hciB3YXkgYmFzZWQgb24gdGhlIHNlbGVj dGVkIHZpZGVvIGZvcm1hdC4KPiBUbyBnZXQgbGlzdCBvZiBzdXBwb3J0ZWQgdmlkZW8gZm9ybWF0 cywgY2xpZW50cyBjYW4gY2FsbCBjZXJ0YWluCj4gQVBJcyBleHBvc2VkIGJ5IHRoZSBkcml2ZXIu IFRoaXMgZHJpdmVyIGludHJvZHVjZXMgc3VwcG9ydCBmb3IKPiB0aGVzZSBJUHMgYW5kIGludGVn cmF0ZXMgd2l0aCB0aGUgRE1BIEVuZ2luZSBGcmFtZXdvcmsuCgpUaGUgc3Vic3l0ZW0gbmFtZSBp cyBkbWFlbmdpbmUhCgo+IFNpZ25lZC1vZmYtYnk6IFJhZGhleSBTaHlhbSBQYW5kZXkgPHJhZGhl eXNAeGlsaW54LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBKb2huIE5pY2hvbHMgPGpuaWNob2xAeGls aW54LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBKZWZmcmV5IE1vdXJvdXggPGptb3Vyb3V4QHhpbGlu eC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWljaGFsIFNpbWVrIDxtaWNoYWwuc2ltZWtAeGlsaW54 LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ IFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+Cj4gLS0tCj4g IGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDE0ICstCj4gIGRyaXZlcnMv ZG1hL3hpbGlueC9NYWtlZmlsZSAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9kbWEveGlsaW54 L3hpbGlueF9mcm1idWYuYyB8IDExNTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCgpUaGF0cyBhIHZlcnkgbGFyZ2UgZmlsZSBmb3IgcmV2aWV3LCBkbyBjb25zaWRlciBzcGxp dHRpbmcgc3R1ZmYKCj4gQEAgLTM0Miw3ICszNDIsNyBAQCBjb25maWcgTU9YQVJUX0RNQQo+ICAJ c2VsZWN0IERNQV9WSVJUVUFMX0NIQU5ORUxTCj4gIAloZWxwCj4gIAkgIEVuYWJsZSBzdXBwb3J0 IGZvciB0aGUgTU9YQSBBUlQgU29DIERNQSBjb250cm9sbGVyLgo+IC0KPiArCgp3aHkgdGhpcyBu b2lzZSwgdGhpcyBwYXRjaCBoYXMgc29tZSBtYW55IHNpZ24tb2ZmJ3MgYnV0IGRpZG50IGFueW9u ZSBzZWUgdGhpcwpub2lzZT8KCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CgpDb3B5cmlnaHQgbmVlZHMgdG8gZm9sbG93IHRoaXMgaW4gQzk5IHN0eWxlCgo+ICsvKgo+ICsg KiBETUFFbmdpbmUgZHJpdmVyIGZvciBYaWxpbnggRnJhbWVidWZmZXIgSVAKPiArICoKPiArICog Q29weXJpZ2h0IChDKSAyMDE2IC0gMjAxNyBYaWxpbngsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPiArICoKPiArICogQXV0aG9yczogUmFkaGV5IFNoeWFtIFBhbmRleSA8cmFkaGV5c0B4aWxp bnguY29tPgo+ICsgKiAgICAgICAgICBKb2huIE5pY2hvbHMgPGpuaWNob2xAeGlsaW54LmNvbT4K PiArICogICAgICAgICAgSmVmZnJleSBNb3Vyb3V4IDxqbW91cm91eEB4aWxpbnguY29tPgo+ICsg Kgo+ICsgKiBCYXNlZCBvbiB0aGUgRnJlZXNjYWxlIERNQSBkcml2ZXIuCj4gKyAqCj4gKyAqIERl c2NyaXB0aW9uOgo+ICsgKiBUaGUgQVhJIEZyYW1lYnVmZmVyIGNvcmUgaXMgYSBzb2Z0IFhpbGlu eCBJUCBjb3JlIHRoYXQKPiArICogcHJvdmlkZXMgaGlnaC1iYW5kd2lkdGggZGlyZWN0IG1lbW9y eSBhY2Nlc3MgYmV0d2VlbiBtZW1vcnkKPiArICogYW5kIEFYSTQtU3RyZWFtLgo+ICsgKgo+ICsg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKd2h5IGRvIHlvdSBuZWVkIHRoaXMgbGlj ZW5zZSB0ZXh0PyBXaXRoIFNQRFggdGFnIHRoaXMgaXMgaW1wbGllZC4uCgo+ICsjaW5jbHVkZSA8 bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWEveGlsaW54X2ZybWJ1Zi5oPgo+ ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25z dW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9w b2xsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29m X2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RtYS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfaXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CgpkbyB5b3Ug bmVlZCBzbyBtYW55IGhlYWRlcnM/Cgo+ICtzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuIHsKPiAr CXN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAqeGRldjsKPiArCS8qIERlc2NyaXB0b3Igb3Bl cmF0aW9uIGxvY2sgKi8KCnRoaXMgaXMgZHVwbGljYXRlIGNvbW1lbnQKCj4gK3N0YXRpYyBMSVNU X0hFQUQoZnJtYnVmX2NoYW5fbGlzdCk7Cj4gK3N0YXRpYyBERUZJTkVfTVVURVgoZnJtYnVmX2No YW5fbGlzdF9sb2NrKTsKCndoeSBkbyB5b3UgbmVlZCB0aGVzZSBnbG9iYWxzPwoKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCB4aWxpbnhfZnJtYnVmX2Zvcm1hdF9kZXNjIHhpbGlueF9mcm1idWZfZm9y bWF0c1tdID0gewo+ICsJewo+ICsJCS5kdHNfbmFtZSA9ICJ4YmdyODg4OCIsCj4gKwkJLmlkID0g WElMSU5YX0ZSTUJVRl9GTVRfUkdCWDgsCj4gKwkJLmJwcCA9IDQsCj4gKwkJLm51bV9wbGFuZXMg PSAxLAo+ICsJCS5kcm1fZm10ID0gRFJNX0ZPUk1BVF9YQkdSODg4OCwKPiArCQkudjRsMl9mbXQg PSAwLAo+ICsJCS5mbXRfYml0bWFzayA9IEJJVCgwKSwKPiArCX0sCj4gKwl7Cj4gKwkJLmR0c19u YW1lID0gInVuc3VwcG9ydGVkIiwKPiArCQkuaWQgPSBYSUxJTlhfRlJNQlVGX0ZNVF9ZVVZYOCwK PiArCQkuYnBwID0gNCwKPiArCQkubnVtX3BsYW5lcyA9IDEsCj4gKwkJLmRybV9mbXQgPSAwLAo+ ICsJCS52NGwyX2ZtdCA9IDAsCj4gKwkJLmZtdF9iaXRtYXNrID0gQklUKDEpLAo+ICsJfSwKCmFt IG5vIERUIGV4cGVydCwgYnV0IHRoaXMgZG9lc24ndCBsb29rIHJpZ2h0IHRvIG1lLiBDYXJlIHRv IGV4cGxhaW4gd2hhdAp0aGlzIHN0cnVjdCBkb2VzPwoKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgeGlsaW54X2ZybWJ1Zl9vZl9pZHNbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUg PSAieGxueCxheGktZnJtYnVmLXdyLXYyIiwKPiArCQkuZGF0YSA9ICh2b2lkICopRE1BX0RFVl9U T19NRU19LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4aS1mcm1idWYtcmQtdjIiLAo+ICsJ CS5kYXRhID0gKHZvaWQgKilETUFfTUVNX1RPX0RFVn0sCgppcyB0aGUgZGlyZWN0aW9uIGEgaHcg cHJvcGVydHkgb3IgY29uZmlndXJhYmxlPwoKPiArc3RhdGljIGlubGluZSB2b2lkIGZybWJ1Zl93 cml0ZShzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuLCB1MzIgcmVnLAo+ICsJCQkJdTMy IHZhbHVlKQoKcmlnaHQganVzdGZpZWQgcGxzLCBoZXJlIGFuZCBvdGhlciBwbGFjZXMKCj4gK3sK PiArCWlvd3JpdGUzMih2YWx1ZSwgY2hhbi0+eGRldi0+cmVncyArIHJlZyk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBmcm1idWZfd3JpdGVxKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2No YW4gKmNoYW4sIHUzMiByZWcsCj4gKwkJCQkgdTY0IHZhbHVlKQo+ICt7Cj4gKwlpb3dyaXRlMzIo bG93ZXJfMzJfYml0cyh2YWx1ZSksIGNoYW4tPnhkZXYtPnJlZ3MgKyByZWcpOwo+ICsJaW93cml0 ZTMyKHVwcGVyXzMyX2JpdHModmFsdWUpLCBjaGFuLT54ZGV2LT5yZWdzICsgcmVnICsgNCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHdyaXRlcV9hZGRyKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2No YW4gKmNoYW4sIHUzMiByZWcsCj4gKwkJCWRtYV9hZGRyX3QgYWRkcikKPiArewo+ICsJZnJtYnVm X3dyaXRlcShjaGFuLCByZWcsICh1NjQpYWRkcik7Cgp3aHkgdGhlIGNhc3Q/CgoKPiArc3RhdGlj IHN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAqZnJtYnVmX2ZpbmRfZGV2KHN0cnVjdCBkbWFf Y2hhbiAqY2hhbikKPiArewo+ICsJc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqeGNoYW4sICp0 ZW1wOwo+ICsJc3RydWN0IHhpbGlueF9mcm1idWZfZGV2aWNlICp4ZGV2Owo+ICsJYm9vbCBpc19m cm1idWZfY2hhbiA9IGZhbHNlOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4Y2hh biwgdGVtcCwgJmZybWJ1Zl9jaGFuX2xpc3QsIGNoYW5fbm9kZSkgewo+ICsJCWlmIChjaGFuID09 ICZ4Y2hhbi0+Y29tbW9uKQo+ICsJCQlpc19mcm1idWZfY2hhbiA9IHRydWU7Cj4gKwl9Cj4gKwo+ ICsJaWYgKCFpc19mcm1idWZfY2hhbikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiAr Cj4gKwl4Y2hhbiA9IHRvX3hpbGlueF9jaGFuKGNoYW4pOwo+ICsJeGRldiA9IGNvbnRhaW5lcl9v Zih4Y2hhbiwgc3RydWN0IHhpbGlueF9mcm1idWZfZGV2aWNlLCBjaGFuKTsKPiArCj4gKwlyZXR1 cm4geGRldjsKCmhtbSB0aGlzIHNvdW5kcyBzdHJhbmdlIHRvIG1lLCBjYXJlIHRvIGV4cGxhaW4g dGhpcyBwbHM/Cgo+ICtzdGF0aWMgaW50IGZybWJ1Zl92ZXJpZnlfZm9ybWF0KHN0cnVjdCBkbWFf Y2hhbiAqY2hhbiwgdTMyIGZvdXJjYywgdTMyIHR5cGUpCj4gK3sKPiArCXN0cnVjdCB4aWxpbnhf ZnJtYnVmX2NoYW4gKnhpbF9jaGFuID0gdG9feGlsaW54X2NoYW4oY2hhbik7Cj4gKwl1MzIgaSwg c3ogPSBBUlJBWV9TSVpFKHhpbGlueF9mcm1idWZfZm9ybWF0cyk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IHN6OyBpKyspIHsKPiArCQlpZiAoKHR5cGUgPT0gWERNQV9EUk0gJiYKPiArCQkgICAg IGZvdXJjYyAhPSB4aWxpbnhfZnJtYnVmX2Zvcm1hdHNbaV0uZHJtX2ZtdCkgfHwKPiArCQkgICAo dHlwZSA9PSBYRE1BX1Y0TDIgJiYKPiArCQkgICAgZm91cmNjICE9IHhpbGlueF9mcm1idWZfZm9y bWF0c1tpXS52NGwyX2ZtdCkpCgp0aGlzIGlzIHZlcnkgaGFyZCB0byByZWFkLi4KCj4gK3N0YXRp YyB2b2lkIHhpbGlueF94ZG1hX3NldF9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIg Zm91cmNjLCB1MzIgdHlwZSkKPiArewo+ICsJc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqeGls X2NoYW47Cj4gKwlib29sIGZvdW5kX3hjaGFuID0gZmFsc2U7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CW11dGV4X2xvY2soJmZybWJ1Zl9jaGFuX2xpc3RfbG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHhpbF9jaGFuLCAmZnJtYnVmX2NoYW5fbGlzdCwgY2hhbl9ub2RlKSB7Cj4gKwkJaWYgKGNo YW4gPT0gJnhpbF9jaGFuLT5jb21tb24pIHsKPiArCQkJZm91bmRfeGNoYW4gPSB0cnVlOwo+ICsJ CQlicmVhazsKPiArCQl9Cj4gKwl9CgphZ2FpbiB0aGlzIHNlYWNoaW5nIGFuZCBhbSBub3Qgc3Vy ZSB3aHk/Cgo+ICt2b2lkIHhpbGlueF94ZG1hX2RybV9jb25maWcoc3RydWN0IGRtYV9jaGFuICpj aGFuLCB1MzIgZHJtX2ZvdXJjYykKPiArewo+ICsJeGlsaW54X3hkbWFfc2V0X2NvbmZpZyhjaGFu LCBkcm1fZm91cmNjLCBYRE1BX0RSTSk7Cj4gKwo+ICt9IEVYUE9SVF9TWU1CT0xfR1BMKHhpbGlu eF94ZG1hX2RybV9jb25maWcpOwoKZmlyc3QgRVhQT1JUX1NZTUJPTF9HUEwgc2hvdWxkIGJlIGlu IGRpZmZlcmVudCBsaW5lLCBzZWNvbmQgd2hhdCBpcyBiZWluZwpzZXQ/IHNvbWUgZG9jdW1lbnRh dGlvbiBmb3IgRVhQT1JUX1NZTUJPTHMgaXMgcmVxdWlyZWQuLgoKPiArCj4gK3ZvaWQgeGlsaW54 X3hkbWFfdjRsMl9jb25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgdjRsMl9mb3VyY2Mp Cj4gK3sKPiArCXhpbGlueF94ZG1hX3NldF9jb25maWcoY2hhbiwgdjRsMl9mb3VyY2MsIFhETUFf VjRMMik7Cj4gKwo+ICt9IEVYUE9SVF9TWU1CT0xfR1BMKHhpbGlueF94ZG1hX3Y0bDJfY29uZmln KTsKCmhlcmUgdG9vLi4KCj4gKwo+ICtpbnQgeGlsaW54X3hkbWFfZ2V0X2RybV92aWRfZm10cyhz dHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHUzMiAqZm10X2NudCwKPiArCQkJCSB1MzIgKipmbXRzKQo+ ICt7Cj4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7Cj4gKwo+ICsJeGRldiA9 IGZybWJ1Zl9maW5kX2RldihjaGFuKTsKPiArCj4gKwlpZiAoSVNfRVJSKHhkZXYpKQo+ICsJCXJl dHVybiBQVFJfRVJSKHhkZXYpOwo+ICsKPiArCSpmbXRfY250ID0geGRldi0+ZHJtX2ZtdF9jbnQ7 Cj4gKwkqZm10cyA9IHhkZXYtPmRybV9tZW1vcnlfZm10czsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MKHhpbGlueF94ZG1hX2dldF9kcm1fdmlkX2ZtdHMpOwoKYW5kIGhl cmUKCj4gKwo+ICtpbnQgeGlsaW54X3hkbWFfZ2V0X3Y0bDJfdmlkX2ZtdHMoc3RydWN0IGRtYV9j aGFuICpjaGFuLCB1MzIgKmZtdF9jbnQsCj4gKwkJCQkgIHUzMiAqKmZtdHMpCj4gK3sKPiArCXN0 cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAqeGRldjsKPiArCj4gKwl4ZGV2ID0gZnJtYnVmX2Zp bmRfZGV2KGNoYW4pOwo+ICsKPiArCWlmIChJU19FUlIoeGRldikpCj4gKwkJcmV0dXJuIFBUUl9F UlIoeGRldik7Cj4gKwo+ICsJKmZtdF9jbnQgPSB4ZGV2LT52NGwyX2ZtdF9jbnQ7Cj4gKwkqZm10 cyA9IHhkZXYtPnY0bDJfbWVtb3J5X2ZtdHM7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTCh4aWxpbnhfeGRtYV9nZXRfdjRsMl92aWRfZm10cyk7CgphbmQgdGhpcwoKPiAr LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRvIHlvdSBtaW5kIGdldHRpbmcgcmlkIG9mIHRoZXNl LCBhdCBiZXN0IHRoZXkgYXJlIGRpc3RyYWN0aW9uCgo+ICtzdGF0aWMgc3RydWN0IHhpbGlueF9m cm1idWZfdHhfZGVzY3JpcHRvciAqCj4gK3hpbGlueF9mcm1idWZfYWxsb2NfdHhfZGVzY3JpcHRv cihzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuKQo+ICt7Cj4gKwlzdHJ1Y3QgeGlsaW54 X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNjOwo+ICsKPiArCWRlc2MgPSBremFsbG9jKHNpemVv ZigqZGVzYyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFkZXNjKQo+ICsJCXJldHVybiBOVUxMOwoK dGhpcyBjYW4gYmUgc2tpcHBlZCBoZXJlIQoKPiArc3RhdGljIHZvaWQgeGlsaW54X2ZybWJ1Zl9m cmVlX2Rlc2NyaXB0b3JzKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gKmNoYW4pCj4gK3sKPiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxv Y2ssIGZsYWdzKTsKPiArCj4gKwl4aWxpbnhfZnJtYnVmX2ZyZWVfZGVzY19saXN0KGNoYW4sICZj aGFuLT5wZW5kaW5nX2xpc3QpOwo+ICsJeGlsaW54X2ZybWJ1Zl9mcmVlX2Rlc2NfbGlzdChjaGFu LCAmY2hhbi0+ZG9uZV9saXN0KTsKPiArCWtmcmVlKGNoYW4tPmFjdGl2ZV9kZXNjKTsKPiArCWtm cmVlKGNoYW4tPnN0YWdlZF9kZXNjKTsKPiArCj4gKwljaGFuLT5zdGFnZWRfZGVzYyA9IE5VTEw7 Cj4gKwljaGFuLT5hY3RpdmVfZGVzYyA9IE5VTEw7Cj4gKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+ cGVuZGluZ19saXN0KTsKPiArCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5kb25lX2xpc3QpOwoKaW5p dGlhbGl6aW5nIGxpc3RzIGluIGZyZWU/Cgo+ICtzdGF0aWMgaW50IHhpbGlueF9mcm1idWZfYWxs b2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpkY2hhbikKPiArewo+ICsJZG1hX2Nv b2tpZV9pbml0KGRjaGFuKTsKCnRoaXMgY2FuIGJlIGRvbmUgaW4geW91ciBwcm9iZSBhbmQgbm90 IG9uIGFsbG9jLi4gYW5kIGNvbnNlcXVlbnRseSB5b3UgY2FuCmdldCByaWQgb2YgYWxsb2MuLgoK PiArc3RhdGljIGVudW0gZG1hX3N0YXR1cyB4aWxpbnhfZnJtYnVmX3R4X3N0YXR1cyhzdHJ1Y3Qg ZG1hX2NoYW4gKmRjaGFuLAo+ICsJCQkJCSAgICAgICBkbWFfY29va2llX3QgY29va2llLAo+ICsJ CQkJCSAgICAgICBzdHJ1Y3QgZG1hX3R4X3N0YXRlICp0eHN0YXRlKQo+ICt7Cj4gKwlyZXR1cm4g ZG1hX2Nvb2tpZV9zdGF0dXMoZGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CgpubyByZXNpZHVlIGNh bG4/Cgo+ICtzdGF0aWMgaW50IHhpbGlueF9mcm1idWZfY2hhbl9wcm9iZShzdHJ1Y3QgeGlsaW54 X2ZybWJ1Zl9kZXZpY2UgKnhkZXYsCj4gKwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpub2Rl KQo+ICt7Cj4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuOwo+ICsJaW50IGVycjsK PiArCXUzMiBkbWFfYWRkcl9zaXplOwo+ICsKPiArCWNoYW4gPSAmeGRldi0+Y2hhbjsKPiArCj4g KwljaGFuLT5kZXYgPSB4ZGV2LT5kZXY7Cj4gKwljaGFuLT54ZGV2ID0geGRldjsKPiArCWNoYW4t PmlkbGUgPSB0cnVlOwo+ICsKPiArCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ4 bG54LGRtYS1hZGRyLXdpZHRoIiwKCndoeSBub3QgZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyCgo+ ICtzdGF0aWMgaW50IHhpbGlueF9mcm1idWZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGRldi0+ZGV2Lm9mX25v ZGU7Cj4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7Cj4gKwlzdHJ1Y3QgcmVz b3VyY2UgKmlvOwo+ICsJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRtYV9kaXI7Cj4gKwlj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKPiArCWludCBlcnI7Cj4gKwl1MzIgaSwg ajsKPiArCWludCBod192aWRfZm10X2NudDsKPiArCWNvbnN0IGNoYXIgKnZpZF9mbXRzW0FSUkFZ X1NJWkUoeGlsaW54X2ZybWJ1Zl9mb3JtYXRzKV07CgppbnZlcnRlZCB4LW1hcyB0cmVlIGhlbHBz IGluIHJlYWRhYmxpdHkKCj4gKwlJTklUX0xJU1RfSEVBRCgmeGRldi0+Y29tbW9uLmNoYW5uZWxz KTsKPiArCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgeGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKCndo eSBzbGF2ZSBhbmQgd2h5IG5vdCBETUFfSU5URVJMRUFWRT8KCj4gKwlkbWFfY2FwX3NldChETUFf UFJJVkFURSwgeGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKPiArCj4gKwkvKiBJbml0aWFsaXplIHRo ZSBjaGFubmVscyAqLwo+ICsJZXJyID0geGlsaW54X2ZybWJ1Zl9jaGFuX3Byb2JlKHhkZXYsIG5v ZGUpOwo+ICsJaWYgKGVyciA8IDApCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl4ZGV2LT5jaGFu LmRpcmVjdGlvbiA9IGRtYV9kaXI7Cj4gKwo+ICsJaWYgKHhkZXYtPmNoYW4uZGlyZWN0aW9uID09 IERNQV9ERVZfVE9fTUVNKSB7Cj4gKwkJeGRldi0+Y29tbW9uLmRpcmVjdGlvbnMgPSBCSVQoRE1B X0RFVl9UT19NRU0pOwo+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJYaWxpbnggQVhJIGZybWJ1 ZiBETUFfREVWX1RPX01FTVxuIik7Cj4gKwl9IGVsc2UgaWYgKHhkZXYtPmNoYW4uZGlyZWN0aW9u ID09IERNQV9NRU1fVE9fREVWKSB7Cj4gKwkJeGRldi0+Y29tbW9uLmRpcmVjdGlvbnMgPSBCSVQo RE1BX01FTV9UT19ERVYpOwo+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJYaWxpbnggQVhJIGZy bWJ1ZiBETUFfTUVNX1RPX0RFVlxuIik7Cj4gKwl9IGVsc2Ugewo+ICsJCXhpbGlueF9mcm1idWZf Y2hhbl9yZW1vdmUoJnhkZXYtPmNoYW4pOwoKd2h5IG5vdCBkbyB0aGUgY2hlY2tzIGZpcnN0IQoK PiArTU9EVUxFX0FVVEhPUigiWGlsaW54LCBJbmMuIik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigi WGlsaW54IEZyYW1lYnVmZmVyIGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 CgpubyBNT0RVTEVfQUxJQVMsIGhvdyBkaWQgeW91IHRlc3QgdGhpcz8KCj4gKyNpZiBJU19FTkFC TEVEKENPTkZJR19YSUxJTlhfRlJNQlVGKQo+ICsvKioKPiArICogeGlsaW54X3hkbWFfZHJtX2Nv bmZpZyAtIGNvbmZpZ3VyZSB2aWRlbyBmb3JtYXQgaW4gdmlkZW8gYXdhcmUgRE1BCj4gKyAqIEBj aGFuOiBkbWEgY2hhbm5lbCBpbnN0YW5jZQo+ICsgKiBAZHJtX2ZvdXJjYzogRFJNIGZvdXJjYyBj b2RlIGRlc2NyaWJpbmcgdGhlIG1lbW9yeSBsYXlvdXQgb2YgdmlkZW8gZGF0YQo+ICsgKgo+ICsg KiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB3aGVuIHV0aWxpemluZyAidmlkZW8gZm9ybWF0IGF3YXJl IiBYaWxpbnggRE1BIElQCj4gKyAqIChzdWNoIGFzIFZpZGVvIEZyYW1lYnVmZmVyIFJlYWQgb3Ig VmlkZW8gRnJhbWVidWZmZXIgV3JpdGUpLiAgVGhpcyBjYWxsCj4gKyAqIG11c3QgYmUgbWFkZSBw cmlvciB0byBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZygpIHRvIGVuc3RhYmxpc2ggdGhlIHZpZGVv Cj4gKyAqIGRhdGEgbWVtb3J5IGZvcm1hdCB3aXRoaW4gdGhlIGhhcmR3YXJlIERNQS4KPiArICov CgpwbHMgbW92ZSB0aGlzIHRvIHNyYy4uCg==