From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Herrmann Subject: [RFC] drm: implement generic firmware eviction Date: Fri, 26 Aug 2016 02:00:56 +0200 Message-ID: <20160826000056.12806-1-dh.herrmann@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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: devicetree@vger.kernel.org, Daniel Vetter , Rob Herring , Hans de Goede , Maxime Ripard List-Id: devicetree@vger.kernel.org UHJvdmlkZSBhIGdlbmVyaWMgRFJNIGhlbHBlciB0aGF0IGV2aWN0cyBhbGwgY29uZmxpY3Rpbmcg ZmlybXdhcmUKZnJhbWVidWZmZXJzLCBkZXZpY2VzLCBhbmQgZHJpdmVycy4gVGhlIG5ldyBoZWxw ZXIgaXMgY2FsbGVkCmRybV9ldmljdF9maXJtd2FyZSgpLCBhbmQgdGFrZXMgYSBmbGFnc2V0IGNv bnRyb2xsaW5nIHdoaWNoIGZpcm13YXJlIHRvCmtpY2sgb3V0LgoKVGhpcyBpcyBtZWFudCB0byBi ZSB1c2VkIGJ5IGRyaXZlcnMgaW4gdGhlaXIgLT5wcm9iZSgpIGNhbGxiYWNrcyBvZiB0aGVpcgpw YXJlbnQgYnVzLCBiZWZvcmUgY2FsbGluZyBpbnRvIGRybV9kZXZfcmVnaXN0ZXIoKS4KClNpZ25l ZC1vZmYtYnk6IERhdmlkIEhlcnJtYW5uIDxkaC5oZXJybWFubkBnbWFpbC5jb20+Ci0tLQpIZXkK ClRoaXMgaXMganVzdCBjb21waWxlLXRlc3RlZCBmb3Igbm93LiBJIGp1c3Qgd2FudCB0byBnZXQg c29tZSBjb21tZW50cyBvbiB0aGUKZGVzaWduLiBJIGRlY2lkZWQgdG8gZHJvcCB0aGUgc3lzZmIg aW5mcmFzdHJ1Y3R1cmUgYW5kIHJhdGhlciBqdXN0IHVzZSB0aGlzCmdlbmVyaWMgaGVscGVyLiBJ dCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGFuZCBzaG91bGQgd29yayBqdXN0IGZpbmUgZm9yIGFsbApy ZWFzb25hYmxlIHVzZS1jYXNlcy4KClRoaXMgd2lsbCB3b3JrIHdpdGggU2ltcGxlRFJNIG91dC1v Zi10aGUtYm94IG9uIHg4Ni4KCkFyY2hpdGVjdHVyZXMgd2l0aCBkeW5hbWljIHNpbXBsZS1mcmFt ZWJ1ZmZlciBkZXZpY2VzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gSQphY3R1YWxseSBoYXZlIG5v IGlkZWEgd2hhdCB0aGUgc3RyYXRlZ3kgdGhlcmUgaXM/IENhbiB0aGUgRGV2aWNlVHJlZSBwZW9w bGUgY29tZQp1cCB3aXRoIHNvbWV0aGluZz8gQW0gSSBzdXBwb3NlZCB0byBjYWxsIG9mX3BsYXRm b3JtX2RlcG9wdWxhdGUoKT8gT3IKb2ZfZGV0YWNoX25vZGUoKT8gT3Igd2hhdD8KTG9va2luZyBh dCBkcml2ZXJzL29mL3twbGF0Zm9ybSxkeW5hbWljfS5jLCBJIGNhbm5vdCBzZWUgaG93IHRoaXMg aXMgc3VwcG9zZWQgdG8Kd29yayBhdCBhbGwuIFdobyBwcm90ZWN0cyBwbGF0Zm9ybV9kZXZpY2Vf ZGVsKCkgZnJvbSBiZWluZyBjYWxsZWQgaW4gcGFyYWxsZWw/CkFsc286IERvZXMgYW55IHBsYXRm b3JtIG1ha2UgdXNlIHRoZSBvZiAnZGlzcGxheTonIGVudHJ5IGluICdzaW1wbGUtZnJhbWVidWZm ZXInCkRUIG5vZGVzPyBJZiB5ZXMsIGhvdyBkbyBJIGdldCBhY2Nlc3MgdG8gaXQ/IEFuZCB3aHkg ZG9uJ3QgdmM0L3N1bjRpIG1ha2UgdXNlIG9mCml0LCByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sg dG8gcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycygpPwoKVGhhbmtzCkRhdmlkCgogZHJp dmVycy9ncHUvZHJtL2RybV9kcnYuYyB8IDI1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9kcm1QLmggICAgICAgIHwgIDEzICsrKwog MiBmaWxlcyBjaGFuZ2VkLCAyNzAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IDA3NzM1 NDcuLjU4MWMzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMjYsMTIgKzI2LDE2IEBACiAgKiBERUFMSU5H UyBJTiBUSEUgU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNp bmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRl IDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4 L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51 eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92dC5oPgog I2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJuYWwuaCIKICNp bmNsdWRlICJkcm1fbGVnYWN5LmgiCkBAIC04ODEsNiArODg1LDI1OSBAQCB2b2lkIGRybV9kZXZf dW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTChkcm1f ZGV2X3VucmVnaXN0ZXIpOwogCitzdHJ1Y3QgZHJtX2V2aWN0X2N0eCB7CisJc3RydWN0IGFwZXJ0 dXJlc19zdHJ1Y3QgKmFwOworCXVuc2lnbmVkIGludCBmbGFnczsKK307CisKK3N0YXRpYyBib29s IGRybV9ldmljdF9tYXRjaF9yZXNvdXJjZShzdHJ1Y3QgZHJtX2V2aWN0X2N0eCAqY3R4LAorCQkJ CSAgICAgc3RydWN0IHJlc291cmNlICptZW0pCit7CisJc3RydWN0IGFwZXJ0dXJlICpnOworCXVu c2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGN0eC0+YXAtPmNvdW50OyArK2kpIHsK KwkJZyA9ICZjdHgtPmFwLT5yYW5nZXNbaV07CisKKwkJaWYgKG1lbS0+c3RhcnQgPT0gZy0+YmFz ZSkKKwkJCXJldHVybiB0cnVlOworCQlpZiAobWVtLT5zdGFydCA+PSBnLT5iYXNlICYmIG1lbS0+ ZW5kIDwgZy0+YmFzZSArIGctPnNpemUpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJaWYgKChjdHgtPmZs YWdzICYgRFJNX0VWSUNUX1ZCRSkgJiYgbWVtLT5zdGFydCA9PSAweEEwMDAwKQorCQkJcmV0dXJu IHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGRybV9ldmljdF9w bGF0Zm9ybV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp1c2VyZGF0YSkKK3sKKwlz dHJ1Y3QgZHJtX2V2aWN0X2N0eCAqY3R4ID0gdXNlcmRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAq bWVtOworCisJLyoKKwkgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHN0YXRpYyBkZXZpY2Vz IGhlcmUgKGkuZS4sIHRoZXkgY2FycnkKKwkgKiBpbmZvcm1hdGlvbiB2aWEgYSBzdGF0aWNhbGx5 IGFsbG9jYXRlZCBwbGF0Zm9ybSBkYXRhIGZpZWxkKS4gQW55CisJICogZHluYW1pY2FsbHkgYWxs b2NhdGVkIGRldmljZXMgaGF2ZSBzZXBhcmF0ZSBvd25lcnNoaXAgbW9kZWxzIGFuZAorCSAqIG11 c3QgYmUgaGFuZGxlZCB2aWEgdGhlaXIgcmVzcGVjdGl2ZSBtYW5hZ2VtZW50IGNhbGxzLgorCSAq LworCWlmICghZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KSkKKwkJcmV0dXJuIDA7CisJaWYg KCFwZGV2LT5uYW1lKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKHBkZXYtPm5hbWUsICJz aW1wbGUtZnJhbWVidWZmZXIiKSkgeworCQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9NRU0sIDApOworCQlpZiAoIW1lbSkKKwkJCXJldHVybiAwOworCQlpZiAo IWRybV9ldmljdF9tYXRjaF9yZXNvdXJjZShjdHgsIG1lbSkpCisJCQlyZXR1cm4gMDsKKworCQlw bGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGRybV9ldmljdF9wbGF0Zm9ybShzdHJ1Y3QgZHJtX2V2aWN0X2N0eCAqY3R4KQoreworCS8q CisJICogRWFybHktYm9vdCBhcmNoaXRlY3R1cmUgc2V0dXAgYW5kIGJvb3QtbG9hcmRlcnMgc29t ZXRpbWVzIGNyZWF0ZQorCSAqIHByZWxpbWluYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBhIGdl bmVyaWMgZnJhbWVidWZmZXIgc2V0dXAuIFRoaXMKKwkgKiBhbGxvd3MgZ3JhcGhpY3MgYWNjZXNz IGR1cmluZyBib290LXVwLCB3aXRob3V0IGEgcmVhbCBncmFwaGljcworCSAqIGRyaXZlciBsb2Fk ZWQuIEhvd2V2ZXIsIG9uY2UgYSByZWFsIGdyYXBoaWNzIGRyaXZlciB0YWtlcyBvdmVyLCB3ZQor CSAqIGhhdmUgdG8gZGVzdHJveSB0aG9zZSBwbGF0Zm9ybSBkZXZpY2VzLiBJbiB0aGUgbGVnYWN5 IGZiZGV2IGNhc2UsIHdlCisJICoganVzdCB1c2VkIHRvIHVubG9hZCB0aGUgZmJkZXYgZHJpdmVy LiBIb3dldmVyLCB0byBtYWtlIHN1cmUgYW55IGtpbmQKKwkgKiBvZiBkcml2ZXIgaXMgdW5sb2Fk ZWQsIHRoZSBwbGF0Zm9ybS1ldmljdGlvbiBjb2RlIGhlcmUgc2ltcGx5CisJICogcmVtb3ZlcyBh bnkgY29uZmxpY3RpbmcgcGxhdGZvcm0gZGV2aWNlIGRpcmVjdGx5LiBUaGlzIGNhdXNlcyBhbnkK KwkgKiBib3VuZCBkcml2ZXIgdG8gYmUgZGV0YWNoZWQsIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGRl dmljZSBlbnRpcmVseSBzbworCSAqIGl0IGNhbm5vdCBiZSBib3VuZCB0byBsYXRlciBvbi4KKwkg KgorCSAqIFBsZWFzZSBub3RlIHRoYXQgYW55IHN1Y2ggcGxhdGZvcm0gZGV2aWNlIG11c3QgYmUg cmVnaXN0ZXJlZCBieQorCSAqIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCBjb2RlLiBJZiB0aGV5 IGFyZSByZWdpc3RlcmVkIGFmdGVyIHJlZ3VsYXIKKwkgKiBEUk0gZHJpdmVycywgdGhpcyB3aWxs IGZhaWwgaG9ycmlibHkuCisJICovCisKKwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCWlu dCByZXQ7CisKKwkvKgorCSAqIEluIGNhc2Ugb2Ygc3RhdGljIHBsYXRmb3JtLWRldmljZXMsIHdl IG11c3QgaXRlcmF0ZSB0aGUgYnVzIGFuZAorCSAqIHJlbW92ZSB0aGVtIG1hbnVhbGx5LiBXZSBr bm93IHRoYXQgd2UncmUgdGhlIG9ubHkgY29kZSB0aGF0IG1pZ2h0CisJICogcmVtb3ZlIHRoZW0s IHNvIGEgc2ltcGxlIHN0YXRpYyBsb2NrIHNlcmlhbGl6ZXMgYWxsIGNhbGxzIGhlcmUuIFdlCisJ ICogbXVzdCBtYWtlIHN1cmUgb3VyIGV2aWN0aW9uIGNhbGxiYWNrIGxlYXZlcyBhbnkgbm9uLXN0 YXRpYyBwbGF0Zm9ybQorCSAqIGRldmljZXMgdW50b3VjaGVkLCB0aG91Z2guCisJICoKKwkgKiBY WFg6IEFSTSBhbmQgb3RoZXIgT0YgdXNlcnMgc2hvdWxkIHJlYWxseSBtYWtlIHN1cmUgdG8gYWRk IHRoZWlyIG93bgorCSAqICAgICAgZXZpY3Rpb24gY29kZSBoZXJlLCBwb3NzaWJseSB1c2luZyB0 aGUgJ2Rpc3BsYXknIERULWhhbmRsZSBhcworCSAqICAgICAgZGVmaW5lZCBieSB0aGUgJ3NpbXBs ZS1mcmFtZWJ1ZmZlcicgT0Ytbm9kZS4KKwkgKi8KKwltdXRleF9sb2NrKCZsb2NrKTsKKwlyZXQg PSBidXNfZm9yX2VhY2hfZGV2KCZwbGF0Zm9ybV9idXNfdHlwZSwgTlVMTCwgY3R4LAorCQkJICAg ICAgIGRybV9ldmljdF9wbGF0Zm9ybV9kZXZpY2UpOworCW11dGV4X3VubG9jaygmbG9jayk7CisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkcm1fZXZpY3RfZmJkZXYoc3RydWN0IGRybV9l dmljdF9jdHggKmN0eCkKK3sKKwkvKgorCSAqIFdlIGhhdmUgMiBkaWZmZXJlbnQgY2FzZXMgd2hl cmUgZmJkZXYgZHJpdmVycyBjYW4gb3BlcmF0ZSBvbiB0aGUKKwkgKiBzYW1lIGRldmljZXMgYXMg RFJNIGRyaXZlcnM6CisJICoKKwkgKiAgIG8gVHdvIGRyaXZlcnMgZXhpc3QgZm9yIHRoZSBzYW1l IGRldmljZSwgb25lIERSTSBkcml2ZXIgYW5kIG9uZQorCSAqICAgICBmYmRldiBkcml2ZXIgKGUu Zy4sIG52aWRpYWZiIGFuZCBub3V2ZWF1KS4gSW4gdGhvc2UgY2FzZXMsIGJvdGgKKwkgKiAgICAg ZHJpdmVycyBiaW5kIHRvIHRoZSBzYW1lIHJlYWwgaHctZGV2aWNlIGFuZCBkcml2ZXIgY29yZSB0 YWtlcworCSAqICAgICBjYXJlIG9mIGFueSBjb25mbGljdHMuCisJICoKKwkgKiAgIG8gQSBnZW5l cmljIGZiZGV2IGRyaXZlciB1c2VzIHNvbWUgcHNldWRvLWRldmljZSB0byBwcm92aWRlCisJICog ICAgIGVhcmx5LWJvb3QgZ3JhcGhpY3MgYWNjZXNzIG9yIHNvbWUgb3RoZXIga2luZCBvZiBnZW5l cmljIGRpc3BsYXkKKwkgKiAgICAgZHJpdmVyLiBBdCB0aGUgc2FtZSB0aW1lLCBhIERSTSBkcml2 ZXIgZXhpc3RzIHRoYXQgY2FuIHJ1biB0aGUKKwkgKiAgICAgcmVhbCBoYXJkd2FyZSAoZS5nLiwg dmVzYWZiL2VmaWZiIGFuZCBpOTE1KS4KKwkgKgorCSAqIElmIHBvc3NpYmxlLCBkcml2ZXIgY29y ZSB0YWtlcyBjYXJlIG9mIGFueSBjb25mbGljdHMgYW5kIHByZXZlbnRzCisJICogdHdvIGRyaXZl cnMgZnJvbSBiZWluZyBib3VuZCB0byB0aGUgc2FtZSBkZXZpY2UuIEhvd2V2ZXIsIGluIHNvbWUK KwkgKiBjYXNlcyB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gV2UgdGhlbiB1c2UKKwkgKiByZW1vdmVf Y29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKCkgdG8gbWF0Y2ggdGhlIGFwZXJ0dXJlcyBvZiB0aGUg RFJNCisJICogZGV2aWNlIGFnYWluc3QgYWxsIGV4aXN0aW5nIGZiZGV2IGRldmljZXMsIGV2aWN0 aW5nIGFueSBjb25mbGljdGluZworCSAqIGZiZGV2IGRyaXZlcnMuIEFkZGl0aW9uYWxseSwgaWYg cmVxdWVzdGVkLCBhbnkgVkJFIGRyaXZlciBpcyBldmljdGVkCisJICogYXMgd2VsbC4KKwkgKgor CSAqIE5vdGUgdGhhdCB0aGlzIGJyZWFrcyBob3JyaWJseSBpZiBhbiBmYmRldiBkcml2ZXIgaXMg cHJvYmVkIGFmdGVyIGEKKwkgKiBEUk0gZHJpdmVyLiBTbyBtYWtlIHN1cmUgd2hlbmV2ZXIgc3Vj aCBjb25mbGljdHMgYXJlIHBvc3NpYmxlLCB0aGUKKwkgKiBmYmRldiBkcml2ZXJzIG11c3QgYmUg cHJvYmVkIGluIGVhcmx5IGJvb3QuIElmIHlvdSBjYW5ub3QgZ3VhcmFudGVlCisJICogdGhhdCwg eW91IGJldHRlciBtYWtlIHN1cmUgdGhhdCB0aGUgZHJpdmVyIGNvcmUgcHJldmVudHMgYm90aAor CSAqIGRyaXZlcnMgZnJvbSBiZWluZyBwcm9iZWQgaW4gcGFyYWxsZWwuCisJICovCisKKyNpZiAh ZGVmaW5lZChDT05GSUdfRkIpCisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiByZW1vdmVfY29u ZmxpY3RpbmdfZnJhbWVidWZmZXJzKGN0eC0+YXAsICJkcm0iLAorCQkJCQkgICAgICAgISEoY3R4 LT5mbGFncyAmIERSTV9FVklDVF9WQkUpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGRybV9l dmljdF92Z2Fjb24odm9pZCkKK3sKKwkvKgorCSAqIFRoZSBWR0FDT04gY29uc29sZSBkcml2ZXIg cG9rZXMgYXQgVkdBIHJlZ2lzdGVycyByYW5kb21seS4gSWYgYSBEUk0KKwkgKiBkcml2ZXIgY2Fu bm90IGtlZXAgdGhlIFZHQSBzdXBwb3J0IGFsaXZlLCBpdCBiZXR0ZXIgbWFrZXMgc3VyZSB0bwor CSAqIHVubG9hZCBWR0FDT04gYmVmb3JlIHByb2JpbmcuCisJICoKKwkgKiBVbmxvYWRpbmcgVkdB Q09OIHJlcXVpcmVzIHVzIHRvIGZpcnN0IGZvcmNlIGR1bW15Y29uIHRvIHRha2Ugb3ZlcgorCSAq IGZyb20gdmdhY29uIChidXQgb25seSBpZiB2Z2Fjb24gaXMgcmVhbGx5IGluIHVzZSksIGZvbGxv d2VkIGJ5IGEKKwkgKiBkZXJlZ2lzdHJhdGlvbiBvZiB2Z2Fjb24uIE5vdGUgdGhhdCB0aGlzIHBy ZXZlbnRzIHZnYWNvbiBmcm9tIGJlaW5nCisJICogdXNlZCBhZ2FpbiBhZnRlciB0aGUgRFJNIGRy aXZlciBpcyB1bmxvYWRlZC4gQnV0IHRoYXQgaXMgdXN1YWxseQorCSAqIGZpbmUsIHNpbmNlIFZH QSBzdGF0ZSBpcyByYXJlbHkgcmVzdG9yZWQgb24gZHJpdmVyLXVubG9hZCwgYW55d2F5LgorCSAq CisJICogTm90ZSB0aGF0IHdlIHJlbHkgb24gVkdBQ09OIHRvIGJlIHByb2JlZCBpbiBlYXJseSBi b290IChhY3R1YWxseQorCSAqIGRvbmUgYnkgQVJDSCBzZXR1cCBjb2RlKS4gSWYgaXQgaXMgcHJv YmVkIGFmdGVyIERSTSBkcml2ZXJzLCB0aGlzCisJICogd2lsbCBmYWlsIGhvcnJpYmx5LiBZb3Ug YmV0dGVyIG1ha2Ugc3VyZSBWR0FDT04gaXMgcHJvYmVkIGVhcmx5IGFuZAorCSAqIERSTSBkcml2 ZXJzIGFyZSBwcm9iZWQgYXMgbm9ybWFsIG1vZHVsZXMuCisJICovCisKKyNpZiAhZGVmaW5lZChD T05GSUdfVkdBX0NPTlNPTEUpCisJcmV0dXJuIDA7CisjZWxpZiAhZGVmaW5lZChDT05GSUdfRFVN TVlfQ09OU09MRSkKKyMJd2FybmluZyAiRHVtbXkgY29uc29sZSBpcyBkaXNhYmxlZCwgYnV0IHJl cXVpcmVkIHRvIGtpY2sgb3V0IFZHQUNPTiIKKwlyZXR1cm4gLUVOT0RFVjsKKyNlbHNlCisJaW50 IHJldCA9IDA7CisKKwlEUk1fSU5GTygiUmVwbGFjaW5nIFZHQSBjb25zb2xlIGRyaXZlclxuIik7 CisKKwljb25zb2xlX2xvY2soKTsKKwlpZiAoY29uX2lzX2JvdW5kKCZ2Z2FfY29uKSkKKwkJcmV0 ID0gZG9fdGFrZV9vdmVyX2NvbnNvbGUoJmR1bW15X2NvbiwgMCwKKwkJCQkJICAgTUFYX05SX0NP TlNPTEVTIC0gMSwgMSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGRvX3VucmVnaXN0ZXJf Y29uX2RyaXZlcigmdmdhX2Nvbik7CisJCWlmIChyZXQgPT0gLUVOT0RFVikgLyogaWdub3JlICJh bHJlYWR5IHVucmVnaXN0ZXJlZCIgKi8KKwkJCXJldCA9IDA7CisJfQorCWNvbnNvbGVfdW5sb2Nr KCk7CisKKwlyZXR1cm4gcmV0OworI2VuZGlmCit9CisKKy8qKgorICogZHJtX2V2aWN0X2Zpcm13 YXJlIC0gcmVtb3ZlIGFueSBjb25mbGljdGluZyBmaXJtd2FyZS1mcmFtZWJ1ZmZlcnMKKyAqIEBh cDoJCQlhcGVydHVyZXMgY2xhaW1lZCBieSBkcml2ZXIsIG9yIE5VTEwKKyAqIEBmbGFnczoJCWV2 aWN0aW9uIGZsYWdzCisgKgorICogVGhpcyBmdW5jdGlvbiBldmljdHMgYW55IGNvbmZsaWN0aW5n IGZpcm13YXJlLWZyYW1lYnVmZmVycyBhbmQgdGhlaXIgYm91bmQKKyAqIGRyaXZlcnMsIGFjY29y ZGluZyB0byB0aGUgZGF0YSBnaXZlbiBhcyBAYXAgYW5kIEBmbGFncy4KKyAqCisgKiBEZXBlbmRp bmcgb24gQGZsYWdzLCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZDoKKyAq CisgKiAgIERSTV9FVklDVF9GQkRFVjogQW55IGZiZGV2IGRyaXZlcnMgdGhhdCBvdmVybGFwIEBh cCBhcmUgdW5sb2FkZWQuCisgKiAgICAgICAgICAgICAgICAgICAgRnVydGhlcm1vcmUsIGlmIERS TV9FVklDVF9WQkUgaXMgZ2l2ZW4gYXMgd2VsbCwgYW55IGZiZGV2CisgKiAgICAgICAgICAgICAg ICAgICAgZHJpdmVyIHRoYXQgbWFwcyB0aGUgVkdBIHJlZ2lvbiBpcyB1bmxvYWRlZC4KKyAqCisg KiAgIERSTV9FVklDVF9QTEFURk9STTogRmlybXdhcmUgZnJhbWVidWZmZXIgcGxhdGZvcm0gZGV2 aWNlcyAoZWcuLAorICogICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUtZnJhbWVidWZmZXIn KSB0aGF0IG92ZXJsYXAgQGFwIGFyZSByZW1vdmVkCisgKiAgICAgICAgICAgICAgICAgICAgICAg ZnJvbSB0aGUgc3lzdGVtLCBjYXVzaW5nIGRyaXZlcnMgdG8gYmUgdW5ib3VuZC4KKyAqICAgICAg ICAgICAgICAgICAgICAgICBJZiBEUk1fRVZJQ1RfVkJFIGlzIGdpdmVuLCB0aGlzIGFsc28gYWZm ZWN0cyBkZXZpY2VzCisgKiAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBtYXAgdGhlIFZHQSBy ZWdpb24uCisgKgorICogICBEUk1fRVZJQ1RfVkdBQ09OOiBUaGUgdmdhY29uIGNvbnNvbGUgZHJp dmVyIGlzIHVuYm91bmQgYW5kIHVucmVnaXN0ZXJlZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3Qg cHJvdmlkZSB0aGVpciBhcGVydHVyZXMgYXMgQGFwLiBJZiBpdCBpcyBOVUxMLCBhbiBlbXB0eSBz ZXQKKyAqIGlzIGFzc3VtZWQsIGV4Y2VwdCBpZiBEUk1fRVZJQ1RfQU5ZV0hFUkUgaXMgZ2l2ZW4s IGluIHdoaWNoIGNhc2UgYSBmYWtlCisgKiBhcGVydHVyZSBhY3Jvc3MgdGhlIGVudGlyZSBhZGRy ZXNzIHJhbmdlIGlzIHVzZWQuCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcywgbmVn YXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2V2aWN0X2Zpcm13YXJl KHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphcCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0 cnVjdCBkcm1fZXZpY3RfY3R4IGN0eDsKKwlzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYWxsb2Nh dGVkX2FwID0gTlVMTDsKKwlpbnQgcmV0OworCisJV0FSTl9PTihhcCAmJiAoZmxhZ3MgJiBEUk1f RVZJQ1RfQU5ZV0hFUkUpKTsKKworCWlmICghYXApIHsKKwkJYWxsb2NhdGVkX2FwID0gYWxsb2Nf YXBlcnR1cmVzKCEhKGZsYWdzICYgRFJNX0VWSUNUX0FOWVdIRVJFKSk7CisJCWlmICghYWxsb2Nh dGVkX2FwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJYXAgPSBhbGxvY2F0ZWRfYXA7CisKKwkJ aWYgKGZsYWdzICYgRFJNX0VWSUNUX0FOWVdIRVJFKSB7CisJCQlhcC0+cmFuZ2VzWzBdLmJhc2Ug PSAwOworCQkJYXAtPnJhbmdlc1swXS5zaXplID0gfjA7CisJCX0KKwl9CisKKwljdHguYXAgPSBh cDsKKwljdHguZmxhZ3MgPSBmbGFnczsKKworCWlmIChmbGFncyAmIERSTV9FVklDVF9QTEFURk9S TSkgeworCQlyZXQgPSBkcm1fZXZpY3RfcGxhdGZvcm0oJmN0eCk7CisJCWlmIChyZXQgPCAwKQor CQkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBEUk1fRVZJQ1RfRkJERVYpIHsKKwkJ cmV0ID0gZHJtX2V2aWN0X2ZiZGV2KCZjdHgpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJaWYgKGZsYWdzICYgRFJNX0VWSUNUX1ZHQUNPTikgeworCQlyZXQgPSBkcm1f ZXZpY3RfdmdhY29uKCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlr ZnJlZShhbGxvY2F0ZWRfYXApOworCXJldHVybiAwOworfQorCiAvKgogICogRFJNIENvcmUKICAq IFRoZSBEUk0gY29yZSBtb2R1bGUgaW5pdGlhbGl6ZXMgYWxsIGdsb2JhbCBEUk0gb2JqZWN0cyBh bmQgbWFrZXMgdGhlbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9k cm0vZHJtUC5oCmluZGV4IDIxOTdhYjEuLjZjOGJjZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJt L2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTg4LDYgKzg4LDcgQEAgc3RydWN0 IGRybV9nZW1fb2JqZWN0Owogc3RydWN0IGRybV9tYXN0ZXI7CiBzdHJ1Y3QgZHJtX3ZibGFua19j cnRjOwogCitzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdDsKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIHN0 cnVjdCB2aWRlb21vZGU7CiBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0OwpAQCAtOTcxLDYgKzk3 MiwxOCBAQCB2b2lkIGRybV9kZXZfdW5yZWYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQg ZHJtX2Rldl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZs YWdzKTsKIHZvaWQgZHJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwog CitlbnVtIHsKKwlEUk1fRVZJQ1RfRkJERVYJCQkJPSAoMVUgPDwgIDApLAorCURSTV9FVklDVF9Q TEFURk9STQkJCT0gKDFVIDw8ICAxKSwKKwlEUk1fRVZJQ1RfVkdBQ09OCQkJPSAoMVUgPDwgIDIp LAorCURSTV9FVklDVF9WQkUJCQkJPSAoMVUgPDwgIDMpLAorCURSTV9FVklDVF9BTllXSEVSRQkJ CT0gKDFVIDw8ICA0KSwKKworCURSTV9FVklDVF9ERUZBVUxUID0gRFJNX0VWSUNUX0ZCREVWLAor fTsKKworaW50IGRybV9ldmljdF9maXJtd2FyZShzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYXAs IHVuc2lnbmVkIGludCBmbGFncyk7CisKIHN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vcl9hY3F1 aXJlKHVuc2lnbmVkIGludCBtaW5vcl9pZCk7CiB2b2lkIGRybV9taW5vcl9yZWxlYXNlKHN0cnVj dCBkcm1fbWlub3IgKm1pbm9yKTsKIAotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=