From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH libdrm 11/11] tests: kms: Implement universal planes test Date: Fri, 23 Jan 2015 17:08:24 +0100 Message-ID: <1422029304-1926-12-git-send-email-thierry.reding@gmail.com> References: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by gabe.freedesktop.org (Postfix) with ESMTP id E962E6E948 for ; Fri, 23 Jan 2015 08:09:18 -0800 (PST) Received: by mail-pa0-f42.google.com with SMTP id bj1so8435106pad.1 for ; Fri, 23 Jan 2015 08:09:18 -0800 (PST) In-Reply-To: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgc21hbGwgcHJv Z3JhbSBhbGxvd3MgdW5pdmVyc2FsIHBsYW5lcyB0byBiZSB0ZXN0ZWQuIEN1cnJlbnRseSB0aGlz Cmlzbid0IHZlcnkgZmxleGlibGUgYmVjYXVzZSBpdCBhbGxvd3Mgb25seSB0aGUgZmlyc3QgcGxh bmUgb2YgYSBnaXZlbgp0eXBlIHRvIGJlIHRlc3RlZCBvbiB0aGUgZmlyc3QgQ1JUQy4gSG93ZXZl ciBpdCBzaG91bGQgYmUgc2ltcGxlIHRvCmV4dGVuZCB0aGlzIHdpdGggc29tZSBhZGRpdGlvbmFs IGNvbW1hbmQtbGluZSBhcmd1bWVudHMuCgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8 dHJlZGluZ0BudmlkaWEuY29tPgotLS0KIHRlc3RzL2ttcy9NYWtlZmlsZS5hbSAgICAgICAgICAg IHwgICA5ICstCiB0ZXN0cy9rbXMva21zLXVuaXZlcnNhbC1wbGFuZXMuYyB8IDM1OCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzY1IGlu c2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21z L2ttcy11bml2ZXJzYWwtcGxhbmVzLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9rbXMvTWFrZWZpbGUu YW0gYi90ZXN0cy9rbXMvTWFrZWZpbGUuYW0KaW5kZXggMTA1ODRjODkzMGE0Li5lOTU4OTIyMWU0 ODkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttcy9NYWtlZmlsZS5hbQorKysgYi90ZXN0cy9rbXMvTWFr ZWZpbGUuYW0KQEAgLTIwLDExICsyMCwxNiBAQCBsaWJrbXNfdGVzdF9sYV9MSUJBREQgPSBcCiAK IGlmIEhBVkVfSU5TVEFMTF9URVNUUwogYmluX1BST0dSQU1TID0gXAotCWttcy1zdGVhbC1jcnRj CisJa21zLXN0ZWFsLWNydGMgXAorCWttcy11bml2ZXJzYWwtcGxhbmVzCiBlbHNlCiBub2luc3Rf UFJPR1JBTVMgPSBcCi0Ja21zLXN0ZWFsLWNydGMKKwlrbXMtc3RlYWwtY3J0YyBcCisJa21zLXVu aXZlcnNhbC1wbGFuZXMKIGVuZGlmCiAKIGttc19zdGVhbF9jcnRjX1NPVVJDRVMgPSBrbXMtc3Rl YWwtY3J0Yy5jCiBrbXNfc3RlYWxfY3J0Y19MREFERCA9IGxpYmttcy10ZXN0LmxhIC4uL3V0aWwv bGlidXRpbC5sYQorCitrbXNfdW5pdmVyc2FsX3BsYW5lc19TT1VSQ0VTID0ga21zLXVuaXZlcnNh bC1wbGFuZXMuYwora21zX3VuaXZlcnNhbF9wbGFuZXNfTERBREQgPSBsaWJrbXMtdGVzdC5sYQpk aWZmIC0tZ2l0IGEvdGVzdHMva21zL2ttcy11bml2ZXJzYWwtcGxhbmVzLmMgYi90ZXN0cy9rbXMv a21zLXVuaXZlcnNhbC1wbGFuZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjkxNTEyMzFmZjg2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttcy9rbXMtdW5p dmVyc2FsLXBsYW5lcy5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhF IFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmln LmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+Cisj aW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRl IDxkcm1fZm91cmNjLmg+CisjaW5jbHVkZSAieGY4NmRybS5oIgorCisjaW5jbHVkZSAidXRpbC9j b21tb24uaCIKKyNpbmNsdWRlICJsaWJrbXMtdGVzdC5oIgorCitzdGF0aWMgY29uc3QgdWludDMy X3QgZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9YQkdS ODg4OCwKKwlEUk1fRk9STUFUX1JHQkE4ODg4LAorfTsKKworc3RhdGljIHVpbnQzMl90IGNob29z ZV9mb3JtYXQoc3RydWN0IGttc19wbGFuZSAqcGxhbmUpCit7CisJdW5zaWduZWQgaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgaSsrKQorCQlpZiAoa21zX3Bs YW5lX3N1cHBvcnRzX2Zvcm1hdChwbGFuZSwgZm9ybWF0c1tpXSkpCisJCQlyZXR1cm4gZm9ybWF0 c1tpXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX2ZyYW1lYnVmZmVy KHN0cnVjdCBrbXNfZnJhbWVidWZmZXIgKmZiLCBib29sIGludmVydCkKK3sKKwljb25zdCB1bnNp Z25lZCBpbnQgYmxvY2tfc2l6ZSA9IDE2OworCXVpbnQzMl90IGNvbG9yc1syXTsKKwl1bnNpZ25l ZCBpbnQgaSwgajsKKwl1aW50MzJfdCAqYnVmOworCXZvaWQgKnB0cjsKKwlpbnQgZXJyOworCisJ c3dpdGNoIChmYi0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlwcmlu dGYoInVzaW5nIFhSR0I4ODg4IGZvcm1hdFxuIik7CisJCSAgICAgICAgICAgLyogWFhSUkdHQkIg Ki8KKwkJY29sb3JzWzBdID0gMHhmZmZmMDAwMDsKKwkJY29sb3JzWzFdID0gMHhmZjAwMDBmZjsK KwkJYnJlYWs7CisKKwljYXNlIERSTV9GT1JNQVRfWEJHUjg4ODg6CisJCXByaW50ZigidXNpbmcg WEJHUjg4ODggZm9ybWF0XG4iKTsKKwkJICAgICAgICAgICAvKiBYWEJCR0dSUiAqLworCQljb2xv cnNbMF0gPSAweGZmMDAwMGZmOworCQljb2xvcnNbMV0gPSAweGZmZmYwMDAwOworCQlicmVhazsK KworCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJcHJpbnRmKCJ1c2luZyBSR0JBODg4OCBm b3JtYXRcbiIpOworCQkgICAgICAgICAgIC8qIFJSR0dCQkFBICovCisJCWNvbG9yc1swXSA9IDB4 ZmYwMDAwZmY7CisJCWNvbG9yc1sxXSA9IDB4MDAwMGZmZmY7CisJCWJyZWFrOworCisJZGVmYXVs dDoKKwkJY29sb3JzWzBdID0gMHhmZmZmZmZmZjsKKwkJY29sb3JzWzFdID0gMHhmZmZmZmZmZjsK KwkJYnJlYWs7CisJfQorCisJZXJyID0ga21zX2ZyYW1lYnVmZmVyX21hcChmYiwgJnB0cik7CisJ aWYgKGVyciA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJrbXNfZnJhbWVidWZmZXJfbWFwKCkg ZmFpbGVkOiAlc1xuIiwKKwkJCXN0cmVycm9yKC1lcnIpKTsKKwkJcmV0dXJuOworCX0KKworCWJ1 ZiA9IHB0cjsKKworCWZvciAoaiA9IDA7IGogPCBmYi0+aGVpZ2h0OyBqKyspIHsKKwkJZm9yIChp ID0gMDsgaSA8IGZiLT53aWR0aDsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgY29sb3IgPSAoaiAv IGJsb2NrX3NpemUpIF4KKwkJCQkJICAgICAoaSAvIGJsb2NrX3NpemUpOworCisJCQlpZiAoaW52 ZXJ0KQorCQkJCWNvbG9yIF49IGNvbG9yOworCisJCQkqYnVmKysgPSBjb2xvcnNbY29sb3IgJiAx XTsKKwkJfQorCX0KKworCWttc19mcmFtZWJ1ZmZlcl91bm1hcChmYik7Cit9CisKK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgb3B0c1tdID0g ImNob3B2IjsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgImN1cnNv ciIsIDAsIDAsICdjJyB9LAorCQl7ICJoZWxwIiwgMCwgMCwgJ2gnIH0sCisJCXsgIm92ZXJsYXki LCAwLCAwLCAnbycgfSwKKwkJeyAicHJpbWFyeSIsIDAsIDAsICdwJyB9LAorCQl7ICJ2ZXJib3Nl IiwgMCwgMCwgJ3YnIH0sCisJCXsgMCwgMCwgMCwgMCB9LAorCX07CisJc3RydWN0IGttc19mcmFt ZWJ1ZmZlciAqY3Vyc29yID0gTlVMTDsKKwlzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpyb290ID0g TlVMTDsKKwlzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpmYiA9IE5VTEw7CisJc3RydWN0IGttc19k ZXZpY2UgKmRldmljZTsKKwlib29sIHVzZV9vdmVybGF5ID0gZmFsc2U7CisJYm9vbCB1c2VfcHJp bWFyeSA9IGZhbHNlOworCXN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lOworCWJvb2wgdXNlX2N1cnNv ciA9IGZhbHNlOworCWJvb2wgdmVyYm9zZSA9IGZhbHNlOworCXVuc2lnbmVkIGludCBpOworCWlu dCBvcHQsIGlkeDsKKwlpbnQgZmQsIGVycjsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgb3B0cywgb3B0aW9ucywgJmlkeCkpICE9IC0xKSB7CisJCXN3aXRjaCAob3B0 KSB7CisJCWNhc2UgJ2MnOgorCQkJdXNlX2N1cnNvciA9IHRydWU7CisJCQlicmVhazsKKworCQlj YXNlICdoJzoKKwkJCWJyZWFrOworCisJCWNhc2UgJ28nOgorCQkJdXNlX292ZXJsYXkgPSB0cnVl OworCQkJYnJlYWs7CisKKwkJY2FzZSAncCc6CisJCQl1c2VfcHJpbWFyeSA9IHRydWU7CisJCQli cmVhazsKKworCQljYXNlICd2JzoKKwkJCXZlcmJvc2UgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCXByaW50ZigidW5rbm93biBvcHRpb24gXCIlY1wiXG4iLCBvcHQpOworCQkJ cmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAob3B0aW5kID49IGFyZ2MpIHsKKwkJZnByaW50Zihz dGRlcnIsICJ1c2FnZTogJXMgW29wdGlvbnNdIERFVklDRVxuIiwgYXJndlswXSk7CisJCXJldHVy biAxOworCX0KKworCWZkID0gb3Blbihhcmd2W29wdGluZF0sIE9fUkRXUik7CisJaWYgKGZkIDwg MCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIm9wZW4oKSBmYWlsZWQ6ICVtXG4iKTsKKwkJcmV0dXJu IDE7CisJfQorCisJZXJyID0gZHJtU2V0Q2xpZW50Q2FwKGZkLCBEUk1fQ0xJRU5UX0NBUF9VTklW RVJTQUxfUExBTkVTLCAxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImRy bVNldENsaWVudENhcCgpIGZhaWxlZDogJWRcbiIsIGVycik7CisJCXJldHVybiAxOworCX0KKwor CWRldmljZSA9IGttc19kZXZpY2Vfb3BlbihmZCk7CisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAx OworCisJaWYgKHZlcmJvc2UpIHsKKwkJcHJpbnRmKCJTY3JlZW5zOiAldVxuIiwgZGV2aWNlLT5u dW1fc2NyZWVucyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRldmljZS0+bnVtX3NjcmVlbnM7IGkr KykgeworCQkJc3RydWN0IGttc19zY3JlZW4gKnNjcmVlbiA9IGRldmljZS0+c2NyZWVuc1tpXTsK KwkJCWNvbnN0IGNoYXIgKnN0YXR1cyA9ICJkaXNjb25uZWN0ZWQiOworCisJCQlpZiAoc2NyZWVu LT5jb25uZWN0ZWQpCisJCQkJc3RhdHVzID0gImNvbm5lY3RlZCI7CisKKwkJCXByaW50ZigiICAl dTogJXhcbiIsIGksIHNjcmVlbi0+aWQpOworCQkJcHJpbnRmKCIgICAgU3RhdHVzOiAlc1xuIiwg c3RhdHVzKTsKKwkJCXByaW50ZigiICAgIE5hbWU6ICVzXG4iLCBzY3JlZW4tPm5hbWUpOworCQkJ cHJpbnRmKCIgICAgUmVzb2x1dGlvbjogJXV4JXVcbiIsIHNjcmVlbi0+d2lkdGgsCisJCQkgICAg ICAgc2NyZWVuLT5oZWlnaHQpOworCQl9CisKKwkJcHJpbnRmKCJQbGFuZXM6ICV1XG4iLCBkZXZp Y2UtPm51bV9wbGFuZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPm51bV9wbGFuZXM7 IGkrKykgeworCQkJc3RydWN0IGttc19wbGFuZSAqcGxhbmUgPSBkZXZpY2UtPnBsYW5lc1tpXTsK KwkJCWNvbnN0IGNoYXIgKnR5cGUgPSBOVUxMOworCisJCQlzd2l0Y2ggKHBsYW5lLT50eXBlKSB7 CisJCQljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6CisJCQkJdHlwZSA9ICJvdmVybGF5IjsK KwkJCQlicmVhazsKKworCQkJY2FzZSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOgorCQkJCXR5cGUg PSAicHJpbWFyeSI7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRFJNX1BMQU5FX1RZUEVfQ1VSU09S OgorCQkJCXR5cGUgPSAiY3Vyc29yIjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcHJpbnRmKCIg ICV1OiAlcFxuIiwgaSwgcGxhbmUpOworCQkJcHJpbnRmKCIgICAgSUQ6ICV4XG4iLCBwbGFuZS0+ aWQpOworCQkJcHJpbnRmKCIgICAgQ1JUQzogJXhcbiIsIHBsYW5lLT5jcnRjLT5pZCk7CisJCQlw cmludGYoIiAgICBUeXBlOiAleCAoJXMpXG4iLCBwbGFuZS0+dHlwZSwgdHlwZSk7CisJCX0KKwl9 CisKKwlpZiAodXNlX2N1cnNvcikgeworCQl1bnNpZ25lZCBpbnQgeCwgeTsKKwkJdWludDMyX3Qg Zm9ybWF0OworCisJCXBsYW5lID0ga21zX2RldmljZV9maW5kX3BsYW5lX2J5X3R5cGUoZGV2aWNl LAorCQkJCQkJICAgICAgRFJNX1BMQU5FX1RZUEVfQ1VSU09SLAorCQkJCQkJICAgICAgMCk7CisJ CWlmICghcGxhbmUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibm8gY3Vyc29yIHBsYW5lIGZvdW5k XG4iKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJZm9ybWF0ID0gY2hvb3NlX2Zvcm1hdChwbGFu ZSk7CisJCWlmICghZm9ybWF0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIG1hdGNoaW5nIGZv cm1hdCBmb3VuZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWN1cnNvciA9IGttc19mcmFt ZWJ1ZmZlcl9jcmVhdGUoZGV2aWNlLCAzMiwgMzIsIGZvcm1hdCk7CisJCWlmICghY3Vyc29yKSB7 CisJCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBjcmVhdGUgY3Vyc29yIGJ1ZmZlclxuIik7 CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXByZXBhcmVfZnJhbWVidWZmZXIoY3Vyc29yLCBmYWxz ZSk7CisKKwkJeCA9IChkZXZpY2UtPnNjcmVlbnNbMF0tPndpZHRoIC0gY3Vyc29yLT53aWR0aCkg LyAyOworCQl5ID0gKGRldmljZS0+c2NyZWVuc1swXS0+aGVpZ2h0IC0gY3Vyc29yLT5oZWlnaHQp IC8gMjsKKworCQlrbXNfcGxhbmVfc2V0KHBsYW5lLCBjdXJzb3IsIHgsIHkpOworCX0KKworCWlm ICh1c2Vfb3ZlcmxheSkgeworCQl1aW50MzJfdCBmb3JtYXQ7CisKKwkJcGxhbmUgPSBrbXNfZGV2 aWNlX2ZpbmRfcGxhbmVfYnlfdHlwZShkZXZpY2UsCisJCQkJCQkgICAgICBEUk1fUExBTkVfVFlQ RV9PVkVSTEFZLAorCQkJCQkJICAgICAgMCk7CisJCWlmICghcGxhbmUpIHsKKwkJCWZwcmludGYo c3RkZXJyLCAibm8gb3ZlcmxheSBwbGFuZSBmb3VuZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQor CisJCWZvcm1hdCA9IGNob29zZV9mb3JtYXQocGxhbmUpOworCQlpZiAoIWZvcm1hdCkgeworCQkJ ZnByaW50ZihzdGRlcnIsICJubyBtYXRjaGluZyBmb3JtYXQgZm91bmRcbiIpOworCQkJcmV0dXJu IDE7CisJCX0KKworCQlmYiA9IGttc19mcmFtZWJ1ZmZlcl9jcmVhdGUoZGV2aWNlLCAzMjAsIDI0 MCwgZm9ybWF0KTsKKwkJaWYgKCFmYikKKwkJCXJldHVybiAxOworCisJCXByZXBhcmVfZnJhbWVi dWZmZXIoZmIsIGZhbHNlKTsKKworCQlrbXNfcGxhbmVfc2V0KHBsYW5lLCBmYiwgMCwgMCk7CisJ fQorCisJaWYgKHVzZV9wcmltYXJ5KSB7CisJCXVuc2lnbmVkIGludCB4LCB5OworCQl1aW50MzJf dCBmb3JtYXQ7CisKKwkJcGxhbmUgPSBrbXNfZGV2aWNlX2ZpbmRfcGxhbmVfYnlfdHlwZShkZXZp Y2UsCisJCQkJCQkgICAgICBEUk1fUExBTkVfVFlQRV9QUklNQVJZLAorCQkJCQkJICAgICAgMCk7 CisJCWlmICghcGxhbmUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibm8gcHJpbWFyeSBwbGFuZSBm b3VuZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWZvcm1hdCA9IGNob29zZV9mb3JtYXQo cGxhbmUpOworCQlpZiAoIWZvcm1hdCkgeworCQkJZnByaW50ZihzdGRlcnIsICJubyBtYXRjaGlu ZyBmb3JtYXQgZm91bmRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlyb290ID0ga21zX2Zy YW1lYnVmZmVyX2NyZWF0ZShkZXZpY2UsIDY0MCwgNDgwLCBmb3JtYXQpOworCQlpZiAoIXJvb3Qp CisJCQlyZXR1cm4gMTsKKworCQlwcmVwYXJlX2ZyYW1lYnVmZmVyKHJvb3QsIHRydWUpOworCisJ CXggPSAoZGV2aWNlLT5zY3JlZW5zWzBdLT53aWR0aCAtIHJvb3QtPndpZHRoKSAvIDI7CisJCXkg PSAoZGV2aWNlLT5zY3JlZW5zWzBdLT5oZWlnaHQgLSByb290LT5oZWlnaHQpIC8gMjsKKworCQlr bXNfcGxhbmVfc2V0KHBsYW5lLCByb290LCB4LCB5KTsKKwl9CisKKwl3aGlsZSAoMSkgeworCQlz dHJ1Y3QgdGltZXZhbCB0aW1lb3V0ID0geyAxLCAwIH07CisJCWZkX3NldCBmZHM7CisKKwkJRkRf WkVSTygmZmRzKTsKKwkJRkRfU0VUKFNURElOX0ZJTEVOTywgJmZkcyk7CisKKwkJZXJyID0gc2Vs ZWN0KFNURElOX0ZJTEVOTyArIDEsICZmZHMsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKKwkJaWYg KGVyciA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAic2VsZWN0KCkgZmFpbGVkOiAlbVxuIik7 CisJCQlicmVhazsKKwkJfQorCisJCS8qIHRpbWVvdXQgKi8KKwkJaWYgKGVyciA9PSAwKQorCQkJ Y29udGludWU7CisKKwkJaWYgKEZEX0lTU0VUKFNURElOX0ZJTEVOTywgJmZkcykpCisJCQlicmVh azsKKwl9CisKKwlpZiAoY3Vyc29yKQorCQlrbXNfZnJhbWVidWZmZXJfZnJlZShjdXJzb3IpOwor CisJaWYgKHJvb3QpCisJCWttc19mcmFtZWJ1ZmZlcl9mcmVlKHJvb3QpOworCisJaWYgKGZiKQor CQlrbXNfZnJhbWVidWZmZXJfZnJlZShmYik7CisKKwlrbXNfZGV2aWNlX2Nsb3NlKGRldmljZSk7 CisJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9Ci0tIAoyLjEuMwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK