From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH RFC 13/24] drm/lima: add PP related functions Date: Fri, 18 May 2018 17:28:04 +0800 Message-ID: <20180518092815.25280-14-yuq825@gmail.com> References: <20180518092815.25280-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180518092815.25280-1-yuq825@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Cc: Simon Shields , Marek Vasut , Connor Abbott , Neil Armstrong , Andrei Paulau <7134956@gmail.com>, Vasily Khoruzhick , Qiang Yu , Erico Nunes List-Id: devicetree@vger.kernel.org RnJvbTogTGltYSBQcm9qZWN0IERldmVsb3BlcnMgPGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmc+CgpQUCBpcyBhIHByb2Nlc3NvciB1c2VkIGZvciBPcGVuR0wgZnJhZ21lbnQgc2hhZGVy CnByb2Nlc3NpbmcuCgpTaWduZWQtb2ZmLWJ5OiBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4K U2lnbmVkLW9mZi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmMgfCA0MTggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmggfCAgMzcgKysrCiAyIGZp bGVzIGNoYW5nZWQsIDQ1NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9wcC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9wcC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzcxZDZiNzBjMjcxCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE3LTIwMTggTGltYSBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAor ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cisj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5j bHVkZSA8ZHJtL2xpbWFfZHJtLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1 ZGUgImxpbWFfcHAuaCIKKyNpbmNsdWRlICJsaW1hX2RsYnUuaCIKKyNpbmNsdWRlICJsaW1hX2Jj YXN0LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisj ZGVmaW5lIHBwX3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIExJTUFf UFBfIyNyZWcpCisjZGVmaW5lIHBwX3JlYWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyBMSU1BX1BQ XyMjcmVnKQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX2hhbmRsZV9pcnEoc3RydWN0IGxpbWFfaXAg KmlwLCB1MzIgc3RhdGUpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2Owor CXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7 CisKKwlpZiAoc3RhdGUgJiBMSU1BX1BQX0lSUV9NQVNLX0VSUk9SKSB7CisJCXUzMiBzdGF0dXMg PSBwcF9yZWFkKFNUQVRVUyk7CisKKwkJZGV2X2VycihkZXYtPmRldiwgInBwIGVycm9yIGlycSBz dGF0ZT0leCBzdGF0dXM9JXhcbiIsCisJCQlzdGF0ZSwgc3RhdHVzKTsKKworCQlwaXBlLT5lcnJv ciA9IHRydWU7CisKKwkJLyogbWFzayBhbGwgaW50ZXJydXB0cyBiZWZvcmUgaGFyZCByZXNldCAq LworCQlwcF93cml0ZShJTlRfTUFTSywgMCk7CisJfQorCisJcHBfd3JpdGUoSU5UX0NMRUFSLCBz dGF0ZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaW1hX3BwX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxpbWFfaXAgKmlwID0gZGF0YTsKKwlzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlw ZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwl1MzIgc3RhdGUgPSBwcF9yZWFkKElOVF9T VEFUVVMpOworCisJLyogZm9yIHNoYXJlZCBpcnEgY2FzZSAqLworCWlmICghc3RhdGUpCisJCXJl dHVybiBJUlFfTk9ORTsKKworCWxpbWFfcHBfaGFuZGxlX2lycShpcCwgc3RhdGUpOworCisJaWYg KGF0b21pY19kZWNfYW5kX3Rlc3QoJnBpcGUtPnRhc2spKQorCQlsaW1hX3NjaGVkX3BpcGVfdGFz a19kb25lKHBpcGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0 dXJuX3QgbGltYV9wcF9iY2FzdF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQorewor CWludCBpOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCXN0cnVjdCBsaW1hX2lwICpw cF9iY2FzdCA9IGRhdGE7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBwcF9iY2FzdC0+ZGV2 OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVf cHA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKSB7CisJCXN0 cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKwkJdTMyIHN0YXR1cywgc3Rh dGU7CisKKwkJaWYgKHBpcGUtPmRvbmUgJiAoMSA8PCBpKSkKKwkJCWNvbnRpbnVlOworCisJCS8q IHN0YXR1cyByZWFkIGZpcnN0IGluIGNhc2UgaW50IHN0YXRlIGNoYW5nZSBpbiB0aGUgbWlkZGxl CisJCSAqIHdoaWNoIG1heSBtaXNzIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwkJc3RhdHVz ID0gcHBfcmVhZChTVEFUVVMpOworCQlzdGF0ZSA9IHBwX3JlYWQoSU5UX1NUQVRVUyk7CisKKwkJ aWYgKHN0YXRlKSB7CisJCQlsaW1hX3BwX2hhbmRsZV9pcnEoaXAsIHN0YXRlKTsKKwkJCXJldCA9 IElSUV9IQU5ETEVEOworCQl9CisJCWVsc2UgeworCQkJaWYgKHN0YXR1cyAmIExJTUFfUFBfU1RB VFVTX1JFTkRFUklOR19BQ1RJVkUpCisJCQkJY29udGludWU7CisJCX0KKworCQlwaXBlLT5kb25l IHw9ICgxIDw8IGkpOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGlwZS0+dGFzaykpCisJ CQlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisJaWYgKGlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm47CisKKwlwcF93cml0 ZShJTlRfTUFTSywgMCk7CisJcHBfd3JpdGUoSU5UX1JBV1NUQVQsIExJTUFfUFBfSVJRX01BU0tf QUxMKTsKKwlwcF93cml0ZShDVFJMLCBMSU1BX1BQX0NUUkxfU09GVF9SRVNFVCk7CisJaXAtPmRh dGEuYXN5bmNfcmVzZXQgPSB0cnVlOworfQorCitzdGF0aWMgaW50IGxpbWFfcHBfc29mdF9yZXNl dF9hc3luY193YWl0X29uZShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2 aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCB0aW1lb3V0OworCisJZm9yICh0aW1lb3V0ID0gMTAw MDsgdGltZW91dCA+IDA7IHRpbWVvdXQtLSkgeworCQlpZiAoIShwcF9yZWFkKFNUQVRVUykgJiBM SU1BX1BQX1NUQVRVU19SRU5ERVJJTkdfQUNUSVZFKSAmJgorCQkgICAgcHBfcmVhZChJTlRfUkFX U1RBVCkgPT0gTElNQV9QUF9JUlFfUkVTRVRfQ09NUExFVEVEKQorCQkJYnJlYWs7CisJfQorCWlm ICghdGltZW91dCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgcmVzZXQgdGltZSBvdXRc biIsIGxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlwcF93 cml0ZShJTlRfQ0xFQVIsIExJTUFfUFBfSVJRX01BU0tfQUxMKTsKKwlwcF93cml0ZShJTlRfTUFT SywgTElNQV9QUF9JUlFfTUFTS19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBs aW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50 IGksIGVyciA9IDA7CisKKwlpZiAoIWlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm4gMDsK KworCWlmIChpcC0+aWQgPT0gbGltYV9pcF9wcF9iY2FzdCkgeworCQlzdHJ1Y3QgbGltYV9kZXZp Y2UgKmRldiA9IGlwLT5kZXY7CisJCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYt PnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJCWZvciAoaSA9IDA7IGkgPCBwaXBlLT5udW1fcHJvY2Vz c29yOyBpKyspCisJCQllcnIgfD0gbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXRfb25lKHBp cGUtPnByb2Nlc3NvcltpXSk7CisJfQorCWVsc2UKKwkJZXJyID0gbGltYV9wcF9zb2Z0X3Jlc2V0 X2FzeW5jX3dhaXRfb25lKGlwKTsKKworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJ cmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbGltYV9wcF9zdGFydF90YXNrKHN0cnVjdCBs aW1hX2lwICppcCwgdTMyICpmcmFtZSwgdTMyICp3YiwKKwkJCSAgICAgICBib29sIHNraXBfc3Rh Y2tfYWRkcikKK3sKKwlpbnQgaSwgaiwgbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElNQV9Q UF9GUkFNRV9SRUdfTlVNOyBpKyspIHsKKwkJaWYgKHNraXBfc3RhY2tfYWRkciAmJiBpICogNCA9 PSBMSU1BX1BQX1NUQUNLKQorCQkJY29udGludWU7CisKKwkJd3JpdGVsKGZyYW1lW2ldLCBpcC0+ aW9tZW0gKyBMSU1BX1BQX0ZSQU1FICsgaSAqIDQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAz OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IExJTUFfUFBfV0JfUkVHX05VTTsgaisrKQorCQkJ d3JpdGVsKHdiW24rK10sIGlwLT5pb21lbSArIExJTUFfUFBfV0IoaSkgKyBqICogNCk7CisJfQor CisJcHBfd3JpdGUoQ1RSTCwgTElNQV9QUF9DVFJMX1NUQVJUX1JFTkRFUklORyk7Cit9CisKK3N0 YXRpYyBpbnQgbGltYV9wcF9oYXJkX3Jlc2V0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1 Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IHRpbWVvdXQ7CisKKwlwcF93cml0 ZShQRVJGX0NOVF8wX0xJTUlULCAweEMwRkZFMDAwKTsKKwlwcF93cml0ZShJTlRfTUFTSywgMCk7 CisJcHBfd3JpdGUoQ1RSTCwgTElNQV9QUF9DVFJMX0ZPUkNFX1JFU0VUKTsKKwlmb3IgKHRpbWVv dXQgPSAxMDAwOyB0aW1lb3V0ID4gMDsgdGltZW91dC0tKSB7CisJCXBwX3dyaXRlKFBFUkZfQ05U XzBfTElNSVQsIDB4QzAxQTAwMDApOworCQlpZiAocHBfcmVhZChQRVJGX0NOVF8wX0xJTUlUKSA9 PSAweEMwMUEwMDAwKQorCQkJYnJlYWs7CisJfQorCWlmICghdGltZW91dCkgeworCQlkZXZfZXJy KGRldi0+ZGV2LCAicHAgaGFyZCByZXNldCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURP VVQ7CisJfQorCisJcHBfd3JpdGUoUEVSRl9DTlRfMF9MSU1JVCwgMCk7CisJcHBfd3JpdGUoSU5U X0NMRUFSLCBMSU1BX1BQX0lSUV9NQVNLX0FMTCk7CisJcHBfd3JpdGUoSU5UX01BU0ssIExJTUFf UFBfSVJRX01BU0tfVVNFRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBf cHJpbnRfdmVyc2lvbihzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJdTMyIHZlcnNpb24sIG1ham9y LCBtaW5vcjsKKwljaGFyICpuYW1lOworCisJdmVyc2lvbiA9IHBwX3JlYWQoVkVSU0lPTik7CisJ bWFqb3IgPSAodmVyc2lvbiA+PiA4KSAmIDB4RkY7CisJbWlub3IgPSB2ZXJzaW9uICYgMHhGRjsK Kwlzd2l0Y2ggKHZlcnNpb24gPj4gMTYpIHsKKwljYXNlIDB4QzgwNzoKKwkgICAgbmFtZSA9ICJt YWxpMjAwIjsKKwkJYnJlYWs7CisJY2FzZSAweENFMDc6CisJCW5hbWUgPSAibWFsaTMwMCI7CisJ CWJyZWFrOworCWNhc2UgMHhDRDA3OgorCQluYW1lID0gIm1hbGk0MDAiOworCQlicmVhazsKKwlj YXNlIDB4Q0YwNzoKKwkJbmFtZSA9ICJtYWxpNDUwIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ bmFtZSA9ICJ1bmtub3ciOworCQlicmVhazsKKwl9CisJZGV2X2luZm8oaXAtPmRldi0+ZGV2LCAi JXMgLSAlcyB2ZXJzaW9uIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkgbGltYV9pcF9uYW1lKGlw KSwgbmFtZSwgbWFqb3IsIG1pbm9yKTsKK30KKworaW50IGxpbWFfcHBfaW5pdChzdHJ1Y3QgbGlt YV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBl cnI7CisKKwlsaW1hX3BwX3ByaW50X3ZlcnNpb24oaXApOworCisJaXAtPmRhdGEuYXN5bmNfcmVz ZXQgPSBmYWxzZTsKKwlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmMoaXApOworCWVyciA9IGxpbWFf cHBfc29mdF9yZXNldF9hc3luY193YWl0KGlwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYtPmRldiwgaXAtPmlycSwgbGltYV9wcF9pcnFf aGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgbGltYV9pcF9uYW1lKGlwKSwgaXApOwor CWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInBwICVzIGZhaWwgdG8gcmVxdWVzdCBp cnFcbiIsCisJCQlsaW1hX2lwX25hbWUoaXApKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBsaW1hX3BwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCQor fQorCitpbnQgbGltYV9wcF9iY2FzdF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1 Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVycjsKKworCWVyciA9IGRldm1f cmVxdWVzdF9pcnEoZGV2LT5kZXYsIGlwLT5pcnEsIGxpbWFfcHBfYmNhc3RfaXJxX2hhbmRsZXIs CisJCQkgICAgICAgSVJRRl9TSEFSRUQsIGxpbWFfaXBfbmFtZShpcCksIGlwKTsKKwlpZiAoZXJy KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJwcCAlcyBmYWlsIHRvIHJlcXVlc3QgaXJxXG4iLAor CQkJbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK3ZvaWQgbGltYV9wcF9iY2FzdF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwkKK30K Kworc3RhdGljIGludCBsaW1hX3BwX3Rhc2tfdmFsaWRhdGUoc3RydWN0IGxpbWFfc2NoZWRfcGlw ZSAqcGlwZSwKKwkJCQkgc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKK3sKKwlpZiAoIXBp cGUtPmJjYXN0X3Byb2Nlc3NvcikgeworCQlzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSAq ZiA9IHRhc2stPmZyYW1lOworCisJCWlmIChmLT5udW1fcHAgPiBwaXBlLT5udW1fcHJvY2Vzc29y KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGxpbWFfcHBfdGFza19ydW4oc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICAg c3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaykKK3sKKwlpZiAocGlwZS0+YmNhc3RfcHJvY2Vz c29yKSB7CisJCXN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZy YW1lOworCQlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHBpcGUtPmJjYXN0X3Byb2Nlc3Nvci0+ ZGV2OworCQlpbnQgaTsKKworCQlwaXBlLT5kb25lID0gMDsKKwkJYXRvbWljX3NldCgmcGlwZS0+ dGFzaywgcGlwZS0+bnVtX3Byb2Nlc3Nvcik7CisKKwkJZnJhbWUtPmZyYW1lW0xJTUFfUFBfRlJB TUUgPj4gMl0gPSBMSU1BX1ZBX1JFU0VSVkVfRExCVTsKKwkJbGltYV9kbGJ1X3NldF9yZWcoZGV2 LT5pcCArIGxpbWFfaXBfZGxidSwgZnJhbWUtPmRsYnVfcmVncyk7CisKKwkJbGltYV9wcF9zb2Z0 X3Jlc2V0X2FzeW5jX3dhaXQocGlwZS0+YmNhc3RfcHJvY2Vzc29yKTsKKworCQlmb3IgKGkgPSAw OyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKSB7CisJCQlzdHJ1Y3QgbGltYV9pcCAqaXAg PSBwaXBlLT5wcm9jZXNzb3JbaV07CisJCQlwcF93cml0ZShTVEFDSywgZnJhbWUtPmZyYWdtZW50 X3N0YWNrX2FkZHJlc3NbaV0pOworCQl9CisKKwkJbGltYV9wcF9zdGFydF90YXNrKHBpcGUtPmJj YXN0X3Byb2Nlc3NvciwgZnJhbWUtPmZyYW1lLAorCQkJCSAgIGZyYW1lLT53YiwgdHJ1ZSk7CisJ fQorCWVsc2UgeworCQlzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSAqZnJhbWUgPSB0YXNr LT5mcmFtZTsKKwkJaW50IGk7CisKKwkJYXRvbWljX3NldCgmcGlwZS0+dGFzaywgZnJhbWUtPm51 bV9wcCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQkJZnJh bWUtPmZyYW1lW0xJTUFfUFBfRlJBTUUgPj4gMl0gPQorCQkJCWZyYW1lLT5wbGJ1X2FycmF5X2Fk ZHJlc3NbaV07CisJCQlmcmFtZS0+ZnJhbWVbTElNQV9QUF9TVEFDSyA+PiAyXSA9CisJCQkJZnJh bWUtPmZyYWdtZW50X3N0YWNrX2FkZHJlc3NbaV07CisKKwkJCWxpbWFfcHBfc29mdF9yZXNldF9h c3luY193YWl0KHBpcGUtPnByb2Nlc3NvcltpXSk7CisKKwkJCWxpbWFfcHBfc3RhcnRfdGFzayhw aXBlLT5wcm9jZXNzb3JbaV0sIGZyYW1lLT5mcmFtZSwKKwkJCQkJICAgZnJhbWUtPndiLCBmYWxz ZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBfdGFza19maW5pKHN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaWYgKHBpcGUtPmJjYXN0X3Byb2Nlc3NvcikKKwkJ bGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jKHBpcGUtPmJjYXN0X3Byb2Nlc3Nvcik7CisJZWxzZSB7 CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKQor CQkJbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jKHBpcGUtPnByb2Nlc3NvcltpXSk7CisJfQorfQor CitzdGF0aWMgdm9pZCBsaW1hX3BwX3Rhc2tfZXJyb3Ioc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAq cGlwZSkKK3sKKwlpbnQgaTsKKworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpCisJCWxpbWFf YmNhc3RfZGlzYWJsZShwaXBlLT5iY2FzdF9wcm9jZXNzb3ItPmRldik7CisKKwlmb3IgKGkgPSAw OyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3NvcjsgaSsrKQorCQlsaW1hX3BwX2hhcmRfcmVzZXQocGlw ZS0+cHJvY2Vzc29yW2ldKTsKKworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpCisJCWxpbWFf YmNhc3RfZW5hYmxlKHBpcGUtPmJjYXN0X3Byb2Nlc3Nvci0+ZGV2KTsKK30KKworc3RhdGljIHZv aWQgbGltYV9wcF90YXNrX21tdV9lcnJvcihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQor eworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwaXBlLT50YXNrKSkKKwkJbGltYV9zY2hlZF9w aXBlX3Rhc2tfZG9uZShwaXBlKTsKK30KKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpsaW1h X3BwX3Rhc2tfc2xhYiA9IE5VTEw7CitzdGF0aWMgaW50IGxpbWFfcHBfdGFza19zbGFiX3JlZmNu dCA9IDA7CisKK2ludCBsaW1hX3BwX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikK K3sKKwlpbnQgZnJhbWVfc2l6ZTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2 LT5waXBlICsgbGltYV9waXBlX3BwOworCisJaWYgKGRldi0+aWQgPT0gbGltYV9ncHVfbWFsaTQw MCkKKwkJZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSk7 CisJZWxzZQorCQlmcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2Zy YW1lKTsKKworCWlmICghbGltYV9wcF90YXNrX3NsYWIpIHsKKwkJbGltYV9wcF90YXNrX3NsYWIg PSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJCSJsaW1hX3BwX3Rhc2siLCBzaXplb2Yoc3RydWN0IGxp bWFfc2NoZWRfdGFzaykgKyBmcmFtZV9zaXplLAorCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBO VUxMKTsKKwkJaWYgKCFsaW1hX3BwX3Rhc2tfc2xhYikKKwkJCXJldHVybiAtRU5PTUVNOworCX0K KwlsaW1hX3BwX3Rhc2tfc2xhYl9yZWZjbnQrKzsKKworCXBpcGUtPmZyYW1lX3NpemUgPSBmcmFt ZV9zaXplOworCXBpcGUtPnRhc2tfc2xhYiA9IGxpbWFfcHBfdGFza19zbGFiOworCisJcGlwZS0+ dGFza192YWxpZGF0ZSA9IGxpbWFfcHBfdGFza192YWxpZGF0ZTsKKwlwaXBlLT50YXNrX3J1biA9 IGxpbWFfcHBfdGFza19ydW47CisJcGlwZS0+dGFza19maW5pID0gbGltYV9wcF90YXNrX2Zpbmk7 CisJcGlwZS0+dGFza19lcnJvciA9IGxpbWFfcHBfdGFza19lcnJvcjsKKwlwaXBlLT50YXNrX21t dV9lcnJvciA9IGxpbWFfcHBfdGFza19tbXVfZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZCBsaW1hX3BwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIS0t bGltYV9wcF90YXNrX3NsYWJfcmVmY250KSB7CisJCWttZW1fY2FjaGVfZGVzdHJveShsaW1hX3Bw X3Rhc2tfc2xhYik7CisJCWxpbWFfcHBfdGFza19zbGFiID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX3BwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40YmQx ZDlmY2JjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3Bw LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IExpbWEg UHJvamVjdAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENP UFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fTElNQV9QUF9IX18KKyNkZWZp bmUgX19MSU1BX1BQX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKK3N0cnVjdCBsaW1hX2RldmljZTsK KworaW50IGxpbWFfcHBfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX3BwX2Zp bmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfcHBfYmNhc3RfaW5pdChzdHJ1Y3Qg bGltYV9pcCAqaXApOwordm9pZCBsaW1hX3BwX2JjYXN0X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlw KTsKKworaW50IGxpbWFfcHBfcGlwZV9pbml0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKK3Zv aWQgbGltYV9wcF9waXBlX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOworCisjZW5kaWYK LS0gCjIuMTcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==