From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Herrenschmidt Subject: [PATCH 10/12] drm/ast: POST code for the new AST2500 Date: Fri, 24 Feb 2017 09:53:55 +1100 Message-ID: <20170223225357.9572-10-benh@kernel.crashing.org> References: <20170223225357.9572-1-benh@kernel.crashing.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by gabe.freedesktop.org (Postfix) with ESMTPS id 580276EB53 for ; Thu, 23 Feb 2017 23:00:11 +0000 (UTC) In-Reply-To: <20170223225357.9572-1-benh@kernel.crashing.org> 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: linuxppc-dev@ozlabs.org, airlied@redhat.com, eich@suse.come List-Id: dri-devel@lists.freedesktop.org RnJvbTogIlkuQy4gQ2hlbiIgPHljX2NoZW5AYXNwZWVkdGVjaC5jb20+CgpUaGlzIGlzIHVzZWQg d2hlbiB0aGUgQk1DIGlzbid0IHJ1bm5pbmcgYW55IGNvZGUgYW5kIHRodXMgaGFzCnRvIGJlIGlu aXRpYWxpemVkIGJ5IHRoZSBob3N0LgoKVGhlIGNvZGUgb3JpZ2luYXRlcyBmcm9tIEFzcGVlZCAo WS5DLiBDaGVuKSBhbmQgaGFzIGJlZW4gY2xlYW5lZAp1cCBmb3IgY29kaW5nIHN0eWxlIHB1cnBv c2VzIGJ5IEJlbkguCgpTaWduZWQtb2ZmLWJ5OiBZLkMuIENoZW4gPHljX2NoZW5AYXNwZWVkdGVj aC5jb20+ClNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVs LmNyYXNoaW5nLm9yZz4KLS0KCnYyLiAtIEZpeCBidWcgaW4gZGRyX3Rlc3RfMjUwMCByZXBvcnRl ZCBieSBFbWlsIFZlbGlrb3YKICAgIC0gUmViYXNlIG9uIHVwZGF0ZWQgbW1jX3Rlc3QgZmFjdG9y aW5nIHBhdGNoCiAgICAtIEZpeCBtaXNzaW5nIGVsc2Ugc3RhdGVtZW50IGluIDI1MDAgUE9TVCBj b2RlCi0tLQogZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJhbV90YWJsZXMuaCB8ICA2MiArKysr KwogZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfcG9zdC5jICAgICAgICB8IDQxNyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDQ3NiBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2RyYW1fdGFibGVzLmggYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcmFtX3RhYmxlcy5oCmlu ZGV4IGNjMDQ1MzkuLjFkOWM0ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0 X2RyYW1fdGFibGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZHJhbV90YWJsZXMu aApAQCAtMTQxLDQgKzE0MSw2NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFzdF9kcmFtc3RydWN0 IGFzdDIxMDBfZHJhbV90YWJsZV9kYXRhW10gPSB7CiAJeyAweGZmZmYsIDB4ZmZmZmZmZmYgfSwK IH07CiAKKy8qCisgKiBBU1QyNTAwIERSQU0gc2V0dGluZ3MgbW9kdWxlcworICovCisjZGVmaW5l IFJFR1RCTF9OVU0gICAgICAgICAgIDE3CisjZGVmaW5lIFJFR0lEWF8wMTAgICAgICAgICAgIDAK KyNkZWZpbmUgUkVHSURYXzAxNCAgICAgICAgICAgMQorI2RlZmluZSBSRUdJRFhfMDE4ICAgICAg ICAgICAyCisjZGVmaW5lIFJFR0lEWF8wMjAgICAgICAgICAgIDMKKyNkZWZpbmUgUkVHSURYXzAy NCAgICAgICAgICAgNAorI2RlZmluZSBSRUdJRFhfMDJDICAgICAgICAgICA1CisjZGVmaW5lIFJF R0lEWF8wMzAgICAgICAgICAgIDYKKyNkZWZpbmUgUkVHSURYXzIxNCAgICAgICAgICAgNworI2Rl ZmluZSBSRUdJRFhfMkUwICAgICAgICAgICA4CisjZGVmaW5lIFJFR0lEWF8yRTQgICAgICAgICAg IDkKKyNkZWZpbmUgUkVHSURYXzJFOCAgICAgICAgICAgMTAKKyNkZWZpbmUgUkVHSURYXzJFQyAg ICAgICAgICAgMTEKKyNkZWZpbmUgUkVHSURYXzJGMCAgICAgICAgICAgMTIKKyNkZWZpbmUgUkVH SURYXzJGNCAgICAgICAgICAgMTMKKyNkZWZpbmUgUkVHSURYXzJGOCAgICAgICAgICAgMTQKKyNk ZWZpbmUgUkVHSURYX1JGQyAgICAgICAgICAgMTUKKyNkZWZpbmUgUkVHSURYX1BMTCAgICAgICAg ICAgMTYKKworc3RhdGljIGNvbnN0IHUzMiBhc3QyNTAwX2RkcjNfMTYwMF90aW1pbmdfdGFibGVb UkVHVEJMX05VTV0gPSB7CisJMHg2NDYwNEQzOCwJCSAgICAgLyogMHgwMTAgKi8KKwkweDI5Njkw NTk5LAkJICAgICAvKiAweDAxNCAqLworCTB4MDAwMDAzMDAsCQkgICAgIC8qIDB4MDE4ICovCisJ MHgwMDAwMDAwMCwJCSAgICAgLyogMHgwMjAgKi8KKwkweDAwMDAwMDAwLAkJICAgICAvKiAweDAy NCAqLworCTB4MDIxODFFNzAsCQkgICAgIC8qIDB4MDJDICovCisJMHgwMDAwMDA0MCwJCSAgICAg LyogMHgwMzAgKi8KKwkweDAwMDAwMDI0LAkJICAgICAvKiAweDIxNCAqLworCTB4MDIwMDEzMDAs CQkgICAgIC8qIDB4MkUwICovCisJMHgwRTAwMDBBMCwJCSAgICAgLyogMHgyRTQgKi8KKwkweDAw MEUwMDFCLAkJICAgICAvKiAweDJFOCAqLworCTB4MzVCOEMxMDUsCQkgICAgIC8qIDB4MkVDICov CisJMHgwODA5MDQwOCwJCSAgICAgLyogMHgyRjAgKi8KKwkweDlCMDAwODAwLAkJICAgICAvKiAw eDJGNCAqLworCTB4MEU0MDBBMDAsCQkgICAgIC8qIDB4MkY4ICovCisJMHg5OTcxNDUyRiwJCSAg ICAgLyogdFJGQyAgKi8KKwkweDAwMDA3MUMxCQkgICAgIC8qIFBMTCAgICovCit9OworCitzdGF0 aWMgY29uc3QgdTMyIGFzdDI1MDBfZGRyNF8xNjAwX3RpbWluZ190YWJsZVtSRUdUQkxfTlVNXSA9 IHsKKwkweDYzNjA0RTM3LAkJICAgICAvKiAweDAxMCAqLworCTB4RTk3QUZBOTksCQkgICAgIC8q IDB4MDE0ICovCisJMHgwMDAxOTAwMCwJCSAgICAgLyogMHgwMTggKi8KKwkweDA4MDAwMDAwLAkJ ICAgICAvKiAweDAyMCAqLworCTB4MDAwMDA0MDAsCQkgICAgIC8qIDB4MDI0ICovCisJMHgwMDAw MDQxMCwJCSAgICAgLyogMHgwMkMgKi8KKwkweDAwMDAwMTAxLAkJICAgICAvKiAweDAzMCAqLwor CTB4MDAwMDAwMjQsCQkgICAgIC8qIDB4MjE0ICovCisJMHgwMzAwMjkwMCwJCSAgICAgLyogMHgy RTAgKi8KKwkweDBFMDAwMEEwLAkJICAgICAvKiAweDJFNCAqLworCTB4MDAwRTAwMUMsCQkgICAg IC8qIDB4MkU4ICovCisJMHgzNUI4QzEwNiwJCSAgICAgLyogMHgyRUMgKi8KKwkweDA4MDgwNjA3 LAkJICAgICAvKiAweDJGMCAqLworCTB4OUIwMDA5MDAsCQkgICAgIC8qIDB4MkY0ICovCisJMHgw RTQwMEEwMCwJCSAgICAgLyogMHgyRjggKi8KKwkweDk5NzE0NTQ1LAkJICAgICAvKiB0UkZDICAq LworCTB4MDAwMDcxQzEJCSAgICAgLyogUExMICAgKi8KK307CisKICNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfcG9zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfcG9zdC5jCmluZGV4IDU2MWZkN2QuLmMxNWY2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hc3QvYXN0X3Bvc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9wb3N0LmMK QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJhc3RfZHJhbV90YWJsZXMuaCIKIAogc3RhdGlj IHZvaWQgYXN0X3Bvc3RfY2hpcF8yMzAwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworc3RhdGlj IHZvaWQgYXN0X3Bvc3RfY2hpcF8yNTAwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiB2b2lk IGFzdF9lbmFibGVfdmdhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC04Miw3ICs4Myw4 IEBAIGFzdF9zZXRfZGVmX2V4dF9yZWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlmb3IgKGkg PSAweDgxOyBpIDw9IDB4OWY7IGkrKykKIAkJYXN0X3NldF9pbmRleF9yZWcoYXN0LCBBU1RfSU9f Q1JUQ19QT1JULCBpLCAweDAwKTsKIAotCWlmIChhc3QtPmNoaXAgPT0gQVNUMjMwMCB8fCBhc3Qt PmNoaXAgPT0gQVNUMjQwMCkgeworCWlmIChhc3QtPmNoaXAgPT0gQVNUMjMwMCB8fCBhc3QtPmNo aXAgPT0gQVNUMjQwMCB8fAorCSAgICBhc3QtPmNoaXAgPT0gQVNUMjUwMCkgewogCQlpZiAoZGV2 LT5wZGV2LT5yZXZpc2lvbiA+PSAweDIwKQogCQkJZXh0X3JlZ19pbmZvID0gZXh0cmVnaW5mb19h c3QyMzAwOwogCQllbHNlCkBAIC0xMDYsNyArMTA4LDggQEAgYXN0X3NldF9kZWZfZXh0X3JlZyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJLyogRW5hYmxlIFJBTURBQyBmb3IgQTEgKi8KIAly ZWcgPSAweDA0OwotCWlmIChhc3QtPmNoaXAgPT0gQVNUMjMwMCB8fCBhc3QtPmNoaXAgPT0gQVNU MjQwMCkKKwlpZiAoYXN0LT5jaGlwID09IEFTVDIzMDAgfHwgYXN0LT5jaGlwID09IEFTVDI0MDAg fHwKKwkgICAgYXN0LT5jaGlwID09IEFTVDI1MDApCiAJCXJlZyB8PSAweDIwOwogCWFzdF9zZXRf aW5kZXhfcmVnX21hc2soYXN0LCBBU1RfSU9fQ1JUQ19QT1JULCAweGI2LCAweGZmLCByZWcpOwog fQpAQCAtMzgwLDcgKzM4Myw5IEBAIHZvaWQgYXN0X3Bvc3RfZ3B1KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCiAJYXN0X3NldF9kZWZfZXh0X3JlZyhkZXYpOwogCiAJaWYgKGFzdC0+Y29uZmlnX21v ZGUgPT0gYXN0X3VzZV9wMmEpIHsKLQkJaWYgKGFzdC0+Y2hpcCA9PSBBU1QyMzAwIHx8IGFzdC0+ Y2hpcCA9PSBBU1QyNDAwKQorCQlpZiAoYXN0LT5jaGlwID09IEFTVDI1MDApCisJCQlhc3RfcG9z dF9jaGlwXzI1MDAoZGV2KTsKKwkJZWxzZSBpZiAoYXN0LT5jaGlwID09IEFTVDIzMDAgfHwgYXN0 LT5jaGlwID09IEFTVDI0MDApCiAJCQlhc3RfcG9zdF9jaGlwXzIzMDAoZGV2KTsKIAkJZWxzZQog CQkJYXN0X2luaXRfZHJhbV9yZWcoZGV2KTsKQEAgLTUwNiw2ICs1MTEsMTEgQEAgc3RhdGljIHUz MiBtbWNfdGVzdF9zaW5nbGUyKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0LCB1MzIgZGF0YWdlbikK IAlyZXR1cm4gbW1jX3Rlc3QyKGFzdCwgZGF0YWdlbiwgMHgwNSk7CiB9CiAKK3N0YXRpYyBib29s IG1tY190ZXN0X3NpbmdsZV8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0LCB1MzIgZGF0YWdl bikKK3sKKwlyZXR1cm4gbW1jX3Rlc3QoYXN0LCBkYXRhZ2VuLCAweDg1KTsKK30KKwogc3RhdGlj IGludCBjYnJfdGVzdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCkKIHsKIAl1MzIgZGF0YTsKQEAg LTE2NzIsMyArMTY4Miw0MDQgQEAgc3RhdGljIHZvaWQgYXN0X3Bvc3RfY2hpcF8yMzAwKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiAJfSB3aGlsZSAoKHJlZyAmIDB4NDApID09IDApOwogfQogCitz dGF0aWMgYm9vbCBjYnJfdGVzdF8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQoreworCWFz dF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA3NCwgMHgwMDAwRkZGRik7CisJYXN0X21vdXRkd20oYXN0 LCAweDFFNkUwMDdDLCAweEZGMDBGRjAwKTsKKwlpZiAoIW1tY190ZXN0X2J1cnN0KGFzdCwgMCkp CisJCXJldHVybiBmYWxzZTsKKwlpZiAoIW1tY190ZXN0X3NpbmdsZV8yNTAwKGFzdCwgMCkpCisJ CXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgZGRyX3Rlc3Rf MjUwMChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCkKK3sKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2 RTAwNzQsIDB4MDAwMEZGRkYpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA3QywgMHhGRjAw RkYwMCk7CisJaWYgKCFtbWNfdGVzdF9idXJzdChhc3QsIDApKQorCQlyZXR1cm4gZmFsc2U7CisJ aWYgKCFtbWNfdGVzdF9idXJzdChhc3QsIDEpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFtbWNf dGVzdF9idXJzdChhc3QsIDIpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFtbWNfdGVzdF9idXJz dChhc3QsIDMpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFtbWNfdGVzdF9zaW5nbGVfMjUwMChh c3QsIDApKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk IGRkcl9pbml0X2NvbW1vbl8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQoreworCWFzdF9t b3V0ZHdtKGFzdCwgMHgxRTZFMDAzNCwgMHgwMDAyMDA4MCk7CisJYXN0X21vdXRkd20oYXN0LCAw eDFFNkUwMDA4LCAweDIwMDMwMDBGKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMzgsIDB4 MDAwMDBGRkYpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA0MCwgMHg4ODQ0ODg0NCk7CisJ YXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDQ0LCAweDI0NDIyMjg4KTsKKwlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAwNDgsIDB4MjIyMjIyMjIpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA0 QywgMHgyMjIyMjIyMik7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDUwLCAweDgwMDAwMDAw KTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyMDgsIDB4MDAwMDAwMDApOworCWFzdF9tb3V0 ZHdtKGFzdCwgMHgxRTZFMDIxOCwgMHgwMDAwMDAwMCk7CisJYXN0X21vdXRkd20oYXN0LCAweDFF NkUwMjIwLCAweDAwMDAwMDAwKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyMjgsIDB4MDAw MDAwMDApOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDIzMCwgMHgwMDAwMDAwMCk7CisJYXN0 X21vdXRkd20oYXN0LCAweDFFNkUwMkE4LCAweDAwMDAwMDAwKTsKKwlhc3RfbW91dGR3bShhc3Qs IDB4MUU2RTAyQjAsIDB4MDAwMDAwMDApOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDI0MCwg MHg4NjAwMDAwMCk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMjQ0LCAweDAwMDA4NjAwKTsK Kwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyNDgsIDB4ODAwMDAwMDApOworCWFzdF9tb3V0ZHdt KGFzdCwgMHgxRTZFMDI0QywgMHg4MDgwODA4MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRkcl9waHlf aW5pdF8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQoreworCXUzMiBkYXRhLCBwYXNzLCB0 aW1lY250OworCisJcGFzcyA9IDA7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDYwLCAweDAw MDAwMDA1KTsKKwl3aGlsZSAoIXBhc3MpIHsKKwkJZm9yICh0aW1lY250ID0gMDsgdGltZWNudCA8 IFRJTUVPVVQ7IHRpbWVjbnQrKykgeworCQkJZGF0YSA9IGFzdF9taW5kd20oYXN0LCAweDFFNkUw MDYwKSAmIDB4MTsKKwkJCWlmICghZGF0YSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAodGltZWNu dCAhPSBUSU1FT1VUKSB7CisJCQlkYXRhID0gYXN0X21pbmR3bShhc3QsIDB4MUU2RTAzMDApICYg MHgwMDBBMDAwMDsKKwkJCWlmICghZGF0YSkKKwkJCQlwYXNzID0gMTsKKwkJfQorCQlpZiAoIXBh c3MpIHsKKwkJCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2MCwgMHgwMDAwMDAwMCk7CisJCQl1 ZGVsYXkoMTApOyAvKiBkZWxheSAxMCB1cyAqLworCQkJYXN0X21vdXRkd20oYXN0LCAweDFFNkUw MDYwLCAweDAwMDAwMDA1KTsKKwkJfQorCX0KKworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2 MCwgMHgwMDAwMDAwNik7Cit9CisKKy8qCisgKiBDaGVjayBEUkFNIFNpemUKKyAqIDFHYiA6IDB4 ODAwMDAwMDAgfiAweDg3RkZGRkZGCisgKiAyR2IgOiAweDgwMDAwMDAwIH4gMHg4RkZGRkZGRgor ICogNEdiIDogMHg4MDAwMDAwMCB+IDB4OUZGRkZGRkYKKyAqIDhHYiA6IDB4ODAwMDAwMDAgfiAw eEJGRkZGRkZGCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2RyYW1fc2l6ZV8yNTAwKHN0cnVjdCBh c3RfcHJpdmF0ZSAqYXN0LCB1MzIgdFJGQykKK3sKKwl1MzIgcmVnXzA0LCByZWdfMTQ7CisKKwly ZWdfMDQgPSBhc3RfbWluZHdtKGFzdCwgMHgxRTZFMDAwNCkgJiAweGZmZmZmZmZjOworCXJlZ18x NCA9IGFzdF9taW5kd20oYXN0LCAweDFFNkUwMDE0KSAmIDB4ZmZmZmZmMDA7CisKKwlhc3RfbW91 dGR3bShhc3QsIDB4QTAxMDAwMDAsIDB4NDE0MjQzNDQpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHg5 MDEwMDAwMCwgMHgzNTM2MzczOCk7CisJYXN0X21vdXRkd20oYXN0LCAweDg4MTAwMDAwLCAweDI5 MkEyQjJDKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4ODAxMDAwMDAsIDB4MUQxRTFGMTApOworCisJ LyogQ2hlY2sgOEdiaXQgKi8KKwlpZiAoYXN0X21pbmR3bShhc3QsIDB4QTAxMDAwMDApID09IDB4 NDE0MjQzNDQpIHsKKwkJcmVnXzA0IHw9IDB4MDM7CisJCXJlZ18xNCB8PSAodFJGQyA+PiAyNCkg JiAweEZGOworCQkvKiBDaGVjayA0R2JpdCAqLworCX0gZWxzZSBpZiAoYXN0X21pbmR3bShhc3Qs IDB4OTAxMDAwMDApID09IDB4MzUzNjM3MzgpIHsKKwkJcmVnXzA0IHw9IDB4MDI7CisJCXJlZ18x NCB8PSAodFJGQyA+PiAxNikgJiAweEZGOworCQkvKiBDaGVjayAyR2JpdCAqLworCX0gZWxzZSBp ZiAoYXN0X21pbmR3bShhc3QsIDB4ODgxMDAwMDApID09IDB4MjkyQTJCMkMpIHsKKwkJcmVnXzA0 IHw9IDB4MDE7CisJCXJlZ18xNCB8PSAodFJGQyA+PiA4KSAmIDB4RkY7CisJfSBlbHNlIHsKKwkJ cmVnXzE0IHw9IHRSRkMgJiAweEZGOworCX0KKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMDQs IHJlZ18wNCk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDE0LCByZWdfMTQpOworfQorCitz dGF0aWMgdm9pZCBlbmFibGVfY2FjaGVfMjUwMChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCkKK3sK Kwl1MzIgcmVnXzA0LCBkYXRhOworCisJcmVnXzA0ID0gYXN0X21pbmR3bShhc3QsIDB4MUU2RTAw MDQpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAwNCwgcmVnXzA0IHwgMHgxMDAwKTsKKwor CWRvCisJCWRhdGEgPSBhc3RfbWluZHdtKGFzdCwgMHgxRTZFMDAwNCk7CisJd2hpbGUgKCEoZGF0 YSAmIDB4ODAwMDApKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMDQsIHJlZ18wNCB8IDB4 NDAwKTsKK30KKworc3RhdGljIHZvaWQgc2V0X21wbGxfMjUwMChzdHJ1Y3QgYXN0X3ByaXZhdGUg KmFzdCkKK3sKKwl1MzIgYWRkciwgZGF0YSwgcGFyYW07CisKKwkvKiBSZXNldCBNTUMgKi8KKwlh c3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMDAsIDB4RkM2MDAzMDkpOworCWFzdF9tb3V0ZHdtKGFz dCwgMHgxRTZFMDAzNCwgMHgwMDAyMDA4MCk7CisJZm9yIChhZGRyID0gMHgxZTZlMDAwNDsgYWRk ciA8IDB4MWU2ZTAwOTA7KSB7CisJCWFzdF9tb3V0ZHdtKGFzdCwgYWRkciwgMHgwKTsKKwkJYWRk ciArPSA0OworCX0KKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMzQsIDB4MDAwMjAwMDApOwor CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUyMDAwLCAweDE2ODhBOEE4KTsKKwlkYXRhID0gYXN0 X21pbmR3bShhc3QsIDB4MUU2RTIwNzApICYgMHgwMDgwMDAwMDsKKwlpZiAoZGF0YSkgeworCQkv KiBDTEtJTiA9IDI1TUh6ICovCisJCXBhcmFtID0gMHg5MzAwMjNFMDsKKwkJYXN0X21vdXRkd20o YXN0LCAweDFFNkUyMTYwLCAweDAwMDExMzIwKTsKKwl9IGVsc2UgeworCQkvKiBDTEtJTiA9IDI0 TUh6ICovCisJCXBhcmFtID0gMHg5MzAwMjQwMDsKKwl9CisJYXN0X21vdXRkd20oYXN0LCAweDFF NkUyMDIwLCBwYXJhbSk7CisJdWRlbGF5KDEwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X21t Y18yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQoreworCWFzdF9tb3V0ZHdtKGFzdCwgMHgx RTc4NTA1QywgMHgwMDAwMDAwNCk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDQ0LCAweDAw MDAwMDAxKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU3ODUwNDgsIDB4MDAwMDQ3NTUpOworCWFz dF9tb3V0ZHdtKGFzdCwgMHgxRTc4NTA0QywgMHgwMDAwMDAxMyk7CisJbWRlbGF5KDEwMCk7CisJ YXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDU0LCAweDAwMDAwMDc3KTsKKwlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAwMDAsIDB4RkM2MDAzMDkpOworfQorCitzdGF0aWMgdm9pZCBkZHIzX2luaXRf MjUwMChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgY29uc3QgdTMyICpkZHJfdGFibGUpCit7CisK Kwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMDQsIDB4MDAwMDAzMDMpOworCWFzdF9tb3V0ZHdt KGFzdCwgMHgxRTZFMDAxMCwgZGRyX3RhYmxlW1JFR0lEWF8wMTBdKTsKKwlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAwMTQsIGRkcl90YWJsZVtSRUdJRFhfMDE0XSk7CisJYXN0X21vdXRkd20oYXN0 LCAweDFFNkUwMDE4LCBkZHJfdGFibGVbUkVHSURYXzAxOF0pOworCWFzdF9tb3V0ZHdtKGFzdCwg MHgxRTZFMDAyMCwgZGRyX3RhYmxlW1JFR0lEWF8wMjBdKTsJICAgICAvKiBNT0RFUkVHNC82ICov CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDI0LCBkZHJfdGFibGVbUkVHSURYXzAyNF0pOwkg ICAgIC8qIE1PREVSRUc1ICovCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDJDLCBkZHJfdGFi bGVbUkVHSURYXzAyQ10gfCAweDEwMCk7IC8qIE1PREVSRUcwLzIgKi8KKwlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAwMzAsIGRkcl90YWJsZVtSRUdJRFhfMDMwXSk7CSAgICAgLyogTU9ERVJFRzEv MyAqLworCisJLyogRERSIFBIWSBTZXR0aW5nICovCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUw MjAwLCAweDAyNDkyQUFFKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyMDQsIDB4MDAwMDEw MDEpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDIwQywgMHg1NUUwMEIwQik7CisJYXN0X21v dXRkd20oYXN0LCAweDFFNkUwMjEwLCAweDIwMDAwMDAwKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4 MUU2RTAyMTQsIGRkcl90YWJsZVtSRUdJRFhfMjE0XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFF NkUwMkUwLCBkZHJfdGFibGVbUkVHSURYXzJFMF0pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZF MDJFNCwgZGRyX3RhYmxlW1JFR0lEWF8yRTRdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAy RTgsIGRkcl90YWJsZVtSRUdJRFhfMkU4XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkVD LCBkZHJfdGFibGVbUkVHSURYXzJFQ10pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDJGMCwg ZGRyX3RhYmxlW1JFR0lEWF8yRjBdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyRjQsIGRk cl90YWJsZVtSRUdJRFhfMkY0XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkY4LCBkZHJf dGFibGVbUkVHSURYXzJGOF0pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDI5MCwgMHgwMDEw MDAwOCk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkMwLCAweDAwMDAwMDA2KTsKKworCS8q IENvbnRyb2xsZXIgU2V0dGluZyAqLworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAzNCwgMHgw MDAyMDA5MSk7CisKKwkvKiBXYWl0IEREUiBQSFkgaW5pdCBkb25lICovCisJZGRyX3BoeV9pbml0 XzI1MDAoYXN0KTsKKworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDEyMCwgZGRyX3RhYmxlW1JF R0lEWF9QTExdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMEMsIDB4NDJBQTVDODEpOwor CWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAzNCwgMHgwMDAxQUY5Myk7CisKKwljaGVja19kcmFt X3NpemVfMjUwMChhc3QsIGRkcl90YWJsZVtSRUdJRFhfUkZDXSk7CisJZW5hYmxlX2NhY2hlXzI1 MDAoYXN0KTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMUMsIDB4MDAwMDAwMDgpOworCWFz dF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAzOCwgMHhGRkZGRkYwMCk7Cit9CisKK3N0YXRpYyB2b2lk IGRkcjRfaW5pdF8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0LCBjb25zdCB1MzIgKmRkcl90 YWJsZSkKK3sKKwl1MzIgZGF0YSwgZGF0YTIsIHBhc3MsIHJldHJ5Y250OworCXUzMiBkZHJfdnJl ZiwgcGh5X3ZyZWY7CisJdTMyIG1pbl9kZHJfdnJlZiA9IDAsIG1pbl9waHlfdnJlZiA9IDA7CisJ dTMyIG1heF9kZHJfdnJlZiA9IDAsIG1heF9waHlfdnJlZiA9IDA7CisKKwlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAwMDQsIDB4MDAwMDAzMTMpOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAx MCwgZGRyX3RhYmxlW1JFR0lEWF8wMTBdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMTQs IGRkcl90YWJsZVtSRUdJRFhfMDE0XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDE4LCBk ZHJfdGFibGVbUkVHSURYXzAxOF0pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAyMCwgZGRy X3RhYmxlW1JFR0lEWF8wMjBdKTsJICAgICAvKiBNT0RFUkVHNC82ICovCisJYXN0X21vdXRkd20o YXN0LCAweDFFNkUwMDI0LCBkZHJfdGFibGVbUkVHSURYXzAyNF0pOwkgICAgIC8qIE1PREVSRUc1 ICovCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDJDLCBkZHJfdGFibGVbUkVHSURYXzAyQ10g fCAweDEwMCk7IC8qIE1PREVSRUcwLzIgKi8KKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMzAs IGRkcl90YWJsZVtSRUdJRFhfMDMwXSk7CSAgICAgLyogTU9ERVJFRzEvMyAqLworCisJLyogRERS IFBIWSBTZXR0aW5nICovCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMjAwLCAweDQyNDkyQUFF KTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyMDQsIDB4MDkwMDIwMDApOworCWFzdF9tb3V0 ZHdtKGFzdCwgMHgxRTZFMDIwQywgMHg1NUUwMEIwQik7CisJYXN0X21vdXRkd20oYXN0LCAweDFF NkUwMjEwLCAweDIwMDAwMDAwKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyMTQsIGRkcl90 YWJsZVtSRUdJRFhfMjE0XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkUwLCBkZHJfdGFi bGVbUkVHSURYXzJFMF0pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDJFNCwgZGRyX3RhYmxl W1JFR0lEWF8yRTRdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyRTgsIGRkcl90YWJsZVtS RUdJRFhfMkU4XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkVDLCBkZHJfdGFibGVbUkVH SURYXzJFQ10pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDJGMCwgZGRyX3RhYmxlW1JFR0lE WF8yRjBdKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyRjQsIGRkcl90YWJsZVtSRUdJRFhf MkY0XSk7CisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMkY4LCBkZHJfdGFibGVbUkVHSURYXzJG OF0pOworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDI5MCwgMHgwMDEwMDAwOCk7CisJYXN0X21v dXRkd20oYXN0LCAweDFFNkUwMkM0LCAweDNDMTgzQzNDKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4 MUU2RTAyQzgsIDB4MDA2MzFFMEUpOworCisJLyogQ29udHJvbGxlciBTZXR0aW5nICovCisJYXN0 X21vdXRkd20oYXN0LCAweDFFNkUwMDM0LCAweDAwMDFBOTkxKTsKKworCS8qIFRyYWluIFBIWSBW cmVmIGZpcnN0ICovCisJcGFzcyA9IDA7CisKKwlmb3IgKHJldHJ5Y250ID0gMDsgcmV0cnljbnQg PCA0ICYmIHBhc3MgPT0gMDsgcmV0cnljbnQrKykgeworCQltYXhfcGh5X3ZyZWYgPSAweDA7CisJ CXBhc3MgPSAwOworCQlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyQzAsIDB4MDAwMDFDMDYpOwor CQlmb3IgKHBoeV92cmVmID0gMHg0MDsgcGh5X3ZyZWYgPCAweDgwOyBwaHlfdnJlZisrKSB7CisJ CQlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwMEMsIDB4MDAwMDAwMDApOworCQkJYXN0X21vdXRk d20oYXN0LCAweDFFNkUwMDYwLCAweDAwMDAwMDAwKTsKKwkJCWFzdF9tb3V0ZHdtKGFzdCwgMHgx RTZFMDJDQywgcGh5X3ZyZWYgfCAocGh5X3ZyZWYgPDwgOCkpOworCQkJLyogRmlyZSBERkkgSW5p dCAqLworCQkJZGRyX3BoeV9pbml0XzI1MDAoYXN0KTsKKwkJCWFzdF9tb3V0ZHdtKGFzdCwgMHgx RTZFMDAwQywgMHgwMDAwNUMwMSk7CisJCQlpZiAoY2JyX3Rlc3RfMjUwMChhc3QpKSB7CisJCQkJ cGFzcysrOworCQkJCWRhdGEgPSBhc3RfbWluZHdtKGFzdCwgMHgxRTZFMDNEMCk7CisJCQkJZGF0 YTIgPSBkYXRhID4+IDg7CisJCQkJZGF0YSAgPSBkYXRhICYgMHhmZjsKKwkJCQlpZiAoZGF0YSA+ IGRhdGEyKQorCQkJCQlkYXRhID0gZGF0YTI7CisJCQkJaWYgKG1heF9waHlfdnJlZiA8IGRhdGEp IHsKKwkJCQkJbWF4X3BoeV92cmVmID0gZGF0YTsKKwkJCQkJbWluX3BoeV92cmVmID0gcGh5X3Zy ZWY7CisJCQkJfQorCQkJfSBlbHNlIGlmIChwYXNzID4gMCkKKwkJCQlicmVhazsKKwkJfQorCX0K Kwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAyQ0MsIG1pbl9waHlfdnJlZiB8IChtaW5fcGh5X3Zy ZWYgPDwgOCkpOworCisJLyogVHJhaW4gRERSIFZyZWYgbmV4dCAqLworCXBhc3MgPSAwOworCisJ Zm9yIChyZXRyeWNudCA9IDA7IHJldHJ5Y250IDwgNCAmJiBwYXNzID09IDA7IHJldHJ5Y250Kysp IHsKKwkJbWluX2Rkcl92cmVmID0gMHhGRjsKKwkJbWF4X2Rkcl92cmVmID0gMHgwOworCQlwYXNz ID0gMDsKKwkJZm9yIChkZHJfdnJlZiA9IDB4MDA7IGRkcl92cmVmIDwgMHg0MDsgZGRyX3ZyZWYr KykgeworCQkJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDBDLCAweDAwMDAwMDAwKTsKKwkJCWFz dF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2MCwgMHgwMDAwMDAwMCk7CisJCQlhc3RfbW91dGR3bShh c3QsIDB4MUU2RTAyQzAsIDB4MDAwMDAwMDYgfCAoZGRyX3ZyZWYgPDwgOCkpOworCQkJLyogRmly ZSBERkkgSW5pdCAqLworCQkJZGRyX3BoeV9pbml0XzI1MDAoYXN0KTsKKwkJCWFzdF9tb3V0ZHdt KGFzdCwgMHgxRTZFMDAwQywgMHgwMDAwNUMwMSk7CisJCQlpZiAoY2JyX3Rlc3RfMjUwMChhc3Qp KSB7CisJCQkJcGFzcysrOworCQkJCWlmIChtaW5fZGRyX3ZyZWYgPiBkZHJfdnJlZikKKwkJCQkJ bWluX2Rkcl92cmVmID0gZGRyX3ZyZWY7CisJCQkJaWYgKG1heF9kZHJfdnJlZiA8IGRkcl92cmVm KQorCQkJCQltYXhfZGRyX3ZyZWYgPSBkZHJfdnJlZjsKKwkJCX0gZWxzZSBpZiAocGFzcyAhPSAw KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDBDLCAw eDAwMDAwMDAwKTsKKwlhc3RfbW91dGR3bShhc3QsIDB4MUU2RTAwNjAsIDB4MDAwMDAwMDApOwor CWRkcl92cmVmID0gKG1pbl9kZHJfdnJlZiArIG1heF9kZHJfdnJlZiArIDEpID4+IDE7CisJYXN0 X21vdXRkd20oYXN0LCAweDFFNkUwMkMwLCAweDAwMDAwMDA2IHwgKGRkcl92cmVmIDw8IDgpKTsK KworCS8qIFdhaXQgRERSIFBIWSBpbml0IGRvbmUgKi8KKwlkZHJfcGh5X2luaXRfMjUwMChhc3Qp OworCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMTIwLCBkZHJfdGFibGVbUkVHSURYX1BMTF0p OworCWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAwQywgMHg0MkFBNUM4MSk7CisJYXN0X21vdXRk d20oYXN0LCAweDFFNkUwMDM0LCAweDAwMDFBRjkzKTsKKworCWNoZWNrX2RyYW1fc2l6ZV8yNTAw KGFzdCwgZGRyX3RhYmxlW1JFR0lEWF9SRkNdKTsKKwllbmFibGVfY2FjaGVfMjUwMChhc3QpOwor CWFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDAxQywgMHgwMDAwMDAwOCk7CisJYXN0X21vdXRkd20o YXN0LCAweDFFNkUwMDM4LCAweEZGRkZGRjAwKTsKK30KKworc3RhdGljIGJvb2wgYXN0X2RyYW1f aW5pdF8yNTAwKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQoreworCXUzMiBkYXRhOworCXUzMiBt YXhfdHJpZXMgPSA1OworCisJZG8geworCQlpZiAobWF4X3RyaWVzLS0gPT0gMCkKKwkJCXJldHVy biBmYWxzZTsKKwkJc2V0X21wbGxfMjUwMChhc3QpOworCQlyZXNldF9tbWNfMjUwMChhc3QpOwor CQlkZHJfaW5pdF9jb21tb25fMjUwMChhc3QpOworCisJCWRhdGEgPSBhc3RfbWluZHdtKGFzdCwg MHgxRTZFMjA3MCk7CisJCWlmIChkYXRhICYgMHgwMTAwMDAwMCkKKwkJCWRkcjRfaW5pdF8yNTAw KGFzdCwgYXN0MjUwMF9kZHI0XzE2MDBfdGltaW5nX3RhYmxlKTsKKwkJZWxzZQorCQkJZGRyM19p bml0XzI1MDAoYXN0LCBhc3QyNTAwX2RkcjNfMTYwMF90aW1pbmdfdGFibGUpOworCX0gd2hpbGUg KCFkZHJfdGVzdF8yNTAwKGFzdCkpOworCisJYXN0X21vdXRkd20oYXN0LCAweDFFNkUyMDQwLCBh c3RfbWluZHdtKGFzdCwgMHgxRTZFMjA0MCkgfCAweDQxKTsKKworCS8qIFBhdGNoIGNvZGUgKi8K KwlkYXRhID0gYXN0X21pbmR3bShhc3QsIDB4MUU2RTIwMEMpICYgMHhGOUZGRkZGRjsKKwlhc3Rf bW91dGR3bShhc3QsIDB4MUU2RTIwMEMsIGRhdGEgfCAweDEwMDAwMDAwKTsKKworCXJldHVybiB0 cnVlOworfQorCit2b2lkIGFzdF9wb3N0X2NoaXBfMjUwMChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIg dGVtcDsKKwl1OCByZWc7CisKKwlyZWcgPSBhc3RfZ2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNU X0lPX0NSVENfUE9SVCwgMHhkMCwgMHhmZik7CisJaWYgKChyZWcgJiAweDgwKSA9PSAwKSB7Lyog dmdhIG9ubHkgKi8KKwkJLyogQ2xlYXIgYnVzIGxvY2sgY29uZGl0aW9uICovCisJCWFzdF9tb3V0 ZHdtKGFzdCwgMHgxZTYwMDAwMCwgMHhBRUVEMUEwMyk7CisJCWFzdF9tb3V0ZHdtKGFzdCwgMHgx ZTYwMDA4NCwgMHgwMDAxMDAwMCk7CisJCWFzdF9tb3V0ZHdtKGFzdCwgMHgxZTYwMDA4OCwgMHgw MDAwMDAwMCk7CisJCWFzdF9tb3V0ZHdtKGFzdCwgMHgxZTZlMjAwMCwgMHgxNjg4QThBOCk7CisJ CWFzdF93cml0ZTMyKGFzdCwgMHhmMDA0LCAweDFlNmUwMDAwKTsKKwkJYXN0X3dyaXRlMzIoYXN0 LCAweGYwMDAsIDB4MSk7CisJCWFzdF93cml0ZTMyKGFzdCwgMHgxMjAwMCwgMHgxNjg4YThhOCk7 CisJCXdoaWxlIChhc3RfcmVhZDMyKGFzdCwgMHgxMjAwMCkgIT0gMHgxKQorCQkJOworCisJCWFz dF93cml0ZTMyKGFzdCwgMHgxMDAwMCwgMHhmYzYwMDMwOSk7CisJCXdoaWxlIChhc3RfcmVhZDMy KGFzdCwgMHgxMDAwMCkgIT0gMHgxKQorCQkJOworCisJCS8qIFNsb3cgZG93biBDUFUvQUhCIENM SyBpbiBWR0Egb25seSBtb2RlICovCisJCXRlbXAgPSBhc3RfcmVhZDMyKGFzdCwgMHgxMjAwOCk7 CisJCXRlbXAgfD0gMHg3MzsKKwkJYXN0X3dyaXRlMzIoYXN0LCAweDEyMDA4LCB0ZW1wKTsKKwor CQkvKiBSZXNldCBVU0IgcG9ydCB0byBwYXRjaCBVU0IgdW5rbm93biBkZXZpY2UgaXNzdWUgKi8K KwkJYXN0X21vdXRkd20oYXN0LCAweDFlNmUyMDkwLCAweDIwMDAwMDAwKTsKKwkJdGVtcCAgPSBh c3RfbWluZHdtKGFzdCwgMHgxZTZlMjA5NCk7CisJCXRlbXAgfD0gMHgwMDAwNDAwMDsKKwkJYXN0 X21vdXRkd20oYXN0LCAweDFlNmUyMDk0LCB0ZW1wKTsKKwkJdGVtcCAgPSBhc3RfbWluZHdtKGFz dCwgMHgxZTZlMjA3MCk7CisJCWlmICh0ZW1wICYgMHgwMDgwMDAwMCkgeworCQkJYXN0X21vdXRk d20oYXN0LCAweDFlNmUyMDdjLCAweDAwODAwMDAwKTsKKwkJCW1kZWxheSgxMDApOworCQkJYXN0 X21vdXRkd20oYXN0LCAweDFlNmUyMDcwLCAweDAwODAwMDAwKTsKKwkJfQorCisJCWlmICghYXN0 X2RyYW1faW5pdF8yNTAwKGFzdCkpCisJCQlEUk1fRVJST1IoIkRSQU0gaW5pdCBmYWlsZWQgIVxu Iik7CisKKwkJdGVtcCA9IGFzdF9taW5kd20oYXN0LCAweDFlNmUyMDQwKTsKKwkJYXN0X21vdXRk d20oYXN0LCAweDFlNmUyMDQwLCB0ZW1wIHwgMHg0MCk7CisJfQorCisJLyogd2FpdCByZWFkeSAq LworCWRvIHsKKwkJcmVnID0gYXN0X2dldF9pbmRleF9yZWdfbWFzayhhc3QsIEFTVF9JT19DUlRD X1BPUlQsIDB4ZDAsIDB4ZmYpOworCX0gd2hpbGUgKChyZWcgJiAweDQwKSA9PSAwKTsKK30KLS0g CjIuOS4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK