From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 7/7] iommu/arm-smmu: add support for dynamic domains Date: Tue, 7 Mar 2017 09:39:55 -0700 Message-ID: <1488904795-870-8-git-send-email-jcrouse@codeaurora.org> References: <1488904795-870-1-git-send-email-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1488904795-870-1-git-send-email-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Jeremy Gebben List-Id: iommu@lists.linux-foundation.org SW1wbGVtZW50IHN1cHBvcnQgZm9yIGR5bmFtaWMgZG9tYWluIHN3aXRjaGluZy4gVGhpcyBmZWF0 dXJlIGlzCm9ubHkgZW5hYmxlZCB3aGVuIHRoZSBxY29tLGR5bmFtaWMgZGV2aWNlIHRyZWUgYXR0 cmlidXRlIGZvciBhbiBzbW11Cmluc3RhbmNlLgoKSW4gb3JkZXIgdG8gdXNlIGR5bmFtaWMgZG9t YWlucywgYSBub24tZHluYW1pYyBkb21haW4gbXVzdCBmaXJzdApiZSBjcmVhdGVkIGFuZCBhdHRh Y2hlZC4gIFRoZSBub24tZHluYW1pYyBkb21haW4gbXVzdCByZW1haW4KYXR0YWNoZWQgd2hpbGUg dGhlIGRldmljZSBpcyBpbiB1c2UuCgpUaGUgZHluYW1pYyBkb21haW4gaXMgY2xvbmVkIGZyb20g dGhlIG5vbi1keW5hbWljIGRvbWFpbi4gSW1wb3J0YW50CmNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp b24gaXMgY29waWVkIGZyb20gdGhlIG5vbi1keW5hbWljIGRvbWFpbiBhbmQKdGhlIGR5bmFtaWMg ZG9tYWluIGlzIGF1dG9tYXRpY2FsbHkgImF0dGFjaGVkIiAodGhvdWdoIGl0IGRvZXNuJ3QKcHJv Z3JhbSB0aGUgaGFyZHdhcmUpLgoKVG8gc3dpdGNoIGRvbWFpbnMgZHluYW1pY2FsbHkgdGhlIGhh cmR3YXJlIG11c3QgcHJvZ3JhbSB0aGUgVFRCUjAgcmVnaXN0ZXIKd2l0aCB0aGUgdmFsdWUgZnJv bSB0aGUgRE9NQUlOX0FUVFJfVFRCUjAgYXR0cmlidXRlIGZvciB0aGUgZHluYW1pYyBkb21haW4u ClRoZSB1cHN0cmVhbSBkcml2ZXIgbWF5IGFsc28gbmVlZCB0byBkbyBvdGhlciBoYXJkd2FyZSBz cGVjaWZpYyByZWdpc3Rlcgpwcm9ncmFtbWluZyB0byBwcm9wZXJseSBzeW5jaHJvbml6ZSB0aGUg ZG9tYWluIHN3aXRjaC4gSXQgbXVzdCBlbnN1cmUgdGhhdAphbGwgcmVnaXN0ZXIgc3RhdGUgZXhj ZXB0IGZvciB0aGUgVFRCUjAgcmVnaXN0ZXIgaXMgcmVzdG9yZWQKYXQgdGhlIGVuZCBvZiB0aGUg c3dpdGNoIG9wZXJhdGlvbi4KClNpZ25lZC1vZmYtYnk6IEplcmVteSBHZWJiZW4gPGpnZWJiZW5A Y29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IEpvcmRhbiBDcm91c2UgPGpjcm91c2VAY29k ZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9pb21tdS9hcm0tc21tdS5jIHwgMTU3ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MTM2IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv aW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwppbmRleCBlMDUxNzUw Li4zNDk0M2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FybS1zbW11LmMKKysrIGIvZHJp dmVycy9pb21tdS9hcm0tc21tdS5jCkBAIC0zNDksNiArMzQ5LDcgQEAgc3RydWN0IGFybV9zbW11 X2RldmljZSB7CiAJdTMyCQkJCWZlYXR1cmVzOwogCiAjZGVmaW5lIEFSTV9TTU1VX09QVF9TRUNV UkVfQ0ZHX0FDQ0VTUyAoMSA8PCAwKQorI2RlZmluZSBBUk1fU01NVV9PUFRfRFlOQU1JQwkJKDEg PDwgMSkKIAl1MzIJCQkJb3B0aW9uczsKIAllbnVtIGFybV9zbW11X2FyY2hfdmVyc2lvbgl2ZXJz aW9uOwogCWVudW0gYXJtX3NtbXVfaW1wbGVtZW50YXRpb24JbW9kZWw7CkBAIC0zNzcsNiArMzc4 LDggQEAgc3RydWN0IGFybV9zbW11X2RldmljZSB7CiAJc3RydWN0IGNsayAgICAgICAgICAgICAg ICAgICAgICAqKmNsb2NrczsKIAogCXUzMgkJCQljYXZpdW1faWRfYmFzZTsgLyogU3BlY2lmaWMg dG8gQ2F2aXVtICovCisKKwlzdHJ1Y3QgaWRhCQkJYXNpZF9pZGE7CiB9OwogCiBlbnVtIGFybV9z bW11X2NvbnRleHRfZm10IHsKQEAgLTM5MSwxMSArMzk0LDE3IEBAIHN0cnVjdCBhcm1fc21tdV9j ZmcgewogCXU4CQkJCWlycHRuZHg7CiAJdTMyCQkJCWNiYXI7CiAJZW51bSBhcm1fc21tdV9jb250 ZXh0X2ZtdAlmbXQ7CisJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2lkOworCXU4 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1pZDsKIH07CiAjZGVmaW5lIElOVkFMSURf SVJQVE5EWAkJCTB4ZmYKKyNkZWZpbmUgSU5WQUxJRF9BU0lEICAgICAgICAgICAgICAgICAgIDB4 ZmZmZgorCisvKiAweGZmIGlzIGEgcmVhc29uYWJsZSBsaW1pdCB0aGF0IHdvcmtzIGZvciBhbGwg dGFyZ2V0cyAqLworI2RlZmluZSBNQVhfQVNJRAkJCTB4ZmYKIAotI2RlZmluZSBBUk1fU01NVV9D Ql9BU0lEKHNtbXUsIGNmZykgKCh1MTYpKHNtbXUpLT5jYXZpdW1faWRfYmFzZSArIChjZmcpLT5j Ym5keCkKLSNkZWZpbmUgQVJNX1NNTVVfQ0JfVk1JRChzbW11LCBjZmcpICgodTE2KShzbW11KS0+ Y2F2aXVtX2lkX2Jhc2UgKyAoY2ZnKS0+Y2JuZHggKyAxKQorI2RlZmluZSBBUk1fU01NVV9DQl9B U0lEKHNtbXUsIGNmZykgKCh1MTYpKHNtbXUpLT5jYXZpdW1faWRfYmFzZSArIChjZmcpLT5hc2lk KQorI2RlZmluZSBBUk1fU01NVV9DQl9WTUlEKHNtbXUsIGNmZykgKCh1MTYpKHNtbXUpLT5jYXZp dW1faWRfYmFzZSArIChjZmcpLT52bWlkKQogCiBlbnVtIGFybV9zbW11X2RvbWFpbl9zdGFnZSB7 CiAJQVJNX1NNTVVfRE9NQUlOX1MxID0gMCwKQEAgLTQyNiw2ICs0MzUsNyBAQCBzdHJ1Y3QgYXJt X3NtbXVfb3B0aW9uX3Byb3AgewogCiBzdGF0aWMgc3RydWN0IGFybV9zbW11X29wdGlvbl9wcm9w IGFybV9zbW11X29wdGlvbnNbXSA9IHsKIAl7IEFSTV9TTU1VX09QVF9TRUNVUkVfQ0ZHX0FDQ0VT UywgImNhbHhlZGEsc21tdS1zZWN1cmUtY29uZmlnLWFjY2VzcyIgfSwKKwl7IEFSTV9TTU1VX09Q VF9EWU5BTUlDLCAicWNvbSxkeW5hbWljIiB9LAogCXsgMCwgTlVMTH0sCiB9OwogCkBAIC00NzMs NiArNDgzLDExIEBAIHN0YXRpYyB2b2lkIHBhcnNlX2RyaXZlcl9vcHRpb25zKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKnNtbXUpCiAJfSB3aGlsZSAoYXJtX3NtbXVfb3B0aW9uc1srK2ldLm9wdCk7 CiB9CiAKK3N0YXRpYyBib29sIGlzX2R5bmFtaWNfZG9tYWluKHN0cnVjdCBpb21tdV9kb21haW4g KmRvbWFpbikKK3sKKwlyZXR1cm4gISEoZG9tYWluLT50eXBlICYgKF9fSU9NTVVfRE9NQUlOX0RZ TkFNSUMpKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X2dldF9kZXZfbm9k ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRldl9pc19wY2koZGV2KSkgewpAQCAtNjAy LDYgKzYxNywxMCBAQCBzdGF0aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKnNtbXUpCiBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJfc3luYyh2b2lkICpj b29raWUpCiB7CiAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4gPSBjb29raWU7 CisKKwlpZiAoIXNtbXVfZG9tYWluLT5zbW11KQorCQlyZXR1cm47CisKIAlfX2FybV9zbW11X3Rs Yl9zeW5jKHNtbXVfZG9tYWluLT5zbW11KTsKIH0KIApAQCAtODMyLDYgKzg1MSw0NCBAQCBzdGF0 aWMgdm9pZCBhcm1fc21tdV9pbml0X2NvbnRleHRfYmFuayhzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu ICpzbW11X2RvbWFpbiwKIAl3cml0ZWxfcmVsYXhlZChyZWcsIGNiX2Jhc2UgKyBBUk1fU01NVV9D Ql9TQ1RMUik7CiB9CiAKK3N0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9hc2lkKHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbiwKKwkJCQlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQorewor CXN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9t YWluKTsKKwlzdHJ1Y3QgYXJtX3NtbXVfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPmNmZzsKKwlp bnQgcmV0OworCisJLyogRm9yIHJlZ3VsYXIgZG9tYWlucyB0aGUgYXNpZCBpcyB0aGUgY29udGV4 dCBiYW5rIGlkICovCisJaWYgKGxpa2VseSghaXNfZHluYW1pY19kb21haW4oZG9tYWluKSkpIHsK KwkJY2ZnLT5hc2lkID0gY2ZnLT5jYm5keDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBG b3IgZHluYW1pYyBkb21haW5zLCBhbGxvY2F0ZSBhIHVuaXF1ZSBhc2lkIGZyb20gb3VyIHBvb2wg b2YgdmlydHVhbAorCSAqIHZhbHVlcworCSAqLworCXJldCA9IGlkYV9zaW1wbGVfZ2V0KCZzbW11 LT5hc2lkX2lkYSwgc21tdS0+bnVtX2NvbnRleHRfYmFua3MgKyAyLAorCQlNQVhfQVNJRCArIDEs IEdGUF9LRVJORUwpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoc21tdS0+ZGV2LCAiZHlu YW1pYyBBU0lEIGFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwljZmctPmFzaWQgPSByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFy bV9zbW11X2ZyZWVfYXNpZChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCit7CisJc3RydWN0 IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4gPSB0b19zbW11X2RvbWFpbihkb21haW4pOwor CXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11X2RvbWFpbi0+c21tdTsKKwlzdHJ1 Y3QgYXJtX3NtbXVfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPmNmZzsKKworCWlmIChjZmctPmFz aWQgIT0gSU5WQUxJRF9BU0lEICYmIGlzX2R5bmFtaWNfZG9tYWluKGRvbWFpbikpCisJCWlkYV9z aW1wbGVfcmVtb3ZlKCZzbW11LT5hc2lkX2lkYSwgY2ZnLT5hc2lkKTsKK30KKwogc3RhdGljIGlu dCBhcm1fc21tdV9pbml0X2RvbWFpbl9jb250ZXh0KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFp biwKIAkJCQkJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIHsKQEAgLTg0MSw2ICs4OTgs NyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2luaXRfZG9tYWluX2NvbnRleHQoc3RydWN0IGlvbW11 X2RvbWFpbiAqZG9tYWluLAogCWVudW0gaW9fcGd0YWJsZV9mbXQgZm10OwogCXN0cnVjdCBhcm1f c21tdV9kb21haW4gKnNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKIAlzdHJ1 Y3QgYXJtX3NtbXVfY2ZnICpjZmcgPSAmc21tdV9kb21haW4tPmNmZzsKKwlib29sIGR5bmFtaWMg PSBpc19keW5hbWljX2RvbWFpbihkb21haW4pOwogCXVuc2lnbmVkIGludCBxdWlya3MgPQogCQlz bW11X2RvbWFpbi0+YXR0cmlidXRlcyAmICgxIDw8IERPTUFJTl9BVFRSX0VOQUJMRV9UVEJSMSkg PwogCQkJSU9fUEdUQUJMRV9RVUlSS19BUk1fVFRCUjEgOiAwOwpAQCAtODQ5LDYgKzkwNyw4IEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9kb21haW5fY29udGV4dChzdHJ1Y3QgaW9tbXVfZG9t YWluICpkb21haW4sCiAJaWYgKHNtbXVfZG9tYWluLT5zbW11KQogCQlnb3RvIG91dF91bmxvY2s7 CiAKKwlzbW11X2RvbWFpbi0+Y2ZnLmFzaWQgPSBJTlZBTElEX0FTSUQ7CisKIAkvKgogCSAqIE1h cHBpbmcgdGhlIHJlcXVlc3RlZCBzdGFnZSBvbnRvIHdoYXQgd2Ugc3VwcG9ydCBpcyBzdXJwcmlz aW5nbHkKIAkgKiBjb21wbGljYXRlZCwgbWFpbmx5IGJlY2F1c2UgdGhlIHNwZWMgYWxsb3dzIFMx K1MyIFNNTVVzIHdpdGhvdXQKQEAgLTkzOSwxMiArOTk5LDE0IEBAIHN0YXRpYyBpbnQgYXJtX3Nt bXVfaW5pdF9kb21haW5fY29udGV4dChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJCWdv dG8gb3V0X3VubG9jazsKIAl9CiAKLQlyZXQgPSBfX2FybV9zbW11X2FsbG9jX2JpdG1hcChzbW11 LT5jb250ZXh0X21hcCwgc3RhcnQsCi0JCQkJICAgICAgc21tdS0+bnVtX2NvbnRleHRfYmFua3Mp OwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQljZmctPmNibmR4ID0gcmV0 OworCS8qIER5bmFtaWMgZG9tYWlucyB3aWxsIGluaGVyaXQgY2JuZHggZnJvbSB0aGUgcGFyZW50 ICovCisJaWYgKCFkeW5hbWljKSB7CisJCXJldCA9IF9fYXJtX3NtbXVfYWxsb2NfYml0bWFwKHNt bXUtPmNvbnRleHRfbWFwLCBzdGFydCwKKwkJCQkJICAgICAgc21tdS0+bnVtX2NvbnRleHRfYmFu a3MpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJY2ZnLT5jYm5keCA9 IHJldDsKKwl9CiAJaWYgKHNtbXUtPnZlcnNpb24gPCBBUk1fU01NVV9WMikgewogCQljZmctPmly cHRuZHggPSBhdG9taWNfaW5jX3JldHVybigmc21tdS0+aXJwdG5keCk7CiAJCWNmZy0+aXJwdG5k eCAlPSBzbW11LT5udW1fY29udGV4dF9pcnFzOwpAQCAtOTYxLDYgKzEwMjMsOCBAQCBzdGF0aWMg aW50IGFybV9zbW11X2luaXRfZG9tYWluX2NvbnRleHQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9t YWluLAogCQkuaW9tbXVfZGV2CT0gc21tdS0+ZGV2LAogCX07CiAKKwljZmctPnZtaWQgPSBjZmct PmNibmR4ICsgMTsKKwogCXNtbXVfZG9tYWluLT5zbW11ID0gc21tdTsKIAlwZ3RibF9vcHMgPSBh bGxvY19pb19wZ3RhYmxlX29wcyhmbXQsICZzbW11X2RvbWFpbi0+cGd0YmxfY2ZnLAogCQkJCQkg c21tdV9kb21haW4pOwpAQCAtOTc0LDE5ICsxMDM4LDMwIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVf aW5pdF9kb21haW5fY29udGV4dChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCiAJZG9tYWlu LT5nZW9tZXRyeS5hcGVydHVyZV9lbmQgPSAoMVVMIDw8IGlhcykgLSAxOwogCWRvbWFpbi0+Z2Vv bWV0cnkuZm9yY2VfYXBlcnR1cmUgPSB0cnVlOwogCi0JLyogSW5pdGlhbGlzZSB0aGUgY29udGV4 dCBiYW5rIHdpdGggb3VyIHBhZ2UgdGFibGUgY2ZnICovCi0JYXJtX3NtbXVfaW5pdF9jb250ZXh0 X2Jhbmsoc21tdV9kb21haW4sICZzbW11X2RvbWFpbi0+cGd0YmxfY2ZnKTsKKwkvKiBBc3NpZ24g YW4gYXNpZCAqLworCXJldCA9IGFybV9zbW11X2luaXRfYXNpZChkb21haW4sIHNtbXUpOworCWlm IChyZXQpCisJCWdvdG8gb3V0X2NsZWFyX3NtbXU7CiAKLQkvKgotCSAqIFJlcXVlc3QgY29udGV4 dCBmYXVsdCBpbnRlcnJ1cHQuIERvIHRoaXMgbGFzdCB0byBhdm9pZCB0aGUKLQkgKiBoYW5kbGVy IHNlZWluZyBhIGhhbGYtaW5pdGlhbGlzZWQgZG9tYWluIHN0YXRlLgotCSAqLwotCWlycSA9IHNt bXUtPmlycXNbc21tdS0+bnVtX2dsb2JhbF9pcnFzICsgY2ZnLT5pcnB0bmR4XTsKLQlyZXQgPSBk ZXZtX3JlcXVlc3RfaXJxKHNtbXUtPmRldiwgaXJxLCBhcm1fc21tdV9jb250ZXh0X2ZhdWx0LAot CQkJICAgICAgIElSUUZfU0hBUkVELCAiYXJtLXNtbXUtY29udGV4dC1mYXVsdCIsIGRvbWFpbik7 Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihzbW11LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVz dCBjb250ZXh0IElSUSAlZCAoJXUpXG4iLAotCQkJY2ZnLT5pcnB0bmR4LCBpcnEpOworCWlmICgh ZHluYW1pYykgeworCQkvKiBJbml0aWFsaXNlIHRoZSBjb250ZXh0IGJhbmsgd2l0aCBvdXIgcGFn ZSB0YWJsZSBjZmcgKi8KKwkJYXJtX3NtbXVfaW5pdF9jb250ZXh0X2Jhbmsoc21tdV9kb21haW4s CisJCQkJCQkmc21tdV9kb21haW4tPnBndGJsX2NmZyk7CisKKwkJLyoKKwkJICogUmVxdWVzdCBj b250ZXh0IGZhdWx0IGludGVycnVwdC4gRG8gdGhpcyBsYXN0IHRvIGF2b2lkIHRoZQorCQkgKiBo YW5kbGVyIHNlZWluZyBhIGhhbGYtaW5pdGlhbGlzZWQgZG9tYWluIHN0YXRlLgorCQkgKi8KKwkJ aXJxID0gc21tdS0+aXJxc1tzbW11LT5udW1fZ2xvYmFsX2lycXMgKyBjZmctPmlycHRuZHhdOwor CQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHNtbXUtPmRldiwgaXJxLCBhcm1fc21tdV9jb250ZXh0 X2ZhdWx0LAorCQkJCUlSUUZfU0hBUkVELCAiYXJtLXNtbXUtY29udGV4dC1mYXVsdCIsIGRvbWFp bik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKHNtbXUtPmRldiwgImZhaWxlZCB0byBy ZXF1ZXN0IGNvbnRleHQgSVJRICVkICgldSlcbiIsCisJCQkJY2ZnLT5pcnB0bmR4LCBpcnEpOwor CQkJY2ZnLT5pcnB0bmR4ID0gSU5WQUxJRF9JUlBUTkRYOworCQkJZ290byBvdXRfY2xlYXJfc21t dTsKKwkJfQorCX0gZWxzZSB7CiAJCWNmZy0+aXJwdG5keCA9IElOVkFMSURfSVJQVE5EWDsKIAl9 CiAKQEAgLTEwMTQsNiArMTA4OSwxMiBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9kZXN0cm95X2Rv bWFpbl9jb250ZXh0KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIAlpZiAoIXNtbXUpCiAJ CXJldHVybjsKIAorCWlmIChpc19keW5hbWljX2RvbWFpbihkb21haW4pKSB7CisJCWFybV9zbW11 X2ZyZWVfYXNpZChkb21haW4pOworCQlmcmVlX2lvX3BndGFibGVfb3BzKHNtbXVfZG9tYWluLT5w Z3RibF9vcHMpOworCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiBEaXNhYmxlIHRoZSBjb250ZXh0 IGJhbmsgYW5kIGZyZWUgdGhlIHBhZ2UgdGFibGVzIGJlZm9yZSBmcmVlaW5nCiAJICogaXQuCkBA IC0xMDIxLDYgKzExMDIsOCBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9kZXN0cm95X2RvbWFpbl9j b250ZXh0KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKIAljYl9iYXNlID0gQVJNX1NNTVVf Q0JfQkFTRShzbW11KSArIEFSTV9TTU1VX0NCKHNtbXUsIGNmZy0+Y2JuZHgpOwogCXdyaXRlbF9y ZWxheGVkKDAsIGNiX2Jhc2UgKyBBUk1fU01NVV9DQl9TQ1RMUik7CiAKKwlhcm1fc21tdV90bGJf aW52X2NvbnRleHQoc21tdV9kb21haW4pOworCiAJaWYgKGNmZy0+aXJwdG5keCAhPSBJTlZBTElE X0lSUFRORFgpIHsKIAkJaXJxID0gc21tdS0+aXJxc1tzbW11LT5udW1fZ2xvYmFsX2lycXMgKyBj ZmctPmlycHRuZHhdOwogCQlkZXZtX2ZyZWVfaXJxKHNtbXUtPmRldiwgaXJxLCBkb21haW4pOwpA QCAtMTAzNCw3ICsxMTE3LDggQEAgc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11 X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBlKQogewogCXN0cnVjdCBhcm1fc21tdV9kb21haW4g KnNtbXVfZG9tYWluOwogCi0JaWYgKHR5cGUgIT0gSU9NTVVfRE9NQUlOX1VOTUFOQUdFRCAmJiB0 eXBlICE9IElPTU1VX0RPTUFJTl9ETUEpCisJaWYgKHR5cGUgIT0gSU9NTVVfRE9NQUlOX1VOTUFO QUdFRCAmJiB0eXBlICE9IElPTU1VX0RPTUFJTl9ETUEgJiYKKwkJdHlwZSAhPSBJT01NVV9ET01B SU5fRFlOQU1JQykKIAkJcmV0dXJuIE5VTEw7CiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgZG9tYWlu IGFuZCBpbml0aWFsaXNlIHNvbWUgb2YgaXRzIGRhdGEgc3RydWN0dXJlcy4KQEAgLTEyNTcsNiAr MTM0MSwxMCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2F0dGFjaF9kZXYoc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJc3RydWN0IGFybV9zbW11X2Rldmlj ZSAqc21tdTsKIAlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiA9IHRvX3NtbXVf ZG9tYWluKGRvbWFpbik7CiAKKwkvKiBEeW5hbWljIGRvbWFpbnMgZG8gbm90IG5lZWQgdG8gYmUg YXR0YWNoZWQgKi8KKwlpZiAoaXNfZHluYW1pY19kb21haW4oZG9tYWluKSkKKwkJcmV0dXJuIDA7 CisKIAlpZiAoIWZ3c3BlYyB8fCBmd3NwZWMtPm9wcyAhPSAmYXJtX3NtbXVfb3BzKSB7CiAJCWRl dl9lcnIoZGV2LCAiY2Fubm90IGF0dGFjaCB0byBTTU1VLCBpcyBpdCBvbiB0aGUgc2FtZSBidXM/ XG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTE1MzEsNiArMTYxOSwyOSBAQCBzdGF0aWMgc3Ry dWN0IGlvbW11X2dyb3VwICphcm1fc21tdV9kZXZpY2VfZ3JvdXAoc3RydWN0IGRldmljZSAqZGV2 KQogCXJldHVybiBncm91cDsKIH0KIAorc3RhdGljIGludCBhcm1fc21tdV9kb21haW5faW5pdF9k eW5hbWljKHN0cnVjdCBpb21tdV9kb21haW4gKnBhcmVudCwKKwkJc3RydWN0IGlvbW11X2RvbWFp biAqY2hpbGQpCit7CisJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqcGFyZW50X2RvbWFpbiA9IHRv X3NtbXVfZG9tYWluKHBhcmVudCk7CisJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqY2hpbGRfZG9t YWluID0gdG9fc21tdV9kb21haW4oY2hpbGQpOworCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXUgPSBwYXJlbnRfZG9tYWluLT5zbW11OworCisJLyogV2UgY2FuJ3QgZG8gYW55IG9mIHRoaXMg dW50aWwgdGhlIHBhcmVudCBpcyBhdHRhY2hlZCAqLworCWlmICghc21tdSkKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwlpZiAoIShzbW11LT5vcHRpb25zICYgQVJNX1NNTVVfT1BUX0RZTkFNSUMpKSB7 CisJCWRldl9lcnIoc21tdS0+ZGV2LCAiZHluYW1pYyBkb21haW5zIGFyZSBub3Qgc3VwcG9ydGVk XG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKiBDb3B5IHRoZSBjb250ZXh0IGJhbmsg ZnJvbSB0aGUgcGFyZW50ICovCisJY2hpbGRfZG9tYWluLT5jZmcuY2JuZHggPSBwYXJlbnRfZG9t YWluLT5jZmcuY2JuZHg7CisKKwkvKiBJbml0aWFsaXplIHRoZSBjb250ZXh0IGFuZCBjcmVhdGUg YWxsIHRoZSB1c2VmdWwgc3R1ZmYgKi8KKwlyZXR1cm4gYXJtX3NtbXVfaW5pdF9kb21haW5fY29u dGV4dChjaGlsZCwgc21tdSk7Cit9CisKIHN0YXRpYyBpbnQgYXJtX3NtbXVfZG9tYWluX2dldF9h dHRyKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgZW51bSBpb21tdV9hdHRy IGF0dHIsIHZvaWQgKmRhdGEpCiB7CkBAIC0xNjI2LDYgKzE3MzcsNyBAQCBzdGF0aWMgaW50IGFy bV9zbW11X29mX3hsYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9mX3BoYW5kbGVfYXJn cyAqYXJncykKIAkuZG9tYWluX2dldF9hdHRyCT0gYXJtX3NtbXVfZG9tYWluX2dldF9hdHRyLAog CS5kb21haW5fc2V0X2F0dHIJPSBhcm1fc21tdV9kb21haW5fc2V0X2F0dHIsCiAJLm9mX3hsYXRl CQk9IGFybV9zbW11X29mX3hsYXRlLAorCS5kb21haW5faW5pdF9keW5hbWljCT0gYXJtX3NtbXVf ZG9tYWluX2luaXRfZHluYW1pYywKIAkucGdzaXplX2JpdG1hcAkJPSAtMVVMLCAvKiBSZXN0cmlj dGVkIGR1cmluZyBkZXZpY2UgYXR0YWNoICovCiB9OwogCkBAIC0yMDM3LDYgKzIxNDksNyBAQCBz dGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc21tdS0+ZGV2ID0gZGV2OworCWlkYV9p bml0KCZzbW11LT5hc2lkX2lkYSk7CiAKIAlkYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRh KGRldik7CiAJc21tdS0+dmVyc2lvbiA9IGRhdGEtPnZlcnNpb247CkBAIC0yMTQ4LDYgKzIyNjEs OCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIAlpZiAoIWJpdG1hcF9lbXB0eShzbW11LT5jb250ZXh0X21hcCwgQVJNX1NN TVVfTUFYX0NCUykpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlbW92aW5nIGRldmljZSB3aXRo IGFjdGl2ZSBkb21haW5zIVxuIik7CiAKKwlpZGFfZGVzdHJveSgmc21tdS0+YXNpZF9pZGEpOwor CiAJLyogVHVybiB0aGUgdGhpbmcgb2ZmICovCiAJd3JpdGVsKHNDUjBfQ0xJRU5UUEQsIEFSTV9T TU1VX0dSMF9OUyhzbW11KSArIEFSTV9TTU1VX0dSMF9zQ1IwKTsKIAotLSAKMS45LjEKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWls aW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=