From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Subject: [PATCH net-next 1/3] net: ethernet: mediatek: Add basic PHYLINK support Date: Wed, 24 Jul 2019 21:23:40 +0200 Message-ID: <20190724192340.18978-1-opensource@vdorst.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+glpam-linux-mediatek=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: andrew-g2DYL2Zd6BY@public.gmane.org, f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, frank-w-SipyoOjXbOMoAHOVJHB0wA@public.gmane.org, sean.wang-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org, linux-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org, vivien.didelot-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, john-Pj+rj9U5foFAfugRpC6u6w@public.gmane.org, matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-mips-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org List-Id: devicetree@vger.kernel.org VGhpcyBjb252ZXJ0IHRoZSBiYXNpY3MgdG8gUEhZTElOSyBBUEkuClNHTUlJIHN1cHBvcnQgaXMg bm90IGluIHRoaXMgcGF0Y2guCgpTaWduZWQtb2ZmLWJ5OiBSZW7DqSB2YW4gRG9yc3QgPG9wZW5z b3VyY2VAdmRvcnN0LmNvbT4KVGVzdGVkLWJ5OiBGcmFuayBXdW5kZXJsaWNoIDxmcmFuay13QHB1 YmxpYy1maWxlcy5kZT4KLS0tCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmln ICAgICAgIHwgICAyICstCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3Nv Yy5jIHwgNDA0ICsrKysrKysrKysrLS0tLS0tLS0tCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRp YXRlay9tdGtfZXRoX3NvYy5oIHwgIDMwICstCiAzIGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNlcnRp b25zKCspLCAxODMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25m aWcKaW5kZXggMjYzY2QwOTA5ZmUwLi5lMjBmMDRkMTdiNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQv bWVkaWF0ZWsvS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQCBpZiBORVRfVkVORE9SX01FRElBVEVL CiBjb25maWcgTkVUX01FRElBVEVLX1NPQwogCXRyaXN0YXRlICJNZWRpYVRlayBTb0MgR2lnYWJp dCBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUX1ZFTkRPUl9NRURJQVRFSwotCXNl bGVjdCBQSFlMSUIKKwlzZWxlY3QgUEhZTElOSwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVy IHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlCiAJICBNZWRpYVRlayBT b0MgZmFtaWx5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRr X2V0aF9zb2MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMK aW5kZXggNTk3ZTM3N2Q4ZjIwLi44NTM5MjkwNzBjYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0 L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxp bnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4 L3BpbmN0cmwvZGV2aW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeWxpbmsuaD4KIAogI2luY2x1 ZGUgIm10a19ldGhfc29jLmgiCiAKQEAgLTE4NiwxNjUgKzE4NywyMTkgQEAgc3RhdGljIHZvaWQg bXRrX2dtYWMwX3JnbWlpX2FkanVzdChzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgc3BlZWQpCiAJ bXRrX3czMihldGgsIHZhbCwgVFJHTUlJX1RDS19DVFJMKTsKIH0KIAotc3RhdGljIHZvaWQgbXRr X3BoeV9saW5rX2FkanVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbXRr X21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBt b2RlLAorCQkJICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiB7Ci0J c3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2IGxjbF9hZHYgPSAw LCBybXRfYWR2ID0gMDsKLQl1OCBmbG93Y3RybDsKLQl1MzIgbWNyID0gTUFDX01DUl9NQVhfUlhf MTUzNiB8IE1BQ19NQ1JfSVBHX0NGRyB8Ci0JCSAgTUFDX01DUl9GT1JDRV9NT0RFIHwgTUFDX01D Ul9UWF9FTiB8Ci0JCSAgTUFDX01DUl9SWF9FTiB8IE1BQ19NQ1JfQkFDS09GRl9FTiB8Ci0JCSAg TUFDX01DUl9CQUNLUFJfRU47CisJc3RydWN0IG10a19tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZihj b25maWcsIHN0cnVjdCBtdGtfbWFjLAorCQkJCQkgICBwaHlsaW5rX2NvbmZpZyk7CisJc3RydWN0 IG10a19ldGggKmV0aCA9IG1hYy0+aHc7CiAKLQlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRLX1JF U0VUVElORywgJm1hYy0+aHctPnN0YXRlKSkpCi0JCXJldHVybjsKKwl1MzIgZ2VfbW9kZSA9IDAs IHZhbCwgbWNyX2N1ciwgbWNyX25ldzsKKworCWlmIChtYWMtPmludGVyZmFjZSAhPSBzdGF0ZS0+ aW50ZXJmYWNlKSB7CisJCS8qIFNldHVwIHNvYyBwaW4gZnVuY3Rpb25zICovCisJCXN3aXRjaCAo c3RhdGUtPmludGVyZmFjZSkgeworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUk6CisJ CQlpZiAobWFjLT5pZCkKKwkJCQlnb3RvIGVycl9waHk7CisJCQlpZiAoIU1US19IQVNfQ0FQUyht YWMtPmh3LT5zb2MtPmNhcHMsCisJCQkJCSAgTVRLX0dNQUMxX1RSR01JSSkpCisJCQkJZ290byBl cnJfcGh5OworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RF X1JHTUlJX1RYSUQ6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6CisJCWNh c2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOgorCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9E RV9SR01JSToKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk6CisJCQln ZV9tb2RlID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUk6 CisJCQlnZV9tb2RlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9S TUlJOgorCQkJaWYgKG1hYy0+aWQpCisJCQkJZ290byBlcnJfcGh5OworCQkJZ2VfbW9kZSA9IDM7 CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyX3BoeTsKKwkJfQorCisJCS8qIFNl dHVwIGNsb2NrIGZvciAxc3QgZ21hYyAqLworCQlpZiAoIW1hYy0+aWQgJiYKKwkJICAgIE1US19I QVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsIE1US19HTUFDMV9UUkdNSUkpKSB7CisJCQlpZiAo TVRLX0hBU19DQVBTKG1hYy0+aHctPnNvYy0+Y2FwcywKKwkJCQkJIE1US19UUkdNSUlfTVQ3NjIx X0NMSykpIHsKKwkJCQlpZiAobXQ3NjIxX2dtYWMwX3JnbWlpX2FkanVzdChtYWMtPmh3LAorCQkJ CQkJCSAgICAgIHN0YXRlLT5pbnRlcmZhY2UpKQorCQkJCQlnb3RvIGVycl9waHk7CisJCQl9IGVs c2UgeworCQkJCWlmIChzdGF0ZS0+aW50ZXJmYWNlICE9CisJCQkJICAgIFBIWV9JTlRFUkZBQ0Vf TU9ERV9UUkdNSUkpCisJCQkJCW10a19nbWFjMF9yZ21paV9hZGp1c3QobWFjLT5odywKKwkJCQkJ CQkgICAgICAgc3RhdGUtPnNwZWVkKTsKKwkJCX0KKwkJfQogCi0Jc3dpdGNoIChkZXYtPnBoeWRl di0+c3BlZWQpIHsKKwkJLyogcHV0IHRoZSBnbWFjIGludG8gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJ cmVnbWFwX3JlYWQoZXRoLT5ldGhzeXMsIEVUSFNZU19TWVNDRkcwLCAmdmFsKTsKKwkJdmFsICY9 IH5TWVNDRkcwX0dFX01PREUoU1lTQ0ZHMF9HRV9NQVNLLCBtYWMtPmlkKTsKKwkJdmFsIHw9IFNZ U0NGRzBfR0VfTU9ERShnZV9tb2RlLCBtYWMtPmlkKTsKKwkJcmVnbWFwX3dyaXRlKGV0aC0+ZXRo c3lzLCBFVEhTWVNfU1lTQ0ZHMCwgdmFsKTsKKworCQltYWMtPmludGVyZmFjZSA9IHN0YXRlLT5p bnRlcmZhY2U7CisJfQorCisJLyogU2V0dXAgZ21hYyAqLworCW1jcl9jdXIgPSBtdGtfcjMyKG1h Yy0+aHcsIE1US19NQUNfTUNSKG1hYy0+aWQpKTsKKwltY3JfbmV3ID0gbWNyX2N1cjsKKwltY3Jf bmV3ICY9IH4oTUFDX01DUl9TUEVFRF8xMDAgfCBNQUNfTUNSX1NQRUVEXzEwMDAgfAorCQkgICAg IE1BQ19NQ1JfRk9SQ0VfRFBYIHwgTUFDX01DUl9GT1JDRV9UWF9GQyB8CisJCSAgICAgTUFDX01D Ul9GT1JDRV9SWF9GQyk7CisJbWNyX25ldyB8PSBNQUNfTUNSX01BWF9SWF8xNTM2IHwgTUFDX01D Ul9JUEdfQ0ZHIHwgTUFDX01DUl9GT1JDRV9NT0RFIHwKKwkJICAgTUFDX01DUl9CQUNLT0ZGX0VO IHwgTUFDX01DUl9CQUNLUFJfRU4gfCBNQUNfTUNSX0ZPUkNFX0xJTks7CisKKwlzd2l0Y2ggKHN0 YXRlLT5zcGVlZCkgewogCWNhc2UgU1BFRURfMTAwMDoKLQkJbWNyIHw9IE1BQ19NQ1JfU1BFRURf MTAwMDsKKwkJbWNyX25ldyB8PSBNQUNfTUNSX1NQRUVEXzEwMDA7CiAJCWJyZWFrOwogCWNhc2Ug U1BFRURfMTAwOgotCQltY3IgfD0gTUFDX01DUl9TUEVFRF8xMDA7CisJCW1jcl9uZXcgfD0gTUFD X01DUl9TUEVFRF8xMDA7CiAJCWJyZWFrOwogCX0KLQotCWlmIChNVEtfSEFTX0NBUFMobWFjLT5o dy0+c29jLT5jYXBzLCBNVEtfR01BQzFfVFJHTUlJKSAmJiAhbWFjLT5pZCkgewotCQlpZiAoTVRL X0hBU19DQVBTKG1hYy0+aHctPnNvYy0+Y2FwcywgTVRLX1RSR01JSV9NVDc2MjFfQ0xLKSkgewot CQkJaWYgKG10NzYyMV9nbWFjMF9yZ21paV9hZGp1c3QobWFjLT5odywKLQkJCQkJCSAgICAgIGRl di0+cGh5ZGV2LT5pbnRlcmZhY2UpKQotCQkJCXJldHVybjsKLQkJfSBlbHNlIHsKLQkJCWlmICgh bWFjLT50cmdtaWkpCi0JCQkJbXRrX2dtYWMwX3JnbWlpX2FkanVzdChtYWMtPmh3LAotCQkJCQkJ ICAgICAgIGRldi0+cGh5ZGV2LT5zcGVlZCk7Ci0JCX0KKwlpZiAoc3RhdGUtPmR1cGxleCA9PSBE VVBMRVhfRlVMTCkgeworCQltY3JfbmV3IHw9IE1BQ19NQ1JfRk9SQ0VfRFBYOworCQlpZiAoc3Rh dGUtPnBhdXNlICYgTUxPX1BBVVNFX1RYKQorCQkJbWNyX25ldyB8PSBNQUNfTUNSX0ZPUkNFX1RY X0ZDOworCQlpZiAoc3RhdGUtPnBhdXNlICYgTUxPX1BBVVNFX1JYKQorCQkJbWNyX25ldyB8PSBN QUNfTUNSX0ZPUkNFX1JYX0ZDOwogCX0KIAotCWlmIChkZXYtPnBoeWRldi0+bGluaykKLQkJbWNy IHw9IE1BQ19NQ1JfRk9SQ0VfTElOSzsKKwkvKiBPbmx5IHVwZGF0ZSBjb250cm9sIHJlZ2lzdGVy IHdoZW4gbmVlZGVkISAqLworCWlmIChtY3JfbmV3ICE9IG1jcl9jdXIpCisJCW10a193MzIobWFj LT5odywgbWNyX25ldywgTVRLX01BQ19NQ1IobWFjLT5pZCkpOwogCi0JaWYgKGRldi0+cGh5ZGV2 LT5kdXBsZXgpIHsKLQkJbWNyIHw9IE1BQ19NQ1JfRk9SQ0VfRFBYOworCXJldHVybjsKIAotCQlp ZiAoZGV2LT5waHlkZXYtPnBhdXNlKQotCQkJcm10X2FkdiA9IExQQV9QQVVTRV9DQVA7Ci0JCWlm IChkZXYtPnBoeWRldi0+YXN5bV9wYXVzZSkKLQkJCXJtdF9hZHYgfD0gTFBBX1BBVVNFX0FTWU07 CitlcnJfcGh5OgorCWRldl9lcnIoZXRoLT5kZXYsICIlczogR01BQyVkIG1vZGUgJXMgbm90IHN1 cHBvcnRlZCFcbiIsIF9fZnVuY19fLAorCQltYWMtPmlkLCBwaHlfbW9kZXMoc3RhdGUtPmludGVy ZmFjZSkpOworfQorCitzdGF0aWMgaW50IG10a19tYWNfbGlua19zdGF0ZShzdHJ1Y3QgcGh5bGlu a19jb25maWcgKmNvbmZpZywKKwkJCSAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0 YXRlKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1 Y3QgbXRrX21hYywKKwkJCQkJICAgcGh5bGlua19jb25maWcpOworCXUzMiBwbXNyOwogCi0JCWxj bF9hZHYgPSBsaW5rbW9kZV9hZHZfdG9fbGNsX2Fkdl90KGRldi0+cGh5ZGV2LT5hZHZlcnRpc2lu Zyk7Ci0JCWZsb3djdHJsID0gbWlpX3Jlc29sdmVfZmxvd2N0cmxfZmR4KGxjbF9hZHYsIHJtdF9h ZHYpOworCXBtc3IgPSBtdGtfcjMyKG1hYy0+aHcsIE1US19NQUNfTVNSKG1hYy0+aWQpKTsKIAot CQlpZiAoZmxvd2N0cmwgJiBGTE9XX0NUUkxfVFgpCi0JCQltY3IgfD0gTUFDX01DUl9GT1JDRV9U WF9GQzsKLQkJaWYgKGZsb3djdHJsICYgRkxPV19DVFJMX1JYKQotCQkJbWNyIHw9IE1BQ19NQ1Jf Rk9SQ0VfUlhfRkM7CisJc3RhdGUtPmxpbmsgPSAocG1zciAmIE1BQ19NU1JfTElOSyk7CisJc3Rh dGUtPmR1cGxleCA9IChwbXNyICYgTUFDX01TUl9EUFgpID4+IDE7CiAKLQkJbmV0aWZfZGJnKG1h Yy0+aHcsIGxpbmssIGRldiwgInJ4IHBhdXNlICVzLCB0eCBwYXVzZSAlc1xuIiwKLQkJCSAgZmxv d2N0cmwgJiBGTE9XX0NUUkxfUlggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLAotCQkJICBmbG93 Y3RybCAmIEZMT1dfQ1RSTF9UWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCXN3aXRjaCAo cG1zciAmIChNQUNfTVNSX1NQRUVEXzEwMDAgfCBNQUNfTVNSX1NQRUVEXzEwMCkpIHsKKwljYXNl IDA6CisJCXN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwOworCQlicmVhazsKKwljYXNlIE1BQ19NU1Jf U1BFRURfMTAwOgorCQlzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2Ug TUFDX01TUl9TUEVFRF8xMDAwOgorCQlzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlicmVh azsKKwlkZWZhdWx0OgorCQlzdGF0ZS0+c3BlZWQgPSBTUEVFRF9VTktOT1dOOworCQlicmVhazsK IAl9CiAKLQltdGtfdzMyKG1hYy0+aHcsIG1jciwgTVRLX01BQ19NQ1IobWFjLT5pZCkpOworCXN0 YXRlLT5wYXVzZSA9IDA7CisJaWYgKHBtc3IgJiBNQUNfTVNSX1JYX0ZDKQorCQlzdGF0ZS0+cGF1 c2UgfD0gTUxPX1BBVVNFX1JYOworCWlmIChwbXNyICYgTUFDX01TUl9UWF9GQykKKwkJc3RhdGUt PnBhdXNlIHw9IE1MT19QQVVTRV9UWDsKIAotCWlmICghb2ZfcGh5X2lzX2ZpeGVkX2xpbmsobWFj LT5vZl9ub2RlKSkKLQkJcGh5X3ByaW50X3N0YXR1cyhkZXYtPnBoeWRldik7CisJcmV0dXJuIDE7 CiB9CiAKLXN0YXRpYyBpbnQgbXRrX3BoeV9jb25uZWN0X25vZGUoc3RydWN0IG10a19ldGggKmV0 aCwgc3RydWN0IG10a19tYWMgKm1hYywKLQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2Rl KQorc3RhdGljIHZvaWQgbXRrX21hY19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAq Y29uZmlnKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0JaW50IHBoeV9tb2RlOwor CS8qIERvIG5vdGhpbmcgKi8KK30KIAotCXBoeV9tb2RlID0gb2ZfZ2V0X3BoeV9tb2RlKHBoeV9u b2RlKTsKLQlpZiAocGh5X21vZGUgPCAwKSB7Ci0JCWRldl9lcnIoZXRoLT5kZXYsICJpbmNvcnJl Y3QgcGh5LW1vZGUgJWRcbiIsIHBoeV9tb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorc3Rh dGljIHZvaWQgbXRrX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcs IHVuc2lnbmVkIGludCBtb2RlLAorCQkJICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkK K3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IG10 a19tYWMsCisJCQkJCSAgIHBoeWxpbmtfY29uZmlnKTsKIAotCXBoeWRldiA9IG9mX3BoeV9jb25u ZWN0KGV0aC0+bmV0ZGV2W21hYy0+aWRdLCBwaHlfbm9kZSwKLQkJCQltdGtfcGh5X2xpbmtfYWRq dXN0LCAwLCBwaHlfbW9kZSk7Ci0JaWYgKCFwaHlkZXYpIHsKLQkJZGV2X2VycihldGgtPmRldiwg ImNvdWxkIG5vdCBjb25uZWN0IHRvIFBIWVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlt dGtfdzMyKG1hYy0+aHcsIDB4ODAwMCwgTVRLX01BQ19NQ1IobWFjLT5pZCkpOworfQogCi0JZGV2 X2luZm8oZXRoLT5kZXYsCi0JCSAiY29ubmVjdGVkIG1hYyAlZCB0byBQSFkgYXQgJXMgW3VpZD0l MDh4LCBkcml2ZXI9JXNdXG4iLAotCQkgbWFjLT5pZCwgcGh5ZGV2X25hbWUocGh5ZGV2KSwgcGh5 ZGV2LT5waHlfaWQsCi0JCSBwaHlkZXYtPmRydi0+bmFtZSk7CitzdGF0aWMgdm9pZCBtdGtfbWFj X2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2Rl LAorCQkJICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisJCQkgICAgc3RydWN0IHBoeV9k ZXZpY2UgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gY29udGFpbmVyX29mKGNvbmZp Zywgc3RydWN0IG10a19tYWMsCisJCQkJCSAgIHBoeWxpbmtfY29uZmlnKTsKKwl1MzIgbWNyOwog Ci0JcmV0dXJuIDA7CisJbWNyID0gbXRrX3IzMihtYWMtPmh3LCBNVEtfTUFDX01DUihtYWMtPmlk KSk7CisJbWNyIHw9IE1BQ19NQ1JfVFhfRU4gfCBNQUNfTUNSX1JYX0VOOworCW10a193MzIobWFj LT5odywgbWNyLCBNVEtfTUFDX01DUihtYWMtPmlkKSk7CiB9CiAKLXN0YXRpYyBpbnQgbXRrX3Bo eV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBtdGtfdmFsaWRh dGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCisJCQkgdW5zaWduZWQgbG9uZyAqc3Vw cG9ydGVkLAorCQkJIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQogewotCXN0cnVj dCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtdGtfZXRoICpldGg7 Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgdmFsOwotCWludCBlcnI7Ci0KLQlldGgg PSBtYWMtPmh3OwotCW5wID0gb2ZfcGFyc2VfcGhhbmRsZShtYWMtPm9mX25vZGUsICJwaHktaGFu ZGxlIiwgMCk7Ci0JaWYgKCFucCAmJiBvZl9waHlfaXNfZml4ZWRfbGluayhtYWMtPm9mX25vZGUp KQotCQlpZiAoIW9mX3BoeV9yZWdpc3Rlcl9maXhlZF9saW5rKG1hYy0+b2Zfbm9kZSkpCi0JCQlu cCA9IG9mX25vZGVfZ2V0KG1hYy0+b2Zfbm9kZSk7Ci0JaWYgKCFucCkKLQkJcmV0dXJuIC1FTk9E RVY7CisJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0sobWFzaykgPSB7IDAsIH07CisJ c3RydWN0IG10a19tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBtdGtfbWFj LAorCQkJCQkgICBwaHlsaW5rX2NvbmZpZyk7CiAKLQllcnIgPSBtdGtfc2V0dXBfaHdfcGF0aChl dGgsIG1hYy0+aWQsIG9mX2dldF9waHlfbW9kZShucCkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJy X3BoeTsKLQotCW1hYy0+Z2VfbW9kZSA9IDA7Ci0Jc3dpdGNoIChvZl9nZXRfcGh5X21vZGUobnAp KSB7Ci0JY2FzZSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJOgotCQltYWMtPnRyZ21paSA9IHRy dWU7Ci0JY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDoKLQljYXNlIFBIWV9JTlRF UkZBQ0VfTU9ERV9SR01JSV9SWElEOgotCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lE OgotCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgotCWNhc2UgUEhZX0lOVEVSRkFDRV9N T0RFX1NHTUlJOgotCQlicmVhazsKLQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk6Ci0JY2Fz ZSBQSFlfSU5URVJGQUNFX01PREVfR01JSToKLQkJbWFjLT5nZV9tb2RlID0gMTsKLQkJYnJlYWs7 Ci0JY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkVWTUlJOgotCQltYWMtPmdlX21vZGUgPSAyOwot CQlicmVhazsKLQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOgotCQlpZiAoIW1hYy0+aWQp Ci0JCQlnb3RvIGVycl9waHk7Ci0JCW1hYy0+Z2VfbW9kZSA9IDM7Ci0JCWJyZWFrOwotCWRlZmF1 bHQ6Ci0JCWdvdG8gZXJyX3BoeTsKKwlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJG QUNFX01PREVfTkEgJiYKKwkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01P REVfTUlJICYmCisJICAgICEoIW1hYy0+aWQgJiYgc3RhdGUtPmludGVyZmFjZSA9PSBQSFlfSU5U RVJGQUNFX01PREVfVFJHTUlJICYmCisJICAgICAgTVRLX0hBU19DQVBTKG1hYy0+aHctPnNvYy0+ Y2FwcywgTVRLX1RSR01JSSkpICYmCisJICAgICFwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWko c3RhdGUtPmludGVyZmFjZSkpIHsKKwkJbGlua21vZGVfemVybyhzdXBwb3J0ZWQpOworCQlyZXR1 cm47CiAJfQogCi0JLyogcHV0IHRoZSBnbWFjIGludG8gdGhlIHJpZ2h0IG1vZGUgKi8KLQlyZWdt YXBfcmVhZChldGgtPmV0aHN5cywgRVRIU1lTX1NZU0NGRzAsICZ2YWwpOwotCXZhbCAmPSB+U1lT Q0ZHMF9HRV9NT0RFKFNZU0NGRzBfR0VfTUFTSywgbWFjLT5pZCk7Ci0JdmFsIHw9IFNZU0NGRzBf R0VfTU9ERShtYWMtPmdlX21vZGUsIG1hYy0+aWQpOwotCXJlZ21hcF93cml0ZShldGgtPmV0aHN5 cywgRVRIU1lTX1NZU0NGRzAsIHZhbCk7CisJcGh5bGlua19zZXRfcG9ydF9tb2RlcyhtYXNrKTsK KwlwaHlsaW5rX3NldChtYXNrLCBBdXRvbmVnKTsKIAotCS8qIGNvdXBsZSBwaHlkZXYgdG8gbmV0 X2RldmljZSAqLwotCWlmIChtdGtfcGh5X2Nvbm5lY3Rfbm9kZShldGgsIG1hYywgbnApKQotCQln b3RvIGVycl9waHk7Ci0KLQlvZl9ub2RlX3B1dChucCk7CisJaWYgKHN0YXRlLT5pbnRlcmZhY2Ug PT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSkgeworCQlwaHlsaW5rX3NldChtYXNrLCAxMDAw YmFzZVRfRnVsbCk7CisJfSBlbHNlIHsKKwkJcGh5bGlua19zZXQobWFzaywgMTBiYXNlVF9IYWxm KTsKKwkJcGh5bGlua19zZXQobWFzaywgMTBiYXNlVF9GdWxsKTsKKwkJcGh5bGlua19zZXQobWFz aywgMTAwYmFzZVRfSGFsZik7CisJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMGJhc2VUX0Z1bGwpOwor CisJCWlmIChzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpIHsKKwkJ CXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlVF9IYWxmKTsKKwkJCXBoeWxpbmtfc2V0KG1hc2ss IDEwMDBiYXNlVF9GdWxsKTsKKwkJfQorCX0KIAotCXJldHVybiAwOworCXBoeWxpbmtfc2V0KG1h c2ssIFBhdXNlKTsKKwlwaHlsaW5rX3NldChtYXNrLCBBc3ltX1BhdXNlKTsKIAotZXJyX3BoeToK LQlpZiAob2ZfcGh5X2lzX2ZpeGVkX2xpbmsobWFjLT5vZl9ub2RlKSkKLQkJb2ZfcGh5X2RlcmVn aXN0ZXJfZml4ZWRfbGluayhtYWMtPm9mX25vZGUpOwotCW9mX25vZGVfcHV0KG5wKTsKLQlkZXZf ZXJyKGV0aC0+ZGV2LCAiJXM6IGludmFsaWQgcGh5XG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIC1F SU5WQUw7CisJbGlua21vZGVfYW5kKHN1cHBvcnRlZCwgc3VwcG9ydGVkLCBtYXNrKTsKKwlsaW5r bW9kZV9hbmQoc3RhdGUtPmFkdmVydGlzaW5nLCBzdGF0ZS0+YWR2ZXJ0aXNpbmcsIG1hc2spOwog fQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBtdGtfcGh5bGlua19vcHMg PSB7CisJLnZhbGlkYXRlID0gbXRrX3ZhbGlkYXRlLAorCS5tYWNfbGlua19zdGF0ZSA9IG10a19t YWNfbGlua19zdGF0ZSwKKwkubWFjX2FuX3Jlc3RhcnQgPSBtdGtfbWFjX2FuX3Jlc3RhcnQsCisJ Lm1hY19jb25maWcgPSBtdGtfbWFjX2NvbmZpZywKKwkubWFjX2xpbmtfZG93biA9IG10a19tYWNf bGlua19kb3duLAorCS5tYWNfbGlua191cCA9IG10a19tYWNfbGlua191cCwKK307CisKIHN0YXRp YyBpbnQgbXRrX21kaW9faW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQogewogCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbWlpX25wOwpAQCAtMTc5OCw2ICsxODUzLDEzIEBAIHN0YXRpYyBpbnQgbXRrX29w ZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0 ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwlpbnQgZXJy ID0gcGh5bGlua19vZl9waHlfY29ubmVjdChtYWMtPnBoeWxpbmssIG1hYy0+b2Zfbm9kZSwgMCk7 CisKKwlpZiAoZXJyKSB7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IGNvdWxkIG5vdCBhdHRhY2gg UEhZOiAlZFxuIiwgX19mdW5jX18sCisJCQkgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KIAog CS8qIHdlIHJ1biAyIG5ldGRldnMgb24gdGhlIHNhbWUgZG1hIHJpbmcgc28gd2Ugb25seSBicmlu ZyBpdCB1cCBvbmNlICovCiAJaWYgKCFyZWZjb3VudF9yZWFkKCZldGgtPmRtYV9yZWZjbnQpKSB7 CkBAIC0xODE1LDcgKzE4NzcsNyBAQCBzdGF0aWMgaW50IG10a19vcGVuKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpCiAJZWxzZQogCQlyZWZjb3VudF9pbmMoJmV0aC0+ZG1hX3JlZmNudCk7CiAKLQlw aHlfc3RhcnQoZGV2LT5waHlkZXYpOworCXBoeWxpbmtfc3RhcnQobWFjLT5waHlsaW5rKTsKIAlu ZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xODQ5LDggKzE5MTEsMTEg QEAgc3RhdGljIGludCBtdGtfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBt dGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtdGtfZXRoICpldGggPSBt YWMtPmh3OwogCisJcGh5bGlua19zdG9wKG1hYy0+cGh5bGluayk7CisKIAluZXRpZl90eF9kaXNh YmxlKGRldik7Ci0JcGh5X3N0b3AoZGV2LT5waHlkZXYpOworCisJcGh5bGlua19kaXNjb25uZWN0 X3BoeShtYWMtPnBoeWxpbmspOwogCiAJLyogb25seSBzaHV0ZG93biBETUEgaWYgdGhpcyBpcyB0 aGUgbGFzdCB1c2VyICovCiAJaWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmV0aC0+ZG1hX3Jl ZmNudCkpCkBAIC0xOTI2LDE1ICsxOTkxLDYgQEAgc3RhdGljIGludCBtdGtfaHdfaW5pdChzdHJ1 Y3QgbXRrX2V0aCAqZXRoKQogCWV0aHN5c19yZXNldChldGgsIFJTVENUUkxfRkUpOwogCWV0aHN5 c19yZXNldChldGgsIFJTVENUUkxfUFBFKTsKIAotCXJlZ21hcF9yZWFkKGV0aC0+ZXRoc3lzLCBF VEhTWVNfU1lTQ0ZHMCwgJnZhbCk7Ci0JZm9yIChpID0gMDsgaSA8IE1US19NQUNfQ09VTlQ7IGkr KykgewotCQlpZiAoIWV0aC0+bWFjW2ldKQotCQkJY29udGludWU7Ci0JCXZhbCAmPSB+U1lTQ0ZH MF9HRV9NT0RFKFNZU0NGRzBfR0VfTUFTSywgZXRoLT5tYWNbaV0tPmlkKTsKLQkJdmFsIHw9IFNZ U0NGRzBfR0VfTU9ERShldGgtPm1hY1tpXS0+Z2VfbW9kZSwgZXRoLT5tYWNbaV0tPmlkKTsKLQl9 Ci0JcmVnbWFwX3dyaXRlKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwgdmFsKTsKLQogCWlm IChldGgtPnBjdGwpIHsKIAkJLyogU2V0IEdFMiBkcml2aW5nIGFuZCBzbGV3IHJhdGUgKi8KIAkJ cmVnbWFwX3dyaXRlKGV0aC0+cGN0bCwgR1BJT19EUlZfU0VMMTAsIDB4YTAwKTsKQEAgLTE5Nzks NyArMjAzNSw3IEBAIHN0YXRpYyBpbnQgbXRrX2h3X2luaXQoc3RydWN0IG10a19ldGggKmV0aCkK IAltdGtfdzMyKGV0aCwgTVRLX1JYX0RPTkVfSU5ULCBNVEtfUURNQV9JTlRfR1JQMik7CiAJbXRr X3czMihldGgsIDB4MjEwMjEwMDAsIE1US19GRV9JTlRfR1JQKTsKIAotCWZvciAoaSA9IDA7IGkg PCAyOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BQ19DT1VOVDsgaSsrKSB7CiAJCXUz MiB2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX0dETUFfRldEX0NGRyhpKSk7CiAKIAkJLyogc2V0dXAg dGhlIGZvcndhcmQgcG9ydCB0byBzZW5kIGZyYW1lIHRvIFBETUEgKi8KQEAgLTIwMzEsNyArMjA4 Nyw3IEBAIHN0YXRpYyBpbnQgX19pbml0IG10a19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYp CiAJCQlkZXYtPmRldl9hZGRyKTsKIAl9CiAKLQlyZXR1cm4gbXRrX3BoeV9jb25uZWN0KGRldik7 CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG10a191bmluaXQoc3RydWN0IG5ldF9kZXZp Y2UgKmRldikKQEAgLTIwMzksMjAgKzIwOTUsMjAgQEAgc3RhdGljIHZvaWQgbXRrX3VuaW5pdChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJp dihkZXYpOwogCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OwogCi0JcGh5X2Rpc2Nvbm5l Y3QoZGV2LT5waHlkZXYpOwotCWlmIChvZl9waHlfaXNfZml4ZWRfbGluayhtYWMtPm9mX25vZGUp KQotCQlvZl9waHlfZGVyZWdpc3Rlcl9maXhlZF9saW5rKG1hYy0+b2Zfbm9kZSk7CisJcGh5bGlu a19kaXNjb25uZWN0X3BoeShtYWMtPnBoeWxpbmspOwogCW10a190eF9pcnFfZGlzYWJsZShldGgs IH4wKTsKIAltdGtfcnhfaXJxX2Rpc2FibGUoZXRoLCB+MCk7CiB9CiAKIHN0YXRpYyBpbnQgbXRr X2RvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQg Y21kKQogeworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCiAJc3dp dGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgogCWNhc2UgU0lPQ0dNSUlSRUc6CiAJY2Fz ZSBTSU9DU01JSVJFRzoKLQkJcmV0dXJuIHBoeV9taWlfaW9jdGwoZGV2LT5waHlkZXYsIGlmciwg Y21kKTsKKwkJcmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKG1hYy0+cGh5bGluaywgaWZyLCBjbWQp OwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTIwOTMsMTYgKzIxNDksNiBAQCBzdGF0aWMg dm9pZCBtdGtfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCQkgICAg IGV0aC0+ZGV2LT5waW5zLT5kZWZhdWx0X3N0YXRlKTsKIAltdGtfaHdfaW5pdChldGgpOwogCi0J Zm9yIChpID0gMDsgaSA8IE1US19NQUNfQ09VTlQ7IGkrKykgewotCQlpZiAoIWV0aC0+bWFjW2ld IHx8Ci0JCSAgICBvZl9waHlfaXNfZml4ZWRfbGluayhldGgtPm1hY1tpXS0+b2Zfbm9kZSkpCi0J CQljb250aW51ZTsKLQkJZXJyID0gcGh5X2luaXRfaHcoZXRoLT5uZXRkZXZbaV0tPnBoeWRldik7 Ci0JCWlmIChlcnIpCi0JCQlkZXZfZXJyKGV0aC0+ZGV2LCAiJXM6IFBIWSBpbml0IGZhaWxlZC5c biIsCi0JCQkJZXRoLT5uZXRkZXZbaV0tPm5hbWUpOwotCX0KLQogCS8qIHJlc3RhcnQgRE1BIGFu ZCBlbmFibGUgSVJRcyAqLwogCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspIHsK IAkJaWYgKCF0ZXN0X2JpdChpLCAmcmVzdGFydCkpCkBAIC0yMTY1LDkgKzIyMTEsNyBAQCBzdGF0 aWMgaW50IG10a19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJ aWYgKHVubGlrZWx5KHRlc3RfYml0KE1US19SRVNFVFRJTkcsICZtYWMtPmh3LT5zdGF0ZSkpKQog CQlyZXR1cm4gLUVCVVNZOwogCi0JcGh5X2V0aHRvb2xfa3NldHRpbmdzX2dldChuZGV2LT5waHlk ZXYsIGNtZCk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5n c19nZXQobWFjLT5waHlsaW5rLCBjbWQpOwogfQogCiBzdGF0aWMgaW50IG10a19zZXRfbGlua19r c2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCkBAIC0yMTc4LDcgKzIyMjIsNyBAQCBz dGF0aWMgaW50IG10a19zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYs CiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KE1US19SRVNFVFRJTkcsICZtYWMtPmh3LT5zdGF0ZSkp KQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQo bmRldi0+cGh5ZGV2LCBjbWQpOworCXJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3Nl dChtYWMtPnBoeWxpbmssIGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIG10a19nZXRfZHJ2aW5mbyhz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjIxMiwyMiArMjI1NiwxMCBAQCBzdGF0aWMgaW50 IG10a19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaWYgKHVubGlrZWx5KHRl c3RfYml0KE1US19SRVNFVFRJTkcsICZtYWMtPmh3LT5zdGF0ZSkpKQogCQlyZXR1cm4gLUVCVVNZ OwogCi0JcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcoZGV2LT5waHlkZXYpOwotfQotCi1zdGF0 aWMgdTMyIG10a19nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBt dGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnI7Ci0KLQlpZiAodW5saWtl bHkodGVzdF9iaXQoTVRLX1JFU0VUVElORywgJm1hYy0+aHctPnN0YXRlKSkpCi0JCXJldHVybiAt RUJVU1k7Ci0KLQllcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsoZGV2LT5waHlkZXYpOwotCWlmIChl cnIpCi0JCXJldHVybiBldGh0b29sX29wX2dldF9saW5rKGRldik7CisJaWYgKCFtYWMtPnBoeWxp bmspCisJCXJldHVybiAtRU5PVFNVUFA7CiAKLQlyZXR1cm4gZGV2LT5waHlkZXYtPmxpbms7CisJ cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KG1hYy0+cGh5bGluayk7CiB9CiAKIHN0 YXRpYyB2b2lkIG10a19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3Ry aW5nc2V0LCB1OCAqZGF0YSkKQEAgLTIzNDcsNyArMjM3OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZXRodG9vbF9vcHMgbXRrX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbXNnbGV2ZWwJCT0gbXRr X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IG10a19zZXRfbXNnbGV2ZWwsCiAJLm53 YXlfcmVzZXQJCT0gbXRrX253YXlfcmVzZXQsCi0JLmdldF9saW5rCQk9IG10a19nZXRfbGluaywK KwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3N0cmluZ3MJCT0gbXRr X2dldF9zdHJpbmdzLAogCS5nZXRfc3NldF9jb3VudAkJPSBtdGtfZ2V0X3NzZXRfY291bnQsCiAJ LmdldF9ldGh0b29sX3N0YXRzCT0gbXRrX2dldF9ldGh0b29sX3N0YXRzLApAQCAtMjM3NSw5ICsy NDA3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXRrX25ldGRldl9v cHMgPSB7CiAKIHN0YXRpYyBpbnQgbXRrX2FkZF9tYWMoc3RydWN0IG10a19ldGggKmV0aCwgc3Ry dWN0IGRldmljZV9ub2RlICpucCkKIHsKKwlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKIAlzdHJ1 Y3QgbXRrX21hYyAqbWFjOwogCWNvbnN0IF9fYmUzMiAqX2lkID0gb2ZfZ2V0X3Byb3BlcnR5KG5w LCAicmVnIiwgTlVMTCk7Ci0JaW50IGlkLCBlcnI7CisJaW50IHBoeV9tb2RlLCBpZCwgZXJyOwog CiAJaWYgKCFfaWQpIHsKIAkJZGV2X2VycihldGgtPmRldiwgIm1pc3NpbmcgbWFjIGlkXG4iKTsK QEAgLTI0MjEsNiArMjQ1NCwzMiBAQCBzdGF0aWMgaW50IG10a19hZGRfbWFjKHN0cnVjdCBtdGtf ZXRoICpldGgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiAJdTY0X3N0YXRzX2luaXQoJm1hYy0+ aHdfc3RhdHMtPnN5bmNwKTsKIAltYWMtPmh3X3N0YXRzLT5yZWdfb2Zmc2V0ID0gaWQgKiBNVEtf U1RBVF9PRkZTRVQ7CiAKKwkvKiBwaHlsaW5rIGNyZWF0ZSAqLworCXBoeV9tb2RlID0gb2ZfZ2V0 X3BoeV9tb2RlKG5wKTsKKwlpZiAocGh5X21vZGUgPCAwKSB7CisJCWRldl9lcnIoZXRoLT5kZXYs ICJpbmNvcnJlY3QgcGh5LW1vZGVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVf bmV0ZGV2OworCX0KKworCS8qIG1hYyBjb25maWcgaXMgbm90IHNldCAqLworCW1hYy0+aW50ZXJm YWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BOworCW1hYy0+bW9kZSA9IE1MT19BTl9QSFk7CisJ bWFjLT5zcGVlZCA9IFNQRUVEX1VOS05PV047CisKKwltYWMtPnBoeWxpbmtfY29uZmlnLmRldiA9 ICZldGgtPm5ldGRldltpZF0tPmRldjsKKwltYWMtPnBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlM SU5LX05FVERFVjsKKworCXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZSgmbWFjLT5waHlsaW5rX2Nv bmZpZywKKwkJCQkgb2ZfZndub2RlX2hhbmRsZShtYWMtPm9mX25vZGUpLAorCQkJCSBwaHlfbW9k ZSwgJm10a19waHlsaW5rX29wcyk7CisJaWYgKElTX0VSUihwaHlsaW5rKSkgeworCQllcnIgPSBQ VFJfRVJSKHBoeWxpbmspOworCQlnb3RvIGZyZWVfbmV0ZGV2OworCX0KKworCW1hYy0+cGh5bGlu ayA9IHBoeWxpbms7CisKIAlTRVRfTkVUREVWX0RFVihldGgtPm5ldGRldltpZF0sIGV0aC0+ZGV2 KTsKIAlldGgtPm5ldGRldltpZF0tPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWV0aC0+bmV0 ZGV2W2lkXS0+bmV0ZGV2X29wcyA9ICZtdGtfbmV0ZGV2X29wczsKQEAgLTI2MTcsNiArMjY3Niw3 IEBAIHN0YXRpYyBpbnQgbXRrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiBz dGF0aWMgaW50IG10a19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlz dHJ1Y3QgbXRrX2V0aCAqZXRoID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0 IG10a19tYWMgKm1hYzsKIAlpbnQgaTsKIAogCS8qIHN0b3AgYWxsIGRldmljZXMgdG8gbWFrZSBz dXJlIHRoYXQgZG1hIGlzIHByb3Blcmx5IHNodXQgZG93biAqLwpAQCAtMjYyNCw2ICsyNjg0LDgg QEAgc3RhdGljIGludCBtdGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJ CWlmICghZXRoLT5uZXRkZXZbaV0pCiAJCQljb250aW51ZTsKIAkJbXRrX3N0b3AoZXRoLT5uZXRk ZXZbaV0pOworCQltYWMgPSBuZXRkZXZfcHJpdihldGgtPm5ldGRldltpXSk7CisJCXBoeWxpbmtf ZGlzY29ubmVjdF9waHkobWFjLT5waHlsaW5rKTsKIAl9CiAKIAltdGtfaHdfZGVpbml0KGV0aCk7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5o IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuaAppbmRleCBiYWI5 NGY3NjNlMmMuLjNiZmNiYTlmZmI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQv bWVkaWF0ZWsvbXRrX2V0aF9zb2MuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRl ay9tdGtfZXRoX3NvYy5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfbmV0 Lmg+CiAjaW5jbHVkZSA8bGludXgvdTY0X3N0YXRzX3N5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9y ZWZjb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeWxpbmsuaD4KIAogI2RlZmluZSBNVEtfUURN QV9QQUdFX1NJWkUJMjA0OAogI2RlZmluZQlNVEtfTUFYX1JYX0xFTkdUSAkxNTM2CkBAIC0zMjAs MTIgKzMyMSwxOCBAQAogI2RlZmluZSBNQUNfTUNSX1NQRUVEXzEwMAlCSVQoMikKICNkZWZpbmUg TUFDX01DUl9GT1JDRV9EUFgJQklUKDEpCiAjZGVmaW5lIE1BQ19NQ1JfRk9SQ0VfTElOSwlCSVQo MCkKLSNkZWZpbmUgTUFDX01DUl9GSVhFRF9MSU5LCShNQUNfTUNSX01BWF9SWF8xNTM2IHwgTUFD X01DUl9JUEdfQ0ZHIHwgXAotCQkJCSBNQUNfTUNSX0ZPUkNFX01PREUgfCBNQUNfTUNSX1RYX0VO IHwgXAotCQkJCSBNQUNfTUNSX1JYX0VOIHwgTUFDX01DUl9CQUNLT0ZGX0VOIHwgXAotCQkJCSBN QUNfTUNSX0JBQ0tQUl9FTiB8IE1BQ19NQ1JfRk9SQ0VfUlhfRkMgfCBcCi0JCQkJIE1BQ19NQ1Jf Rk9SQ0VfVFhfRkMgfCBNQUNfTUNSX1NQRUVEXzEwMDAgfCBcCi0JCQkJIE1BQ19NQ1JfRk9SQ0Vf RFBYIHwgTUFDX01DUl9GT1JDRV9MSU5LKQorCisvKiBNYWMgc3RhdHVzIHJlZ2lzdGVycyAqLwor I2RlZmluZSBNVEtfTUFDX01TUih4KQkJKDB4MTAxMDggKyAoeCAqIDB4MTAwKSkKKyNkZWZpbmUg TUFDX01TUl9FRUUxRwkJQklUKDcpCisjZGVmaW5lIE1BQ19NU1JfRUVFMTAwTQkJQklUKDYpCisj ZGVmaW5lIE1BQ19NU1JfUlhfRkMJCUJJVCg1KQorI2RlZmluZSBNQUNfTVNSX1RYX0ZDCQlCSVQo NCkKKyNkZWZpbmUgTUFDX01TUl9TUEVFRF8xMDAwCUJJVCgzKQorI2RlZmluZSBNQUNfTVNSX1NQ RUVEXzEwMAlCSVQoMikKKyNkZWZpbmUgTUFDX01TUl9TUEVFRF9NQVNLCShNQUNfTVNSX1NQRUVE XzEwMDAgfCBNQUNfTVNSX1NQRUVEXzEwMCkKKyNkZWZpbmUgTUFDX01TUl9EUFgJCUJJVCgxKQor I2RlZmluZSBNQUNfTVNSX0xJTksJCUJJVCgwKQogCiAvKiBUUkdNSUkgUlhDIGNvbnRyb2wgcmVn aXN0ZXIgKi8KICNkZWZpbmUgVFJHTUlJX1JDS19DVFJMCQkweDEwMzAwCkBAIC04MTUsMjIgKzgy MiwyMyBAQCBzdHJ1Y3QgbXRrX2V0aCB7CiAvKiBzdHJ1Y3QgbXRrX21hYyAtCXRoZSBzdHJ1Y3R1 cmUgdGhhdCBob2xkcyB0aGUgaW5mbyBhYm91dCB0aGUgTUFDcyBvZiB0aGUKICAqCQkJU29DCiAg KiBAaWQ6CQkJVGhlIG51bWJlciBvZiB0aGUgTUFDCi0gKiBAZ2VfbW9kZTogICAgICAgICAgICBJ bnRlcmZhY2UgbW9kZSBrZXB0IGZvciBzZXR1cCByZXN0b3JpbmcKKyAqIEBpbnRlcmZhY2U6CQlJ bnRlcmZhY2UgbW9kZSBrZXB0IGZvciBkZXRlY3RpbmcgY2hhbmdlIGluIGh3IHNldHRpbmdzCiAg KiBAb2Zfbm9kZToJCU91ciBkZXZpY2V0cmVlIG5vZGUKICAqIEBodzoJCQlCYWNrcG9pbnRlciB0 byBvdXIgbWFpbiBkYXRhc3RydXR1cmUKICAqIEBod19zdGF0czoJCVBhY2tldCBzdGF0aXN0aWNz IGNvdW50ZXIKLSAqIEB0cmdtaWkJCUluZGljYXRlIGlmIHRoZSBNQUMgdXNlcyBUUkdNSUkgY29u bmVjdGVkIHRvIGludGVybmFsCi0JCQlzd2l0Y2gKICAqLwogc3RydWN0IG10a19tYWMgewogCWlu dAkJCQlpZDsKLQlpbnQJCQkJZ2VfbW9kZTsKKwlwaHlfaW50ZXJmYWNlX3QJCQlpbnRlcmZhY2U7 CisJdW5zaWduZWQgaW50CQkJbW9kZTsKKwlpbnQJCQkJc3BlZWQ7CiAJc3RydWN0IGRldmljZV9u b2RlCQkqb2Zfbm9kZTsKKwlzdHJ1Y3QgcGh5bGluawkJCSpwaHlsaW5rOworCXN0cnVjdCBwaHls aW5rX2NvbmZpZwkJcGh5bGlua19jb25maWc7CiAJc3RydWN0IG10a19ldGgJCQkqaHc7CiAJc3Ry dWN0IG10a19od19zdGF0cwkJKmh3X3N0YXRzOwogCV9fYmUzMgkJCQlod2xyb19pcFtNVEtfTUFY X0xST19JUF9DTlRdOwogCWludAkJCQlod2xyb19pcF9jbnQ7Ci0JYm9vbAkJCQl0cmdtaWk7CiB9 OwogCiAvKiB0aGUgc3RydWN0IGRlc2NyaWJpbmcgdGhlIFNvQy4gdGhlc2UgYXJlIGRlY2xhcmVk IGluIHRoZSBzb2NfeHl6LmMgZmlsZXMgKi8KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW1lZGlhdGVrIG1haWxpbmcgbGlz dApMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRl YWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbWVkaWF0ZWsK