From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [[RFC]DPU PATCH 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 13 Apr 2018 10:53:00 +0530 Message-ID: <1523596981-18913-2-git-send-email-spanda@codeaurora.org> References: <1523596981-18913-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523596981-18913-1-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sandeep Panda , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRJJ3Mgc242NWRzaTg2IGRzaTJlZHAgYnJpZGdlIGNoaXAuClRoZSBj aGlwIGNvbnZlcnRzIERTSSB0cmFuc21pdHRlZCBzaWduYWwgdG8gZURQIHNpZ25hbCwKd2hpY2gg aXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgoKVGhpcyBjaGlwIGNhbiBiZSBjb250 cm9sbGVkIHZpYSBlaXRoZXIgaTJjIGludGVyZmFjZSBvcgpkc2kgaW50ZXJmYWNlLiBDdXJyZW50 bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKYXJlIGJlaW5nIGFjY2Vzc2Vk IHRocm91Z2ggaTJjIGludGVyZmFjZSBvbmx5LgpBbHNvIGFzIG9mIG5vdyBIUEQgc3VwcG9ydCBo YXMgbm90IGJlZW4gYWRkZWQgdG8gYnJpZGdlCmNoaXAgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTog U2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvdGktc242NWRzaTg2LmMgfCAxMDE5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45M2FhMWFkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1z bjY1ZHNpODYuYwpAQCAtMCwwICsxLDEwMTkgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgIiVzOiAiIGZtdCwgX19mdW5jX18K KworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1 ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVk ZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVs cGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorCisjZGVmaW5lIFNOX0RFVklD RV9SRVZfUkVHIDB4MDgKKworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8K KyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHIDB4MEEKKyNkZWZpbmUgU05fRFNJX0xBTkVTX1JF RyAweDEwCisjZGVmaW5lIFNOX0RTSUFfQ0xLX0ZSRVFfUkVHIDB4MTIKKyNkZWZpbmUgU05fRU5I X0ZSQU1FX1JFRyAweDVBCisjZGVmaW5lIFNOX1NTQ19DT05GSUdfUkVHIDB4OTMKKyNkZWZpbmUg U05fREFUQVJBVEVfQ09ORklHX1JFRyAweDk0CisjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHIDB4 MEQKKyNkZWZpbmUgU05fU0NSQU1CTEVfQ09ORklHX1JFRyAweDk1CisjZGVmaW5lIFNOX0FVWF9X REFUQTBfUkVHIDB4NjQKKyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHIDB4NzQKKyNkZWZp bmUgU05fQVVYX0FERFJfMTVfOF9SRUcgMHg3NQorI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVH IDB4NzYKKyNkZWZpbmUgU05fQVVYX0xFTkdUSF9SRUcgMHg3NworI2RlZmluZSBTTl9BVVhfQ01E X1JFRyAweDc4CisjZGVmaW5lIFNOX01MX1RYX01PREVfUkVHIDB4OTYKKyNkZWZpbmUgU05fUEFH RV9TRUxFQ1RfUkVHIDB4RkYKKyNkZWZpbmUgU05fQVVYX1JEQVRBMF9SRUcgMHg3OQorCisvKiB2 aWRlbyBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVf TElORV9MRU5HVEhfTE9XX1JFRyAweDIwCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5H VEhfSElHSF9SRUcgMHgyMQorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xP V19SRUcgMHgyNAorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVH IDB4MjUKKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcgMHgyQworI2Rl ZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcgMHgyRAorI2RlZmluZSBTTl9D SEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRyAweDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19Q VUxTRV9XSURUSF9ISUdIX1JFRyAweDMxCisjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tf UE9SQ0hfUkVHIDB4MzQKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHIDB4 MzYKKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHIDB4MzgKKyNkZWZp bmUgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRyAweDNBCisjZGVmaW5lIFNOX0RBVEFf Rk9STUFUX1JFRyAweDVCCisjZGVmaW5lIFNOX0NPTE9SX0JBUl9DT05GSUdfUkVHIDB4M0MKKwor c3RydWN0IHNuNjVkc2k4Nl9yZWdfY2ZnIHsKKwl1OCByZWc7CisJdTggdmFsOworCWludCBzbGVl cF9pbl9tczsKK307CisKK3N0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnIHsKKwl1MzIgaF9hY3Rp dmU7CisJdTMyIGhfZnJvbnRfcG9yY2g7CisJdTMyIGhfcHVsc2Vfd2lkdGg7CisJdTMyIGhfYmFj a19wb3JjaDsKKwlib29sIGhfcG9sYXJpdHk7CisJdTMyIHZfYWN0aXZlOworCXUzMiB2X2Zyb250 X3BvcmNoOworCXUzMiB2X3B1bHNlX3dpZHRoOworCXUzMiB2X2JhY2tfcG9yY2g7CisJYm9vbCB2 X3BvbGFyaXR5OworCXUzMiBwY2xrX2toejsKKwl1MzIgbnVtX29mX2xhbmVzOworfTsKKworc3Ry dWN0IHNuNjVkc2k4Nl9ncGlvcyB7CisJc3RydWN0IGdwaW9fZGVzYyAqaXJxX2dwaW87CisJc3Ry dWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqYXV4X2kyY19z ZGE7CisJc3RydWN0IGdwaW9fZGVzYyAqYXV4X2kyY19zY2w7CisJc3RydWN0IGdwaW9fZGVzYyAq ZWRwX2JpYXNfZW47CisJc3RydWN0IGdwaW9fZGVzYyAqZWRwX2JrbHRfZW47CisJc3RydWN0IGdw aW9fZGVzYyAqZWRwX2JrbHRfY3RybDsKK307CisKK3N0cnVjdCBzbjY1ZHNpODYgeworCXN0cnVj dCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0IGRybV9j b25uZWN0b3IgY29ubmVjdG9yOworCisJc3RydWN0IGRldmljZV9ub2RlICpob3N0X25vZGU7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCisJdTggaTJjX2FkZHI7CisJaW50IGlycTsK KworCXN0cnVjdCBzbjY1ZHNpODZfZ3Bpb3MgZ3Bpb3M7CisKKwl1bnNpZ25lZCBpbnQgbnVtX3N1 cHBsaWVzOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKKworCXN0cnVj dCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBj b25uZWN0b3Jfc3RhdHVzOworCWJvb2wgcG93ZXJfb247CisKKwlib29sIGlzX3BsdWdnYWJsZTsK Kwl1MzIgbnVtX29mX21vZGVzOworCXN0cnVjdCBsaXN0X2hlYWQgbW9kZV9saXN0OworCXN0cnVj dCBlZGlkICplZGlkOworCisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgY3Vycl9tb2RlOworCXN0 cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnIHZpZGVvX2NmZzsKK307CisKK3N0cnVjdCBzbjY1ZHNp ODZfcmVnX2NmZyBjZmdfcHJvdG9fMF9pbml0W10gPSB7CisJe1NOX1JFRkNMS19GUkVRX1JFRywg MHgwMiwgMHgwfSwKKwl7U05fRFNJX0xBTkVTX1JFRywgMHgyNiwgMHgxNH0sCisJe1NOX0RTSUFf Q0xLX0ZSRVFfUkVHLCAweDdCLCAweDB9LAorCXtTTl9FTkhfRlJBTUVfUkVHLCAweDA1LCAweDB9 LAorCXtTTl9TU0NfQ09ORklHX1JFRywgMHgzMCwgMHgwfSwKKwl7U05fREFUQVJBVEVfQ09ORklH X1JFRywgMHg4MCwgMHgwfSwKKwl7U05fUExMX0VOQUJMRV9SRUcsIDB4MDEsIDB4MH0sCisJe1NO X1NDUkFNQkxFX0NPTkZJR19SRUcsIDB4MDAsIDB4MH0sCisJe1NOX0FVWF9XREFUQTBfUkVHLCAw eDAxLCAweDB9LAorCXtTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDAsIDB4MH0sCisJe1NOX0FV WF9BRERSXzE1XzhfUkVHLCAweDAxLCAweDB9LAorCXtTTl9BVVhfQUREUl83XzBfUkVHLCAweDBB LCAweDB9LAorCXtTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSwgMHgwfSwKKwl7U05fQVVYX0NNRF9S RUcsIDB4ODEsIDB4MTR9LAorCXtTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSwgMHgxNH0sCisJe1NO X1BBR0VfU0VMRUNUX1JFRywgMHgxNCwgMHgwfSwKKwl7U05fQ0hBX0FDVElWRV9MSU5FX0xFTkdU SF9MT1dfUkVHLCAweDcwLCAweDB9LAorCXtTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJR0hf UkVHLCAweDA4LCAweDB9LAorCXtTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcs IDB4QTAsIDB4MH0sCisJe1NOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcsIDB4 MDUsIDB4MH0sCisJe1NOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLCAweDIwLCAweDB9 LAorCXtTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsIDB4ODAsIDB4MH0sCisJe1NO X0NIQV9WU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLCAweDBBLCAweDB9LAorCXtTTl9DSEFfVlNZ TkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsIDB4ODAsIDB4MH0sCisJe1NOX0NIQV9IT1JJWk9OVEFM X0JBQ0tfUE9SQ0hfUkVHLCAweDUwLCAweDB9LAorCXtTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JD SF9SRUcsIDB4MUIsIDB4MH0sCisJe1NOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRywg MHgzMCwgMHgwfSwKKwl7U05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywgMHgwMywgMHgw fSwKKwl7U05fREFUQV9GT1JNQVRfUkVHLCAweDAwLCAweDB9LAorCXtTTl9DT0xPUl9CQVJfQ09O RklHX1JFRywgMHgwMCwgMHgxNH0sCisJe1NOX0VOSF9GUkFNRV9SRUcsIDB4MEQsIDB4MH0sCit9 OworCitzdGF0aWMgaW50IHNuNjVkc2k4Nl93cml0ZShzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSwg dTggcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5p MmNfY2xpZW50OworCXU4IGJ1ZlsyXSA9IHtyZWcsIHZhbH07CisJc3RydWN0IGkyY19tc2cgbXNn ID0geworCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiA9IDIs CisJCS5idWYgPSBidWYsCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVy LCAmbXNnLCAxKSA8IDEpIHsKKwkJcHJfZXJyKCJpMmMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0 dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X3Jl YWQoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsIHU4IHJlZywgY2hhciAqYnVmLCB1MzIgc2l6ZSkK K3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7CisJc3Ry dWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJ CS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSAmcmVnLAorCQl9LAorCQl7CisJ CQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmxlbiA9 IHNpemUsCisJCQkuYnVmID0gYnVmLAorCQl9CisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIoY2xp ZW50LT5hZGFwdGVyLCBtc2csIDIpICE9IDIpIHsKKwkJcHJfZXJyKCJpMmMgcmVhZCBmYWlsZWRc biIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBz bjY1ZHNpODZfd3JpdGVfYXJyYXkoc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEsCisJc3RydWN0IHNu NjVkc2k4Nl9yZWdfY2ZnICpjZmcsIGludCBzaXplKQoreworCWludCByZXQgPSAwOworCWludCBp OworCisJc2l6ZSA9IHNpemUgLyBzaXplb2Yoc3RydWN0IHNuNjVkc2k4Nl9yZWdfY2ZnKTsKKwlm b3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXJldCA9IHNuNjVkc2k4Nl93cml0ZShwZGF0 YSwgY2ZnW2ldLnJlZywgY2ZnW2ldLnZhbCk7CisKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwcl9l cnIoInJlZyB3cml0ZXMgZmFpbGVkLiBMYXN0IHdyaXRlICUwMlggdG8gJTAyWFxuIiwKKwkJCQlj ZmdbaV0udmFsLCBjZmdbaV0ucmVnKTsKKwkJCWdvdG8gd19yZWdzX2ZhaWw7CisJCX0KKworCQlp ZiAoY2ZnW2ldLnNsZWVwX2luX21zKQorCQkJbXNsZWVwKGNmZ1tpXS5zbGVlcF9pbl9tcyk7CisJ fQorCit3X3JlZ3NfZmFpbDoKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiZXhpdGluZyB3aXRo IHJldCA9ICVkIGFmdGVyICVkIHdyaXRlc1xuIiwgcmV0LCBpKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShzdHJ1Y3Qgc242NWRzaTg2 ICpwZGF0YSwgYm9vbCBvbikKK3sKKwlpbnQgdmFsdWU7CisKKwl2YWx1ZSA9IG9uID8gMTogMDsK KworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+Z3Bpb3MuZW5hYmxlX2dwaW8sIHZhbHVlKTsKKwln cGlvZF9zZXRfdmFsdWUocGRhdGEtPmdwaW9zLmF1eF9pMmNfc2RhLCB2YWx1ZSk7CisJZ3Bpb2Rf c2V0X3ZhbHVlKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NjbCwgdmFsdWUpOworCWdwaW9kX3NldF92 YWx1ZShwZGF0YS0+Z3Bpb3MuZWRwX2JpYXNfZW4sIHZhbHVlKTsKKwlncGlvZF9zZXRfdmFsdWUo cGRhdGEtPmdwaW9zLmVkcF9ia2x0X2VuLCB2YWx1ZSk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRh LT5ncGlvcy5pcnFfZ3BpbywgdmFsdWUpOworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+Z3Bpb3Mu ZWRwX2JrbHRfY3RybCwgdmFsdWUpOworCisJcHJfZGVidWcoImNvbmZpZyB0bzogJWRcbiIsIHZh bHVlKTsKK30KKworc3RhdGljIHZvaWQgc242NWRzaTg2X3Bvd2VyX2N0cmwoc3RydWN0IHNuNjVk c2k4NiAqcGRhdGEsIGJvb2wgZW5hYmxlKQoreworCWlmICghcGRhdGEpCisJCXJldHVybjsKKwor CWlmICghcGRhdGEtPnBvd2VyX29uICYmIGVuYWJsZSkgeworCQlzbjY1ZHNpODZfZ3Bpb19jb25m aWd1cmUocGRhdGEsIHRydWUpOworCisJCWlmIChyZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEt Pm51bV9zdXBwbGllcywKKwkJCQkJCXBkYXRhLT5zdXBwbGllcykpIHsKKwkJCXByX2VycigiYnJp ZGdlIHJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlwZGF0 YS0+cG93ZXJfb24gPSB0cnVlOworCX0gZWxzZSBpZiAocGRhdGEtPnBvd2VyX29uICYmICFlbmFi bGUpIHsKKwkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0 YS0+c3VwcGxpZXMpOworCisJCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgZmFsc2Up OworCQlwZGF0YS0+cG93ZXJfb24gPSBmYWxzZTsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygidW5u ZWNlc3NhcnkgY2FsbCB0byBwb3dlciBjb250cm9sXG4iKTsKKwl9Cit9CisKKy8qIENvbm5lY3Rv ciBmdW5jcyAqLworc3RhdGljIHN0cnVjdCBzbjY1ZHNpODYgKmNvbm5lY3Rvcl90b19zbjY1ZHNp ODYoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGNvbm5lY3Rvciwgc3RydWN0IHNuNjVkc2k4NiwgY29ubmVjdG9yKTsKK30KKworc3RhdGlj IGludCBzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLAorCQkJ CSAgdTggY21kLCB1OCBhZGRyLCB1OCBsZW5ndGgsIGludCB3X2RhdGEpCit7CisJdTggcmVhZCA9 IDA7CisJaW50IHJldHJ5X2NudCA9IDEwOworCisJc242NWRzaTg2X3dyaXRlKHBkYXRhLCBTTl9B VVhfQ01EX1JFRywgKGNtZCA8PCA0KSk7CisJc242NWRzaTg2X3dyaXRlKHBkYXRhLCBTTl9BVVhf QUREUl83XzBfUkVHLCBhZGRyKTsKKwlzbjY1ZHNpODZfd3JpdGUocGRhdGEsIFNOX0FVWF9MRU5H VEhfUkVHLCBsZW5ndGgpOworCWlmICh3X2RhdGEgPj0gMCkKKwkJc242NWRzaTg2X3dyaXRlKHBk YXRhLCBTTl9BVVhfV0RBVEEwX1JFRywgKHU4KXdfZGF0YSk7CisKKwkvKiBzZXQgU0VORCBiaXQg Ki8KKwlzbjY1ZHNpODZfcmVhZChwZGF0YSwgU05fQVVYX0NNRF9SRUcsICZyZWFkLCAxKTsKKwly ZWFkIHw9IEJJVCgwKTsKKwlzbjY1ZHNpODZfd3JpdGUocGRhdGEsIFNOX0FVWF9DTURfUkVHLCBy ZWFkKTsKKworCS8qIHBvbGwgZm9yIGJyaWRnZSB0byBhY2sgU0VORCBiaXQgKi8KKwl3aGlsZSAo cmV0cnlfY250KSB7CisJCXNuNjVkc2k4Nl9yZWFkKHBkYXRhLCBTTl9BVVhfQ01EX1JFRywgJnJl YWQsIDB4MSk7CisJCWlmICghKHJlYWQgJiBCSVQoMCkpKQorCQkJYnJlYWs7CisJCXJldHJ5X2Nu dC0tOworCQl1ZGVsYXkoMTAwMCk7CisJfQorCisJaWYgKCFyZXRyeV9jbnQpIHsKKwkJcHJfZXJy KCJhdXhfY21kIHRyYW5zZmVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbjY1ZHNpODZfcmVhZF9lZGlkKHN0cnVjdCBzbjY1 ZHNpODYgKnBkYXRhLCB1OCAqYnVmKQoreworCWludCBpID0gMDsKKwl1OCBhZGRyID0gU05fQVVY X1JEQVRBMF9SRUc7CisJdTggKmRhdGEgPSBidWY7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybiAt RU5PTUVNOworCisJaWYgKHNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NCwgMHg1MCwg MHgwLCAtMSkgfHwKKwkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg0LCAweDUwLCAw eDAxLCAweDApIHx8CisJCXNuNjVkc2k4Nl9zZW5kX2F1eF9jbWQocGRhdGEsIDB4NSwgMHg1MCwg MHgwLCAtMSkgfHwKKwkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg1LCAweDUwLCAw eDEwLCAtMSkpCisJCWdvdG8gZXJyb3I7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewor CQlpZiAoc242NWRzaTg2X3JlYWQocGRhdGEsIGFkZHIsIGRhdGEsIDB4MSkpCisJCQlnb3RvIGVy cm9yOworCQlhZGRyKys7CisJCWRhdGErKzsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXBy X2VycigiZWRpZCByZWFkIG92ZXIgaTJjIGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9 CisKK3N0YXRpYyBpbnQgc242NWRzaTg2X3JlYWRfZWRpZF9ibG9jayhzdHJ1Y3Qgc242NWRzaTg2 ICpwZGF0YSwKKwkJCSAgICAgICB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYmxvY2spCit7CisJaWYg KGJsb2NrID09IDApIHsKKwkJaWYgKHNuNjVkc2k4Nl9yZWFkX2VkaWQocGRhdGEsIGJ1ZikpCisJ CQlnb3RvIGVycm9yOworCX0gZWxzZSBpZiAoYmxvY2sgPT0gMSkgeworCQkvKiBtb3ZlIHNlZ21l bnQgcG9pbnRlciAqLworCQlpZiAoc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg0LCAw eDMwLCAweDAsIC0xKSB8fAorCQkJc242NWRzaTg2X3NlbmRfYXV4X2NtZChwZGF0YSwgMHg0LCAw eDMwLCAweDAxLCAweDEpIHx8CisJCQlzbjY1ZHNpODZfc2VuZF9hdXhfY21kKHBkYXRhLCAweDAs IDB4MzAsIDB4MDAsIC0xKSkKKwkJCWdvdG8gZXJyb3I7CisJCWVsc2UKKwkJCWlmIChzbjY1ZHNp ODZfcmVhZF9lZGlkKHBkYXRhLCBidWYpKQorCQkJCWdvdG8gZXJyb3I7CisJfSBlbHNlIHsKKwkJ cHJfZGVidWcoInVuc3VwcG9ydGVkIGVkaWQgYmxvY2tcbiIpOworCQlnb3RvIGVycm9yOworCX0K KworCXJldHVybiAwOworZXJyb3I6CisJcHJfZXJyKCJlZGlkIGJsb2NrIHJlYWQgZmFpbGVkXG4i KTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBzbjY1ZHNpODZfZ2V0X2VkaWRf YmxvY2sodm9pZCAqZGF0YSwgdTggKmJ1ZiwgdW5zaWduZWQgaW50IGJsb2NrLAorCQkJCSAgc2l6 ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSA9IGRhdGE7CisJaW50IHJldCA9 IDA7CisKKwlwcl9kZWJ1ZygiZ2V0IGVkaWQgYmxvY2s6IGJsb2NrPSVkLCBsZW49JWRcbiIsIGJs b2NrLCAoaW50KWxlbik7CisKKwlpZiAobGVuID4gMTI4IHx8IGJsb2NrID4gMSkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwlyZXQgPSBzbjY1ZHNpODZfcmVhZF9lZGlkX2Jsb2NrKHBkYXRhLCBidWYs IGJsb2NrKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiZWRpZCByZWFkIGZhaWxlZCBmb3IgYmxv Y2s6ICVkIHJldDogJWRcbiIsIGJsb2NrLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9jb25uZWN0b3JfZ2V0X21vZGVzKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRh dGEgPSBjb25uZWN0b3JfdG9fc242NWRzaTg2KGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUsICptOworCisJaWYgKHBkYXRhLT5lZGlkKQorCQlyZXR1cm4gZHJtX2Fk ZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgcGRhdGEtPmVkaWQpOworCisJc242NWRzaTg2X3Bvd2Vy X2N0cmwocGRhdGEsIHRydWUpOworCWlmIChwZGF0YS0+aXNfcGx1Z2dhYmxlKSB7CisJCXBkYXRh LT5lZGlkID0gZHJtX2RvX2dldF9lZGlkKGNvbm5lY3RvciwKKwkJCQlzbjY1ZHNpODZfZ2V0X2Vk aWRfYmxvY2ssIHBkYXRhKTsKKworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJv cGVydHkoY29ubmVjdG9yLCBwZGF0YS0+ZWRpZCk7CisJCXBkYXRhLT5udW1fb2ZfbW9kZXMgPSBk cm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLAorCQkJCQkJCQlwZGF0YS0+ZWRpZCk7CisJfQor CisJaWYgKCFwZGF0YS0+aXNfcGx1Z2dhYmxlIHx8ICFwZGF0YS0+bnVtX29mX21vZGVzKSB7CisJ CS8qCisJCSAqIGlmIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IEhQRCBvciBkdWUgdG8gc29tZSBy ZWFzb24KKwkJICogRURJRCByZWFkIGZhaWxlZCB0aGVuIGZhbGwgYmFjayB0byBtb2RlX2xpc3Qg d2hpY2ggaXMKKwkJICogYWxyZWFkeSBwYXJzZWQgZnJvbSBkdCBpZiBhbnkuCisJCSAqLworCQls aXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZwZGF0YS0+bW9kZV9saXN0LCBoZWFkKSB7CisJCQlt ID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LCBtb2RlKTsKKwkJCWlmICghbSkg eworCQkJCXByX2VycigiZmFpbGVkIHRvIGdldCBtb2RlICVkeCVkXG4iLAorCQkJCQltb2RlLT5o ZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQkJCWJyZWFrOworCQkJfQorCQkJZHJtX21vZGVf cHJvYmVkX2FkZChjb25uZWN0b3IsIG0pOworCQl9CisJfQorCisJc242NWRzaTg2X3Bvd2VyX2N0 cmwocGRhdGEsIGZhbHNlKTsKKwlyZXR1cm4gcGRhdGEtPm51bV9vZl9tb2RlczsKK30KKworc3Rh dGljIGVudW0gZHJtX21vZGVfc3RhdHVzCitzbjY1ZHNpODZfY29ubmVjdG9yX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBjb25uZWN0b3Jf dG9fc242NWRzaTg2KGNvbm5lY3Rvcik7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm07CisK KwlpZiAocGRhdGEtPmVkaWQpCisJCXJldHVybiBNT0RFX09LOworCisJaWYgKCFwZGF0YS0+aXNf cGx1Z2dhYmxlKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkobSwgJnBkYXRhLT5tb2RlX2xpc3Qs IGhlYWQpIHsKKwkJCWlmIChtLT5oZGlzcGxheSA9PSBtb2RlLT5oZGlzcGxheSAmJgorCQkJCW0t PnZkaXNwbGF5ID09IG1vZGUtPnZkaXNwbGF5KQorCQkJCXJldHVybiBNT0RFX09LOworCQl9CisJ fQorCisJcmV0dXJuIE1PREVfQkFEOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzIHNuNjVkc2k4Nl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRf bW9kZXMgPSBzbjY1ZHNpODZfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHNu NjVkc2k4Nl9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25u ZWN0b3Jfc3RhdHVzCitzbjY1ZHNpODZfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRh ID0gY29ubmVjdG9yX3RvX3NuNjVkc2k4Nihjb25uZWN0b3IpOworCisJcGRhdGEtPmNvbm5lY3Rv cl9zdGF0dXMgPSBwZGF0YS0+cG93ZXJfb24gPworCQljb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3Rl ZCA6IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJcmV0dXJuIHBkYXRhLT5jb25u ZWN0b3Jfc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVu Y3Mgc242NWRzaTg2X2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxw ZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gc242NWRzaTg2X2Nv bm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLnJl c2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGlj YXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVz dHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc242NWRzaTg2ICpicmlkZ2VfdG9fc242 NWRzaTg2KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihicmlkZ2UsIHN0cnVjdCBzbjY1ZHNpODYsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgc242 NWRzaTg2X3JlYWRfZGV2aWNlX3JldihzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YSkKK3sKKwl1OCBy ZXYgPSAwOworCWludCByZXQgPSAwOworCisJcmV0ID0gc242NWRzaTg2X3JlYWQocGRhdGEsIFNO X0RFVklDRV9SRVZfUkVHLCAmcmV2LCAxKTsKKworCWlmICghcmV0KSB7CisJCWlmIChyZXYgPT0g MHgyKSB7CisJCQlwcl9pbmZvKCJTTjY1RFNJODYgcmV2aXNpb24gaWQ6IDB4JXhcbiIsIHJldik7 CisJCX0gZWxzZSB7CisJCQlwcl93YXJuKCJTTjY1RFNJODYgcmV2aXNpb24gaWQgbWlzbWF0Y2hc biIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpcnFyZXR1cm5fdCBzbjY1ZHNpODZfaXJxX3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZv aWQgKmRldl9pZCkKK3sKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBjb25zdCBj aGFyICogY29uc3Qgc242NWRzaTg2X3N1cHBseV9uYW1lc1tdID0geworCSJ2Y2NpbyIsCisJInZj Y2EiLAorCSJ2Y2NzIgorfTsKKworc3RhdGljIGludCBzbjY1ZHNpODZfaW5pdF9yZWd1bGF0b3Jz KHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhKQoreworCWNvbnN0IGNoYXIgKiBjb25zdCAqc3VwcGx5 X25hbWVzOworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlzdXBwbHlfbmFtZXMgPSBz bjY1ZHNpODZfc3VwcGx5X25hbWVzOworCXBkYXRhLT5udW1fc3VwcGxpZXMgPSBBUlJBWV9TSVpF KHNuNjVkc2k4Nl9zdXBwbHlfbmFtZXMpOworCisJcGRhdGEtPnN1cHBsaWVzID0gZGV2bV9rY2Fs bG9jKHBkYXRhLT5kZXYsIHBkYXRhLT5udW1fc3VwcGxpZXMsCisJCQkJICAgICBzaXplb2YoKnBk YXRhLT5zdXBwbGllcyksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEtPnN1cHBsaWVzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX3N1cHBsaWVzOyBp KyspCisJCXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSBzdXBwbHlfbmFtZXNbaV07CisKKwly ZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LAorCQkJcGRhdGEtPm51bV9z dXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0dXJuIHJlZ3VsYXRvcl9idWxrX2VuYWJsZShwZGF0YS0+bnVtX3N1cHBsaWVzLCBwZGF0YS0+ c3VwcGxpZXMpOworfQorCitzdGF0aWMgaW50IHNuNjVkc2k4Nl9icmlkZ2VfYXR0YWNoKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhID0g YnJpZGdlX3RvX3NuNjVkc2k4NihicmlkZ2UpOworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG1p cGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInNuNjVkc2k4NiIsCisJCQkJCQkg ICAuY2hhbm5lbCA9IDAsCisJCQkJCQkgICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCWlm ICghYnJpZGdlLT5lbmNvZGVyKSB7CisJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0 IG5vdCBmb3VuZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBIUEQgbm90IHN1cHBv cnRlZCAqLworCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0gMDsKKworCXJldCA9IGRybV9jb25u ZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZzbjY1ZHNp ODZfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKKwlpZiAo cmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGgg ZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQo JnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZzbjY1ZHNpODZfY29ubmVjdG9yX2hlbHBlcl9mdW5j cyk7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9y LCBicmlkZ2UtPmVuY29kZXIpOworCisJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9u b2RlKHBkYXRhLT5ob3N0X25vZGUpOworCWlmICghaG9zdCkgeworCQlwcl9lcnIoImZhaWxlZCB0 byBmaW5kIGRzaSBob3N0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZHNpID0gbWlw aV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8pOworCWlmIChJU19FUlIoZHNp KSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7CisJCXJldCA9 IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2RldmljZTsKKwl9CisKKwkvKiBzZXR0aW5n IHRvIDQgbGFuZXMgYWx3YXlzIGZvciBub3cgKi8KKwlkc2ktPmxhbmVzID0gNDsKKwlkc2ktPmZv cm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lf TU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSB8CisJCQkgIE1JUElf RFNJX01PREVfRU9UX1BBQ0tFVCB8IE1JUElfRFNJX01PREVfVklERU9fSFNFOworCisJcmV0ID0g bWlwaV9kc2lfYXR0YWNoKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJfZXJyKCJmYWlsZWQg dG8gYXR0YWNoIGRzaSB0byBob3N0XG4iKTsKKwkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwl9CisK KwlwZGF0YS0+ZHNpID0gZHNpOworCisJcHJfZGVidWcoImJyaWRnZSBhdHRhY2hlZFxuIik7CisK KwlyZXR1cm4gMDsKKworZXJyX2RzaV9hdHRhY2g6CisJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0 ZXIoZHNpKTsKK2Vycl9kc2lfZGV2aWNlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk IHNuNjVkc2k4Nl9zZXRfdmlkZW9fY2ZnKHN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhLAorCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCXN0cnVjdCBzbjY1ZHNpODZfdmlkZW9fY2ZnICp2 aWRlb19jZmcpCit7CisJdmlkZW9fY2ZnLT5oX2FjdGl2ZSA9IG1vZGUtPmhkaXNwbGF5OworCXZp ZGVvX2NmZy0+dl9hY3RpdmUgPSBtb2RlLT52ZGlzcGxheTsKKwl2aWRlb19jZmctPmhfZnJvbnRf cG9yY2ggPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5OworCXZpZGVvX2NmZy0+ dl9mcm9udF9wb3JjaCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7CisJdmlk ZW9fY2ZnLT5oX2JhY2tfcG9yY2ggPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisJ dmlkZW9fY2ZnLT52X2JhY2tfcG9yY2ggPSBtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQ7 CisJdmlkZW9fY2ZnLT5oX3B1bHNlX3dpZHRoID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5 bmNfc3RhcnQ7CisJdmlkZW9fY2ZnLT52X3B1bHNlX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0g bW9kZS0+dnN5bmNfc3RhcnQ7CisJdmlkZW9fY2ZnLT5wY2xrX2toeiA9IG1vZGUtPmNsb2NrOwor CisJdmlkZW9fY2ZnLT5oX3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X1BIU1lOQyk7CisJdmlkZW9fY2ZnLT52X3BvbGFyaXR5ID0gISEobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX1BWU1lOQyk7CisKKwkvKiBzZXR0aW5nIHRvIDQgbGFuZXMgYWx3YXlzIGZvciBu b3cgKi8KKwl2aWRlb19jZmctPm51bV9vZl9sYW5lcyA9IDQ7CisKKwlwcl9kZWJ1ZygidmlkZW89 aFslZCwlZCwlZCwlZF0gdlslZCwlZCwlZCwlZF0gcGNsaz0lZCBsYW5lPSVkXG4iLAorCQl2aWRl b19jZmctPmhfYWN0aXZlLCB2aWRlb19jZmctPmhfZnJvbnRfcG9yY2gsCisJCXZpZGVvX2NmZy0+ aF9wdWxzZV93aWR0aCwgdmlkZW9fY2ZnLT5oX2JhY2tfcG9yY2gsCisJCXZpZGVvX2NmZy0+dl9h Y3RpdmUsIHZpZGVvX2NmZy0+dl9mcm9udF9wb3JjaCwKKwkJdmlkZW9fY2ZnLT52X3B1bHNlX3dp ZHRoLCB2aWRlb19jZmctPnZfYmFja19wb3JjaCwKKwkJdmlkZW9fY2ZnLT5wY2xrX2toeiwgdmlk ZW9fY2ZnLT5udW1fb2ZfbGFuZXMpOworfQorCitzdGF0aWMgdm9pZCBzbjY1ZHNpODZfYnJpZGdl X21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRq X21vZGUpCit7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBicmlkZ2VfdG9fc242NWRzaTg2 KGJyaWRnZSk7CisJc3RydWN0IHNuNjVkc2k4Nl92aWRlb19jZmcgKnZpZGVvX2NmZyA9ICZwZGF0 YS0+dmlkZW9fY2ZnOworCWludCByZXQgPSAwOworCisJcHJfZGVidWcoIm1vZGVfc2V0OiBoZGlz cGxheT0lZCwgdmRpc3BsYXk9JWQsIHZyZWZyZXNoPSVkLCBjbG9jaz0lZFxuIiwKKwkJYWRqX21v ZGUtPmhkaXNwbGF5LCBhZGpfbW9kZS0+dmRpc3BsYXksCisJCWFkal9tb2RlLT52cmVmcmVzaCwg YWRqX21vZGUtPmNsb2NrKTsKKworCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFk al9tb2RlKTsKKworCW1lbXNldCh2aWRlb19jZmcsIDAsIHNpemVvZihzdHJ1Y3Qgc242NWRzaTg2 X3ZpZGVvX2NmZykpOworCXNuNjVkc2k4Nl9zZXRfdmlkZW9fY2ZnKHBkYXRhLCBhZGpfbW9kZSwg dmlkZW9fY2ZnKTsKKworCWlmICh2aWRlb19jZmctPm51bV9vZl9sYW5lcyAhPSBwZGF0YS0+ZHNp LT5sYW5lcykgeworCQltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7CisJCXBkYXRhLT5kc2kt PmxhbmVzID0gdmlkZW9fY2ZnLT5udW1fb2ZfbGFuZXM7CisJCXJldCA9IG1pcGlfZHNpX2F0dGFj aChwZGF0YS0+ZHNpKTsKKwkJaWYgKHJldCkKKwkJCXByX2VycigiZmFpbGVkIHRvIGNoYW5nZSBo b3N0IGxhbmVzXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNuNjVkc2k4Nl9icmlkZ2VfZGlz YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBzbjY1ZHNpODYgKnBk YXRhID0gYnJpZGdlX3RvX3NuNjVkc2k4NihicmlkZ2UpOworCisJc242NWRzaTg2X3Bvd2VyX2N0 cmwocGRhdGEsIGZhbHNlKTsKKwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9ICBjb25uZWN0b3Jf c3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgc242NWRzaTg2X2JyaWRnZV9l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3Qgc242NWRzaTg2ICpw ZGF0YSA9IGJyaWRnZV90b19zbjY1ZHNpODYoYnJpZGdlKTsKKworCXNuNjVkc2k4Nl9wb3dlcl9j dHJsKHBkYXRhLCB0cnVlKTsKKwlwZGF0YS0+Y29ubmVjdG9yX3N0YXR1cyA9ICBjb25uZWN0b3Jf c3RhdHVzX2Nvbm5lY3RlZDsKKwlzbjY1ZHNpODZfd3JpdGVfYXJyYXkocGRhdGEsIGNmZ19wcm90 b18wX2luaXQsCisJCQkgICAgICBzaXplb2YoY2ZnX3Byb3RvXzBfaW5pdCkpOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgc242NWRzaTg2X2JyaWRnZV9mdW5jcyA9 IHsKKwkuYXR0YWNoID0gc242NWRzaTg2X2JyaWRnZV9hdHRhY2gsCisJLmVuYWJsZSA9IHNuNjVk c2k4Nl9icmlkZ2VfZW5hYmxlLAorCS5kaXNhYmxlID0gc242NWRzaTg2X2JyaWRnZV9kaXNhYmxl LAorCS5tb2RlX3NldCA9IHNuNjVkc2k4Nl9icmlkZ2VfbW9kZV9zZXQsCit9OworCitzdGF0aWMg aW50IHNuNjVkc2k4Nl9wYXJzZV9kdF9tb2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJ CQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJCQl1MzIgKm51bV9vZl9tb2RlcykKK3sKKwlp bnQgcmMgPSAwOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXUzMiBtb2RlX2Nv dW50ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOworCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqcm9vdF9ub2RlID0gTlVMTDsKKwl1MzIgaF9mcm9udF9wb3JjaCwgaF9wdWxzZV93 aWR0aCwgaF9iYWNrX3BvcmNoOworCXUzMiB2X2Zyb250X3BvcmNoLCB2X3B1bHNlX3dpZHRoLCB2 X2JhY2tfcG9yY2g7CisJYm9vbCBoX2FjdGl2ZV9oaWdoLCB2X2FjdGl2ZV9oaWdoOworCXUzMiBm bGFncyA9IDA7CisKKwlyb290X25vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgInNuLGN1 c3RvbS1tb2RlcyIpOworCWlmICghcm9vdF9ub2RlKSB7CisJCXJvb3Rfbm9kZSA9IG9mX3BhcnNl X3BoYW5kbGUobnAsICJzbixjdXN0b20tbW9kZXMiLCAwKTsKKwkJaWYgKCFyb290X25vZGUpIHsK KwkJCXByX2luZm8oIk5vIG1vZGVzIHByZXNlbnQgZm9yIHNuLGN1c3RvbS1tb2RlcyIpOworCQkJ Z290byBlbmQ7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHJvb3Rfbm9kZSwg bm9kZSkgeworCQlyYyA9IDA7CisJCW1vZGUgPSBremFsbG9jKHNpemVvZigqbW9kZSksIEdGUF9L RVJORUwpOworCQlpZiAoIW1vZGUpIHsKKwkJCXJjID0gIC1FTk9NRU07CisJCQlnb3RvIGVuZDsK KwkJfQorCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgtYWN0aXZlIiwK KwkJCQkJCSZtb2RlLT5oZGlzcGxheSk7CisKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwg InNuLG1vZGUtaC1mcm9udC1wb3JjaCIsCisJCQkJCQkmaF9mcm9udF9wb3JjaCk7CisJCW9mX3By b3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgtcHVsc2Utd2lkdGgiLAorCQkJCQkJJmhf cHVsc2Vfd2lkdGgpOworCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLWgt YmFjay1wb3JjaCIsCisJCQkJCQkmaF9iYWNrX3BvcmNoKTsKKworCQloX2FjdGl2ZV9oaWdoID0g b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsCisJCQkJCQkic24sbW9kZS1oLWFjdGl2ZS1oaWdo Iik7CisKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1hY3RpdmUiLAor CQkJCQkJJm1vZGUtPnZkaXNwbGF5KTsKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNu LG1vZGUtdi1mcm9udC1wb3JjaCIsCisJCQkJCQkmdl9mcm9udF9wb3JjaCk7CisKKwkJb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgInNuLG1vZGUtdi1wdWxzZS13aWR0aCIsCisJCQkJCQkmdl9w dWxzZV93aWR0aCk7CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLXYtYmFj ay1wb3JjaCIsCisJCQkJCQkmdl9iYWNrX3BvcmNoKTsKKwkJdl9hY3RpdmVfaGlnaCA9IG9mX3By b3BlcnR5X3JlYWRfYm9vbChub2RlLAorCQkJCQkJInNuLG1vZGUtdi1hY3RpdmUtaGlnaCIpOwor CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzbixtb2RlLXJlZnJlc2gtcmF0ZSIsCisJ CQkJCQkmbW9kZS0+dnJlZnJlc2gpOworCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJz bixtb2RlLWNsb2NrLWluLWtoeiIsCisJCQkJCQkmbW9kZS0+Y2xvY2spOworCisJCW1vZGUtPmhz eW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBoX2Zyb250X3BvcmNoOworCQltb2RlLT5oc3lu Y19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIGhfcHVsc2Vfd2lkdGg7CisJCW1vZGUtPmh0b3Rh bCA9IG1vZGUtPmhzeW5jX2VuZCArIGhfYmFja19wb3JjaDsKKwkJbW9kZS0+dnN5bmNfc3RhcnQg PSBtb2RlLT52ZGlzcGxheSArIHZfZnJvbnRfcG9yY2g7CisJCW1vZGUtPnZzeW5jX2VuZCA9IG1v ZGUtPnZzeW5jX3N0YXJ0ICsgdl9wdWxzZV93aWR0aDsKKwkJbW9kZS0+dnRvdGFsID0gbW9kZS0+ dnN5bmNfZW5kICsgdl9iYWNrX3BvcmNoOworCisJCWlmICghbW9kZS0+aHRvdGFsIHx8ICFtb2Rl LT52dG90YWwpIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlm IChoX2FjdGl2ZV9oaWdoKQorCQkJZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CisJCWVs c2UKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCQlpZiAodl9hY3RpdmVfaGln aCkKKwkJCWZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfUFZTWU5DOworCQllbHNlCisJCQlmbGFncyB8 PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJbW9kZS0+ZmxhZ3MgPSBmbGFnczsKKworCQlpZiAo IXJjKSB7CisJCQltb2RlX2NvdW50Kys7CisJCQlsaXN0X2FkZF90YWlsKCZtb2RlLT5oZWFkLCBo ZWFkKTsKKwkJfQorCisJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCisJCXByX2RlYnVnKCJt b2RlWyVzXSBoWyVkLCVkLCVkLCVkXSB2WyVkLCVkLCVkLCVkXSAlZCAleCAlZGtIWlxuIiwKKwkJ CW1vZGUtPm5hbWUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT5oc3luY19zdGFydCwKKwkJCW1vZGUt PmhzeW5jX2VuZCwgbW9kZS0+aHRvdGFsLCBtb2RlLT52ZGlzcGxheSwKKwkJCW1vZGUtPnZzeW5j X3N0YXJ0LCBtb2RlLT52c3luY19lbmQsIG1vZGUtPnZ0b3RhbCwKKwkJCW1vZGUtPnZyZWZyZXNo LCBtb2RlLT5mbGFncywgbW9kZS0+Y2xvY2spOworZmFpbDoKKwkJaWYgKHJjKSB7CisJCQlrZnJl ZShtb2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaWYgKG51bV9vZl9tb2RlcykKKwkJ Km51bV9vZl9tb2RlcyA9IG1vZGVfY291bnQ7CisKK2VuZDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyBpbnQgc242NWRzaTg2X3BhcnNlX2dwaW9zKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJ CQkJCXN0cnVjdCBzbjY1ZHNpODYgKnBkYXRhKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFw ZGF0YSB8fCAhcGRhdGEtPmRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwZGF0YS0+Z3Bpb3Mu ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiZW5hYmxlIiwKKwkJCQkJ CSAgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIocGRhdGEtPmdwaW9zLmVuYWJsZV9ncGlv KSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW8gZnJvbSBEVFxuIik7CisJ CXJldCA9IFBUUl9FUlIocGRhdGEtPmdwaW9zLmVuYWJsZV9ncGlvKTsKKwkJZ290byBleGl0Owor CX0KKworCXBkYXRhLT5ncGlvcy5hdXhfaTJjX3NjbCA9IGRldm1fZ3Bpb2RfZ2V0KHBkYXRhLT5k ZXYsICJhdXgtc2NsIiwKKwkJCQkJCSAgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIocGRh dGEtPmdwaW9zLmF1eF9pMmNfc2NsKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYXV4IHNj bCBncGlvIGZyb20gRFRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJj X3NjbCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwZGF0YS0+Z3Bpb3MuYXV4X2kyY19zZGEgPSBk ZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiYXV4LXNkYSIsCisJCQkJCQkgIEdQSU9EX09VVF9I SUdIKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5ncGlvcy5hdXhfaTJjX3NkYSkpIHsKKwkJcHJfZXJy KCJmYWlsZWQgdG8gZ2V0IGF1eCBzZGEgZ3BpbyBmcm9tIERUXG4iKTsKKwkJcmV0ID0gUFRSX0VS UihwZGF0YS0+Z3Bpb3MuYXV4X2kyY19zZGEpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGRhdGEt PmdwaW9zLmVkcF9iaWFzX2VuID0gZGV2bV9ncGlvZF9nZXQocGRhdGEtPmRldiwgImJpYXMtZW4i LAorCQkJCQkJICBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihwZGF0YS0+Z3Bpb3MuZWRw X2JpYXNfZW4pKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBiaWFzIGVuIGdwaW8gZnJvbSBE VFxuIik7CisJCXJldCA9IFBUUl9FUlIocGRhdGEtPmdwaW9zLmVkcF9iaWFzX2VuKTsKKwkJZ290 byBleGl0OworCX0KKworCXBkYXRhLT5ncGlvcy5lZHBfYmtsdF9lbiA9IGRldm1fZ3Bpb2RfZ2V0 KHBkYXRhLT5kZXYsICJia2x0LWVuIiwKKwkJCQkJCSAgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJ U19FUlIocGRhdGEtPmdwaW9zLmVkcF9ia2x0X2VuKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBn ZXQgYmtsdCBlbiBncGlvIGZyb20gRFRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5ncGlv cy5lZHBfYmtsdF9lbik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlwZGF0YS0+Z3Bpb3MuaXJxX2dw aW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LCAiaXJxIiwKKwkJCQkJCSAg R1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIocGRhdGEtPmdwaW9zLmlycV9ncGlvKSkKKwkJ cHJfZXJyKCJmYWlsZWQgdG8gZ2V0IGlycSBncGlvIGZyb20gRFRcbiIpOworCisJcGRhdGEtPmdw aW9zLmVkcF9ia2x0X2N0cmwgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2LAor CQkJCQkiYmtsdC1jdHJsIiwgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIocGRhdGEtPmdw aW9zLmVkcF9ia2x0X2N0cmwpKQorCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgYmtsdCBjdHJsIGdw aW8gZnJvbSBEVFxuIik7CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBz bjY1ZHNpODZfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc242NWRzaTg2ICpw ZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0cnVj dCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7CisJaW50IHJldCA9IDA7CisKKwllbmRfbm9kZSA9IG9m X2dyYXBoX2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKKwlpZiAoIWVuZF9ub2RlKSB7 CisJCXByX2VycigicmVtb3RlIGVuZHBvaW50IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5P REVWOworCX0KKworCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRf cGFyZW50KGVuZF9ub2RlKTsKKwlvZl9ub2RlX3B1dChlbmRfbm9kZSk7CisJaWYgKCFwZGF0YS0+ aG9zdF9ub2RlKSB7CisJCXByX2VycigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUpOworCisJcmV0 ID0gc242NWRzaTg2X3BhcnNlX2dwaW9zKG5wLCBwZGF0YSk7CisKKwlwZGF0YS0+aXNfcGx1Z2dh YmxlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic24saXMtcGx1Z2dhYmxlIik7CisJcHJf ZGVidWcoImlzX3BsdWdnYWJsZSA9ICVkXG4iLCBwZGF0YS0+aXNfcGx1Z2dhYmxlKTsKKwlpZiAo IXBkYXRhLT5pc19wbHVnZ2FibGUpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJnBkYXRhLT5tb2RlX2xp c3QpOworCQlzbjY1ZHNpODZfcGFyc2VfZHRfbW9kZXMobnAsCisJCQkmcGRhdGEtPm1vZGVfbGlz dCwgJnBkYXRhLT5udW1fb2ZfbW9kZXMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgc242NWRzaTg2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJIGNvbnN0 IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc242NWRzaTg2ICpwZGF0YTsK KwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKm47CisKKwlp ZiAoIWNsaWVudCB8fCAhY2xpZW50LT5kZXYub2Zfbm9kZSkgeworCQlwcl9lcnIoImludmFsaWQg aW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5j dGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQlwcl9lcnIoImRl dmljZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJ cGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAorCQlzaXplb2Yoc3RydWN0IHNuNjVk c2k4NiksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJ cGRhdGEtPnBvd2VyX29uID0gZmFsc2U7CisJcGRhdGEtPmlzX3BsdWdnYWJsZSA9IGZhbHNlOwor CXBkYXRhLT5jb25uZWN0b3Jfc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7 CisJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsKKwlwZGF0YS0+aTJjX2NsaWVudCA9IGNsaWVu dDsKKwlwcl9kZWJ1ZygiSTJDIGFkZHJlc3MgaXMgJXhcbiIsIGNsaWVudC0+YWRkcik7CisKKwly ZXQgPSBzbjY1ZHNpODZfcGFyc2VfZHQoJmNsaWVudC0+ZGV2LCBwZGF0YSk7CisJaWYgKHJldCkg eworCQlwcl9lcnIoImZhaWxlZCB0byBwYXJzZSBkZXZpY2UgdHJlZVxuIik7CisJCWdvdG8gZXJy X2R0X3BhcnNlOworCX0KKworCXNuNjVkc2k4Nl9ncGlvX2NvbmZpZ3VyZShwZGF0YSwgdHJ1ZSk7 CisKKwlyZXQgPSBzbjY1ZHNpODZfaW5pdF9yZWd1bGF0b3JzKHBkYXRhKTsKKwlpZiAocmV0KSB7 CisJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSByZWd1bGF0b3JzXG4iKTsKKwkJZ290byBlcnJf Z3Bpb19jb25maWc7CisJfQorCisJcmV0ID0gc242NWRzaTg2X3JlYWRfZGV2aWNlX3JldihwZGF0 YSk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWFkIGNoaXAgcmV2XG4iKTsK KwkJZ290byBlcnJfZ3Bpb19jb25maWc7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImJyaWRnZSBj aGlwIGVuYWJsZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKKwkJcGRhdGEtPnBvd2VyX29uID0gdHJ1ZTsK Kwl9CisKKwlwZGF0YS0+aXJxID0gZ3Bpb2RfdG9faXJxKHBkYXRhLT5ncGlvcy5pcnFfZ3Bpbyk7 CisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocGRhdGEtPmlycSwgTlVMTCwKKwkJCXNuNjVk c2k4Nl9pcnFfdGhyZWFkX2hhbmRsZXIsCisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZf T05FU0hPVCwKKwkJCSJzbjY1ZHNpODYiLCBwZGF0YSk7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEo Y2xpZW50LCBwZGF0YSk7CisJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgcGRhdGEpOwor CisJcGRhdGEtPmJyaWRnZS5mdW5jcyA9ICZzbjY1ZHNpODZfYnJpZGdlX2Z1bmNzOworCXBkYXRh LT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CisKKwlkcm1fYnJpZGdlX2Fk ZCgmcGRhdGEtPmJyaWRnZSk7CisKKwlyZXR1cm4gcmV0OworCitlcnJfZ3Bpb19jb25maWc6CisJ c242NWRzaTg2X2dwaW9fY29uZmlndXJlKHBkYXRhLCBmYWxzZSk7CitlcnJfZHRfcGFyc2U6CisJ aWYgKCFwZGF0YS0+aXNfcGx1Z2dhYmxlKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSht b2RlLCBuLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkgeworCQkJbGlzdF9kZWwoJm1vZGUtPmhl YWQpOworCQkJa2ZyZWUobW9kZSk7CisJCX0KKwkJcGRhdGEtPm51bV9vZl9tb2RlcyA9IDA7CisJ fQorCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBwZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBzbjY1ZHNpODZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7 CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IHNuNjVkc2k4NiAqcGRhdGEgPSBpMmNfZ2V0 X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKm47 CisKKwlpZiAoIXBkYXRhKQorCQlnb3RvIGVuZDsKKworCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ ZHNpKTsKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+ZHNpKTsKKworCWRybV9i cmlkZ2VfcmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKKworCWRpc2FibGVfaXJxKHBkYXRhLT5pcnEp OworCWZyZWVfaXJxKHBkYXRhLT5pcnEsIHBkYXRhKTsKKworCXNuNjVkc2k4Nl9ncGlvX2NvbmZp Z3VyZShwZGF0YSwgZmFsc2UpOworCisJaWYgKCFwZGF0YS0+aXNfcGx1Z2dhYmxlKSB7CisJCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCBuLCAmcGRhdGEtPm1vZGVfbGlzdCwgaGVhZCkg eworCQkJbGlzdF9kZWwoJm1vZGUtPmhlYWQpOworCQkJa2ZyZWUobW9kZSk7CisJCX0KKwl9CisK KwlkZXZtX2tmcmVlKCZjbGllbnQtPmRldiwgcGRhdGEpOworCitlbmQ6CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNuNjVkc2k4Nl9pZFtdID0geworCXsg InRpLHNuNjVkc2k4NiIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNu NjVkc2k4Nl9pZCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNuNjVkc2k4 Nl9tYXRjaF90YWJsZVtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7 fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNuNjVkc2k4Nl9tYXRjaF90YWJsZSk7CisK K3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzbjY1ZHNpODZfZHJpdmVyID0geworCS5kcml2ZXIg PSB7CisJCS5uYW1lID0gInNuNjVkc2k4NiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBzbjY1ZHNpODZfbWF0Y2hfdGFibGUsCisJfSwKKwkucHJvYmUgPSBz bjY1ZHNpODZfcHJvYmUsCisJLnJlbW92ZSA9IHNuNjVkc2k4Nl9yZW1vdmUsCisJLmlkX3RhYmxl ID0gc242NWRzaTg2X2lkLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIoc242NWRzaTg2X2RyaXZl cik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNONjVEU0k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2 ZXIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJl ciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0 aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVu bwo=