From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: [PATCH 4/5] drm/i915: Implement color management on bdw/skl/bxt/kbl Date: Tue, 23 Feb 2016 14:39:11 +0000 Message-ID: <1456238352-2478-5-git-send-email-lionel.g.landwerlin@intel.com> References: <1456238352-2478-1-git-send-email-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456238352-2478-1-git-send-email-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Kumar@freedesktop.org, kausalmalladi@gmail.com List-Id: dri-devel@lists.freedesktop.org UGF0Y2ggYmFzZWQgb24gYSBwcmV2aW91cyBzZXJpZXMgYnkgU2hhc2hhbmsgU2hhcm1hLgoKdjI6 IERvIG5vdCByZWFkIEdBTU1BX01PREUgcmVnaXN0ZXIgdG8gZmlndXJlIHdoYXQgbW9kZSB3ZSdy ZSBpbgoKdjM6IFByb2dyYW0gUFJFQ19QQUxfR0NfTUFYIHRvIGNsYW1wIHBpeGVsIHZhbHVlcyA+ IDEuMAoKICAgIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0aGUgQnJvYWRjYXN0IFJHQiBwcm9w ZXJ0eSBpcyBhZmZlY3RlZCBieSBDVE0KCnY0OiBVcGRhdGUgY29udHJpYnV0b3JzCgp2NTogUmVm YWN0b3IgZGVnYW1tYS9nYW1tYSBMVVRzIGxvYWQgaW50byBhIHNpbmdsZSBmdW5jdGlvbgoKdjY6 IEZpeCBtaXNzaW5nIGludGVsX2NydGMgdmFyaWFibGUgKGJpc2VjdCBpc3N1ZSkKCnY3OiBGaXgg JiBzaW1wbGlmeSBsaW1pdGVkIHJhbmdlIG1hdHJpeCBtdWx0aXBsaWNhdGlvbgoKU2lnbmVkLW9m Zi1ieTogU2hhc2hhbmsgU2hhcm1hIDxzaGFzaGFuay5zaGFybWFAaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdlcmxpbkBpbnRlbC5jb20+ ClNpZ25lZC1vZmYtYnk6IEt1bWFyLCBLaXJhbiBTIDxraXJhbi5zLmt1bWFyQGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogS2F1c2FsIE1hbGxhZGkgPGthdXNhbG1hbGxhZGlAZ21haWwuY29tPgot LS0KIERvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCAgICAgICB8ICAgNiArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgIHwgIDI0ICsrLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf cmVnLmggICAgICB8ICAyMiArKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMg ICB8IDM0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQogZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDIyICsrLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmggICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRl di5jICAgfCAgIDggKwogOCBmaWxlcyBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKSwgNjMgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsIGIv RG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dwdS50bXBsCmluZGV4IDE2OTJjNGQuLjQzMGU5OWIgMTAw NjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAorKysgYi9Eb2N1bWVudGF0 aW9uL0RvY0Jvb2svZ3B1LnRtcGwKQEAgLTIxNTMsNyArMjE1MywxMSBAQCB2b2lkIGludGVsX2Ny dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJPHRkIHZhbGlnbj0idG9wIiA+RU5VTTwv dGQ+CiAJPHRkIHZhbGlnbj0idG9wIiA+eyAiQXV0b21hdGljIiwgIkZ1bGwiLCAiTGltaXRlZCAx NjoyMzUiIH08L3RkPgogCTx0ZCB2YWxpZ249InRvcCIgPkNvbm5lY3RvcjwvdGQ+Ci0JPHRkIHZh bGlnbj0idG9wIiA+VEJEPC90ZD4KKwk8dGQgdmFsaWduPSJ0b3AiID5XaGVuIHRoaXMgcHJvcGVy dHkgaXMgc2V0IHRvIExpbWl0ZWQgMTY6MjM1CisJCWFuZCBDVE0gaXMgc2V0LCB0aGUgaGFyZHdh cmUgd2lsbCBiZSBwcm9ncmFtbWVkIHdpdGggdGhlCisJCXJlc3VsdCBvZiB0aGUgbXVsdGlwbGlj YXRpb24gb2YgQ1RNIGJ5IHRoZSBsaW1pdGVkIHJhbmdlCisJCW1hdHJpeCB0byBlbnN1cmUgdGhl IHBpeGVscyBub3JtYWx5IGluIHRoZSByYW5nZSAwLi4xLjAgYXJlCisJCXJlbWFwcGVkIHRvIHRo ZSByYW5nZSAxNi8yNTUuLjIzNS8yNTUuPC90ZD4KIAk8L3RyPgogCTx0cj4KIAk8dGQgdmFsaWdu PSJ0b3AiID7igJxhdWRpb+KAnTwvdGQ+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCAyMGU4 MjAwLi4zODA3YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTY2LDYgKzY2LDkgQEAg c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlcjsKICNkZWZpbmUgSVZCX0NVUlNPUl9PRkZT RVRTIFwKIAkuY3Vyc29yX29mZnNldHMgPSB7IENVUlNPUl9BX09GRlNFVCwgSVZCX0NVUlNPUl9C X09GRlNFVCwgSVZCX0NVUlNPUl9DX09GRlNFVCB9CiAKKyNkZWZpbmUgQkRXX0NPTE9SUyBcCisJ LmNvbG9yID0geyAuZGVnYW1tYV9sdXRfc2l6ZSA9IDUxMiwgLmdhbW1hX2x1dF9zaXplID0gNTEy IH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9pODMwX2lu Zm8gPSB7CiAJLmdlbiA9IDIsIC5pc19tb2JpbGUgPSAxLCAuY3Vyc29yX25lZWRzX3BoeXNpY2Fs ID0gMSwgLm51bV9waXBlcyA9IDIsCiAJLmhhc19vdmVybGF5ID0gMSwgLm92ZXJsYXlfbmVlZHNf cGh5c2ljYWwgPSAxLApAQCAtMjg4LDI0ICsyOTEsMjggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp bnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9oYXN3ZWxsX21faW5mbyA9IHsKIAkuaXNfbW9iaWxlID0g MSwKIH07CiAKKyNkZWZpbmUgQkRXX0ZFQVRVUkVTIFwKKwlIU1dfRkVBVFVSRVMsIFwKKwlCRFdf Q09MT1JTCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfYnJv YWR3ZWxsX2RfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5nZW4g PSA4LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9i cm9hZHdlbGxfbV9pbmZvID0gewotCUhTV19GRUFUVVJFUywKKwlCRFdfRkVBVFVSRVMsCiAJLmdl biA9IDgsIC5pc19tb2JpbGUgPSAxLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9k ZXZpY2VfaW5mbyBpbnRlbF9icm9hZHdlbGxfZ3QzZF9pbmZvID0gewotCUhTV19GRUFUVVJFUywK KwlCRFdfRkVBVFVSRVMsCiAJLmdlbiA9IDgsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwg QlNEX1JJTkcgfCBCTFRfUklORyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9OwogCiBzdGF0 aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX2Jyb2Fkd2VsbF9ndDNtX2lu Zm8gPSB7Ci0JSFNXX0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuZ2VuID0gOCwgLmlzX21v YmlsZSA9IDEsCiAJLnJpbmdfbWFzayA9IFJFTkRFUl9SSU5HIHwgQlNEX1JJTkcgfCBCTFRfUklO RyB8IFZFQk9YX1JJTkcgfCBCU0QyX1JJTkcsCiB9OwpAQCAtMzIxLDEzICszMjgsMTMgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9jaGVycnl2aWV3X2luZm8g PSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvIGludGVsX3Nr eWxha2VfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5pc19za3ls YWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2 aWNlX2luZm8gaW50ZWxfc2t5bGFrZV9ndDNfaW5mbyA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRX X0ZFQVRVUkVTLAogCS5pc19za3lsYWtlID0gMSwKIAkuZ2VuID0gOSwKIAkucmluZ19tYXNrID0g UkVOREVSX1JJTkcgfCBCU0RfUklORyB8IEJMVF9SSU5HIHwgVkVCT1hfUklORyB8IEJTRDJfUklO RywKQEAgLTM0NSwxNyArMzUyLDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNl X2luZm8gaW50ZWxfYnJveHRvbl9pbmZvID0gewogCS5oYXNfZmJjID0gMSwKIAlHRU5fREVGQVVM VF9QSVBFT0ZGU0VUUywKIAlJVkJfQ1VSU09SX09GRlNFVFMsCisJQkRXX0NPTE9SUywKIH07CiAK IHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfaW5m byA9IHsKLQlIU1dfRkVBVFVSRVMsCisJQkRXX0ZFQVRVUkVTLAogCS5pc19wcmVsaW1pbmFyeSA9 IDEsCiAJLmlzX2thYnlsYWtlID0gMSwKIAkuZ2VuID0gOSwKIH07CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gaW50ZWxfa2FieWxha2VfZ3QzX2luZm8gPSB7Ci0JSFNX X0ZFQVRVUkVTLAorCUJEV19GRUFUVVJFUywKIAkuaXNfcHJlbGltaW5hcnkgPSAxLAogCS5pc19r YWJ5bGFrZSA9IDEsCiAJLmdlbiA9IDksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA2NjM0 YzA5Li43NjI3YTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTY2MCw2ICs2NjAsNyBA QCBzdHJ1Y3QgZHJtX2k5MTVfZGlzcGxheV9mdW5jcyB7CiAJLyogZGlzcGxheSBjbG9jayBpbmNy ZWFzZS9kZWNyZWFzZSAqLwogCS8qIHBsbCBjbG9jayBpbmNyZWFzZS9kZWNyZWFzZSAqLwogCisJ dm9pZCAoKmxvYWRfY3NjX21hdHJpeCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAl2b2lkICgq bG9hZF9sdXRzKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogfTsKIApAQCAtODA4LDYgKzgwOSwx MSBAQCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gewogCXU4IGhhc19zbGljZV9wZzoxOwogCXU4 IGhhc19zdWJzbGljZV9wZzoxOwogCXU4IGhhc19ldV9wZzoxOworCisJc3RydWN0IGNvbG9yX2x1 dHMgeworCQl1MTYgZGVnYW1tYV9sdXRfc2l6ZTsKKwkJdTE2IGdhbW1hX2x1dF9zaXplOworCX0g Y29sb3I7CiB9OwogCiAjdW5kZWYgREVGSU5FX0ZMQUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmlu ZGV4IDM3NzQ4NzAuLjhjZTc2ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtNzY1MCw2 ICs3NjUwLDI4IEBAIGVudW0gc2tsX2Rpc3BfcG93ZXJfd2VsbHMgewogI2RlZmluZSBQSVBFX0NT Q19QT1NUT0ZGX01FKHBpcGUpCV9NTUlPX1BJUEUocGlwZSwgX1BJUEVfQV9DU0NfUE9TVE9GRl9N RSwgX1BJUEVfQl9DU0NfUE9TVE9GRl9NRSkKICNkZWZpbmUgUElQRV9DU0NfUE9TVE9GRl9MTyhw aXBlKQlfTU1JT19QSVBFKHBpcGUsIF9QSVBFX0FfQ1NDX1BPU1RPRkZfTE8sIF9QSVBFX0JfQ1ND X1BPU1RPRkZfTE8pCiAKKy8qIHBpcGUgZGVnYW1tYS9nYW1tYSBMVVRzIG9uIElWQisgKi8KKyNk ZWZpbmUgX1BBTF9QUkVDX0lOREVYX0EJMHg0QTQwMAorI2RlZmluZSBfUEFMX1BSRUNfSU5ERVhf QgkweDRBQzAwCisjZGVmaW5lIF9QQUxfUFJFQ19JTkRFWF9DCTB4NEI0MDAKKyNkZWZpbmUgICBQ QUxfUFJFQ18xMF8xMl9CSVQJCSgwIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX1NQTElUX01P REUJCSgxIDw8IDMxKQorI2RlZmluZSAgIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UCSgxIDw8IDE1 KQorI2RlZmluZSBfUEFMX1BSRUNfREFUQV9BCTB4NEE0MDQKKyNkZWZpbmUgX1BBTF9QUkVDX0RB VEFfQgkweDRBQzA0CisjZGVmaW5lIF9QQUxfUFJFQ19EQVRBX0MJMHg0QjQwNAorI2RlZmluZSBf UEFMX1BSRUNfR0NfTUFYX0EJMHg0QTQxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0IJMHg0 QUMxMAorI2RlZmluZSBfUEFMX1BSRUNfR0NfTUFYX0MJMHg0QjQxMAorI2RlZmluZSBfUEFMX1BS RUNfRVhUX0dDX01BWF9BCTB4NEE0MjAKKyNkZWZpbmUgX1BBTF9QUkVDX0VYVF9HQ19NQVhfQgkw eDRBQzIwCisjZGVmaW5lIF9QQUxfUFJFQ19FWFRfR0NfTUFYX0MJMHg0QjQyMAorCisjZGVmaW5l IFBSRUNfUEFMX0lOREVYKHBpcGUpCQlfTU1JT19QSVBFKHBpcGUsIF9QQUxfUFJFQ19JTkRFWF9B LCBfUEFMX1BSRUNfSU5ERVhfQikKKyNkZWZpbmUgUFJFQ19QQUxfREFUQShwaXBlKQkJX01NSU9f UElQRShwaXBlLCBfUEFMX1BSRUNfREFUQV9BLCBfUEFMX1BSRUNfREFUQV9CKQorI2RlZmluZSBQ UkVDX1BBTF9HQ19NQVgocGlwZSwgaSkJX01NSU8oX1BJUEUocGlwZSwgX1BBTF9QUkVDX0dDX01B WF9BLCBfUEFMX1BSRUNfR0NfTUFYX0IpICsgKGkpICogNCkKKyNkZWZpbmUgUFJFQ19QQUxfRVhU X0dDX01BWChwaXBlLCBpKQlfTU1JTyhfUElQRShwaXBlLCBfUEFMX1BSRUNfRVhUX0dDX01BWF9B LCBfUEFMX1BSRUNfRVhUX0dDX01BWF9CKSArIChpKSAqIDQpCisKIC8qIE1JUEkgRFNJIHJlZ2lz dGVycyAqLwogCiAjZGVmaW5lIF9NSVBJX1BPUlQocG9ydCwgYSwgYykJX1BPUlQzKHBvcnQsIGEs IDAsIGMpCS8qIHBvcnRzIEEgYW5kIEMgb25seSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NvbG9y LmMKaW5kZXggZjZiZjlmMS4uOTdhMDQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfY29sb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xvci5j CkBAIC0yNCwzOSArMjQsMTU1IEBACiAKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKIAorI2RlZmlu ZSBDVE1fQ09FRkZfU0lHTgkoMVVMTCA8PCA2MykKKworI2RlZmluZSBDVE1fQ09FRkZfMV8wCSgx VUxMIDw8IDMyKQorI2RlZmluZSBDVE1fQ09FRkZfMl8wCShDVE1fQ09FRkZfMV8wIDw8IDEpCisj ZGVmaW5lIENUTV9DT0VGRl80XzAJKENUTV9DT0VGRl8yXzAgPDwgMSkKKyNkZWZpbmUgQ1RNX0NP RUZGXzBfNQkoQ1RNX0NPRUZGXzFfMCA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8yNQkoQ1RN X0NPRUZGXzBfNSA+PiAxKQorI2RlZmluZSBDVE1fQ09FRkZfMF8xMjUJKENUTV9DT0VGRl8wXzI1 ID4+IDEpCisKKyNkZWZpbmUgQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgKCgyMzVVTEwgLSAxNlVM TCkgKiBDVE1fQ09FRkZfMV8wIC8gMjU1KQorCisjZGVmaW5lIENUTV9DT0VGRl9ORUdBVElWRShj b2VmZikJKCgoY29lZmYpICYgQ1RNX0NPRUZGX1NJR04pICE9IDApCisjZGVmaW5lIENUTV9DT0VG Rl9BQlMoY29lZmYpCQkoKGNvZWZmKSAmIChDVE1fQ09FRkZfU0lHTiAtIDEpKQorCisjZGVmaW5l IExFR0FDWV9MVVRfTEVOR1RICQkoc2l6ZW9mKHN0cnVjdCBkcm1fY29sb3JfbHV0KSAqIDI1NikK KwogLyoKLSAqIFNldCB1cCB0aGUgcGlwZSBDU0MgdW5pdC4KKyAqIEV4dHJhY3QgdGhlIENTQyBj b2VmZmljaWVudCBmcm9tIGEgQ1RNIGNvZWZmaWNpZW50IChpbiBVMzIuMzIgZml4ZWQgcG9pbnQK KyAqIGZvcm1hdCkuIFRoaXMgbWFjcm8gdGFrZXMgdGhlIGNvZWZmaWNpZW50IHdlIHdhbnQgdHJh bnNmb3JtZWQgYW5kIHRoZQorICogbnVtYmVyIG9mIGZyYWN0aW9uYWwgYml0cy4KICAqCi0gKiBD dXJyZW50bHkgb25seSBmdWxsIHJhbmdlIFJHQiB0byBsaW1pdGVkIHJhbmdlIFJHQiBjb252ZXJz aW9uCi0gKiBpcyBzdXBwb3J0ZWQsIGJ1dCBldmVudHVhbGx5IHRoaXMgc2hvdWxkIGhhbmRsZSB2 YXJpb3VzCi0gKiBSR0I8LT5ZQ2JDciBzY2VuYXJpb3MgYXMgd2VsbC4KKyAqIFdlIG9ubHkgaGF2 ZSBhIDkgYml0cyBwcmVjaXNpb24gd2luZG93IHdoaWNoIHNsaWRlcyBkZXBlbmRpbmcgb24gdGhl IHZhbHVlCisgKiBvZiB0aGUgQ1RNIGNvZWZmaWNpZW50IGFuZCB3ZSB3cml0ZSB0aGUgdmFsdWUg ZnJvbSBiaXQgMy4gV2UgYWxzbyByb3VuZCB0aGUKKyAqIHZhbHVlLgorICovCisjZGVmaW5lIEk5 WFhfQ1NDX0NPRUZGX0ZQKGNvZWZmLCBmYml0cykJXAorCShjbGFtcF92YWwoKChjb2VmZikgPj4g KDMyIC0gKGZiaXRzKSAtIDMpKSArIDQsIDAsIDB4ZmZmKSAmIDB4ZmY4KQorCisjZGVmaW5lIEk5 WFhfQ1NDX0NPRUZGX0xJTUlURURfUkFOR0UJXAorCUk5WFhfQ1NDX0NPRUZGX0ZQKENUTV9DT0VG Rl9MSU1JVEVEX1JBTkdFLCA5KQorI2RlZmluZSBJOVhYX0NTQ19DT0VGRl8xXzAJCVwKKwkoKDcg PDwgMTIpIHwgSTlYWF9DU0NfQ09FRkZfRlAoQ1RNX0NPRUZGXzFfMCwgOCkpCisKK3N0YXRpYyBi b29sIGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7 CisJcmV0dXJuICFzdGF0ZS0+ZGVnYW1tYV9sdXQgJiYKKwkJIXN0YXRlLT5jdG0gJiYKKwkJc3Rh dGUtPmdhbW1hX2x1dCAmJgorCQlzdGF0ZS0+Z2FtbWFfbHV0LT5sZW5ndGggPT0gTEVHQUNZX0xV VF9MRU5HVEg7Cit9CisKKy8qCisgKiBXaGVuIHVzaW5nIGxpbWl0ZWQgcmFuZ2UsIG11bHRpcGx5 IHRoZSBtYXRyaXggZ2l2ZW4gYnkgdXNlcnNwYWNlIGJ5CisgKiB0aGUgbWF0cml4IHRoYXQgd2Ug d291bGQgdXNlIGZvciB0aGUgbGltaXRlZCByYW5nZS4gV2UgZG8gdGhlCisgKiBtdWx0aXBsaWNh dGlvbiBpbiBVMi4zMCBmb3JtYXQuCiAgKi8KK3N0YXRpYyB2b2lkIGN0bV9tdWx0X2J5X2xpbWl0 ZWQodWludDY0X3QgKnJlc3VsdCwgaW50NjRfdCAqaW5wdXQpCit7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgOTsgaSsrKQorCQlyZXN1bHRbaV0gPSAwOworCisJZm9yIChpID0gMDsgaSA8 IDM7IGkrKykgeworCQlpbnQ2NF90IHVzZXJfY29lZmYgPSBpbnB1dFtpICogMyArIGldOworCQl1 aW50NjRfdCBsaW1pdGVkX2NvZWZmID0gQ1RNX0NPRUZGX0xJTUlURURfUkFOR0UgPj4gMjsKKwkJ dWludDY0X3QgYWJzX2NvZWZmID0gY2xhbXBfdmFsKENUTV9DT0VGRl9BQlModXNlcl9jb2VmZiks CisJCQkJCSAgICAgICAwLAorCQkJCQkgICAgICAgQ1RNX0NPRUZGXzRfMCAtIDEpID4+IDI7CisK KwkJcmVzdWx0W2kgKiAzICsgaV0gPSAobGltaXRlZF9jb2VmZiAqIGFic19jb2VmZikgPj4gMjc7 CisJCWlmIChDVE1fQ09FRkZfTkVHQVRJVkUodXNlcl9jb2VmZikpCisJCQlyZXN1bHRbaSAqIDMg KyBpXSB8PSBDVE1fQ09FRkZfU0lHTjsKKwl9Cit9CisKKy8qIFNldCB1cCB0aGUgcGlwZSBDU0Mg dW5pdC4gKi8KIHN0YXRpYyB2b2lkIGk5eHhfbG9hZF9jc2NfbWF0cml4KHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9IGNydGMtPnN0YXRlOwogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCWludCBwaXBlID0gaW50 ZWxfY3J0Yy0+cGlwZTsKLQl1aW50MTZfdCBjb2VmZiA9IDB4NzgwMDsgLyogMS4wICovCisJaW50 IGksIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXVpbnQxNl90IGNvZWZmc1s5XSA9IHsgMCwg fTsKIAotCS8qCi0JICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9mIHZhbHVlcyBhY3R1YWxseSBj b21lIG91dCBvZiB0aGUgcGlwZQotCSAqIHdpdGggdGhlc2UgY29lZmYvcG9zdG9mZiB2YWx1ZXMg YW5kIGFkanVzdCB0byBnZXQgdGhlIGJlc3QKLQkgKiBhY2N1cmFjeS4gUGVyaGFwcyB3ZSBldmVu IG5lZWQgdG8gdGFrZSB0aGUgYnBjIHZhbHVlIGludG8KLQkgKiBjb25zaWRlcmF0aW9uLgotCSAq LworCWlmIChjcnRjX3N0YXRlLT5jdG0pIHsKKwkJc3RydWN0IGRybV9jb2xvcl9jdG0gKmN0bSA9 CisJCQkoc3RydWN0IGRybV9jb2xvcl9jdG0gKiljcnRjX3N0YXRlLT5jdG0tPmRhdGE7CisJCXVp bnQ2NF90IGlucHV0WzldID0geyAwLCB9OwogCi0JaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGlt aXRlZF9jb2xvcl9yYW5nZSkKLQkJY29lZmYgPSAoKDIzNSAtIDE2KSAqICgxIDw8IDEyKSAvIDI1 NSkgJiAweGZmODsgLyogMC54eHguLi4gKi8KKwkJaWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGlt aXRlZF9jb2xvcl9yYW5nZSkKKwkJCWN0bV9tdWx0X2J5X2xpbWl0ZWQoaW5wdXQsIGN0bS0+bWF0 cml4KTsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnB1dCk7IGkr KykKKwkJCQlpbnB1dFtpXSA9IGN0bS0+bWF0cml4W2ldOworCQl9CisKKwkJLyoKKwkJICogQ29u dmVydCBmaXhlZCBwb2ludCBTMzEuMzIgaW5wdXQgdG8gZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUK KwkJICogaGFyZHdhcmUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2Vm ZnMpOyBpKyspIHsKKwkJCXVpbnQ2NF90IGFic19jb2VmZiA9ICgoMVVMTCA8PCA2MykgLSAxKSAm IGlucHV0W2ldOworCisJCQkvKgorCQkJICogQ2xhbXAgaW5wdXQgdmFsdWUgdG8gbWluL21heCBz dXBwb3J0ZWQgYnkKKwkJCSAqIGhhcmR3YXJlLgorCQkJICovCisJCQlhYnNfY29lZmYgPSBjbGFt cF92YWwoYWJzX2NvZWZmLCAwLCBDVE1fQ09FRkZfNF8wIC0gMSk7CisKKwkJCS8qIHNpZ24gYml0 ICovCisJCQlpZiAoQ1RNX0NPRUZGX05FR0FUSVZFKGlucHV0W2ldKSkKKwkJCQljb2VmZnNbaV0g fD0gMSA8PCAxNTsKKworCQkJaWYgKGFic19jb2VmZiA8IENUTV9DT0VGRl8wXzEyNSkKKwkJCQlj b2VmZnNbaV0gfD0gKDMgPDwgMTIpIHwKKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZm LCAxMik7CisJCQllbHNlIGlmIChhYnNfY29lZmYgPCBDVE1fQ09FRkZfMF8yNSkKKwkJCQljb2Vm ZnNbaV0gfD0gKDIgPDwgMTIpIHwKKwkJCQkJSTlYWF9DU0NfQ09FRkZfRlAoYWJzX2NvZWZmLCAx MSk7CisJCQllbHNlIGlmIChhYnNfY29lZmYgPCBDVE1fQ09FRkZfMF81KQorCQkJCWNvZWZmc1tp XSB8PSAoMSA8PCAxMikgfAorCQkJCQlJOVhYX0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDEwKTsK KwkJCWVsc2UgaWYgKGFic19jb2VmZiA8IENUTV9DT0VGRl8xXzApCisJCQkJY29lZmZzW2ldIHw9 IEk5WFhfQ1NDX0NPRUZGX0ZQKGFic19jb2VmZiwgOSk7CisJCQllbHNlIGlmIChhYnNfY29lZmYg PCBDVE1fQ09FRkZfMl8wKQorCQkJCWNvZWZmc1tpXSB8PSAoNyA8PCAxMikgfAorCQkJCQlJOVhY X0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDgpOworCQkJZWxzZQorCQkJCWNvZWZmc1tpXSB8PSAo NiA8PCAxMikgfAorCQkJCQlJOVhYX0NTQ19DT0VGRl9GUChhYnNfY29lZmYsIDcpOworCQl9CisJ fSBlbHNlIHsKKwkJLyoKKwkJICogTG9hZCBhbiBpZGVudGlmeSBtYXRyaXggaWYgbm8gY29lZmZp Y2llbnRzIGFyZSBwcm92aWRlZC4KKwkJICoKKwkJICogVE9ETzogQ2hlY2sgd2hhdCBraW5kIG9m IHZhbHVlcyBhY3R1YWxseSBjb21lIG91dCBvZiB0aGUKKwkJICogcGlwZSB3aXRoIHRoZXNlIGNv ZWZmL3Bvc3RvZmYgdmFsdWVzIGFuZCBhZGp1c3QgdG8gZ2V0IHRoZQorCQkgKiBiZXN0IGFjY3Vy YWN5LiBQZXJoYXBzIHdlIGV2ZW4gbmVlZCB0byB0YWtlIHRoZSBicGMgdmFsdWUKKwkJICogaW50 byBjb25zaWRlcmF0aW9uLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJ aWYgKGludGVsX2NydGMtPmNvbmZpZy0+bGltaXRlZF9jb2xvcl9yYW5nZSkKKwkJCQljb2VmZnNb aSAqIDMgKyBpXSA9CisJCQkJCUk5WFhfQ1NDX0NPRUZGX0xJTUlURURfUkFOR0U7CisJCQllbHNl CisJCQkJY29lZmZzW2kgKiAzICsgaV0gPSBJOVhYX0NTQ19DT0VGRl8xXzA7CisJCX0KKwl9CiAK LQlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX1JZX0dZKHBpcGUpLCBjb2VmZiA8PCAxNik7Ci0J STkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9CWShwaXBlKSwgMCk7CisJSTkxNV9XUklURShQSVBF X0NTQ19DT0VGRl9SWV9HWShwaXBlKSwgY29lZmZzWzBdIDw8IDE2IHwgY29lZmZzWzFdKTsKKwlJ OTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZGX0JZKHBpcGUpLCBjb2VmZnNbMl0gPDwgMTYpOwogCi0J STkxNV9XUklURShQSVBFX0NTQ19DT0VGRl9SVV9HVShwaXBlKSwgY29lZmYpOwotCUk5MTVfV1JJ VEUoUElQRV9DU0NfQ09FRkZfQlUocGlwZSksIDApOworCUk5MTVfV1JJVEUoUElQRV9DU0NfQ09F RkZfUlVfR1UocGlwZSksIGNvZWZmc1szXSA8PCAxNiB8IGNvZWZmc1s0XSk7CisJSTkxNV9XUklU RShQSVBFX0NTQ19DT0VGRl9CVShwaXBlKSwgY29lZmZzWzVdIDw8IDE2KTsKIAotCUk5MTVfV1JJ VEUoUElQRV9DU0NfQ09FRkZfUlZfR1YocGlwZSksIDApOwotCUk5MTVfV1JJVEUoUElQRV9DU0Nf Q09FRkZfQlYocGlwZSksIGNvZWZmIDw8IDE2KTsKKwlJOTE1X1dSSVRFKFBJUEVfQ1NDX0NPRUZG X1JWX0dWKHBpcGUpLCBjb2VmZnNbNl0gPDwgMTYgfCBjb2VmZnNbN10pOworCUk5MTVfV1JJVEUo UElQRV9DU0NfQ09FRkZfQlYocGlwZSksIGNvZWZmc1s4XSA8PCAxNik7CiAKIAlJOTE1X1dSSVRF KFBJUEVfQ1NDX1BSRU9GRl9ISShwaXBlKSwgMCk7CiAJSTkxNV9XUklURShQSVBFX0NTQ19QUkVP RkZfTUUocGlwZSksIDApOwpAQCAtODUsMTMgKzIwMSwxOCBAQCBzdGF0aWMgdm9pZCBpOXh4X2xv YWRfY3NjX21hdHJpeChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAKIHZvaWQgaW50ZWxfY29sb3Jf c2V0X2NzYyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7Ci0JaTl4eF9sb2FkX2NzY19tYXRyaXgo Y3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKGRldl9w cml2LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeCkKKwkJZGV2X3ByaXYtPmRpc3BsYXkubG9hZF9j c2NfbWF0cml4KGNydGMpOwogfQogCi0vKiBMb2FkcyB0aGUgcGFsZXR0ZS9nYW1tYSB1bml0IGZv ciB0aGUgQ1JUQyB3aXRoIHRoZSBwcmVwYXJlZCB2YWx1ZXMuICovCisvKiBMb2FkcyB0aGUgbGVn YWN5IHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3IgdGhlIENSVEMuICovCiBzdGF0aWMgdm9pZCBpOXh4 X2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlID0gY3J0Yy0+ c3RhdGU7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0 Yyk7CiAJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwpAQCAtMTA0LDE4ICsyMjUs MzMgQEAgc3RhdGljIHZvaWQgaTl4eF9sb2FkX2x1dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQog CQkJYXNzZXJ0X3BsbF9lbmFibGVkKGRldl9wcml2LCBwaXBlKTsKIAl9CiAKLQlmb3IgKGkgPSAw OyBpIDwgMjU2OyBpKyspIHsKLQkJdWludDMyX3Qgd29yZCA9IChpbnRlbF9jcnRjLT5sdXRfcltp XSA8PCAxNikgfAotCQkJKGludGVsX2NydGMtPmx1dF9nW2ldIDw8IDgpIHwKLQkJCWludGVsX2Ny dGMtPmx1dF9iW2ldOwotCQlpZiAoSEFTX0dNQ0hfRElTUExBWShkZXYpKQotCQkJSTkxNV9XUklU RShQQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKLQkJZWxzZQotCQkJSTkxNV9XUklURShMR0NfUEFM RVRURShwaXBlLCBpKSwgd29yZCk7CisJaWYgKHN0YXRlLT5nYW1tYV9sdXQpIHsKKwkJc3RydWN0 IGRybV9jb2xvcl9sdXQgKmx1dCA9CisJCQkoc3RydWN0IGRybV9jb2xvcl9sdXQgKikgc3RhdGUt PmdhbW1hX2x1dC0+ZGF0YTsKKwkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCQl1aW50 MzJfdCB3b3JkID0KKwkJCQkoZHJtX2NvbG9yX2x1dF9leHRyYWN0KGx1dFtpXS5yZWQsIDgpIDw8 IDE2KSB8CisJCQkJKGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4sIDgpIDw8IDgp IHwKKwkJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDgpOworCisJCQlpZiAo SEFTX0dNQ0hfRElTUExBWShkZXYpKQorCQkJCUk5MTVfV1JJVEUoUEFMRVRURShwaXBlLCBpKSwg d29yZCk7CisJCQllbHNlCisJCQkJSTkxNV9XUklURShMR0NfUEFMRVRURShwaXBlLCBpKSwgd29y ZCk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCXVp bnQzMl90IHdvcmQgPSAoaSA8PCAxNikgfCAoaSA8PCA4KSB8IGk7CisKKwkJCWlmIChIQVNfR01D SF9ESVNQTEFZKGRldikpCisJCQkJSTkxNV9XUklURShQQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsK KwkJCWVsc2UKKwkJCQlJOTE1X1dSSVRFKExHQ19QQUxFVFRFKHBpcGUsIGkpLCB3b3JkKTsKKwkJ fQogCX0KIH0KIAotLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRo ZSBDUlRDIG9uIEhhc3dlbGwrLiAqLworLyogTG9hZHMgdGhlIGxlZ2FjeSBwYWxldHRlL2dhbW1h IHVuaXQgZm9yIHRoZSBDUlRDIG9uIEhhc3dlbGwuICovCiBzdGF0aWMgdm9pZCBoYXN3ZWxsX2xv YWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKQEAgLTE0NCw2ICsyODAsODkgQEAgc3RhdGljIHZvaWQgaGFzd2VsbF9s b2FkX2x1dHMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCQloc3dfZW5hYmxlX2lwcyhpbnRlbF9j cnRjKTsKIH0KIAorLyogTG9hZHMgdGhlIHBhbGV0dGUvZ2FtbWEgdW5pdCBmb3IgdGhlIENSVEMg b24gQnJvYWR3ZWxsKy4gKi8KK3N0YXRpYyB2b2lkIGJyb2Fkd2VsbF9sb2FkX2x1dHMoc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7 CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSA9IGNydGMtPnN0YXRlOworCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGlu dGVsX2NydGNfc3RhdGUgKmludGVsX3N0YXRlID0gdG9faW50ZWxfY3J0Y19zdGF0ZShzdGF0ZSk7 CisJZW51bSBwaXBlIHBpcGUgPSB0b19pbnRlbF9jcnRjKGNydGMpLT5waXBlOworCXVpbnQzMl90 IGksIGx1dF9zaXplID0gSU5URUxfSU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1dF9zaXplOwor CisJaWYgKGNydGNfc3RhdGVfaXNfbGVnYWN5KHN0YXRlKSkgeworCQloYXN3ZWxsX2xvYWRfbHV0 cyhjcnRjKTsKKwkJcmV0dXJuOworCX0KKworCUk5MTVfV1JJVEUoUFJFQ19QQUxfSU5ERVgocGlw ZSksCisJCSAgIFBBTF9QUkVDX1NQTElUX01PREUgfCBQQUxfUFJFQ19BVVRPX0lOQ1JFTUVOVCk7 CisKKwlpZiAoc3RhdGUtPmRlZ2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICps dXQgPQorCQkJKHN0cnVjdCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5kZWdhbW1hX2x1dC0+ZGF0 YTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJdWludDMyX3Qgd29y ZCA9CisJCQlkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTApIDw8IDIwIHwKKwkJ CWRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uZ3JlZW4sIDEwKSA8PCAxMCB8CisJCQlkcm1f Y29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLmJsdWUsIDEwKTsKKworCQkJSTkxNV9XUklURShQUkVD X1BBTF9EQVRBKHBpcGUpLCB3b3JkKTsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkg PCBsdXRfc2l6ZTsgaSsrKSB7CisJCQl1aW50MzJfdCB2ID0gKGkgKiAoKDEgPDwgMTApIC0gMSkp IC8gKGx1dF9zaXplIC0gMSk7CisKKwkJCUk5MTVfV1JJVEUoUFJFQ19QQUxfREFUQShwaXBlKSwK KwkJCQkgICAodiA8PCAyMCkgfCAodiA8PCAxMCkgfCB2KTsKKwkJfQorCX0KKworCWlmIChzdGF0 ZS0+Z2FtbWFfbHV0KSB7CisJCXN0cnVjdCBkcm1fY29sb3JfbHV0ICpsdXQgPQorCQkJKHN0cnVj dCBkcm1fY29sb3JfbHV0ICopIHN0YXRlLT5nYW1tYV9sdXQtPmRhdGE7CisKKwkJZm9yIChpID0g MDsgaSA8IGx1dF9zaXplOyBpKyspIHsKKwkJCXVpbnQzMl90IHdvcmQgPQorCQkJKGRybV9jb2xv cl9sdXRfZXh0cmFjdChsdXRbaV0ucmVkLCAxMCkgPDwgMjApIHwKKwkJCShkcm1fY29sb3JfbHV0 X2V4dHJhY3QobHV0W2ldLmdyZWVuLCAxMCkgPDwgMTApIHwKKwkJCWRybV9jb2xvcl9sdXRfZXh0 cmFjdChsdXRbaV0uYmx1ZSwgMTApOworCisJCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlw ZSksIHdvcmQpOworCQl9CisKKwkJLyogUHJvZ3JhbSB0aGUgbWF4IHJlZ2lzdGVyIHRvIGNsYW1w IHZhbHVlcyA+IDEuMC4gKi8KKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMCks CisJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJhY3QobHV0W2ldLnJlZCwgMTYpKTsKKwkJSTkxNV9X UklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMSksCisJCQkgICBkcm1fY29sb3JfbHV0X2V4dHJh Y3QobHV0W2ldLmdyZWVuLCAxNikpOworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBl LCAyKSwKKwkJCSAgIGRybV9jb2xvcl9sdXRfZXh0cmFjdChsdXRbaV0uYmx1ZSwgMTYpKTsKKwl9 IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbHV0X3NpemU7IGkrKykgeworCQkJdWludDMyX3Qg diA9IChpICogKCgxIDw8IDEwKSAtIDEpKSAvIChsdXRfc2l6ZSAtIDEpOworCisJCQlJOTE1X1dS SVRFKFBSRUNfUEFMX0RBVEEocGlwZSksCisJCQkJICAgKHYgPDwgMjApIHwgKHYgPDwgMTApIHwg dik7CisJCX0KKworCQlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAwKSwgKDEgPDwg MTYpIC0gMSk7CisJCUk5MTVfV1JJVEUoUFJFQ19QQUxfR0NfTUFYKHBpcGUsIDEpLCAoMSA8PCAx NikgLSAxKTsKKwkJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMiksICgxIDw8IDE2 KSAtIDEpOworCX0KKworCWludGVsX3N0YXRlLT5nYW1tYV9tb2RlID0gR0FNTUFfTU9ERV9NT0RF X1NQTElUOworCUk5MTVfV1JJVEUoR0FNTUFfTU9ERShwaXBlKSwgR0FNTUFfTU9ERV9NT0RFX1NQ TElUKTsKKwlQT1NUSU5HX1JFQUQoR0FNTUFfTU9ERShwaXBlKSk7CisKKwkvKgorCSAqIFJlc2V0 IHRoZSBpbmRleCwgb3RoZXJ3aXNlIGl0IHByZXZlbnRzIHRoZSBsZWdhY3kgcGFsZXR0ZSB0byBi ZQorCSAqIHdyaXR0ZW4gcHJvcGVybHkuCisJICovCisJSTkxNV9XUklURShQUkVDX1BBTF9JTkRF WChwaXBlKSwgMCk7Cit9CisKIHZvaWQgaW50ZWxfY29sb3JfbG9hZF9sdXRzKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwpAQCAt MTU2LDE5ICszNzUsMzcgQEAgdm9pZCBpbnRlbF9jb2xvcl9sb2FkX2x1dHMoc3RydWN0IGRybV9j cnRjICpjcnRjKQogCWRldl9wcml2LT5kaXNwbGF5LmxvYWRfbHV0cyhjcnRjKTsKIH0KIAotdm9p ZCBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2 ICpyZWQsIHUxNiAqZ3JlZW4sCi0JCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHN0YXJ0LCB1aW50 MzJfdCBzaXplKQoraW50IGludGVsX2NvbG9yX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK KwkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewotCWludCBlbmQg PSAoc3RhcnQgKyBzaXplID4gMjU2KSA/IDI1NiA6IHN0YXJ0ICsgc2l6ZSwgaTsKLQlzdHJ1Y3Qg aW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzaXplX3QgZ2FtbWFfbGVuZ3RoLCBkZWdhbW1h X2xlbmd0aDsKIAotCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKLQkJaW50ZWxfY3J0 Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gODsKLQkJaW50ZWxfY3J0Yy0+bHV0X2dbaV0gPSBncmVl bltpXSA+PiA4OwotCQlpbnRlbF9jcnRjLT5sdXRfYltpXSA9IGJsdWVbaV0gPj4gODsKLQl9CisJ ZGVnYW1tYV9sZW5ndGggPSBJTlRFTF9JTkZPKGRldiktPmNvbG9yLmRlZ2FtbWFfbHV0X3NpemUg KgorCQlzaXplb2Yoc3RydWN0IGRybV9jb2xvcl9sdXQpOworCWdhbW1hX2xlbmd0aCA9IElOVEVM X0lORk8oZGV2KS0+Y29sb3IuZ2FtbWFfbHV0X3NpemUgKgorCQlzaXplb2Yoc3RydWN0IGRybV9j b2xvcl9sdXQpOwogCi0JaW50ZWxfY29sb3JfbG9hZF9sdXRzKGNydGMpOworCS8qCisJICogV2Ug YWxsb3cgYm90aCBkZWdhbW1hICYgZ2FtbWEgbHV0cyBhdCB0aGUgcmlnaHQgc2l6ZSBvcgorCSAq IE5VTEwuCisJICovCisJaWYgKCghY3J0Y19zdGF0ZS0+ZGVnYW1tYV9sdXQgfHwKKwkgICAgIGNy dGNfc3RhdGUtPmRlZ2FtbWFfbHV0LT5sZW5ndGggPT0gZGVnYW1tYV9sZW5ndGgpICYmCisJICAg ICghY3J0Y19zdGF0ZS0+Z2FtbWFfbHV0IHx8CisJICAgICBjcnRjX3N0YXRlLT5nYW1tYV9sdXQt Pmxlbmd0aCA9PSBnYW1tYV9sZW5ndGgpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogV2UgYWxz byBhbGxvdyBubyBkZWdhbW1hIGx1dCBhbmQgYSBnYW1tYSBsdXQgYXQgdGhlIGxlZ2FjeQorCSAq IHNpemUgKDI1NiBlbnRyaWVzKS4KKwkgKi8KKwlpZiAoIWNydGNfc3RhdGUtPmRlZ2FtbWFfbHV0 ICYmCisJICAgIGNydGNfc3RhdGUtPmdhbW1hX2x1dCAmJgorCSAgICBjcnRjX3N0YXRlLT5nYW1t YV9sdXQtPmxlbmd0aCA9PSBMRUdBQ1lfTFVUX0xFTkdUSCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1 cm4gLUVJTlZBTDsKIH0KIAogdm9pZCBpbnRlbF9jb2xvcl9pbml0KHN0cnVjdCBkcm1fY3J0YyAq Y3J0YykKQEAgLTE3OCwyMiArNDE1LDI4IEBAIHZvaWQgaW50ZWxfY29sb3JfaW5pdChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCiAJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRl bF9jcnRjKGNydGMpOwogCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jcnRjX3N0YXRl ID0KIAkJdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7Ci0JaW50IGk7CiAKIAlkcm1f bW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKGNydGMsIDI1Nik7Ci0JZm9yIChpID0gMDsgaSA8IDI1 NjsgaSsrKSB7Ci0JCWludGVsX2NydGMtPmx1dF9yW2ldID0gaTsKLQkJaW50ZWxfY3J0Yy0+bHV0 X2dbaV0gPSBpOwotCQlpbnRlbF9jcnRjLT5sdXRfYltpXSA9IGk7Ci0JfQogCi0JaWYgKElTX0hB U1dFTEwoZGV2KSB8fAotCSAgICAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCAmJiAhSVNfQ0hF UlJZVklFVyhkZXYpKSkgeworCWlmIChJU19IQVNXRUxMKGRldikpIHsKKwkJZGV2X3ByaXYtPmRp c3BsYXkubG9hZF9jc2NfbWF0cml4ID0gaTl4eF9sb2FkX2NzY19tYXRyaXg7CiAJCWRldl9wcml2 LT5kaXNwbGF5LmxvYWRfbHV0cyA9IGhhc3dlbGxfbG9hZF9sdXRzOwotCisJCWludGVsX2NydGNf c3RhdGUtPmdhbW1hX21vZGUgPQorCQkJSTkxNV9SRUFEKEdBTU1BX01PREUoaW50ZWxfY3J0Yy0+ cGlwZSkpOworCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikgfHwgSVNfU0tZTEFLRShkZXYp IHx8CisJCSAgIElTX0JST1hUT04oZGV2KSB8fCBJU19LQUJZTEFLRShkZXYpKSB7CisJCWRldl9w cml2LT5kaXNwbGF5LmxvYWRfY3NjX21hdHJpeCA9IGk5eHhfbG9hZF9jc2NfbWF0cml4OworCQlk ZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMgPSBicm9hZHdlbGxfbG9hZF9sdXRzOwogCQlpbnRl bF9jcnRjX3N0YXRlLT5nYW1tYV9tb2RlID0KIAkJCUk5MTVfUkVBRChHQU1NQV9NT0RFKGludGVs X2NydGMtPnBpcGUpKTsKIAl9IGVsc2UgewogCQlkZXZfcHJpdi0+ZGlzcGxheS5sb2FkX2x1dHMg PSBpOXh4X2xvYWRfbHV0czsKIAl9CisKKwkvKiBFbmFibGUgY29sb3IgbWFuYWdlbWVudCBzdXBw b3J0IHdoZW4gd2UgaGF2ZSBkZWdhbW1hICYgZ2FtbWEgTFVUcy4gKi8KKwlpZiAoSU5URUxfSU5G TyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1dF9zaXplICE9IDAgJiYKKwkgICAgSU5URUxfSU5GTyhk ZXYpLT5jb2xvci5nYW1tYV9sdXRfc2l6ZSAhPSAwKQorCQlkcm1faGVscGVyX2NydGNfZW5hYmxl X2NvbG9yX21nbXQoY3J0YywKKwkJCQkJSU5URUxfSU5GTyhkZXYpLT5jb2xvci5kZWdhbW1hX2x1 dF9zaXplLAorCQkJCQlJTlRFTF9JTkZPKGRldiktPmNvbG9yLmdhbW1hX2x1dF9zaXplKTsKIH0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBhY2JiMWQ5Li4xYWFmZTAwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMTg0Niw2ICsxMTg0NiwxMiBA QCBzdGF0aWMgaW50IGludGVsX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKGNydGNfc3RhdGUtPmNvbG9yX21nbXRfY2hh bmdlZCkgeworCQlyZXQgPSBpbnRlbF9jb2xvcl9jaGVjayhjcnRjLCBjcnRjX3N0YXRlKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0ID0gMDsKIAlpZiAoZGV2X3ByaXYt PmRpc3BsYXkuY29tcHV0ZV9waXBlX3dtKSB7CiAJCXJldCA9IGRldl9wcml2LT5kaXNwbGF5LmNv bXB1dGVfcGlwZV93bShpbnRlbF9jcnRjLCBzdGF0ZSk7CkBAIC0xMTg2Nyw3ICsxMTg3Myw2IEBA IHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19hdG9taWNfY2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRj LAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxw ZXJfZnVuY3MgPSB7CiAJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFz ZV9hdG9taWMsCi0JLmxvYWRfbHV0ID0gaW50ZWxfY29sb3JfbG9hZF9sdXRzLAogCS5hdG9taWNf YmVnaW4gPSBpbnRlbF9iZWdpbl9jcnRjX2NvbW1pdCwKIAkuYXRvbWljX2ZsdXNoID0gaW50ZWxf ZmluaXNoX2NydGNfY29tbWl0LAogCS5hdG9taWNfY2hlY2sgPSBpbnRlbF9jcnRjX2F0b21pY19j aGVjaywKQEAgLTEzMzk4LDYgKzEzNDAzLDE4IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2Nv bW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJaHdfY2hlY2sgPSB0cnVlOwogCQl9CiAK KwkJaWYgKCFtb2Rlc2V0ICYmCisJCSAgICBjcnRjLT5zdGF0ZS0+YWN0aXZlICYmCisJCSAgICBj cnRjLT5zdGF0ZS0+Y29sb3JfbWdtdF9jaGFuZ2VkKSB7CisJCQkvKgorCQkJICogT25seSB1cGRh dGUgY29sb3IgbWFuYWdlbWVudCB3aGVuIG5vdCBkb2luZworCQkJICogYSBtb2Rlc2V0IGFzIHRo aXMgd2lsbCBiZSBkb25lIGJ5CisJCQkgKiBjcnRjX2VuYWJsZSBhbHJlYWR5LgorCQkJICovCisJ CQlpbnRlbF9jb2xvcl9zZXRfY3NjKGNydGMpOworCQkJaW50ZWxfY29sb3JfbG9hZF9sdXRzKGNy dGMpOworCQl9CisKIAkJaWYgKCFtb2Rlc2V0KQogCQkJaW50ZWxfcHJlX3BsYW5lX3VwZGF0ZSh0 b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpKTsKIApAQCAtMTM0ODcsOCArMTM1MDQsOSBA QCBvdXQ6CiAjdW5kZWYgZm9yX2VhY2hfaW50ZWxfY3J0Y19tYXNrZWQKIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewotCS5nYW1tYV9zZXQg PSBpbnRlbF9jb2xvcl9sZWdhY3lfZ2FtbWFfc2V0LAorCS5nYW1tYV9zZXQgPSBkcm1fYXRvbWlj X2hlbHBlcl9sZWdhY3lfZ2FtbWFfc2V0LAogCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19oZWxw ZXJfc2V0X2NvbmZpZywKKwkuc2V0X3Byb3BlcnR5ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19z ZXRfcHJvcGVydHksCiAJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCiAJLnBhZ2VfZmxp cCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAogCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gaW50 ZWxfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDk3 NDJkNWIuLjMwODJkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xNjI0LDkgKzE2 MjQsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgaW50ZWxf cGxhbmVfaGVscGVyX2Z1bmNzOwogCiAvKiBpbnRlbF9jb2xvci5jICovCiB2b2lkIGludGVsX2Nv bG9yX2luaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBpbnRlbF9jb2xvcl9jaGVjayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpOwogdm9p ZCBpbnRlbF9jb2xvcl9zZXRfY3NjKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CiB2b2lkIGludGVs X2NvbG9yX2xvYWRfbHV0cyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwotdm9pZCBpbnRlbF9jb2xv cl9sZWdhY3lfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAq Z3JlZW4sCi0JCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBzaXplKTsK IAogI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2 LmMKaW5kZXggOTdhOTFlNi4uNzc3Zjk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZmJkZXYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5j CkBAIC0zNzksNiArMzc5LDcgQEAgcmV0cnk6CiAJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3I7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAkJc3RydWN0IGRybV9mYl9o ZWxwZXJfY3J0YyAqbmV3X2NydGM7CisJCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOwog CiAJCWZiX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwogCQljb25uZWN0b3Ig PSBmYl9jb25uLT5jb25uZWN0b3I7CkBAIC00MjAsNiArNDIxLDEzIEBAIHJldHJ5OgogCiAJCW51 bV9jb25uZWN0b3JzX2VuYWJsZWQrKzsKIAorCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0Yyhj b25uZWN0b3ItPnN0YXRlLT5jcnRjKTsKKwkJZm9yIChqID0gMDsgaiA8IDI1NjsgaisrKSB7CisJ CQlpbnRlbF9jcnRjLT5sdXRfcltqXSA9IGo7CisJCQlpbnRlbF9jcnRjLT5sdXRfZ1tqXSA9IGo7 CisJCQlpbnRlbF9jcnRjLT5sdXRfYltqXSA9IGo7CisJCX0KKwogCQluZXdfY3J0YyA9IGludGVs X2ZiX2hlbHBlcl9jcnRjKGZiX2hlbHBlciwgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yyk7CiAKIAkJ LyoKLS0gCjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n ZngK