From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vince Hsu Subject: [PATCH 2/2] volt: add support for GK20A Date: Fri, 28 Nov 2014 16:28:49 +0800 Message-ID: <1417163329-19427-2-git-send-email-vinceh@nvidia.com> References: <1417163329-19427-1-git-send-email-vinceh@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1417163329-19427-1-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: bskeggs-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, martin.peres-GANU6spQydw@public.gmane.org Cc: linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-tegra@vger.kernel.org VGhlIHZvbHRhZ2UgdmFsdWUgYXJlIGNhbGN1bGF0ZWQgYnkgdGhlIGhhcmR3YXJlIGNoYXJhY3Rl cml6ZWQKcmVzdWx0LgoKU2lnbmVkLW9mZi1ieTogVmluY2UgSHN1IDx2aW5jZWhAbnZpZGlhLmNv bT4KLS0tCkhpLAoKVGhlIHRlZ3JhX3NrdV9pbmZvIG5lZWRzIHRvIGJlIGV4cG9ydGVkIGZyb20g VGVncmEgZnVzZSBkcml2ZXIuCkkndmUgc2VudCB0aGUgcGF0Y2ggdG8gdGhlIGxpbnV4LXRlZ3Jh IG1haWxpbmcgbGlzdC4gSnVzdCBGWUkuCgpUaGFua3MsClZpbmNlCgogZHJtL0tidWlsZCAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBkcm0vY29yZS9zdWJkZXYvdm9sdC9nazIwYS5jIHwgICAx ICsKIG52a20vZW5naW5lL2RldmljZS9udmUwLmMgICAgfCAgIDEgKwogbnZrbS9pbmNsdWRlL3N1 YmRldi92b2x0LmggICB8ICAgMSArCiBudmttL3N1YmRldi9jbG9jay9nazIwYS5jICAgIHwgIDE1 ICsrKysKIG52a20vc3ViZGV2L3ZvbHQvZ2syMGEuYyAgICAgfCAyMDIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyMjEgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTIwMDAwIGRybS9jb3JlL3N1YmRldi92b2x0L2drMjBhLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBudmttL3N1YmRldi92b2x0L2drMjBhLmMKCmRpZmYgLS1naXQg YS9kcm0vS2J1aWxkIGIvZHJtL0tidWlsZAppbmRleCA3MjhiYzViNjZiMjkuLjdjNDllNjY1NTA2 NiAxMDA2NDQKLS0tIGEvZHJtL0tidWlsZAorKysgYi9kcm0vS2J1aWxkCkBAIC0yMjUsNiArMjI1 LDcgQEAgbm91dmVhdS15ICs9IGNvcmUvc3ViZGV2L3ZtL252YzAubwogbm91dmVhdS15ICs9IGNv cmUvc3ViZGV2L3ZvbHQvYmFzZS5vCiBub3V2ZWF1LXkgKz0gY29yZS9zdWJkZXYvdm9sdC9ncGlv Lm8KIG5vdXZlYXUteSArPSBjb3JlL3N1YmRldi92b2x0L252NDAubworbm91dmVhdS15ICs9IGNv cmUvc3ViZGV2L3ZvbHQvZ2syMGEubwogCiBub3V2ZWF1LXkgKz0gY29yZS9lbmdpbmUvZmFsY29u Lm8KIG5vdXZlYXUteSArPSBjb3JlL2VuZ2luZS94dGVuc2EubwpkaWZmIC0tZ2l0IGEvZHJtL2Nv cmUvc3ViZGV2L3ZvbHQvZ2syMGEuYyBiL2RybS9jb3JlL3N1YmRldi92b2x0L2drMjBhLmMKbmV3 IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwLi4yODk0ZWIxZWRlMTMKLS0tIC9k ZXYvbnVsbAorKysgYi9kcm0vY29yZS9zdWJkZXYvdm9sdC9nazIwYS5jCkBAIC0wLDAgKzEgQEAK Ky4uLy4uLy4uLy4uL252a20vc3ViZGV2L3ZvbHQvZ2syMGEuYwpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL252a20vZW5naW5lL2RldmljZS9udmUwLmMgYi9udmttL2Vu Z2luZS9kZXZpY2UvbnZlMC5jCmluZGV4IGIxYjJlNDg0ZWNmYS4uNjc0ZGExZjA5NWIyIDEwMDY0 NAotLS0gYS9udmttL2VuZ2luZS9kZXZpY2UvbnZlMC5jCisrKyBiL252a20vZW5naW5lL2Rldmlj ZS9udmUwLmMKQEAgLTE3OSw2ICsxNzksNyBAQCBudmUwX2lkZW50aWZ5KHN0cnVjdCBub3V2ZWF1 X2RldmljZSAqZGV2aWNlKQogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfR1IgICAgIF0g PSAgZ2syMGFfZ3JhcGhfb2NsYXNzOwogCQlkZXZpY2UtPm9jbGFzc1tOVkRFVl9FTkdJTkVfQ09Q WTIgIF0gPSAmbnZlMF9jb3B5Ml9vY2xhc3M7CiAJCWRldmljZS0+b2NsYXNzW05WREVWX0VOR0lO RV9QRVJGTU9OXSA9ICZudmUwX3BlcmZtb25fb2NsYXNzOworCQlkZXZpY2UtPm9jbGFzc1tOVkRF Vl9TVUJERVZfVk9MVCAgIF0gPSAmZ2syMGFfdm9sdF9vY2xhc3M7CiAJCWJyZWFrOwogCWNhc2Ug MHhmMDoKIAkJZGV2aWNlLT5jbmFtZSA9ICJHSzExMCI7CmRpZmYgLS1naXQgYS9udmttL2luY2x1 ZGUvc3ViZGV2L3ZvbHQuaCBiL252a20vaW5jbHVkZS9zdWJkZXYvdm9sdC5oCmluZGV4IDgyMGI2 MmZmZDc1Yi4uNjdkYjVlNTg4ODBkIDEwMDY0NAotLS0gYS9udmttL2luY2x1ZGUvc3ViZGV2L3Zv bHQuaAorKysgYi9udmttL2luY2x1ZGUvc3ViZGV2L3ZvbHQuaApAQCAtNTIsNiArNTIsNyBAQCBp bnQgIF9ub3V2ZWF1X3ZvbHRfaW5pdChzdHJ1Y3Qgbm91dmVhdV9vYmplY3QgKik7CiAjZGVmaW5l IF9ub3V2ZWF1X3ZvbHRfZmluaSBfbm91dmVhdV9zdWJkZXZfZmluaQogCiBleHRlcm4gc3RydWN0 IG5vdXZlYXVfb2NsYXNzIG52NDBfdm9sdF9vY2xhc3M7CitleHRlcm4gc3RydWN0IG5vdXZlYXVf b2NsYXNzIGdrMjBhX3ZvbHRfb2NsYXNzOwogCiBpbnQgbm91dmVhdV92b2x0Z3Bpb19pbml0KHN0 cnVjdCBub3V2ZWF1X3ZvbHQgKik7CiBpbnQgbm91dmVhdV92b2x0Z3Bpb19nZXQoc3RydWN0IG5v dXZlYXVfdm9sdCAqKTsKZGlmZiAtLWdpdCBhL252a20vc3ViZGV2L2Nsb2NrL2drMjBhLmMgYi9u dmttL3N1YmRldi9jbG9jay9nazIwYS5jCmluZGV4IDgyYWJiZWEyYmUxMi4uZmI0ZmFkMzc0YmRk IDEwMDY0NAotLS0gYS9udmttL3N1YmRldi9jbG9jay9nazIwYS5jCisrKyBiL252a20vc3ViZGV2 L2Nsb2NrL2drMjBhLmMKQEAgLTQ3MCw3NiArNDcwLDkxIEBAIGdrMjBhX3BzdGF0ZXNbXSA9IHsK IAl7CiAJCS5iYXNlID0gewogCQkJLmRvbWFpbltudl9jbGtfc3JjX2dwY10gPSA3MjAwMCwKKwkJ CS52b2x0YWdlID0gMCwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252 X2Nsa19zcmNfZ3BjXSA9IDEwODAwMCwKKwkJCS52b2x0YWdlID0gMSwKIAkJfSwKIAl9LAogCXsK IAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDE4MDAwMCwKKwkJCS52 b2x0YWdlID0gMiwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Ns a19zcmNfZ3BjXSA9IDI1MjAwMCwKKwkJCS52b2x0YWdlID0gMywKIAkJfSwKIAl9LAogCXsKIAkJ LmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDMyNDAwMCwKKwkJCS52b2x0 YWdlID0gNCwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19z cmNfZ3BjXSA9IDM5NjAwMCwKKwkJCS52b2x0YWdlID0gNSwKIAkJfSwKIAl9LAogCXsKIAkJLmJh c2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDQ2ODAwMCwKKwkJCS52b2x0YWdl ID0gNiwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNf Z3BjXSA9IDU0MDAwMCwKKwkJCS52b2x0YWdlID0gNywKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2Ug PSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDYxMjAwMCwKKwkJCS52b2x0YWdlID0g OCwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3Bj XSA9IDY0ODAwMCwKKwkJCS52b2x0YWdlID0gOSwKIAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7 CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9IDY4NDAwMCwKKwkJCS52b2x0YWdlID0gMTAs CiAJCX0sCiAJfSwKIAl7CiAJCS5iYXNlID0gewogCQkJLmRvbWFpbltudl9jbGtfc3JjX2dwY10g PSA3MDgwMDAsCisJCQkudm9sdGFnZSA9IDExLAogCQl9LAogCX0sCiAJewogCQkuYmFzZSA9IHsK IAkJCS5kb21haW5bbnZfY2xrX3NyY19ncGNdID0gNzU2MDAwLAorCQkJLnZvbHRhZ2UgPSAxMiwK IAkJfSwKIAl9LAogCXsKIAkJLmJhc2UgPSB7CiAJCQkuZG9tYWluW252X2Nsa19zcmNfZ3BjXSA9 IDgwNDAwMCwKKwkJCS52b2x0YWdlID0gMTMsCiAJCX0sCiAJfSwKIAl7CiAJCS5iYXNlID0gewog CQkJLmRvbWFpbltudl9jbGtfc3JjX2dwY10gPSA4NTIwMDAsCisJCQkudm9sdGFnZSA9IDE0LAog CQl9LAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvbnZrbS9zdWJkZXYvdm9sdC9nazIwYS5jIGIvbnZr bS9zdWJkZXYvdm9sdC9nazIwYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uODczODU5NjZlNjdmCi0tLSAvZGV2L251bGwKKysrIGIvbnZrbS9zdWJkZXYvdm9sdC9n azIwYS5jCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBOVklE SUEgQ09SUE9SQVRJT04uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisj aW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1 bWVyLmg+CisjaW5jbHVkZSA8c29jL3RlZ3JhL2Z1c2UuaD4KKworI2luY2x1ZGUgPG5vdXZlYXVf cGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxzdWJkZXYvdm9sdC5oPgorCitzdHJ1Y3QgY3ZiX2NvZWYg eworCWludCBjMDsKKwlpbnQgYzE7CisJaW50IGMyOworCWludCBjMzsKKwlpbnQgYzQ7CisJaW50 IGM1OworfTsKKworc3RydWN0IGdrMjBhX3ZvbHRfcHJpdiB7CisJc3RydWN0IG5vdXZlYXVfdm9s dCBiYXNlOworCXN0cnVjdCByZWd1bGF0b3IgKnZkZDsKK307CisKK2NvbnN0IHN0cnVjdCBjdmJf Y29lZiBnazIwYV9jdmJfY29lZltdID0geworCS8qIE1IeiwgICAgICAgIGMwLCAgICAgYzEsICAg YzIsICAgIGMzLCAgICAgYzQsICAgYzUgKi8KKwkvKiAgNzIgKi8geyAxMjA5ODg2LCAtMzY0Njgs ICA1MTUsICAgNDE3LCAtMTMxMjMsICAyMDN9LAorCS8qIDEwOCAqLyB7IDExMzA4MDQsIC0yNzY1 OSwgIDI5NiwgICAyOTgsIC0xMDgzNCwgIDIyMX0sCisJLyogMTgwICovIHsgMTE2Mjg3MSwgLTI3 MTEwLCAgMjQ3LCAgIDIzOCwgLTEwNjgxLCAgMjY4fSwKKwkvKiAyNTIgKi8geyAxMjIwNDU4LCAt Mjg2NTQsICAyNDcsICAgMTc5LCAtMTAzNzYsICAyOTh9LAorCS8qIDMyNCAqLyB7IDEyODA5NTMs IC0zMDIwNCwgIDI0NywgICAxMTksICAtOTc2NiwgIDMwNH0sCisJLyogMzk2ICovIHsgMTM0NDU0 NywgLTMxNzc3LCAgMjQ3LCAgIDExOSwgIC04NTQ1LCAgMjkyfSwKKwkvKiA0NjggKi8geyAxNDIw MTY4LCAtMzQyMjcsICAyNjksICAgIDYwLCAgLTcxNzIsICAyNTZ9LAorCS8qIDU0MCAqLyB7IDE0 OTA3NTcsIC0zNTk1NSwgIDI3NCwgICAgNjAsICAtNTE4OCwgIDE5N30sCisJLyogNjEyICovIHsg MTU5OTExMiwgLTQyNTgzLCAgMzk4LCAgICAgMCwgIC0xODMxLCAgMTE5fSwKKwkvKiA2NDggKi8g eyAxMzY2OTg2LCAtMTY0NTksIC0yNzQsICAgICAwLCAgLTMyMDQsICAgNzJ9LAorCS8qIDY4NCAq LyB7IDEzOTE4ODQsIC0xNzA3OCwgLTI3NCwgICAtNjAsICAtMTUyNiwgICAzMH0sCisJLyogNzA4 ICovIHsgMTQxNTUyMiwgLTE3NDk3LCAtMjc0LCAgIC02MCwgICAtNDU4LCAgICAwfSwKKwkvKiA3 NTYgKi8geyAxNDY0MDYxLCAtMTgzMzEsIC0yNzQsICAtMTE5LCAgIDE4MzEsICAtNzJ9LAorCS8q IDgwNCAqLyB7IDE1MjQyMjUsIC0yMDA2NCwgLTI1NCwgIC0xMTksICAgNDI3MiwgLTE1NX0sCisJ LyogODUyICovIHsgMTYwODQxOCwgLTIxNjQzLCAtMjY5LCAgICAgMCwgICAgNzYzLCAgLTQ4fSwK K307CisKKy8qKgorICogY3ZiX212ID0gKChjMiAqIHNwZWVkbyAvIHNfc2NhbGUgKyBjMSkgKiBz cGVlZG8gLyBzX3NjYWxlICsgYzApCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitnazIwYV92b2x0 X2dldF9jdmJfdm9sdGFnZShpbnQgc3BlZWRvLCBpbnQgc19zY2FsZSwKKwkJY29uc3Qgc3RydWN0 IGN2Yl9jb2VmICpjb2VmKQoreworCWludCBtdjsKKworCW12ID0gRElWX1JPVU5EX0NMT1NFU1Qo Y29lZi0+YzIgKiBzcGVlZG8sIHNfc2NhbGUpOworCW12ID0gRElWX1JPVU5EX0NMT1NFU1QoKG12 ICsgY29lZi0+YzEpICogc3BlZWRvLCBzX3NjYWxlKSArIGNvZWYtPmMwOworCXJldHVybiBtdjsK K30KKworLyoqCisgKiBjdmJfdF9tdiA9CisgKiAoKGMyICogc3BlZWRvIC8gc19zY2FsZSArIGMx KSAqIHNwZWVkbyAvIHNfc2NhbGUgKyBjMCkgKworICogKChjMyAqIHNwZWVkbyAvIHNfc2NhbGUg KyBjNCArIGM1ICogVCAvIHRfc2NhbGUpICogVCAvIHRfc2NhbGUpCisgKi8KK3N0YXRpYyBpbmxp bmUgaW50CitnazIwYV92b2x0X2dldF9jdmJfdF92b2x0YWdlKGludCBzcGVlZG8sIGludCB0ZW1w LCBpbnQgc19zY2FsZSwgaW50IHRfc2NhbGUsCisJCWNvbnN0IHN0cnVjdCBjdmJfY29lZiAqY29l ZikKK3sKKwlpbnQgY3ZiX212LCBtdjsKKworCWN2Yl9tdiA9IGdrMjBhX3ZvbHRfZ2V0X2N2Yl92 b2x0YWdlKHNwZWVkbywgc19zY2FsZSwgY29lZik7CisKKwltdiA9IERJVl9ST1VORF9DTE9TRVNU KGNvZWYtPmMzICogc3BlZWRvLCBzX3NjYWxlKSArIGNvZWYtPmM0ICsKKwkJRElWX1JPVU5EX0NM T1NFU1QoY29lZi0+YzUgKiB0ZW1wLCB0X3NjYWxlKTsKKwltdiA9IERJVl9ST1VORF9DTE9TRVNU KG12ICogdGVtcCwgdF9zY2FsZSkgKyBjdmJfbXY7CisJcmV0dXJuIG12OworfQorCitzdGF0aWMg aW50CitnazIwYV92b2x0X2NhbGNfdm9sdGFnZShjb25zdCBzdHJ1Y3QgY3ZiX2NvZWYgKmNvZWYp Cit7CisJaW50IHNwZWVkbywgbXY7CisKKwlzcGVlZG8gPSB0ZWdyYV9za3VfaW5mby5ncHVfc3Bl ZWRvX3ZhbHVlOworCisJbXYgPSBnazIwYV92b2x0X2dldF9jdmJfdF92b2x0YWdlKHNwZWVkbywg LTEwLCAxMDAsIDEwLCBjb2VmKTsKKwltdiA9IERJVl9ST1VORF9VUChtdiwgMTAwMCk7CisKKwly ZXR1cm4gbXYgKiAxMDAwOworfQorCitzdGF0aWMgaW50CitnazIwYV92b2x0X3ZpZF9nZXQoc3Ry dWN0IG5vdXZlYXVfdm9sdCAqdm9sdCkKK3sKKwlzdHJ1Y3QgZ2syMGFfdm9sdF9wcml2ICpwcml2 ID0gKHZvaWQgKil2b2x0OworCWludCBpLCB1djsKKworCXV2ID0gcmVndWxhdG9yX2dldF92b2x0 YWdlKHByaXYtPnZkZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdm9sdC0+dmlkX25yOyBpKyspCisJ CWlmICh2b2x0LT52aWRbaV0udXYgPj0gdXYpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAtRUlO VkFMOworfQorCitzdGF0aWMgaW50CitnazIwYV92b2x0X3ZpZF9zZXQoc3RydWN0IG5vdXZlYXVf dm9sdCAqdm9sdCwgdTggdmlkKQoreworCXN0cnVjdCBnazIwYV92b2x0X3ByaXYgKnByaXYgPSAo dm9pZCAqKXZvbHQ7CisKKwludl9kZWJ1Zyh2b2x0LCAic2V0IHZvbHRhZ2UgYXMgJWR1dlxuIiwg dm9sdC0+dmlkW3ZpZF0udXYpOworCXJldHVybiByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UocHJpdi0+ dmRkLCB2b2x0LT52aWRbdmlkXS51diwgMTIwMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQKK2drMjBh X3ZvbHRfc2V0X2lkKHN0cnVjdCBub3V2ZWF1X3ZvbHQgKnZvbHQsIHU4IGlkLCBpbnQgY29uZGl0 aW9uKQoreworCXN0cnVjdCBnazIwYV92b2x0X3ByaXYgKnByaXYgPSAodm9pZCAqKXZvbHQ7CisJ aW50IHByZXZfdXYgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UocHJpdi0+dmRkKTsKKwlpbnQgdGFy Z2V0X3V2ID0gdm9sdC0+dmlkW2lkXS51djsKKwlpbnQgcmV0OworCisJbnZfZGVidWcodm9sdCwg InByZXY9JWQsIHRhcmdldD0lZCwgY29uZGl0aW9uPSVkXG4iLAorCQkJcHJldl91diwgdGFyZ2V0 X3V2LCBjb25kaXRpb24pOworCWlmICghY29uZGl0aW9uIHx8CisJCShjb25kaXRpb24gPCAwICYm IHRhcmdldF91diA8IHByZXZfdXYpIHx8CisJCShjb25kaXRpb24gPiAwICYmIHRhcmdldF91diA+ IHByZXZfdXYpKSB7CisJCXJldCA9IGdrMjBhX3ZvbHRfdmlkX3NldCh2b2x0LCB2b2x0LT52aWRb aWRdLnZpZCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50CitnazIwYV92b2x0X2N0b3Ioc3RydWN0IG5vdXZlYXVfb2JqZWN0ICpwYXJl bnQsIHN0cnVjdCBub3V2ZWF1X29iamVjdCAqZW5naW5lLAorCSAgICAgICBzdHJ1Y3Qgbm91dmVh dV9vY2xhc3MgKm9jbGFzcywgdm9pZCAqZGF0YSwgdTMyIHNpemUsCisJICAgICAgIHN0cnVjdCBu b3V2ZWF1X29iamVjdCAqKnBvYmplY3QpCit7CisJc3RydWN0IGdrMjBhX3ZvbHRfcHJpdiAqcHJp djsKKwlzdHJ1Y3Qgbm91dmVhdV92b2x0ICp2b2x0OworCXN0cnVjdCBub3V2ZWF1X3BsYXRmb3Jt X2RldmljZSAqcGxhdDsKKwlpbnQgaSwgcmV0LCB1djsKKworCXJldCA9IG5vdXZlYXVfdm9sdF9j cmVhdGUocGFyZW50LCBlbmdpbmUsIG9jbGFzcywgJnByaXYpOworCSpwb2JqZWN0ID0gbnZfb2Jq ZWN0KHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2b2x0ID0gJnByaXYtPmJh c2U7CisKKwlwbGF0ID0gbnZfZGV2aWNlX3RvX3BsYXRmb3JtKG52X2RldmljZShwYXJlbnQpKTsK KworCXV2ID0gcmVndWxhdG9yX2dldF92b2x0YWdlKHBsYXQtPmdwdS0+dmRkKTsKKwludl9pbmZv KHByaXYsICJUaGUgZGVmYXVsdCB2b2x0YWdlIGlzICVkdVZcbiIsIHV2KTsKKworCXByaXYtPnZk ZCA9IHBsYXQtPmdwdS0+dmRkOworCXByaXYtPmJhc2UudmlkX2dldCA9IGdrMjBhX3ZvbHRfdmlk X2dldDsKKwlwcml2LT5iYXNlLnZpZF9zZXQgPSBnazIwYV92b2x0X3ZpZF9zZXQ7CisJcHJpdi0+ YmFzZS5zZXRfaWQgPSBnazIwYV92b2x0X3NldF9pZDsKKworCXZvbHQtPnZpZF9uciA9IEFSUkFZ X1NJWkUoZ2syMGFfY3ZiX2NvZWYpOworCW52X2RlYnVnKHByaXYsICIlcyAtIHZpZF9uciA9ICVk XG4iLCBfX2Z1bmNfXywgdm9sdC0+dmlkX25yKTsKKwlmb3IgKGkgPSAwOyBpIDwgdm9sdC0+dmlk X25yOyBpKyspIHsKKwkJdm9sdC0+dmlkW2ldLnZpZCA9IGk7CisJCXZvbHQtPnZpZFtpXS51diA9 IGdrMjBhX3ZvbHRfY2FsY192b2x0YWdlKCZnazIwYV9jdmJfY29lZltpXSk7CisJCW52X2RlYnVn KHByaXYsICIlMmQ6IHZpZD0lZCwgdXY9JWRcbiIsIGksIHZvbHQtPnZpZFtpXS52aWQsCisJCQkJ CXZvbHQtPnZpZFtpXS51dik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBub3V2ZWF1 X29jbGFzcworZ2syMGFfdm9sdF9vY2xhc3MgPSB7CisJLmhhbmRsZSA9IE5WX1NVQkRFVihWT0xU LCAweGVhKSwKKwkub2Z1bmNzID0gJihzdHJ1Y3Qgbm91dmVhdV9vZnVuY3MpIHsKKwkJLmN0b3Ig PSBnazIwYV92b2x0X2N0b3IsCisJCS5kdG9yID0gX25vdXZlYXVfdm9sdF9kdG9yLAorCQkuaW5p dCA9IF9ub3V2ZWF1X3ZvbHRfaW5pdCwKKwkJLmZpbmkgPSBfbm91dmVhdV92b2x0X2ZpbmksCisJ fSwKK307Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK