From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v6.1 4/6] drm: rockchip: Support Synopsys DW MIPI DSI Date: Fri, 18 Dec 2015 17:47:54 +0800 Message-ID: <1450432074-19808-1-git-send-email-zyw@rock-chips.com> References: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450260616-21160-5-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: heiko@sntech.de, linux-rockchip@lists.infradead.org, mark.yao@rock-chips.com, treding@nvidia.com Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kgY29udHJvbGxlciB3 aGljaCBpcwplbWJlZGRlZCBpbiB0aGUgcmszMjg4IFNvQ3MuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp cyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPgotLS0KCkNoYW5nZXMgaW4gdjYuMToKLSBBZGQg YXRvbWljIEFQSSBzdXBwb3J0IChIZWlrbyBTdMO8Ym5lKQoKQ2hhbmdlcyBpbiB2NjoKLSBEbyBu b3QgdXNlIGJyaWRnZSBkcml2ZXIgKFRoaWVycnkgUmVkaW5nKQotIE9wdGltaXphdGlvbiB0aGUg cGh5IGluaXQgc2VxdWVuY2UKCkNoYW5nZXMgaW4gdjU6IE5vbmUKQ2hhbmdlcyBpbiB2NDogTm9u ZQpDaGFuZ2VzIGluIHYzOiBOb25lCgogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcg ICAgICAgICAgICB8ICAgMTAgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAg ICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLmMg ICAgICB8IDEyMDggKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jIHwgICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDEy MjIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9kdy1taXBpLWRzaS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwppbmRleCA2ODZjYjQ5 Li4xZGIxYjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwor KysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZwpAQCAtMzQsMyArMzQsMTMgQEAg Y29uZmlnIFJPQ0tDSElQX0FOQUxPR0lYX0RQCiAJICBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3Ig Um9ja2NoaXAgU29DIHNwZWNpZmljIGV4dGVuc2lvbnMKIAkgIGZvciB0aGUgQW5hbG9naXggQ29y ZSBEUCBkcml2ZXIuIElmIHlvdSB3YW50IHRvIGVuYWJsZSBEUAogCSAgb24gUkszMjg4IGJhc2Vk IFNvQywgeW91IHNob3VsZCBzZWxldCB0aGlzIG9wdGlvbi4KKworY29uZmlnIFJPQ0tDSElQX0RX X01JUElfRFNJCisJYm9vbCAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3Bz eXMgRFcgTUlQSSBEU0kiCisJZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKKwlzZWxlY3QgRFJNX01J UElfRFNJCisJaGVscAorCSBUaGlzIHNlbGVjdHMgc3VwcG9ydCBmb3IgUm9ja2NoaXAgU29DIHNw ZWNpZmljIGV4dGVuc2lvbnMKKwkgZm9yIHRoZSBTeW5vcHN5cyBEZXNpZ25XYXJlIEhETUkgZHJp dmVyLiBJZiB5b3Ugd2FudCB0bworCSBlbmFibGUgTUlQSSBEU0kgb24gUkszMjg4IGJhc2VkIFNv QywgeW91IHNob3VsZCBzZWxldCB0aGlzCisJIG9wdGlvbi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtl ZmlsZQppbmRleCA4YWQwMWZiLi5jNWMyZDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxl CkBAIC03LDUgKzcsNiBAQCByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9kcnYubyByb2Nr Y2hpcF9kcm1fZmIubyByb2NrY2hpcF9kcm1fZmJkZXYubyBcCiAKIG9iai0kKENPTkZJR19ST0NL Q0hJUF9EV19IRE1JKSArPSBkd19oZG1pLXJvY2tjaGlwLm8KIG9iai0kKENPTkZJR19ST0NLQ0hJ UF9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXhfZHAtcm9ja2NoaXAubworb2JqLSQoQ09ORklHX1JP Q0tDSElQX0RXX01JUElfRFNJKSArPSBkdy1taXBpLWRzaS5vCiAKIG9iai0kKENPTkZJR19EUk1f Uk9DS0NISVApICs9IHJvY2tjaGlwZHJtLm8gcm9ja2NoaXBfZHJtX3ZvcC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2kuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yb2NrY2hpcC9kdy1taXBpLWRzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjg0MTNjYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAv ZHctbWlwaS1kc2kuYwpAQCAtMCwwICsxLDEyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTQsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxs aW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxs aW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVk ZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2Lmgi CisjaW5jbHVkZSAicm9ja2NoaXBfZHJtX3ZvcC5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICAg ICJkdy1taXBpLWRzaSIKKworI2RlZmluZSBHUkZfU09DX0NPTjYgICAgICAgICAgICAgICAgICAg IDB4MDI1YworI2RlZmluZSBEU0kwX1NFTF9WT1BfTElUICAgICAgICAgICAgICAgICgxIDw8IDYp CisjZGVmaW5lIERTSTFfU0VMX1ZPUF9MSVQgICAgICAgICAgICAgICAgKDEgPDwgOSkKKworI2Rl ZmluZSBEU0lfVkVSU0lPTgkJCTB4MDAKKyNkZWZpbmUgRFNJX1BXUl9VUAkJCTB4MDQKKyNkZWZp bmUgUkVTRVQJCQkJMAorI2RlZmluZSBQT1dFUlVQCQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9D TEtNR1JfQ0ZHCQkJMHgwOAorI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikJCSgoKGRpdikg JiAweGZmKSA8PCA4KQorI2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihkaXYpCSgoKGRpdikg JiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9EUElfVkNJRAkJCTB4MGMKKyNkZWZpbmUgRFBJ X1ZJRCh2aWQpCQkJKCgodmlkKSAmIDB4MykgPDwgMCkKKworI2RlZmluZSBEU0lfRFBJX0NPTE9S X0NPRElORwkJMHgxMAorI2RlZmluZSBFTjE4X0xPT1NFTFkJCQlCSVQoOCkKKyNkZWZpbmUgRFBJ X0NPTE9SX0NPRElOR18xNkJJVF8xCTB4MAorI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklU XzIJMHgxCisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMwkweDIKKyNkZWZpbmUgRFBJ X0NPTE9SX0NPRElOR18xOEJJVF8xCTB4MworI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklU XzIJMHg0CisjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMjRCSVQJCTB4NQorCisjZGVmaW5lIERT SV9EUElfQ0ZHX1BPTAkJCTB4MTQKKyNkZWZpbmUgQ09MT1JNX0FDVElWRV9MT1cJCUJJVCg0KQor I2RlZmluZSBTSFVURF9BQ1RJVkVfTE9XCQlCSVQoMykKKyNkZWZpbmUgSFNZTkNfQUNUSVZFX0xP VwkJQklUKDIpCisjZGVmaW5lIFZTWU5DX0FDVElWRV9MT1cJCUJJVCgxKQorI2RlZmluZSBEQVRB RU5fQUNUSVZFX0xPVwkJQklUKDApCisKKyNkZWZpbmUgRFNJX0RQSV9MUF9DTURfVElNCQkweDE4 CisjZGVmaW5lIE9VVFZBQ1RfTFBDTURfVElNRShwKQkJKCgocCkgJiAweGZmKSA8PCAxNikKKyNk ZWZpbmUgSU5WQUNUX0xQQ01EX1RJTUUocCkJCSgocCkgJiAweGZmKQorCisjZGVmaW5lIERTSV9E QklfQ0ZHCQkJMHgyMAorI2RlZmluZSBEU0lfREJJX0NNRFNJWkUJCQkweDI4CisKKyNkZWZpbmUg RFNJX1BDS0hETF9DRkcJCQkweDJjCisjZGVmaW5lIEVOX0NSQ19SWAkJCUJJVCg0KQorI2RlZmlu ZSBFTl9FQ0NfUlgJCQlCSVQoMykKKyNkZWZpbmUgRU5fQlRBCQkJCUJJVCgyKQorI2RlZmluZSBF Tl9FT1RQX1JYCQkJQklUKDEpCisjZGVmaW5lIEVOX0VPVFBfVFgJCQlCSVQoMCkKKworI2RlZmlu ZSBEU0lfTU9ERV9DRkcJCQkweDM0CisjZGVmaW5lIEVOQUJMRV9WSURFT19NT0RFCQkwCisjZGVm aW5lIEVOQUJMRV9DTURfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIERTSV9WSURfTU9ERV9DRkcJ CTB4MzgKKyNkZWZpbmUgRlJBTUVfQlRBX0FDSwkJCUJJVCgxNCkKKyNkZWZpbmUgRU5BQkxFX0xP V19QT1dFUgkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUl9NQVNLCQkoMHgz ZiA8PCA4KQorI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUX1NZTkNfUFVMU0VTCQkweDIKKyNk ZWZpbmUgVklEX01PREVfVFlQRV9NQVNLCQkJMHgzCisKKyNkZWZpbmUgRFNJX1ZJRF9QS1RfU0la RQkJMHgzYworI2RlZmluZSBWSURfUEtUX1NJWkUocCkJCQkoKChwKSAmIDB4M2ZmZikgPDwgMCkK KyNkZWZpbmUgVklEX1BLVF9NQVhfU0laRQkJMHgzZmZmCisKKyNkZWZpbmUgRFNJX1ZJRF9IU0Ff VElNRQkJMHg0OAorI2RlZmluZSBEU0lfVklEX0hCUF9USU1FCQkweDRjCisjZGVmaW5lIERTSV9W SURfSExJTkVfVElNRQkJMHg1MAorI2RlZmluZSBEU0lfVklEX1ZTQV9MSU5FUwkJMHg1NAorI2Rl ZmluZSBEU0lfVklEX1ZCUF9MSU5FUwkJMHg1OAorI2RlZmluZSBEU0lfVklEX1ZGUF9MSU5FUwkJ MHg1YworI2RlZmluZSBEU0lfVklEX1ZBQ1RJVkVfTElORVMJCTB4NjAKKyNkZWZpbmUgRFNJX0NN RF9NT0RFX0NGRwkJMHg2OAorI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVfTFAJCUJJVCgyNCkKKyNk ZWZpbmUgRENTX0xXX1RYX0xQCQkJQklUKDE5KQorI2RlZmluZSBEQ1NfU1JfMFBfVFhfTFAJCQlC SVQoMTgpCisjZGVmaW5lIERDU19TV18xUF9UWF9MUAkJCUJJVCgxNykKKyNkZWZpbmUgRENTX1NX XzBQX1RYX0xQCQkJQklUKDE2KQorI2RlZmluZSBHRU5fTFdfVFhfTFAJCQlCSVQoMTQpCisjZGVm aW5lIEdFTl9TUl8yUF9UWF9MUAkJCUJJVCgxMykKKyNkZWZpbmUgR0VOX1NSXzFQX1RYX0xQCQkJ QklUKDEyKQorI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAJCQlCSVQoMTEpCisjZGVmaW5lIEdFTl9T V18yUF9UWF9MUAkJCUJJVCgxMCkKKyNkZWZpbmUgR0VOX1NXXzFQX1RYX0xQCQkJQklUKDkpCisj ZGVmaW5lIEdFTl9TV18wUF9UWF9MUAkJCUJJVCg4KQorI2RlZmluZSBFTl9BQ0tfUlFTVAkJCUJJ VCgxKQorI2RlZmluZSBFTl9URUFSX0ZYCQkJQklUKDApCisKKyNkZWZpbmUgQ01EX01PREVfQUxM X0xQCQkJKE1BWF9SRF9QS1RfU0laRV9MUCB8IFwKKwkJCQkJIERDU19MV19UWF9MUCB8IFwKKwkJ CQkJIERDU19TUl8wUF9UWF9MUCB8IFwKKwkJCQkJIERDU19TV18xUF9UWF9MUCB8IFwKKwkJCQkJ IERDU19TV18wUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9MV19UWF9MUCB8IFwKKwkJCQkJIEdFTl9T Ul8yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8xUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TUl8w UF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18yUF9UWF9MUCB8IFwKKwkJCQkJIEdFTl9TV18xUF9U WF9MUCB8IFwKKwkJCQkJIEdFTl9TV18wUF9UWF9MUCkKKworI2RlZmluZSBEU0lfR0VOX0hEUgkJ CTB4NmMKKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpCQkJKCgoZGF0YSkgJiAweGZmZmYpIDw8IDgp CisjZGVmaW5lIEdFTl9IREFUQV9NQVNLCQkJKDB4ZmZmZiA8PCA4KQorI2RlZmluZSBHRU5fSFRZ UEUodHlwZSkJCQkoKCh0eXBlKSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIEdFTl9IVFlQRV9NQVNL CQkJMHhmZgorCisjZGVmaW5lIERTSV9HRU5fUExEX0RBVEEJCTB4NzAKKworI2RlZmluZSBEU0lf Q01EX1BLVF9TVEFUVVMJCTB4NzQKKyNkZWZpbmUgR0VOX0NNRF9FTVBUWQkJCUJJVCgwKQorI2Rl ZmluZSBHRU5fQ01EX0ZVTEwJCQlCSVQoMSkKKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZCQkJQklU KDIpCisjZGVmaW5lIEdFTl9QTERfV19GVUxMCQkJQklUKDMpCisjZGVmaW5lIEdFTl9QTERfUl9F TVBUWQkJCUJJVCg0KQorI2RlZmluZSBHRU5fUExEX1JfRlVMTAkJCUJJVCg1KQorI2RlZmluZSBH RU5fUkRfQ01EX0JVU1kJCQlCSVQoNikKKworI2RlZmluZSBEU0lfVE9fQ05UX0NGRwkJCTB4NzgK KyNkZWZpbmUgSFNUWF9UT19DTlQocCkJCQkoKChwKSAmIDB4ZmZmZikgPDwgMTYpCisjZGVmaW5l IExQUlhfVE9fQ05UKHApCQkJKChwKSAmIDB4ZmZmZikKKworI2RlZmluZSBEU0lfQlRBX1RPX0NO VAkJCTB4OGMKKworI2RlZmluZSBEU0lfTFBDTEtfQ1RSTAkJCTB4OTQKKyNkZWZpbmUgQVVUT19D TEtMQU5FX0NUUkwJCUJJVCgxKQorI2RlZmluZSBQSFlfVFhSRVFVRVNUQ0xLSFMJCUJJVCgwKQor CisjZGVmaW5lIERTSV9QSFlfVE1SX0xQQ0xLX0NGRwkJMHg5OAorI2RlZmluZSBQSFlfQ0xLSFMy TFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweDNmZikgPDwgMTYpCisjZGVmaW5lIFBIWV9DTEtM UDJIU19USU1FKGxiY2MpCQkoKGxiY2MpICYgMHgzZmYpCisKKyNkZWZpbmUgRFNJX1BIWV9UTVJf Q0ZHCQkJMHg5YworI2RlZmluZSBQSFlfSFMyTFBfVElNRShsYmNjKQkJKCgobGJjYykgJiAweGZm KSA8PCAyNCkKKyNkZWZpbmUgUEhZX0xQMkhTX1RJTUUobGJjYykJCSgoKGxiY2MpICYgMHhmZikg PDwgMTYpCisjZGVmaW5lIE1BWF9SRF9USU1FKGxiY2MpCQkoKGxiY2MpICYgMHg3ZmZmKQorCisj ZGVmaW5lIERTSV9QSFlfUlNUWgkJCTB4YTAKKyNkZWZpbmUgUEhZX0RJU0ZPUkNFUExMCQkJMAor I2RlZmluZSBQSFlfRU5GT1JDRVBMTAkJCUJJVCgzKQorI2RlZmluZSBQSFlfRElTQUJMRUNMSwkJ CTAKKyNkZWZpbmUgUEhZX0VOQUJMRUNMSwkJCUJJVCgyKQorI2RlZmluZSBQSFlfUlNUWgkJCTAK KyNkZWZpbmUgUEhZX1VOUlNUWgkJCUJJVCgxKQorI2RlZmluZSBQSFlfU0hVVERPV05aCQkJMAor I2RlZmluZSBQSFlfVU5TSFVURE9XTloJCQlCSVQoMCkKKworI2RlZmluZSBEU0lfUEhZX0lGX0NG RwkJCTB4YTQKKyNkZWZpbmUgTl9MQU5FUyhuKQkJCSgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQor I2RlZmluZSBQSFlfU1RPUF9XQUlUX1RJTUUoY3ljbGUpCSgoKGN5Y2xlKSAmIDB4ZmYpIDw8IDgp CisKKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMJCQkweGIwCisjZGVmaW5lIExPQ0sJCQkJQklUKDAp CisjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUJCUJJVCgyKQorCisjZGVmaW5lIERTSV9QSFlf VFNUX0NUUkwwCQkweGI0CisjZGVmaW5lIFBIWV9URVNUQ0xLCQkJQklUKDEpCisjZGVmaW5lIFBI WV9VTlRFU1RDTEsJCQkwCisjZGVmaW5lIFBIWV9URVNUQ0xSCQkJQklUKDApCisjZGVmaW5lIFBI WV9VTlRFU1RDTFIJCQkwCisKKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDEJCTB4YjgKKyNkZWZp bmUgUEhZX1RFU1RFTgkJCUJJVCgxNikKKyNkZWZpbmUgUEhZX1VOVEVTVEVOCQkJMAorI2RlZmlu ZSBQSFlfVEVTVERPVVQobikJCQkoKChuKSAmIDB4ZmYpIDw8IDgpCisjZGVmaW5lIFBIWV9URVNU RElOKG4pCQkJKCgobikgJiAweGZmKSA8PCAwKQorCisjZGVmaW5lIERTSV9JTlRfU1QwCQkJMHhi YworI2RlZmluZSBEU0lfSU5UX1NUMQkJCTB4YzAKKyNkZWZpbmUgRFNJX0lOVF9NU0swCQkJMHhj NAorI2RlZmluZSBEU0lfSU5UX01TSzEJCQkweGM4CisKKyNkZWZpbmUgUEhZX1NUQVRVU19USU1F T1VUX1VTCQkxMDAwMAorI2RlZmluZSBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTCTIwMDAwCisK KyNkZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKKyNkZWZpbmUgVkNPX1JBTkdFX0NPTl9T RUwodmFsKQkoKCh2YWwpICYgMHg3KSA8PCAzKQorI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ERUZB VUxUCSgweDAgPDwgMSkKKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwgMSkKKyNk ZWZpbmUgVkNPX0lOX0NBUF9DT05fSElHSAkoMHgyIDw8IDEpCisjZGVmaW5lIFJFRl9CSUFTX0NV Ul9TRUwJQklUKDApCisKKyNkZWZpbmUgQ1BfQ1VSUkVOVF8zTUEJCUJJVCgzKQorI2RlZmluZSBD UF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTFBGX1BST0dSQU1fRU4JCUJJVCg2KQorI2Rl ZmluZSBMUEZfUkVTSVNUT1JTXzIwX0tPSE0JMAorCisjZGVmaW5lIEhTRlJFUVJBTkdFX1NFTCh2 YWwpCSgoKHZhbCkgJiAweDNmKSA8PCAxKQorCisjZGVmaW5lIElOUFVUX0RJVklERVIodmFsKQko KHZhbCAtIDEpICYgMHg3ZikKKyNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKKyNkZWZpbmUgSElH SF9QUk9HUkFNX0VOCQlCSVQoNykKKyNkZWZpbmUgTE9PUF9ESVZfTE9XX1NFTCh2YWwpCSgodmFs IC0gMSkgJiAweDFmKQorI2RlZmluZSBMT09QX0RJVl9ISUdIX1NFTCh2YWwpCSgoKHZhbCAtIDEp ID4+IDUpICYgMHgxZikKKyNkZWZpbmUgUExMX0xPT1BfRElWX0VOCQlCSVQoNSkKKyNkZWZpbmUg UExMX0lOUFVUX0RJVl9FTglCSVQoNCkKKworI2RlZmluZSBQT1dFUl9DT05UUk9MCQlCSVQoNikK KyNkZWZpbmUgSU5URVJOQUxfUkVHX0NVUlJFTlQJQklUKDMpCisjZGVmaW5lIEJJQVNfQkxPQ0tf T04JCUJJVCgyKQorI2RlZmluZSBCQU5ER0FQX09OCQlCSVQoMCkKKworI2RlZmluZSBURVJfUkVT SVNUT1JfSElHSAlCSVQoNykKKyNkZWZpbmUJVEVSX1JFU0lTVE9SX0xPVwkwCisjZGVmaW5lIExF VkVMX1NISUZURVJTX09OCUJJVCg2KQorI2RlZmluZSBURVJfQ0FMX0RPTkUJCUJJVCg1KQorI2Rl ZmluZSBTRVRSRF9NQVgJCSgweDcgPDwgMikKKyNkZWZpbmUgUE9XRVJfTUFOQUdFCQlCSVQoMSkK KyNkZWZpbmUgVEVSX1JFU0lTVE9SU19PTglCSVQoMCkKKworI2RlZmluZSBCSUFTRVhUUl9TRUwo dmFsKQkoKHZhbCkgJiAweDcpCisjZGVmaW5lIEJBTkRHQVBfU0VMKHZhbCkJKCh2YWwpICYgMHg3 KQorI2RlZmluZSBUTFBfUFJPR1JBTV9FTgkJQklUKDcpCisjZGVmaW5lIFRIU19QUkVfUFJPR1JB TV9FTglCSVQoNykKKyNkZWZpbmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQoNikKKworZW51bSB7 CisJQkFOREdBUF85N18wNywKKwlCQU5ER0FQXzk4XzA1LAorCUJBTkRHQVBfOTlfMDIsCisJQkFO REdBUF8xMDBfMDAsCisJQkFOREdBUF85M18xNywKKwlCQU5ER0FQXzk0XzE1LAorCUJBTkRHQVBf OTVfMTIsCisJQkFOREdBUF85Nl8xMCwKK307CisKK2VudW0geworCUJJQVNFWFRSXzg3XzEsCisJ QklBU0VYVFJfOTFfNSwKKwlCSUFTRVhUUl85NV85LAorCUJJQVNFWFRSXzEwMCwKKwlCSUFTRVhU Ul8xMDVfOTQsCisJQklBU0VYVFJfMTExXzg4LAorCUJJQVNFWFRSXzExOF84LAorCUJJQVNFWFRS XzEyN183LAorfTsKKworc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSB7CisJdW5zaWduZWQg aW50IG1heF9kYXRhX2xhbmVzOworCWVudW0gZHJtX21vZGVfc3RhdHVzICgqbW9kZV92YWxpZCko c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpOworfTsKKworc3RydWN0IGR3X21pcGlfZHNpIHsKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3Ry dWN0IG1pcGlfZHNpX2hvc3QgZHNpX2hvc3Q7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJ c3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZWdtYXAgKmdyZl9yZWdtYXA7CisJdm9pZCBf X2lvbWVtICpiYXNlOworCisJc3RydWN0IGNsayAqcGxscmVmX2NsazsKKwlzdHJ1Y3QgY2xrICpw Y2xrOworCisJdW5zaWduZWQgaW50IGxhbmVfbWJwczsgLyogcGVyIGxhbmUgKi8KKwl1MzIgY2hh bm5lbDsKKwl1MzIgbGFuZXM7CisJdTMyIGZvcm1hdDsKKwl1MTYgaW5wdXRfZGl2OworCXUxNiBm ZWVkYmFja19kaXY7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwljb25zdCBz dHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YTsKKworfTsKKworZW51bSBkd19taXBp X2RzaV9tb2RlIHsKKwlEV19NSVBJX0RTSV9DTURfTU9ERSwKKwlEV19NSVBJX0RTSV9WSURfTU9E RSwKK307CisKK3N0cnVjdCBkcGh5X3BsbF90ZXN0ZGluX21hcCB7CisJdW5zaWduZWQgaW50IG1h eF9tYnBzOworCXU4IHRlc3RkaW47Cit9OworCisvKiBUaGUgdGFibGUgaXMgYmFzZWQgb24gMjdN SHogRFBIWSBwbGwgcmVmZXJlbmNlIGNsb2NrLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBkcGh5 X3BsbF90ZXN0ZGluX21hcCBkcHRkaW5fbWFwW10gPSB7CisJeyAgOTAsIDB4MDB9LCB7IDEwMCwg MHgxMH0sIHsgMTEwLCAweDIwfSwgeyAxMzAsIDB4MDF9LAorCXsgMTQwLCAweDExfSwgeyAxNTAs IDB4MjF9LCB7IDE3MCwgMHgwMn0sIHsgMTgwLCAweDEyfSwKKwl7IDIwMCwgMHgyMn0sIHsgMjIw LCAweDAzfSwgeyAyNDAsIDB4MTN9LCB7IDI1MCwgMHgyM30sCisJeyAyNzAsIDB4MDR9LCB7IDMw MCwgMHgxNH0sIHsgMzMwLCAweDA1fSwgeyAzNjAsIDB4MTV9LAorCXsgNDAwLCAweDI1fSwgeyA0 NTAsIDB4MDZ9LCB7IDUwMCwgMHgxNn0sIHsgNTUwLCAweDA3fSwKKwl7IDYwMCwgMHgxN30sIHsg NjUwLCAweDA4fSwgeyA3MDAsIDB4MTh9LCB7IDc1MCwgMHgwOX0sCisJeyA4MDAsIDB4MTl9LCB7 IDg1MCwgMHgyOX0sIHsgOTAwLCAweDM5fSwgeyA5NTAsIDB4MGF9LAorCXsxMDAwLCAweDFhfSwg ezEwNTAsIDB4MmF9LCB7MTEwMCwgMHgzYX0sIHsxMTUwLCAweDBifSwKKwl7MTIwMCwgMHgxYn0s IHsxMjUwLCAweDJifSwgezEzMDAsIDB4M2J9LCB7MTM1MCwgMHgwY30sCisJezE0MDAsIDB4MWN9 LCB7MTQ1MCwgMHgyY30sIHsxNTAwLCAweDNjfQorfTsKKworc3RhdGljIGludCBtYXhfbWJwc190 b190ZXN0ZGluKHVuc2lnbmVkIGludCBtYXhfbWJwcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGRwdGRpbl9tYXApOyBpKyspCisJCWlmIChkcHRkaW5fbWFwW2ld Lm1heF9tYnBzID4gbWF4X21icHMpCisJCQlyZXR1cm4gZHB0ZGluX21hcFtpXS50ZXN0ZGluOwor CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBUaGUgY29udHJvbGxlciBzaG91bGQgZ2Vu ZXJhdGUgMiBmcmFtZXMgYmVmb3JlCisgKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwuCisgKi8K K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoc3RydWN0IGR3X21p cGlfZHNpICpkc2kpCit7CisJaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7CisKKwlyZWZyZXNoID0g ZHJtX21vZGVfdnJlZnJlc2goZHNpLT5tb2RlKTsKKwl0d29fZnJhbWVzID0gRElWX1JPVU5EX1VQ KE1TRUNfUEVSX1NFQywgcmVmcmVzaCkgKiAyOworCW1zbGVlcCh0d29fZnJhbWVzKTsKK30KKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmhvc3RfdG9fZHNpKHN0cnVjdCBtaXBp X2RzaV9ob3N0ICpob3N0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaG9zdCwgc3RydWN0IGR3 X21pcGlfZHNpLCBkc2lfaG9zdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR3X21pcGlf ZHNpICpjb25fdG9fZHNpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb24pCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihjb24sIHN0cnVjdCBkd19taXBpX2RzaSwgY29ubmVjdG9yKTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmVuY29kZXJfdG9fZHNpKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGVuY29kZXIsIHN0cnVj dCBkd19taXBpX2RzaSwgZW5jb2Rlcik7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZHNpX3dyaXRl KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2 YWwsIGRzaS0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9yZWFkKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChkc2ktPmJh c2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9waHlfd3JpdGUoc3RydWN0 IGR3X21pcGlfZHNpICpkc2ksIHU4IHRlc3RfY29kZSwKKwkJCQkgdTggdGVzdF9kYXRhKQorewor CS8qCisJICogV2l0aCB0aGUgZmFsbGluZyBlZGdlIG9uIFRFU1RDTEssIHRoZSBURVNURElOWzc6 MF0gc2lnbmFsIGNvbnRlbnQKKwkgKiBpcyBsYXRjaGVkIGludGVybmFsbHkgYXMgdGhlIGN1cnJl bnQgdGVzdCBjb2RlLiBUZXN0IGRhdGEgaXMKKwkgKiBwcm9ncmFtbWVkIGludGVybmFsbHkgYnkg cmlzaW5nIGVkZ2Ugb24gVEVTVENMSy4KKwkgKi8KKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RT VF9DVFJMMCwgUEhZX1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKKworCWRzaV93cml0ZShkc2ks IERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVEVTVEVOIHwgUEhZX1RFU1RET1VUKDApIHwKKwkJCQkJ ICBQSFlfVEVTVERJTih0ZXN0X2NvZGUpKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNU X0NUUkwwLCBQSFlfVU5URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7CisKKwlkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX1RTVF9DVFJMMSwgUEhZX1VOVEVTVEVOIHwgUEhZX1RFU1RET1VUKDApIHwKKwkJ CQkJICBQSFlfVEVTVERJTih0ZXN0X2RhdGEpKTsKKworCWRzaV93cml0ZShkc2ksIERTSV9QSFlf VFNUX0NUUkwwLCBQSFlfVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOworfQorCitzdGF0aWMgaW50 IGR3X21pcGlfZHNpX3BoeV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWludCBy ZXQsIHRlc3RkaW4sIHZjbywgdmFsOworCisJdmNvID0gKGRzaS0+bGFuZV9tYnBzIDwgMjAwKSA/ IDAgOiAoZHNpLT5sYW5lX21icHMgKyAxMDApIC8gMjAwOworCisJdGVzdGRpbiA9IG1heF9tYnBz X3RvX3Rlc3RkaW4oZHNpLT5sYW5lX21icHMpOworCWlmICh0ZXN0ZGluIDwgMCkgeworCQlkZXZf ZXJyKGRzaS0+ZGV2LAorCQkJImZhaWxlZCB0byBnZXQgdGVzdGRpbiBmb3IgJWRtYnBzIGxhbmUg Y2xvY2tcbiIsCisJCQlkc2ktPmxhbmVfbWJwcyk7CisJCXJldHVybiB0ZXN0ZGluOworCX0KKwor CWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFBPV0VSVVApOworCisJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgMHgxMCwgQllQQVNTX1ZDT19SQU5HRSB8CisJCQkJCSBWQ09fUkFOR0VfQ09O X1NFTCh2Y28pIHwKKwkJCQkJIFZDT19JTl9DQVBfQ09OX0xPVyB8CisJCQkJCSBSRUZfQklBU19D VVJfU0VMKTsKKworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTEsIENQX0NVUlJFTlRf M01BKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDEyLCBDUF9QUk9HUkFNX0VOIHwg TFBGX1BST0dSQU1fRU4gfAorCQkJCQkgTFBGX1JFU0lTVE9SU18yMF9LT0hNKTsKKworCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NDQsIEhTRlJFUVJBTkdFX1NFTCh0ZXN0ZGluKSk7CisK Kwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE5LCBQTExfTE9PUF9ESVZfRU4gfCBQTExf SU5QVVRfRElWX0VOKTsKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDE3LCBJTlBVVF9E SVZJREVSKGRzaS0+aW5wdXRfZGl2KSk7CisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgx OCwgTE9PUF9ESVZfTE9XX1NFTChkc2ktPmZlZWRiYWNrX2RpdikgfAorCQkJCQkgTE9XX1BST0dS QU1fRU4pOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MTgsIExPT1BfRElWX0hJR0hf U0VMKGRzaS0+ZmVlZGJhY2tfZGl2KSB8CisJCQkJCSBISUdIX1BST0dSQU1fRU4pOworCisJZHdf bWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHgyMCwgUE9XRVJfQ09OVFJPTCB8IElOVEVSTkFMX1JF R19DVVJSRU5UIHwKKwkJCQkJIEJJQVNfQkxPQ0tfT04gfCBCQU5ER0FQX09OKTsKKworCWR3X21p cGlfZHNpX3BoeV93cml0ZShkc2ksIDB4MjEsIFRFUl9SRVNJU1RPUl9MT1cgfCBURVJfQ0FMX0RP TkUgfAorCQkJCQkgU0VUUkRfTUFYIHwgVEVSX1JFU0lTVE9SU19PTik7CisJZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgMHgyMSwgVEVSX1JFU0lTVE9SX0hJR0ggfCBMRVZFTF9TSElGVEVSU19P TiB8CisJCQkJCSBTRVRSRF9NQVggfCBQT1dFUl9NQU5BR0UgfAorCQkJCQkgVEVSX1JFU0lTVE9S U19PTik7CisKKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCAweDIyLCBMT1dfUFJPR1JBTV9F TiB8CisJCQkJCSBCSUFTRVhUUl9TRUwoQklBU0VYVFJfMTI3XzcpKTsKKwlkd19taXBpX2RzaV9w aHlfd3JpdGUoZHNpLCAweDIyLCBISUdIX1BST0dSQU1fRU4gfAorCQkJCQkgQkFOREdBUF9TRUwo QkFOREdBUF85Nl8xMCkpOworCisJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgMHg3MCwgVExQ X1BST0dSQU1fRU4gfCAweGYpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4NzEsIFRI U19QUkVfUFJPR1JBTV9FTiB8IDB4NTUpOworCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIDB4 NzIsIFRIU19aRVJPX1BST0dSQU1fRU4gfCAweGEpOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1BI WV9SU1RaLCBQSFlfRU5GT1JDRVBMTCB8IFBIWV9FTkFCTEVDTEsgfAorCQkJCSAgICAgUEhZX1VO UlNUWiB8IFBIWV9VTlNIVVRET1dOWik7CisKKworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChy ZWFkbCwgZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCisJCQkJIHZhbCwgdmFsICYgTE9DSywg MTAwMCwgUEhZX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdhaXQgZm9yIHBoeSBsb2NrIHN0YXRlXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFz ZSArIERTSV9QSFlfU1RBVFVTLAorCQkJCSB2YWwsIHZhbCAmIFNUT1BfU1RBVEVfQ0xLX0xBTkUs IDEwMDAsCisJCQkJIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2Vycihkc2ktPmRldiwKKwkJCSJmYWlsZWQgdG8gd2FpdCBmb3IgcGh5IGNsayBsYW5lIHN0 b3Agc3RhdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgZHdfbWlwaV9kc2lfZ2V0X2xhbmVfYnBzKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp KQoreworCXVuc2lnbmVkIGludCBicHAsIGksIHByZTsKKwl1bnNpZ25lZCBsb25nIG1wY2xrLCBw bGxyZWYsIHRtcDsKKwl1bnNpZ25lZCBpbnQgbSA9IDEsIG4gPSAxLCB0YXJnZXRfbWJwcyA9IDEw MDA7CisJdW5zaWduZWQgaW50IG1heF9tYnBzID0gZHB0ZGluX21hcFtBUlJBWV9TSVpFKGRwdGRp bl9tYXApIC0gMV0ubWF4X21icHM7CisKKwlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9f YnBwKGRzaS0+Zm9ybWF0KTsKKwlpZiAoYnBwIDwgMCkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAi ZmFpbGVkIHRvIGdldCBicHAgZm9yIHBpeGVsIGZvcm1hdCAlZFxuIiwKKwkJCWRzaS0+Zm9ybWF0 KTsKKwkJcmV0dXJuIGJwcDsKKwl9CisKKwltcGNsayA9IERJVl9ST1VORF9VUChkc2ktPm1vZGUt PmNsb2NrLCBNU0VDX1BFUl9TRUMpOworCWlmIChtcGNsaykgeworCQkvKiB0YWtlIDEgLyAwLjks IHNpbmNlIG1icHMgbXVzdCBiaWcgdGhhbiBiYW5kd2lkdGggb2YgUkdCICovCisJCXRtcCA9IG1w Y2xrICogKGJwcCAvIGRzaS0+bGFuZXMpICogMTAgLyA5OworCQlpZiAodG1wIDwgbWF4X21icHMp CisJCQl0YXJnZXRfbWJwcyA9IHRtcDsKKwkJZWxzZQorCQkJZGV2X2Vycihkc2ktPmRldiwgIkRQ SFkgY2xvY2sgZnJlcXVlbmN5IGlzIG91dCBvZiByYW5nZVxuIik7CisJfQorCisJcGxscmVmID0g RElWX1JPVU5EX1VQKGNsa19nZXRfcmF0ZShkc2ktPnBsbHJlZl9jbGspLCBVU0VDX1BFUl9TRUMp OworCXRtcCA9IHBsbHJlZjsKKworCWZvciAoaSA9IDE7IGkgPCA2OyBpKyspIHsKKwkJcHJlID0g cGxscmVmIC8gaTsKKwkJaWYgKCh0bXAgPiAodGFyZ2V0X21icHMgJSBwcmUpKSAmJiAodGFyZ2V0 X21icHMgLyBwcmUgPCA1MTIpKSB7CisJCQl0bXAgPSB0YXJnZXRfbWJwcyAlIHByZTsKKwkJCW4g PSBpOworCQkJbSA9IHRhcmdldF9tYnBzIC8gcHJlOworCQl9CisJCWlmICh0bXAgPT0gMCkKKwkJ CWJyZWFrOworCX0KKworCWRzaS0+bGFuZV9tYnBzID0gcGxscmVmIC8gbiAqIG07CisJZHNpLT5p bnB1dF9kaXYgPSBuOworCWRzaS0+ZmVlZGJhY2tfZGl2ID0gbTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2hvc3RfYXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0 ICpob3N0LAorCQkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOworCisJaWYgKGRldmljZS0+ bGFuZXMgPiBkc2ktPnBkYXRhLT5tYXhfZGF0YV9sYW5lcykgeworCQlkZXZfZXJyKGRzaS0+ZGV2 LCAidGhlIG51bWJlciBvZiBkYXRhIGxhbmVzKCV1KSBpcyB0b28gbWFueVxuIiwKKwkJCQlkZXZp Y2UtPmxhbmVzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCEoZGV2aWNlLT5tb2Rl X2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkgfHwKKwkgICAgIShkZXZpY2UtPm1v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpKSB7CisJCWRldl9lcnIo ZHNpLT5kZXYsICJkZXZpY2UgbW9kZSBpcyB1bnN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOworCWRzaS0+Y2hhbm5lbCA9 IGRldmljZS0+Y2hhbm5lbDsKKwlkc2ktPmZvcm1hdCA9IGRldmljZS0+Zm9ybWF0OworCWRzaS0+ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChkZXZpY2UtPmRldi5vZl9ub2RlKTsKKwlpZiAoZHNp LT5wYW5lbCkKKwkJcmV0dXJuIGRybV9wYW5lbF9hdHRhY2goZHNpLT5wYW5lbCwgJmRzaS0+Y29u bmVjdG9yKTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNp X2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAorCQkJCSAgIHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhv c3RfdG9fZHNpKGhvc3QpOworCisJZHJtX3BhbmVsX2RldGFjaChkc2ktPnBhbmVsKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKHN0 cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgdmFsKQoreworCWludCByZXQ7CisKKwlyZXQgPSBy ZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywK KwkJCQkgdmFsLCAhKHZhbCAmIEdFTl9DTURfRlVMTCksIDEwMDAsCisJCQkJIENNRF9QS1RfU1RB VFVTX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJm YWlsZWQgdG8gZ2V0IGF2YWlsYWJsZSBjb21tYW5kIEZJRk9cbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCWRzaV93cml0ZShkc2ksIERTSV9HRU5fSERSLCB2YWwpOworCisJcmV0ID0gcmVhZHhf cG9sbF90aW1lb3V0KHJlYWRsLCBkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCisJCQkJ IHZhbCwgdmFsICYgKEdFTl9DTURfRU1QVFkgfCBHRU5fUExEX1dfRU1QVFkpLAorCQkJCSAxMDAw LCBDTURfUEtUX1NUQVRVU19USU1FT1VUX1VTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgRklGT1xuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX3No b3J0X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJY29uc3QgdTE2ICp0eF9idWYgPSBtc2ctPnR4X2J1 ZjsKKwl1MzIgdmFsID0gR0VOX0hEQVRBKCp0eF9idWYpIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7 CisKKwlpZiAobXNnLT50eF9sZW4gPiAyKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJ0b28gbG9u ZyB0eCBidWYgbGVuZ3RoICV6dSBmb3Igc2hvcnQgd3JpdGVcbiIsCisJCQltc2ctPnR4X2xlbik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hk cl93cml0ZShkc2ksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX2xvbmdf d3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG1p cGlfZHNpX21zZyAqbXNnKQoreworCWNvbnN0IHUzMiAqdHhfYnVmID0gbXNnLT50eF9idWY7CisJ aW50IGxlbiA9IG1zZy0+dHhfbGVuLCBwbGRfZGF0YV9ieXRlcyA9IHNpemVvZigqdHhfYnVmKSwg cmV0OworCXUzMiB2YWwgPSBHRU5fSERBVEEobXNnLT50eF9sZW4pIHwgR0VOX0hUWVBFKG1zZy0+ dHlwZSk7CisJdTMyIHJlbWFpbmRlciA9IDA7CisKKwlpZiAobXNnLT50eF9sZW4gPCAzKSB7CisJ CWRldl9lcnIoZHNpLT5kZXYsICJ3cm9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3IgbG9uZyB3cml0 ZVxuIiwKKwkJCW1zZy0+dHhfbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2hpbGUg KERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgeworCQlpZiAobGVuIDwgcGxkX2Rh dGFfYnl0ZXMpIHsKKwkJCW1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7CisJCQlkc2lf d3JpdGUoZHNpLCBEU0lfR0VOX1BMRF9EQVRBLCByZW1haW5kZXIpOworCQkJbGVuID0gMDsKKwkJ fSBlbHNlIHsKKwkJCWRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsICp0eF9idWYpOwor CQkJdHhfYnVmKys7CisJCQlsZW4gLT0gcGxkX2RhdGFfYnl0ZXM7CisJCX0KKworCQlyZXQgPSBy ZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsIGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywK KwkJCQkJIHZhbCwgISh2YWwgJiBHRU5fUExEX1dfRlVMTCksIDEwMDAsCisJCQkJCSBDTURfUEtU X1NUQVRVU19USU1FT1VUX1VTKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZHNpLT5k ZXYsCisJCQkJImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7 CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIGR3X21pcGlfZHNpX2dlbl9wa3Rf aGRyX3dyaXRlKGRzaSwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgZHdfbWlwaV9kc2lfaG9z dF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkJIGNvbnN0IHN0cnVj dCBtaXBpX2RzaV9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3Rf dG9fZHNpKGhvc3QpOworCWludCByZXQ7CisKKwlzd2l0Y2ggKG1zZy0+dHlwZSkgeworCWNhc2Ug TUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOgorCWNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRF X1BBUkFNOgorCWNhc2UgTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9TSVpFOgor CQlyZXQgPSBkd19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOworCQlicmVhazsK KwljYXNlIE1JUElfRFNJX0RDU19MT05HX1dSSVRFOgorCQlyZXQgPSBkd19taXBpX2RzaV9kY3Nf bG9uZ193cml0ZShkc2ksIG1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHNp LT5kZXYsICJ1bnN1cHBvcnRlZCBtZXNzYWdlIHR5cGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOwor CX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfaG9z dF9vcHMgZHdfbWlwaV9kc2lfaG9zdF9vcHMgPSB7CisJLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hv c3RfYXR0YWNoLAorCS5kZXRhY2ggPSBkd19taXBpX2RzaV9ob3N0X2RldGFjaCwKKwkudHJhbnNm ZXIgPSBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVyLAorfTsKKworc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfdmlkZW9fbW9kZV9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7CisJdTMy IHZhbDsKKworCXZhbCA9IFZJRF9NT0RFX1RZUEVfQlVSU1RfU1lOQ19QVUxTRVMgfCBFTkFCTEVf TE9XX1BPV0VSOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywgdmFsKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2ksCisJCQkJIGVudW0gZHdfbWlwaV9kc2lfbW9kZSBtb2RlKQoreworCWlmIChtb2RlID09IERX X01JUElfRFNJX0NNRF9NT0RFKSB7CisJCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VU KTsKKwkJZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUpOworCQlk c2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKwl9IGVsc2UgeworCQlkc2lfd3Jp dGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7CisJCWRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NG RywgRU5BQkxFX1ZJREVPX01PREUpOworCQlkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhk c2kpOworCQlkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQT1dFUlVQKTsKKwl9Cit9CisKK3N0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX2Rpc2FibGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCit7 CisJZHNpX3dyaXRlKGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOworCWRzaV93cml0ZShkc2ksIERT SV9QSFlfUlNUWiwgUEhZX1JTVFopOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9pbml0 KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAs IFJFU0VUKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9ESVNGT1JDRVBMTCB8 IFBIWV9ESVNBQkxFQ0xLCisJCSAgfCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOworCWRzaV93 cml0ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEwKSB8CisJCSAgVFhf RVNDX0NMS19ESVZJRFNJT04oNykpOworCWRzaV93cml0ZShkc2ksIERTSV9MUENMS19DVFJMLCBQ SFlfVFhSRVFVRVNUQ0xLSFMpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGlfY29u ZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAorCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlKQoreworCXUzMiB2YWwgPSAwLCBjb2xvciA9IDA7CisKKwlzd2l0Y2ggKGRzaS0+ Zm9ybWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQljb2xvciA9IERQSV9DT0xP Ul9DT0RJTkdfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJ Y29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIgfCBFTjE4X0xPT1NFTFk7CisJCWJyZWFr OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6CisJCWNvbG9yID0gRFBJX0NPTE9S X0NPRElOR18xOEJJVF8xOworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJ CWNvbG9yID0gRFBJX0NPTE9SX0NPRElOR18xNkJJVF8xOworCQlicmVhazsKKwl9CisKKwlpZiAo IShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKSkKKwkJdmFsIHw9IFZTWU5DX0FD VElWRV9MT1c7CisJaWYgKCEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykpCisJ CXZhbCB8PSBIU1lOQ19BQ1RJVkVfTE9XOworCisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9WQ0lE LCBEUElfVklEKGRzaS0+Y2hhbm5lbCkpOworCWRzaV93cml0ZShkc2ksIERTSV9EUElfQ09MT1Jf Q09ESU5HLCBjb2xvcik7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9MLCB2YWwpOwor CWRzaV93cml0ZShkc2ksIERTSV9EUElfTFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9USU1FKDQp CisJCSAgfCBJTlZBQ1RfTFBDTURfVElNRSg0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlk c2lfd3JpdGUoZHNpLCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5fRUNDX1JYIHwgRU5f QlRBKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fcGFja2V0X2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCWRzaV93cml0ZShkc2ksIERTSV9WSURfUEtUX1NJWkUsIFZJRF9QS1RfU0la RShtb2RlLT5oZGlzcGxheSkpOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5k X21vZGVfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV93cml0ZShkc2ks IERTSV9UT19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8IExQUlhfVE9fQ05UKDEwMDApKTsK Kwlkc2lfd3JpdGUoZHNpLCBEU0lfQlRBX1RPX0NOVCwgMHhkMDApOworCWRzaV93cml0ZShkc2ks IERTSV9DTURfTU9ERV9DRkcsIENNRF9NT0RFX0FMTF9MUCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJ X01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUpOworfQorCisvKiBHZXQgbGFuZSBieXRlIGNsb2Nr IGN5Y2xlcy4gKi8KK3N0YXRpYyB1MzIgZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKKwkJCQkJICAgdTMyIGhjb21wb25lbnQpCit7CisJdTMy IGZyYWMsIGxiY2M7CisKKwlsYmNjID0gaGNvbXBvbmVudCAqIGRzaS0+bGFuZV9tYnBzICogTVNF Q19QRVJfU0VDIC8gODsKKworCWZyYWMgPSBsYmNjICUgZHNpLT5tb2RlLT5jbG9jazsKKwlsYmNj ID0gbGJjYyAvIGRzaS0+bW9kZS0+Y2xvY2s7CisJaWYgKGZyYWMpCisJCWxiY2MrKzsKKworCXJl dHVybiBsYmNjOworfQorCitzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9saW5lX3RpbWVyX2NvbmZp ZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgaHRvdGFsLCBoc2EsIGhicCwgbGJj YzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCWh0b3Rh bCA9IG1vZGUtPmh0b3RhbDsKKwloc2EgPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19z dGFydDsKKwloYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7CisKKwlsYmNjID0g ZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIGh0b3RhbCk7CisJZHNpX3dyaXRl KGRzaSwgRFNJX1ZJRF9ITElORV9USU1FLCBsYmNjKTsKKworCWxiY2MgPSBkd19taXBpX2RzaV9n ZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgaHNhKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hT QV9USU1FLCBsYmNjKTsKKworCWxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNj KGRzaSwgaGJwKTsKKwlkc2lfd3JpdGUoZHNpLCBEU0lfVklEX0hCUF9USU1FLCBsYmNjKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwl1MzIgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGRzaS0+bW9kZTsKKworCXZhY3RpdmUgPSBtb2Rl LT52ZGlzcGxheTsKKwl2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsK Kwl2ZnAgPSBtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5OworCXZicCA9IG1vZGUt PnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZDsKKworCWRzaV93cml0ZShkc2ksIERTSV9WSURfVkFD VElWRV9MSU5FUywgdmFjdGl2ZSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WU0FfTElORVMs IHZzYSk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WRlBfTElORVMsIHZmcCk7CisJZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9WQlBfTElORVMsIHZicCk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2RwaHlfdGltaW5nX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RNUl9DRkcsIFBIWV9IUzJMUF9USU1FKDB4NDApCisJCSAg fCBQSFlfTFAySFNfVElNRSgweDQwKSB8IE1BWF9SRF9USU1FKDEwMDAwKSk7CisKKwlkc2lfd3Jp dGUoZHNpLCBEU0lfUEhZX1RNUl9MUENMS19DRkcsIFBIWV9DTEtIUzJMUF9USU1FKDB4NDApCisJ CSAgfCBQSFlfQ0xLTFAySFNfVElNRSgweDQwKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlk c2lfd3JpdGUoZHNpLCBEU0lfUEhZX0lGX0NGRywgUEhZX1NUT1BfV0FJVF9USU1FKDB4MjApIHwK KwkJICBOX0xBTkVTKGRzaS0+bGFuZXMpKTsKK30KKworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lf Y2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQoreworCWRzaV9yZWFkKGRzaSwgRFNJ X0lOVF9TVDApOworCWRzaV9yZWFkKGRzaSwgRFNJX0lOVF9TVDEpOworCWRzaV93cml0ZShkc2ks IERTSV9JTlRfTVNLMCwgMCk7CisJZHNpX3dyaXRlKGRzaSwgRFNJX0lOVF9NU0sxLCAwKTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGVuY29kZXJfdG9fZHNpKGVuY29kZXIpOworCWludCByZXQ7CisKKwlk c2ktPm1vZGUgPSBhZGp1c3RlZF9tb2RlOworCisJcmV0ID0gZHdfbWlwaV9kc2lfZ2V0X2xhbmVf YnBzKGRzaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybjsKKworCWlmIChjbGtfcHJlcGFyZV9l bmFibGUoZHNpLT5wY2xrKSkgeworCQlkZXZfZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBl bmFibGUgcGNsa1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lf aW5pdChkc2kpOworCWR3X21pcGlfZHNpX2RwaV9jb25maWcoZHNpLCBtb2RlKTsKKwlkd19taXBp X2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92aWRlb19tb2Rl X2NvbmZpZyhkc2kpOworCWR3X21pcGlfZHNpX3ZpZGVvX3BhY2tldF9jb25maWcoZHNpLCBtb2Rl KTsKKwlkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lf bGluZV90aW1lcl9jb25maWcoZHNpKTsKKwlkd19taXBpX2RzaV92ZXJ0aWNhbF90aW1pbmdfY29u ZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRzaSk7CisJZHdfbWlw aV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKGRzaSk7CisJZHdfbWlwaV9kc2lfY2xlYXJfZXJy KGRzaSk7CisJaWYgKGRybV9wYW5lbF9wcmVwYXJlKGRzaS0+cGFuZWwpKSB7CisJCWRldl9lcnIo ZHNpLT5kZXYsICJmYWlsZWQgdG8gcHJlcGFyZSBwYW5lbFxuIik7CisJCXJldHVybjsKKwl9CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cit9CisKK3N0YXRpYyB2b2lkIGR3X21p cGlfZHNpX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJ c3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBlbmNvZGVyX3RvX2RzaShlbmNvZGVyKTsKKworCWRy bV9wYW5lbF9kaXNhYmxlKGRzaS0+cGFuZWwpOworCisJaWYgKGNsa19wcmVwYXJlX2VuYWJsZShk c2ktPnBjbGspKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICIlczogRmFpbGVkIHRvIGVuYWJsZSBw Y2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkd19taXBpX2RzaV9zZXRfbW9k ZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlkcm1fcGFuZWxfdW5wcmVwYXJlKGRzaS0+ cGFuZWwpOworCWR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgRFdfTUlQSV9EU0lfVklEX01PREUp OworCisJLyoKKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgdGhlIHBlcmlwaGVy YWwgd2lsbCBiZSBkcml2ZW4KKwkgKiBub3JtYWxseSB3aGVuIHRoZSBkaXNwbGF5IGlzIGVuYWJs ZWQgYWdhaW4gbGF0ZXIuCisJICovCisJbXNsZWVwKDEyMCk7CisKKwlkd19taXBpX2RzaV9zZXRf bW9kZShkc2ksIERXX01JUElfRFNJX0NNRF9NT0RFKTsKKwlkd19taXBpX2RzaV9kaXNhYmxlKGRz aSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7Cit9CisKK3N0YXRpYyBib29s IGR3X21pcGlfZHNpX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsCisJCQkJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZW5jb2Rlcl90b19k c2koZW5jb2Rlcik7CisJaW50IG11eCAgPSByb2NrY2hpcF9kcm1fZW5jb2Rlcl9nZXRfbXV4X2lk KGRzaS0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwl1MzIgaW50ZXJmYWNlX3BpeF9mbXQ7CisJ dTMyIHZhbDsKKworCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wY2xrKSkgeworCQlkZXZf ZXJyKGRzaS0+ZGV2LCAiJXM6IEZhaWxlZCB0byBlbmFibGUgcGNsa1xuIiwgX19mdW5jX18pOwor CQlyZXR1cm47CisJfQorCisJZHdfbWlwaV9kc2lfcGh5X2luaXQoZHNpKTsKKwlkd19taXBpX2Rz aV93YWl0X2Zvcl90d29fZnJhbWVzKGRzaSk7CisKKwlkd19taXBpX2RzaV9zZXRfbW9kZShkc2ks IERXX01JUElfRFNJX1ZJRF9NT0RFKTsKKwlkcm1fcGFuZWxfZW5hYmxlKGRzaS0+cGFuZWwpOwor CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7CisKKwlzd2l0Y2ggKGRzaS0+Zm9y bWF0KSB7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4OgorCQlpbnRlcmZhY2VfcGl4X2ZtdCA9 IFJPQ0tDSElQX09VVF9NT0RFX1A4ODg7CisJCWJyZWFrOworCWNhc2UgTUlQSV9EU0lfRk1UX1JH QjY2NjoKKwkJaW50ZXJmYWNlX3BpeF9mbXQgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNjY2OworCQli cmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCWludGVyZmFjZV9waXhfZm10ID0g Uk9DS0NISVBfT1VUX01PREVfUDU2NTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigx KTsKKwkJcmV0dXJuOworCX0KKworCXJvY2tjaGlwX2RybV9jcnRjX21vZGVfY29uZmlnKGVuY29k ZXItPmNydGMsIERSTV9NT0RFX0NPTk5FQ1RPUl9EU0ksCisJCQkJICAgICAgaW50ZXJmYWNlX3Bp eF9mbXQpOworCisJaWYgKG11eCkKKwkJdmFsID0gRFNJMF9TRUxfVk9QX0xJVCB8IChEU0kwX1NF TF9WT1BfTElUIDw8IDE2KTsKKwllbHNlCisJCXZhbCA9IERTSTBfU0VMX1ZPUF9MSVQgPDwgMTY7 CisKKwlyZWdtYXBfd3JpdGUoZHNpLT5ncmZfcmVnbWFwLCBHUkZfU09DX0NPTjYsIHZhbCk7CisJ ZGV2X2RiZyhkc2ktPmRldiwgInZvcCAlcyBvdXRwdXQgdG8gZHNpMFxuIiwgKG11eCkgPyAiTElU IiA6ICJCSUciKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MK K2R3X21pcGlfZHNpX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVwID0gZHdf bWlwaV9kc2lfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5jb21taXQgPSBkd19taXBpX2RzaV9lbmNv ZGVyX2NvbW1pdCwKKwkubW9kZV9zZXQgPSBkd19taXBpX2RzaV9lbmNvZGVyX21vZGVfc2V0LAor CS5kaXNhYmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0 cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBkd19taXBpX2RzaV9lbmNvZGVyX2Z1bmNzID0geworCS5k ZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQgZHdfbWlwaV9k c2lfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQor eworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gY29uX3RvX2RzaShjb25uZWN0b3IpOworCisJ cmV0dXJuIGRybV9wYW5lbF9nZXRfbW9kZXMoZHNpLT5wYW5lbCk7Cit9CisKK3N0YXRpYyBlbnVt IGRybV9tb2RlX3N0YXR1cyBkd19taXBpX2RzaV9tb2RlX3ZhbGlkKAorCQkJCQlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKK3sKKwlzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsK KworCWVudW0gZHJtX21vZGVfc3RhdHVzIG1vZGVfc3RhdHVzID0gTU9ERV9PSzsKKworCWlmIChk c2ktPnBkYXRhLT5tb2RlX3ZhbGlkKQorCQltb2RlX3N0YXR1cyA9IGRzaS0+cGRhdGEtPm1vZGVf dmFsaWQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiBtb2RlX3N0YXR1czsKK30KKworc3Rh dGljIHN0cnVjdCBkcm1fZW5jb2RlciAqZHdfbWlwaV9kc2lfY29ubmVjdG9yX2Jlc3RfZW5jb2Rl cigKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGNvbl90b19kc2koY29ubmVjdG9yKTsKKworCXJldHVybiAmZHNpLT5l bmNvZGVyOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIGR3 X21pcGlfZHNpX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IGR3X21p cGlfZHNpX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSBkd19taXBpX2RzaV9t b2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBkd19taXBpX2RzaV9jb25uZWN0b3JfYmVzdF9l bmNvZGVyLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2R3X21pcGlf ZHNpX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQor eworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQg ZHdfbWlwaV9kc2lfZHJtX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5lY3Rvcik7CisJZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9mdW5jcyBkd19taXBpX2RzaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBk cm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9i ZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSBkd19taXBpX2RzaV9kZXRlY3Qs CisJLmRlc3Ryb3kgPSBkd19taXBpX2RzaV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCit9OworCitz dGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHdfbWlwaV9kc2lfYXRvbWljX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKKwkuZHBtcyA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1z LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVz LAorCS5kZXRlY3QgPSBkd19taXBpX2RzaV9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkd19taXBpX2Rz aV9kcm1fY29ubmVjdG9yX2Rlc3Ryb3ksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBp bnQgZHdfbWlwaV9kc2lfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkgICAg ICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIgPSAmZHNpLT5lbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSAm ZHNpLT5jb25uZWN0b3I7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZHNpLT5kZXY7CisJaW50IHJl dDsKKworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0 Y3MoZHJtLAorCQkJCQkJCSAgICAgZGV2LT5vZl9ub2RlKTsKKwkvKgorCSAqIElmIHdlIGZhaWxl ZCB0byBmaW5kIHRoZSBDUlRDKHMpIHdoaWNoIHRoaXMgZW5jb2RlciBpcworCSAqIHN1cHBvc2Vk IHRvIGJlIGNvbm5lY3RlZCB0bywgaXQncyBiZWNhdXNlIHRoZSBDUlRDIGhhcworCSAqIG5vdCBi ZWVuIHJlZ2lzdGVyZWQgeWV0LiAgRGVmZXIgcHJvYmluZywgYW5kIGhvcGUgdGhhdAorCSAqIHRo ZSByZXF1aXJlZCBDUlRDIGlzIGFkZGVkIGxhdGVyLgorCSAqLworCWlmIChlbmNvZGVyLT5wb3Nz aWJsZV9jcnRjcyA9PSAwKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCWRybV9lbmNvZGVy X2hlbHBlcl9hZGQoJmRzaS0+ZW5jb2RlciwKKwkJCSAgICAgICAmZHdfbWlwaV9kc2lfZW5jb2Rl cl9oZWxwZXJfZnVuY3MpOworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZHJtLCAmZHNpLT5lbmNv ZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX0RT SSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGVu Y29kZXIgd2l0aCBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3Jf aGVscGVyX2FkZChjb25uZWN0b3IsCisJCQkmZHdfbWlwaV9kc2lfY29ubmVjdG9yX2hlbHBlcl9m dW5jcyk7CisKKwlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkcm0sIERSSVZFUl9BVE9NSUMp KQorCQlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uZWN0b3IsCisJCQkJICAgJmR3 X21pcGlfZHNpX2F0b21pY19jb25uZWN0b3JfZnVuY3MsCisJCQkJICAgRFJNX01PREVfQ09OTkVD VE9SX0RTSSk7CisJZWxzZQorCQlkcm1fY29ubmVjdG9yX2luaXQoZHJtLCAmZHNpLT5jb25uZWN0 b3IsCisJCQkJICAgJmR3X21pcGlfZHNpX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgICBEUk1fTU9E RV9DT05ORUNUT1JfRFNJKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihj b25uZWN0b3IsIGVuY29kZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm9ja2No aXBfbWlwaV9wYXJzZV9kdChzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wID0gZHNpLT5kZXYtPm9mX25vZGU7CisKKwlkc2ktPmdyZl9yZWdtYXAgPSBz eXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAicm9ja2NoaXAsZ3JmIik7CisJaWYg KElTX0VSUihkc2ktPmdyZl9yZWdtYXApKSB7CisJCWRldl9lcnIoZHNpLT5kZXYsICJVbmFibGUg dG8gZ2V0IHJvY2tjaGlwLGdyZlxuIik7CisJCXJldHVybiBQVFJfRVJSKGRzaS0+Z3JmX3JlZ21h cCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cyBy azMyODhfbWlwaV9kc2lfbW9kZV92YWxpZCgKKwkJCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyoKKwkg KiBUaGUgVklEX1BLVF9TSVpFIGZpZWxkIGluIHRoZSBEU0lfVklEX1BLVF9DRkcKKwkgKiByZWdp c3RlciBpcyAxMS1iaXQuCisJICovCisJaWYgKG1vZGUtPmhkaXNwbGF5ID4gMHg3ZmYpCisJCXJl dHVybiBNT0RFX0JBRF9IVkFMVUU7CisKKwkvKgorCSAqIFRoZSBWX0FDVElWRV9MSU5FUyBmaWVs ZCBpbiB0aGUgRFNJX1ZUSU1JTkdfQ0ZHCisJICogcmVnaXN0ZXIgaXMgMTEtYml0LgorCSAqLwor CWlmIChtb2RlLT52ZGlzcGxheSA+IDB4N2ZmKQorCQlyZXR1cm4gTU9ERV9CQURfVlZBTFVFOwor CisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9k YXRhIHJrMzI4OF9taXBpX2RzaV9kcnZfZGF0YSA9IHsKKwkubWF4X2RhdGFfbGFuZXMgPSA0LAor CS5tb2RlX3ZhbGlkID0gcmszMjg4X21pcGlfZHNpX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9kdF9pZHNbXSA9IHsKKwl7CisJ IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1taXBpLWRzaSIsCisJIC5kYXRhID0gJnJr MzI4OF9taXBpX2RzaV9kcnZfZGF0YSwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3X21pcGlfZHNpX2R0X2lkcyk7CisKK3N0YXRpYyBpbnQg ZHdfbWlwaV9kc2lfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rl ciwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpv Zl9pZCA9CisJCQlvZl9tYXRjaF9kZXZpY2UoZHdfbWlwaV9kc2lfZHRfaWRzLCBkZXYpOworCWNv bnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBkYXRhID0gb2ZfaWQtPmRhdGE7CisJ c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkYXRhOworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNp OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkc2kgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOworCWlmICghZHNpKQorCQlyZXR1cm4g LUVOT01FTTsKKworCWRzaS0+ZGV2ID0gZGV2OworCWRzaS0+cGRhdGEgPSBwZGF0YTsKKworCXJl dCA9IHJvY2tjaGlwX21pcGlfcGFyc2VfZHQoZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkc2ktPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoZHNpLT5iYXNlKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZHNpLT5iYXNlKTsKKworCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJyZWYiKTsKKwlpZiAoSVNfRVJSKGRzaS0+cGxscmVmX2NsaykpIHsKKwkJcmV0ID0g UFRSX0VSUihkc2ktPnBsbHJlZl9jbGspOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQg cGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZHNpLT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKKwlpZiAoSVNfRVJSKGRzaS0+ cGNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkc2ktPnBjbGspOworCQlkZXZfZXJyKGRldiwgIlVu YWJsZSB0byBnZXQgcGNsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGxscmVmX2Nsayk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxlIHBsbHJlZl9jbGtcbiIsIF9fZnVuY19f KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkd19taXBpX2RzaV9yZWdpc3Rlcihkcm0s IGRzaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBt aXBpX2RzaTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX3BsbHJlZjsKKwl9CisKKwlkZXZfc2V0 X2RydmRhdGEoZGV2LCBkc2kpOworCisJZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lf aG9zdF9vcHM7CisJZHNpLT5kc2lfaG9zdC5kZXYgPSBkZXY7CisJcmV0dXJuIG1pcGlfZHNpX2hv c3RfcmVnaXN0ZXIoJmRzaS0+ZHNpX2hvc3QpOworCitlcnJfcGxscmVmOgorCWNsa19kaXNhYmxl X3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Ug Km1hc3RlciwKKwl2b2lkICpkYXRhKQoreworCXN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gZGV2 X2dldF9kcnZkYXRhKGRldik7CisKKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0ZXIoJmRzaS0+ZHNp X2hvc3QpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgZHdfbWlwaV9kc2lfb3BzID0geworCS5i aW5kCT0gZHdfbWlwaV9kc2lfYmluZCwKKwkudW5iaW5kCT0gZHdfbWlwaV9kc2lfdW5iaW5kLAor fTsKKworc3RhdGljIGludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZkd19taXBpX2Rz aV9vcHMpOworfQorCitzdGF0aWMgaW50IGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmR3X21pcGlf ZHNpX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGR3X21pcGlfZHNpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gZHdfbWlwaV9kc2lfcHJvYmUsCisJ LnJlbW92ZQkJPSBkd19taXBpX2RzaV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vZl9tYXRj aF90YWJsZSA9IGR3X21pcGlfZHNpX2R0X2lkcywKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9 LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdfbWlwaV9kc2lfZHJpdmVyKTsKKworTU9E VUxFX0RFU0NSSVBUSU9OKCJST0NLQ0hJUCBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVy Iik7CitNT0RVTEVfQVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9O QU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1f dm9wLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5jCmluZGV4 IGQ5ZWM3ODAuLmUxNzViNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fdm9wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuYwpAQCAtMTIwOSw2ICsxMjA5LDkgQEAgc3RhdGljIGludCB2b3BfY3J0Y19tb2Rl X3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERN SUE6CiAJCVZPUF9DVFJMX1NFVCh2b3AsIGhkbWlfZW4sIDEpOwogCQlicmVhazsKKwljYXNlIERS TV9NT0RFX0NPTk5FQ1RPUl9EU0k6CisJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlfZW4sIDEpOwor CQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoInVuc3VwcG9ydCBjb25uZWN0b3JfdHlw ZVslZF1cbiIsCiAJCQkgIHZvcC0+Y29ubmVjdG9yX3R5cGUpOwotLSAKMi42LjMKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==