From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v5 4/7] drm/bridge/synopsys: Add MIPI DSI host controller bridge Date: Wed, 12 Jul 2017 11:35:07 +0530 Message-ID: <0145b068-c28e-3664-86ae-0561c1da8eb5@codeaurora.org> References: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> <1499071287-10414-5-git-send-email-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1499071287-10414-5-git-send-email-philippe.cornu@st.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philippe CORNU , Alexandre Torgue , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre , Neil Armstrong , Eric Anholt , Chris Zhong , Andrzej Hajda , Xinliang Liu , zourongrong@gmail.com, Xinwei Kong , Chen Feng , Mark Yao Cc: devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, Fabien Dessenne , Ludovic Barre , Mickael Reulier , Vincent Abriou , Gabriel Fernandez , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org CgpPbiAwNy8wMy8yMDE3IDAyOjExIFBNLCBQaGlsaXBwZSBDT1JOVSB3cm90ZToKPiBBZGQgYSBT eW5vcHN5cyBEZXNpZ253YXJlIE1JUEkgRFNJIGhvc3QgRFJNIGJyaWRnZSBkcml2ZXIsIGJhc2Vk IG9uIHRoZQo+IFJvY2tjaGlwIHZlcnNpb24gZnJvbSByb2NrY2hpcC9kdy1taXBpLWRzaS5jIHdp dGggcGh5ICYgYnJpZGdlIEFQSXMuCj4gCgpUaGUgcGF0Y2ggbG9va3MgZ29vZCBub3cuIE9uZSB0 aGluZyB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgaXMgdG8gbWFrZQpkcm1fYnJpZGdlX2FkZCgp IG5vdCByZXR1cm4gYW55dGhpbmcuCgpUaGUgbGF0ZXIgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzIHdv dWxkIGJlIGRlcGVuZGVudCBvbiB0aGlzIHBhdGNoLCByaWdodD8KU2luY2UgdGhlIFNUIHBhdGNo ZXMgZ28gdmlhIGRybS1taXNjIHRvbywgd2UgY291bGQgZWl0aGVyIHB1c2ggYWxsIHRoZXNlCnRv Z2V0aGVyLCBvciBJIGNvdWxkIHB1c2ggdGhlIGJyaWRnZSBkcml2ZXIgdG8gZHJtLW1pc2MtbmV4 dCwgYW5kIHRoZSBTVApwYXRjaGVzIGNhbiBiZSBwdXNoZWQgYWZ0ZXIuIEFueSBwcmVmZXJlbmNl PyBJZiBub3QsIEknbGwgZG8gdGhlIGxhdHRlci4KCkFyY2hpdAoKCj4gU2lnbmVkLW9mZi1ieTog UGhpbGlwcGUgQ09STlUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMv Z3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyAgICAgICB8ICAgNiArCj4gICBkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlICAgICAgfCAgIDIgKwo+ICAgZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1taXBpLWRzaS5jIHwgOTc5ICsrKysrKysrKysr KysrKysrKysrKysrKysrCj4gICBpbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaCAgICAg ICAgICAgICAgfCAgMzkgKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxMDI2IGluc2VydGlvbnMoKykK PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3 LW1pcGktZHNpLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9icmlkZ2UvZHdf bWlwaV9kc2kuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9w c3lzL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25maWcKPiBp bmRleCA0MGQyODI3Li5mMDBlZTI2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2Uvc3lub3BzeXMvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3Bz eXMvS2NvbmZpZwo+IEBAIC0yMSwzICsyMSw5IEBAIGNvbmZpZyBEUk1fRFdfSERNSV9JMlNfQVVE SU8KPiAgIAloZWxwCj4gICAJICBTdXBwb3J0IHRoZSBJMlMgQXVkaW8gaW50ZXJmYWNlIHdoaWNo IGlzIHBhcnQgb2YgdGhlIFN5bm9wc3lzCj4gICAJICBEZXNpZ253YXJlIEhETUkgYmxvY2suCj4g Kwo+ICtjb25maWcgRFJNX0RXX01JUElfRFNJCj4gKwl0cmlzdGF0ZQo+ICsJc2VsZWN0IERSTV9L TVNfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX01JUElfRFNJCj4gKwlzZWxlY3QgRFJNX1BBTkVMX0JS SURHRQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQo+IGluZGV4IDE3 YWE3YTYuLjVmNTdkMzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5v cHN5cy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvTWFr ZWZpbGUKPiBAQCAtMywzICszLDUgQEAKPiAgIG9iai0kKENPTkZJR19EUk1fRFdfSERNSSkgKz0g ZHctaGRtaS5vCj4gICBvYmotJChDT05GSUdfRFJNX0RXX0hETUlfQUhCX0FVRElPKSArPSBkdy1o ZG1pLWFoYi1hdWRpby5vCj4gICBvYmotJChDT05GSUdfRFJNX0RXX0hETUlfSTJTX0FVRElPKSAr PSBkdy1oZG1pLWkycy1hdWRpby5vCj4gKwo+ICtvYmotJChDT05GSUdfRFJNX0RXX01JUElfRFNJ KSArPSBkdy1taXBpLWRzaS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv c3lub3BzeXMvZHctbWlwaS1kc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMv ZHctbWlwaS1kc2kuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNDA2 MDAwZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9w c3lzL2R3LW1pcGktZHNpLmMKPiBAQCAtMCwwICsxLDk3OSBAQAo+ICsvKgo+ICsgKiBDb3B5cmln aHQgKGMpIDIwMTYsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAo+ICsgKiBD b3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3Cj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIE1vZGlmaWVkIGJ5IFBoaWxpcHBl IENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Cj4gKyAqIFRoaXMgZ2VuZXJpYyBTeW5vcHN5 cyBEZXNpZ25XYXJlIE1JUEkgRFNJIGhvc3QgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZQo+ICsgKiBS b2NrY2hpcCB2ZXJzaW9uIGZyb20gcm9ja2NoaXAvZHctbWlwaS1kc2kuYyB3aXRoIHBoeSAmIGJy aWRnZSBBUElzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiArI2lu Y2x1ZGUgPGRybS9icmlkZ2UvZHdfbWlwaV9kc2kuaD4KPiArI2luY2x1ZGUgPHZpZGVvL21pcGlf ZGlzcGxheS5oPgo+ICsKPiArI2RlZmluZSBEU0lfVkVSU0lPTgkJCTB4MDAKPiArI2RlZmluZSBE U0lfUFdSX1VQCQkJMHgwNAo+ICsjZGVmaW5lIFJFU0VUCQkJCTAKPiArI2RlZmluZSBQT1dFUlVQ CQkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBEU0lfQ0xLTUdSX0NGRwkJCTB4MDgKPiArI2RlZmlu ZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRpdikgJiAweGZmKSA8PCA4KQo+ICsjZGVmaW5l IFRYX0VTQ19DTEtfRElWSURTSU9OKGRpdikJKCgoZGl2KSAmIDB4ZmYpIDw8IDApCj4gKwo+ICsj ZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKPiArI2RlZmluZSBEUElfVklEKHZpZCkJCQkoKCh2 aWQpICYgMHgzKSA8PCAwKQo+ICsKPiArI2RlZmluZSBEU0lfRFBJX0NPTE9SX0NPRElORwkJMHgx MAo+ICsjZGVmaW5lIEVOMThfTE9PU0VMWQkJCUJJVCg4KQo+ICsjZGVmaW5lIERQSV9DT0xPUl9D T0RJTkdfMTZCSVRfMQkweDAKPiArI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzIJMHgx Cj4gKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18xNkJJVF8zCTB4Mgo+ICsjZGVmaW5lIERQSV9D T0xPUl9DT0RJTkdfMThCSVRfMQkweDMKPiArI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklU XzIJMHg0Cj4gKyNkZWZpbmUgRFBJX0NPTE9SX0NPRElOR18yNEJJVAkJMHg1Cj4gKwo+ICsjZGVm aW5lIERTSV9EUElfQ0ZHX1BPTAkJCTB4MTQKPiArI2RlZmluZSBDT0xPUk1fQUNUSVZFX0xPVwkJ QklUKDQpCj4gKyNkZWZpbmUgU0hVVERfQUNUSVZFX0xPVwkJQklUKDMpCj4gKyNkZWZpbmUgSFNZ TkNfQUNUSVZFX0xPVwkJQklUKDIpCj4gKyNkZWZpbmUgVlNZTkNfQUNUSVZFX0xPVwkJQklUKDEp Cj4gKyNkZWZpbmUgREFUQUVOX0FDVElWRV9MT1cJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBEU0lf RFBJX0xQX0NNRF9USU0JCTB4MTgKPiArI2RlZmluZSBPVVRWQUNUX0xQQ01EX1RJTUUocCkJCSgo KHApICYgMHhmZikgPDwgMTYpCj4gKyNkZWZpbmUgSU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkg JiAweGZmKQo+ICsKPiArI2RlZmluZSBEU0lfREJJX0NGRwkJCTB4MjAKPiArI2RlZmluZSBEU0lf REJJX0NNRFNJWkUJCQkweDI4Cj4gKwo+ICsjZGVmaW5lIERTSV9QQ0tIRExfQ0ZHCQkJMHgyYwo+ ICsjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQo+ICsjZGVmaW5lIEVOX0VDQ19SWAkJCUJJVCgz KQo+ICsjZGVmaW5lIEVOX0JUQQkJCQlCSVQoMikKPiArI2RlZmluZSBFTl9FT1RQX1JYCQkJQklU KDEpCj4gKyNkZWZpbmUgRU5fRU9UUF9UWAkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBEU0lfTU9E RV9DRkcJCQkweDM0Cj4gKyNkZWZpbmUgRU5BQkxFX1ZJREVPX01PREUJCTAKPiArI2RlZmluZSBF TkFCTEVfQ01EX01PREUJCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgRFNJX1ZJRF9NT0RFX0NGRwkJ MHgzOAo+ICsjZGVmaW5lIEZSQU1FX0JUQV9BQ0sJCQlCSVQoMTQpCj4gKyNkZWZpbmUgRU5BQkxF X0xPV19QT1dFUgkJKDB4M2YgPDwgOCkKPiArI2RlZmluZSBFTkFCTEVfTE9XX1BPV0VSX01BU0sJ CSgweDNmIDw8IDgpCj4gKyNkZWZpbmUgVklEX01PREVfVFlQRV9OT05fQlVSU1RfU1lOQ19QVUxT RVMJMHgwCj4gKyNkZWZpbmUgVklEX01PREVfVFlQRV9OT05fQlVSU1RfU1lOQ19FVkVOVFMJMHgx Cj4gKyNkZWZpbmUgVklEX01PREVfVFlQRV9CVVJTVAkJCTB4Mgo+ICsjZGVmaW5lIFZJRF9NT0RF X1RZUEVfTUFTSwkJCTB4Mwo+ICsKPiArI2RlZmluZSBEU0lfVklEX1BLVF9TSVpFCQkweDNjCj4g KyNkZWZpbmUgVklEX1BLVF9TSVpFKHApCQkJKCgocCkgJiAweDNmZmYpIDw8IDApCj4gKyNkZWZp bmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCj4gKwo+ICsjZGVmaW5lIERTSV9WSURfSFNBX1RJ TUUJCTB4NDgKPiArI2RlZmluZSBEU0lfVklEX0hCUF9USU1FCQkweDRjCj4gKyNkZWZpbmUgRFNJ X1ZJRF9ITElORV9USU1FCQkweDUwCj4gKyNkZWZpbmUgRFNJX1ZJRF9WU0FfTElORVMJCTB4NTQK PiArI2RlZmluZSBEU0lfVklEX1ZCUF9MSU5FUwkJMHg1OAo+ICsjZGVmaW5lIERTSV9WSURfVkZQ X0xJTkVTCQkweDVjCj4gKyNkZWZpbmUgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTCQkweDYwCj4gKyNk ZWZpbmUgRFNJX0NNRF9NT0RFX0NGRwkJMHg2OAo+ICsjZGVmaW5lIE1BWF9SRF9QS1RfU0laRV9M UAkJQklUKDI0KQo+ICsjZGVmaW5lIERDU19MV19UWF9MUAkJCUJJVCgxOSkKPiArI2RlZmluZSBE Q1NfU1JfMFBfVFhfTFAJCQlCSVQoMTgpCj4gKyNkZWZpbmUgRENTX1NXXzFQX1RYX0xQCQkJQklU KDE3KQo+ICsjZGVmaW5lIERDU19TV18wUF9UWF9MUAkJCUJJVCgxNikKPiArI2RlZmluZSBHRU5f TFdfVFhfTFAJCQlCSVQoMTQpCj4gKyNkZWZpbmUgR0VOX1NSXzJQX1RYX0xQCQkJQklUKDEzKQo+ ICsjZGVmaW5lIEdFTl9TUl8xUF9UWF9MUAkJCUJJVCgxMikKPiArI2RlZmluZSBHRU5fU1JfMFBf VFhfTFAJCQlCSVQoMTEpCj4gKyNkZWZpbmUgR0VOX1NXXzJQX1RYX0xQCQkJQklUKDEwKQo+ICsj ZGVmaW5lIEdFTl9TV18xUF9UWF9MUAkJCUJJVCg5KQo+ICsjZGVmaW5lIEdFTl9TV18wUF9UWF9M UAkJCUJJVCg4KQo+ICsjZGVmaW5lIEVOX0FDS19SUVNUCQkJQklUKDEpCj4gKyNkZWZpbmUgRU5f VEVBUl9GWAkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBDTURfTU9ERV9BTExfTFAJCQkoTUFYX1JE X1BLVF9TSVpFX0xQIHwgXAo+ICsJCQkJCSBEQ1NfTFdfVFhfTFAgfCBcCj4gKwkJCQkJIERDU19T Ul8wUF9UWF9MUCB8IFwKPiArCQkJCQkgRENTX1NXXzFQX1RYX0xQIHwgXAo+ICsJCQkJCSBEQ1Nf U1dfMFBfVFhfTFAgfCBcCj4gKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKPiArCQkJCQkgR0VOX1NS XzJQX1RYX0xQIHwgXAo+ICsJCQkJCSBHRU5fU1JfMVBfVFhfTFAgfCBcCj4gKwkJCQkJIEdFTl9T Ul8wUF9UWF9MUCB8IFwKPiArCQkJCQkgR0VOX1NXXzJQX1RYX0xQIHwgXAo+ICsJCQkJCSBHRU5f U1dfMVBfVFhfTFAgfCBcCj4gKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKPiArCj4gKyNkZWZpbmUg RFNJX0dFTl9IRFIJCQkweDZjCj4gKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkg JiAweGZmZmYpIDw8IDgpCj4gKyNkZWZpbmUgR0VOX0hEQVRBX01BU0sJCQkoMHhmZmZmIDw8IDgp Cj4gKyNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpCQkJKCgodHlwZSkgJiAweGZmKSA8PCAwKQo+ICsj ZGVmaW5lIEdFTl9IVFlQRV9NQVNLCQkJMHhmZgo+ICsKPiArI2RlZmluZSBEU0lfR0VOX1BMRF9E QVRBCQkweDcwCj4gKwo+ICsjZGVmaW5lIERTSV9DTURfUEtUX1NUQVRVUwkJMHg3NAo+ICsjZGVm aW5lIEdFTl9DTURfRU1QVFkJCQlCSVQoMCkKPiArI2RlZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQo MSkKPiArI2RlZmluZSBHRU5fUExEX1dfRU1QVFkJCQlCSVQoMikKPiArI2RlZmluZSBHRU5fUExE X1dfRlVMTAkJCUJJVCgzKQo+ICsjZGVmaW5lIEdFTl9QTERfUl9FTVBUWQkJCUJJVCg0KQo+ICsj ZGVmaW5lIEdFTl9QTERfUl9GVUxMCQkJQklUKDUpCj4gKyNkZWZpbmUgR0VOX1JEX0NNRF9CVVNZ CQkJQklUKDYpCj4gKwo+ICsjZGVmaW5lIERTSV9UT19DTlRfQ0ZHCQkJMHg3OAo+ICsjZGVmaW5l IEhTVFhfVE9fQ05UKHApCQkJKCgocCkgJiAweGZmZmYpIDw8IDE2KQo+ICsjZGVmaW5lIExQUlhf VE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKPiArCj4gKyNkZWZpbmUgRFNJX0JUQV9UT19DTlQJ CQkweDhjCj4gKyNkZWZpbmUgRFNJX0xQQ0xLX0NUUkwJCQkweDk0Cj4gKyNkZWZpbmUgQVVUT19D TEtMQU5FX0NUUkwJCUJJVCgxKQo+ICsjZGVmaW5lIFBIWV9UWFJFUVVFU1RDTEtIUwkJQklUKDAp Cj4gKwo+ICsjZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAo+ICsjZGVmaW5lIFBI WV9DTEtIUzJMUF9USU1FKGxiY2MpCQkoKChsYmNjKSAmIDB4M2ZmKSA8PCAxNikKPiArI2RlZmlu ZSBQSFlfQ0xLTFAySFNfVElNRShsYmNjKQkJKChsYmNjKSAmIDB4M2ZmKQo+ICsKPiArI2RlZmlu ZSBEU0lfUEhZX1RNUl9DRkcJCQkweDljCj4gKyNkZWZpbmUgUEhZX0hTMkxQX1RJTUUobGJjYykJ CSgoKGxiY2MpICYgMHhmZikgPDwgMjQpCj4gKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJ CSgoKGxiY2MpICYgMHhmZikgPDwgMTYpCj4gKyNkZWZpbmUgTUFYX1JEX1RJTUUobGJjYykJCSgo bGJjYykgJiAweDdmZmYpCj4gKwo+ICsjZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKPiArI2Rl ZmluZSBQSFlfRElTRk9SQ0VQTEwJCQkwCj4gKyNkZWZpbmUgUEhZX0VORk9SQ0VQTEwJCQlCSVQo MykKPiArI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJCTAKPiArI2RlZmluZSBQSFlfRU5BQkxFQ0xL CQkJQklUKDIpCj4gKyNkZWZpbmUgUEhZX1JTVFoJCQkwCj4gKyNkZWZpbmUgUEhZX1VOUlNUWgkJ CUJJVCgxKQo+ICsjZGVmaW5lIFBIWV9TSFVURE9XTloJCQkwCj4gKyNkZWZpbmUgUEhZX1VOU0hV VERPV05aCQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIERTSV9QSFlfSUZfQ0ZHCQkJMHhhNAo+ICsj ZGVmaW5lIE5fTEFORVMobikJCQkoKCgobikgLSAxKSAmIDB4MykgPDwgMCkKPiArI2RlZmluZSBQ SFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgpCj4gKwo+ICsj ZGVmaW5lIERTSV9QSFlfU1RBVFVTCQkJMHhiMAo+ICsjZGVmaW5lIExPQ0sJCQkJQklUKDApCj4g KyNkZWZpbmUgU1RPUF9TVEFURV9DTEtfTEFORQkJQklUKDIpCj4gKwo+ICsjZGVmaW5lIERTSV9Q SFlfVFNUX0NUUkwwCQkweGI0Cj4gKyNkZWZpbmUgUEhZX1RFU1RDTEsJCQlCSVQoMSkKPiArI2Rl ZmluZSBQSFlfVU5URVNUQ0xLCQkJMAo+ICsjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCj4g KyNkZWZpbmUgUEhZX1VOVEVTVENMUgkJCTAKPiArCj4gKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RS TDEJCTB4YjgKPiArI2RlZmluZSBQSFlfVEVTVEVOCQkJQklUKDE2KQo+ICsjZGVmaW5lIFBIWV9V TlRFU1RFTgkJCTAKPiArI2RlZmluZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8 IDgpCj4gKyNkZWZpbmUgUEhZX1RFU1RESU4obikJCQkoKChuKSAmIDB4ZmYpIDw8IDApCj4gKwo+ ICsjZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhiYwo+ICsjZGVmaW5lIERTSV9JTlRfU1QxCQkJMHhj MAo+ICsjZGVmaW5lIERTSV9JTlRfTVNLMAkJCTB4YzQKPiArI2RlZmluZSBEU0lfSU5UX01TSzEJ CQkweGM4Cj4gKwo+ICsjZGVmaW5lIFBIWV9TVEFUVVNfVElNRU9VVF9VUwkJMTAwMDAKPiArI2Rl ZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIwMDAwCj4gKwo+ICtzdHJ1Y3QgZHdfbWlw aV9kc2kgewo+ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+ICsJc3RydWN0IG1pcGlfZHNp X2hvc3QgZHNpX2hvc3Q7Cj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOwo+ICsJ Ym9vbCBpc19wYW5lbF9icmlkZ2U7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwl2b2lkIF9f aW9tZW0gKmJhc2U7Cj4gKwo+ICsJc3RydWN0IGNsayAqcGNsazsKPiArCj4gKwl1bnNpZ25lZCBp bnQgbGFuZV9tYnBzOyAvKiBwZXIgbGFuZSAqLwo+ICsJdTMyIGNoYW5uZWw7Cj4gKwl1MzIgbGFu ZXM7Cj4gKwl1MzIgZm9ybWF0Owo+ICsJdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOwo+ICsKPiAr CWNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBsYXRfZGF0YTsKPiArfTsKPiAr Cj4gKy8qCj4gKyAqIFRoZSBjb250cm9sbGVyIHNob3VsZCBnZW5lcmF0ZSAyIGZyYW1lcyBiZWZv cmUKPiArICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgo+ICsgKi8KPiArc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKPiArewo+ICsJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7Cj4gKwo+ICsJcmVmcmVzaCA9 IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwo+ICsJdHdvX2ZyYW1lcyA9IERJVl9ST1VORF9VUChN U0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKPiArCW1zbGVlcCh0d29fZnJhbWVzKTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmhvc3RfdG9fZHNpKHN0cnVj dCBtaXBpX2RzaV9ob3N0ICpob3N0KQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGhvc3Qs IHN0cnVjdCBkd19taXBpX2RzaSwgZHNpX2hvc3QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHN0cnVjdCBkd19taXBpX2RzaSAqYnJpZGdlX3RvX2RzaShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGR3X21pcGlf ZHNpLCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQo+ICt7Cj4gKwl3cml0ZWwo dmFsLCBkc2ktPmJhc2UgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBkc2lf cmVhZChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIHJlZykKPiArewo+ICsJcmV0dXJuIHJl YWRsKGRzaS0+YmFzZSArIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lf aG9zdF9hdHRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gKwkJCQkgICBzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp ID0gaG9zdF90b19kc2koaG9zdCk7Cj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlOwo+ICsJ c3RydWN0IGRybV9wYW5lbCAqcGFuZWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChkZXZpY2Ut PmxhbmVzID4gZHNpLT5wbGF0X2RhdGEtPm1heF9kYXRhX2xhbmVzKSB7Cj4gKwkJZGV2X2Vycihk c2ktPmRldiwgInRoZSBudW1iZXIgb2YgZGF0YSBsYW5lcygldSkgaXMgdG9vIG1hbnlcbiIsCj4g KwkJCWRldmljZS0+bGFuZXMpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCWRz aS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwo+ICsJZHNpLT5jaGFubmVsID0gZGV2aWNlLT5jaGFu bmVsOwo+ICsJZHNpLT5mb3JtYXQgPSBkZXZpY2UtPmZvcm1hdDsKPiArCWRzaS0+bW9kZV9mbGFn cyA9IGRldmljZS0+bW9kZV9mbGFnczsKPiArCj4gKwlyZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9v cl9icmlkZ2UoaG9zdC0+ZGV2LT5vZl9ub2RlLCAxLCAwLAo+ICsJCQkJCSAgJnBhbmVsLCAmYnJp ZGdlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAocGFuZWwpIHsK PiArCQlicmlkZ2UgPSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwgRFJNX01PREVfQ09OTkVD VE9SX0RTSSk7Cj4gKwkJaWYgKElTX0VSUihicmlkZ2UpKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihi cmlkZ2UpOwo+ICsJCWRzaS0+aXNfcGFuZWxfYnJpZGdlID0gdHJ1ZTsKPiArCX0KPiArCj4gKwlk c2ktPnBhbmVsX2JyaWRnZSA9IGJyaWRnZTsKPiArCj4gKwlyZXR1cm4gZHJtX2JyaWRnZV9hZGQo JmRzaS0+YnJpZGdlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2Rl dGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKPiArCQkJCSAgIHN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRldmljZSkKPiArewo+ICsJc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBob3N0 X3RvX2RzaShob3N0KTsKPiArCj4gKwlpZiAoZHNpLT5pc19wYW5lbF9icmlkZ2UpCj4gKwkJZHJt X3BhbmVsX2JyaWRnZV9yZW1vdmUoZHNpLT5wYW5lbF9icmlkZ2UpOwo+ICsKPiArCWRybV9icmlk Z2VfcmVtb3ZlKCZkc2ktPmJyaWRnZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGR3X21pcGlfbWVzc2FnZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ks Cj4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCj4gK3sKPiArCWJvb2wg bHBtID0gbXNnLT5mbGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNOwo+ICsJdTMyIHZhbCA9IDA7 Cj4gKwo+ICsJaWYgKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykKPiArCQl2YWwg fD0gRU5fQUNLX1JRU1Q7Cj4gKwlpZiAobHBtKQo+ICsJCXZhbCB8PSBDTURfTU9ERV9BTExfTFA7 Cj4gKwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIGxwbSA/IDAgOiBQSFlfVFhS RVFVRVNUQ0xLSFMpOwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgdmFsKTsK PiArfQo+ICsKPiArc3RhdGljIGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSwgdTMyIGhkcl92YWwpCj4gK3sKPiArCWludCByZXQ7Cj4gKwl1 MzIgdmFsLCBtYXNrOwo+ICsKPiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2Ug KyBEU0lfQ01EX1BLVF9TVEFUVVMsCj4gKwkJCQkgdmFsLCAhKHZhbCAmIEdFTl9DTURfRlVMTCks IDEwMDAsCj4gKwkJCQkgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCWRldl9lcnIoZHNpLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBjb21t YW5kIEZJRk9cbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHNpX3dyaXRlKGRz aSwgRFNJX0dFTl9IRFIsIGhkcl92YWwpOwo+ICsKPiArCW1hc2sgPSBHRU5fQ01EX0VNUFRZIHwg R0VOX1BMRF9XX0VNUFRZOwo+ICsJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGRzaS0+YmFzZSAr IERTSV9DTURfUEtUX1NUQVRVUywKPiArCQkJCSB2YWwsICh2YWwgJiBtYXNrKSA9PSBtYXNrLAo+ ICsJCQkJIDEwMDAsIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOwo+ICsJaWYgKHJldCA8IDAp IHsKPiArCQlkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgRklGT1xu Iik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNp ICpkc2ksCj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ICt7 Cj4gKwljb25zdCB1OCAqdHhfYnVmID0gbXNnLT50eF9idWY7Cj4gKwl1MTYgZGF0YSA9IDA7Cj4g Kwl1MzIgdmFsOwo+ICsKPiArCWlmIChtc2ctPnR4X2xlbiA+IDApCj4gKwkJZGF0YSB8PSB0eF9i dWZbMF07Cj4gKwlpZiAobXNnLT50eF9sZW4gPiAxKQo+ICsJCWRhdGEgfD0gdHhfYnVmWzFdIDw8 IDg7Cj4gKwo+ICsJaWYgKG1zZy0+dHhfbGVuID4gMikgewo+ICsJCWRldl9lcnIoZHNpLT5kZXYs ICJ0b28gbG9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3Igc2hvcnQgd3JpdGVcbiIsCj4gKwkJCW1z Zy0+dHhfbGVuKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwl2YWwgPSBHRU5f SERBVEEoZGF0YSkgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKPiArCXJldHVybiBkd19taXBpX2Rz aV9nZW5fcGt0X2hkcl93cml0ZShkc2ksIHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdf bWlwaV9kc2lfZGNzX2xvbmdfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCj4gKwkJCQkg ICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCj4gK3sKPiArCWNvbnN0IHU4ICp0 eF9idWYgPSBtc2ctPnR4X2J1ZjsKPiArCWludCBsZW4gPSBtc2ctPnR4X2xlbiwgcGxkX2RhdGFf Ynl0ZXMgPSBzaXplb2YodTMyKSwgcmV0Owo+ICsJdTMyIGhkcl92YWwgPSBHRU5fSERBVEEobXNn LT50eF9sZW4pIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7Cj4gKwl1MzIgcmVtYWluZGVyOwo+ICsJ dTMyIHZhbDsKPiArCj4gKwlpZiAobXNnLT50eF9sZW4gPCAzKSB7Cj4gKwkJZGV2X2Vycihkc2kt PmRldiwgIndyb25nIHR4IGJ1ZiBsZW5ndGggJXp1IGZvciBsb25nIHdyaXRlXG4iLAo+ICsJCQlt c2ctPnR4X2xlbik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJd2hpbGUgKERJ Vl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgewo+ICsJCWlmIChsZW4gPCBwbGRfZGF0 YV9ieXRlcykgewo+ICsJCQlyZW1haW5kZXIgPSAwOwo+ICsJCQltZW1jcHkoJnJlbWFpbmRlciwg dHhfYnVmLCBsZW4pOwo+ICsJCQlkc2lfd3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1h aW5kZXIpOwo+ICsJCQlsZW4gPSAwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCW1lbWNweSgmcmVtYWlu ZGVyLCB0eF9idWYsIHBsZF9kYXRhX2J5dGVzKTsKPiArCQkJZHNpX3dyaXRlKGRzaSwgRFNJX0dF Tl9QTERfREFUQSwgcmVtYWluZGVyKTsKPiArCQkJdHhfYnVmICs9IHBsZF9kYXRhX2J5dGVzOwo+ ICsJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSByZWFkbF9w b2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX0NNRF9QS1RfU1RBVFVTLAo+ICsJCQkJCSB2YWws ICEodmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAo+ICsJCQkJCSBDTURfUEtUX1NUQVRVU19U SU1FT1VUX1VTKTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlkZXZfZXJyKGRzaS0+ZGV2LAo+ ICsJCQkJImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7Cj4g KwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiBkd19taXBpX2RzaV9n ZW5fcGt0X2hkcl93cml0ZShkc2ksIGhkcl92YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVf dCBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAo+ ICsJCQkJCSBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCj4gK3sKPiArCXN0cnVjdCBk d19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7Cj4gKwlpbnQgcmV0Owo+ICsKPiAr CS8qCj4gKwkgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMKPiArCSAqIHVzZSBtaXBpX2RzaV9j cmVhdGVfcGFja2V0KCkgaW5zdGVhZCBvZiBhbGwgZm9sbG93aW5nCj4gKwkgKiBmdW5jdGlvbnMg YW5kIGNvZGUgKG5vIHN3aXRjaCBjYXNlcywgbm8KPiArCSAqIGR3X21pcGlfZHNpX2Rjc19zaG9y dF93cml0ZSgpLCBvbmx5IHRoZSBsb29wIGluIGxvbmdfd3JpdGUuLi4pCj4gKwkgKiBhbmQgdXNl IHBhY2tldC5oZWFkZXIuLi4KPiArCSAqLwo+ICsJZHdfbWlwaV9tZXNzYWdlX2NvbmZpZyhkc2ks IG1zZyk7Cj4gKwo+ICsJc3dpdGNoIChtc2ctPnR5cGUpIHsKPiArCWNhc2UgTUlQSV9EU0lfRENT X1NIT1JUX1dSSVRFOgo+ICsJY2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU06Cj4g KwljYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JFVFVSTl9QQUNLRVRfU0laRToKPiArCQlyZXQg PSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBNSVBJX0RTSV9EQ1NfTE9OR19XUklURToKPiArCQlyZXQgPSBkd19taXBpX2RzaV9kY3Nf bG9uZ193cml0ZShkc2ksIG1zZyk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWRldl9l cnIoZHNpLT5kZXYsICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGUgMHglMDJ4XG4iLAo+ICsJCQlt c2ctPnR5cGUpOwo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBp X2RzaV9ob3N0X29wcyA9IHsKPiArCS5hdHRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2F0dGFjaCwK PiArCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKPiArCS50cmFuc2ZlciA9IGR3 X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19taXBp X2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPiArewo+ICsJ dTMyIHZhbDsKPiArCj4gKwkvKgo+ICsJICogVE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzCj4gKwkg KiBlbmFibGluZyBsb3cgcG93ZXIgaXMgcGFuZWwtZGVwZW5kZW50LCB3ZSBzaG91bGQgdXNlIHRo ZQo+ICsJICogcGFuZWwgY29uZmlndXJhdGlvbiBoZXJlLi4uCj4gKwkgKi8KPiArCXZhbCA9IEVO QUJMRV9MT1dfUE9XRVI7Cj4gKwo+ICsJaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01P REVfVklERU9fQlVSU1QpCj4gKwkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfQlVSU1Q7Cj4gKwllbHNl IGlmIChkc2ktPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCj4g KwkJdmFsIHw9IFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfUFVMU0VTOwo+ICsJZWxzZQo+ ICsJCXZhbCB8PSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9TWU5DX0VWRU5UUzsKPiArCj4gKwlk c2lfd3JpdGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPiArCQkJ CSB1bnNpZ25lZCBsb25nIG1vZGVfZmxhZ3MpCj4gK3sKPiArCWRzaV93cml0ZShkc2ksIERTSV9Q V1JfVVAsIFJFU0VUKTsKPiArCj4gKwlpZiAobW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklE RU8pIHsKPiArCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9WSURFT19NT0RF KTsKPiArCQlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOwo+ICsJCWRzaV93cml0 ZShkc2ksIERTSV9MUENMS19DVFJMLCBQSFlfVFhSRVFVRVNUQ0xLSFMpOwo+ICsJfSBlbHNlIHsK PiArCQlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7Cj4gKwl9 Cj4gKwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Rpc2FibGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cj4gK3sKPiArCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKPiArCWRzaV93cml0 ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX1JTVFopOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk d19taXBpX2RzaV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+ICt7Cj4gKwkvKgo+ICsJ ICogVGhlIG1heGltdW0gcGVybWl0dGVkIGVzY2FwZSBjbG9jayBpcyAyME1IeiBhbmQgaXQgaXMg ZGVyaXZlZCBmcm9tCj4gKwkgKiBsYW5lYnl0ZWNsaywgd2hpY2ggaXMgcnVubmluZyBhdCAibGFu ZV9tYnBzIC8gOCIuICBUaHVzIHdlIHdhbnQ6Cj4gKwkgKgo+ICsJICogICAgIChsYW5lX21icHMg Pj4gMykgLyBlc2NfY2xrX2RpdmlzaW9uIDwgMjAKPiArCSAqIHdoaWNoIGlzOgo+ICsJICogICAg IChsYW5lX21icHMgPj4gMykgLyAyMCA+IGVzY19jbGtfZGl2aXNpb24KPiArCSAqLwo+ICsJdTMy IGVzY19jbGtfZGl2aXNpb24gPSAoZHNpLT5sYW5lX21icHMgPj4gMykgLyAyMCArIDE7Cj4gKwo+ ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwo+ICsKPiArCS8qCj4gKwkgKiBU T0RPIGR3IGRydiBpbXByb3ZlbWVudHMKPiArCSAqIHRpbWVvdXQgY2xvY2sgZGl2aXNpb24gc2hv dWxkIGJlIGNvbXB1dGVkIHdpdGggdGhlCj4gKwkgKiBoaWdoIHNwZWVkIHRyYW5zbWlzc2lvbiBj b3VudGVyIHRpbWVvdXQgYW5kIGJ5dGUgbGFuZS4uLgo+ICsJICovCj4gKwlkc2lfd3JpdGUoZHNp LCBEU0lfQ0xLTUdSX0NGRywgVE9fQ0xLX0RJVklEU0lPTigxMCkgfAo+ICsJCSAgVFhfRVNDX0NM S19ESVZJRFNJT04oZXNjX2Nsa19kaXZpc2lvbikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBk d19taXBpX2RzaV9kcGlfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+ICsJCQkJICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiArCXUzMiB2YWwgPSAwLCBjb2xv ciA9IDA7Cj4gKwo+ICsJc3dpdGNoIChkc2ktPmZvcm1hdCkgewo+ICsJY2FzZSBNSVBJX0RTSV9G TVRfUkdCODg4Ogo+ICsJCWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18yNEJJVDsKPiArCQlicmVh azsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiArCQljb2xvciA9IERQSV9DT0xPUl9D T0RJTkdfMThCSVRfMiB8IEVOMThfTE9PU0VMWTsKPiArCQlicmVhazsKPiArCWNhc2UgTUlQSV9E U0lfRk1UX1JHQjY2Nl9QQUNLRUQ6Cj4gKwkJY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklU XzE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6Cj4gKwkJY29sb3Ig PSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzE7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYg KG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZTkMpCj4gKwkJdmFsIHw9IFZTWU5DX0FD VElWRV9MT1c7Cj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykKPiAr CQl2YWwgfD0gSFNZTkNfQUNUSVZFX0xPVzsKPiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJ X1ZDSUQsIERQSV9WSUQoZHNpLT5jaGFubmVsKSk7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfRFBJ X0NPTE9SX0NPRElORywgY29sb3IpOwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9M LCB2YWwpOwo+ICsJLyoKPiArCSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+ICsJICogbGFy Z2VzdCBwYWNrZXQgc2l6ZXMgZHVyaW5nIGhmcCBvciBkdXJpbmcgdnNhL3ZwYi92ZnAKPiArCSAq IHNob3VsZCBiZSBjb21wdXRlZCBhY2NvcmRpbmcgdG8gYnl0ZSBsYW5lLCBsYW5lIG51bWJlciBh bmQgb25seQo+ICsJICogaWYgc2VuZGluZyBscCBjbWRzIGluIGhpZ2ggc3BlZWQgaXMgZW5hYmxl IChQSFlfVFhSRVFVRVNUQ0xLSFMpCj4gKwkgKi8KPiArCWRzaV93cml0ZShkc2ksIERTSV9EUElf TFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9USU1FKDQpCj4gKwkJICB8IElOVkFDVF9MUENNRF9U SU1FKDQpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRs ZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+ICt7Cj4gKwlkc2lfd3JpdGUoZHNp LCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5fRUNDX1JYIHwgRU5fQlRBKTsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2NvbmZpZyhzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSwKPiArCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCj4gK3sKPiArCS8qCj4gKwkgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMKPiArCSAqIG9u bHkgYnVyc3QgbW9kZSBpcyBzdXBwb3J0ZWQgaGVyZS4gRm9yIG5vbi1idXJzdCB2aWRlbyBtb2Rl cywKPiArCSAqIHdlIHNob3VsZCBjb21wdXRlIERTSV9WSURfUEtUX1NJWkUsIERTSV9WQ0NSLk5V TUMgJgo+ICsJICogRFNJX1ZOUENSLk5QU0laRS4uLiBlc3BlY2lhbGx5IGJlY2F1c2UgdGhpcyBk cml2ZXIgc3VwcG9ydHMKPiArCSAqIG5vbi1idXJzdCB2aWRlbyBtb2Rlcywgc2VlIGR3X21pcGlf ZHNpX3ZpZGVvX21vZGVfY29uZmlnKCkuLi4KPiArCSAqLwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJ X1ZJRF9QS1RfU0laRSwgVklEX1BLVF9TSVpFKG1vZGUtPmhkaXNwbGF5KSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCj4gK3sKPiArCS8qCj4gKwkgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMK PiArCSAqIGNvbXB1dGUgaGlnaCBzcGVlZCB0cmFuc21pc3Npb24gY291bnRlciB0aW1lb3V0IGFj Y29yZGluZwo+ICsJICogdG8gdGhlIHRpbWVvdXQgY2xvY2sgZGl2aXNpb24gKFRPX0NMS19ESVZJ RFNJT04pIGFuZCBieXRlIGxhbmUuLi4KPiArCSAqLwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1RP X0NOVF9DRkcsIEhTVFhfVE9fQ05UKDEwMDApIHwgTFBSWF9UT19DTlQoMTAwMCkpOwo+ICsJLyoK PiArCSAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+ICsJICogdGhlIEJ1cy1UdXJuLUFyb3Vu ZCBUaW1lb3V0IENvdW50ZXIgc2hvdWxkIGJlIGNvbXB1dGVkCj4gKwkgKiBhY2NvcmRpbmcgdG8g Ynl0ZSBsYW5lLi4uCj4gKwkgKi8KPiArCWRzaV93cml0ZShkc2ksIERTSV9CVEFfVE9fQ05ULCAw eGQwMCk7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9DTURfTU9ERSk7 Cj4gK30KPiArCj4gKy8qIEdldCBsYW5lIGJ5dGUgY2xvY2sgY3ljbGVzLiAqLwo+ICtzdGF0aWMg dTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCj4gKwkJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gKwkJCQkJICAg dTMyIGhjb21wb25lbnQpCj4gK3sKPiArCXUzMiBmcmFjLCBsYmNjOwo+ICsKPiArCWxiY2MgPSBo Y29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4Owo+ICsKPiArCWZy YWMgPSBsYmNjICUgbW9kZS0+Y2xvY2s7Cj4gKwlsYmNjID0gbGJjYyAvIG1vZGUtPmNsb2NrOwo+ ICsJaWYgKGZyYWMpCj4gKwkJbGJjYysrOwo+ICsKPiArCXJldHVybiBsYmNjOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwKPiArCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7 Cj4gKwl1MzIgaHRvdGFsLCBoc2EsIGhicCwgbGJjYzsKPiArCj4gKwlodG90YWwgPSBtb2RlLT5o dG90YWw7Cj4gKwloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKPiAr CWhicCA9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKPiArCj4gKwkvKgo+ICsJICog VE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzCj4gKwkgKiBjb21wdXRhdGlvbnMgYmVsb3cgbWF5IGJl IGltcHJvdmVkLi4uCj4gKwkgKi8KPiArCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVu dF9sYmNjKGRzaSwgbW9kZSwgaHRvdGFsKTsKPiArCWRzaV93cml0ZShkc2ksIERTSV9WSURfSExJ TkVfVElNRSwgbGJjYyk7Cj4gKwo+ICsJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50 X2xiY2MoZHNpLCBtb2RlLCBoc2EpOwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElN RSwgbGJjYyk7Cj4gKwo+ICsJbGJjYyA9IGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2Mo ZHNpLCBtb2RlLCBoYnApOwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IQlBfVElNRSwgbGJj Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19j b25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCj4gKwkJCQkJICAgICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwl1MzIgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsK PiArCj4gKwl2YWN0aXZlID0gbW9kZS0+dmRpc3BsYXk7Cj4gKwl2c2EgPSBtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydDsKPiArCXZmcCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9k ZS0+dmRpc3BsYXk7Cj4gKwl2YnAgPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7Cj4g Kwo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WQUNUSVZFX0xJTkVTLCB2YWN0aXZlKTsKPiAr CWRzaV93cml0ZShkc2ksIERTSV9WSURfVlNBX0xJTkVTLCB2c2EpOwo+ICsJZHNpX3dyaXRlKGRz aSwgRFNJX1ZJRF9WRlBfTElORVMsIHZmcCk7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZC UF9MSU5FUywgdmJwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV90 aW1pbmdfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+ICt7Cj4gKwkvKgo+ICsJICog VE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzCj4gKwkgKiBkYXRhICYgY2xvY2sgbGFuZSB0aW1lcnMg c2hvdWxkIGJlIGNvbXB1dGVkIGFjY29yZGluZyB0byBwYW5lbAo+ICsJICogYmxhbmtpbmdzIGFu ZCB0byB0aGUgYXV0b21hdGljIGNsb2NrIGxhbmUgY29udHJvbCBtb2RlLi4uCj4gKwkgKiBub3Rl OiBEU0lfUEhZX1RNUl9DRkcuTUFYX1JEX1RJTUUgc2hvdWxkIGJlIGluIGxpbmUgd2l0aAo+ICsJ ICogRFNJX0NNRF9NT0RFX0NGRy5NQVhfUkRfUEtUX1NJWkVfTFAgKHNlZSBDTURfTU9ERV9BTExf TFApCj4gKwkgKi8KPiArCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0NGRywgUEhZX0hTMkxQ X1RJTUUoMHg0MCkKPiArCQkgIHwgUEhZX0xQMkhTX1RJTUUoMHg0MCkgfCBNQVhfUkRfVElNRSgx MDAwMCkpOwo+ICsKPiArCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVE1SX0xQQ0xLX0NGRywgUEhZ X0NMS0hTMkxQX1RJTUUoMHg0MCkKPiArCQkgIHwgUEhZX0NMS0xQMkhTX1RJTUUoMHg0MCkpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2ludGVyZmFjZV9jb25maWco c3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4gK3sKPiArCS8qCj4gKwkgKiBUT0RPIGR3IGRydiBp bXByb3ZlbWVudHMKPiArCSAqIHN0b3Agd2FpdCB0aW1lIHNob3VsZCBiZSB0aGUgbWF4aW11bSBi ZXR3ZWVuIGhvc3QgZHNpCj4gKwkgKiBhbmQgcGFuZWwgc3RvcCB3YWl0IHRpbWVzCj4gKwkgKi8K PiArCWRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgy MCkgfAo+ICsJCSAgTl9MQU5FUyhkc2ktPmxhbmVzKSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2RwaHlfaW5pdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPiArewo+ICsJ LyogQ2xlYXIgUEhZIHN0YXRlICovCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBI WV9ESVNGT1JDRVBMTCB8IFBIWV9ESVNBQkxFQ0xLCj4gKwkJICB8IFBIWV9SU1RaIHwgUEhZX1NI VVRET1dOWik7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVT VENMUik7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1RFU1RDTFIp Owo+ICsJZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9VTlRFU1RDTFIpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X2VuYWJsZShzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkKPiArewo+ICsJdTMyIHZhbDsKPiArCWludCByZXQ7Cj4gKwo+ICsJZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9SU1RaLCBQSFlfRU5GT1JDRVBMTCB8IFBIWV9FTkFCTEVDTEsg fAo+ICsJCSAgUEhZX1VOUlNUWiB8IFBIWV9VTlNIVVRET1dOWik7Cj4gKwo+ICsJcmV0ID0gcmVh ZGxfcG9sbF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9QSFlfU1RBVFVTLAo+ICsJCQkJIHZhbCwg dmFsICYgTE9DSywgMTAwMCwgUEhZX1NUQVRVU19USU1FT1VUX1VTKTsKPiArCWlmIChyZXQgPCAw KQo+ICsJCURSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byB3YWl0IHBoeSBsb2NrIHN0YXRlXG4i KTsKPiArCj4gKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9T VEFUVVMsCj4gKwkJCQkgdmFsLCB2YWwgJiBTVE9QX1NUQVRFX0NMS19MQU5FLCAxMDAwLAo+ICsJ CQkJIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlEUk1fREVC VUdfRFJJVkVSKCJmYWlsZWQgdG8gd2FpdCBwaHkgY2xrIGxhbmUgc3RvcCBzdGF0ZVxuIik7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2NsZWFyX2VycihzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSkKPiArewo+ICsJZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7Cj4gKwlkc2lf cmVhZChkc2ksIERTSV9JTlRfU1QxKTsKPiArCWRzaV93cml0ZShkc2ksIERTSV9JTlRfTVNLMCwg MCk7Cj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzEsIDApOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlX3RvX2Rz aShicmlkZ2UpOwo+ICsKPiArCS8qCj4gKwkgKiBTd2l0Y2ggdG8gY29tbWFuZCBtb2RlIGJlZm9y ZSBwYW5lbC1icmlkZ2UgcG9zdF9kaXNhYmxlICYKPiArCSAqIHBhbmVsIHVucHJlcGFyZS4KPiAr CSAqIE5vdGU6IHBhbmVsLWJyaWRnZSBkaXNhYmxlICYgcGFuZWwgZGlzYWJsZSBoYXMgYmVlbiBj YWxsZWQKPiArCSAqIGJlZm9yZSBieSB0aGUgZHJtIGZyYW1ld29yay4KPiArCSAqLwo+ICsJZHdf bWlwaV9kc2lfc2V0X21vZGUoZHNpLCAwKTsKPiArCj4gKwkvKgo+ICsJICogVE9ETyBPbmx5IHdh eSBmb3VuZCB0byBjYWxsIHBhbmVsLWJyaWRnZSBwb3N0X2Rpc2FibGUgJgo+ICsJICogcGFuZWwg dW5wcmVwYXJlIGJlZm9yZSB0aGUgZHNpICJmaW5hbCIgZGlzYWJsZS4uLgo+ICsJICogVGhpcyBu ZWVkcyB0byBiZSBmaXhlZCBpbiB0aGUgZHJtX2JyaWRnZSBmcmFtZXdvcmsgYW5kIHRoZSBBUEkK PiArCSAqIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gbWFuYWdlIG91ciBvd24gY2FsbCBjaGFpbnMu Li4KPiArCSAqLwo+ICsJZHNpLT5wYW5lbF9icmlkZ2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoZHNp LT5wYW5lbF9icmlkZ2UpOwo+ICsKPiArCWR3X21pcGlfZHNpX2Rpc2FibGUoZHNpKTsKPiArCWNs a19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOwo+ICsJcG1fcnVudGltZV9wdXQoZHNpLT5k ZXYpOwo+ICt9Cj4gKwo+ICt2b2lkIGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAo+ICsJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4g KwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKPiArCWNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9waHlfb3BzICpwaHlfb3BzID0gZHNpLT5wbGF0X2RhdGEt PnBoeV9vcHM7Cj4gKwl2b2lkICpwcml2X2RhdGEgPSBkc2ktPnBsYXRfZGF0YS0+cHJpdl9kYXRh Owo+ICsJaW50IHJldDsKPiArCj4gKwljbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKPiAr Cj4gKwlyZXQgPSBwaHlfb3BzLT5nZXRfbGFuZV9tYnBzKHByaXZfZGF0YSwgbW9kZSwgZHNpLT5t b2RlX2ZsYWdzLAo+ICsJCQkJICAgICBkc2ktPmxhbmVzLCBkc2ktPmZvcm1hdCwgJmRzaS0+bGFu ZV9tYnBzKTsKPiArCWlmIChyZXQpCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiUGh5IGdldF9sYW5l X21icHMoKSBmYWlsZWRcbiIpOwo+ICsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHNpLT5kZXYp Owo+ICsJZHdfbWlwaV9kc2lfaW5pdChkc2kpOwo+ICsJZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhk c2ksIG1vZGUpOwo+ICsJZHdfbWlwaV9kc2lfcGFja2V0X2hhbmRsZXJfY29uZmlnKGRzaSk7Cj4g Kwlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOwo+ICsJZHdfbWlwaV9kc2lfdmlk ZW9fcGFja2V0X2NvbmZpZyhkc2ksIG1vZGUpOwo+ICsJZHdfbWlwaV9kc2lfY29tbWFuZF9tb2Rl X2NvbmZpZyhkc2kpOwo+ICsJZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWcoZHNpLCBtb2Rl KTsKPiArCWR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoZHNpLCBtb2RlKTsKPiAr Cj4gKwlkd19taXBpX2RzaV9kcGh5X2luaXQoZHNpKTsKPiArCWR3X21pcGlfZHNpX2RwaHlfdGlt aW5nX2NvbmZpZyhkc2kpOwo+ICsJZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKGRz aSk7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfY2xlYXJfZXJyKGRzaSk7Cj4gKwo+ICsJcmV0ID0gcGh5 X29wcy0+aW5pdChwcml2X2RhdGEpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fREVCVUdfRFJJVkVS KCJQaHkgaW5pdCgpIGZhaWxlZFxuIik7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfZHBoeV9lbmFibGUo ZHNpKTsKPiArCj4gKwlkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJhbWVzKG1vZGUpOwo+ICsK PiArCS8qIFN3aXRjaCB0byBjbWQgbW9kZSBmb3IgcGFuZWwtYnJpZGdlIHByZV9lbmFibGUgJiBw YW5lbCBwcmVwYXJlICovCj4gKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIDApOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlX3Rv X2RzaShicmlkZ2UpOwo+ICsKPiArCS8qIFN3aXRjaCB0byB2aWRlbyBtb2RlIGZvciBwYW5lbC1i cmlkZ2UgZW5hYmxlICYgcGFuZWwgZW5hYmxlICovCj4gKwlkd19taXBpX2RzaV9zZXRfbW9kZShk c2ksIE1JUElfRFNJX01PREVfVklERU8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1fbW9k ZV9zdGF0dXMKPiArZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSwKPiArCQkJICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlk Z2UpOwo+ICsJY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGRhdGEgPSBkc2kt PnBsYXRfZGF0YTsKPiArCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9ERV9P SzsKPiArCj4gKwlpZiAocGRhdGEtPm1vZGVfdmFsaWQpCj4gKwkJbW9kZV9zdGF0dXMgPSBwZGF0 YS0+bW9kZV92YWxpZChwZGF0YS0+cHJpdl9kYXRhLCBtb2RlKTsKPiArCj4gKwlyZXR1cm4gbW9k ZV9zdGF0dXM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfYnJpZGdlX2F0dGFj aChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2kg KmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKPiArCj4gKwlpZiAoIWJyaWRnZS0+ZW5jb2Rl cikgewo+ICsJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxuIik7 Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJLyogU2V0IHRoZSBlbmNvZGVyIHR5 cGUgYXMgY2FsbGVyIGRvZXMgbm90IGtub3cgaXQgKi8KPiArCWJyaWRnZS0+ZW5jb2Rlci0+ZW5j b2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9EU0k7Cj4gKwo+ICsJLyogQXR0YWNoIHRoZSBw YW5lbC1icmlkZ2UgdG8gdGhlIGRzaSBicmlkZ2UgKi8KPiArCXJldHVybiBkcm1fYnJpZGdlX2F0 dGFjaChicmlkZ2UtPmVuY29kZXIsIGRzaS0+cGFuZWxfYnJpZGdlLCBicmlkZ2UpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgZHdfbWlwaV9kc2lfYnJpZGdlX2Z1 bmNzID0gewo+ICsJLm1vZGVfc2V0ICAgICA9IGR3X21pcGlfZHNpX2JyaWRnZV9tb2RlX3NldCwK PiArCS5lbmFibGUJICAgICAgPSBkd19taXBpX2RzaV9icmlkZ2VfZW5hYmxlLAo+ICsJLnBvc3Rf ZGlzYWJsZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUsCj4gKwkubW9kZV92YWxp ZCAgID0gZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfdmFsaWQsCj4gKwkuYXR0YWNoCSAgICAgID0g ZHdfbWlwaV9kc2lfYnJpZGdlX2F0dGFjaCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHdf bWlwaV9kc2kgKgo+ICtfX2R3X21pcGlfZHNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCj4gKwkJICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBsYXRf ZGF0YSkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVj dCByZXNldF9jb250cm9sICphcGJfcnN0Owo+ICsJc3RydWN0IGR3X21pcGlfZHNpICpkc2k7Cj4g KwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCWludCByZXQ7Cj4gKwo+ICsJZHNpID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZHNpKQo+ICsJ CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWRzaS0+ZGV2ID0gZGV2Owo+ICsJZHNp LT5wbGF0X2RhdGEgPSBwbGF0X2RhdGE7Cj4gKwo+ICsJaWYgKCFwbGF0X2RhdGEtPnBoeV9vcHMt PmluaXQgfHwgIXBsYXRfZGF0YS0+cGh5X29wcy0+Z2V0X2xhbmVfbWJwcykgewo+ICsJCURSTV9F UlJPUigiUGh5IG5vdCBwcm9wZXJseSBjb25maWd1cmVkXG4iKTsKPiArCQlyZXR1cm4gRVJSX1BU UigtRU5PREVWKTsKPiArCX0KPiArCj4gKwlpZiAoIXBsYXRfZGF0YS0+YmFzZSkgewo+ICsJCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwkJ aWYgKCFyZXMpCj4gKwkJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+ICsKPiArCQlkc2ktPmJh c2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJCWlmIChJU19FUlIoZHNp LT5iYXNlKSkKPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4gKwo+ICsJfSBlbHNlIHsK PiArCQlkc2ktPmJhc2UgPSBwbGF0X2RhdGEtPmJhc2U7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5wY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKPiArCWlmIChJU19FUlIoZHNpLT5wY2xrKSkg ewo+ICsJCXJldCA9IFBUUl9FUlIoZHNpLT5wY2xrKTsKPiArCQlkZXZfZXJyKGRldiwgIlVuYWJs ZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAr CX0KPiArCj4gKwkvKgo+ICsJICogTm90ZSB0aGF0IHRoZSByZXNldCB3YXMgbm90IGRlZmluZWQg aW4gdGhlIGluaXRpYWwgZGV2aWNlIHRyZWUsIHNvCj4gKwkgKiB3ZSBoYXZlIHRvIGJlIHByZXBh cmVkIGZvciBpdCBub3QgYmVpbmcgZm91bmQuCj4gKwkgKi8KPiArCWFwYl9yc3QgPSBkZXZtX3Jl c2V0X2NvbnRyb2xfZ2V0KGRldiwgImFwYiIpOwo+ICsJaWYgKElTX0VSUihhcGJfcnN0KSkgewo+ ICsJCXJldCA9IFBUUl9FUlIoYXBiX3JzdCk7Cj4gKwkJaWYgKHJldCA9PSAtRU5PRU5UKSB7Cj4g KwkJCWFwYl9yc3QgPSBOVUxMOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiVW5h YmxlIHRvIGdldCByZXNldCBjb250cm9sOiAlZFxuIiwgcmV0KTsKPiArCQkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKGFwYl9yc3QpIHsKPiArCQlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKTsKPiArCQlpZiAocmV0KSB7Cj4gKwkJCWRldl9l cnIoZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5jX18pOwo+ICsJCQly ZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJCX0KPiArCj4gKwkJcmVzZXRfY29udHJvbF9hc3NlcnQo YXBiX3JzdCk7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7Cj4gKwkJcmVzZXRfY29udHJvbF9k ZWFzc2VydChhcGJfcnN0KTsKPiArCj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNs ayk7Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiArCj4gKwlkc2ktPmRz aV9ob3N0Lm9wcyA9ICZkd19taXBpX2RzaV9ob3N0X29wczsKPiArCWRzaS0+ZHNpX2hvc3QuZGV2 ID0gZGV2Owo+ICsJcmV0ID0gbWlwaV9kc2lfaG9zdF9yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQ SSBob3N0OiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsK PiArCWRzaS0+YnJpZGdlLmRyaXZlcl9wcml2YXRlID0gZHNpOwo+ICsJZHNpLT5icmlkZ2UuZnVu Y3MgPSAmZHdfbWlwaV9kc2lfYnJpZGdlX2Z1bmNzOwo+ICsjaWZkZWYgQ09ORklHX09GCj4gKwlk c2ktPmJyaWRnZS5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gKyNlbmRpZgo+ICsKPiAr CWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRzaSk7Cj4gKwo+ICsJcmV0dXJuIGRzaTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgX19kd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpCj4gK3sKPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkc2ktPmRldik7Cj4gK30KPiArCj4gKy8q Cj4gKyAqIFByb2JlL3JlbW92ZSBBUEksIHVzZWQgZnJvbSBwbGF0Zm9ybXMgYmFzZWQgb24gdGhl IERSTSBicmlkZ2UgQVBJLgo+ICsgKi8KPiAraW50IGR3X21pcGlfZHNpX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4gKwkJICAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNp X3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsK PiArCj4gKwlkc2kgPSBfX2R3X21pcGlfZHNpX3Byb2JlKHBkZXYsIHBsYXRfZGF0YSk7Cj4gKwlp ZiAoSVNfRVJSKGRzaSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZHNpKTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV9wcm9iZSk7Cj4gKwo+ICt2 b2lkIGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp Owo+ICsKPiArCW1pcGlfZHNpX2hvc3RfdW5yZWdpc3RlcigmZHNpLT5kc2lfaG9zdCk7Cj4gKwo+ ICsJX19kd19taXBpX2RzaV9yZW1vdmUoZHNpKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChk d19taXBpX2RzaV9yZW1vdmUpOwo+ICsKPiArLyoKPiArICogQmluZC91bmJpbmQgQVBJLCB1c2Vk IGZyb20gcGxhdGZvcm1zIGJhc2VkIG9uIHRoZSBjb21wb25lbnQgZnJhbWV3b3JrLgo+ICsgKi8K PiAraW50IGR3X21pcGlfZHNpX2JpbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJCSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlf ZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aTsKPiArCWludCByZXQ7Cj4gKwo+ICsJZHNpID0gX19kd19taXBpX2RzaV9wcm9iZShwZGV2LCBw bGF0X2RhdGEpOwo+ICsJaWYgKElTX0VSUihkc2kpKQo+ICsJCXJldHVybiBQVFJfRVJSKGRzaSk7 Cj4gKwo+ICsJcmV0ID0gZHJtX2JyaWRnZV9hdHRhY2goZW5jb2RlciwgJmRzaS0+YnJpZGdlLCBO VUxMKTsKPiArCWlmIChyZXQpIHsKPiArCQlkd19taXBpX2RzaV9yZW1vdmUocGRldik7Cj4gKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBicmlkZ2Ugd2l0aCBkcm1cbiIpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJP TF9HUEwoZHdfbWlwaV9kc2lfYmluZCk7Cj4gKwo+ICt2b2lkIGR3X21pcGlfZHNpX3VuYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2 X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJX19kd19taXBpX2RzaV9yZW1vdmUoZHNpKTsKPiAr fQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV91bmJpbmQpOwo+ICsKPiArTU9EVUxF X0FVVEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKPiArTU9EVUxFX0FV VEhPUigiUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJEVyBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7Cj4gK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkdy1taXBpLWRz aSIpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaCBiL2lu Y2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi45YjMwZmVjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvZHJt L2JyaWRnZS9kd19taXBpX2RzaS5oCj4gQEAgLTAsMCArMSwzOSBAQAo+ICsvKgo+ICsgKiBDb3B5 cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3Cj4gKyAqCj4gKyAqIEF1dGhvcnM6 IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Cj4gKyAqICAgICAgICAgIFlh bm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Cj4gKyAqCj4gKyAqIExpY2Vuc2Ug dGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyCj4gKyAq Lwo+ICsKPiArI2lmbmRlZiBfX0RXX01JUElfRFNJX18KPiArI2RlZmluZSBfX0RXX01JUElfRFNJ X18KPiArCj4gK3N0cnVjdCBkd19taXBpX2RzaV9waHlfb3BzIHsKPiArCWludCAoKmluaXQpKHZv aWQgKnByaXZfZGF0YSk7Cj4gKwlpbnQgKCpnZXRfbGFuZV9tYnBzKSh2b2lkICpwcml2X2RhdGEs IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkgICAgIHVuc2lnbmVkIGxvbmcg bW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIgZm9ybWF0LAo+ICsJCQkgICAgIHVuc2lnbmVkIGlu dCAqbGFuZV9tYnBzKTsKPiArfTsKPiArCj4gK3N0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEg ewo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJdW5zaWduZWQgaW50IG1heF9kYXRhX2xhbmVz Owo+ICsKPiArCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92YWxpZCkodm9pZCAqcHJpdl9k YXRhLAo+ICsJCQkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKPiAr Cj4gKwljb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyAqcGh5X29wczsKPiArCj4gKwl2 b2lkICpwcml2X2RhdGE7Cj4gK307Cj4gKwo+ICtpbnQgZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQkgICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9k c2lfcGxhdF9kYXRhICpwbGF0X2RhdGEpOwo+ICt2b2lkIGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKPiAraW50IGR3X21pcGlfZHNpX2JpbmQoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJ CSAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKTsKPiAr dm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KTsKPiArCj4gKyNlbmRp ZiAvKiBfX0RXX01JUElfRFNJX18gKi8KPiAKCi0tIApRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRl ciwgSW5jLiBpcyBhIG1lbWJlciBvZiBDb2RlIEF1cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0 aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: architt@codeaurora.org (Archit Taneja) Date: Wed, 12 Jul 2017 11:35:07 +0530 Subject: [PATCH v5 4/7] drm/bridge/synopsys: Add MIPI DSI host controller bridge In-Reply-To: <1499071287-10414-5-git-send-email-philippe.cornu@st.com> References: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> <1499071287-10414-5-git-send-email-philippe.cornu@st.com> Message-ID: <0145b068-c28e-3664-86ae-0561c1da8eb5@codeaurora.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 07/03/2017 02:11 PM, Philippe CORNU wrote: > Add a Synopsys Designware MIPI DSI host DRM bridge driver, based on the > Rockchip version from rockchip/dw-mipi-dsi.c with phy & bridge APIs. > The patch looks good now. One thing that needs to be updated is to make drm_bridge_add() not return anything. The later patches in the series would be dependent on this patch, right? Since the ST patches go via drm-misc too, we could either push all these together, or I could push the bridge driver to drm-misc-next, and the ST patches can be pushed after. Any preference? If not, I'll do the latter. Archit > Signed-off-by: Philippe CORNU > --- > drivers/gpu/drm/bridge/synopsys/Kconfig | 6 + > drivers/gpu/drm/bridge/synopsys/Makefile | 2 + > drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c | 979 ++++++++++++++++++++++++++ > include/drm/bridge/dw_mipi_dsi.h | 39 + > 4 files changed, 1026 insertions(+) > create mode 100644 drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > create mode 100644 include/drm/bridge/dw_mipi_dsi.h > > diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig b/drivers/gpu/drm/bridge/synopsys/Kconfig > index 40d2827..f00ee26 100644 > --- a/drivers/gpu/drm/bridge/synopsys/Kconfig > +++ b/drivers/gpu/drm/bridge/synopsys/Kconfig > @@ -21,3 +21,9 @@ config DRM_DW_HDMI_I2S_AUDIO > help > Support the I2S Audio interface which is part of the Synopsys > Designware HDMI block. > + > +config DRM_DW_MIPI_DSI > + tristate > + select DRM_KMS_HELPER > + select DRM_MIPI_DSI > + select DRM_PANEL_BRIDGE > diff --git a/drivers/gpu/drm/bridge/synopsys/Makefile b/drivers/gpu/drm/bridge/synopsys/Makefile > index 17aa7a6..5f57d36 100644 > --- a/drivers/gpu/drm/bridge/synopsys/Makefile > +++ b/drivers/gpu/drm/bridge/synopsys/Makefile > @@ -3,3 +3,5 @@ > obj-$(CONFIG_DRM_DW_HDMI) += dw-hdmi.o > obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw-hdmi-ahb-audio.o > obj-$(CONFIG_DRM_DW_HDMI_I2S_AUDIO) += dw-hdmi-i2s-audio.o > + > +obj-$(CONFIG_DRM_DW_MIPI_DSI) += dw-mipi-dsi.o > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > new file mode 100644 > index 0000000..406000e > --- /dev/null > +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c > @@ -0,0 +1,979 @@ > +/* > + * Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd > + * Copyright (C) STMicroelectronics SA 2017 > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * Modified by Philippe Cornu > + * This generic Synopsys DesignWare MIPI DSI host driver is based on the > + * Rockchip version from rockchip/dw-mipi-dsi.c with phy & bridge APIs. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include