From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alyssa Rosenzweig Subject: Re: [RFC PATCH] drm/panfrost: Add initial panfrost driver Date: Thu, 7 Mar 2019 21:00:41 -0800 Message-ID: <20190308050041.GC10814@rosenzweig.io> References: <20190308002408.32682-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from rosenzweig.io (rosenzweig.io [107.170.207.86]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9ECB16E268 for ; Fri, 8 Mar 2019 05:00:42 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190308002408.32682-1-robh@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring Cc: Tomeu Vizoso , Maxime Ripard , dri-devel@lists.freedesktop.org, David Airlie , "Marty E. Plummer" , Sean Paul List-Id: dri-devel@lists.freedesktop.org T2ggbXkgb25pb25zLCBpdCdzIHJlYWxseSBoZXJlISBJdCdzIHJlYWxseSBjb21pbmchIEl0J3Mg cmVhbGx5IGhlcmUhCgotLS0tCgo+ICsJICBEUk0gZHJpdmVyIGZvciBBUk0gTWFsaSBNaWRnYXJk ICh0Nnh4LCB0N3h4LCB0OHh4KSBhbmQKPiArCSAgQmlmcm9zdCAoRzN4LCBHNXgsIEc3eCkgR1BV cy4KCk5pdHBpY2s6IHRoZSBtb2RlbCBuYW1lcyBzaG91bGQgbWF5YmUgYmUgY2FwaXRhbGl6ZWQ/ IE9yIGF0IGxlYXN0LCB0aGUKVC9HIHNob3VsZCBiZSBjb25zaXN0ZW50PyBJJ20gbm90IHN1cmUg d2hhdCB0aGUgdmVuZG9yIG1hcmtldGluZyBuYW1lcwphcmUgZXhhY3RseS4KCj4gKwl1bnNpZ25l ZCBsb25nIGJhc2VfaHdfZmVhdHVyZXNbNjQgLyBCSVRTX1BFUl9MT05HXTsKPiArCXVuc2lnbmVk IGxvbmcgaHdfaXNzdWVzWzY0IC8gQklUU19QRVJfTE9OR107CgpUaGlzIGlzIGNvbmZ1c2luZy4u Lj8gSXMgdGhlIGlkZWEgdG8gYWx3YXlzIGhhdmUgdTY0LCByZWdhcmRsZXNzIG9mCjMyLzY0LWJp dG5lc3M/IElmIHNvLCB3aHkgbm90IGp1c3QgdTY0PyBJJ20gbm90IHRvdGFsbHkgc3VyZSB3aHkg dGhlc2UKYXJlbid0IGp1c3QgYml0bWFza3MsIGlmIHdlIGFyZSBjYXBwaW5nIHRvIDY0IGZvciBl YWNoLiBPbiB0aGUgb3RoZXIKaGFuZCwgdGhlcmUgYXJlIGEgbG90IG1vcmUgdGhhbiBpc3N1ZXMg ZXhwb3NlZCBieSB0aGUga2Jhc2UsIHRob3VnaCB0aGUKdmFzdCBtYWpvcml0eSBkb24ndCBhcHBs eSB0byBrZXJuZWwgc3BhY2UgKGFuZCBzaG91bGQgYmUgc29ydGVkIGFzIGEKcHVyZWx5IHVzZXJz cGFjZSBhZmZhaXIpLi4/CgpBbHNvLCBuaXRwaWNrOiBzL2Jhc2VfaHdfZmVhdHVyZXMvaHdfZmVh dHVyZXMvZywgZm9yIGNvbnNpc3RlbmN5IGFuZCBub3QKaW5oZXJpdGluZyBuYW1pbmcgY3J1ZnQu Cgo+ICsJc3RydWN0IHBhbmZyb3N0X2pvYiAqam9ic1szXTsKCjMgaXMgYSBiaXQgb2YgYSBtYWdp YyBudW1iZXIsIGl0IGZlZWxzIGxpa2UuIEknbSBndWVzc2luZyB0aGlzCmNvcnJlc3BvbmRzIHRv IGpvYiBzbG90cyBKUzAvSlMxL0pTMj8gSWYgc28sIEkgZ3Vlc3MganVzdCBhZGQgYSBxdWljawpj b21tZW50IGFib3V0IHRoYXQsIHNpbmNlIG90aGVyd2lzZSBpdCBmZWVscyBhIGxpdHRsZSByYW5k b20uCgooTWF5YmUgSSdtIGJpYXNlZCBiZWNhdXNlIGBzdHJ1Y3QgcGFuZnJvc3Rfam9iYCBtZWFu cyBzb21ldGhpbmcgdG90YWxseQpkaWZmZXJlbnQgaW4gdXNlcnNwYWNlIGZvciBtZS4uLikKCj4g Ky8qIERSTV9BVVRIIGlzIHJlcXVpcmVkIG9uIFNVQk1JVCBmb3Igbm93LCB3aGlsZSBhbGwgY2xp ZW50cyBzaGFyZSBhIHNpbmdsZQo+ICsgKiBhZGRyZXNzIHNwYWNlLiAgTm90ZSB0aGF0IHJlbmRl ciBub2RlcyB3b3VsZCBiZSBhYmxlIHRvIHN1Ym1pdCBqb2JzIHRoYXQKPiArICogY291bGQgYWNj ZXNzIEJPcyBmcm9tIGNsaWVudHMgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBtYXN0ZXIgbm9kZS4K PiArICovCgpUaGlzIGNvbmNlcm5zIG1lLiBQZXItcHJvY2VzcyBhZGRyZXNzIHNwYWNlcyAoY29u ZmlndXJlZCBuYXRpdmVseSBpbiB0aGUKTU1VKSBpcyBlc3NlbnRpYWwgZnJvbSBib3RoIHNlY3Vy aXR5IGFuZCBzdGFiaWxpdHkgc3RhbmRwb2ludHMuIChJdCdzCnBvc3NpYmxlIEknbSBtaXN1bmRl cnN0YW5kaW5nIHdoYXQgRFJNX0FVVEggbWVhbnMgaW4gdGhpcyBjb250ZXh0OyB0aGlzCmlzIG1v cmUgcmVzcG9uZGluZyB0byAic2hhcmUgYSBzaW5nbGUgYWRkcmVzcyBzcGFjZSIpLgoKPiArCWRy bV9tbV9pbml0KCZwZmRldi0+bW0sIDAsIFNaXzRHKTsgLy8gNEcgZW5vdWdoIGZvciBub3cuIGNh biBiZSA0OC1iaXQKCldoYXQncyB0aGUgcmF0aW9uYWxlIGZvciBwaWNraW5nIDRHICh3aGVuIHRo ZSB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaXMKNjQtYml0LCBwaHlzaWNhbCBpcyA0OC1iaXQpPyBF YXNpZXIgcG9ydGFiaWxpdHkgdG8gMzItYml0IGZvcgpzaW1wbGljaXR5LCBvciBzb21ldGhpbmcg ZWxzZT8KCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR0X21hdGNoW10gPSB7 Cj4gKwl7IC5jb21wYXRpYmxlID0gImFybSxtYWxpLXQ3NjAiIH0sCj4gKwl7IC5jb21wYXRpYmxl ID0gImFybSxtYWxpLXQ4NjAiIH0sCj4gKwl7fQo+ICt9OwoKRG8gd2Ugd2FudCB0byBhZGQgY29t cGF0aWJsZXMgZm9yIHRoZSByZXN0IG9mIHRoZSBNYWxpJ3Mgb24gdGhlIGluaXRpYWwKbWVyZ2Us IG9yIHdhaXQgdW50aWwgdGhleSdyZSBhY3R1YWxseSBjb25maXJtZWQgd29ya2luZyBzbyB3ZSBk b24ndCBsb2FkCmFuZCBjYXVzZSBwcm9ibGVtcyBvbiB1bnRlc3RlZCBoYXJkd2FyZT8KCj4gK2Vu dW0gYmFzZV9od19mZWF0dXJlIHsKCS4uLgo+ICsJSFdfRkVBVFVSRV9QUk9URUNURURfTU9ERQoJ Li4uCj4gK307CgoxKSBJIGtub3cgdGhlc2UgbmFtZXMgYXJlIGluaGVyaXRlZCBmcm9tIGtiYXNl LCBidXQgbWlnaHQgd2UgcHJlZmVyCnBhbmZyb3N0LXByZWZpeGVkIG5hbWVzIGZvciBjb25zaXN0 ZW5jeT8KCjIpIEkgcmVjYWxsIGRpc2N1c3NpbmcgdGhpcyBhIGJpdCBvdmVyIElSQywgYnV0IG1v c3Qgb2YgdGhlc2UgcHJvcGVydGllcwphcmUgb2YgbW9yZSB1c2UgdG8gdXNlcnNwYWNlIHRoYW4g a2VybmVsc3BhY2UuIERvZXMgaXQgbWFrZSBzZW5zZSB0bwprZWVwIHRoZSBmZWF0dXJlIGxpc3Qg aGVyZSByYXRoZXIgdGhhbiBqdXN0IGluIE1lc2EsIGJlYXJpbmcgaW4gbWluZApNZXNhIHVwZ3Jh ZGVzIGFyZSBlYXNpZXIgdGhhbiBrZXJuZWwgdXBncmFkZXM/IChJIHRoaW5rIHlvdSBtYXkgaGF2 ZQpiZWVuIHRoZSBvbmUgdG8gYnJpbmcgdXAgdGhpcyBmYWN0LCBidXQgaG9waW5nIGl0IGRvZXNu J3QgZ2V0IGxvc3Qgb3ZlcgpJUkMpLgoKMykgT24gYSBtYXR0ZXIgb2YgcHJpbmNpcGxlLCBJIGRv bid0IGxpa2Ugd2FzdGluZyBhIGJpdCBvbgpEaWdpdGFsIFJhaW5ib3cgTWFuYWdlbWVudCAoZXNw ZWNpYWxseSB3aGVuIGl0J3Mgbm90IHNvbWV0aGluZyB3ZSdyZQpyZWFsaXN0aWNhbGx5IGdvaW5n IHRvIGltcGxlbWVudCBmb3IgbnVtZXJvdXMgcmVhc29ucy4uLikKCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2dwdS5jCj4gQEAgLTAsMCArMSw0NjQgQEAKPiArLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyogQ29weXJpZ2h0IDIwMTggTWFy dHkgRS4gUGx1bW1lciA8aGFuZXR6ZXJAc3RhcnRtYWlsLmNvbT4gKi8KPiArLyogQ29weXJpZ2h0 IDIwMTkgTGluYXJvLCBMdGQuLCBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPiAqLwo+ICsv KiBDb3B5cmlnaHQgMjAxOSBDb2xsYWJvcmEgbHRkLiAqLwoKR2l2ZW4gdGhlIHJlZ2lzdGVyIGRl ZmluaXRpb25zIGFyZSBoZXJlIChpbmNsdWRpbmcgdGhlIGNvbW1lbnRzIGZyb20Ka2Jhc2UgLS0g aWYgd2Ugc3RyaXAgdGhvc2UsIGl0IG1pZ2h0IGJlIGEgZGlmZmVyZW50IHN0b3J5KSwgaXQgbWln aHQgYmUKc2FmZXIgdG8gYWRkIGEgdmVuZG9yIGNvcHlyaWdodCBoZXJlIHRvby4KCkFsdGVybmF0 aXZlbHksIG1heWJlIHRoZSByZWdpc3RlcnMgc2hvdWxkIGJlIGluIHRoZWlyIG93biBmaWxlIGFu eXdheS4gSQprbm93IHRoZXkgd2VyZSBleHBsaWNpdGx5IG1vdmVkIGlud2FyZCBlYXJsaWVyLCBi dXQgY29uY2VwdHVhbGx5IEkgZG9uJ3QKc2VlIHdoeSB0aGF0J3MgcHJlZmVyYWJsZSB0byBhIGNl bnRyYWxpemVkIHBhbmZyb3N0X3JlZ3MuaCBmaWxlPwpDb3B5cmlnaHQvb3JpZ2luIGlzIG1vcmUg dHJhbnNwYXJlbnQgdGhhdCB3YXkgdG9vLgoKPiArCWZvciAodGltZW91dCA9IDUwMDsgdGltZW91 dCA+IDA7IHRpbWVvdXQtLSkgewoKNTAwIHNlZW1zIGEgbGl0dGxlIGFyYml0cmFyeS4uLj8KCj4g KwkvLyBOZWVkIG1vcmUgdmVyc2lvbiBkZXRlY3Rpb24KPiArCWlmIChwZmRldi0+ZmVhdHVyZXMu aWQgPT0gMHgwODYwKSB7CgpTZWNvbmRlZCwgeW91IGhhdmUgdGhlIEdQVV9NT0RFTHMganVzdCBi ZWxvdy4uLj8KCj4gKwkJZm9yIChpID0gMDsgaSA8IE1BWF9IV19SRVZTOyBpKyspIHsKPiArCQkJ aWYgKChtb2RlbC0+cmV2c1tpXS5yZXZpc2lvbiAhPSByZXYpICYmCj4gKwkJCSAgICAobW9kZWwt PnJldnNbaV0ucmV2aXNpb24gIT0gKHJldiAmIH4weGYpKSkKPiArCQkJCWNvbnRpbnVlOwo+ICsJ CQlod19pc3N1ZXMgfD0gbW9kZWwtPnJldnNbaV0uaXNzdWVzOwo+ICsJCQlicmVhazsKPiArCQl9 CgpOaXRwaWNrOiBUaGUgY29udHJvbCBmbG93IGxvZ2ljIHNlZW1zIGEgbGl0dGxlIG92ZXJjb21w bGljYXRlZCBoZXJlLgoKPiArCW1zbGVlcCgxMCk7CgpXaGF0IGtpbmQgb2YgcmFjZSBjb25kaXRp b24gYXJlIHdlIHdvcmtpbmcgYXJvdW5kIGhlcmU/IDspCgo+ICt2b2lkIHBhbmZyb3N0X2dwdV9m aW5pKHN0cnVjdCBwYW5mcm9zdF9kZXZpY2UgKnBmZGV2KQo+ICt7Cj4gKwo+ICt9CgpBbnl0aGlu ZyB0aGF0IGhhcyB0byBoYXBwZW4gaGVyZT8gSWYgbm8sIGFkZCBhIGNvbW1lbnQgaW4gdGhlIGJv ZHkKc2F5aW5nIHRoYXQuIElmIHllcywgd2VsbCwgdGhhdCAob3IgYXQgbGVhc3QgLyogc3R1YiAq LykuLi4KCj4gKy8qCj4gKyAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBpc3N1ZXMs IGJ1dCBvbmx5IHRoZSBvbmVzIHRoZSBkcml2ZXIgbmVlZHMKPiArICogdG8gY2FyZSBhYm91dC4K PiArICovCj4gK2VudW0gYmFzZV9od19pc3N1ZSB7Cj4gKwlIV19JU1NVRV82MzY3LAoKU2ltaWxh ciBuaXRwaWNrcyBhcyB3aXRoIHRoZSBmZWF0dXJlIGxpc3QuIEkgd2lsbCBzYXksIHRoaXMgaXMK X2luY3JlZGlibHkgb3BhcXVlXy4gSSByZWFsaXplIHRoZSB2ZW5kb3IgZHJpdmVyIGlzIF9pbnRl bnRpb25hbGx5XwpvcGFxdWUgaGVyZSwgYnV0IHRoYXQgZG9lc24ndCBtYWtlIHRoaXMgYW55IGVh c2llciB0byBmb2xsb3cgOykKClRoZSBnb29kIG5ld3MgaXMgdGhhdCBvbGRlciB2ZW5kb3IgZHJp dmVyIHJlbGVhc2VzIChmb3IgVDc2MCBhbmQKZWFybGllcj8pIGhhZCBjb21tZW50cyBkb2N1bWVu dGluZyB3aGF0IGFsbCB0aGUgZXJyYXRhIHdlcmUsIHNvIHRoZSB2YXN0Cm1ham9yaXR5IG9mIHRo ZXNlIHdlIGRvIGhhdmUgZG9jdW1lbnRhdGlvbiBvbi4gUGx1cywgaWYgdGhlc2UgYXJlIGp1c3QK dGhlIGlzc3VlcyB0aGUgX2tlcm5lbF8gZHJpdmVyIGNhcmVzIGFib3V0LCB3ZSBoYXZlIGRvY3Vt ZW50YXRpb24gZm9yCnRoYXQgZ2l2ZW4gdGhlIGhhc19pc3N1ZSBjYWxscyBhY3Jvc3Mga2Jhc2Uu IFJlZ2FyZGxlc3MsIHNvbWV0aGluZyBtb3JlCnRyYW5zcGFyZW50IHRoYW4gYW4gdW5jb21tZW50 ZWQgbnVtYmVyIG1pZ2h0IGJlIG5pY2UuCgo+ICsJR1BVQ09SRV8xNjE5LAoKV2hhdCdzIGEgR1BV Q09SRSBhbmQgd2hhdCB3YXMga2Jhc2UgdGhpbmtpbmcuLi4/IDspCgo+ICsjZW5kaWYgLyogX0hX Q09ORklHX0lTU1VFU19IXyAqLwoKcy9fSFdDT05GSUdfSVNTVUVTX0gvX19QQU5GUk9TVF9JU1NV RVNfSF8vCgo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKiBDb3B5 cmlnaHQgMjAxOSBMaW5hcm8sIEx0ZCwgUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4gKi8K PiArLyogQ29weXJpZ2h0IDIwMTkgQ29sbGFib3JhIGx0ZC4gKi8KClNlZSByZWdpc3RlciBjb25j ZXJucyBhZ2Fpbi4KCj4gK3N0YXRpYyBpbnQgcGFuZnJvc3Rfam9iX2dldF9zbG90KHN0cnVjdCBw YW5mcm9zdF9qb2IgKmpvYikKCkl0IG1pZ2h0IGhlbHAgdG8gaGF2ZSBhIHF1aWNrIGNvbW1lbnQg ZXhwbGFpbmluZyB3aGF0IEpTMC9KUzEvSlMyIGFyZSB0bwpyZWZyZXNoIHRoZSByZWFkZXIncyAo YW5kIGV2ZW50dWFsbHkgeW91cikgbWVtb3J5LiBKdXN0IGEgc2ltcGxlLCB5b3UKa25vdzoKCi8q IEpTMDogZnJhZ21lbnQgam9icy4KICogSlMxOiB2ZXJ0ZXgvdGlsZXIgam9icwogKiBKUzI6IGNv bXB1dGUgam9icwogKi8KCj4gKyNpZiAwCj4gKy8vIElnbm9yZSBjb21wdXRlIGZvciBub3cKCk1h eWJlIGRvbid0IGlnbm9yZSBjb21wdXRlIGlmIGl0J3MganVzdCB0aGlzIGxpdHRsZSByb3V0aW5l PyA6KQoKPiArCQlpZiAoa2Jhc2VfaHdfaGFzX2lzc3VlKGtiZGV2LCBCQVNFX0hXX0lTU1VFXzg5 ODcpKQo+ICsJCQlyZXR1cm4gMjsKCkl0IGxvb2tzIGxpa2UgODk4NyBvbmx5IGFwcGxpZXMgdG8g dGhlIHZlcnkgZWFybGllc3QgZGV2IG1vZGVscyAoYmFzZWQKb24gdGhlIGlzc3VlcyBsaXN0KSBz byB3ZSBzaG91bGRuJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGlzLgp0NjAwX3IwcDBfMTVkZXYw IGNhbiBwcm9iYWJseSBiZSBzYWZlbHkgaWdub3JlZCBlbnRpcmVseSAoYW5kIGRlbGV0ZWQKZnJv bSB0aGUgaXNzdWVzL2ZlYXR1cmVzL21vZGVscyBsaXN0LCBmcmFua2x5KS4gSSBkb3VidCB0aGF0 IG1vZGVsIGlzCmV2ZW4gcHVibGljbHkgYXZhaWxhYmxlLi4uCgo+ICtzdGF0aWMgdm9pZCBwYW5m cm9zdF9qb2Jfd3JpdGVfYWZmaW5pdHkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYsCgpX aGF0J3MgYWZmaW5pdHk/IDopCgo+ICsJCXVkZWxheSgxMDApOwoKKEFyYml0cmFyeT8pCgo+ICsj aWYgMAo+ICsJaWYgKGtiYXNlX2h3X2hhc19pc3N1ZShrYmRldiwgQkFTRV9IV19JU1NVRV8xMDY0 OSkpCj4gKwkJY2ZnIHw9IEpTX0NPTkZJR19TVEFSVF9NTVU7CgpUaGlzIGlzc3VlIHNlZW1zIHRv IGFwcGx5IHRvIGEgbG90IG9mIEdQVXMgd2UgKmRvKiBjYXJlIGFib3V0OyBiZXR0ZXIKaGFuZGxl IHRoaXMuCgo+ICsKPiArCWlmIChwYW5mcm9zdF9oYXNfaHdfZmVhdHVyZShrYmRldiwKPiArCQkJ CUJBU0VfSFdfRkVBVFVSRV9KT0JDSEFJTl9ESVNBTUJJR1VBVElPTikpIHsKPiArCQlpZiAoIWti ZGV2LT5od2FjY2Vzcy5iYWNrZW5kLnNsb3RfcmJbanNdLmpvYl9jaGFpbl9mbGFnKSB7Cj4gKwkJ CWNmZyB8PSBKU19DT05GSUdfSk9CX0NIQUlOX0ZMQUc7Cj4gKwkJCWthdG9tLT5hdG9tX2ZsYWdz IHw9IEtCQVNFX0tBVE9NX0ZMQUdTX0pPQkNIQUlOOwo+ICsJCQlrYmRldi0+aHdhY2Nlc3MuYmFj a2VuZC5zbG90X3JiW2pzXS5qb2JfY2hhaW5fZmxhZyA9Cj4gKwkJCQkJCQkJdHJ1ZTsKPiArCQl9 IGVsc2Ugewo+ICsJCQlrYXRvbS0+YXRvbV9mbGFncyAmPSB+S0JBU0VfS0FUT01fRkxBR1NfSk9C Q0hBSU47Cj4gKwkJCWtiZGV2LT5od2FjY2Vzcy5iYWNrZW5kLnNsb3RfcmJbanNdLmpvYl9jaGFp bl9mbGFnID0KPiArCQkJCQkJCQlmYWxzZTsKPiArCQl9Cj4gKwl9CgpXaGF0IGRvZXMgdGhpcyBj b2RlIGRvIC8gd2h5IGlzIGl0IGlmIDAnZD8KCj4gKwlmb3IgKGkgPSAwOyBpIDwgYm9fY291bnQ7 IGkrKykKPiArCQkvKiBYWFg6IFVzZSBzaGFyZWQgZmVuY2VzIGZvciByZWFkLW9ubHkgb2JqZWN0 cy4gKi8KPiArCQlyZXNlcnZhdGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UoYm9zW2ldLT5yZXN2 LCBmZW5jZSk7CgpJIG1pZ2h0IGJlIHBhcmFub2lkLCBidXQgMiBsaW5lcyBtZWFucyBicmFjZXMg OikKCj4gKwlmb3IgKGkgPSAwOyBpIDwgam9iLT5ib19jb3VudDsgaSsrKQo+ICsJCWRybV9nZW1f b2JqZWN0X3B1dF91bmxvY2tlZChqb2ItPmJvc1tpXSk7Cj4gKwlrdmZyZWUoam9iLT5ib3MpOwo+ ICsKPiArCWtmcmVlKGpvYik7CgpOaXRwaWNrOiBtb3ZlIHRoZSBibGFuayBzcGFjZSB1cCBhIGxp bmUuCgo+ICsJaWYgKGpvYl9yZWFkKHBmZGV2LCBKU19TVEFUVVMoanMpKSA9PSA4KSB7CgpXaGF0 IGRvZXMgOCBtZWFuPwoKPiArLy8JCWRldl9lcnIocGZkZXYtPmRldiwgInJlc2V0aW5nIGdwdSIp Owo+ICsvLwkJcGFuZnJvc3RfZ3B1X3Jlc2V0KHBmZGV2KTsKPiArCX0KPiArCj4gKwkvKiBGb3Ig bm93LCBqdXN0IHNheSB3ZSdyZSBkb25lLiBObyByZXNldCBhbmQgcmV0cnkuICovCj4gKy8vCWpv Yl93cml0ZShwZmRldiwgSlNfQ09NTUFORChqcyksIEpTX0NPTU1BTkRfSEFSRF9TVE9QKTsKPiAr CWRtYV9mZW5jZV9zaWduYWwoam9iLT5kb25lX2ZlbmNlKTsKClRoYXQncyBwcm9iYWJseSByZWFz b25hYmxlLCBhdCBsZWFzdCBmb3Igbm93LiBJZiBvdXIgam9iIGZhdWx0cyB3ZSBoYXZlCmJpZ2dl ciBpc3N1ZXMgLyByZXRyeWluZyBpcyBwcm9iYWJseSBmdXRpbGUuIFRoYXQgc2FpZCwgaWYgd2Un cmUgbm90CnJlc2V0dGluZyBpcyB0aGVyZSBhIHJpc2sgb2YgbG9jay11cHM/Cgo+ICsJCS8qIE5v bi1GYXVsdCBTdGF0dXMgY29kZSAqLwo+ICsJCS8qIEpvYiBleGNlcHRpb25zICovCgpJIHRoaW5r IHRoZSAiRkFVTFQiIHN1ZmZpeCBpbXBsaWVzIHRoYXQgbG91ZGx5IGVub3VnaCA6KQoKPiArCWpv Yl93cml0ZShwZmRldiwgSk9CX0lOVF9DTEVBUiwgMHg3MDAwNyk7Cj4gKwlqb2Jfd3JpdGUocGZk ZXYsIEpPQl9JTlRfTUFTSywgMHg3MDAwNyk7CgpNZWFuaW5nIG9mIHRoZSBtYWdpYyBudW1iZXJz Li4uPwoKPiArI2RlZmluZSBOVU1fSk9CX1NMT1RTCTIJLyogRG9uJ3QgbmVlZCAzcmQgb25lIHVu dGlsIHdlIGhhdmUgY29tcHV0ZSBzdXBwb3J0ICovCgpTdXJlLCBidXQgdGhlcmUgX2FyZV8gMyBz bG90cyBpbiB0aGUgaGFyZHdhcmU7IHRoZXJlJ3Mgbm8gbmVlZCB0byBsaWUKYWJvdXQgdGhhdCBl dmVuIGlmIHdlIGRvbid0IHByZXNlbnRseSBzY2hlZHVsZSBhbnl0aGluZyB0aGVyZT8KCj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wCj4gKy8qIENvcHlyaWdodCAyMDE5IExp bmFybywgTHRkLCBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPiAqLwoKKExpa2V3aXNlLCBy ZWdpc3RlciBjb3B5cmlnaHQpLgoKPiArLy8JaWYgKGtiZGV2LT5zeXN0ZW1fY29oZXJlbmN5ID09 IENPSEVSRU5DWV9BQ0UpCj4gKy8vCQljdXJyZW50X3NldHVwLT50cmFuc3RhYiB8PSBBU19UUkFO U1RBQl9MUEFFX1NIQVJFX09VVEVSOwoKQndhcD8KCj4gKwkvL3N0cnVjdCBwYW5mcm9zdF9kZXZp Y2UgKnBmZGV2ID0gY29va2llOwo+ICsJLy8gV2FpdCAxMDAwIEdQVSBjeWNsZXMhPwoKPyEKPiAr CQlpZiAocGFuZnJvc3RfaGFzX2h3X2ZlYXR1cmUocGZkZXYsIEhXX0ZFQVRVUkVfQUFSQ0g2NF9N TVUpKQo+ICsJCQlyZXR1cm4gIkFUT01JQyI7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gIlVOS05P V04iOwoKRG9lcyBpdCByZWFsbHkgbWFrZSBzZW5zZSB0byBjaGVjayBmb3IgdGhlIGZlYXR1cmUg dG8gZGV0ZXJtaW5lIHRoZQpuYW1lLi4uPyBJIG1lYW4sIHRoYXQgY29kZSBwYXRoIHNob3VsZCBi ZSB1bnJlYWNoYWJsZSwgYnV0IHN0aWxsIChhdApsZWFzdCB3aXRob3V0IHRoZSBjaGVjayB0aGUg Y29kZSBpcyBzbGlnaHRseSBuZWF0ZXIuLikKCj4gKwkJZmF1bHRfc3RhdHVzID0gbW11X3JlYWQo cGZkZXYsIEFTX0ZBVUxUU1RBVFVTKGkpKTsKPiArCQlhZGRyID0gbW11X3JlYWQocGZkZXYsIEFT X0ZBVUxUQUREUkVTU19MTyhpKSk7Cj4gKwkJYWRkciB8PSAodTY0KW1tdV9yZWFkKHBmZGV2LCBB U19GQVVMVEFERFJFU1NfSEkoaSkpIDw8IDMyOwoKSSBkb24ndCBrbm93IGlmIGl0J3MgbmVjZXNz YXJ5IGZvciB0aGUgaW5pdGlhbCBtZXJnZSwgYnV0IG1heWJlIGF0IGxlYXN0CnB1dCBhIFRPRE8g Y29tbWVudCBpbiBoZXJlIHRoYXQgZ3Jvd2FibGUgbWVtb3J5IChsYXp5IGFsbG9jYXRpb25zKSB3 aWxsCmJlIGltcGxlbWVudGVkIGhlcmUgaW4gdGhlIGZ1dHVyZS4uLj8KCj4gK3ZvaWQgcGFuZnJv c3RfbW11X2Zpbmkoc3RydWN0IHBhbmZyb3N0X2RldmljZSAqcGZkZXYpCj4gK3sKPiArCj4gK30K CkVtcHR5PwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKT3ZlcmFsbCwgSSdtIHN1cGVy IGhhcHB5IHRvIHNlZSB0aGlzISBOaWNlIHdvcmssIGd1eXMhIF5fXgoKLUFseXNzYQpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=