From mboxrd@z Thu Jan 1 00:00:00 1970 From: yu.dai@intel.com Subject: [PATCH 03/18] drm/i915: Unified firmware loading mechanism Date: Thu, 26 Mar 2015 12:41:10 -0700 Message-ID: <1427398885-31988-4-git-send-email-yu.dai@intel.com> References: <1427398885-31988-1-git-send-email-yu.dai@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 956216E4EB for ; Thu, 26 Mar 2015 12:44:09 -0700 (PDT) In-Reply-To: <1427398885-31988-1-git-send-email-yu.dai@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 List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KCkZhY3RvciBvdXQg dGhlIGNvbW1vbiBjb2RlIG9mIGxvYWRpbmcgZmlybXdhcmUgaW50byBhIG5ldyBmaWxlLApsZWF2 aW5nIG9ubHkgdGhlIHVDLXNwZWNpZmljIHBhcnRzIGluIHRoZSBHdUMgbG9hZGVycy4KCklzc3Vl OiBWSVotNDg4NApTaWduZWQtb2ZmLWJ5OiBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KU2ln bmVkLW9mZi1ieTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYyB8IDIwOCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oIHwgIDc4 ICsrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjg5IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQppbmRleCBhNjkwMDJlLi4xYjAyN2M3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtl ZmlsZQpAQCAtMzksNiArMzksOSBAQCBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXAogCSAg aW50ZWxfcmluZ2J1ZmZlci5vIFwKIAkgIGludGVsX3VuY29yZS5vCiAKKyMgYW5jaWxsaWFyeSBt aWNyb2NvbnRyb2xsZXIgc3VwcG9ydAoraTkxNS15ICs9IGludGVsX3VjX2xvYWRlci5vCisKICMg YXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQogaTkxNS15ICs9IGludGVsX3JlbmRlcnN0 YXRlX2dlbjYubyBcCiAJICBpbnRlbF9yZW5kZXJzdGF0ZV9nZW43Lm8gXApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91Y19sb2FkZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4yNDllNTZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dWNfbG9hZGVyLmMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBJ bnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdy YXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp b25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgor ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZU V0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImk5 MTVfZHJ2LmgiCisjaW5jbHVkZSAiaW50ZWxfdWNfbG9hZGVyLmgiCisKKy8qCisgKiBDYWxsZWQg b25jZSBwZXIgdUMsIGxhdGUgaW4gZHJpdmVyIGluaXRpYWxpc2F0aW9uLiBHRU0gaXMgbm93IHJl YWR5LCBhbmQgc28KKyAqIHdlIGNhbiBub3cgY3JlYXRlIGEgR0VNIG9iamVjdCB0byBob2xkIHRo ZSB1QyBmaXJtd2FyZS4gQnV0IGZpcnN0LCB3ZSBtdXN0CisgKiBzeW5jaHJvbmlzZSB3aXRoIHRo ZSBmaXJtd2FyZS1mZXRjaGluZyB0aHJlYWQgdGhhdCB3YXMgaW5pdGlhdGVkIGR1cmluZworICog ZWFybHkgZHJpdmVyIGxvYWQsIGluIGludGVsX3VjX2Z3X2luaXQoKSwgYW5kIHNlZSB3aGV0aGVy IGl0IHN1Y2Nlc3NmdWxseQorICogZmV0Y2hlZCB0aGUgZmlybXdhcmUgYmxvYi4KKyAqLworc3Rh dGljIHZvaWQgdWNfZndfZmluaXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRl bF91Y19mdyAqdWNfZncpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5V TEw7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCURSTV9ERUJVR19EUklWRVIoImJl Zm9yZSB3YWl0aW5nOiAlcyBmdyBmZXRjaCBzdGF0dXMgJWQsIGZ3ICVwXG4iLAorCQl1Y19mdy0+ dWNfbmFtZSwgdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cywgdWNfZnctPnVjX2Z3X2Jsb2IpOwor CisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOworCVdBUk5f T04odWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5H KTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVjX2Z3LT51Y19md19mZXRjaGVkKTsKKworCURS TV9ERUJVR19EUklWRVIoImFmdGVyIHdhaXRpbmc6ICVzIGZ3IGZldGNoIHN0YXR1cyAlZCwgZncg JXBcbiIsCisJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzLCB1Y19m dy0+dWNfZndfYmxvYik7CisKKwlmdyA9IHVjX2Z3LT51Y19md19ibG9iOworCXVjX2Z3LT51Y19m d19ibG9iID0gTlVMTDsKKwlpZiAoIWZ3KQorCQlnb3RvIGZhaWw7CisKKwlvYmogPSBpOTE1X2dl bV9hbGxvY19vYmplY3QoZGV2LCByb3VuZF91cChmdy0+c2l6ZSwgUEFHRV9TSVpFKSk7CisJaWYg KCFvYmopCisJCWdvdG8gZmFpbDsKKworCWlmIChpOTE1X2dlbV9vYmplY3Rfd3JpdGUob2JqLCBm dy0+ZGF0YSwgZnctPnNpemUpKQorCQlnb3RvIGZhaWw7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIl cyBmdyBmZXRjaCBzdGF0dXMgU1VDQ0VTU1xuIiwgdWNfZnctPnVjX25hbWUpOworCXVjX2Z3LT51 Y19md19vYmogPSBvYmo7CisJdWNfZnctPnVjX2Z3X3NpemUgPSBmdy0+c2l6ZTsKKwl1Y19mdy0+ dWNfZndfZmV0Y2hfc3RhdHVzID0gSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzsKKwlyZWxlYXNl X2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm47CisKK2ZhaWw6CisJRFJNX0RFQlVHX0RSSVZFUigiJXMg ZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGZ3ICVwLCBvYmogJXBcbiIsCisJCXVjX2Z3LT51Y19uYW1l LCBmdywgb2JqKTsKKwlEUk1fRVJST1IoIkZhaWxlZCB0byBmZXRjaCAlcyBmaXJtd2FyZSBmcm9t IDwlcz5cbiIsCisJCSAgdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19md19wYXRoKTsKKworCWlm IChvYmopCisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCisJdWNf ZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw7CisJcmVsZWFz ZV9maXJtd2FyZShmdyk7CQkvKiBPSyBldmVuIGlmIGZ3IGlzIE5VTEwgKi8KK30KKworLyoKKyAq IENoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIGZpcm13YXJlIGZldGNoaW5nIHByb2Nlc3MuIElmIGl0 J3Mgc3RpbGwKKyAqIFBFTkRJTkcsIHdhaXQgZm9yIGNvbXBsZXRpb24gZmlyc3QsIHRoZW4gY2hl Y2sgdGhlIG91dGNvbWUuCisgKi8KK2ludCBpbnRlbF91Y19md19jaGVjayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQoreworCVdBUk5fT04oIW11dGV4 X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCWlmICh1Y19mdy0+dWNfZndfZmV0 Y2hfc3RhdHVzID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpIHsKKwkJLyogV2Ugb25seSBj b21lIGhlcmUgb25jZSAqLworCQl1Y19md19maW5pc2goZGV2LCB1Y19mdyk7CisJCS8qIHN0YXRl IG11c3Qgbm93IGJlIEZBSUwgb3IgU1VDQ0VTUyAqLworCX0KKworCURSTV9ERUJVR19EUklWRVIo IiVzIGZ3IGZldGNoIHN0YXR1cyAlZFxuIiwKKwkJdWNfZnctPnVjX25hbWUsIHVjX2Z3LT51Y19m d19mZXRjaF9zdGF0dXMpOworCisJc3dpdGNoICh1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzKSB7 CisJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOgorCQkvKiBzb21ldGhpbmcgd2VudCB3cm9u ZyA6KCAqLworCQlyZXR1cm4gLUVJTzsKKworCWNhc2UgSU5URUxfVUNfRklSTVdBUkVfTk9ORToK KwkJLyogbm8gZmlybXdhcmUsIG5vdGhpbmcgdG8gZG8gKG5vdCBhbiBlcnJvcikgKi8KKwkJcmV0 dXJuIDA7CisKKwljYXNlIElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkc6CisJZGVmYXVsdDoKKwkJ LyogImNhbid0IGhhcHBlbiIgKi8KKwkJV0FSTl9PTkNFKDEsICIlcyBmdyA8JXM+IGludmFsaWQg dWNfZndfZmV0Y2hfc3RhdHVzICVkIVxuIiwKKwkJCXVjX2Z3LT51Y19uYW1lLCB1Y19mdy0+dWNf ZndfcGF0aCwKKwkJCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMpOworCQlyZXR1cm4gLUVOWElP OworCisJY2FzZSBJTlRFTF9VQ19GSVJNV0FSRV9TVUNDRVNTOgorCQlyZXR1cm4gMDsKKwl9Cit9 CisKKy8qCisgKiBDYWxsYmFjayBmcm9tIHRoZSBrZXJuZWwncyBhc3luY2hyb25vdXMgZmlybXdh cmUtZmV0Y2hpbmcgc3Vic3lzdGVtLgorICogQWxsIHdlIGhhdmUgdG8gZG8gaXMgc3Rhc2ggdGhl IGJsb2IgYW5kIHNpZ25hbCBjb21wbGV0aW9uLgorICogRXJyb3IgY2hlY2tpbmcgKGUuZy4gbm8g ZmlybXdhcmUpIGlzIGxlZnQgdG8gbWFpbmxpbmUgY29kZS4KKyAqIFdlIGRvbid0IGhhdmUgKGFu ZCBkb24ndCB3YW50IG9yIG5lZWQgdG8gYWNxdWlyZSkgdGhlIHN0cnVjdF9tdXRleCBoZXJlLgor ICovCitzdGF0aWMgdm9pZCB1Y19md19mZXRjaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdh cmUgKmZ3LCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncgPSBj b250ZXh0OworCisJV0FSTl9PTih1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzICE9IElOVEVMX1VD X0ZJUk1XQVJFX1BFTkRJTkcpOworCURSTV9ERUJVR19EUklWRVIoIiVzIGZpcm13YXJlIGZldGNo IGZyb20gPCVzPiBzdGF0dXMgJWQsIGZ3ICVwXG4iLAorCQkJdWNfZnctPnVjX25hbWUsIHVjX2Z3 LT51Y19md19wYXRoLAorCQkJdWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cywgZncpOworCisJdWNf ZnctPnVjX2Z3X2Jsb2IgPSBmdzsKKwljb21wbGV0ZSgmdWNfZnctPnVjX2Z3X2ZldGNoZWQpOwor fQorCisvKgorICogVGhpcyBpcyBjYWxsZWQganVzdCBvbmNlIHBlciB1QywgZHVyaW5nIGRyaXZl ciBsb2FkaW5nLiBJdCBpcyB0aGVyZWZvcmUKKyAqIGF1dG9tYXRpY2FsbHkgc2luZ2xlLXRocmVh ZGVkIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGFjcXVpcmUgYW55IG11dGV4ZXMKKyAqIG9yIHNwaW5s b2Nrcy4gT1RPSCwgR0VNIGlzIG5vdCB5ZXQgZnVsbHkgaW5pdGlhbGlzZWQsIHNvIHdlIGNhbid0 IGRvCisgKiB2ZXJ5IG11Y2ggaGVyZS4KKyAqCisgKiBUaGUgbWFpbiB0YXNrIGhlcmUgaXMgdG8g aW5pdGlhdGUgdGhlIGZldGNoaW5nIG9mIHRoZSB1QyBmaXJtd2FyZSBpbnRvCisgKiBtZW1vcnks IHVzaW5nIHRoZSBzdGFuZGFyZCBrZXJuZWwgZmlybXdhcmUgZmV0Y2hpbmcgc3VwcG9ydC4gIFRo ZSBhY3R1YWwKKyAqIGZldGNoaW5nIHdpbGwgdGhlbiBwcm9jZWVkIGFzeW5jaHJvbm91c2x5IGFu ZCBpbiBwYXJhbGxlbCB3aXRoIHRoZSByZXN0CisgKiBvZiBkcml2ZXIgaW5pdGlhbGlzYXRpb247 IGxhdGVyIGluIHRoZSBsb2FkaW5nIHByb2Nlc3Mgd2Ugd2lsbCBzeW5jaHJvbmlzZQorICogd2l0 aCB0aGUgZmlybXdhcmUtZmV0Y2hpbmcgdGhyZWFkIGJlZm9yZSB0cmFuc2ZlcnJpbmcgdGhlIGZp cm13YXJlIGltYWdlCisgKiBmaXJzdGx5IGludG8gYSBHRU0gb2JqZWN0IGFuZCB0aGVuIGludG8g dGhlIHVDJ3MgbWVtb3J5LgorICovCit2b2lkIGludGVsX3VjX2Z3X2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgc3RydWN0IGludGVsX3VjX2Z3ICp1Y19mdywKKwljb25zdCBjaGFyICpuYW1l LCBjb25zdCBjaGFyICpmd19wYXRoLCBib29sIGhhc191Y29kZSkKK3sKKwl1Y19mdy0+dWNfbmFt ZSA9IG5hbWU7CisJdWNfZnctPnVjX2Z3X3BhdGggPSBmd19wYXRoOworCXVjX2Z3LT51Y19md19m ZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9OT05FOworCWluaXRfY29tcGxldGlvbigm dWNfZnctPnVjX2Z3X2ZldGNoZWQpOworCisJaWYgKCFoYXNfdWNvZGUpCisJCXJldHVybjsKKwlp ZiAoZndfcGF0aCA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiTm8ga25vd24gJXMgZmlybXdhcmUg b24gdGhpcyBwbGF0Zm9ybVxuIiwgbmFtZSk7CisJCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMg PSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOworCQlyZXR1cm47CisJfQorCisJdWNfZnctPnVjX2Z3 X2ZldGNoX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkc7CisKKwlpZiAocmVxdWVz dF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIHRydWUsIGZ3X3BhdGgsCisJCQkJICAgICZk ZXYtPnBkZXYtPmRldiwKKwkJCQkgICAgR0ZQX0tFUk5FTCwgdWNfZncsCisJCQkJICAgIHVjX2Z3 X2ZldGNoX2NhbGxiYWNrKSkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXF1ZXN0ICVzIGZp cm13YXJlIGZyb20gPCVzPlxuIiwKKwkJCSAgbmFtZSwgZndfcGF0aCk7CisJCXVjX2Z3LT51Y19m d19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9GQUlMOworCQlyZXR1cm47CisJfQor CisJLyogZmlybXdhcmUgZmV0Y2ggaW5pdGlhdGVkLCBjYWxsYmFjayB3aWxsIHNpZ25hbCBjb21w bGV0aW9uICovCisJRFJNX0RFQlVHX0RSSVZFUigiaW5pdGlhdGVkIGZldGNoaW5nICVzIGZpcm13 YXJlIGZyb20gPCVzPlxuIiwKKwkJbmFtZSwgZndfcGF0aCk7Cit9CisKKy8qCisgKiBDbGVhbiB1 cCBhbGwgdUMgZmlybXdhcmUtcmVsYXRlZCBkYXRhCisgKi8KK3ZvaWQgaW50ZWxfdWNfZndfZmlu aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgaW50ZWxfdWNfZncgKnVjX2Z3KQorewor CVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKworCS8qCisJ ICogR2VuZXJhbGx5LCB0aGUgYmxvYiBzaG91bGQgaGF2ZSBiZWVuIHJlbGVhc2VkIGVhcmxpZXIs IGJ1dAorCSAqIGlmIHRoZSBkcml2ZXIgbG9hZCB3ZXJlIGFib3J0ZWQgYWZ0ZXIgdGhlIGZldGNo IGhhZCBiZWVuCisJICogaW5pdGlhdGVkIGJ1dCBub3QgY29tcGxldGVkIGl0IG1pZ2h0IHN0aWxs IGJlIGFyb3VuZAorCSAqLworCWlmICh1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzID09IElOVEVM X1VDX0ZJUk1XQVJFX1BFTkRJTkcpCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnVjX2Z3LT51Y19m d19mZXRjaGVkKTsKKwlpZiAodWNfZnctPnVjX2Z3X2Jsb2IpCisJCXJlbGVhc2VfZmlybXdhcmUo dWNfZnctPnVjX2Z3X2Jsb2IpOworCXVjX2Z3LT51Y19md19ibG9iID0gTlVMTDsKKworCWlmICh1 Y19mdy0+dWNfZndfb2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmdWNfZnctPnVj X2Z3X29iai0+YmFzZSk7CisJdWNfZnctPnVjX2Z3X29iaiA9IE5VTEw7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VjX2xvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjY2MWQ0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF91Y19sb2FkZXIuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQg SW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlz IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29y IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFn cmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0 aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig T1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09G VFdBUkUuCisgKgorICovCisjaWZuZGVmIF9JTlRFTF9VQ19MT0FERVJfSAorI2RlZmluZSBfSU5U RUxfVUNfTE9BREVSX0gKKworLyoKKyAqIE1pY3JvY29udHJvbGxlciAodUMpIGZpcm13YXJlIGxv YWRpbmcgc3VwcG9ydAorICovCisKKy8qCisgKiBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gdHJh Y2sgdGhlIHN0YWdlcyBvZiBnZXR0aW5nIHRoZSByZXF1aXJlZCBmaXJtd2FyZQorICogaW50byBh biBvbmJvYXJkIG1pY3JvY29udHJvbGxlci4gVGhlIGNvbW1vbiBjb2RlIHRyYWNrcyB0aGUgcGhh c2VzIG9mCisgKiBmZXRjaGluZyB0aGUgZmlybXdhcmUgKGFrYSAiYmluYXJ5IGJsb2IiKSBmcm9t IGFuIGV4dGVybmFsIGZpbGUgaW50byBhIEdFTQorICogb2JqZWN0IGluIHRoZSAndWNfZndfZmV0 Y2hfc3RhdHVzJyBmaWVsZCBiZWxvdzsgdGhlIHVDLXNwZWNpZmljIERNQSBjb2RlCisgKiB1c2Vz IHRoZSAndWNfZndfbG9hZF9zdGF0dXMnIGZpZWxkIHRvIHRyYWNrIHRoZSB0cmFuc2ZlciBmcm9t IEdFTSBvYmplY3QKKyAqIHRvIHVDIG1lbW9yeS4KKyAqCisgKiBGb3IgdGhlIGZpcnN0IChmZXRj aCkgc3RhZ2UsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdmFsdWVzIGlzOgorICogTk9ORSAt IG5vIGZpcm13YXJlIGlzIGJlaW5nIGZldGNoZWQgZS5nLiBiZWNhdXNlIHRoZXJlIGlzIG5vIHVD CisgKiBQRU5ESU5HIC0gZmlybXdhcmUgZmV0Y2ggaW5pdGlhdGVkOyBjYWxsYmFjayB3aWxsIGNv bXBsZXRlICd1Y19md19mZXRjaGVkJworICogU1VDQ0VTUyAtIHVDIGZpcm13YXJlIGZldGNoZWQg aW50byBhIEdFTSBvYmplY3QgYW5kIHJlYWR5IGZvciB1c2UKKyAqIEZBSUwgLSBzb21ldGhpbmcg d2VudCB3cm9uZzsgdUMgZmlybXdhcmUgaXMgbm90IGF2YWlsYWJsZQorICoKKyAqIFRoZSBzZWNv bmQgKGxvYWQpIHN0YWdlIGlzIHNpbXBsZXIgYXMgdGhlcmUgaXMgbm8gYXN5bmNocm9ub3VzIGhh bmRvZmY6CisgKiBOT05FIC0gbm8gZmlybXdhcmUgaXMgYmVpbmcgbG9hZGVkIGUuZy4gYmVjYXVz ZSB0aGVyZSBpcyBubyB1QworICogUEVORElORyAtIGZpcm13YXJlIERNQSBsb2FkIGluIHByb2dy ZXNzCisgKiBTVUNDRVNTIC0gdUMgZmlybXdhcmUgbG9hZGVkIGludG8gdUMgbWVtb3J5IGFuZCBy ZWFkeSBmb3IgdXNlCisgKiBGQUlMIC0gc29tZXRoaW5nIHdlbnQgd3Jvbmc7IHVDIGZpcm13YXJl IGlzIG5vdCBhdmFpbGFibGUKKyAqLworZW51bSBpbnRlbF91Y19md19zdGF0dXMgeworCUlOVEVM X1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKKwlJTlRFTF9VQ19GSVJNV0FSRV9OT05FID0gMCwKKwlJ TlRFTF9VQ19GSVJNV0FSRV9QRU5ESU5HLAorCUlOVEVMX1VDX0ZJUk1XQVJFX1NVQ0NFU1MKK307 CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBkYXRhIG5lZWRl ZCBkdXJpbmcgdGhlIHByb2Nlc3Mgb2YKKyAqIGZldGNoaW5nLCBjYWNoaW5nLCBhbmQgbG9hZGlu ZyB0aGUgZmlybXdhcmUgaW1hZ2UgaW50byB0aGUgdUMuCisgKi8KK3N0cnVjdCBpbnRlbF91Y19m dyB7CisJY29uc3QgY2hhciAqCQkJdWNfbmFtZTsKKwljb25zdCBjaGFyICoJCQl1Y19md19wYXRo OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqCQl1Y19md19ibG9iOworCXN0cnVjdCBjb21wbGV0 aW9uCQl1Y19md19mZXRjaGVkOworCXNpemVfdAkJCQl1Y19md19zaXplOworCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICoJdWNfZndfb2JqOworCWVudW0gaW50ZWxfdWNfZndfc3RhdHVzCQl1 Y19md19mZXRjaF9zdGF0dXM7CisJZW51bSBpbnRlbF91Y19md19zdGF0dXMJCXVjX2Z3X2xvYWRf c3RhdHVzOworfTsKKwordm9pZCBpbnRlbF91Y19md19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncsCisJY29uc3QgY2hhciAqdWNfbmFtZSwgY29u c3QgY2hhciAqZndfcGF0aCwgYm9vbCBoYXNfdWNvZGUpOworaW50IGludGVsX3VjX2Z3X2NoZWNr KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF91Y19mdyAqdWNfZncpOwordm9p ZCBpbnRlbF91Y19md19maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBpbnRlbF91 Y19mdyAqdWNfZncpOworCisjZW5kaWYKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=