From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Subject: [PATCH v6 3/3] phy: Add driver for mixel dphy found on imx8 Date: Thu, 21 Mar 2019 18:08:09 +0100 Message-ID: <5227af88c4120d47dc9a3354415df7efcaa0d5a2.1553187930.git.agx@sigxcpu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from honk.sigxcpu.org (honk.sigxcpu.org [24.134.29.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 896516E15A for ; Thu, 21 Mar 2019 17:08:20 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Robert Chiras , Sam Ravnborg , Fabio Estevam List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNaXhlbCBEUEhZIGFzIGZvdW5kIG9uIGkuTVg4IENQ VXMgYnV0IHNpbmNlCnRoaXMgaXMgYW4gSVAgY29yZSBpdCB3aWxsIGxpa2VseSBiZSBmb3VuZCBv biBvdGhlcnMgaW4gdGhlIGZ1dHVyZS4gU28KaW5zdGVhZCBvZiBhZGRpbmcgdGhpcyB0byB0aGUg bndsIGhvc3QgZHJpdmVyIG1ha2UgaXQgYSBnZW5lcmljIFBIWQpkcml2ZXIuCgpUaGUgZHJpdmVy IHN1cHBvcnRzIHRoZSBpLk1YOE1RLiBTdXBwb3J0IGZvciBpLk1YOFFNIGFuZCBpLk1YOFFYUCBj YW4gYmUKYWRkZWQgb25jZSB0aGUgbmVjZXNzYXJ5IHN5c3RlbSBjb250cm9sbGVyIGJpdHMgYXJl IGluIHZpYQptaXhlbF9kcGh5X2RldmRhdGEuCgpDby1hdXRob3JlZC1ieTogUm9iZXJ0IENoaXJh cyA8cm9iZXJ0LmNoaXJhc0BueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBHdWlkbyBHw7xudGhlciA8 YWd4QHNpZ3hjcHUub3JnPgotLS0KIGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL3BoeS9mcmVlc2NhbGUvTWFrZWZpbGUgICAgICAg ICAgICAgICAgfCAgIDEgKwogLi4uL3BoeS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1pcGktZHBo eS5jICAgIHwgNTA2ICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1MTggaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L2ZyZWVzY2FsZS9waHkt ZnNsLWlteDgtbWlwaS1kcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUv S2NvbmZpZyBiL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9LY29uZmlnCmluZGV4IDgzMjY3MGI0OTUy Yi4uMjYxY2M2OGY2MjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZp ZworKysgYi9kcml2ZXJzL3BoeS9mcmVlc2NhbGUvS2NvbmZpZwpAQCAtMywzICszLDE0IEBAIGNv bmZpZyBQSFlfRlNMX0lNWDhNUV9VU0IKIAlkZXBlbmRzIG9uIE9GICYmIEhBU19JT01FTQogCXNl bGVjdCBHRU5FUklDX1BIWQogCWRlZmF1bHQgQVJDSF9NWEMgJiYgQVJNNjQKKworY29uZmlnIFBI WV9NSVhFTF9NSVBJX0RQSFkKKwl0cmlzdGF0ZSAiTWl4ZWwgTUlQSSBEU0kgUEhZIHN1cHBvcnQi CisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVjdCBHRU5FUklDX1BI WV9NSVBJX0RQSFkKKwlzZWxlY3QgUkVHTUFQX01NSU8KKwlkZWZhdWx0IEFSQ0hfTVhDICYmIEFS TTY0CisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBNaXhlbCBE U0kgUEhZIGFzIGZvdW5kCisJICBvbiBOWFAncyBpLk1YOCBmYW1pbHkgb2YgU09Dcy4KZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGh5L2ZyZWVzY2FsZS9NYWtlZmlsZSBiL2RyaXZlcnMvcGh5L2ZyZWVz Y2FsZS9NYWtlZmlsZQppbmRleCBkYzJiM2YxZjJmODAuLjA3NDkxYzkyNmEyYyAxMDA2NDQKLS0t IGEvZHJpdmVycy9waHkvZnJlZXNjYWxlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGh5L2ZyZWVz Y2FsZS9NYWtlZmlsZQpAQCAtMSArMSwyIEBACiBvYmotJChDT05GSUdfUEhZX0ZTTF9JTVg4TVFf VVNCKQkrPSBwaHktZnNsLWlteDhtcS11c2Iubworb2JqLSQoQ09ORklHX1BIWV9NSVhFTF9NSVBJ X0RQSFkpCSs9IHBoeS1mc2wtaW14OC1taXBpLWRwaHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w aHkvZnJlZXNjYWxlL3BoeS1mc2wtaW14OC1taXBpLWRwaHkuYyBiL2RyaXZlcnMvcGh5L2ZyZWVz Y2FsZS9waHktZnNsLWlteDgtbWlwaS1kcGh5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5mZDQ4N2E5ZTVhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bo eS9mcmVlc2NhbGUvcGh5LWZzbC1pbXg4LW1pcGktZHBoeS5jCkBAIC0wLDAgKzEsNTA2IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBDb3B5cmlnaHQgMjAx NywyMDE4IE5YUAorICogQ29weXJpZ2h0IDIwMTkgUHVyaXNtIFNQQworICovCisKKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgv a2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2Yu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21h cC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKworLyogRFBIWSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRFBIWV9QRF9EUEhZ CQkJMHgwMAorI2RlZmluZSBEUEhZX01fUFJHX0hTX1BSRVBBUkUJCTB4MDQKKyNkZWZpbmUgRFBI WV9NQ19QUkdfSFNfUFJFUEFSRQkJMHgwOAorI2RlZmluZSBEUEhZX01fUFJHX0hTX1pFUk8JCTB4 MGMKKyNkZWZpbmUgRFBIWV9NQ19QUkdfSFNfWkVSTwkJMHgxMAorI2RlZmluZSBEUEhZX01fUFJH X0hTX1RSQUlMCQkweDE0CisjZGVmaW5lIERQSFlfTUNfUFJHX0hTX1RSQUlMCQkweDE4CisjZGVm aW5lIERQSFlfUERfUExMCQkJMHgxYworI2RlZmluZSBEUEhZX1RTVAkJCTB4MjAKKyNkZWZpbmUg RFBIWV9DTgkJCQkweDI0CisjZGVmaW5lIERQSFlfQ00JCQkJMHgyOAorI2RlZmluZSBEUEhZX0NP CQkJCTB4MmMKKyNkZWZpbmUgRFBIWV9MT0NLCQkJMHgzMAorI2RlZmluZSBEUEhZX0xPQ0tfQllQ CQkJMHgzNAorI2RlZmluZSBEUEhZX1JFR19CWVBBU1NfUExMCQkweDRDCisKKyNkZWZpbmUgTUJQ Uyh4KSAoKHgpICogMTAwMDAwMCkKKworI2RlZmluZSBEQVRBX1JBVEVfTUFYX1NQRUVEIE1CUFMo MTUwMCkKKyNkZWZpbmUgREFUQV9SQVRFX01JTl9TUEVFRCBNQlBTKDgwKQorCisjZGVmaW5lIFBM TF9MT0NLX1NMRUVQIDEwCisjZGVmaW5lIFBMTF9MT0NLX1RJTUVPVVQgMTAwMAorCisjZGVmaW5l IENOX0JVRgkweGNiN2E4OWMwCisjZGVmaW5lIENPX0JVRgkweDYzCisjZGVmaW5lIENNKHgpCSgJ CQkJXAorCQkoKHgpIDwJMzIpPzB4ZTB8KCh4KS0xNikgOglcCisJCSgoeCkgPAk2NCk/MHhjMHwo KHgpLTMyKSA6CVwKKwkJKCh4KSA8IDEyOCk/MHg4MHwoKHgpLTY0KSA6CVwKKwkJKCh4KSAtIDEy OCkpCisjZGVmaW5lIENOKHgpCSgoKHgpID09IDEpPzB4MWYgOiAoKChDTl9CVUYpPj4oKHgpLTEp KSYweDFmKSkKKyNkZWZpbmUgQ08oeCkJKChDT19CVUYpPj4oOC0oeCkpJjB4MykKKworLyogUEhZ IHBvd2VyIG9uIGlzIGFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgUFdSX09OCTAKKyNkZWZpbmUgUFdS X09GRgkxCisKK2VudW0gbWl4ZWxfZHBoeV9kZXZ0eXBlIHsKKwlNSVhFTF9JTVg4TVEsCit9Owor CitzdHJ1Y3QgbWl4ZWxfZHBoeV9kZXZkYXRhIHsKKwl1OCByZWdfdHhfcmNhbDsKKwl1OCByZWdf YXV0b19wZF9lbjsKKwl1OCByZWdfcnhscHJwOworCXU4IHJlZ19yeGNkcnA7CisJdTggcmVnX3J4 aHNfc2V0dGxlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtaXhlbF9kcGh5X2RldmRhdGEg bWl4ZWxfZHBoeV9kZXZkYXRhW10gPSB7CisJW01JWEVMX0lNWDhNUV0gPSB7CisJCS5yZWdfdHhf cmNhbCA9IDB4MzgsCisJCS5yZWdfYXV0b19wZF9lbiA9IDB4M2MsCisJCS5yZWdfcnhscHJwID0g MHg0MCwKKwkJLnJlZ19yeGNkcnAgPSAweDQ0LAorCQkucmVnX3J4aHNfc2V0dGxlID0gMHg0OCwK Kwl9LAorfTsKKworc3RydWN0IG1peGVsX2RwaHlfY2ZnIHsKKwkvKiBEUEhZIFBMTCBwYXJhbWV0 ZXJzICovCisJdTMyIGNtOworCXUzMiBjbjsKKwl1MzIgY287CisJLyogRFBIWSByZWdpc3RlciB2 YWx1ZXMgKi8KKwl1OCBtY19wcmdfaHNfcHJlcGFyZTsKKwl1OCBtX3ByZ19oc19wcmVwYXJlOwor CXU4IG1jX3ByZ19oc196ZXJvOworCXU4IG1fcHJnX2hzX3plcm87CisJdTggbWNfcHJnX2hzX3Ry YWlsOworCXU4IG1fcHJnX2hzX3RyYWlsOworCXU4IHJ4aHNfc2V0dGxlOworfTsKKworc3RydWN0 IG1peGVsX2RwaHlfcHJpdiB7CisJc3RydWN0IG1peGVsX2RwaHlfY2ZnIGNmZzsKKwlzdHJ1Y3Qg cmVnbWFwICpyZWdzOworCXN0cnVjdCBjbGsgKnBoeV9yZWZfY2xrOworCWNvbnN0IHN0cnVjdCBt aXhlbF9kcGh5X2RldmRhdGEgKmRldmRhdGE7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9jb25maWcgbWl4ZWxfZHBoeV9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgs CisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5tYXhfcmVnaXN0ZXIgPSBE UEhZX1JFR19CWVBBU1NfUExMLAorCS5uYW1lID0gIm1pcGktZHBoeSIsCit9OworCitzdGF0aWMg aW50IHBoeV93cml0ZShzdHJ1Y3QgcGh5ICpwaHksIHUzMiB2YWx1ZSwgdW5zaWduZWQgaW50IHJl ZykKK3sKKwlzdHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gcGh5X2dldF9kcnZkYXRhKHBo eSk7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF93cml0ZShwcml2LT5yZWdzLCByZWcsIHZh bHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycigmcGh5LT5kZXYsICJGYWlsZWQgdG8gd3Jp dGUgRFBIWSByZWcgJWQ6ICVkIiwgcmVnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBGaW5kIGEgcmF0aW8gY2xvc2UgdG8gdGhlIGRlc2lyZWQgb25lIHVzaW5nIGNvbnRpbnVlZCBm cmFjdGlvbgorICogYXBwcm94aW1hdGlvbiBlbmRpbmcgZWl0aGVyIGF0IGV4YWN0IG1hdGNoIG9y IG1heGltdW0gYWxsb3dlZAorICogbm9taW5hdG9yLCBkZW5vbWluYXRvci4KKyAqLworc3RhdGlj IHZvaWQgZ2V0X2Jlc3RfcmF0aW8odTMyICpwbnVtLCB1MzIgKnBkZW5vbSwgdW5zaWduZWQgaW50 IG1heF9uLAorCQkJICAgdW5zaWduZWQgaW50IG1heF9kKQoreworCXUzMiBhID0gKnBudW07CisJ dTMyIGIgPSAqcGRlbm9tOworCXUzMiBjOworCXUzMiBuW10gPSB7MCwgMX07CisJdTMyIGRbXSA9 IHsxLCAwfTsKKwl1MzIgd2hvbGU7CisJdW5zaWduZWQgaW50IGkgPSAxOworCisJd2hpbGUgKGIp IHsKKwkJaSBePSAxOworCQl3aG9sZSA9IGEgLyBiOworCQluW2ldICs9IChuW2kgXiAxXSAqIHdo b2xlKTsKKwkJZFtpXSArPSAoZFtpIF4gMV0gKiB3aG9sZSk7CisJCWlmICgobltpXSA+IG1heF9u KSB8fCAoZFtpXSA+IG1heF9kKSkgeworCQkJaSBePSAxOworCQkJYnJlYWs7CisJCX0KKwkJYyA9 IGEgLSAoYiAqIHdob2xlKTsKKwkJYSA9IGI7CisJCWIgPSBjOworCX0KKwkqcG51bSA9IG5baV07 CisJKnBkZW5vbSA9IGRbaV07Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBoeV9jb25maWdfZnJv bV9vcHRzKHN0cnVjdCBwaHkgKnBoeSwKKwkgICAgICAgc3RydWN0IHBoeV9jb25maWd1cmVfb3B0 c19taXBpX2RwaHkgKmRwaHlfb3B0cywKKwkgICAgICAgc3RydWN0IG1peGVsX2RwaHlfY2ZnICpj ZmcpCit7CisJc3RydWN0IG1peGVsX2RwaHlfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShw aHktPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgcmVmX2NsayA9IGNsa19nZXRfcmF0ZShw cml2LT5waHlfcmVmX2Nsayk7CisJdTMyIGxwX3QsIG51bWVyYXRvciwgZGVub21pbmF0b3I7CisJ dW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwl1MzIgbjsKKwlpbnQgaTsKKworCWlmIChkcGh5X29w dHMtPmhzX2Nsa19yYXRlID4gREFUQV9SQVRFX01BWF9TUEVFRCB8fAorCSAgICBkcGh5X29wdHMt PmhzX2Nsa19yYXRlIDwgREFUQV9SQVRFX01JTl9TUEVFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwludW1lcmF0b3IgPSBkcGh5X29wdHMtPmhzX2Nsa19yYXRlOworCWRlbm9taW5hdG9yID0gcmVm X2NsazsKKwlnZXRfYmVzdF9yYXRpbygmbnVtZXJhdG9yLCAmZGVub21pbmF0b3IsIDI1NSwgMjU2 KTsKKwlpZiAoIW51bWVyYXRvciB8fCAhZGVub21pbmF0b3IpIHsKKwkJZGV2X2VycigmcGh5LT5k ZXYsICJJbnZhbGlkICVkLyVkIGZvciAlbGQvJWxkXG4iLAorCQkJbnVtZXJhdG9yLCBkZW5vbWlu YXRvciwKKwkJCWRwaHlfb3B0cy0+aHNfY2xrX3JhdGUsIHJlZl9jbGspOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwl3aGlsZSAoKG51bWVyYXRvciA8IDE2KSAmJiAoZGVub21pbmF0b3IgPD0g MTI4KSkgeworCQludW1lcmF0b3IgPDw9IDE7CisJCWRlbm9taW5hdG9yIDw8PSAxOworCX0KKwkv KgorCSAqIENNIHJhbmdlcyBiZXR3ZWVuIDE2IGFuZCAyNTUKKwkgKiBDTiByYW5nZXMgYmV0d2Vl biAxIGFuZCAzMgorCSAqIENPIGlzIHBvd2VyIG9mIDI6IDEsIDIsIDQsIDgKKwkgKi8KKwlpID0g X19mZnMoZGVub21pbmF0b3IpOworCWlmIChpID4gMykKKwkJaSA9IDM7CisJY2ZnLT5jbiA9IGRl bm9taW5hdG9yID4+IGk7CisJY2ZnLT5jbyA9IDEgPDwgaTsKKwljZmctPmNtID0gbnVtZXJhdG9y OworCisJaWYgKGNmZy0+Y20gPCAxNiB8fCBjZmctPmNtID4gMjU1IHx8CisJICAgIGNmZy0+Y24g PCAxIHx8IGNmZy0+Y24gPiAzMiB8fAorCSAgICBjZmctPmNvIDwgMSB8fCBjZmctPmNvID4gOCkg eworCQlkZXZfZXJyKCZwaHktPmRldiwgIkludmFsaWQgQ00vQ04vQ08gdmFsdWVzOiAldS8ldS8l dVxuIiwKKwkJCWNmZy0+Y20sIGNmZy0+Y24sIGNmZy0+Y28pOworCQlkZXZfZXJyKCZwaHktPmRl diwgImZvciBoc19jbGsvcmVmX2Nsaz0lbGQvJWxkIOKpsCAlZC8lZFxuIiwKKwkJCWRwaHlfb3B0 cy0+aHNfY2xrX3JhdGUsIHJlZl9jbGssCisJCQludW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X2RiZygmcGh5LT5kZXYsICJoc19jbGsvcmVmX2Ns az0lbGQvJWxkIOKpsCAlZC8lZFxuIiwKKwkJZHBoeV9vcHRzLT5oc19jbGtfcmF0ZSwgcmVmX2Ns aywgbnVtZXJhdG9yLCBkZW5vbWluYXRvcik7CisKKwkvKiBMUCBjbG9jayBwZXJpb2QgKi8KKwl0 bXAgPSAxMDAwMDAwMDAwMDAwTEw7CisJZG9fZGl2KHRtcCwgZHBoeV9vcHRzLT5scF9jbGtfcmF0 ZSk7IC8qIHBzICovCisJaWYgKHRtcCA+IFVMT05HX01BWCkKKwkgIHJldHVybiAtRUlOVkFMOwor CWVsc2UKKwkgIGxwX3QgPSB0bXA7CisJZGV2X2RiZygmcGh5LT5kZXYsICJMUCBjbG9jayAlbHUs IHBlcmlvZDogJXUgcHNcbiIsCisJCWRwaHlfb3B0cy0+bHBfY2xrX3JhdGUsIGxwX3QpOworCisJ LyogaHNfcHJlcGFyZTogaW4gbHAgY2xvY2sgcGVyaW9kcyAqLworCWlmICgyICogZHBoeV9vcHRz LT5oc19wcmVwYXJlID4gNSAqIGxwX3QpIHsKKwkJZGV2X2VycigmcGh5LT5kZXYsCisJCQkiaHNf cHJlcGFyZSAoJXUpID4gMi41ICogbHAgY2xvY2sgcGVyaW9kICgldSkiLAorCQkJZHBoeV9vcHRz LT5oc19wcmVwYXJlLCBscF90KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIDAwOiBscF90 LCAwMTogMS41ICogbHBfdCwgMTA6IDIgKiBscF90LCAxMTogMi41ICogbHBfdCAqLworCWlmIChk cGh5X29wdHMtPmhzX3ByZXBhcmUgPCBscF90KSB7CisJCW4gPSAwOworCX0gZWxzZSB7CisJCXRt cCA9IDIgKiAoZHBoeV9vcHRzLT5oc19wcmVwYXJlIC0gbHBfdCk7CisJCWRvX2Rpdih0bXAsIGxw X3QpOworCQluID0gdG1wOworCX0KKwljZmctPm1fcHJnX2hzX3ByZXBhcmUgPSBuOworCisJLyog Y2xrX3ByZXBhcmU6IGluIGxwIGNsb2NrIHBlcmlvZHMgKi8KKwlpZiAoMiAqIGRwaHlfb3B0cy0+ Y2xrX3ByZXBhcmUgPiAzICogbHBfdCkgeworCQlkZXZfZXJyKCZwaHktPmRldiwKKwkJCSJjbGtf cHJlcGFyZSAoJXUpID4gMS41ICogbHAgY2xvY2sgcGVyaW9kICgldSkiLAorCQkJZHBoeV9vcHRz LT5jbGtfcHJlcGFyZSwgbHBfdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiAwMDogbHBf dCwgMDE6IDEuNSAqIGxwX3QgKi8KKwljZmctPm1jX3ByZ19oc19wcmVwYXJlID0gZHBoeV9vcHRz LT5jbGtfcHJlcGFyZSA+IGxwX3QgPyAxIDogMDsKKworCS8qIGhzX3plcm86IGZvcm11bGEgZnJv bSBOWFAgQlNQICovCisJbiA9ICgxNDQgKiAoZHBoeV9vcHRzLT5oc19jbGtfcmF0ZSAvIDEwMDAw MDApIC0gNDc1MDApIC8gMTAwMDA7CisJY2ZnLT5tX3ByZ19oc196ZXJvID0gbiA8IDEgPyAxIDog bjsKKworCS8qIGNsa196ZXJvOiBmb3JtdWxhIGZyb20gTlhQIEJTUCAqLworCW4gPSAoMzQgKiAo ZHBoeV9vcHRzLT5oc19jbGtfcmF0ZSAvIDEwMDAwMDApIC0gMjUwMCkgLyAxMDAwOworCWNmZy0+ bWNfcHJnX2hzX3plcm8gPSBuIDwgMSA/IDEgOiBuOworCisJLyogY2xrX3RyYWlsLCBoc190cmFp bDogZm9ybXVsYSBmcm9tIE5YUCBCU1AgKi8KKwluID0gKDEwMyAqIChkcGh5X29wdHMtPmhzX2Ns a19yYXRlIC8gMTAwMDAwMCkgKyAxMDAwMCkgLyAxMDAwMDsKKwlpZiAobiA+IDE1KQorCQluID0g MTU7CisJaWYgKG4gPCAxKQorCQluID0gMTsKKwljZmctPm1fcHJnX2hzX3RyYWlsID0gbjsKKwlj ZmctPm1jX3ByZ19oc190cmFpbCA9IG47CisKKwkvKiByeGhzX3NldHRsZTogZm9ybXVsYSBmcm9t IE5YUCBCU1AgKi8KKwlpZiAoZHBoeV9vcHRzLT5oc19jbGtfcmF0ZSA8IE1CUFMoODApKQorCQlj ZmctPnJ4aHNfc2V0dGxlID0gMHgwZDsKKwllbHNlIGlmIChkcGh5X29wdHMtPmhzX2Nsa19yYXRl IDwgTUJQUyg5MCkpCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDBjOworCWVsc2UgaWYgKGRwaHlf b3B0cy0+aHNfY2xrX3JhdGUgPCBNQlBTKDEyNSkpCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDBi OworCWVsc2UgaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgPCBNQlBTKDE1MCkpCisJCWNmZy0+ cnhoc19zZXR0bGUgPSAweDBhOworCWVsc2UgaWYgKGRwaHlfb3B0cy0+aHNfY2xrX3JhdGUgPCBN QlBTKDIyNSkpCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDA5OworCWVsc2UgaWYgKGRwaHlfb3B0 cy0+aHNfY2xrX3JhdGUgPCBNQlBTKDUwMCkpCisJCWNmZy0+cnhoc19zZXR0bGUgPSAweDA4Owor CWVsc2UKKwkJY2ZnLT5yeGhzX3NldHRsZSA9IDB4MDc7CisKKwlkZXZfZGJnKCZwaHktPmRldiwg ImhzX3ByZXBhcmU6ICV1LCBjbGtfcHJlcGFyZTogJXUsICIKKwkJImhzX3ByZXBhcmU6ICV1LCBj bGtfcHJlcGFyZTogJXUsICIKKwkJImhzX3RyYWlsOiAldSwgY2xrX3RyYWlsOiAldSwgIgorCQki cnhoc19zZXR0bGU6ICV1XG4iLAorCQljZmctPm1fcHJnX2hzX3ByZXBhcmUsIGNmZy0+bWNfcHJn X2hzX3ByZXBhcmUsCisJCWNmZy0+bV9wcmdfaHNfemVybywgY2ZnLT5tY19wcmdfaHNfemVybywK KwkJY2ZnLT5tX3ByZ19oc190cmFpbCwgY2ZnLT5tY19wcmdfaHNfdHJhaWwsCisJCWNmZy0+cnho c19zZXR0bGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1peGVsX3BoeV9zZXRf aHNfdGltaW5ncyhzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG1peGVsX2RwaHlfcHJpdiAq cHJpdiA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2Zn Lm1fcHJnX2hzX3ByZXBhcmUsIERQSFlfTV9QUkdfSFNfUFJFUEFSRSk7CisJcGh5X3dyaXRlKHBo eSwgcHJpdi0+Y2ZnLm1jX3ByZ19oc19wcmVwYXJlLCBEUEhZX01DX1BSR19IU19QUkVQQVJFKTsK KwlwaHlfd3JpdGUocGh5LCBwcml2LT5jZmcubV9wcmdfaHNfemVybywgRFBIWV9NX1BSR19IU19a RVJPKTsKKwlwaHlfd3JpdGUocGh5LCBwcml2LT5jZmcubWNfcHJnX2hzX3plcm8sIERQSFlfTUNf UFJHX0hTX1pFUk8pOworCXBoeV93cml0ZShwaHksIHByaXYtPmNmZy5tX3ByZ19oc190cmFpbCwg RFBIWV9NX1BSR19IU19UUkFJTCk7CisJcGh5X3dyaXRlKHBoeSwgcHJpdi0+Y2ZnLm1jX3ByZ19o c190cmFpbCwgRFBIWV9NQ19QUkdfSFNfVFJBSUwpOworCXBoeV93cml0ZShwaHksIHByaXYtPmNm Zy5yeGhzX3NldHRsZSwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3J4aHNfc2V0dGxlKTsKK30KKworc3Rh dGljIGludCBtaXhlbF9kcGh5X3NldF9wbGxfcGFyYW1zKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlz dHJ1Y3QgbWl4ZWxfZHBoeV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKHBoeS0+ZGV2LnBh cmVudCk7CisKKwlpZiAocHJpdi0+Y2ZnLmNtIDwgMTYgfHwgcHJpdi0+Y2ZnLmNtID4gMjU1IHx8 CisJICAgIHByaXYtPmNmZy5jbiA8IDEgfHwgcHJpdi0+Y2ZnLmNuID4gMzIgfHwKKwkgICAgcHJp di0+Y2ZnLmNvIDwgMSB8fCBwcml2LT5jZmcuY28gPiA4KSB7CisJCWRldl9lcnIoJnBoeS0+ZGV2 LCAiSW52YWxpZCBDTS9DTi9DTyB2YWx1ZXMhICgldS8ldS8ldSlcbiIsCisJCQlwcml2LT5jZmcu Y20sIHByaXYtPmNmZy5jbiwgcHJpdi0+Y2ZnLmNvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CWRldl9kYmcoJnBoeS0+ZGV2LCAiVXNpbmcgQ006JXUgQ046JXUgQ086JXVcbiIsCisJCXByaXYt PmNmZy5jbSwgcHJpdi0+Y2ZnLmNuLCBwcml2LT5jZmcuY28pOworCXBoeV93cml0ZShwaHksIENN KHByaXYtPmNmZy5jbSksIERQSFlfQ00pOworCXBoeV93cml0ZShwaHksIENOKHByaXYtPmNmZy5j biksIERQSFlfQ04pOworCXBoeV93cml0ZShwaHksIENPKHByaXYtPmNmZy5jbyksIERQSFlfQ08p OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1peGVsX2RwaHlfY29uZmlndXJlKHN0cnVj dCBwaHkgKnBoeSwgdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBt aXhlbF9kcGh5X3ByaXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwlzdHJ1Y3QgbWl4 ZWxfZHBoeV9jZmcgY2ZnID0geyAwIH07CisJaW50IHJldDsKKworCXJldCA9IG1peGVsX2RwaHlf Y29uZmlnX2Zyb21fb3B0cyhwaHksICZvcHRzLT5taXBpX2RwaHksICZjZmcpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwkvKiBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwltZW1j cHkoJnByaXYtPmNmZywgJmNmZywgc2l6ZW9mKHN0cnVjdCBtaXhlbF9kcGh5X2NmZykpOworCisJ cGh5X3dyaXRlKHBoeSwgMHgwMCwgRFBIWV9MT0NLX0JZUCk7CisJcGh5X3dyaXRlKHBoeSwgMHgw MSwgcHJpdi0+ZGV2ZGF0YS0+cmVnX3R4X3JjYWwpOworCXBoeV93cml0ZShwaHksIDB4MDAsIHBy aXYtPmRldmRhdGEtPnJlZ19hdXRvX3BkX2VuKTsKKwlwaHlfd3JpdGUocGh5LCAweDAyLCBwcml2 LT5kZXZkYXRhLT5yZWdfcnhscHJwKTsKKwlwaHlfd3JpdGUocGh5LCAweDAyLCBwcml2LT5kZXZk YXRhLT5yZWdfcnhjZHJwKTsKKwlwaHlfd3JpdGUocGh5LCAweDI1LCBEUEhZX1RTVCk7CisKKwlt aXhlbF9waHlfc2V0X2hzX3RpbWluZ3MocGh5KTsKKwlyZXQgPSBtaXhlbF9kcGh5X3NldF9wbGxf cGFyYW1zKHBoeSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBtaXhlbF9kcGh5X3ZhbGlkYXRlKHN0cnVjdCBwaHkgKnBoeSwgZW51 bSBwaHlfbW9kZSBtb2RlLCBpbnQgc3VibW9kZSwKKwkJCSAgICAgICB1bmlvbiBwaHlfY29uZmln dXJlX29wdHMgKm9wdHMpCit7CisJc3RydWN0IG1peGVsX2RwaHlfY2ZnIGNmZyA9IHsgMCB9Owor CisJaWYgKG1vZGUgIT0gUEhZX01PREVfTUlQSV9EUEhZKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CXJldHVybiBtaXhlbF9kcGh5X2NvbmZpZ19mcm9tX29wdHMocGh5LCAmb3B0cy0+bWlwaV9kcGh5 LCAmY2ZnKTsKK30KKworCitzdGF0aWMgaW50IG1peGVsX2RwaHlfaW5pdChzdHJ1Y3QgcGh5ICpw aHkpCit7CisJcGh5X3dyaXRlKHBoeSwgUFdSX09GRiwgRFBIWV9QRF9QTEwpOworCXBoeV93cml0 ZShwaHksIFBXUl9PRkYsIERQSFlfUERfRFBIWSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0 aWMgaW50IG1peGVsX2RwaHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJcGh5X3dyaXRlKHBo eSwgMCwgRFBIWV9DTSk7CisJcGh5X3dyaXRlKHBoeSwgMCwgRFBIWV9DTik7CisJcGh5X3dyaXRl KHBoeSwgMCwgRFBIWV9DTyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IG1peGVs X2RwaHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtaXhlbF9kcGh5X3By aXYgKnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKwl1MzIgbG9ja2VkOworCWludCByZXQ7 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+cGh5X3JlZl9jbGspOworCWlmIChy ZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGh5X3dyaXRlKHBoeSwgUFdSX09OLCBEUEhZX1BE X1BMTCk7CisJcmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtPnJlZ3MsIERQSFlf TE9DSywgbG9ja2VkLAorCQkJCSAgICAgICBsb2NrZWQsIFBMTF9MT0NLX1NMRUVQLAorCQkJCSAg ICAgICBQTExfTE9DS19USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwaHkt PmRldiwgIkNvdWxkIG5vdCBnZXQgRFBIWSBsb2NrICglZCkhXG4iLCByZXQpOworCQlnb3RvIGNs b2NrX2Rpc2FibGU7CisJfQorCXBoeV93cml0ZShwaHksIFBXUl9PTiwgRFBIWV9QRF9EUEhZKTsK KworCXJldHVybiAwOworY2xvY2tfZGlzYWJsZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJp di0+cGh5X3JlZl9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWl4ZWxfZHBo eV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtaXhlbF9kcGh5X3ByaXYg KnByaXYgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCXBoeV93cml0ZShwaHksIFBXUl9PRkYs IERQSFlfUERfUExMKTsKKwlwaHlfd3JpdGUocGh5LCBQV1JfT0ZGLCBEUEhZX1BEX0RQSFkpOwor CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPnBoeV9yZWZfY2xrKTsKKworCXJldHVybiAw OworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X29wcyBtaXhlbF9kcGh5X3BoeV9vcHMg PSB7CisJLmluaXQgPSBtaXhlbF9kcGh5X2luaXQsCisJLmV4aXQgPSBtaXhlbF9kcGh5X2V4aXQs CisJLnBvd2VyX29uID0gbWl4ZWxfZHBoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbWl4ZWxf ZHBoeV9wb3dlcl9vZmYsCisJLmNvbmZpZ3VyZSA9IG1peGVsX2RwaHlfY29uZmlndXJlLAorCS52 YWxpZGF0ZSA9IG1peGVsX2RwaHlfdmFsaWRhdGUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtaXhlbF9kcGh5X29mX21hdGNo W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtaXhlbCxpbXg4bXEtbWlwaS1kcGh5IiwKKwkgIC5k YXRhID0gJm1peGVsX2RwaHlfZGV2ZGF0YVtNSVhFTF9JTVg4TVFdIH0sCisJeyAvKiBzZW50aW5l bCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1peGVsX2RwaHlfb2ZfbWF0Y2gp OworCitzdGF0aWMgaW50IG1peGVsX2RwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3By b3ZpZGVyOworCXN0cnVjdCBtaXhlbF9kcGh5X3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNl ICpyZXM7CisJc3RydWN0IHBoeSAqcGh5OworCXZvaWQgX19pb21lbSAqcmVnczsKKworCWlmICgh bnApCisJCXJldHVybiAtRU5PREVWOworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisK Kwlwcml2LT5kZXZkYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwor CWlmICghcHJpdi0+ZGV2ZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlZ3MgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIocmVncykpIHsKKwkJZGV2X2Vy cihkZXYsICJDb3VsZG4ndCBtYXAgdGhlIERQSFkgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIocmVncyk7CisJfQorCisJcHJpdi0+cmVncyA9IGRldm1fcmVnbWFwX2luaXRfbW1pbygm cGRldi0+ZGV2LCByZWdzLAorCQkJCQkgICAmbWl4ZWxfZHBoeV9yZWdtYXBfY29uZmlnKTsKKwlp ZiAoSVNfRVJSKHByaXYtPnJlZ3MpKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgY3JlYXRl IHRoZSBEUEhZIHJlZ21hcFxuIik7CisJCXJldHVybiBQVFJfRVJSKHByaXYtPnJlZ3MpOworCX0K KworCXByaXYtPnBoeV9yZWZfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwaHlfcmVm Iik7CisJaWYgKElTX0VSUihwcml2LT5waHlfcmVmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJO byBwaHlfcmVmIGNsb2NrIGZvdW5kXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cGh5X3Jl Zl9jbGspOworCX0KKwlkZXZfZGJnKGRldiwgInBoeV9yZWYgY2xvY2sgcmF0ZTogJWx1XG4iLAor CQljbGtfZ2V0X3JhdGUocHJpdi0+cGh5X3JlZl9jbGspKTsKKworCWRldl9zZXRfZHJ2ZGF0YShk ZXYsIHByaXYpOworCisJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgbnAsICZtaXhlbF9kcGh5 X3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBjcmVhdGUgcGh5ICVsZFxuIiwgUFRSX0VSUihwaHkpKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5 KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgcHJpdik7CisKKwlwaHlfcHJvdmlkZXIgPSBk ZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOwor CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhwaHlfcHJvdmlkZXIpOworfQorCitzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtaXhlbF9kcGh5X2RyaXZlciA9IHsKKwkucHJvYmUJPSBtaXhl bF9kcGh5X3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1peGVsLW1pcGktZHBoeSIs CisJCS5vZl9tYXRjaF90YWJsZQk9IG1peGVsX2RwaHlfb2ZfbWF0Y2gsCisJfQorfTsKK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIobWl4ZWxfZHBoeV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJO WFAgU2VtaWNvbmR1Y3RvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNaXhlbCBNSVBJLURTSSBQ SFkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjIwLjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==