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: [v10,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <1536365343-25545-2-git-send-email-ajayg@nvidia.com> Date: Fri, 7 Sep 2018 17:09:03 -0700 To: wsa@the-dreams.de, heikki.krogerus@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlcgpvdmVyIEkyQyBpbnRlcmZhY2UuCgpUaGlzIFVDU0kgSTJDIGRyaXZlciB1c2VzIEkyQyBi dXMgZHJpdmVyIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZwp3aXRoIFR5cGUtQyBjb250cm9s bGVyLgoKU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KUmV2aWV3 ZWQtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4KQWNrZWQt Ynk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KLS0t CkNoYW5nZXMgZnJvbSB2MSAtPiB2MgoJRml4ZWQgaWRlbnRhdGlvbiBpbiBkcml2ZXJzL3VzYi90 eXBlYy91Y3NpL0tjb25maWcKQ2hhbmdlcyBmcm9tIHYyIC0+IHYzCglGaXhlZCBtb3N0IG9mIGNv bW1lbnRzIGZyb20gSGVpa2tpCglSZW5hbWUgdWNzaV9pMmNfY2NnLmMgLT4gdWNzaV9jY2cuYwpD aGFuZ2VzIGZyb20gdjMgLT4gdjQKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZy b20gdjQgLT4gdjUKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20gdjUgLT4g djYKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEdyZWcgCkNoYW5nZXMgZnJvbSB2NiAtPiB2 NwoJTm9uZQpDaGFuZ2VzIGZyb20gdjcgLT4gdjgKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9t IFBldGVyIAoJLSBSZW1vdmVkIGVtcHR5IFNUT1AgbWVzc2FnZQoJLSBVc2luZyBzdGFjayBtZW1v cnkgZm9yIGkyY190cmFuc2ZlcigpCkNoYW5nZXMgZnJvbSB2OCAtPiB2OQoJTm9uZQpDaGFuZ2Vz IGZyb20gdjkgLT4gdjEwCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gVXNl IFVDU0kgbWFjcm9zCgktIENsZWFudXBzCgogZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmln ICAgIHwgIDEwICsrCiBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlICAgfCAgIDIgKwog ZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jIHwgMzI0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzNiBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnIGIvZHJpdmVycy91c2Iv dHlwZWMvdWNzaS9LY29uZmlnCmluZGV4IGUzNmQ2YzcuLjc4MTE4ODggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3Np L0tjb25maWcKQEAgLTIzLDYgKzIzLDE2IEBAIGNvbmZpZyBUWVBFQ19VQ1NJCiAKIGlmIFRZUEVD X1VDU0kKIAorY29uZmlnIFVDU0lfQ0NHCisJdHJpc3RhdGUgIlVDU0kgSW50ZXJmYWNlIERyaXZl ciBmb3IgQ3lwcmVzcyBDQ0d4IgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBkcml2 ZXIgZW5hYmxlcyBVQ1NJIHN1cHBvcnQgb24gcGxhdGZvcm1zIHRoYXQgZXhwb3NlIGEKKwkgIEN5 cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJvbGxlciBvdmVyIEkyQyBpbnRlcmZhY2UuCisKKwkgIFRv IGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVs ZSB3aWxsIGJlCisJICBjYWxsZWQgdWNzaV9jY2cuCisKIGNvbmZpZyBVQ1NJX0FDUEkKIAl0cmlz dGF0ZSAiVUNTSSBBQ1BJIEludGVyZmFjZSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBBQ1BJCmRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlIGIvZHJpdmVycy91c2IvdHlw ZWMvdWNzaS9NYWtlZmlsZQppbmRleCA3YWZiZWE1Li4yZjQ5MDBiIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kv TWFrZWZpbGUKQEAgLTgsMyArOCw1IEBAIHR5cGVjX3Vjc2kteQkJCTo9IHVjc2kubwogdHlwZWNf dWNzaS0kKENPTkZJR19UUkFDSU5HKQkrPSB0cmFjZS5vCiAKIG9iai0kKENPTkZJR19VQ1NJX0FD UEkpCQkrPSB1Y3NpX2FjcGkubworCitvYmotJChDT05GSUdfVUNTSV9DQ0cpCQkrPSB1Y3NpX2Nj Zy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMgYi9kcml2 ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzM0NmU2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vj c2kvdWNzaV9jY2cuYwpAQCAtMCwwICsxLDMyNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qCisgKiBVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBj b250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlZJRElBIENvcnBvcmF0 aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5Z0Bu dmlkaWEuY29tPgorICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMvdXNiL3R5 cGVjL3Vjc2kvdWNzaV9hY3BpLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUg InVjc2kuaCIKKworc3RydWN0IHVjc2lfY2NnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3Ry dWN0IHVjc2kgKnVjc2k7CisJc3RydWN0IHVjc2lfcHBtIHBwbTsKKwlzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50OworCWludCBpcnE7Cit9OworCisjZGVmaW5lIENDR1hfSTJDX1JBQl9ERVZJQ0Vf TU9ERQkJCTB4MDAKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1JFQURfU0lMSUNPTl9JRAkJCTB4Mgor I2RlZmluZSBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcJCQkJMHgwNgorI2RlZmluZSBDQ0dYX0kyQ19S QUJfRlcxX1ZFUlNJT04JCQkweDI4CisjZGVmaW5lIENDR1hfSTJDX1JBQl9GVzJfVkVSU0lPTgkJ CTB4MjAKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTAkJCTB4MzkKKyNkZWZpbmUg Q0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTF9TVEFSVAkJCUJJVCgwKQorI2RlZmluZSBDQ0dYX0ky Q19SQUJfVUNTSV9DT05UUk9MX1NUT1AJCQlCSVQoMSkKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1JF U1BPTlNFX1JFRwkJCTB4N0UKKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhv ZmZzZXQpCSgweGYwMDAgfCAoKG9mZnNldCkgJiAweGZmKSkKKworI2RlZmluZSBVU0JDX1ZFUlNJ T05fT0ZGU0VUCSgweDApCisjZGVmaW5lIFVTQkNfVkVSU0lPTl9TSVpFCSgyKQorI2RlZmluZSBV U0JDX0NDSV9PRkZTRVQJCSgweDQpCisjZGVmaW5lIFVTQkNfQ0NJX1NJWkUJCSg0KQorI2RlZmlu ZSBVU0JDX0NPTlRST0xfT0ZGU0VUCSgweDgpCisjZGVmaW5lIFVTQkNfQ09OVFJPTF9TSVpFCSg4 KQorI2RlZmluZSBVU0JDX01TR19JTl9PRkZTRVQJKDB4MTApCisjZGVmaW5lIFVTQkNfTVNHX0lO X1NJWkUJKDE2KQorI2RlZmluZSBVU0JDX01TR19PVVRfT0ZGU0VUCSgweDIwKQorI2RlZmluZSBV U0JDX01TR19PVVRfU0laRQkoMTYpCisKK3N0YXRpYyBpbnQgY2NnX3JlYWQoc3RydWN0IHVjc2lf Y2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEsIHUzMiBsZW4pCit7CisJc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCA9IHVjLT5jbGllbnQ7CisJdW5zaWduZWQgY2hhciBidWZbMl07CisJc3RydWN0 IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKKwkJCS5m bGFncyAgPSAweDAsCisJCQkubGVuCT0gMHgyLAorCQkJLmJ1Zgk9IGJ1ZiwKKwkJfSwKKwkJewor CQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgID0gSTJDX01fUkQsCisJCQkuYnVm CT0gZGF0YSwKKwkJfSwKKwl9OworCXUzMiBybGVuLCByZW1fbGVuID0gbGVuOworCWludCBzdGF0 dXM7CisKKwl3aGlsZSAocmVtX2xlbiA+IDApIHsKKwkJbXNnc1sxXS5idWYgPSAmZGF0YVtsZW4g LSByZW1fbGVuXTsKKwkJcmxlbiA9IG1pbl90KHUxNiwgcmVtX2xlbiwgNCk7CisJCW1zZ3NbMV0u bGVuID0gcmxlbjsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKKwkJc3RhdHVzID0g aTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJ CWlmIChzdGF0dXMgPCAwKSB7CisJCQlkZXZfZXJyKHVjLT5kZXYsICJpMmNfdHJhbnNmZXIgZmFp bGVkICVkXG4iLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlyYWIgKz0gcmxl bjsKKwkJcmVtX2xlbiAtPSBybGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGNjZ193cml0ZShzdHJ1Y3QgdWNzaV9jY2cgKnVjLCB1MTYgcmFiLCB1OCAqZGF0YSwgdTMyIGxl bikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsKKwl1bnNpZ25l ZCBjaGFyIGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRy CT0gY2xpZW50LT5hZGRyLAorCQkJLmZsYWdzICA9IDB4MCwKKwkJCS5sZW4JPSAweDIsCisJCQku YnVmCT0gYnVmLAorCQl9LAorCQl7CisJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFn cyAgPSAweDAsCisJCQkuYnVmCT0gZGF0YSwKKwkJCS5sZW4JPSBsZW4sCisJCX0sCisJfTsKKwlp bnQgc3RhdHVzOworCisJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKKwlzdGF0dXMgPSBp MmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKKwlp ZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKHVjLT5kZXYsICJpMmNfdHJhbnNmZXIgZmFpbGVk ICVkXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSB1Yy0+ZGV2OworCXVuc2lnbmVkIGludCBjb3VudCA9IDEwOworCXU4 IGRhdGFbNjRdOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NHWF9J MkNfUkFCX0RFVklDRV9NT0RFLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCWlmIChzdGF0dXMgPCAw KQorCQlyZXR1cm4gc3RhdHVzOworCisJZGV2X2RiZyhkZXYsICJTaWxpY29uIGlkICUycGgiLCBk YXRhICsgQ0NHWF9JMkNfUkFCX1JFQURfU0lMSUNPTl9JRCk7CisJZGV2X2RiZyhkZXYsICJGVzEg dmVyc2lvbiAlOHBoXG4iLCBkYXRhICsgQ0NHWF9JMkNfUkFCX0ZXMV9WRVJTSU9OKTsKKwlkZXZf ZGJnKGRldiwgIkZXMiB2ZXJzaW9uICU4cGhcbiIsIGRhdGEgKyBDQ0dYX0kyQ19SQUJfRlcyX1ZF UlNJT04pOworCisJZGF0YVswXSA9IENDR1hfSTJDX1JBQl9VQ1NJX0NPTlRST0xfU1RPUDsKKwlz dGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9VQ1NJX0NPTlRST0wsIGRhdGEsIDB4 MSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlkYXRhWzBdID0gQ0NH WF9JMkNfUkFCX1VDU0lfQ09OVFJPTF9TVEFSVDsKKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIEND R1hfSTJDX1JBQl9VQ1NJX0NPTlRST0wsIGRhdGEsIDB4MSk7CisJaWYgKHN0YXR1cyA8IDApCisJ CXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZsdXNoIENDR3ggUkVTUE9OU0UgcXVldWUgYnkg YWNraW5nIGludGVycnVwdHMKKwkgKiAtIGFib3ZlIHVjc2kgY29udHJvbCByZWdpc3RlciB3cml0 ZSB3aWxsIHB1c2ggcmVzcG9uc2UKKwkgKiB3aGljaCBtdXN0IGJlIGZsdXNoZWQKKwkgKiAtIGFm ZmVjdHMgZi93IHVwZGF0ZSB3aGljaCByZWFkcyByZXNwb25zZSByZWdpc3RlcgorCSAqLworCWRh dGFbMF0gPSAweGZmOworCWRvIHsKKwkJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX0kyQ19S QUJfSU5UUl9SRUcsIGRhdGEsIDB4MSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0 YXR1czsKKworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKworCQlzdGF0dXMgPSBjY2df cmVhZCh1YywgQ0NHWF9JMkNfUkFCX0lOVFJfUkVHLCBkYXRhLCAweDEpOworCQlpZiAoc3RhdHVz IDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJfSB3aGlsZSAoKGRhdGFbMF0gIT0gMHgwMCkgJiYg Y291bnQtLSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19zZW5kX2Rh dGEoc3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZjFbVVNCQ19NU0df T1VUX1NJWkVdOworCXVuc2lnbmVkIGNoYXIgYnVmMltVU0JDX0NPTlRST0xfU0laRV07CisJaW50 IHN0YXR1czsKKwl1MTYgcmFiOworCisJbWVtY3B5KGJ1ZjEsICh1OCAqKSh1Yy0+cHBtLmRhdGEp ICsgVVNCQ19NU0dfT1VUX09GRlNFVCwgc2l6ZW9mKGJ1ZjEpKTsKKwltZW1jcHkoYnVmMiwgKHU4 ICopKHVjLT5wcG0uZGF0YSkgKyBVU0JDX0NPTlRST0xfT0ZGU0VULCBzaXplb2YoYnVmMikpOwor CisJcmFiID0gQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhVU0JDX01TR19PVVRfT0ZGU0VU KTsKKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIHJhYiwgYnVmMSwgc2l6ZW9mKGJ1ZjEpKTsKKwlp ZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJhYiA9IENDR1hfSTJDX1JBQl9V Q1NJX0RBVEFfQkxPQ0soVVNCQ19DT05UUk9MX09GRlNFVCk7CisJcmV0dXJuIGNjZ193cml0ZSh1 YywgcmFiLCBidWYyLCBzaXplb2YoYnVmMikpOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX3Jl Y3ZfZGF0YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCXU4ICpwcG0gPSAodTggKil1Yy0+cHBt LmRhdGE7CisJaW50IHN0YXR1czsKKwl1MTYgcmFiOworCisJcmFiID0gQ0NHWF9JMkNfUkFCX1VD U0lfREFUQV9CTE9DSyhVU0JDX0NDSV9PRkZTRVQpOworCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBy YWIsIHBwbSArIFVTQkNfQ0NJX09GRlNFVCwgVVNCQ19DQ0lfU0laRSk7CisJaWYgKHN0YXR1cyA8 IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyYWIgPSBDQ0dYX0kyQ19SQUJfVUNTSV9EQVRBX0JM T0NLKFVTQkNfTVNHX0lOX09GRlNFVCk7CisJcmV0dXJuIGNjZ19yZWFkKHVjLCByYWIsIHBwbSAr IFVTQkNfTVNHX0lOX09GRlNFVCwgVVNCQ19NU0dfSU5fU0laRSk7Cit9CisKK3N0YXRpYyBpbnQg dWNzaV9jY2dfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCWludCBzdGF0 dXM7CisJdW5zaWduZWQgY2hhciBidWZbMV0gPSB7MHgwfTsKKworCXN0YXR1cyA9IGNjZ19yZWFk KHVjLCBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcsIGJ1ZiwgMHgxKTsKKwlpZiAoc3RhdHVzIDwgMCkK KwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9J TlRSX1JFRywgYnVmLCAweDEpOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX3N5bmMoc3RydWN0 IHVjc2lfcHBtICpwcG0pCit7CisJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRhaW5lcl9vZihw cG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gdWNz aV9jY2dfcmVjdl9kYXRhKHVjKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsK KworCS8qIGFjayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRvIHJ1biAqLworCXJl dHVybiB1Y3NpX2NjZ19hY2tfaW50ZXJydXB0KHVjKTsKK30KKworc3RhdGljIGludCB1Y3NpX2Nj Z19jbWQoc3RydWN0IHVjc2lfcHBtICpwcG0sIHN0cnVjdCB1Y3NpX2NvbnRyb2wgKmN0cmwpCit7 CisJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRhaW5lcl9vZihwcG0sIHN0cnVjdCB1Y3NpX2Nj ZywgcHBtKTsKKworCXBwbS0+ZGF0YS0+Y3RybC5yYXdfY21kID0gY3RybC0+cmF3X2NtZDsKKwly ZXR1cm4gdWNzaV9jY2dfc2VuZF9kYXRhKHVjKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGNj Z19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB1Y3NpX2NjZyAq dWMgPSBkYXRhOworCisJdWNzaV9ub3RpZnkodWMtPnVjc2kpOworCisJcmV0dXJuIElSUV9IQU5E TEVEOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJc3RydWN0IHVjc2lfY2NnICp1YzsKKwlpbnQg c3RhdHVzOworCXUxNiByYWI7CisKKwl1YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqdWMp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVjLT5wcG0u ZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgdWNzaV9kYXRhKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCF1Yy0+cHBtLmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJdWMtPnBw bS5jbWQgPSB1Y3NpX2NjZ19jbWQ7CisJdWMtPnBwbS5zeW5jID0gdWNzaV9jY2dfc3luYzsKKwl1 Yy0+ZGV2ID0gZGV2OworCXVjLT5jbGllbnQgPSBjbGllbnQ7CisKKwkvKiByZXNldCBjY2cgZGV2 aWNlIGFuZCBpbml0aWFsaXplIHVjc2kgKi8KKwlzdGF0dXMgPSB1Y3NpX2NjZ19pbml0KHVjKTsK KwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3NpX2NjZ19pbml0IGZh aWxlZCAtICVkXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXVjLT5pcnEg PSBjbGllbnQtPmlycTsKKworCXN0YXR1cyA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2 LCB1Yy0+aXJxLCBOVUxMLCBjY2dfaXJxX2hhbmRsZXIsCisJCQkJCSAgIElSUUZfT05FU0hPVCB8 IElSUUZfVFJJR0dFUl9ISUdILAorCQkJCQkgICBkZXZfbmFtZShkZXYpLCB1Yyk7CisJaWYgKHN0 YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2LCAicmVxdWVzdF90aHJlYWRlZF9pcnEgZmFp bGVkIC0gJWRcbiIsIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJdWMtPnVjc2kg PSB1Y3NpX3JlZ2lzdGVyX3BwbShkZXYsICZ1Yy0+cHBtKTsKKwlpZiAoSVNfRVJSKHVjLT51Y3Np KSkgeworCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3NpX3JlZ2lzdGVyX3BwbSBmYWlsZWRcbiIpOwor CQlyZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7CisJfQorCisJcmFiID0gQ0NHWF9JMkNfUkFCX1VD U0lfREFUQV9CTE9DSyhVU0JDX1ZFUlNJT05fT0ZGU0VUKTsKKwlzdGF0dXMgPSBjY2dfcmVhZCh1 YywgcmFiLCAodTggKikodWMtPnBwbS5kYXRhKSArIFVTQkNfVkVSU0lPTl9PRkZTRVQsCisJCQkg IFVTQkNfVkVSU0lPTl9TSVpFKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQl1Y3NpX3VucmVnaXN0 ZXJfcHBtKHVjLT51Y3NpKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlpMmNfc2V0X2NsaWVu dGRhdGEoY2xpZW50LCB1Yyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9jY2df cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHVjc2lfY2NnICp1 YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdWNzaV91bnJlZ2lzdGVyX3BwbSh1 Yy0+dWNzaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2 aWNlX2lkIHVjc2lfY2NnX2RldmljZV9pZFtdID0geworCXsiY2NneC11Y3NpIiwgMH0sCisJe30K K307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdWNzaV9jY2dfZGV2aWNlX2lkKTsKKworc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIHVjc2lfY2NnX2RyaXZlciA9IHsKKwkuZHJpdmVyID0gewor CQkubmFtZSA9ICJ1Y3NpX2NjZyIsCisJfSwKKwkucHJvYmUgPSB1Y3NpX2NjZ19wcm9iZSwKKwku cmVtb3ZlID0gdWNzaV9jY2dfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHVjc2lfY2NnX2RldmljZV9p ZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHVjc2lfY2NnX2RyaXZlcik7CisKK01PRFVMRV9B VVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJ T04oIlVDU0kgZHJpdmVyIGZvciBDeXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK