From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <1535146416-11754-2-git-send-email-ajayg@nvidia.com> Date: Fri, 24 Aug 2018 14:33:36 -0700 To: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org Cc: wsa@the-dreams.de, heikki.krogerus@linux.intel.com, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlcgpvdmVyIEkyQyBpbnRlcmZhY2UuCgpUaGlzIFVDU0kgSTJDIGRyaXZlciB1c2VzIEkyQyBi dXMgZHJpdmVyIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZwp3aXRoIFR5cGUtQyBjb250cm9s bGVyLgoKU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KLS0tCkNo YW5nZXMgZnJvbSB2MSAtPiB2MjoKRml4ZWQgaWRlbnRhdGlvbiBpbiBkcml2ZXJzL3VzYi90eXBl Yy91Y3NpL0tjb25maWcKCiBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcgICAgICAgIHwg IDEwICsKIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgICAgICAgfCAgIDIgKwogZHJp dmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2kyY19jY2cuYyB8IDU5MSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDYwMyBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2kyY19jY2cuYwoK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZyBiL2RyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvS2NvbmZpZwppbmRleCBlMzZkNmM3Li4wY2U5ZDQ4IDEwMDY0NAotLS0gYS9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNz aS9LY29uZmlnCkBAIC0yMyw2ICsyMywxNiBAQCBjb25maWcgVFlQRUNfVUNTSQogCiBpZiBUWVBF Q19VQ1NJCiAKK2NvbmZpZyBVQ1NJX0kyQ19DQ0cKKwl0cmlzdGF0ZSAiVUNTSSBJMkMgSW50ZXJm YWNlIERyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IgorCWRlcGVuZHMgb24gSTJDX0dQVQorCWhlbHAK KwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgVUNTSSBzdXBwb3J0IG9uIE5WSURJQSBHUFVzIHRoYXQg ZXhwb3NlIGEKKwkgIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJvbGxlciBvdmVyIEkyQyBpbnRl cmZhY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0g aGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgdWNzaV9pMmNfY2NnLmtvLgorCiBj b25maWcgVUNTSV9BQ1BJCiAJdHJpc3RhdGUgIlVDU0kgQUNQSSBJbnRlcmZhY2UgRHJpdmVyIgog CWRlcGVuZHMgb24gQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtl ZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKaW5kZXggN2FmYmVhNS4uNDQz OTQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlCkBAIC04LDMgKzgsNSBAQCB0eXBlY191Y3Np LXkJCQk6PSB1Y3NpLm8KIHR5cGVjX3Vjc2ktJChDT05GSUdfVFJBQ0lORykJKz0gdHJhY2Uubwog CiBvYmotJChDT05GSUdfVUNTSV9BQ1BJKQkJKz0gdWNzaV9hY3BpLm8KKworb2JqLSQoQ09ORklH X1VDU0lfSTJDX0NDRykJKz0gdWNzaV9pMmNfY2NnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvdWNzaV9pMmNfY2NnLmMgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lf aTJjX2NjZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2UzZjgKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfaTJjX2NjZy5jCkBA IC0wLDAgKzEsNTkxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqIFVDU0kgSTJDIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyCisg KgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgor ICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNz aV9hY3BpLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Bj aS5oPgorI2luY2x1ZGUgInVjc2kuaCIKKworc3RydWN0IHVjc2lfaTJjX2NjZyB7CisJc3RydWN0 IGRldmljZSAqZGV2OworCXN0cnVjdCB1Y3NpICp1Y3NpOworCXN0cnVjdCB1Y3NpX3BwbSBwcG07 CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlpbnQgaXJxOworCWJvb2wgd2FrZV9lbmFi bGVkOworCXVuc2lnbmVkIGNoYXIgdmVyOworfTsKKworI2RlZmluZSBDQ0dYX0kyQ19SQUJfREVW SUNFX01PREUJCQkweDAwMDBVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9CT09UX01PREVfUkVBU09O CQkJMHgwMDAxVQorI2RlZmluZSBDQ0dYX0kyQ19SQUJfUkVBRF9TSUxJQ09OX0lECQkJMHgwMDAy VQorI2RlZmluZSBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcJCQkJMHgwMDA2VQorI2RlZmluZSBDQ0dY X0kyQ19SQUJfUkVTRVQJCQkJMHgwMDA4VQorI2RlZmluZSBDQ0dYX0kyQ19SQUJfUkVBRF9BTExf VkVSU0lPTgkJCTB4MDAxMFUKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1JFQURfQUxMX1ZFUlNJT05f Qk9PVExPQURFUiBcCisJCQkoQ0NHWF9JMkNfUkFCX1JFQURfQUxMX1ZFUlNJT04gKyAweDAwKQor I2RlZmluZSBDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTl9CT09UTE9BREVSX0JBU0UgXAor CQkJKENDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OX0JPT1RMT0FERVIgKyAwKQorI2RlZmlu ZSBDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTl9CT09UTE9BREVSX0ZXIFwKKwkJCShDQ0dY X0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTl9CT09UTE9BREVSICsgNCkKKyNkZWZpbmUgQ0NHWF9J MkNfUkFCX1JFQURfQUxMX1ZFUlNJT05fQVBQIFwKKwkJCShDQ0dYX0kyQ19SQUJfUkVBRF9BTExf VkVSU0lPTiArIDB4MDgpCisjZGVmaW5lIENDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OX0FQ UF9CQVNFIFwKKwkJCShDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTl9BUFAgKyAwKQorI2Rl ZmluZSBDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTl9BUFBfRlcgXAorCQkJKENDR1hfSTJD X1JBQl9SRUFEX0FMTF9WRVJTSU9OX0FQUCArIDQpCisjZGVmaW5lIENDR1hfSTJDX1JBQl9GVzJf VkVSU0lPTgkJCTB4MDAyMFUKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1BEUE9SVF9FTkFCTEUJCQkw eDAwMkNVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9VQ1NJX1NUQVRVUwkJCTB4MDAzOFUKKyNkZWZp bmUgQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTAkJCTB4MDAzOVUKKyNkZWZpbmUgQ0NHWF9JMkNf UkFCX1VDU0lfQ09OVFJPTF9TVE9QCQkJMHgyVQorI2RlZmluZSBDQ0dYX0kyQ19SQUJfVUNTSV9D T05UUk9MX1NUQVJUCQkJMHgxVQorI2RlZmluZSBDQ0dYX0kyQ19SQUJfSFBJX1ZFUlNJT04JCQkw eDAwM0NVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9SRVNQT05TRV9SRUcJCQkweDAwN0VVCisjZGVm aW5lIENDR1hfSTJDX1JBQl9ETV9DT05UUk9MXzEJCQkweDEwMDBVCisjZGVmaW5lIENDR1hfSTJD X1JBQl9XUklURV9EQVRBX01FTU9SWV8xCQkweDE4MDBVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9E TV9DT05UUk9MXzIJCQkweDIwMDBVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9XUklURV9EQVRBX01F TU9SWV8yCQkweDI4MDBVCisjZGVmaW5lIENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sJCQkw eGYwMDBVCisKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1JFU1BPTlNFX1JFR19SRVNFVF9DT01QTEVU RQkweDgwCisKK3N0YXRpYyBpbnQgY2NnX3JlYWQoc3RydWN0IHVjc2lfaTJjX2NjZyAqdWksIHUx NiByYWIsIHU4ICpkYXRhLCB1MzIgbGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVpLT5k ZXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHVpLT5jbGllbnQ7CisJdW5zaWduZWQg Y2hhciBidWZbMl07CisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkcgk9 IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyAgPSAweDAsCisJCQkubGVuCT0gMHgyLAorCQkJLmJ1 Zgk9IGJ1ZiwKKwkJfSwKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3Mg ID0gSTJDX01fUkQsCisJCQkuYnVmCT0gZGF0YSwKKwkJfSwKKwl9OworCXUzMiBybGVuLCByZW1f bGVuID0gbGVuOworCWludCBlcnI7CisKKwl3aGlsZSAocmVtX2xlbiA+IDApIHsKKwkJbXNnc1sx XS5idWYgPSAmZGF0YVtsZW4gLSByZW1fbGVuXTsKKwkJcmxlbiA9IG1pbl90KHUxNiwgcmVtX2xl biwgNCk7CisJCW1zZ3NbMV0ubGVuID0gcmxlbjsKKwkJYnVmWzBdID0gKHJhYiA+PiAwKSAmIDB4 ZmY7CisJCWJ1ZlsxXSA9IChyYWIgPj4gOCkgJiAweGZmOworCQllcnIgPSBpMmNfdHJhbnNmZXIo Y2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwkJaWYgKGVyciA9PSBB UlJBWV9TSVpFKG1zZ3MpKSB7CisJCQllcnIgPSAwOworCQl9IGVsc2UgaWYgKGVyciA+PSAwKSB7 CisJCQlkZXZfZXJyKGRldiwgIiVzIGkyY190cmFuc2ZlciBmYWlsZWQsIGVyciAlZFxuIiwKKwkJ CQlfX2Z1bmNfXywgZXJyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCXJhYiArPSBybGVuOwor CQlyZW1fbGVuIC09IHJsZW47CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBj Y2dfd3JpdGUoc3RydWN0IHVjc2lfaTJjX2NjZyAqdWksIHUxNiByYWIsIHU4ICpkYXRhLCB1MzIg bGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVpLT5kZXY7CisJc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCA9IHVpLT5jbGllbnQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJc3RydWN0 IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKKwkJCS5m bGFncyAgPSAweDAsCisJCQkubGVuCT0gMHgyLAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJfSwKKwkJewor CQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgID0gMHgwLAorCQkJLmJ1Zgk9IGRh dGEsCisJCQkubGVuCT0gbGVuLAorCQl9LAorCQl7CisJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwK KwkJCS5mbGFncyAgPSBJMkNfTV9TVE9QLAorCQl9LAorCX07CisJaW50IGVycjsKKworCWJ1Zlsw XSA9IChyYWIgPj4gMCkgJiAweGZmOworCWJ1ZlsxXSA9IChyYWIgPj4gOCkgJiAweGZmOworCWVy ciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykp OworCWlmIChlcnIgPT0gQVJSQVlfU0laRShtc2dzKSkgeworCQllcnIgPSAwOworCX0gZWxzZSBp ZiAoZXJyID49IDApIHsKKwkJZGV2X2VycihkZXYsICIlcyBpMmNfdHJhbnNmZXIgZmFpbGVkLCBl cnIgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0 dXJuIGVycjsKK30KKworc3RhdGljIGludCB1Y3NpX2kyY19jY2dfaW5pdChzdHJ1Y3QgdWNzaV9p MmNfY2NnICp1aSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1aS0+ZGV2OworCXU4IGRhdGFb NjRdOworCWludCBpLCBlcnI7CisKKwkvKiBzZWxlY3RpdmVseSBpc3N1ZSBkZXZpY2UgcmVzZXQK KwkgKiAtIGlmIFJFU1BPTlNFIHJlZ2lzdGVyIGlzIFJFU0VUX0NPTVBMRVRFLCBkbyBub3QgaXNz dWUgZGV2aWNlIHJlc2V0CisJICogICAod2lsbCBjYXVzZSB1c2IgZGV2aWNlIGRpc2Nvbm5lY3Qg LyByZWNvbm5lY3QpCisJICogLSBpZiBSRVNQT05TRSByZWdpc3RlciBpcyBub3QgUkVTRVRfQ09N UExFVEUsIGlzc3VlIGRldmljZSByZXNldAorCSAqICAgKGNhdXNlcyBQUEMgdG8gcmVzeW5jIGRl dmljZSBjb25uZWN0IHN0YXRlIGJ5IHJlLWlzc3VpbmcKKwkgKiAgIHNldCBtdXggY29tbWFuZCkK KwkgKi8KKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHgwMDsKKworCWVyciA9IGNjZ19y ZWFkKHVpLCBDQ0dYX0kyQ19SQUJfUkVTUE9OU0VfUkVHLCBkYXRhLCAweDIpOworCWlmIChlcnIg PCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgY2NnX3JlYWQgZmFpbGVkLCBlcnIgJWRcbiIsIF9f ZnVuY19fLCBlcnIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJDQ0dY X0kyQ19SQUJfUkVTUE9OU0VfUkVHICUwMngiLCBkYXRhWzBdKTsKKworCS8qIHJlYWQgZGV2aWNl IG1vZGUgKi8KKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKworCWVyciA9IGNjZ19y ZWFkKHVpLCBDQ0dYX0kyQ19SQUJfREVWSUNFX01PREUsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJ aWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICIlcyBjY2dfcmVhZCBmYWlsZWQsIGVyciAl ZFxuIiwgX19mdW5jX18sIGVycik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldl9pbmZvKGRl diwgIltERVZJQ0VfTU9ERV0gJTAyeCAoSFBJdiVjKSAoRmxhc2ggcm93IHNpemUgJWQpXG4iLAor CQlkYXRhW0NDR1hfSTJDX1JBQl9ERVZJQ0VfTU9ERV0sCisJCSgoZGF0YVtDQ0dYX0kyQ19SQUJf REVWSUNFX01PREVdID4+IDcpICYgMHgwMSkgPyAnMicgOiAnMScsCisJCSgoZGF0YVtDQ0dYX0ky Q19SQUJfREVWSUNFX01PREVdID4+IDQpICYgMHgwMykgPyAyNTYgOiAxMjgpOworCisJZGV2X2lu Zm8oZGV2LCAiKFBEIHBvcnRzICVkKSAoRmlybXdhcmUgbW9kZSAlZClcbiIsCisJCSgoZGF0YVtD Q0dYX0kyQ19SQUJfREVWSUNFX01PREVdID4+IDIpICYgMHgwMykgPyAyIDogMSwKKwkJKChkYXRh W0NDR1hfSTJDX1JBQl9ERVZJQ0VfTU9ERV0gPj4gMCkgJiAweDAzKSk7CisKKwlkZXZfaW5mbyhk ZXYsICJbQk9PVF9NT0RFX1JFQVNPTl0gJTAyeCAoQm9vdCBtb2RlIHJlcXVlc3RlZCAlZClcbiIs CisJCWRhdGFbQ0NHWF9JMkNfUkFCX0JPT1RfTU9ERV9SRUFTT05dLAorCQkoKGRhdGFbQ0NHWF9J MkNfUkFCX0JPT1RfTU9ERV9SRUFTT05dID4+IDApICYgMHgwMSkgPyAxIDogMCk7CisKKwlkZXZf aW5mbyhkZXYsICIoRlcxIHZhbGlkICVkKSAoRlcyIHZhbGlkICVkKVxuIiwKKwkJKChkYXRhW0ND R1hfSTJDX1JBQl9CT09UX01PREVfUkVBU09OXSA+PiAyKSAmIDB4MDEpID8gMSA6IDAsCisJCSgo ZGF0YVtDQ0dYX0kyQ19SQUJfQk9PVF9NT0RFX1JFQVNPTl0gPj4gMykgJiAweDAxKSA/IDEgOiAw KTsKKworCWRldl9pbmZvKGRldiwgIltSRUFEX1NJTElDT05fSURdICUwMnggJTAyeCIsCisJCWRh dGFbQ0NHWF9JMkNfUkFCX1JFQURfU0lMSUNPTl9JRCswXSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJf UkVBRF9TSUxJQ09OX0lEKzFdKTsKKworCWRldl9pbmZvKGRldiwgIltSRUFEX0FMTF9WRVJTSU9O XVtCT09UTE9BREVSXVxuIik7CisJZGV2X2luZm8oZGV2LCAiJTAyeCAlMDJ4ICUwMnggJTAyeCAl MDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJT SU9OKzBdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzFdLAorCQlkYXRh W0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzJdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9S RUFEX0FMTF9WRVJTSU9OKzNdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9O KzRdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzVdLAorCQlkYXRhW0ND R1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzZdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFE X0FMTF9WRVJTSU9OKzddKTsKKworCWRldl9pbmZvKGRldiwgIltSRUFEX0FMTF9WRVJTSU9OXVtG VzFdXG4iKTsKKwlkZXZfaW5mbyhkZXYsICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAl MDJ4ICUwMnhcbiIsCisJCWRhdGFbQ0NHWF9JMkNfUkFCX1JFQURfQUxMX1ZFUlNJT04rOCswXSwK KwkJZGF0YVtDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTis4KzFdLAorCQlkYXRhW0NDR1hf STJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzgrMl0sCisJCWRhdGFbQ0NHWF9JMkNfUkFCX1JFQURf QUxMX1ZFUlNJT04rOCszXSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJfUkVBRF9BTExfVkVSU0lPTis4 KzRdLAorCQlkYXRhW0NDR1hfSTJDX1JBQl9SRUFEX0FMTF9WRVJTSU9OKzgrNV0sCisJCWRhdGFb Q0NHWF9JMkNfUkFCX1JFQURfQUxMX1ZFUlNJT04rOCs2XSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJf UkVBRF9BTExfVkVSU0lPTis4KzddKTsKKworCWRldl9pbmZvKGRldiwgIltGVzJfVkVSU0lPTl0g JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQlkYXRhW0NDR1hf STJDX1JBQl9GVzJfVkVSU0lPTiswXSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJfRlcyX1ZFUlNJT04r MV0sCisJCWRhdGFbQ0NHWF9JMkNfUkFCX0ZXMl9WRVJTSU9OKzJdLAorCQlkYXRhW0NDR1hfSTJD X1JBQl9GVzJfVkVSU0lPTiszXSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJfRlcyX1ZFUlNJT04rNF0s CisJCWRhdGFbQ0NHWF9JMkNfUkFCX0ZXMl9WRVJTSU9OKzVdLAorCQlkYXRhW0NDR1hfSTJDX1JB Ql9GVzJfVkVSU0lPTis2XSwKKwkJZGF0YVtDQ0dYX0kyQ19SQUJfRlcyX1ZFUlNJT04rN10pOwor CisJLyogcmVhZCByZXNwb25zZSByZWdpc3RlciAqLworCWRhdGFbMF0gPSAweDA7CisJZGF0YVsx XSA9IDB4MDsKKworCWVyciA9IGNjZ19yZWFkKHVpLCBDQ0dYX0kyQ19SQUJfUkVTUE9OU0VfUkVH LCBkYXRhLCAweDIpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgY2NnX3Jl YWQgZmFpbGVkLCBlcnIgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlyZXR1cm4gLUVJTzsKKwl9 CisKKwlpZiAoZGF0YVswXSAhPSBDQ0dYX0kyQ19SQUJfUkVTUE9OU0VfUkVHX1JFU0VUX0NPTVBM RVRFKSB7CisJCWRldl9pbmZvKGRldiwgInJlc3BvbnNlICglMDJ4ICUwMngpICE9IHJlc2V0X2Nv bXBsZXRlIiwKKwkJCWRhdGFbMF0sIGRhdGFbMV0pOworCX0KKworCS8qIHN0b3AgVUNTSSAqLwor CWVyciA9IGNjZ193cml0ZSh1aSwgQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTCwgZGF0YSwgMHgx KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVzIGNjZ193cml0ZSBmYWlsZWQs IGVyciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCXJldHVybiAtRUlPOworCX0KKworCW1zbGVl cCg1MDApOworCisJLyogc3RhcnQgVUNTSSAqLworCWRhdGFbMF0gPSBDQ0dYX0kyQ19SQUJfVUNT SV9DT05UUk9MX1NUQVJUOworCWVyciA9IGNjZ193cml0ZSh1aSwgQ0NHWF9JMkNfUkFCX1VDU0lf Q09OVFJPTCwgZGF0YSwgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVz IGNjZ193cml0ZSBmYWlsZWQsIGVyciAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCXJldHVybiAt RUlPOworCX0KKworCW1zbGVlcCg1MDApOworCisJLyogdGVzdCByZWFkLTEgKi8KKwllcnIgPSBj Y2dfcmVhZCh1aSwgQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSywgZGF0YSwgMHgyKTsKKwlp ZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVzIGNjZ19yZWFkIGZhaWxlZCwgZXJyICVk XG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogdGVzdCByZWFk LTIgKi8KKwllcnIgPSBjY2dfcmVhZCh1aSwgMHhmMDA0LCBkYXRhLCAweDQpOworCWlmIChlcnIg PCAwKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgY2NnX3JlYWQgZmFpbGVkLCBlcnIgJWRcbiIsIF9f ZnVuY19fLCBlcnIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB0ZXN0IHJlYWQtMyAqLwor CWVyciA9IGNjZ19yZWFkKHVpLCAweGYwMTAsIGRhdGEsIDB4MTApOworCWlmIChlcnIgPCAwKSB7 CisJCWRldl9lcnIoZGV2LCAiJXMgY2NnX3JlYWQgZmFpbGVkLCBlcnIgJWRcbiIsIF9fZnVuY19f LCBlcnIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBmbHVzaCBDQ0d4IFJFU1BPTlNFIHF1 ZXVlIGJ5IGFja2luZyBpbnRlcnJ1cHRzCisJICogLSBhYm92ZSB1Y3NpIGNvbnRyb2wgcmVnaXN0 ZXIgd3JpdGUgd2lsbCBwdXNoIHJlc3BvbnNlCisJICogd2hpY2ggbXVzdCBiZSBmbHVzaGVkCisJ ICogLSBhZmZlY3RzIGYvdyB1cGRhdGUgd2hpY2ggcmVhZHMgcmVzcG9uc2UgcmVnaXN0ZXIKKwkg Ki8KKwlkYXRhWzBdID0gMHhmZjsKKwlmb3IgKGkgPSAwOyAoaSA8IDEwKSAmJiAoZGF0YVswXSAh PSAweDAwKTsgaSsrKSB7CisJCWRldl9kYmcoZGV2LCAiZmx1c2hpbmcgcmVzcG9uc2UgJTAyeFxu IiwgZGF0YVswXSk7CisKKwkJZXJyID0gY2NnX3dyaXRlKHVpLCBDQ0dYX0kyQ19SQUJfSU5UUl9S RUcsIGRhdGEsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzIGNj Z193cml0ZSBmYWlsZWQsIGVyciAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQkJcmV0dXJu IC1FSU87CisJCX0KKworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKworCQllcnIgPSBj Y2dfcmVhZCh1aSwgQ0NHWF9JMkNfUkFCX0lOVFJfUkVHLCBkYXRhLCAweDEpOworCQlpZiAoZXJy IDwgMCkgeworCQkJZGV2X2VycihkZXYsICIlcyBjY2dfcmVhZCBmYWlsZWQsIGVyciAlZFxuIiwK KwkJCV9fZnVuY19fLCBlcnIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwkvKiBnZXQg aTJjIHNsYXZlIGZpcm13YXJlIHZlcnNpb24KKwkgKiAtIFswLi4xXSA9IEFwcGxpY2F0aW9uIG5h bWUgKEFTQ0lJICJuYiIgZm9yIG5vdGVib29rKQorCSAqIC0gWzJdID0gZXh0ZXJuYWwgY2lyY3Vp bCBzcGVjaWZpYyB2ZXJzaW9uCisJICogLSBbM10gYml0IDAuLi4zID0gbWlub3IgdmVyc2lvbgor CSAqIC0gWzNdIGJpdCA0Li4uNyA9IG1ham9yIHZlcnNpb24KKwkgKi8KKwllcnIgPSBjY2dfcmVh ZCh1aSwgMHgwLCBkYXRhLCAweDQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAi JXMgY2NnX3JlYWQgZmFpbGVkLCBlcnIgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwl1aS0+dmVyID0gZGF0YVszXTsKKworCWRldl9pbmZvKGRldiwgInZlcnNp b24gJWQuJWRcbiIsICh1aS0+dmVyID4+IDQpICYgMHgwZiwKKwkJKHVpLT52ZXIgPj4gMCkgJiAw eDBmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVjc2lfaTJjX2NjZ19zZW5kX2Rh dGEoc3RydWN0IHVjc2lfaTJjX2NjZyAqdWkpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBjaGFy IGJ1Zls0XSA9IHsKKwkJMHgyMCwgKENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCks CisJCTB4OCwgKENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCksCisJfTsKKwl1bnNp Z25lZCBjaGFyIGJ1ZjFbMTZdOworCXVuc2lnbmVkIGNoYXIgYnVmMls4XTsKKworCW1lbWNweSgm YnVmMVswXSwgKChjb25zdCB2b2lkICopIHVpLT5wcG0uZGF0YSkgKyAweDIwLCBzaXplb2YoYnVm MSkpOworCW1lbWNweSgmYnVmMlswXSwgKChjb25zdCB2b2lkICopIHVpLT5wcG0uZGF0YSkgKyAw eDgsIHNpemVvZihidWYyKSk7CisKKwllcnIgPSBjY2dfd3JpdGUodWksICoodTE2ICopYnVmLCBi dWYxLCBzaXplb2YoYnVmMSkpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodWktPmRldiwg IiVzIGNjZ193cml0ZSBmYWlsZWQsIGVyciAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBjY2dfd3JpdGUodWksICoodTE2ICopKGJ1ZisyKSwg YnVmMiwgc2l6ZW9mKGJ1ZjIpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHVpLT5kZXYs ICIlcyBjY2dfd3JpdGUgZmFpbGVkLCBlcnIgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJ cmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1Y3NpX2ky Y19jY2dfcmVjdl9kYXRhKHN0cnVjdCB1Y3NpX2kyY19jY2cgKnVpKQoreworCXN0YXRpYyBpbnQg Zmlyc3QgPSAxOworCWludCBlcnI7CisJdW5zaWduZWQgY2hhciBidWZbNl0gPSB7CisJCTB4MCwg KENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCksCisJCTB4NCwgKENDR1hfSTJDX1JB Ql9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCksCisJCTB4MTAsIChDQ0dYX0kyQ19SQUJfVUNTSV9EQVRB X0JMT0NLID4+IDgpLAorCX07CisJdTggKnBwbSA9ICh1OCAqKXVpLT5wcG0uZGF0YTsKKworCWlm IChmaXJzdCkgeworCQllcnIgPSBjY2dfcmVhZCh1aSwgKih1MTYgKilidWYsIHBwbSwgMHgyKTsK KwkJaWYgKGVyciA8IDApIHsKKwkJCWRldl9lcnIodWktPmRldiwgIiVzIGNjZ19yZWFkIGZhaWxl ZCwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQkJcmV0dXJuIC1FSU87CisJCX0K KwkJZmlyc3QgPSAxOworCX0KKworCWVyciA9IGNjZ19yZWFkKHVpLCAqKHUxNiAqKShidWYgKyAy KSwgcHBtICsgMHg0LCAweDQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodWktPmRldiwg IiVzIGNjZ19yZWFkIGZhaWxlZCwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBjY2dfcmVhZCh1aSwgKih1MTYgKikoYnVmICsgNCks IHBwbSArIDB4MTAsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodWktPmRldiwg IiVzIGNjZ19yZWFkIGZhaWxlZCwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVjc2lfaTJj X2NjZ19hY2tfaW50ZXJydXB0KHN0cnVjdCB1Y3NpX2kyY19jY2cgKnVpKQoreworCWludCBlcnI7 CisJdW5zaWduZWQgY2hhciBidWZbM10gPSB7KENDR1hfSTJDX1JBQl9JTlRSX1JFRyAmIDB4ZmYp LAorCQkoQ0NHWF9JMkNfUkFCX0lOVFJfUkVHID4+IDgpLCAweDB9OworCisJZXJyID0gY2NnX3Jl YWQodWksICoodTE2ICopYnVmLCAmYnVmWzJdLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRl dl9lcnIodWktPmRldiwgIiVzIGNjZ19yZWFkIGZhaWxlZCwgZXJyICVkXG4iLAorCQkJCV9fZnVu Y19fLCBlcnIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwllcnIgPSBjY2dfd3JpdGUodWksICoo dTE2ICopYnVmLCAmYnVmWzJdLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIodWkt PmRldiwgIiVzIGNjZ19yZWFkIGZhaWxlZCwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIp OworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVj c2lfaTJjX2NjZ19zeW5jKHN0cnVjdCB1Y3NpX3BwbSAqcHBtKQoreworCXN0cnVjdCB1Y3NpX2ky Y19jY2cgKnVpID0gY29udGFpbmVyX29mKHBwbSwKKwkJc3RydWN0IHVjc2lfaTJjX2NjZywgcHBt KTsKKwlpbnQgZXJyOworCisJZXJyID0gdWNzaV9pMmNfY2NnX3JlY3ZfZGF0YSh1aSk7CisJaWYg KGVyciA8IDApIHsKKwkJZGV2X2Vycih1aS0+ZGV2LCAiJXM6IHVjc2lfaTJjX2NjZ19yZWN2X2Rh dGEoKSBlcnIgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBleGl0OworCX0KKwor CS8qIGFjayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRvIHJ1biAqLworCWVyciA9 IHVjc2lfaTJjX2NjZ19hY2tfaW50ZXJydXB0KHVpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZf ZXJyKHVpLT5kZXYsICIlczogdWNzaV9pMmNfY2NnX2Fja19pbnRlcnJ1cHQoKSBlcnIgJWRcbiIs CisJCQlfX2Z1bmNfXywgZXJyKTsKKwl9CitleGl0OgorCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHVjc2lfaTJjX2NjZ19jbWQoc3RydWN0IHVjc2lfcHBtICpwcG0sIHN0cnVjdCB1Y3NpX2Nv bnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHVjc2lfaTJjX2NjZyAqdWkgPSBjb250YWluZXJfb2Yo cHBtLAorCQlzdHJ1Y3QgdWNzaV9pMmNfY2NnLCBwcG0pOworCWludCBlcnIgPSAwOworCisJcHBt LT5kYXRhLT5jdHJsLnJhd19jbWQgPSBjdHJsLT5yYXdfY21kOworCWVyciA9IHVjc2lfaTJjX2Nj Z19zZW5kX2RhdGEodWkpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlycXJldHVybl90 IGkyY19jY2dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWNz aV9pMmNfY2NnICp1aSA9IGRhdGE7CisKKwlkZXZfZGJnKHVpLT5kZXYsICIlcyBpcnEgJWQgZGF0 YSAlcCB1aSAlcFxuIiwKKwkJX19mdW5jX18sIGlycSwgZGF0YSwgdWkpOworCisJaWYgKCF1aSkg eworCQlkZXZfZXJyKHVpLT5kZXYsICIlczogIXVpXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBJ UlFfSEFORExFRDsKKwl9CisKKwl1Y3NpX25vdGlmeSh1aS0+dWNzaSk7CisKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9pMmNfY2NnX3Byb2JlKHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB1Y3NpX2kyY19jY2cg KnVpOworCWludCBzdGF0dXM7CisKKwl1aSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdWkp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVpLT5wcG0u ZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdWNzaV9kYXRhKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCF1aS0+cHBtLmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJdWktPnBw bS5jbWQgPSB1Y3NpX2kyY19jY2dfY21kOworCXVpLT5wcG0uc3luYyA9IHVjc2lfaTJjX2NjZ19z eW5jOworCXVpLT5kZXYgPSBkZXY7CisJdWktPmNsaWVudCA9IGNsaWVudDsKKworCS8qIHJlc2V0 IGkyYyBkZXZpY2UgYW5kIGluaXRpYWxpemUgdWNzaSAqLworCXN0YXR1cyA9IHVjc2lfaTJjX2Nj Z19pbml0KHVpKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKHVpLT5kZXYsICIlczog dWNzaV9pMmNfY2NnX2luaXQgZmFpbGVkIC0gJWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsK KwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1aS0+aXJxID0gY2xpZW50LT5pcnE7CisKKwlzdGF0 dXMgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgdWktPmlycSwgTlVMTCwKKwkJaTJj X2NjZ19pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0hJR0gsCisJCWRl dl9uYW1lKGRldiksIHVpKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKHVpLT5kZXYs ICIlczogcmVxdWVzdF9pcnEgZmFpbGVkIC0gJWRcbiIsCisJCQlfX2Z1bmNfXywgc3RhdHVzKTsK KwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1aS0+dWNzaSA9IHVjc2lfcmVnaXN0ZXJfcHBtKGRl diwgJnVpLT5wcG0pOworCWlmIChJU19FUlIodWktPnVjc2kpKSB7CisJCWRldl9lcnIodWktPmRl diwgInVjc2lfcmVnaXN0ZXJfcHBtIGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHVpLT51 Y3NpKTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB1aSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9pMmNfY2NnX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50KQoreworCXN0cnVjdCB1Y3NpX2kyY19jY2cgKnVpID0gaTJjX2dldF9jbGllbnRkYXRh KGNsaWVudCk7CisKKwl1Y3NpX3VucmVnaXN0ZXJfcHBtKHVpLT51Y3NpKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHVjc2lfaTJjX2NjZ19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwor CXN0cnVjdCB1Y3NpX2kyY19jY2cgKnVpID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJ aW50IGVycjsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKSB7CisJCWVyciA9IGVuYWJs ZV9pcnFfd2FrZSh1aS0+aXJxKTsKKwkJaWYgKCFlcnIpCisJCQl1aS0+d2FrZV9lbmFibGVkID0g dHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9pMmNfY2NnX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRv X2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdWNzaV9pMmNfY2NnICp1aSA9IGkyY19nZXRfY2xp ZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB1Y3NpX2NvbnRyb2wgYzsKKwlpbnQgcmV0OworCisJ aWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikgJiYgdWktPndha2VfZW5hYmxlZCkgeworCQlkaXNh YmxlX2lycV93YWtlKHVpLT5pcnEpOworCQl1aS0+d2FrZV9lbmFibGVkID0gZmFsc2U7CisJfQor CisJLyogcmVzdG9yZSBVQ1NJIG5vdGlmaWNhdGlvbiBlbmFibGUgbWFzayAqLworCVVDU0lfQ01E X1NFVF9OVEZZX0VOQUJMRShjLCBVQ1NJX0VOQUJMRV9OVEZZX0FMTCk7CisJcmV0ID0gdWNzaV9y dW5fY29tbWFuZCh1aS0+dWNzaSwgJmMsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cih1aS0+ZGV2LCAiJXM6IGZhaWxlZCB0byBzZXQgbm90aWZpY2F0aW9uIGVuYWJsZSAtICVkXG4i LAorCQkJX19mdW5jX18sIHJldCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK1VOSVZFUlNBTF9E RVZfUE1fT1BTKHVjc2lfaTJjX2NjZ19kcml2ZXJfcG0sIHVjc2lfaTJjX2NjZ19zdXNwZW5kLAor CXVjc2lfaTJjX2NjZ19yZXN1bWUsIE5VTEwpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19k ZXZpY2VfaWQgdWNzaV9pMmNfY2NnX2RldmljZV9pZFtdID0geworCXsiaTJjLWdwdS11Y3NpIiwg MH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHVjc2lfaTJjX2NjZ19kZXZp Y2VfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdWNzaV9pMmNfY2NnX2RyaXZlciA9 IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1Y3NpX2kyY19jY2ciLAorCQkucG0gPSAmdWNz aV9pMmNfY2NnX2RyaXZlcl9wbSwKKwl9LAorCS5wcm9iZSA9IHVjc2lfaTJjX2NjZ19wcm9iZSwK KwkucmVtb3ZlID0gdWNzaV9pMmNfY2NnX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB1Y3NpX2kyY19j Y2dfZGV2aWNlX2lkLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIodWNzaV9pMmNfY2NnX2RyaXZl cik7CisKK01PRFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIlVDU0kgSTJDIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUt QyBjb250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==