From mboxrd@z Thu Jan 1 00:00:00 1970 From: "=?UTF-8?q?Christian=20K=C3=B6nig?=" Subject: [PATCH 2/8] drm/amdgpu: fix sdma v4 startup under SRIOV Date: Mon, 8 Oct 2018 15:35:15 +0200 Message-ID: <20181008133521.3237-2-christian.koenig@amd.com> References: <20181008133521.3237-1-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181008133521.3237-1-christian.koenig-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org VW5kZXIgU1JJT1Ygd2Ugd2VyZSBlbmFibGluZyB0aGUgcmluZyBidWZmZXIgYmVmb3JlIGl0IHdh cyBpbml0aWFsaXplZC4KClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlh bi5rb2VuaWdAYW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9zZG1hX3Y0 XzAuYyB8IDIzNCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgMTE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NkbWFfdjRfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvc2RtYV92NF8wLmMKaW5kZXggYzIwZDQxM2YyNzdjLi41ZWNmNmM5MjUyYzQgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NkbWFfdjRfMC5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NkbWFfdjRfMC5jCkBAIC02NzMsMTMgKzY3MywxNCBA QCBzdGF0aWMgdm9pZCBzZG1hX3Y0XzBfZW5hYmxlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBib29sIGVuYWJsZSkKICAqIHNkbWFfdjRfMF9nZnhfcmVzdW1lIC0gc2V0dXAgYW5kIHN0YXJ0 IHRoZSBhc3luYyBkbWEgZW5naW5lcwogICoKICAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50 ZXIKKyAqIEBpOiBpbnN0YW5jZSB0byByZXN1bWUKICAqCiAgKiBTZXQgdXAgdGhlIGdmeCBETUEg cmluZyBidWZmZXJzIGFuZCBlbmFibGUgdGhlbSAoVkVHQTEwKS4KICAqIFJldHVybnMgMCBmb3Ig c3VjY2VzcywgZXJyb3IgZm9yIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgc2RtYV92NF8wX2dm eF9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCitzdGF0aWMgdm9pZCBzZG1hX3Y0 XzBfZ2Z4X3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdW5zaWduZWQgaW50IGkp CiB7Ci0Jc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZyA9ICZhZGV2LT5zZG1hLmluc3RhbmNlW2ldLnJpbmc7CiAJdTMyIHJiX2NudGwsIGliX2NudGws IHdwdHJfcG9sbF9jbnRsOwogCXUzMiByYl9idWZzejsKIAl1MzIgd2Jfb2Zmc2V0OwpAQCAtNjg3 LDEyOSArNjg4LDEwOCBAQCBzdGF0aWMgaW50IHNkbWFfdjRfMF9nZnhfcmVzdW1lKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQogCXUzMiBkb29yYmVsbF9vZmZzZXQ7CiAJdTMyIHRlbXA7CiAJ dTY0IHdwdHJfZ3B1X2FkZHI7Ci0JaW50IGksIHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+ c2RtYS5udW1faW5zdGFuY2VzOyBpKyspIHsKLQkJcmluZyA9ICZhZGV2LT5zZG1hLmluc3RhbmNl W2ldLnJpbmc7Ci0JCXdiX29mZnNldCA9IChyaW5nLT5ycHRyX29mZnMgKiA0KTsKKwl3Yl9vZmZz ZXQgPSAocmluZy0+cnB0cl9vZmZzICogNCk7CiAKLQkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVn X29mZnNldChhZGV2LCBpLCBtbVNETUEwX1NFTV9XQUlUX0ZBSUxfVElNRVJfQ05UTCksIDApOwor CVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9TRU1fV0FJ VF9GQUlMX1RJTUVSX0NOVEwpLCAwKTsKIAotCQkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSBpbiBk d29yZHMgKi8KLQkJcmJfYnVmc3ogPSBvcmRlcl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gNCk7 Ci0JCXJiX2NudGwgPSBSUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1t U0RNQTBfR0ZYX1JCX0NOVEwpKTsKLQkJcmJfY250bCA9IFJFR19TRVRfRklFTEQocmJfY250bCwg U0RNQTBfR0ZYX1JCX0NOVEwsIFJCX1NJWkUsIHJiX2J1ZnN6KTsKKwkvKiBTZXQgcmluZyBidWZm ZXIgc2l6ZSBpbiBkd29yZHMgKi8KKwlyYl9idWZzeiA9IG9yZGVyX2Jhc2VfMihyaW5nLT5yaW5n X3NpemUgLyA0KTsKKwlyYl9jbnRsID0gUlJFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChh ZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9DTlRMKSk7CisJcmJfY250bCA9IFJFR19TRVRfRklFTEQo cmJfY250bCwgU0RNQTBfR0ZYX1JCX0NOVEwsIFJCX1NJWkUsIHJiX2J1ZnN6KTsKICNpZmRlZiBf X0JJR19FTkRJQU4KLQkJcmJfY250bCA9IFJFR19TRVRfRklFTEQocmJfY250bCwgU0RNQTBfR0ZY X1JCX0NOVEwsIFJCX1NXQVBfRU5BQkxFLCAxKTsKLQkJcmJfY250bCA9IFJFR19TRVRfRklFTEQo cmJfY250bCwgU0RNQTBfR0ZYX1JCX0NOVEwsCi0JCQkJCVJQVFJfV1JJVEVCQUNLX1NXQVBfRU5B QkxFLCAxKTsKKwlyYl9jbnRsID0gUkVHX1NFVF9GSUVMRChyYl9jbnRsLCBTRE1BMF9HRlhfUkJf Q05UTCwgUkJfU1dBUF9FTkFCTEUsIDEpOworCXJiX2NudGwgPSBSRUdfU0VUX0ZJRUxEKHJiX2Nu dGwsIFNETUEwX0dGWF9SQl9DTlRMLAorCQkJCVJQVFJfV1JJVEVCQUNLX1NXQVBfRU5BQkxFLCAx KTsKICNlbmRpZgotCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1t U0RNQTBfR0ZYX1JCX0NOVEwpLCByYl9jbnRsKTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdf b2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX0NOVEwpLCByYl9jbnRsKTsKIAotCQkvKiBJ bml0aWFsaXplIHRoZSByaW5nIGJ1ZmZlcidzIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzICovCi0J CVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfUkJf UlBUUiksIDApOwotCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1t U0RNQTBfR0ZYX1JCX1JQVFJfSEkpLCAwKTsKLQkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29m ZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9XUFRSKSwgMCk7Ci0JCVdSRUczMihzZG1hX3Y0 XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfUkJfV1BUUl9ISSksIDApOwor CS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMg Ki8KKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZY X1JCX1JQVFIpLCAwKTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGks IG1tU0RNQTBfR0ZYX1JCX1JQVFJfSEkpLCAwKTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdf b2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX1dQVFIpLCAwKTsKKwlXUkVHMzIoc2RtYV92 NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX1dQVFJfSEkpLCAwKTsK IAotCQkvKiBzZXQgdGhlIHdiIGFkZHJlc3Mgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICov Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhf UkJfUlBUUl9BRERSX0hJKSwKLQkJICAgICAgIHVwcGVyXzMyX2JpdHMoYWRldi0+d2IuZ3B1X2Fk ZHIgKyB3Yl9vZmZzZXQpICYgMHhGRkZGRkZGRik7Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3Jl Z19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfUkJfUlBUUl9BRERSX0xPKSwKLQkJICAgICAg IGxvd2VyXzMyX2JpdHMoYWRldi0+d2IuZ3B1X2FkZHIgKyB3Yl9vZmZzZXQpICYgMHhGRkZGRkZG Qyk7CisJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIG5vdCAq LworCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhf UkJfUlBUUl9BRERSX0hJKSwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhhZGV2LT53Yi5ncHVfYWRk ciArIHdiX29mZnNldCkgJiAweEZGRkZGRkZGKTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdf b2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX1JQVFJfQUREUl9MTyksCisJICAgICAgIGxv d2VyXzMyX2JpdHMoYWRldi0+d2IuZ3B1X2FkZHIgKyB3Yl9vZmZzZXQpICYgMHhGRkZGRkZGQyk7 CiAKLQkJcmJfY250bCA9IFJFR19TRVRfRklFTEQocmJfY250bCwgU0RNQTBfR0ZYX1JCX0NOVEws IFJQVFJfV1JJVEVCQUNLX0VOQUJMRSwgMSk7CisJcmJfY250bCA9IFJFR19TRVRfRklFTEQocmJf Y250bCwgU0RNQTBfR0ZYX1JCX0NOVEwsIFJQVFJfV1JJVEVCQUNLX0VOQUJMRSwgMSk7CiAKLQkJ V1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9C QVNFKSwgcmluZy0+Z3B1X2FkZHIgPj4gOCk7Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19v ZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfUkJfQkFTRV9ISSksIHJpbmctPmdwdV9hZGRyID4+ IDQwKTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBf R0ZYX1JCX0JBU0UpLCByaW5nLT5ncHVfYWRkciA+PiA4KTsKKwlXUkVHMzIoc2RtYV92NF8wX2dl dF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX0JBU0VfSEkpLCByaW5nLT5ncHVf YWRkciA+PiA0MCk7CiAKLQkJcmluZy0+d3B0ciA9IDA7CisJcmluZy0+d3B0ciA9IDA7CiAKLQkJ LyogYmVmb3JlIHByb2dyYW1pbmcgd3B0ciB0byBhIGxlc3MgdmFsdWUsIG5lZWQgc2V0IG1pbm9y X3B0cl91cGRhdGUgZmlyc3QgKi8KLQkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChh ZGV2LCBpLCBtbVNETUEwX0dGWF9NSU5PUl9QVFJfVVBEQVRFKSwgMSk7CisJLyogYmVmb3JlIHBy b2dyYW1pbmcgd3B0ciB0byBhIGxlc3MgdmFsdWUsIG5lZWQgc2V0IG1pbm9yX3B0cl91cGRhdGUg Zmlyc3QgKi8KKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RN QTBfR0ZYX01JTk9SX1BUUl9VUERBVEUpLCAxKTsKIAotCQlpZiAoIWFtZGdwdV9zcmlvdl92Zihh ZGV2KSkgeyAvKiBvbmx5IGJhcmUtbWV0YWwgdXNlIHJlZ2lzdGVyIHdyaXRlIGZvciB3cHRyICov Ci0JCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZY X1JCX1dQVFIpLCBsb3dlcl8zMl9iaXRzKHJpbmctPndwdHIpIDw8IDIpOwotCQkJV1JFRzMyKHNk bWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9XUFRSX0hJKSwg dXBwZXJfMzJfYml0cyhyaW5nLT53cHRyKSA8PCAyKTsKLQkJfQorCWlmICghYW1kZ3B1X3NyaW92 X3ZmKGFkZXYpKSB7IC8qIG9ubHkgYmFyZS1tZXRhbCB1c2UgcmVnaXN0ZXIgd3JpdGUgZm9yIHdw dHIgKi8KKwkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEw X0dGWF9SQl9XUFRSKSwgbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKSA8PCAyKTsKKwkJV1JFRzMy KHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9XUFRSX0hJ KSwgdXBwZXJfMzJfYml0cyhyaW5nLT53cHRyKSA8PCAyKTsKKwl9CiAKLQkJZG9vcmJlbGwgPSBS UkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX0RPT1JC RUxMKSk7Ci0JCWRvb3JiZWxsX29mZnNldCA9IFJSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZz ZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfRE9PUkJFTExfT0ZGU0VUKSk7CisJZG9vcmJlbGwgPSBS UkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX0RPT1JC RUxMKSk7CisJZG9vcmJlbGxfb2Zmc2V0ID0gUlJFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNl dChhZGV2LCBpLCBtbVNETUEwX0dGWF9ET09SQkVMTF9PRkZTRVQpKTsKIAotCQlpZiAocmluZy0+ dXNlX2Rvb3JiZWxsKSB7Ci0JCQlkb29yYmVsbCA9IFJFR19TRVRfRklFTEQoZG9vcmJlbGwsIFNE TUEwX0dGWF9ET09SQkVMTCwgRU5BQkxFLCAxKTsKLQkJCWRvb3JiZWxsX29mZnNldCA9IFJFR19T RVRfRklFTEQoZG9vcmJlbGxfb2Zmc2V0LCBTRE1BMF9HRlhfRE9PUkJFTExfT0ZGU0VULAotCQkJ CQlPRkZTRVQsIHJpbmctPmRvb3JiZWxsX2luZGV4KTsKLQkJfSBlbHNlIHsKLQkJCWRvb3JiZWxs ID0gUkVHX1NFVF9GSUVMRChkb29yYmVsbCwgU0RNQTBfR0ZYX0RPT1JCRUxMLCBFTkFCTEUsIDAp OwotCQl9Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1B MF9HRlhfRE9PUkJFTEwpLCBkb29yYmVsbCk7Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19v ZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfRE9PUkJFTExfT0ZGU0VUKSwgZG9vcmJlbGxfb2Zm c2V0KTsKLQkJYWRldi0+bmJpb19mdW5jcy0+c2RtYV9kb29yYmVsbF9yYW5nZShhZGV2LCBpLCBy aW5nLT51c2VfZG9vcmJlbGwsCi0JCQkJCQkgICAgICByaW5nLT5kb29yYmVsbF9pbmRleCk7Ci0K LQkJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkKLQkJCXNkbWFfdjRfMF9yaW5nX3NldF93cHRy KHJpbmcpOwotCi0JCS8qIHNldCBtaW5vcl9wdHJfdXBkYXRlIHRvIDAgYWZ0ZXIgd3B0ciBwcm9n cmFtZWQgKi8KLQkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNE TUEwX0dGWF9NSU5PUl9QVFJfVVBEQVRFKSwgMCk7Ci0KLQkJLyogc2V0IHV0YyBsMSBlbmFibGUg ZmxhZyBhbHdheXMgdG8gMSAqLwotCQl0ZW1wID0gUlJFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29m ZnNldChhZGV2LCBpLCBtbVNETUEwX0NOVEwpKTsKLQkJdGVtcCA9IFJFR19TRVRfRklFTEQodGVt cCwgU0RNQTBfQ05UTCwgVVRDX0wxX0VOQUJMRSwgMSk7Ci0JCVdSRUczMihzZG1hX3Y0XzBfZ2V0 X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9DTlRMKSwgdGVtcCk7Ci0KLQkJaWYgKCFhbWRn cHVfc3Jpb3ZfdmYoYWRldikpIHsKLQkJCS8qIHVuaGFsdCBlbmdpbmUgKi8KLQkJCXRlbXAgPSBS UkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfRjMyX0NOVEwp KTsKLQkJCXRlbXAgPSBSRUdfU0VUX0ZJRUxEKHRlbXAsIFNETUEwX0YzMl9DTlRMLCBIQUxULCAw KTsKLQkJCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9G MzJfQ05UTCksIHRlbXApOwotCQl9CisJaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgeworCQlkb29y YmVsbCA9IFJFR19TRVRfRklFTEQoZG9vcmJlbGwsIFNETUEwX0dGWF9ET09SQkVMTCwgRU5BQkxF LCAxKTsKKwkJZG9vcmJlbGxfb2Zmc2V0ID0gUkVHX1NFVF9GSUVMRChkb29yYmVsbF9vZmZzZXQs IFNETUEwX0dGWF9ET09SQkVMTF9PRkZTRVQsCisJCQkJT0ZGU0VULCByaW5nLT5kb29yYmVsbF9p bmRleCk7CisJfSBlbHNlIHsKKwkJZG9vcmJlbGwgPSBSRUdfU0VUX0ZJRUxEKGRvb3JiZWxsLCBT RE1BMF9HRlhfRE9PUkJFTEwsIEVOQUJMRSwgMCk7CisJfQorCVdSRUczMihzZG1hX3Y0XzBfZ2V0 X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfRE9PUkJFTEwpLCBkb29yYmVsbCk7CisJ V1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9ET09S QkVMTF9PRkZTRVQpLCBkb29yYmVsbF9vZmZzZXQpOworCWFkZXYtPm5iaW9fZnVuY3MtPnNkbWFf ZG9vcmJlbGxfcmFuZ2UoYWRldiwgaSwgcmluZy0+dXNlX2Rvb3JiZWxsLAorCQkJCQkgICAgICBy aW5nLT5kb29yYmVsbF9pbmRleCk7CiAKLQkJLyogc2V0dXAgdGhlIHdwdHIgc2hhZG93IHBvbGxp bmcgKi8KLQkJd3B0cl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPndwdHJf b2ZmcyAqIDQpOwotCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1t U0RNQTBfR0ZYX1JCX1dQVFJfUE9MTF9BRERSX0xPKSwKLQkJICAgICAgIGxvd2VyXzMyX2JpdHMo d3B0cl9ncHVfYWRkcikpOwotCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYs IGksIG1tU0RNQTBfR0ZYX1JCX1dQVFJfUE9MTF9BRERSX0hJKSwKLQkJICAgICAgIHVwcGVyXzMy X2JpdHMod3B0cl9ncHVfYWRkcikpOwotCQl3cHRyX3BvbGxfY250bCA9IFJSRUczMihzZG1hX3Y0 XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfUkJfV1BUUl9QT0xMX0NOVEwp KTsKLQkJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkKLQkJCXdwdHJfcG9sbF9jbnRsID0gUkVH X1NFVF9GSUVMRCh3cHRyX3BvbGxfY250bCwgU0RNQTBfR0ZYX1JCX1dQVFJfUE9MTF9DTlRMLCBG MzJfUE9MTF9FTkFCTEUsIDEpOwotCQllbHNlCi0JCQl3cHRyX3BvbGxfY250bCA9IFJFR19TRVRf RklFTEQod3B0cl9wb2xsX2NudGwsIFNETUEwX0dGWF9SQl9XUFRSX1BPTExfQ05UTCwgRjMyX1BP TExfRU5BQkxFLCAwKTsKLQkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBp LCBtbVNETUEwX0dGWF9SQl9XUFRSX1BPTExfQ05UTCksIHdwdHJfcG9sbF9jbnRsKTsKKwlpZiAo YW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQorCQlzZG1hX3Y0XzBfcmluZ19zZXRfd3B0cihyaW5nKTsK IAotCQkvKiBlbmFibGUgRE1BIFJCICovCi0JCXJiX2NudGwgPSBSRUdfU0VUX0ZJRUxEKHJiX2Nu dGwsIFNETUEwX0dGWF9SQl9DTlRMLCBSQl9FTkFCTEUsIDEpOwotCQlXUkVHMzIoc2RtYV92NF8w X2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX1JCX0NOVEwpLCByYl9jbnRsKTsK KwkvKiBzZXQgbWlub3JfcHRyX3VwZGF0ZSB0byAwIGFmdGVyIHdwdHIgcHJvZ3JhbWVkICovCisJ V1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9NSU5P Ul9QVFJfVVBEQVRFKSwgMCk7CiAKLQkJaWJfY250bCA9IFJSRUczMihzZG1hX3Y0XzBfZ2V0X3Jl Z19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9HRlhfSUJfQ05UTCkpOwotCQlpYl9jbnRsID0gUkVH X1NFVF9GSUVMRChpYl9jbnRsLCBTRE1BMF9HRlhfSUJfQ05UTCwgSUJfRU5BQkxFLCAxKTsKLSNp ZmRlZiBfX0JJR19FTkRJQU4KLQkJaWJfY250bCA9IFJFR19TRVRfRklFTEQoaWJfY250bCwgU0RN QTBfR0ZYX0lCX0NOVEwsIElCX1NXQVBfRU5BQkxFLCAxKTsKLSNlbmRpZgotCQkvKiBlbmFibGUg RE1BIElCcyAqLwotCQlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1t U0RNQTBfR0ZYX0lCX0NOVEwpLCBpYl9jbnRsKTsKKwkvKiBzZXQgdXRjIGwxIGVuYWJsZSBmbGFn IGFsd2F5cyB0byAxICovCisJdGVtcCA9IFJSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQo YWRldiwgaSwgbW1TRE1BMF9DTlRMKSk7CisJdGVtcCA9IFJFR19TRVRfRklFTEQodGVtcCwgU0RN QTBfQ05UTCwgVVRDX0wxX0VOQUJMRSwgMSk7CisJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29m ZnNldChhZGV2LCBpLCBtbVNETUEwX0NOVEwpLCB0ZW1wKTsKIAotCQlyaW5nLT5yZWFkeSA9IHRy dWU7CisJaWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsKKwkJLyogdW5oYWx0IGVuZ2luZSAq LworCQl0ZW1wID0gUlJFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNE TUEwX0YzMl9DTlRMKSk7CisJCXRlbXAgPSBSRUdfU0VUX0ZJRUxEKHRlbXAsIFNETUEwX0YzMl9D TlRMLCBIQUxULCAwKTsKKwkJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBp LCBtbVNETUEwX0YzMl9DTlRMKSwgdGVtcCk7CisJfQogCi0JCWlmIChhbWRncHVfc3Jpb3ZfdmYo YWRldikpIHsgLyogYmFyZS1tZXRhbCBzZXF1ZW5jZSBkb2Vzbid0IG5lZWQgYmVsb3cgdG8gbGlu ZXMgKi8KLQkJCXNkbWFfdjRfMF9jdHhfc3dpdGNoX2VuYWJsZShhZGV2LCB0cnVlKTsKLQkJCXNk bWFfdjRfMF9lbmFibGUoYWRldiwgdHJ1ZSk7Ci0JCX0KKwkvKiBzZXR1cCB0aGUgd3B0ciBzaGFk b3cgcG9sbGluZyAqLworCXdwdHJfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciArIChyaW5n LT53cHRyX29mZnMgKiA0KTsKKwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYs IGksIG1tU0RNQTBfR0ZYX1JCX1dQVFJfUE9MTF9BRERSX0xPKSwKKwkgICAgICAgbG93ZXJfMzJf Yml0cyh3cHRyX2dwdV9hZGRyKSk7CisJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChh ZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9XUFRSX1BPTExfQUREUl9ISSksCisJICAgICAgIHVwcGVy XzMyX2JpdHMod3B0cl9ncHVfYWRkcikpOworCXdwdHJfcG9sbF9jbnRsID0gUlJFRzMyKHNkbWFf djRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBtbVNETUEwX0dGWF9SQl9XUFRSX1BPTExfQ05U TCkpOworCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpCisJCXdwdHJfcG9sbF9jbnRsID0gUkVH X1NFVF9GSUVMRCh3cHRyX3BvbGxfY250bCwgU0RNQTBfR0ZYX1JCX1dQVFJfUE9MTF9DTlRMLCBG MzJfUE9MTF9FTkFCTEUsIDEpOworCWVsc2UKKwkJd3B0cl9wb2xsX2NudGwgPSBSRUdfU0VUX0ZJ RUxEKHdwdHJfcG9sbF9jbnRsLCBTRE1BMF9HRlhfUkJfV1BUUl9QT0xMX0NOVEwsIEYzMl9QT0xM X0VOQUJMRSwgMCk7CisJV1JFRzMyKHNkbWFfdjRfMF9nZXRfcmVnX29mZnNldChhZGV2LCBpLCBt bVNETUEwX0dGWF9SQl9XUFRSX1BPTExfQ05UTCksIHdwdHJfcG9sbF9jbnRsKTsKIAotCQlyID0g YW1kZ3B1X3JpbmdfdGVzdF9yaW5nKHJpbmcpOwotCQlpZiAocikgewotCQkJcmluZy0+cmVhZHkg PSBmYWxzZTsKLQkJCXJldHVybiByOwotCQl9CisJLyogZW5hYmxlIERNQSBSQiAqLworCXJiX2Nu dGwgPSBSRUdfU0VUX0ZJRUxEKHJiX2NudGwsIFNETUEwX0dGWF9SQl9DTlRMLCBSQl9FTkFCTEUs IDEpOworCVdSRUczMihzZG1hX3Y0XzBfZ2V0X3JlZ19vZmZzZXQoYWRldiwgaSwgbW1TRE1BMF9H RlhfUkJfQ05UTCksIHJiX2NudGwpOwogCi0JCWlmIChhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jc19y aW5nID09IHJpbmcpCi0JCQlhbWRncHVfdHRtX3NldF9idWZmZXJfZnVuY3Nfc3RhdHVzKGFkZXYs IHRydWUpOwotCi0JfQorCWliX2NudGwgPSBSUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0 KGFkZXYsIGksIG1tU0RNQTBfR0ZYX0lCX0NOVEwpKTsKKwlpYl9jbnRsID0gUkVHX1NFVF9GSUVM RChpYl9jbnRsLCBTRE1BMF9HRlhfSUJfQ05UTCwgSUJfRU5BQkxFLCAxKTsKKyNpZmRlZiBfX0JJ R19FTkRJQU4KKwlpYl9jbnRsID0gUkVHX1NFVF9GSUVMRChpYl9jbnRsLCBTRE1BMF9HRlhfSUJf Q05UTCwgSUJfU1dBUF9FTkFCTEUsIDEpOworI2VuZGlmCisJLyogZW5hYmxlIERNQSBJQnMgKi8K KwlXUkVHMzIoc2RtYV92NF8wX2dldF9yZWdfb2Zmc2V0KGFkZXYsIGksIG1tU0RNQTBfR0ZYX0lC X0NOVEwpLCBpYl9jbnRsKTsKIAotCXJldHVybiAwOworCXJpbmctPnJlYWR5ID0gdHJ1ZTsKIH0K IAogc3RhdGljIHZvaWQKQEAgLTk0MSwzMyArOTIxLDUxIEBAIHN0YXRpYyBpbnQgc2RtYV92NF8w X2xvYWRfbWljcm9jb2RlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogICovCiBzdGF0aWMg aW50IHNkbWFfdjRfMF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKLQlpbnQg ciA9IDA7CisJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nOworCWludCBpLCByOwogCiAJaWYgKGFt ZGdwdV9zcmlvdl92ZihhZGV2KSkgewogCQlzZG1hX3Y0XzBfY3R4X3N3aXRjaF9lbmFibGUoYWRl diwgZmFsc2UpOwogCQlzZG1hX3Y0XzBfZW5hYmxlKGFkZXYsIGZhbHNlKTsKKwl9IGVsc2Ugewog Ci0JCS8qIHNldCBSQiByZWdpc3RlcnMgKi8KLQkJciA9IHNkbWFfdjRfMF9nZnhfcmVzdW1lKGFk ZXYpOwotCQlyZXR1cm4gcjsKKwkJaWYgKGFkZXYtPmZpcm13YXJlLmxvYWRfdHlwZSAhPSBBTURH UFVfRldfTE9BRF9QU1ApIHsKKwkJCXIgPSBzZG1hX3Y0XzBfbG9hZF9taWNyb2NvZGUoYWRldik7 CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKKwkJfQorCisJCS8qIHVuaGFsdCB0aGUgTUVzICov CisJCXNkbWFfdjRfMF9lbmFibGUoYWRldiwgdHJ1ZSk7CisJCS8qIGVuYWJsZSBzZG1hIHJpbmcg cHJlZW1wdGlvbiAqLworCQlzZG1hX3Y0XzBfY3R4X3N3aXRjaF9lbmFibGUoYWRldiwgdHJ1ZSk7 CiAJfQogCi0JaWYgKGFkZXYtPmZpcm13YXJlLmxvYWRfdHlwZSAhPSBBTURHUFVfRldfTE9BRF9Q U1ApIHsKLQkJciA9IHNkbWFfdjRfMF9sb2FkX21pY3JvY29kZShhZGV2KTsKKwkvKiBzdGFydCB0 aGUgZ2Z4IHJpbmdzIGFuZCBybGMgY29tcHV0ZSBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg YWRldi0+c2RtYS5udW1faW5zdGFuY2VzOyBpKyspCisJCXNkbWFfdjRfMF9nZnhfcmVzdW1lKGFk ZXYsIGkpOworCisJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkgeworCQlzZG1hX3Y0XzBfY3R4 X3N3aXRjaF9lbmFibGUoYWRldiwgdHJ1ZSk7CisJCXNkbWFfdjRfMF9lbmFibGUoYWRldiwgdHJ1 ZSk7CisJfSBlbHNlIHsKKwkJciA9IHNkbWFfdjRfMF9ybGNfcmVzdW1lKGFkZXYpOwogCQlpZiAo cikKIAkJCXJldHVybiByOwogCX0KIAotCS8qIHVuaGFsdCB0aGUgTUVzICovCi0Jc2RtYV92NF8w X2VuYWJsZShhZGV2LCB0cnVlKTsKLQkvKiBlbmFibGUgc2RtYSByaW5nIHByZWVtcHRpb24gKi8K LQlzZG1hX3Y0XzBfY3R4X3N3aXRjaF9lbmFibGUoYWRldiwgdHJ1ZSk7CisJZm9yIChpID0gMDsg aSA8IGFkZXYtPnNkbWEubnVtX2luc3RhbmNlczsgaSsrKSB7CisJCXJpbmcgPSAmYWRldi0+c2Rt YS5pbnN0YW5jZVtpXS5yaW5nOwogCi0JLyogc3RhcnQgdGhlIGdmeCByaW5ncyBhbmQgcmxjIGNv bXB1dGUgcXVldWVzICovCi0JciA9IHNkbWFfdjRfMF9nZnhfcmVzdW1lKGFkZXYpOwotCWlmIChy KQotCQlyZXR1cm4gcjsKLQlyID0gc2RtYV92NF8wX3JsY19yZXN1bWUoYWRldik7CisJCXIgPSBh bWRncHVfcmluZ190ZXN0X3JpbmcocmluZyk7CisJCWlmIChyKSB7CisJCQlyaW5nLT5yZWFkeSA9 IGZhbHNlOworCQkJcmV0dXJuIHI7CisJCX0KKworCQlpZiAoYWRldi0+bW1hbi5idWZmZXJfZnVu Y3NfcmluZyA9PSByaW5nKQorCQkJYW1kZ3B1X3R0bV9zZXRfYnVmZmVyX2Z1bmNzX3N0YXR1cyhh ZGV2LCB0cnVlKTsKKwl9CiAKIAlyZXR1cm4gcjsKIH0KLS0gCjIuMTQuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QK YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==