From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH RFC 18/24] drm/lima: add TTM subsystem functions Date: Fri, 18 May 2018 17:28:09 +0800 Message-ID: <20180518092815.25280-19-yuq825@gmail.com> References: <20180518092815.25280-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180518092815.25280-1-yuq825@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, devicetree@vger.kernel.org Cc: Simon Shields , Marek Vasut , Connor Abbott , Neil Armstrong , Andrei Paulau <7134956@gmail.com>, Vasily Khoruzhick , Qiang Yu , Erico Nunes List-Id: devicetree@vger.kernel.org U2lnbmVkLW9mZi1ieTogUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV90dG0uYyB8IDQwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV90dG0uaCB8ICA0NCArKysrCiAyIGZpbGVz IGNoYW5nZWQsIDQ1MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV90dG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfdHRtLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV90dG0uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjUzMjVmM2Y0OGFlNwotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdHRtLmMKQEAgLTAsMCArMSw0MDkgQEAKKy8qCisg KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBMaW1hIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq LworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9wYWdlX2Fs bG9jLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rydi5oIgorI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgi CisjaW5jbHVkZSAibGltYV9vYmplY3QuaCIKKworCitzdGF0aWMgaW50IGxpbWFfdHRtX21lbV9n bG9iYWxfaW5pdChzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikKK3sKKwlyZXR1cm4g dHRtX21lbV9nbG9iYWxfaW5pdChyZWYtPm9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFf dHRtX21lbV9nbG9iYWxfcmVsZWFzZShzdHJ1Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKnJlZikK K3sKKwl0dG1fbWVtX2dsb2JhbF9yZWxlYXNlKHJlZi0+b2JqZWN0KTsKK30KKworc3RhdGljIGlu dCBsaW1hX3R0bV9nbG9iYWxfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgZHJtX2dsb2JhbF9yZWZlcmVuY2UgKmdsb2JhbF9yZWY7CisJaW50IGVycjsKKworCWRldi0+ bW1hbi5tZW1fZ2xvYmFsX3JlZmVyZW5jZWQgPSBmYWxzZTsKKwlnbG9iYWxfcmVmID0gJmRldi0+ bW1hbi5tZW1fZ2xvYmFsX3JlZjsKKwlnbG9iYWxfcmVmLT5nbG9iYWxfdHlwZSA9IERSTV9HTE9C QUxfVFRNX01FTTsKKwlnbG9iYWxfcmVmLT5zaXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fbWVtX2ds b2JhbCk7CisJZ2xvYmFsX3JlZi0+aW5pdCA9ICZsaW1hX3R0bV9tZW1fZ2xvYmFsX2luaXQ7CisJ Z2xvYmFsX3JlZi0+cmVsZWFzZSA9ICZsaW1hX3R0bV9tZW1fZ2xvYmFsX3JlbGVhc2U7CisKKwll cnIgPSBkcm1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCWlmIChlcnIgIT0gMCkgewor CQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHNldHRpbmcgdXAgVFRNIG1lbW9yeSBhY2NvdW50 aW5nICIKKwkJCSJzdWJzeXN0ZW0uXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkZXYtPm1t YW4uYm9fZ2xvYmFsX3JlZi5tZW1fZ2xvYiA9CisJCWRldi0+bW1hbi5tZW1fZ2xvYmFsX3JlZi5v YmplY3Q7CisJZ2xvYmFsX3JlZiA9ICZkZXYtPm1tYW4uYm9fZ2xvYmFsX3JlZi5yZWY7CisJZ2xv YmFsX3JlZi0+Z2xvYmFsX3R5cGUgPSBEUk1fR0xPQkFMX1RUTV9CTzsKKwlnbG9iYWxfcmVmLT5z aXplID0gc2l6ZW9mKHN0cnVjdCB0dG1fYm9fZ2xvYmFsKTsKKwlnbG9iYWxfcmVmLT5pbml0ID0g JnR0bV9ib19nbG9iYWxfaW5pdDsKKwlnbG9iYWxfcmVmLT5yZWxlYXNlID0gJnR0bV9ib19nbG9i YWxfcmVsZWFzZTsKKwllcnIgPSBkcm1fZ2xvYmFsX2l0ZW1fcmVmKGdsb2JhbF9yZWYpOworCWlm IChlcnIgIT0gMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHNldHRpbmcgdXAgVFRN IEJPIHN1YnN5c3RlbS5cbiIpOworCQlkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoJmRldi0+bW1hbi5t ZW1fZ2xvYmFsX3JlZik7CisJCXJldHVybiBlcnI7CisJfQorCisJZGV2LT5tbWFuLm1lbV9nbG9i YWxfcmVmZXJlbmNlZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFf dHRtX2dsb2JhbF9maW5pKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPm1t YW4ubWVtX2dsb2JhbF9yZWZlcmVuY2VkKSB7CisJCWRybV9nbG9iYWxfaXRlbV91bnJlZigmZGV2 LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmKTsKKwkJZHJtX2dsb2JhbF9pdGVtX3VucmVmKCZkZXYt Pm1tYW4ubWVtX2dsb2JhbF9yZWYpOworCQlkZXYtPm1tYW4ubWVtX2dsb2JhbF9yZWZlcmVuY2Vk ID0gZmFsc2U7CisJfQorfQorCitzdHJ1Y3QgbGltYV90dF9tZ3IgeworCXNwaW5sb2NrX3QgbG9j azsKKwl1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTsKK307CisKK3N0YXRpYyBpbnQgbGltYV90dG1f Ym9fbWFuX2luaXQoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJCQkJdW5zaWdu ZWQgbG9uZyBwX3NpemUpCit7CisJc3RydWN0IGxpbWFfdHRfbWdyICptZ3I7CisKKwltZ3IgPSBr bWFsbG9jKHNpemVvZigqbWdyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZ3IpCisJCXJldHVybiAt RU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJm1nci0+bG9jayk7CisJbWdyLT5hdmFpbGFibGUg PSBwX3NpemU7CisJbWFuLT5wcml2ID0gbWdyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGxpbWFfdHRtX2JvX21hbl90YWtlZG93bihzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1h bikKK3sKKwlzdHJ1Y3QgbGltYV90dF9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKKworCWtmcmVlKG1n cik7CisJbWFuLT5wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1h X3R0bV9ib19tYW5fZ2V0X25vZGUoc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCisJ CQkJICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkJICAgIGNvbnN0IHN0cnVj dCB0dG1fcGxhY2UgKnBsYWNlLAorCQkJCSAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sK KwlzdHJ1Y3QgbGltYV90dF9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKKworCS8qIGRvbid0IGV4Y2Vl ZCB0aGUgbWVtIGxpbWl0ICovCisJc3Bpbl9sb2NrKCZtZ3ItPmxvY2spOworCWlmIChtZ3ItPmF2 YWlsYWJsZSA8IG1lbS0+bnVtX3BhZ2VzKSB7CisJCXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOwor CQlyZXR1cm4gMDsKKwl9CisJbWdyLT5hdmFpbGFibGUgLT0gbWVtLT5udW1fcGFnZXM7CisJc3Bp bl91bmxvY2soJm1nci0+bG9jayk7CisKKwkvKiBqdXN0IGZha2UgYSBub24tbnVsbCBwb2ludGVy IHRvIHRlbGwgY2FsbGVyIHN1Y2Nlc3MgKi8KKwltZW0tPm1tX25vZGUgPSAodm9pZCAqKTE7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfdHRtX2JvX21hbl9wdXRfbm9kZShzdHJ1 Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwKKwkJCQkgICAgIHN0cnVjdCB0dG1fbWVtX3Jl ZyAqbWVtKQoreworCXN0cnVjdCBsaW1hX3R0X21nciAqbWdyID0gbWFuLT5wcml2OworCisJc3Bp bl9sb2NrKCZtZ3ItPmxvY2spOworCW1nci0+YXZhaWxhYmxlICs9IG1lbS0+bnVtX3BhZ2VzOwor CXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2spOworCisJbWVtLT5tbV9ub2RlID0gTlVMTDsKK30KKwor c3RhdGljIHZvaWQgbGltYV90dG1fYm9fbWFuX2RlYnVnKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuLAorCQkJCSAgc3RydWN0IGRybV9wcmludGVyICpwcmludGVyKQoreworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgbGltYV9ib19tYW5h Z2VyX2Z1bmMgPSB7CisJLmluaXQgPSBsaW1hX3R0bV9ib19tYW5faW5pdCwKKwkudGFrZWRvd24g PSBsaW1hX3R0bV9ib19tYW5fdGFrZWRvd24sCisJLmdldF9ub2RlID0gbGltYV90dG1fYm9fbWFu X2dldF9ub2RlLAorCS5wdXRfbm9kZSA9IGxpbWFfdHRtX2JvX21hbl9wdXRfbm9kZSwKKwkuZGVi dWcgPSBsaW1hX3R0bV9ib19tYW5fZGVidWcKK307CisKK3N0YXRpYyBpbnQgbGltYV9pbml0X21l bV90eXBlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCB0eXBlLAorCQkJICAg ICAgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pCit7CisJc3RydWN0IGxpbWFfZGV2 aWNlICpkZXYgPSB0dG1fdG9fbGltYV9kZXYoYmRldik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlj YXNlIFRUTV9QTF9TWVNURU06CisJCS8qIFN5c3RlbSBtZW1vcnkgKi8KKwkJbWFuLT5mbGFncyA9 IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CisJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBU VE1fUExfTUFTS19DQUNISU5HOworCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFH X0NBQ0hFRDsKKwkJYnJlYWs7CisJY2FzZSBUVE1fUExfVFQ6CisJCW1hbi0+ZnVuYyA9ICZsaW1h X2JvX21hbmFnZXJfZnVuYzsKKwkJbWFuLT5mbGFncyA9IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFC TEU7CisJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfTUFTS19DQUNISU5HOworCQlt YW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX0NBQ0hFRDsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJZGV2X2VycihkZXYtPmRldiwgIlVuc3VwcG9ydGVkIG1lbW9yeSB0eXBlICV1XG4i LAorCQkJKHVuc2lnbmVkIGludCl0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGxpbWFfdHRtX2JhY2tlbmRfYmluZChzdHJ1Y3QgdHRtX3R0 ICp0dG0sCisJCQkJIHN0cnVjdCB0dG1fbWVtX3JlZyAqYm9fbWVtKQoreworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGxpbWFfdHRtX2JhY2tlbmRfdW5iaW5kKHN0cnVjdCB0dG1fdHQgKnR0 bSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV90dG1fYmFja2VuZF9kZXN0 cm95KHN0cnVjdCB0dG1fdHQgKnR0bSkKK3sKKwlzdHJ1Y3QgbGltYV90dG1fdHQgKnR0ID0gKHZv aWQgKil0dG07CisKKwl0dG1fZG1hX3R0X2ZpbmkoJnR0LT50dG0pOworCWtmcmVlKHR0KTsKK30K Kworc3RhdGljIHN0cnVjdCB0dG1fYmFja2VuZF9mdW5jIGxpbWFfdHRtX2JhY2tlbmRfZnVuYyA9 IHsKKwkuYmluZCA9ICZsaW1hX3R0bV9iYWNrZW5kX2JpbmQsCisJLnVuYmluZCA9ICZsaW1hX3R0 bV9iYWNrZW5kX3VuYmluZCwKKwkuZGVzdHJveSA9ICZsaW1hX3R0bV9iYWNrZW5kX2Rlc3Ryb3ks Cit9OworCitzdGF0aWMgc3RydWN0IHR0bV90dCAqbGltYV90dG1fdHRfY3JlYXRlKHN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkJCSB1aW50MzJfdCBwYWdlX2ZsYWdzKQoreworCXN0 cnVjdCBsaW1hX3R0bV90dCAqdHQ7CisKKwl0dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsaW1h X3R0bV90dCksIEdGUF9LRVJORUwpOworCWlmICh0dCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsK KworCXR0LT50dG0udHRtLmZ1bmMgPSAmbGltYV90dG1fYmFja2VuZF9mdW5jOworCisJaWYgKHR0 bV9zZ190dF9pbml0KCZ0dC0+dHRtLCBibywgcGFnZV9mbGFncykpIHsKKwkJa2ZyZWUodHQpOwor CQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gJnR0LT50dG0udHRtOworfQorCitzdGF0aWMg aW50IGxpbWFfdHRtX3R0X3BvcHVsYXRlKHN0cnVjdCB0dG1fdHQgKnR0bSwKKwkJCQlzdHJ1Y3Qg dHRtX29wZXJhdGlvbl9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHR0 bV90b19saW1hX2Rldih0dG0tPmJkZXYpOworCXN0cnVjdCBsaW1hX3R0bV90dCAqdHQgPSAodm9p ZCAqKXR0bTsKKwlib29sIHNsYXZlID0gISEodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxB R19TRyk7CisKKwlpZiAoc2xhdmUpIHsKKwkJZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJh eXModHRtLT5zZywgdHRtLT5wYWdlcywKKwkJCQkJCSB0dC0+dHRtLmRtYV9hZGRyZXNzLAorCQkJ CQkJIHR0bS0+bnVtX3BhZ2VzKTsKKwkJdHRtLT5zdGF0ZSA9IHR0X3VuYm91bmQ7CisJCXJldHVy biAwOworCX0KKworCXJldHVybiB0dG1fcG9wdWxhdGVfYW5kX21hcF9wYWdlcyhkZXYtPmRldiwg JnR0LT50dG0sIGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfdHRtX3R0X3VucG9wdWxhdGUo c3RydWN0IHR0bV90dCAqdHRtKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gdHRtX3Rv X2xpbWFfZGV2KHR0bS0+YmRldik7CisJc3RydWN0IGxpbWFfdHRtX3R0ICp0dCA9ICh2b2lkICop dHRtOworCWJvb2wgc2xhdmUgPSAhISh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1NH KTsKKworCWlmIChzbGF2ZSkKKwkJcmV0dXJuOworCisJdHRtX3VubWFwX2FuZF91bnBvcHVsYXRl X3BhZ2VzKGRldi0+ZGV2LCAmdHQtPnR0bSk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pbnZhbGlk YXRlX2NhY2hlcyhzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKKwkJCQkgIHVpbnQzMl90IGZs YWdzKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gdHRtX3RvX2xpbWFfZGV2KGJkZXYp OworCisJZGV2X2VycihkZXYtPmRldiwgIiVzIG5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElP Tl9fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9ldmljdF9mbGFncyhzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKnRibywKKwkJCSAgICAgc3RydWN0IHR0bV9wbGFjZW1lbnQg KnBsYWNlbWVudCkKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0dG1fdG9fbGltYV9ibyh0Ym8p OworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gdG9fbGltYV9kZXYoYm8tPmdlbS5kZXYpOwor CisJZGV2X2VycihkZXYtPmRldiwgIiVzIG5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9f KTsKK30KKworc3RhdGljIGludCBsaW1hX3ZlcmlmeV9hY2Nlc3Moc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0ICp0Ym8sCisJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgbGlt YV9ibyAqYm8gPSB0dG1fdG9fbGltYV9ibyh0Ym8pOworCisJcmV0dXJuIGRybV92bWFfbm9kZV92 ZXJpZnlfYWNjZXNzKCZiby0+Z2VtLnZtYV9ub2RlLAorCQkJCQkgIGZpbHAtPnByaXZhdGVfZGF0 YSk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV90dG1faW9fbWVtX3Jlc2VydmUoc3RydWN0IHR0bV9i b19kZXZpY2UgKmJkZXYsCisJCQkJICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJc3Ry dWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbS0+bWVtX3R5cGVd OworCisJbWVtLT5idXMuYWRkciA9IE5VTEw7CisJbWVtLT5idXMub2Zmc2V0ID0gMDsKKwltZW0t PmJ1cy5zaXplID0gbWVtLT5udW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwltZW0tPmJ1cy5iYXNl ID0gMDsKKwltZW0tPmJ1cy5pc19pb21lbSA9IGZhbHNlOworCisJaWYgKCEobWFuLT5mbGFncyAm IFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRj aCAobWVtLT5tZW1fdHlwZSkgeworCWNhc2UgVFRNX1BMX1NZU1RFTToKKwljYXNlIFRUTV9QTF9U VDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3R0bV9pb19tZW1fZnJlZShzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldiwKKwkJCQkgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisKK30KKwor c3RhdGljIHZvaWQgbGltYV9ib19tb3ZlX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KnRibywgYm9vbCBldmljdCwKKwkJCQlzdHJ1Y3QgdHRtX21lbV9yZWcgKm5ld19tZW0pCit7CisJ c3RydWN0IGxpbWFfYm8gKmJvID0gdHRtX3RvX2xpbWFfYm8odGJvKTsKKwlzdHJ1Y3QgbGltYV9k ZXZpY2UgKmRldiA9IHRvX2xpbWFfZGV2KGJvLT5nZW0uZGV2KTsKKworCWlmIChldmljdCkKKwkJ ZGV2X2VycihkZXYtPmRldiwgIiVzIG5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9fKTsK K30KKworc3RhdGljIHZvaWQgbGltYV9ib19zd2FwX25vdGlmeShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKnRibykKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0dG1fdG9fbGltYV9ibyh0Ym8p OworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gdG9fbGltYV9kZXYoYm8tPmdlbS5kZXYpOwor CisJZGV2X2VycihkZXYtPmRldiwgIiVzIG5vdCBpbXBsZW1lbnRlZFxuIiwgX19GVU5DVElPTl9f KTsKK30KKworc3RhdGljIHN0cnVjdCB0dG1fYm9fZHJpdmVyIGxpbWFfYm9fZHJpdmVyID0gewor CS50dG1fdHRfY3JlYXRlID0gbGltYV90dG1fdHRfY3JlYXRlLAorCS50dG1fdHRfcG9wdWxhdGUg PSBsaW1hX3R0bV90dF9wb3B1bGF0ZSwKKwkudHRtX3R0X3VucG9wdWxhdGUgPSBsaW1hX3R0bV90 dF91bnBvcHVsYXRlLAorCS5pbnZhbGlkYXRlX2NhY2hlcyA9IGxpbWFfaW52YWxpZGF0ZV9jYWNo ZXMsCisJLmluaXRfbWVtX3R5cGUgPSBsaW1hX2luaXRfbWVtX3R5cGUsCisJLmV2aWN0aW9uX3Zh bHVhYmxlID0gdHRtX2JvX2V2aWN0aW9uX3ZhbHVhYmxlLAorCS5ldmljdF9mbGFncyA9IGxpbWFf ZXZpY3RfZmxhZ3MsCisJLnZlcmlmeV9hY2Nlc3MgPSBsaW1hX3ZlcmlmeV9hY2Nlc3MsCisJLmlv X21lbV9yZXNlcnZlID0gbGltYV90dG1faW9fbWVtX3Jlc2VydmUsCisJLmlvX21lbV9mcmVlID0g bGltYV90dG1faW9fbWVtX2ZyZWUsCisJLm1vdmVfbm90aWZ5ID0gbGltYV9ib19tb3ZlX25vdGlm eSwKKwkuc3dhcF9ub3RpZnkgPSBsaW1hX2JvX3N3YXBfbm90aWZ5LAorfTsKKworaW50IGxpbWFf dHRtX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlib29sIG5l ZWRfZG1hMzI7CisJdTY0IGd0dF9zaXplOworCisJZXJyID0gbGltYV90dG1fZ2xvYmFsX2luaXQo ZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisjaWYgZGVmaW5lZChDT05GSUdfQVJN KSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX0xQQUUpCisJbmVlZF9kbWEzMiA9IGZhbHNlOworI2Vs c2UKKwluZWVkX2RtYTMyID0gdHJ1ZTsKKyNlbmRpZgorCisJZXJyID0gdHRtX2JvX2RldmljZV9p bml0KCZkZXYtPm1tYW4uYmRldiwKKwkJCQkgZGV2LT5tbWFuLmJvX2dsb2JhbF9yZWYucmVmLm9i amVjdCwKKwkJCQkgJmxpbWFfYm9fZHJpdmVyLAorCQkJCSBkZXYtPmRkZXYtPmFub25faW5vZGUt PmlfbWFwcGluZywKKwkJCQkgRFJNX0ZJTEVfUEFHRV9PRkZTRVQsCisJCQkJIG5lZWRfZG1hMzIp OworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcg YnVmZmVyIG9iamVjdCAiCisJCQkiZHJpdmVyKCVkKS5cbiIsIGVycik7CisJCWdvdG8gZXJyX291 dDA7CisJfQorCisJaWYgKGxpbWFfbWF4X21lbSA8IDApIHsKKwkJc3RydWN0IHN5c2luZm8gc2k7 CisJCXNpX21lbWluZm8oJnNpKTsKKwkJLyogVE9ETzogYmV0dGVyIHRvIGhhdmUgbG93ZXIgMzIg bWVtIHNpemUgKi8KKwkJZ3R0X3NpemUgPSBtaW4oKCh1NjQpc2kudG90YWxyYW0gKiBzaS5tZW1f dW5pdCAqIDMvNCksCisJCQkgICAgICAgMHgxMDAwMDAwMDBVTEwpOworCX0KKwllbHNlCisJCWd0 dF9zaXplID0gKHU2NClsaW1hX21heF9tZW0gPDwgMjA7CisKKwllcnIgPSB0dG1fYm9faW5pdF9t bSgmZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9UVCwgZ3R0X3NpemUgPj4gUEFHRV9TSElGVCk7CisJ aWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIGluaXRpYWxpemluZyBHVFQg aGVhcC5cbiIpOworCQlnb3RvIGVycl9vdXQxOworCX0KKwlyZXR1cm4gMDsKKworZXJyX291dDE6 CisJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZkZXYtPm1tYW4uYmRldik7CitlcnJfb3V0MDoKKwls aW1hX3R0bV9nbG9iYWxfZmluaShkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbGltYV90 dG1fZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwl0dG1fYm9fZGV2aWNlX3JlbGVh c2UoJmRldi0+bW1hbi5iZGV2KTsKKwlsaW1hX3R0bV9nbG9iYWxfZmluaShkZXYpOworCWRldl9p bmZvKGRldi0+ZGV2LCAidHRtIGZpbmFsaXplZFxuIik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3R0bS5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV90dG0u aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFkMzZkMDZhNDdhMwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdHRtLmgKQEAgLTAs MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IExpbWEgUHJvamVjdAor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S CisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9fTElNQV9UVE1fSF9fCisjZGVmaW5lIF9fTElN QV9UVE1fSF9fCisKKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KKworc3RydWN0 IGxpbWFfbW1hbiB7CisJc3RydWN0IHR0bV9ib19nbG9iYWxfcmVmIGJvX2dsb2JhbF9yZWY7CisJ c3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlIG1lbV9nbG9iYWxfcmVmOworCXN0cnVjdCB0dG1f Ym9fZGV2aWNlIGJkZXY7CisJYm9vbCBtZW1fZ2xvYmFsX3JlZmVyZW5jZWQ7Cit9OworCitzdHJ1 Y3QgbGltYV90dG1fdHQgeworCXN0cnVjdCB0dG1fZG1hX3R0IHR0bTsKK307CisKK3N0cnVjdCBs aW1hX2RldmljZTsKK3N0cnVjdCBsaW1hX2JvOworCitpbnQgbGltYV90dG1faW5pdChzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldik7Cit2b2lkIGxpbWFfdHRtX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYpOworCisjZW5kaWYKLS0gCjIuMTcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==