From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Armstrong Subject: [PATCH v3 6/9] drm/meson: plane: add support for AFBC mode for OSD1 plane Date: Mon, 21 Oct 2019 11:15:06 +0200 Message-ID: <20191021091509.3864-7-narmstrong@baylibre.com> References: <20191021091509.3864-1-narmstrong@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x443.google.com (mail-wr1-x443.google.com [IPv6:2a00:1450:4864:20::443]) by gabe.freedesktop.org (Postfix) with ESMTPS id 77D2489C9B for ; Mon, 21 Oct 2019 09:15:18 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id c2so7760850wrr.10 for ; Mon, 21 Oct 2019 02:15:18 -0700 (PDT) In-Reply-To: <20191021091509.3864-1-narmstrong@baylibre.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: khilman@baylibre.com, linux-amlogic@lists.infradead.org, ayan.halder@arm.com, linux-arm-kernel@lists.infradead.org, Neil Armstrong List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIGFsbCB0aGUgT1NEIGNvbmZpZ3VyYXRpb24gcGx1bWJpbmcgdG8gc3VwcG9ydCB0 aGUgQUZCQyBkZWNvZGVycwpwYXRoIHRvIGRpc3BsYXkgb2YgdGhlIE9TRDEgcGxhbmUuCgpUaGUg QW1sb2dpYyBHWE0gYW5kIEcxMkEgQUZCQyBkZWNvZGVycyBhcmUgaW50ZWdyYXRlZCB2ZXJ5IGRp ZmZlcmVudGx5LgoKVGhlIEFtbG9naWMgR1hNIGhhcyBhIGRpcmVjdCBvdXRwdXQgcGF0aCB0byB0 aGUgT1NEMSBWSVUgcGl4ZWwgaW5wdXQsCmJlY2F1c2UgdGhlIEdYTSBBRkJDIGRlY29kZXIgc2Vl bSB0byBiZSBhIGN1c3RvbSBJUCBkZXZlbG9wZWQgYnkgQW1sb2dpYy4KCk9uIHRoZSBvdGhlciBz aWRlLCB0aGUgQW1sb2dpYyBHMTJBIEFGQkMgZGVjb2RlciBzZWVtcyB0byBiZSBhbiBleHRlcm5h bApJUCB0aGF0IGVtaXQgcGl4ZWxzIG9uIGFuIEFYSSBtYXN0ZXIgaG9va2VkIHRvIGEgIk1hbGkg VW5wYWNrIiBibG9jawpmZWVkaW5nIHRoZSBPU0QxIFZJVSBwaXhlbCBpbnB1dC4KVGhpcyB1c2Vz IGEgd2VpcmQgIjB4MTAwMDAwMCIgaW50ZXJuYWwgSFcgcGh5c2ljYWwgYWRkcmVzcyBvbiBib3Ro CnNpZGVzIHRvIHRyYW5zZmVyIHRoZSBwaXhlbHMuCgpGb3IgQW1sb2dpYyBHWE0sIHRoZSBzdXBw b3J0ZWQgcGl4ZWwgZm9ybWF0cyBhcmUgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbApsaW5lYXIgT1NE MSBtb2RlLgoKT24gdGhlIG90aGVyIHNpZGUsIEFtbG9naWMgYWRkZWQgc3VwcG9ydCBmb3IgYWxs IEFGQkMgdjEuMiBmb3JtYXRzIGZvcgp0aGUgRzEyQSBBRkJDIGludGVncmF0aW9uLgoKRm9yIHNp bXBsaWNpdHksIHdlIHN0aWNrIHRvIHRoZSBhbHJlYWR5IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBu b3cuCgpTaWduZWQtb2ZmLWJ5OiBOZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5j b20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2NydGMuYyAgfCAgIDIgKwogZHJp dmVycy9ncHUvZHJtL21lc29uL21lc29uX2Rydi5oICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJt L21lc29uL21lc29uX3BsYW5lLmMgfCAyMjggKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQog MyBmaWxlcyBjaGFuZ2VkLCAyMDMgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX2NydGMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZXNvbi9tZXNvbl9jcnRjLmMKaW5kZXggNTdhZTFjMTNkMWU2Li5kNDc4ZmEyMzI5NTEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZXNvbi9tZXNvbl9jcnRjLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21lc29uL21lc29uX2NydGMuYwpAQCAtMjgxLDYgKzI4MSw4IEBAIHZvaWQg bWVzb25fY3J0Y19pcnEoc3RydWN0IG1lc29uX2RybSAqcHJpdikKIAlpZiAocHJpdi0+dml1Lm9z ZDFfZW5hYmxlZCAmJiBwcml2LT52aXUub3NkMV9jb21taXQpIHsKIAkJd3JpdGVsX3JlbGF4ZWQo cHJpdi0+dml1Lm9zZDFfY3RybF9zdGF0LAogCQkJCXByaXYtPmlvX2Jhc2UgKyBfUkVHKFZJVV9P U0QxX0NUUkxfU1RBVCkpOworCQl3cml0ZWxfcmVsYXhlZChwcml2LT52aXUub3NkMV9jdHJsX3N0 YXQyLAorCQkJCXByaXYtPmlvX2Jhc2UgKyBfUkVHKFZJVV9PU0QxX0NUUkxfU1RBVDIpKTsKIAkJ d3JpdGVsX3JlbGF4ZWQocHJpdi0+dml1Lm9zZDFfYmxrMF9jZmdbMF0sCiAJCQkJcHJpdi0+aW9f YmFzZSArIF9SRUcoVklVX09TRDFfQkxLMF9DRkdfVzApKTsKIAkJd3JpdGVsX3JlbGF4ZWQocHJp di0+dml1Lm9zZDFfYmxrMF9jZmdbMV0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVz b24vbWVzb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmgKaW5kZXgg ZjE1MTUzODFiZDAyLi5mOWEwYzhlOWQ0ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9t ZXNvbi9tZXNvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVzb24vbWVzb25fZHJ2LmgK QEAgLTUzLDggKzUzLDEyIEBAIHN0cnVjdCBtZXNvbl9kcm0gewogCQlib29sIG9zZDFfZW5hYmxl ZDsKIAkJYm9vbCBvc2QxX2ludGVybGFjZTsKIAkJYm9vbCBvc2QxX2NvbW1pdDsKKwkJYm9vbCBv c2QxX2FmYmNkOwogCQl1aW50MzJfdCBvc2QxX2N0cmxfc3RhdDsKKwkJdWludDMyX3Qgb3NkMV9j dHJsX3N0YXQyOwogCQl1aW50MzJfdCBvc2QxX2JsazBfY2ZnWzVdOworCQl1aW50MzJfdCBvc2Qx X2JsazFfY2ZnNDsKKwkJdWludDMyX3Qgb3NkMV9ibGsyX2NmZzQ7CiAJCXVpbnQzMl90IG9zZDFf YWRkcjsKIAkJdWludDMyX3Qgb3NkMV9zdHJpZGU7CiAJCXVpbnQzMl90IG9zZDFfaGVpZ2h0Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX3BsYW5lLmMgYi9kcml2ZXJz L2dwdS9kcm0vbWVzb24vbWVzb25fcGxhbmUuYwppbmRleCA1ZTc5OGMyNzYwMzcuLjUzNGM2Mjg3 OTc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX3BsYW5lLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX3BsYW5lLmMKQEAgLTIzLDYgKzIzLDcgQEAK ICNpbmNsdWRlICJtZXNvbl9wbGFuZS5oIgogI2luY2x1ZGUgIm1lc29uX3JlZ2lzdGVycy5oIgog I2luY2x1ZGUgIm1lc29uX3ZpdS5oIgorI2luY2x1ZGUgIm1lc29uX29zZF9hZmJjZC5oIgogCiAv KiBPU0RfU0NJX1dIX00xICovCiAjZGVmaW5lIFNDSV9XSF9NMV9XKHcpCQkJRklFTERfUFJFUChH RU5NQVNLKDI4LCAxNiksIHcpCkBAIC05MiwxMiArOTMsMzggQEAgc3RhdGljIGludCBtZXNvbl9w bGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkJCQkgICBmYWxz ZSwgdHJ1ZSk7CiB9CiAKKyNkZWZpbmUgTUVTT05fTU9EX0FGQkNfVkFMSURfQklUUyAoQUZCQ19G T1JNQVRfTU9EX0JMT0NLX1NJWkVfMTZ4MTYgfAlcCisJCQkJICAgQUZCQ19GT1JNQVRfTU9EX0JM T0NLX1NJWkVfMzJ4OCB8CVwKKwkJCQkgICBBRkJDX0ZPUk1BVF9NT0RfWVRSIHwJCVwKKwkJCQkg ICBBRkJDX0ZPUk1BVF9NT0RfU1BBUlNFIHwJCVwKKwkJCQkgICBBRkJDX0ZPUk1BVF9NT0RfU1BM SVQpCisKIC8qIFRha2VzIGEgZml4ZWQgMTYuMTYgbnVtYmVyIGFuZCBjb252ZXJ0cyBpdCB0byBp bnRlZ2VyLiAqLwogc3RhdGljIGlubGluZSBpbnQ2NF90IGZpeGVkMTZfdG9faW50KGludDY0X3Qg dmFsdWUpCiB7CiAJcmV0dXJuIHZhbHVlID4+IDE2OwogfQogCitzdGF0aWMgdTMyIG1lc29uX2cx MmFfYWZiY2RfbGluZV9zdHJpZGUoc3RydWN0IG1lc29uX2RybSAqcHJpdikKK3sKKwl1MzIgbGlu ZV9zdHJpZGUgPSAwOworCisJc3dpdGNoIChwcml2LT5hZmJjZC5mb3JtYXQpIHsKKwljYXNlIERS TV9GT1JNQVRfUkdCNTY1OgorCQlsaW5lX3N0cmlkZSA9ICgocHJpdi0+dml1Lm9zZDFfd2lkdGgg PDwgNCkgKyAxMjcpID4+IDc7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJ Y2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwlj YXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0FCR1I4ODg4OgorCQls aW5lX3N0cmlkZSA9ICgocHJpdi0+dml1Lm9zZDFfd2lkdGggPDwgNSkgKyAxMjcpID4+IDc7CisJ CWJyZWFrOworCX0KKworCXJldHVybiAoKGxpbmVfc3RyaWRlICsgMSkgPj4gMSkgPDwgMTsKK30K Kwogc3RhdGljIHZvaWQgbWVzb25fcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCiB7 CkBAIC0xMjYsNTcgKzE1Myw4OSBAQCBzdGF0aWMgdm9pZCBtZXNvbl9wbGFuZV9hdG9taWNfdXBk YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZw cml2LT5kcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAorCS8qIENoZWNrIGlmIEFGQkMgZGVjb2Rl ciBpcyByZXF1aXJlZCBmb3IgdGhpcyBidWZmZXIgKi8KKwlpZiAoKG1lc29uX3ZwdV9pc19jb21w YXRpYmxlKHByaXYsIFZQVV9DT01QQVRJQkxFX0dYTSkgfHwKKwkgICAgIG1lc29uX3ZwdV9pc19j b21wYXRpYmxlKHByaXYsIFZQVV9DT01QQVRJQkxFX0cxMkEpKSAmJgorCSAgICBmYi0+bW9kaWZp ZXIgJiBEUk1fRk9STUFUX01PRF9BUk1fQUZCQyhNRVNPTl9NT0RfQUZCQ19WQUxJRF9CSVRTKSkK KwkJcHJpdi0+dml1Lm9zZDFfYWZiY2QgPSB0cnVlOworCWVsc2UKKwkJcHJpdi0+dml1Lm9zZDFf YWZiY2QgPSBmYWxzZTsKKwogCS8qIEVuYWJsZSBPU0QgYW5kIEJMSzAsIHNldCBtYXggZ2xvYmFs IGFscGhhICovCiAJcHJpdi0+dml1Lm9zZDFfY3RybF9zdGF0ID0gT1NEX0VOQUJMRSB8CiAJCQkJ ICAgKDB4RkYgPDwgT1NEX0dMT0JBTF9BTFBIQV9TSElGVCkgfAogCQkJCSAgIE9TRF9CTEswX0VO QUJMRTsKIAorCXByaXYtPnZpdS5vc2QxX2N0cmxfc3RhdDIgPSByZWFkbChwcml2LT5pb19iYXNl ICsKKwkJCQkJICBfUkVHKFZJVV9PU0QxX0NUUkxfU1RBVDIpKTsKKwogCWNhbnZhc19pZF9vc2Qx ID0gcHJpdi0+Y2FudmFzX2lkX29zZDE7CiAKIAkvKiBTZXQgdXAgQkxLMCB0byBwb2ludCB0byB0 aGUgcmlnaHQgY2FudmFzICovCi0JcHJpdi0+dml1Lm9zZDFfYmxrMF9jZmdbMF0gPSAoKGNhbnZh c19pZF9vc2QxIDw8IE9TRF9DQU5WQVNfU0VMKSB8Ci0JCQkJICAgICAgT1NEX0VORElBTk5FU1Nf TEUpOworCXByaXYtPnZpdS5vc2QxX2JsazBfY2ZnWzBdID0gY2FudmFzX2lkX29zZDEgPDwgT1NE X0NBTlZBU19TRUw7CisKKwlpZiAocHJpdi0+dml1Lm9zZDFfYWZiY2QpIHsKKwkJaWYgKG1lc29u X3ZwdV9pc19jb21wYXRpYmxlKHByaXYsIFZQVV9DT01QQVRJQkxFX0cxMkEpKSB7CisJCQkvKiBU aGlzIGlzIHRoZSBpbnRlcm5hbCBkZWNvZGluZyBtZW1vcnkgYWRkcmVzcyAqLworCQkJcHJpdi0+ dml1Lm9zZDFfYmxrMV9jZmc0ID0gTUVTT05fRzEyQV9BRkJDRF9PVVRfQUREUjsKKwkJCXByaXYt PnZpdS5vc2QxX2JsazBfY2ZnWzBdIHw9IE9TRF9FTkRJQU5ORVNTX0JFOworCQkJcHJpdi0+dml1 Lm9zZDFfY3RybF9zdGF0MiB8PSBPU0RfUEVORElOR19TVEFUX0NMRUFOOworCQkJcHJpdi0+dml1 Lm9zZDFfY3RybF9zdGF0IHw9IFZJVV9PU0QxX0NGR19TWU5fRU47CisJCX0KKworCQlpZiAobWVz b25fdnB1X2lzX2NvbXBhdGlibGUocHJpdiwgVlBVX0NPTVBBVElCTEVfR1hNKSkgeworCQkJcHJp di0+dml1Lm9zZDFfYmxrMF9jZmdbMF0gfD0gT1NEX0VORElBTk5FU1NfTEU7CisJCQlwcml2LT52 aXUub3NkMV9jdHJsX3N0YXQyIHw9IE9TRF9EUEFUSF9NQUxJX0FGQkNEOworCQl9CisJfSBlbHNl IHsKKwkJcHJpdi0+dml1Lm9zZDFfYmxrMF9jZmdbMF0gfD0gT1NEX0VORElBTk5FU1NfTEU7CisK KwkJaWYgKG1lc29uX3ZwdV9pc19jb21wYXRpYmxlKHByaXYsIFZQVV9DT01QQVRJQkxFX0dYTSkp CisJCQlwcml2LT52aXUub3NkMV9jdHJsX3N0YXQyICY9IH5PU0RfRFBBVEhfTUFMSV9BRkJDRDsK Kwl9CiAKIAkvKiBPbiBHWEJCLCBVc2UgdGhlIG9sZCBub24tSERSIFJHQjJZVVYgY29udmVydGVy ICovCiAJaWYgKG1lc29uX3ZwdV9pc19jb21wYXRpYmxlKHByaXYsIFZQVV9DT01QQVRJQkxFX0dY QkIpKQogCQlwcml2LT52aXUub3NkMV9ibGswX2NmZ1swXSB8PSBPU0RfT1VUUFVUX0NPTE9SX1JH QjsKIAorCWlmIChwcml2LT52aXUub3NkMV9hZmJjZCAmJgorCSAgICBtZXNvbl92cHVfaXNfY29t cGF0aWJsZShwcml2LCBWUFVfQ09NUEFUSUJMRV9HMTJBKSkgeworCQlwcml2LT52aXUub3NkMV9i bGswX2NmZ1swXSB8PSBPU0RfTUFMSV9TUkNfRU4gfAorCQkJcHJpdi0+YWZiY2Qub3BzLT5mbXRf dG9fYmxrX21vZGUoZmItPm1vZGlmaWVyLAorCQkJCQkJCSAgZmItPmZvcm1hdC0+Zm9ybWF0KTsK Kwl9IGVsc2UgeworCQlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZvcm1hdCkgeworCQljYXNlIERSTV9G T1JNQVRfWFJHQjg4ODg6CisJCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoKKwkJCXByaXYtPnZp dS5vc2QxX2JsazBfY2ZnWzBdIHw9IE9TRF9CTEtfTU9ERV8zMiB8CisJCQkJCQlPU0RfQ09MT1Jf TUFUUklYXzMyX0FSR0I7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4Ogor CQljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCQlwcml2LT52aXUub3NkMV9ibGswX2NmZ1sw XSB8PSBPU0RfQkxLX01PREVfMzIgfAorCQkJCQkJT1NEX0NPTE9SX01BVFJJWF8zMl9BQkdSOwor CQkJYnJlYWs7CisJCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCQlwcml2LT52aXUub3NkMV9i bGswX2NmZ1swXSB8PSBPU0RfQkxLX01PREVfMjQgfAorCQkJCQkJT1NEX0NPTE9SX01BVFJJWF8y NF9SR0I7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJCXByaXYtPnZp dS5vc2QxX2JsazBfY2ZnWzBdIHw9IE9TRF9CTEtfTU9ERV8xNiB8CisJCQkJCQlPU0RfQ09MT1Jf TUFUUklYXzE2X1JHQjU2NTsKKwkJCWJyZWFrOworCQl9OworCX0KKwogCXN3aXRjaCAoZmItPmZv cm1hdC0+Zm9ybWF0KSB7CiAJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgotCQkvKiBGb3IgWFJH QiwgcmVwbGFjZSB0aGUgcGl4ZWwncyBhbHBoYSBieSAweEZGICovCi0JCXdyaXRlbF9iaXRzX3Jl bGF4ZWQoT1NEX1JFUExBQ0VfRU4sIE9TRF9SRVBMQUNFX0VOLAotCQkJCSAgICBwcml2LT5pb19i YXNlICsgX1JFRyhWSVVfT1NEMV9DVFJMX1NUQVQyKSk7Ci0JCXByaXYtPnZpdS5vc2QxX2JsazBf Y2ZnWzBdIHw9IE9TRF9CTEtfTU9ERV8zMiB8Ci0JCQkJCSAgICAgIE9TRF9DT0xPUl9NQVRSSVhf MzJfQVJHQjsKLQkJYnJlYWs7CiAJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgogCQkvKiBGb3Ig WFJHQiwgcmVwbGFjZSB0aGUgcGl4ZWwncyBhbHBoYSBieSAweEZGICovCi0JCXdyaXRlbF9iaXRz X3JlbGF4ZWQoT1NEX1JFUExBQ0VfRU4sIE9TRF9SRVBMQUNFX0VOLAotCQkJCSAgICBwcml2LT5p b19iYXNlICsgX1JFRyhWSVVfT1NEMV9DVFJMX1NUQVQyKSk7Ci0JCXByaXYtPnZpdS5vc2QxX2Js azBfY2ZnWzBdIHw9IE9TRF9CTEtfTU9ERV8zMiB8Ci0JCQkJCSAgICAgIE9TRF9DT0xPUl9NQVRS SVhfMzJfQUJHUjsKKwkJcHJpdi0+dml1Lm9zZDFfY3RybF9zdGF0MiB8PSBPU0RfUkVQTEFDRV9F TjsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgotCQkvKiBGb3IgQVJHQiwg dXNlIHRoZSBwaXhlbCdzIGFscGhhICovCi0JCXdyaXRlbF9iaXRzX3JlbGF4ZWQoT1NEX1JFUExB Q0VfRU4sIDAsCi0JCQkJICAgIHByaXYtPmlvX2Jhc2UgKyBfUkVHKFZJVV9PU0QxX0NUUkxfU1RB VDIpKTsKLQkJcHJpdi0+dml1Lm9zZDFfYmxrMF9jZmdbMF0gfD0gT1NEX0JMS19NT0RFXzMyIHwK LQkJCQkJICAgICAgT1NEX0NPTE9SX01BVFJJWF8zMl9BUkdCOwotCQlicmVhazsKIAljYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6CiAJCS8qIEZvciBBUkdCLCB1c2UgdGhlIHBpeGVsJ3MgYWxwaGEg Ki8KLQkJd3JpdGVsX2JpdHNfcmVsYXhlZChPU0RfUkVQTEFDRV9FTiwgMCwKLQkJCQkgICAgcHJp di0+aW9fYmFzZSArIF9SRUcoVklVX09TRDFfQ1RSTF9TVEFUMikpOwotCQlwcml2LT52aXUub3Nk MV9ibGswX2NmZ1swXSB8PSBPU0RfQkxLX01PREVfMzIgfAotCQkJCQkgICAgICBPU0RfQ09MT1Jf TUFUUklYXzMyX0FCR1I7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6Ci0JCXBy aXYtPnZpdS5vc2QxX2JsazBfY2ZnWzBdIHw9IE9TRF9CTEtfTU9ERV8yNCB8Ci0JCQkJCSAgICAg IE9TRF9DT0xPUl9NQVRSSVhfMjRfUkdCOwotCQlicmVhazsKLQljYXNlIERSTV9GT1JNQVRfUkdC NTY1OgotCQlwcml2LT52aXUub3NkMV9ibGswX2NmZ1swXSB8PSBPU0RfQkxLX01PREVfMTYgfAot CQkJCQkgICAgICBPU0RfQ09MT1JfTUFUUklYXzE2X1JHQjU2NTsKKwkJcHJpdi0+dml1Lm9zZDFf Y3RybF9zdGF0MiAmPSB+T1NEX1JFUExBQ0VfRU47CiAJCWJyZWFrOwogCX07CiAKQEAgLTMwNyw2 ICszNjYsMTYgQEAgc3RhdGljIHZvaWQgbWVzb25fcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSwKIAlwcml2LT52aXUub3NkMV9oZWlnaHQgPSBmYi0+aGVpZ2h0Owog CXByaXYtPnZpdS5vc2QxX3dpZHRoID0gZmItPndpZHRoOwogCisJaWYgKHByaXYtPnZpdS5vc2Qx X2FmYmNkKSB7CisJCXByaXYtPmFmYmNkLm1vZGlmaWVyID0gZmItPm1vZGlmaWVyOworCQlwcml2 LT5hZmJjZC5mb3JtYXQgPSBmYi0+Zm9ybWF0LT5mb3JtYXQ7CisKKwkJLyogQ2FsY3VsYXRlIGRl Y29kZXIgd3JpdGUgc3RyaWRlICovCisJCWlmIChtZXNvbl92cHVfaXNfY29tcGF0aWJsZShwcml2 LCBWUFVfQ09NUEFUSUJMRV9HMTJBKSkKKwkJCXByaXYtPnZpdS5vc2QxX2JsazJfY2ZnNCA9CisJ CQkJbWVzb25fZzEyYV9hZmJjZF9saW5lX3N0cmlkZShwcml2KTsKKwl9CisKIAlpZiAoIW1lc29u X3BsYW5lLT5lbmFibGVkKSB7CiAJCS8qIFJlc2V0IE9TRDEgYmVmb3JlIGVuYWJsaW5nIGl0IG9u IEdYTCsgU29DcyAqLwogCQlpZiAobWVzb25fdnB1X2lzX2NvbXBhdGlibGUocHJpdiwgVlBVX0NP TVBBVElCTEVfR1hNKSB8fApAQCAtMzI3LDYgKzM5NiwxMSBAQCBzdGF0aWMgdm9pZCBtZXNvbl9w bGFuZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgbWVz b25fcGxhbmUgKm1lc29uX3BsYW5lID0gdG9fbWVzb25fcGxhbmUocGxhbmUpOwogCXN0cnVjdCBt ZXNvbl9kcm0gKnByaXYgPSBtZXNvbl9wbGFuZS0+cHJpdjsKIAorCWlmIChwcml2LT5hZmJjZC5v cHMpIHsKKwkJcHJpdi0+YWZiY2Qub3BzLT5yZXNldChwcml2KTsKKwkJcHJpdi0+YWZiY2Qub3Bz LT5kaXNhYmxlKHByaXYpOworCX0KKwogCS8qIERpc2FibGUgT1NEMSAqLwogCWlmIChtZXNvbl92 cHVfaXNfY29tcGF0aWJsZShwcml2LCBWUFVfQ09NUEFUSUJMRV9HMTJBKSkKIAkJd3JpdGVsX2Jp dHNfcmVsYXhlZChWSVVfT1NEMV9QT1NUQkxEX1NSQ19PU0QxLCAwLApAQCAtMzQ2LDYgKzQyMCw0 MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbWVzb25fcGxh bmVfaGVscGVyX2Z1bmNzID0gewogCS5wcmVwYXJlX2ZiCT0gZHJtX2dlbV9mYl9wcmVwYXJlX2Zi LAogfTsKIAorc3RhdGljIGJvb2wgbWVzb25fcGxhbmVfZm9ybWF0X21vZF9zdXBwb3J0ZWQoc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSAgICAgdTMyIGZvcm1hdCwgdTY0IG1vZGlmaWVy KQoreworCXN0cnVjdCBtZXNvbl9wbGFuZSAqbWVzb25fcGxhbmUgPSB0b19tZXNvbl9wbGFuZShw bGFuZSk7CisJc3RydWN0IG1lc29uX2RybSAqcHJpdiA9IG1lc29uX3BsYW5lLT5wcml2OworCWlu dCBpOworCisJaWYgKG1vZGlmaWVyID09IERSTV9GT1JNQVRfTU9EX0lOVkFMSUQpCisJCXJldHVy biBmYWxzZTsKKworCWlmIChtb2RpZmllciA9PSBEUk1fRk9STUFUX01PRF9MSU5FQVIpCisJCXJl dHVybiB0cnVlOworCisJaWYgKCFtZXNvbl92cHVfaXNfY29tcGF0aWJsZShwcml2LCBWUFVfQ09N UEFUSUJMRV9HWE0pICYmCisJICAgICFtZXNvbl92cHVfaXNfY29tcGF0aWJsZShwcml2LCBWUFVf Q09NUEFUSUJMRV9HMTJBKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG1vZGlmaWVyICYgfkRS TV9GT1JNQVRfTU9EX0FSTV9BRkJDKE1FU09OX01PRF9BRkJDX1ZBTElEX0JJVFMpKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlmb3IgKGkgPSAwIDsgaSA8IHBsYW5lLT5tb2RpZmllcl9jb3VudCA7ICsr aSkKKwkJaWYgKHBsYW5lLT5tb2RpZmllcnNbaV0gPT0gbW9kaWZpZXIpCisJCQlicmVhazsKKwor CWlmIChpID09IHBsYW5lLT5tb2RpZmllcl9jb3VudCkgeworCQlEUk1fREVCVUdfS01TKCJVbnN1 cHBvcnRlZCBtb2RpZmllclxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAocHJpdi0+ YWZiY2Qub3BzICYmIHByaXYtPmFmYmNkLm9wcy0+c3VwcG9ydGVkX2ZtdCkKKwkJcmV0dXJuIHBy aXYtPmFmYmNkLm9wcy0+c3VwcG9ydGVkX2ZtdChtb2RpZmllciwgZm9ybWF0KTsKKworCURSTV9E RUJVR19LTVMoIkFGQkMgVW5zdXBwb3J0ZWRcbiIpOworCXJldHVybiBmYWxzZTsKK30KKwogc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgbWVzb25fcGxhbmVfZnVuY3MgPSB7CiAJ LnVwZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCiAJLmRpc2Fi bGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKQEAgLTM1Myw2ICs0 NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBtZXNvbl9wbGFuZV9m dW5jcyA9IHsKIAkucmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAogCS5h dG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRl X3N0YXRlLAogCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5l X2Rlc3Ryb3lfc3RhdGUsCisJLmZvcm1hdF9tb2Rfc3VwcG9ydGVkICAgPSBtZXNvbl9wbGFuZV9m b3JtYXRfbW9kX3N1cHBvcnRlZCwKIH07CiAKIHN0YXRpYyBjb25zdCB1aW50MzJfdCBzdXBwb3J0 ZWRfZHJtX2Zvcm1hdHNbXSA9IHsKQEAgLTM2NCwxMCArNDc1LDYwIEBAIHN0YXRpYyBjb25zdCB1 aW50MzJfdCBzdXBwb3J0ZWRfZHJtX2Zvcm1hdHNbXSA9IHsKIAlEUk1fRk9STUFUX1JHQjU2NSwK IH07CiAKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBmb3JtYXRfbW9kaWZpZXJzX2FmYmNfZ3htW10g PSB7CisJRFJNX0ZPUk1BVF9NT0RfQVJNX0FGQkMoQUZCQ19GT1JNQVRfTU9EX0JMT0NLX1NJWkVf MTZ4MTYgfAorCQkJCUFGQkNfRk9STUFUX01PRF9TUEFSU0UgfAorCQkJCUFGQkNfRk9STUFUX01P RF9ZVFIpLAorCS8qIFNQTElUIG1hbmRhdGVzIFNQQVJTRSwgUkdCIG1vZGVzIG1hbmRhdGVzIFlU UiAqLworCURSTV9GT1JNQVRfTU9EX0FSTV9BRkJDKEFGQkNfRk9STUFUX01PRF9CTE9DS19TSVpF XzE2eDE2IHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0RfWVRSIHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0Rf U1BBUlNFIHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0RfU1BMSVQpLAorCURSTV9GT1JNQVRfTU9EX0xJ TkVBUiwKKwlEUk1fRk9STUFUX01PRF9JTlZBTElELAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ2 NF90IGZvcm1hdF9tb2RpZmllcnNfYWZiY19nMTJhW10gPSB7CisJLyoKKwkgKiAtIFRPRklYIFN1 cHBvcnQgQUZCQyBtb2RpZmllcnMgZm9yIFlVViBmb3JtYXRzICgxNngxNiArIFRJTEVEKQorCSAq IC0gU1BMSVQgaXMgbWFuZGF0b3J5IGZvciBwZXJmb3JtYW5jZXMgcmVhc29ucyB3aGVuIGluIDE2 eDE2CisJICogICBibG9jayBzaXplCisJICogLSAzMng4IGJsb2NrIHNpemUgKyBTUExJVCBpcyBt YW5kYXRvcnkgd2l0aCA0SyBmcmFtZSBzaXplCisJICogICBmb3IgcGVyZm9ybWFuY2VzIHJlYXNv bnMKKwkgKi8KKwlEUk1fRk9STUFUX01PRF9BUk1fQUZCQyhBRkJDX0ZPUk1BVF9NT0RfQkxPQ0tf U0laRV8xNngxNiB8CisJCQkJQUZCQ19GT1JNQVRfTU9EX1NQQVJTRSB8CisJCQkJQUZCQ19GT1JN QVRfTU9EX1NQTElUKSwKKwlEUk1fRk9STUFUX01PRF9BUk1fQUZCQyhBRkJDX0ZPUk1BVF9NT0Rf QkxPQ0tfU0laRV8xNngxNiB8CisJCQkJQUZCQ19GT1JNQVRfTU9EX1lUUiB8CisJCQkJQUZCQ19G T1JNQVRfTU9EX1NQQVJTRSB8CisJCQkJQUZCQ19GT1JNQVRfTU9EX1NQTElUKSwKKwlEUk1fRk9S TUFUX01PRF9BUk1fQUZCQyhBRkJDX0ZPUk1BVF9NT0RfQkxPQ0tfU0laRV8zMng4IHwKKwkJCQlB RkJDX0ZPUk1BVF9NT0RfU1BBUlNFKSwKKwlEUk1fRk9STUFUX01PRF9BUk1fQUZCQyhBRkJDX0ZP Uk1BVF9NT0RfQkxPQ0tfU0laRV8zMng4IHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0RfWVRSIHwKKwkJ CQlBRkJDX0ZPUk1BVF9NT0RfU1BBUlNFKSwKKwlEUk1fRk9STUFUX01PRF9BUk1fQUZCQyhBRkJD X0ZPUk1BVF9NT0RfQkxPQ0tfU0laRV8zMng4IHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0RfU1BBUlNF IHwKKwkJCQlBRkJDX0ZPUk1BVF9NT0RfU1BMSVQpLAorCURSTV9GT1JNQVRfTU9EX0FSTV9BRkJD KEFGQkNfRk9STUFUX01PRF9CTE9DS19TSVpFXzMyeDggfAorCQkJCUFGQkNfRk9STUFUX01PRF9Z VFIgfAorCQkJCUFGQkNfRk9STUFUX01PRF9TUEFSU0UgfAorCQkJCUFGQkNfRk9STUFUX01PRF9T UExJVCksCisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQs Cit9OworCitzdGF0aWMgY29uc3QgdWludDY0X3QgZm9ybWF0X21vZGlmaWVyc19kZWZhdWx0W10g PSB7CisJRFJNX0ZPUk1BVF9NT0RfTElORUFSLAorCURSTV9GT1JNQVRfTU9EX0lOVkFMSUQsCit9 OworCiBpbnQgbWVzb25fcGxhbmVfY3JlYXRlKHN0cnVjdCBtZXNvbl9kcm0gKnByaXYpCiB7CiAJ c3RydWN0IG1lc29uX3BsYW5lICptZXNvbl9wbGFuZTsKIAlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZTsKKwljb25zdCB1aW50NjRfdCAqZm9ybWF0X21vZGlmaWVycyA9IGZvcm1hdF9tb2RpZmllcnNf ZGVmYXVsdDsKIAogCW1lc29uX3BsYW5lID0gZGV2bV9remFsbG9jKHByaXYtPmRybS0+ZGV2LCBz aXplb2YoKm1lc29uX3BsYW5lKSwKIAkJCQkgICBHRlBfS0VSTkVMKTsKQEAgLTM3NywxMSArNTM4 LDE2IEBAIGludCBtZXNvbl9wbGFuZV9jcmVhdGUoc3RydWN0IG1lc29uX2RybSAqcHJpdikKIAlt ZXNvbl9wbGFuZS0+cHJpdiA9IHByaXY7CiAJcGxhbmUgPSAmbWVzb25fcGxhbmUtPmJhc2U7CiAK KwlpZiAobWVzb25fdnB1X2lzX2NvbXBhdGlibGUocHJpdiwgVlBVX0NPTVBBVElCTEVfR1hNKSkK KwkJZm9ybWF0X21vZGlmaWVycyA9IGZvcm1hdF9tb2RpZmllcnNfYWZiY19neG07CisJZWxzZSBp ZiAobWVzb25fdnB1X2lzX2NvbXBhdGlibGUocHJpdiwgVlBVX0NPTVBBVElCTEVfRzEyQSkpCisJ CWZvcm1hdF9tb2RpZmllcnMgPSBmb3JtYXRfbW9kaWZpZXJzX2FmYmNfZzEyYTsKKwogCWRybV91 bml2ZXJzYWxfcGxhbmVfaW5pdChwcml2LT5kcm0sIHBsYW5lLCAweEZGLAogCQkJCSAmbWVzb25f cGxhbmVfZnVuY3MsCiAJCQkJIHN1cHBvcnRlZF9kcm1fZm9ybWF0cywKIAkJCQkgQVJSQVlfU0la RShzdXBwb3J0ZWRfZHJtX2Zvcm1hdHMpLAotCQkJCSBOVUxMLAorCQkJCSBmb3JtYXRfbW9kaWZp ZXJzLAogCQkJCSBEUk1fUExBTkVfVFlQRV9QUklNQVJZLCAibWVzb25fcHJpbWFyeV9wbGFuZSIp OwogCiAJZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZtZXNvbl9wbGFuZV9oZWxwZXJfZnVu Y3MpOwotLSAKMi4yMi4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWw=