From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 21/32] drm/tegra: sor: Add DisplayPort support Date: Thu, 24 Oct 2019 18:45:23 +0200 Message-ID: <20191024164534.132764-22-thierry.reding@gmail.com> References: <20191024164534.132764-1-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191024164534.132764-1-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: linux-tegra@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: linux-tegra@vger.kernel.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkFkZCBzdXBwb3J0IGZv ciByZWd1bGFyIERpc3BsYXlQb3J0IG9uIFRlZ3JhMjEwIGFuZCBUZWdyYTE4Ni4KClNpZ25lZC1v ZmYtYnk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL3RlZ3JhL2RwLmMgIHwgIDEwICstCiBkcml2ZXJzL2dwdS9kcm0vdGVncmEvc29yLmMg fCAzNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBkcml2ZXJzL2dwdS9k cm0vdGVncmEvc29yLmggfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCAzNDggaW5zZXJ0aW9ucygr KSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHAu YyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcC5jCmluZGV4IDViNjc2NWQ2NTNiNC4uNzBkZmI3 ZDFkZWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZHAuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvZHAuYwpAQCAtNjIzLDEwICs2MjMsMTAgQEAgc3RhdGljIGludCBk cm1fZHBfbGlua19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCiAJCQly ZXR1cm4gZXJyOwogCQl9CiAKLQkJZHJtX2RwX2xpbmtfdHJhaW5fYWRqdXN0KCZsaW5rLT50cmFp bik7Ci0KIAkJaWYgKGxpbmstPnRyYWluLmNsb2NrX3JlY292ZXJlZCkKIAkJCWJyZWFrOworCisJ CWRybV9kcF9saW5rX3RyYWluX2FkanVzdCgmbGluay0+dHJhaW4pOwogCX0KIAogCXJldHVybiAw OwpAQCAtNjgyLDEwICs2ODIsMTAgQEAgc3RhdGljIGludCBkcm1fZHBfbGlua19jaGFubmVsX2Vx dWFsaXphdGlvbihzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCiAJCQlyZXR1cm4gZXJyOwogCQl9 CiAKLQkJZHJtX2RwX2xpbmtfdHJhaW5fYWRqdXN0KCZsaW5rLT50cmFpbik7Ci0KIAkJaWYgKGxp bmstPnRyYWluLmNoYW5uZWxfZXF1YWxpemVkKQogCQkJYnJlYWs7CisKKwkJZHJtX2RwX2xpbmtf dHJhaW5fYWRqdXN0KCZsaW5rLT50cmFpbik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04NTEsNiAr ODUxLDggQEAgaW50IGRybV9kcF9saW5rX3RyYWluKHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykK IHsKIAlpbnQgZXJyOwogCisJZHJtX2RwX2xpbmtfdHJhaW5faW5pdCgmbGluay0+dHJhaW4pOwor CiAJaWYgKGxpbmstPmNhcHMuZmFzdF90cmFpbmluZykgewogCQlpZiAoZHJtX2RwX2xpbmtfdHJh aW5fdmFsaWQoJmxpbmstPnRyYWluKSkgewogCQkJZXJyID0gZHJtX2RwX2xpbmtfdHJhaW5fZmFz dChsaW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9zb3IuYyBiL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9zb3IuYwppbmRleCA5ZTZhMWFiN2VmNjUuLjljZjAwOGQ3YzY3YiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL3Nvci5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS90ZWdyYS9zb3IuYwpAQCAtMjkwNCw2ICsyOTA0LDIzNiBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0ZWdyYV9zb3JfaGRtaV9oZWxwZXJzID0gewog CS5hdG9taWNfY2hlY2sgPSB0ZWdyYV9zb3JfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCiB9OwogCitz dGF0aWMgdm9pZCB0ZWdyYV9zb3JfZHBfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpCit7CisJc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0gZW5jb2Rlcl90b19vdXRwdXQo ZW5jb2Rlcik7CisJc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKGVuY29kZXItPmNy dGMpOworCXN0cnVjdCB0ZWdyYV9zb3IgKnNvciA9IHRvX3NvcihvdXRwdXQpOworCXUzMiB2YWx1 ZTsKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX2RwX2xpbmtfcG93ZXJfZG93bihzb3ItPmF1eCwg JnNvci0+bGluayk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQg dG8gcG93ZXIgZG93biBsaW5rOiAlZFxuIiwgZXJyKTsKKworCWVyciA9IHRlZ3JhX3Nvcl9kZXRh Y2goc29yKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImZhaWxlZCB0byBk ZXRhY2ggU09SOiAlZFxuIiwgZXJyKTsKKworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCAwLCBTT1Jf U1RBVEUxKTsKKwl0ZWdyYV9zb3JfdXBkYXRlKHNvcik7CisKKwl2YWx1ZSA9IHRlZ3JhX2RjX3Jl YWRsKGRjLCBEQ19ESVNQX0RJU1BfV0lOX09QVElPTlMpOworCisJaWYgKCFzb3ItPnNvYy0+aGFz X252ZGlzcGxheSkKKwkJdmFsdWUgJj0gfihTT1IxX1RJTUlOR19DWUEgfCBTT1JfRU5BQkxFKDEp KTsKKwllbHNlCisJCXZhbHVlICY9IH5TT1JfRU5BQkxFKHNvci0+aW5kZXgpOworCisJdGVncmFf ZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsKKwl0ZWdyYV9k Y19jb21taXQoZGMpOworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfU1RBVEUx KTsKKwl2YWx1ZSAmPSB+U09SX1NUQVRFX0FTWV9QUk9UT0NPTF9NQVNLOworCXZhbHVlICY9IH5T T1JfU1RBVEVfQVNZX1NVQk9XTkVSX01BU0s7CisJdmFsdWUgJj0gflNPUl9TVEFURV9BU1lfT1dO RVJfTUFTSzsKKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9TVEFURTEpOworCXRl Z3JhX3Nvcl91cGRhdGUoc29yKTsKKworCS8qIHN3aXRjaCB0byBzYWZlIHBhcmVudCBjbG9jayAq LworCWVyciA9IHRlZ3JhX3Nvcl9zZXRfcGFyZW50X2Nsb2NrKHNvciwgc29yLT5jbGtfc2FmZSk7 CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gc2V0IHNhZmUg Y2xvY2s6ICVkXG4iLCBlcnIpOworCisJZXJyID0gdGVncmFfc29yX3Bvd2VyX2Rvd24oc29yKTsK KwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImZhaWxlZCB0byBwb3dlciBkb3du IFNPUjogJWRcbiIsIGVycik7CisKKwllcnIgPSB0ZWdyYV9pb19wYWRfcG93ZXJfZGlzYWJsZShz b3ItPnBhZCk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8g cG93ZXIgb2ZmIEkvTyBwYWQ6ICVkXG4iLCBlcnIpOworCisJZXJyID0gZHJtX2RwX2F1eF9kaXNh YmxlKHNvci0+YXV4KTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImZhaWxl ZCBkaXNhYmxlIERQQVVYOiAlZFxuIiwgZXJyKTsKKworCXBtX3J1bnRpbWVfcHV0KHNvci0+ZGV2 KTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfc29yX2RwX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0gZW5jb2Rlcl90 b19vdXRwdXQoZW5jb2Rlcik7CisJc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKGVu Y29kZXItPmNydGMpOworCXN0cnVjdCB0ZWdyYV9zb3IgKnNvciA9IHRvX3NvcihvdXRwdXQpOwor CXN0cnVjdCB0ZWdyYV9zb3JfY29uZmlnIGNvbmZpZzsKKwlzdHJ1Y3QgdGVncmFfc29yX3N0YXRl ICpzdGF0ZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rp c3BsYXlfaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsdWU7CisJaW50IGVy cjsKKworCXN0YXRlID0gdG9fc29yX3N0YXRlKG91dHB1dC0+Y29ubmVjdG9yLnN0YXRlKTsKKwlt b2RlID0gJmVuY29kZXItPmNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlOworCWluZm8gPSAmb3V0 cHV0LT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCisJcG1fcnVudGltZV9nZXRfc3luYyhzb3It PmRldik7CisKKwkvKiBzd2l0Y2ggdG8gc2FmZSBwYXJlbnQgY2xvY2sgKi8KKwllcnIgPSB0ZWdy YV9zb3Jfc2V0X3BhcmVudF9jbG9jayhzb3IsIHNvci0+Y2xrX3NhZmUpOworCWlmIChlcnIgPCAw KQorCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIHNldCBzYWZlIHBhcmVudCBjbG9jazog JWRcbiIsIGVycik7CisKKwllcnIgPSB0ZWdyYV9pb19wYWRfcG93ZXJfZW5hYmxlKHNvci0+cGFk KTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImZhaWxlZCB0byBwb3dlciBv biBMVkRTIHJhaWw6ICVkXG4iLCBlcnIpOworCisJdXNsZWVwX3JhbmdlKDIwLCAxMDApOworCisJ ZXJyID0gZHJtX2RwX2F1eF9lbmFibGUoc29yLT5hdXgpOworCWlmIChlcnIgPCAwKQorCQlkZXZf ZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBEUEFVWDogJWRcbiIsIGVycik7CisKKwll cnIgPSBkcm1fZHBfbGlua19wcm9iZShzb3ItPmF1eCwgJnNvci0+bGluayk7CisJaWYgKGVyciA8 IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gcHJvYmUgRFAgbGluazogJWRcbiIs IGVycik7CisKKwllcnIgPSBkcm1fZHBfbGlua19jaG9vc2UoJnNvci0+bGluaywgbW9kZSwgaW5m byk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gY2hvb3Nl IGxpbms6ICVkXG4iLCBlcnIpOworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBzb3It PnNvYy0+cmVncy0+cGxsMik7CisJdmFsdWUgJj0gflNPUl9QTEwyX0JBTkRHQVBfUE9XRVJET1dO OworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgc29yLT5zb2MtPnJlZ3MtPnBsbDIpOwor CisJdXNsZWVwX3JhbmdlKDIwLCA0MCk7CisKKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3Is IHNvci0+c29jLT5yZWdzLT5wbGwzKTsKKwl2YWx1ZSB8PSBTT1JfUExMM19QTExfVkREX01PREVf M1YzOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgc29yLT5zb2MtPnJlZ3MtPnBsbDMp OworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBzb3ItPnNvYy0+cmVncy0+cGxsMCk7 CisJdmFsdWUgJj0gfihTT1JfUExMMF9WQ09QRCB8IFNPUl9QTEwwX1BXUik7CisJdGVncmFfc29y X3dyaXRlbChzb3IsIHZhbHVlLCBzb3ItPnNvYy0+cmVncy0+cGxsMCk7CisKKwl2YWx1ZSA9IHRl Z3JhX3Nvcl9yZWFkbChzb3IsIHNvci0+c29jLT5yZWdzLT5wbGwyKTsKKwl2YWx1ZSAmPSB+U09S X1BMTDJfU0VRX1BMTENBUFBEX0VORk9SQ0U7CisJdmFsdWUgfD0gU09SX1BMTDJfU0VRX1BMTENB UFBEOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgc29yLT5zb2MtPnJlZ3MtPnBsbDIp OworCisJdXNsZWVwX3JhbmdlKDIwMCwgNDAwKTsKKworCXZhbHVlID0gdGVncmFfc29yX3JlYWRs KHNvciwgc29yLT5zb2MtPnJlZ3MtPnBsbDIpOworCXZhbHVlICY9IH5TT1JfUExMMl9QT1dFUkRP V05fT1ZFUlJJREU7CisJdmFsdWUgJj0gflNPUl9QTEwyX1BPUlRfUE9XRVJET1dOOworCXRlZ3Jh X3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgc29yLT5zb2MtPnJlZ3MtPnBsbDIpOworCisJdmFsdWUg PSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBTT1JfQ0xLX0NOVFJMKTsKKwl2YWx1ZSAmPSB+U09SX0NM S19DTlRSTF9EUF9DTEtfU0VMX01BU0s7CisJdmFsdWUgfD0gU09SX0NMS19DTlRSTF9EUF9DTEtf U0VMX0RJRkZfRFBDTEs7CisJdGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfQ0xLX0NO VFJMKTsKKworCXVzbGVlcF9yYW5nZSgyMDAsIDQwMCk7CisKKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9y ZWFkbChzb3IsIFNPUl9EUF9TUEFSRTApOworCS8qIFhYWCBub3QgaW4gVFJNICovCisJdmFsdWUg Jj0gflNPUl9EUF9TUEFSRV9QQU5FTF9JTlRFUk5BTDsKKwl2YWx1ZSB8PSBTT1JfRFBfU1BBUkVf U0VRX0VOQUJMRTsKKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9EUF9TUEFSRTAp OworCisJLyogWFhYIG5vdCBpbiBUUk0gKi8KKwl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgMCwgU09S X0xWRFMpOworCisJdmFsdWUgPSB0ZWdyYV9zb3JfcmVhZGwoc29yLCBzb3ItPnNvYy0+cmVncy0+ cGxsMCk7CisJdmFsdWUgJj0gflNPUl9QTEwwX0lDSFBNUF9NQVNLOworCXZhbHVlICY9IH5TT1Jf UExMMF9WQ09DQVBfTUFTSzsKKwl2YWx1ZSB8PSBTT1JfUExMMF9JQ0hQTVAoMHgxKTsKKwl2YWx1 ZSB8PSBTT1JfUExMMF9WQ09DQVAoMHgzKTsKKwl2YWx1ZSB8PSBTT1JfUExMMF9SRVNJU1RPUl9F WFQ7CisJdGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBzb3ItPnNvYy0+cmVncy0+cGxsMCk7 CisKKwkvKiBYWFggbm90IGluIFRSTSAqLworCWZvciAodmFsdWUgPSAwLCBpID0gMDsgaSA8IDU7 IGkrKykKKwkJdmFsdWUgfD0gU09SX1hCQVJfQ1RSTF9MSU5LMF9YU0VMKGksIHNvci0+c29jLT54 YmFyX2NmZ1tpXSkgfAorCQkJIFNPUl9YQkFSX0NUUkxfTElOSzFfWFNFTChpLCBpKTsKKworCXRl Z3JhX3Nvcl93cml0ZWwoc29yLCAweDAwMDAwMDAwLCBTT1JfWEJBUl9QT0wpOworCXRlZ3JhX3Nv cl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1hCQVJfQ1RSTCk7CisKKwkvKiBzd2l0Y2ggdG8gRFAg cGFyZW50IGNsb2NrICovCisJZXJyID0gdGVncmFfc29yX3NldF9wYXJlbnRfY2xvY2soc29yLCBz b3ItPmNsa19wYWQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoc29yLT5kZXYsICJmYWls ZWQgdG8gc3dpdGNoIHRvIHBhZCBjbG9jazogJWRcbiIsIGVycik7CisJCXJldHVybjsKKwl9CisK KwllcnIgPSBjbGtfc2V0X3BhcmVudChzb3ItPmNsaywgc29yLT5jbGtfcGFyZW50KTsKKwlpZiAo ZXJyIDwgMCkgeworCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVkIHRvIHN3aXRjaCB0byBwYXJl bnQgY2xvY2s6ICVkXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJLyogdXNlIERQLUEgcHJv dG9jb2wgKi8KKwl2YWx1ZSA9IHRlZ3JhX3Nvcl9yZWFkbChzb3IsIFNPUl9TVEFURTEpOworCXZh bHVlICY9IH5TT1JfU1RBVEVfQVNZX1BST1RPQ09MX01BU0s7CisJdmFsdWUgfD0gU09SX1NUQVRF X0FTWV9QUk9UT0NPTF9EUF9BOworCXRlZ3JhX3Nvcl93cml0ZWwoc29yLCB2YWx1ZSwgU09SX1NU QVRFMSk7CisKKwkvKiBlbmFibGUgcG9ydCAqLworCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNv ciwgU09SX0RQX0xJTktDVEwwKTsKKwl2YWx1ZSB8PSBTT1JfRFBfTElOS0NUTF9FTkFCTEU7CisJ dGVncmFfc29yX3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfRFBfTElOS0NUTDApOworCisJdGVncmFf c29yX2RwX3Rlcm1fY2FsaWJyYXRlKHNvcik7CisKKwllcnIgPSBkcm1fZHBfbGlua190cmFpbigm c29yLT5saW5rKTsKKwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImxpbmsgdHJh aW5pbmcgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwllbHNlCisJCWRldl9kYmcoc29yLT5kZXYsICJs aW5rIHRyYWluaW5nIHN1Y2NlZWRlZFxuIik7CisKKwllcnIgPSBkcm1fZHBfbGlua19wb3dlcl91 cChzb3ItPmF1eCwgJnNvci0+bGluayk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5k ZXYsICJmYWlsZWQgdG8gcG93ZXIgdXAgRFAgbGluazogJWRcbiIsIGVycik7CisKKwkvKiBjb21w dXRlIGNvbmZpZ3VyYXRpb24gKi8KKwltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykp OworCWNvbmZpZy5iaXRzX3Blcl9waXhlbCA9IHN0YXRlLT5icGMgKiAzOworCisJZXJyID0gdGVn cmFfc29yX2NvbXB1dGVfY29uZmlnKHNvciwgbW9kZSwgJmNvbmZpZywgJnNvci0+bGluayk7CisJ aWYgKGVyciA8IDApCisJCWRldl9lcnIoc29yLT5kZXYsICJmYWlsZWQgdG8gY29tcHV0ZSBjb25m aWd1cmF0aW9uOiAlZFxuIiwgZXJyKTsKKworCXRlZ3JhX3Nvcl9hcHBseV9jb25maWcoc29yLCAm Y29uZmlnKTsKKwl0ZWdyYV9zb3JfbW9kZV9zZXQoc29yLCBtb2RlLCBzdGF0ZSk7CisJdGVncmFf c29yX3VwZGF0ZShzb3IpOworCisJZXJyID0gdGVncmFfc29yX3Bvd2VyX3VwKHNvciwgMjUwKTsK KwlpZiAoZXJyIDwgMCkKKwkJZGV2X2Vycihzb3ItPmRldiwgImZhaWxlZCB0byBwb3dlciB1cCBT T1I6ICVkXG4iLCBlcnIpOworCisJLyogYXR0YWNoIGFuZCB3YWtlIHVwICovCisJZXJyID0gdGVn cmFfc29yX2F0dGFjaChzb3IpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKHNvci0+ZGV2LCAi ZmFpbGVkIHRvIGF0dGFjaCBTT1I6ICVkXG4iLCBlcnIpOworCisJdmFsdWUgPSB0ZWdyYV9kY19y ZWFkbChkYywgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsKKwl2YWx1ZSB8PSBTT1JfRU5BQkxF KHNvci0+aW5kZXgpOworCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0RJU1BfRElTUF9X SU5fT1BUSU9OUyk7CisKKwl0ZWdyYV9kY19jb21taXQoZGMpOworCisJZXJyID0gdGVncmFfc29y X3dha2V1cChzb3IpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKHNvci0+ZGV2LCAiZmFpbGVk IHRvIHdha2V1cCBTT1I6ICVkXG4iLCBlcnIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0ZWdyYV9zb3JfZHBfaGVscGVycyA9IHsKKwkuZGlzYWJs ZSA9IHRlZ3JhX3Nvcl9kcF9kaXNhYmxlLAorCS5lbmFibGUgPSB0ZWdyYV9zb3JfZHBfZW5hYmxl LAorCS5hdG9taWNfY2hlY2sgPSB0ZWdyYV9zb3JfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCit9Owor CiBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9pbml0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQp CiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShjbGllbnQtPnBh cmVudCk7CkBAIC0yOTMwLDYgKzMxNjAsNyBAQCBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9pbml0KHN0 cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJCX0gZWxzZSBpZiAoc29yLT5zb2MtPnN1cHBv cnRzX2RwKSB7CiAJCQljb25uZWN0b3IgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7 CiAJCQllbmNvZGVyID0gRFJNX01PREVfRU5DT0RFUl9UTURTOworCQkJaGVscGVycyA9ICZ0ZWdy YV9zb3JfZHBfaGVscGVyczsKIAkJfQogCiAJCXNvci0+bGluay5vcHMgPSAmdGVncmFfc29yX2Rw X2xpbmtfb3BzOwpAQCAtMzExNSw2ICszMzQ2LDQzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVn cmFfc29yX29wcyB0ZWdyYV9zb3JfaGRtaV9vcHMgPSB7CiAJLnJlbW92ZSA9IHRlZ3JhX3Nvcl9o ZG1pX3JlbW92ZSwKIH07CiAKK3N0YXRpYyBpbnQgdGVncmFfc29yX2RwX3Byb2JlKHN0cnVjdCB0 ZWdyYV9zb3IgKnNvcikKK3sKKwlpbnQgZXJyOworCisJc29yLT5hdmRkX2lvX3N1cHBseSA9IGRl dm1fcmVndWxhdG9yX2dldChzb3ItPmRldiwgImF2ZGQtaW8taGRtaS1kcCIpOworCWlmIChJU19F UlIoc29yLT5hdmRkX2lvX3N1cHBseSkpCisJCXJldHVybiBQVFJfRVJSKHNvci0+YXZkZF9pb19z dXBwbHkpOworCisJZXJyID0gcmVndWxhdG9yX2VuYWJsZShzb3ItPmF2ZGRfaW9fc3VwcGx5KTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNvci0+dmRkX3BsbF9zdXBwbHkgPSBk ZXZtX3JlZ3VsYXRvcl9nZXQoc29yLT5kZXYsICJ2ZGQtaGRtaS1kcC1wbGwiKTsKKwlpZiAoSVNf RVJSKHNvci0+dmRkX3BsbF9zdXBwbHkpKQorCQlyZXR1cm4gUFRSX0VSUihzb3ItPnZkZF9wbGxf c3VwcGx5KTsKKworCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUoc29yLT52ZGRfcGxsX3N1cHBseSk7 CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB0ZWdyYV9zb3JfZHBfcmVtb3ZlKHN0cnVjdCB0ZWdyYV9zb3IgKnNvcikKK3sKKwlyZWd1 bGF0b3JfZGlzYWJsZShzb3ItPnZkZF9wbGxfc3VwcGx5KTsKKwlyZWd1bGF0b3JfZGlzYWJsZShz b3ItPmF2ZGRfaW9fc3VwcGx5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHRlZ3JhX3Nvcl9vcHMgdGVncmFfc29yX2RwX29wcyA9IHsKKwkubmFtZSA9ICJEUCIsCisJ LnByb2JlID0gdGVncmFfc29yX2RwX3Byb2JlLAorCS5yZW1vdmUgPSB0ZWdyYV9zb3JfZHBfcmVt b3ZlLAorfTsKKwogc3RhdGljIGNvbnN0IHU4IHRlZ3JhMTI0X3Nvcl94YmFyX2NmZ1s1XSA9IHsK IAkwLCAxLCAyLCAzLCA0CiB9OwpAQCAtMzMwOCw2ICszNTc2LDEwIEBAIHN0YXRpYyBjb25zdCB1 OCB0ZWdyYTIxMF9zb3JfeGJhcl9jZmdbNV0gPSB7CiAJMiwgMSwgMCwgMywgNAogfTsKIAorc3Rh dGljIGNvbnN0IHU4IHRlZ3JhMjEwX3Nvcl9sYW5lX21hcFs0XSA9IHsKKwkwLCAxLCAyLCAzLAor fTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zb3Jfc29jIHRlZ3JhMjEwX3NvciA9IHsK IAkuc3VwcG9ydHNfZWRwID0gdHJ1ZSwKIAkuc3VwcG9ydHNfbHZkcyA9IGZhbHNlLApAQCAtMzMx OCw2ICszNTkwLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc29yX3NvYyB0ZWdyYTIx MF9zb3IgPSB7CiAJLmhhc19udmRpc3BsYXkgPSBmYWxzZSwKIAogCS54YmFyX2NmZyA9IHRlZ3Jh MjEwX3Nvcl94YmFyX2NmZywKKwkubGFuZV9tYXAgPSB0ZWdyYTIxMF9zb3JfbGFuZV9tYXAsCisJ LnZvbHRhZ2Vfc3dpbmcgPSB0ZWdyYTEyNF9zb3Jfdm9sdGFnZV9zd2luZywKKwkucHJlX2VtcGhh c2lzID0gdGVncmExMjRfc29yX3ByZV9lbXBoYXNpcywKKwkucG9zdF9jdXJzb3IgPSB0ZWdyYTEy NF9zb3JfcG9zdF9jdXJzb3IsCisJLnR4X3B1ID0gdGVncmExMjRfc29yX3R4X3B1LAogfTsKIAog c3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zb3Jfc29jIHRlZ3JhMjEwX3NvcjEgPSB7CkBAIC0z MzMyLDYgKzM2MDksMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zb3Jfc29jIHRlZ3Jh MjEwX3NvcjEgPSB7CiAJLm51bV9zZXR0aW5ncyA9IEFSUkFZX1NJWkUodGVncmEyMTBfc29yX2hk bWlfZGVmYXVsdHMpLAogCS5zZXR0aW5ncyA9IHRlZ3JhMjEwX3Nvcl9oZG1pX2RlZmF1bHRzLAog CS54YmFyX2NmZyA9IHRlZ3JhMjEwX3Nvcl94YmFyX2NmZywKKwkubGFuZV9tYXAgPSB0ZWdyYTIx MF9zb3JfbGFuZV9tYXAsCisJLnZvbHRhZ2Vfc3dpbmcgPSB0ZWdyYTEyNF9zb3Jfdm9sdGFnZV9z d2luZywKKwkucHJlX2VtcGhhc2lzID0gdGVncmExMjRfc29yX3ByZV9lbXBoYXNpcywKKwkucG9z dF9jdXJzb3IgPSB0ZWdyYTEyNF9zb3JfcG9zdF9jdXJzb3IsCisJLnR4X3B1ID0gdGVncmExMjRf c29yX3R4X3B1LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zb3JfcmVncyB0ZWdy YTE4Nl9zb3JfcmVncyA9IHsKQEAgLTMzNDksNiArMzYzMSw1NCBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IHRlZ3JhX3Nvcl9yZWdzIHRlZ3JhMTg2X3Nvcl9yZWdzID0gewogCS5kcF9wYWRjdGwyID0g MHgxNmEsCiB9OwogCitzdGF0aWMgY29uc3QgdTggdGVncmExODZfc29yX3ZvbHRhZ2Vfc3dpbmdb NF1bNF1bNF0gPSB7CisJeworCQl7IDB4MTMsIDB4MTksIDB4MWUsIDB4MjggfSwKKwkJeyAweDFl LCAweDI1LCAweDJkLCB9LAorCQl7IDB4MjgsIDB4MzIsIH0sCisJCXsgMHgzOSwgfSwKKwl9LCB7 CisJCXsgMHgxMiwgMHgxNiwgMHgxYiwgMHgyNSB9LAorCQl7IDB4MWMsIDB4MjMsIDB4MmEsIH0s CisJCXsgMHgyNSwgMHgyZiwgfSwKKwkJeyAweDM3LCB9CisJfSwgeworCQl7IDB4MTIsIDB4MTYs IDB4MWEsIDB4MjIgfSwKKwkJeyAweDFiLCAweDIwLCAweDI3LCB9LAorCQl7IDB4MjQsIDB4MmQs IH0sCisJCXsgMHgzNSwgfSwKKwl9LCB7CisJCXsgMHgxMSwgMHgxNCwgMHgxNywgMHgxZiB9LAor CQl7IDB4MTksIDB4MWUsIDB4MjQsIH0sCisJCXsgMHgyMiwgMHgyYSwgfSwKKwkJeyAweDMyLCB9 LAorCX0sCit9OworCitzdGF0aWMgY29uc3QgdTggdGVncmExODZfc29yX3ByZV9lbXBoYXNpc1s0 XVs0XVs0XSA9IHsKKwl7CisJCXsgMHgwMCwgMHgwOCwgMHgxMiwgMHgyNCB9LAorCQl7IDB4MDEs IDB4MGUsIDB4MWQsIH0sCisJCXsgMHgwMSwgMHgxMywgfSwKKwkJeyAweDAwLCB9LAorCX0sIHsK KwkJeyAweDAwLCAweDA4LCAweDEyLCAweDI0IH0sCisJCXsgMHgwMCwgMHgwZSwgMHgxZCwgfSwK KwkJeyAweDAwLCAweDEzLCB9LAorCQl7IDB4MDAgfSwKKwl9LCB7CisJCXsgMHgwMCwgMHgwOCwg MHgxNCwgMHgyNCB9LAorCQl7IDB4MDAsIDB4MGUsIDB4MWQsIH0sCisJCXsgMHgwMCwgMHgxMywg fSwKKwkJeyAweDAwLCB9LAorCX0sIHsKKwkJeyAweDAwLCAweDA4LCAweDEyLCAweDI0IH0sCisJ CXsgMHgwMCwgMHgwZSwgMHgxZCwgfSwKKwkJeyAweDAwLCAweDEzLCB9LAorCQl7IDB4MDAsIH0s CisJfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc29yX3NvYyB0ZWdyYTE4Nl9z b3IgPSB7CiAJLnN1cHBvcnRzX2VkcCA9IGZhbHNlLAogCS5zdXBwb3J0c19sdmRzID0gZmFsc2Us CkBAIC0zMzU5LDYgKzM2ODksMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV9zb3Jfc29j IHRlZ3JhMTg2X3NvciA9IHsKIAkuaGFzX252ZGlzcGxheSA9IHRydWUsCiAKIAkueGJhcl9jZmcg PSB0ZWdyYTEyNF9zb3JfeGJhcl9jZmcsCisJLmxhbmVfbWFwID0gdGVncmExMjRfc29yX2xhbmVf bWFwLAorCS52b2x0YWdlX3N3aW5nID0gdGVncmExODZfc29yX3ZvbHRhZ2Vfc3dpbmcsCisJLnBy ZV9lbXBoYXNpcyA9IHRlZ3JhMTg2X3Nvcl9wcmVfZW1waGFzaXMsCisJLnBvc3RfY3Vyc29yID0g dGVncmExMjRfc29yX3Bvc3RfY3Vyc29yLAorCS50eF9wdSA9IHRlZ3JhMTI0X3Nvcl90eF9wdSwK IH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc29yX3NvYyB0ZWdyYTE4Nl9zb3IxID0g ewpAQCAtMzM3Myw2ICszNzA4LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc29yX3Nv YyB0ZWdyYTE4Nl9zb3IxID0gewogCS5udW1fc2V0dGluZ3MgPSBBUlJBWV9TSVpFKHRlZ3JhMTg2 X3Nvcl9oZG1pX2RlZmF1bHRzKSwKIAkuc2V0dGluZ3MgPSB0ZWdyYTE4Nl9zb3JfaGRtaV9kZWZh dWx0cywKIAkueGJhcl9jZmcgPSB0ZWdyYTEyNF9zb3JfeGJhcl9jZmcsCisJLmxhbmVfbWFwID0g dGVncmExMjRfc29yX2xhbmVfbWFwLAorCS52b2x0YWdlX3N3aW5nID0gdGVncmExODZfc29yX3Zv bHRhZ2Vfc3dpbmcsCisJLnByZV9lbXBoYXNpcyA9IHRlZ3JhMTg2X3Nvcl9wcmVfZW1waGFzaXMs CisJLnBvc3RfY3Vyc29yID0gdGVncmExMjRfc29yX3Bvc3RfY3Vyc29yLAorCS50eF9wdSA9IHRl Z3JhMTI0X3Nvcl90eF9wdSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGVncmFfc29yX3Jl Z3MgdGVncmExOTRfc29yX3JlZ3MgPSB7CkBAIC0zNTMwLDggKzM4NzAsNyBAQCBzdGF0aWMgaW50 IHRlZ3JhX3Nvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQkJc29yLT5v cHMgPSAmdGVncmFfc29yX2VkcF9vcHM7CiAJCQlzb3ItPnBhZCA9IFRFR1JBX0lPX1BBRF9MVkRT OwogCQl9IGVsc2UgaWYgKHNvci0+c29jLT5zdXBwb3J0c19kcCkgewotCQkJZGV2X2VycigmcGRl di0+ZGV2LCAiRGlzcGxheVBvcnQgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOwotCQkJcmV0dXJuIC1F Tk9ERVY7CisJCQlzb3ItPm9wcyA9ICZ0ZWdyYV9zb3JfZHBfb3BzOwogCQl9IGVsc2UgewogCQkJ ZGV2X2VycigmcGRldi0+ZGV2LCAidW5rbm93biAoRFApIHN1cHBvcnRcbiIpOwogCQkJcmV0dXJu IC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvc29yLmggYi9kcml2 ZXJzL2dwdS9kcm0vdGVncmEvc29yLmgKaW5kZXggNTMzMzQwNmMwNDAxLi4wMGUwOWQ1ZGNhMzAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9zb3IuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvc29yLmgKQEAgLTM5LDYgKzM5LDcgQEAKICNkZWZpbmUgIFNPUl9TVEFURV9B U1lfQ1JDX01PREVfTk9OX0FDVElWRQkoMHgyIDw8IDYpCiAjZGVmaW5lICBTT1JfU1RBVEVfQVNZ X0NSQ19NT0RFX0NPTVBMRVRFCSgweDEgPDwgNikKICNkZWZpbmUgIFNPUl9TVEFURV9BU1lfQ1JD X01PREVfQUNUSVZFCQkoMHgwIDw8IDYpCisjZGVmaW5lICBTT1JfU1RBVEVfQVNZX1NVQk9XTkVS X01BU0sJCSgweDMgPDwgNCkKICNkZWZpbmUgIFNPUl9TVEFURV9BU1lfT1dORVJfTUFTSwkJMHhm CiAjZGVmaW5lICBTT1JfU1RBVEVfQVNZX09XTkVSKHgpCQkJKCgoeCkgJiAweGYpIDw8IDApCiAK LS0gCjIuMjMuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs