From owner-freebsd-current@FreeBSD.ORG Mon Jul 21 10:49:34 2008 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2A6331065677 for ; Mon, 21 Jul 2008 10:49:34 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from smtp11.yandex.ru (smtp11.yandex.ru [213.180.223.93]) by mx1.freebsd.org (Postfix) with ESMTP id CFB4D8FC1F for ; Mon, 21 Jul 2008 10:49:32 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from mail.kirov.so-cdu.ru ([77.72.136.145]:42747 "EHLO [127.0.0.1]" smtp-auth: "bu7cher" TLS-CIPHER: "DHE-RSA-AES256-SHA keybits 256/256 version TLSv1/SSLv3" TLS-PEER-CN1: ) by mail.yandex.ru with ESMTP id S1247007AbYGUKh4 (ORCPT ); Mon, 21 Jul 2008 14:37:56 +0400 X-Yandex-Spam: 1 X-Yandex-Front: smtp11 X-Yandex-TimeMark: 1216636676 X-MsgDayCount: 6 X-Comment: RFC 2476 MSA function at smtp11.yandex.ru logged sender identity as: bu7cher Message-ID: <4884668C.5060606@yandex.ru> Date: Mon, 21 Jul 2008 14:35:56 +0400 From: "Andrey V. Elsukov" User-Agent: Mozilla Thunderbird 1.5 (FreeBSD/20051231) MIME-Version: 1.0 To: Sergey G Nasonov References: <200807151124.36621.snasonov@bcc.ru> In-Reply-To: <200807151124.36621.snasonov@bcc.ru> Content-Type: multipart/mixed; boundary="------------070900010409000403070108" Cc: freebsd-current@freebsd.org, =?UTF-8?B?U8O4cmVuIFNjaG1pZHQ=?= Subject: RFC, RFT: AHCI driver reorganization (was: Re: ATA subsystem lost drive after resume process) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jul 2008 10:49:34 -0000 This is a multi-part message in MIME format. --------------070900010409000403070108 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Sergey G Nasonov wrote: > to disk. So the basic issue preventing normal suspend/resume > process on modern Lenovo laptops is ata subsystem. Does anyone can > help with this problem? I can test any path or provide additional > info. Hi, All. I wrote patch for AHCI driver and Sergey tested it. So, He reported that now "suspend/resume" works on his laptop. I'll try to describe all changes which my patch makes. 1. Initialization: * Global AHCI reset code moved to ata_ahci_reset_controller() function (it will be reused in ata_ahci_resume). * Detection of implemented ports moved to ata_ahci_allocate() function (i think it isn't needed to detect it on each reset). * From ata_ahci_allocate() function removed all working code, only initialization code is here. 2. Resetting: * ata_ahci_reset() function reorganized and splitted to several functions: ata_ahci_stop_channel() - stop all port activity; ata_ahci_fre_stop() - disable FIS receiving; ata_ahci_fre_start() - setup work areas and enable FIS receiving; ata_ahci_clo_enable() - enable command list override. * working code from ata_ahci_allocate moved to ata_ahci_reset. * CLO shall only be set immediately prior to setting the PxCMD.ST bit to '1' (from AHCI spec). * Software shall not set PxCMD.ST to 1 until it is determined that a functional device is present on the port (from AHCI spec). * removed hack when didn't detect signature asuming disk device (it may broke some systems, but it needs testing). 3. Interrupts handling: * Call ata_sata_phy_check_events() only when PHY changing detected. * Fatal error handling changed. 4. Suspend/resume: * Added new methods to atapci(4) driver * Added suspend/resume implementation for AHCI: + Software must disable interrupts prior to requesting a transition of the HBA to the D3 state. + Reset controller and enable interrupts before resume. So, any comments and suggestions are welcome. -- WBR, Andrey V. Elsukov --------------070900010409000403070108 Content-Type: text/plain; name="ata_ahci_improvements_with_suspend_resume.diff.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="ata_ahci_improvements_with_suspend_resume.diff.txt" SW5kZXg6IHNyYy9zeXMvZGV2L2F0YS9hdGEtYWxsLmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL25jdnMvc3JjL3N5cy9kZXYvYXRhL2F0YS1hbGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMzMKZGlmZiAtdSAtYiAtcCAtcjEuMTMzIGF0YS1hbGwuaAotLS0gc3JjL3N5cy9k ZXYvYXRhL2F0YS1hbGwuaAkxNyBBcHIgMjAwOCAxMjoyOTozNSAtMDAwMAkxLjEzMworKysg c3JjL3N5cy9kZXYvYXRhL2F0YS1hbGwuaAkyMSBKdWwgMjAwOCAwOToyMzozMSAtMDAwMApA QCAtMTg4LDYgKzE4OCw5IEBACiAjZGVmaW5lICAgICAgICAgQVRBX0FIQ0lfUF9JWF9IQkYg ICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSAgICAgICAgIEFUQV9BSENJX1BfSVhfVEZFICAg ICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgICAgICAgICBBVEFfQUhDSV9QX0lYX0NQRCAgICAg ICAweDgwMDAwMDAwCisjZGVmaW5lICAgICAgICAgQVRBX0FIQ0lfUF9JWF9GRSBcCisgICAg ICAgICAgICAgICAgICAgICAgICAoQVRBX0FIQ0lfUF9JWF9URkUgfCBBVEFfQUhDSV9QX0lY X0hCRiB8XAorICAgICAgICAgICAgICAgICAgICAgICAgIEFUQV9BSENJX1BfSVhfSEJEIHwg QVRBX0FIQ0lfUF9JWF9JRikKIAogI2RlZmluZSBBVEFfQUhDSV9QX0NNRCAgICAgICAgICAg ICAgICAgIDB4MTE4CiAjZGVmaW5lICAgICAgICAgQVRBX0FIQ0lfUF9DTURfU1QgICAgICAg MHgwMDAwMDAwMQpJbmRleDogc3JjL3N5cy9kZXYvYXRhL2F0YS1jaGlwc2V0LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL25jdnMvc3JjL3N5cy9kZXYvYXRhL2F0YS1jaGlwc2V0LmMs dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjI0CmRpZmYgLXUgLWIgLXAgLXIxLjIyNCBhdGEt Y2hpcHNldC5jCi0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhLWNoaXBzZXQuYwkxMCBKdWwgMjAw OCAyMTozNjo1MyAtMDAwMAkxLjIyNAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YS1jaGlwc2V0 LmMJMjEgSnVsIDIwMDggMDk6MjM6MzEgLTAwMDAKQEAgLTYyLDYgKzYyLDkgQEAgc3RhdGlj IGludCBhdGFfc2F0YV9jb25uZWN0KHN0cnVjdCBhdGFfYwogc3RhdGljIHZvaWQgYXRhX3Nh dGFfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKTsKIHN0YXRpYyBpbnQgYXRhX3Jl cXVlc3QyZmlzX2gyZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QsIHVfaW50OF90ICpm aXMpOwogc3RhdGljIGludCBhdGFfYWhjaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOworc3Rh dGljIGludCBhdGFfYWhjaV9zdXNwZW5kKGRldmljZV90IGRldik7CitzdGF0aWMgaW50IGF0 YV9haGNpX3Jlc3VtZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBhdGFfYWhjaV9yZXNl dF9jb250cm9sbGVyKGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9haGNpX2FsbG9j YXRlKGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9haGNpX3N0YXR1cyhkZXZpY2Vf dCBkZXYpOwogc3RhdGljIGludCBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg YXRhX3JlcXVlc3QgKnJlcXVlc3QpOwpAQCAtNjksNiArNzIsMTEgQEAgc3RhdGljIGludCBh dGFfYWhjaV9lbmRfdHJhbnNhY3Rpb24oc3RydQogc3RhdGljIGludCBhdGFfYWhjaV9wbV9y ZWFkKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCAqcmVzdWx0 KTsKIHN0YXRpYyBpbnQgYXRhX2FoY2lfcG1fd3JpdGUoZGV2aWNlX3QgZGV2LCBpbnQgcG9y dCwgaW50IHJlZywgdV9pbnQzMl90IHJlc3VsdCk7CiBzdGF0aWMgdV9pbnQzMl90IGF0YV9h aGNpX3NvZnRyZXNldChkZXZpY2VfdCBkZXYsIGludCBwb3J0KTsKK3N0YXRpYyB2b2lkIGF0 YV9haGNpX2ZyZV9zdGFydChzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoKTsKK3N0YXRpYyB2b2lk IGF0YV9haGNpX2ZyZV9zdG9wKHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpOworc3RhdGljIHZv aWQgYXRhX2FoY2lfc3RvcF9jaGFubmVsKHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gpOworc3Rh dGljIHZvaWQgYXRhX2FoY2lfcmVzdGFydF9jaGFubmVsKHN0cnVjdCBhdGFfY2hhbm5lbCAq Y2gpOworc3RhdGljIHZvaWQgYXRhX2FoY2lfY2xvX2VuYWJsZShzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoKTsKIHN0YXRpYyB2b2lkIGF0YV9haGNpX3Jlc2V0KGRldmljZV90IGRldik7CiBz dGF0aWMgdm9pZCBhdGFfYWhjaV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21l bnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgYXRhX2Fo Y2lfZG1haW5pdChkZXZpY2VfdCBkZXYpOwpAQCAtNTgyLDYgKzU5MCwyOSBAQCBhdGFfYWhj aV9pZGVudChkZXZpY2VfdCBkZXYpCiB9CiAKIHN0YXRpYyBpbnQKK2F0YV9haGNpX3Jlc2V0 X2NvbnRyb2xsZXIoZGV2aWNlX3QgZGV2KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKyAgICAvKiBlbmFibGUg QUhDSSBtb2RlICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMs IEFUQV9BSENJX0dIQ19BRSk7CisKKyAgICAvKiByZXNldCBBSENJIGNvbnRyb2xsZXIgKi8K KyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQywgQVRBX0FIQ0lfR0hD X0hSKTsKKyAgICBERUxBWSgxMDAwMDAwKTsKKyAgICBpZiAoQVRBX0lOTChjdGxyLT5yX3Jl czIsIEFUQV9BSENJX0dIQykgJiBBVEFfQUhDSV9HSENfSFIpIHsKKwlidXNfcmVsZWFzZV9y ZXNvdXJjZShkZXYsIGN0bHItPnJfdHlwZTIsIGN0bHItPnJfcmlkMiwgY3Rsci0+cl9yZXMy KTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgIkFIQ0kgY29udHJvbGxlciByZXNldCBmYWlsdXJl XG4iKTsKKwlyZXR1cm4gRU5YSU87CisgICAgfQorCisgICAgLyogcmVlbmFibGUgQUhDSSBt b2RlICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMsIEFUQV9B SENJX0dIQ19BRSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogYXRhX2Fo Y2lfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CkBAIC02MDIsMjAgKzYzMyw4 IEBAIGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRldikKICAgICBlbHNlCiAJZGV2aWNl X3ByaW50ZihkZXYsICJBSENJIGNhbGxlZCBmcm9tIHZlbmRvciBzcGVjaWZpYyBkcml2ZXJc biIpOwogCi0gICAgLyogZW5hYmxlIEFIQ0kgbW9kZSAqLwotICAgIEFUQV9PVVRMKGN0bHIt PnJfcmVzMiwgQVRBX0FIQ0lfR0hDLCBBVEFfQUhDSV9HSENfQUUpOwotCi0gICAgLyogcmVz ZXQgQUhDSSBjb250cm9sbGVyICovCi0gICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFf QUhDSV9HSEMsIEFUQV9BSENJX0dIQ19IUik7Ci0gICAgREVMQVkoMTAwMDAwMCk7Ci0gICAg aWYgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpICYgQVRBX0FIQ0lfR0hD X0hSKSB7Ci0JYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBjdGxyLT5yX3R5cGUyLCBjdGxy LT5yX3JpZDIsIGN0bHItPnJfcmVzMik7Ci0JZGV2aWNlX3ByaW50ZihkZXYsICJBSENJIGNv bnRyb2xsZXIgcmVzZXQgZmFpbHVyZVxuIik7CisgICAgaWYgKGF0YV9haGNpX3Jlc2V0X2Nv bnRyb2xsZXIoZGV2KSkKIAlyZXR1cm4gRU5YSU87Ci0gICAgfQotCi0gICAgLyogcmVlbmFi bGUgQUhDSSBtb2RlICovCi0gICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9H SEMsIEFUQV9BSENJX0dIQ19BRSk7CiAKICAgICAvKiBnZXQgdGhlIG51bWJlciBvZiBIVyBj aGFubmVscyAqLwogICAgIGN0bHItPmNoYW5uZWxzID0KQEAgLTYzMyw2ICs2NTIsOCBAQCBh dGFfYWhjaV9jaGlwaW5pdChkZXZpY2VfdCBkZXYpCiAgICAgY3Rsci0+ZG1haW5pdCA9IGF0 YV9haGNpX2RtYWluaXQ7CiAgICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFfYWhjaV9hbGxvY2F0 ZTsKICAgICBjdGxyLT5zZXRtb2RlID0gYXRhX3NhdGFfc2V0bW9kZTsKKyAgICBjdGxyLT5y ZXN1bWUgPSBhdGFfYWhjaV9yZXN1bWU7CisgICAgY3Rsci0+c3VzcGVuZCA9IGF0YV9haGNp X3N1c3BlbmQ7CiAKICAgICAvKiBlbmFibGUgUENJIGludGVycnVwdCAqLwogICAgIHBjaV93 cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQsCkBAIC02NTUsOSArNjc2LDEzIEBAIGF0 YV9haGNpX2FsbG9jYXRlKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX3BjaV9j b250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChk ZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXYpOwotICAgIHVfaW50NjRfdCB3b3JrOwogICAgIGludCBvZmZzZXQgPSBjaC0+dW5pdCA8 PCA3OwogCisgICAgaWYgKCEoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BJKSAm ICgxIDw8IGNoLT51bml0KSkpIHsKKwlkZXZpY2VfcHJpbnRmKGRldiwgInBvcnQgbm90IGlt cGxlbWVudGVkXG4iKTsKKwlyZXR1cm4gRU5YSU87CisgICAgfQorCiAgICAgLyogc2V0IHRo ZSBTQVRBIHJlc291cmNlcyAqLwogICAgIGNoLT5yX2lvW0FUQV9TU1RBVFVTXS5yZXMgPSBj dGxyLT5yX3JlczI7CiAgICAgY2gtPnJfaW9bQVRBX1NTVEFUVVNdLm9mZnNldCA9IEFUQV9B SENJX1BfU1NUUyArIG9mZnNldDsKQEAgLTY3NiwzMCArNzAxLDQ1IEBAIGF0YV9haGNpX2Fs bG9jYXRlKGRldmljZV90IGRldikKICAgICBjaC0+aHcucG1fcmVhZCA9IGF0YV9haGNpX3Bt X3JlYWQ7CiAgICAgY2gtPmh3LnBtX3dyaXRlID0gYXRhX2FoY2lfcG1fd3JpdGU7CiAKLSAg ICAvKiBzZXR1cCB3b3JrIGFyZWFzICovCi0gICAgd29yayA9IGNoLT5kbWEud29ya19idXMg KyBBVEFfQUhDSV9DTF9PRkZTRVQ7Ci0gICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFf QUhDSV9QX0NMQiArIG9mZnNldCwgd29yayAmIDB4ZmZmZmZmZmYpOwotICAgIEFUQV9PVVRM KGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0LCB3b3JrID4+IDMyKTsK KyAgICByZXR1cm4gMDsKK30KIAotICAgIHdvcmsgPSBjaC0+ZG1hLndvcmtfYnVzICsgQVRB X0FIQ0lfRkJfT0ZGU0VUOwotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lf UF9GQiArIG9mZnNldCwgd29yayAmIDB4ZmZmZmZmZmYpOyAKLSAgICBBVEFfT1VUTChjdGxy LT5yX3JlczIsIEFUQV9BSENJX1BfRkJVICsgb2Zmc2V0LCB3b3JrID4+IDMyKTsKK3N0YXRp YyBpbnQKK2F0YV9haGNpX3N1c3BlbmQoZGV2aWNlX3QgZGV2KQoreworICAgIHN0cnVjdCBh dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKLSAg ICAvKiBlbmFibGUgd2FudGVkIHBvcnQgaW50ZXJydXB0cyAqLwotICAgIEFUQV9PVVRMKGN0 bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JRSArIG9mZnNldCwKLQkgICAgIChBVEFfQUhDSV9Q X0lYX0NQRCB8IEFUQV9BSENJX1BfSVhfVEZFIHwgQVRBX0FIQ0lfUF9JWF9IQkYgfAotCSAg ICAgIEFUQV9BSENJX1BfSVhfSEJEIHwgQVRBX0FIQ0lfUF9JWF9JRiB8IEFUQV9BSENJX1Bf SVhfT0YgfAotCSAgICAgIEFUQV9BSENJX1BfSVhfUFJDIHwgQVRBX0FIQ0lfUF9JWF9QQyB8 IEFUQV9BSENJX1BfSVhfRFAgfAotCSAgICAgIEFUQV9BSENJX1BfSVhfVUYgfCBBVEFfQUhD SV9QX0lYX1NEQiB8IEFUQV9BSENJX1BfSVhfRFMgfAotCSAgICAgIEFUQV9BSENJX1BfSVhf UFMgfCBBVEFfQUhDSV9QX0lYX0RIUikpOworICAgIC8qIFhYWDogUHhDTUQuU1QgbXVzdCBi ZSBjbGVhcmVkIHRvICcwJyBiZWZvcmUgZW50cnkgaW50byB0aGUKKyAgICAgKiBEMyBwb3dl ciBzdGF0ZS4KKyAgICAgKi8KIAotICAgIC8qIGVuYWJsZSBGSVMgYmFzZWQgc3dpdGNoaW5n ICovCi0gICAgLy9BVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfRkJTICsgb2Zm c2V0LCAweDAwMDAwMDAzKTsKKyAgICAvKiBTb2Z0d2FyZSBtdXN0IGRpc2FibGUgaW50ZXJy dXB0cyAoR0hDLklFIG11c3QgYmUgY2xlYXJlZCB0byAwKQorICAgICAqIHByaW9yIHRvIHJl cXVlc3RpbmcgYSB0cmFuc2l0aW9uIG9mIHRoZSBIQkEgdG8gdGhlIEQzIHN0YXRlLgorICAg ICAqLwogCi0gICAgLyogc3RhcnQgb3BlcmF0aW9ucyBvbiB0aGlzIGNoYW5uZWwgKi8KLSAg ICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAotCSAg ICAgKEFUQV9BSENJX1BfQ01EX0FDVElWRSB8IEFUQV9BSENJX1BfQ01EX0ZSRSB8Ci0JICAg ICAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lfUF9DTURfU1VEIHwgQVRBX0FIQ0lf UF9DTURfU1QpKTsKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQywK KwkgICAgIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpICYgKH5BVEFfQUhD SV9HSENfSUUpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithdGFfYWhj aV9yZXN1bWUoZGV2aWNlX3QgZGV2KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xs ZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKyAgICAvKiByZXNldCBjb250 cm9sbGVyICovCisgICAgaWYgKGF0YV9haGNpX3Jlc2V0X2NvbnRyb2xsZXIoZGV2KSkKKwly ZXR1cm4gRU5YSU87IC8qIFhYWCAqLworCisgICAgLyogY2xlYXIgaW50ZXJydXB0cyAqLwor ICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfSVMsIEFUQV9JTkwoY3Rsci0+ cl9yZXMyLCBBVEFfQUhDSV9JUykpOworCisgICAgLyogZW5hYmxlIEFIQ0kgaW50ZXJydXB0 cyAqLworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfR0hDLAorCSAgICAg QVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0dIQykgfCBBVEFfQUhDSV9HSENfSUUp OworCisgICAgLyogbmV4dCBwYXJ0IHdpbGwgYmUgZG9uZSBieSBhdGFfcmVzdW1lICovCiAg ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTcxNiwzOCArNzU2LDI0IEBAIGF0YV9haGNpX3N0YXR1 cyhkZXZpY2VfdCBkZXYpCiAJdV9pbnQzMl90IGNzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQo cykgKi8KLQlBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0lTLCBhY3Rpb24gJiAo MSA8PCBjaC0+dW5pdCkpOwogCUFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9J UyArIG9mZnNldCwgaXN0YXR1cyk7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD SV9JUywgYWN0aW9uICYgKDEgPDwgY2gtPnVuaXQpKTsKIAogCS8qIGRvIHdlIGhhdmUgYW55 IFBIWSBldmVudHMgPyAqLwotCS8qIFhYWCBTT1MgY2hlY2sgaXN0YXR1cyBwaHkgYml0cyAq LworCWlmIChpc3RhdHVzICYgKEFUQV9BSENJX1BfSVhfUFJDIHwgQVRBX0FIQ0lfUF9JWF9Q QykpCiAJYXRhX3NhdGFfcGh5X2NoZWNrX2V2ZW50cyhkZXYpOwogCiAJLyogZG8gd2UgaGF2 ZSBhIHBvdGVudGlhbGx5IGhhbmdpbmcgZW5naW5lIHRvIHRha2UgY2FyZSBvZj8gKi8KIAkv KiBYWFggU09TIHdoYXQgdG9kbyBvbiBOQ1EgKi8KLQlpZiAoKGlzdGF0dXMgJiAweDc4NDAw MDUwKSAmJiAoY3N0YXR1cyAmIDEpKSB7Ci0KLQkgICAgdV9pbnQzMl90IGNtZCA9IEFUQV9J TkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCk7Ci0JICAgIGludCB0 aW1lb3V0ID0gMDsKLQotCSAgICAvKiBraWxsIG9mZiBhbGwgYWN0aXZpdHkgb24gdGhpcyBj aGFubmVsICovCi0JICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQg KyBvZmZzZXQsCi0JCSAgICAgY21kICYgfihBVEFfQUhDSV9QX0NNRF9GUkUgfCBBVEFfQUhD SV9QX0NNRF9TVCkpOwotCi0JICAgIC8qIFhYWCBTT1MgdGhpcyBpcyBub3QgZW50aXJlbHkg d3JvbmcgKi8KLQkgICAgZG8gewotCQlERUxBWSgxMDAwKTsKLQkJaWYgKHRpbWVvdXQrKyA+ IDEwMDApIHsKLQkJICAgIGRldmljZV9wcmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdp bmUgZmFpbGVkXG4iKTsKLQkJICAgIGJyZWFrOwotCQl9Ci0gICAgCSAgICB9IHdoaWxlIChB VEFfSU5MKGN0bHItPnJfcmVzMiwKLQkJCSAgICAgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQp ICYgQVRBX0FIQ0lfUF9DTURfQ1IpOwotCi0JICAgIC8qIHN0YXJ0IG9wZXJhdGlvbnMgb24g dGhpcyBjaGFubmVsICovCi0JICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lf UF9DTUQgKyBvZmZzZXQsCi0JCSAgICAgY21kIHwgKEFUQV9BSENJX1BfQ01EX0ZSRSB8IEFU QV9BSENJX1BfQ01EX1NUKSk7Ci0KKwlpZiAoKGlzdGF0dXMgJiBBVEFfQUhDSV9QX0lYX0ZF KSAmJiAoY3N0YXR1cyAmIDEpKSB7CisJICAgIGlmIChib290dmVyYm9zZSkKKwkJZGV2aWNl X3ByaW50ZihkZXYsICJQSFkgZmF0YWwgZXJyb3I6IFB4SVMgPSAweCUwOHhcbiIsCisJCQkg ICAgaXN0YXR1cyk7CisJICAgIC8qIFRvIHJlY292ZXIgZmF0YWwgZXJyb3JzLCB0aGUgcG9y dCBtdXN0IGJlIHJlc3RhcnRlZDsKKwkgICAgICogdGhlIHBvcnQgaXMgcmVzdGFydGVkIGJ5 IGNsZWFyaW5nIFB4Q01ELlNUIHRvICcwJyBhbmQKKwkgICAgICogdGhlbiBzZXR0aW5nIFB4 Q01ELlNUIHRvICcxJy4KKwkgICAgICovCisJICAgIGF0YV9haGNpX3Jlc3RhcnRfY2hhbm5l bChjaCk7CiAJICAgIHJldHVybiAxOwogCX0KIAllbHNlCkBAIC05OTgsNDYgKzEwMjQsMTA3 IEBAIGF0YV9haGNpX3BtX3dyaXRlKGRldmljZV90IGRldiwgaW50IHBvcnQKICAgICByZXR1 cm4gKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1RGRCArIG9mZnNldCkgPj4g OCkgJiAweGZmOwogfQogCisvKiBDTE8gc2hhbGwgb25seSBiZSBzZXQgaW1tZWRpYXRlbHkg cHJpb3IgdG8gc2V0dGluZworICogdGhlIFB4Q01ELlNUIGJpdCB0byAnMScgZnJvbSBhIHBy ZXZpb3VzIHZhbHVlIG9mICcwJworICovCiBzdGF0aWMgdm9pZAotYXRhX2FoY2lfcmVzdGFy dChkZXZpY2VfdCBkZXYpCithdGFfYWhjaV9jbG9fZW5hYmxlKHN0cnVjdCBhdGFfY2hhbm5l bCAqY2gpCiB7Ci0gICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmlj ZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7Ci0gICAgc3RydWN0IGF0YV9j aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLSAgICB1X2ludDMyX3QgY21k OworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldmljZV9nZXRfcGFyZW50KGNoLT5kZXYpKTsKICAgICBpbnQgb2Zmc2V0ID0gY2gt PnVuaXQgPDwgNzsKLSAgICBpbnQgdGltZW91dDsKKyAgICBpbnQgdGltZW91dCA9IDA7Cisg ICAgdV9pbnQzMl90IGNtZDsKIAotICAgIC8qIGtpbGwgb2ZmIGFsbCBhY3Rpdml0eSBvbiB0 aGlzIGNoYW5uZWwgKi8KKyAgICBpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ X0NBUCkgJiBBVEFfQUhDSV9DQVBfQ0xPKSB7CiAgICAgY21kID0gQVRBX0lOTChjdGxyLT5y X3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KTsKICAgICBBVEFfT1VUTChjdGxyLT5y X3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAotCSAgICAgY21kICYgfihBVEFfQUhD SV9QX0NNRF9GUkUgfCBBVEFfQUhDSV9QX0NNRF9TVCkpOwotCi0gICAgLyogWFhYIFNPUyB0 aGlzIGlzIG5vdCBlbnRpcmVseSB3cm9uZyAqLwotICAgIHRpbWVvdXQgPSAwOworCQkJY21k IHwgQVRBX0FIQ0lfUF9DTURfQ0xPKTsKICAgICBkbyB7CiAJREVMQVkoMTAwMCk7CiAJaWYg KHRpbWVvdXQrKyA+IDEwMDApIHsKLQkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJzdG9wcGlu ZyBBSENJIGVuZ2luZSBmYWlsZWRcbiIpOworCQlkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJl eGVjdXRpbmcgQ0xPIGZhaWxlZFxuIik7CiAJICAgIGJyZWFrOwogCX0KKyAgICAgICAgfSB3 aGlsZSAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KQor CQkJJiBBVEFfQUhDSV9QX0NNRF9DTE8pOwogICAgIH0KLSAgICB3aGlsZSAoQVRBX0lOTChj dGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KSAmIEFUQV9BSENJX1BfQ01E X0NSKTsKK30KKworLyogV2hlbiBQeENNRC5GUiBhbmQgUHhDTUQuRlJFIGFyZSBib3RoIGNs ZWFyZWQgdG8gJzAnLCBzb2Z0d2FyZSBtYXkgdXBkYXRlCisgKiB0aGUgdmFsdWVzIG9mIFB4 RkIgYW5kIFB4RkJVLiBQcmlvciB0byBzZXR0aW5nIFB4Q01ELkZSRSB0byAnMScsIHNvZnR3 YXJlCisgKiBzaGFsbCBlbnN1cmUgdGhhdCBQeEZCIGFuZCBQeEZCVSBhcmUgc2V0IHRvIHZh bGlkIHZhbHVlcy4gU29mdHdhcmUgc2hhbGwKKyAqIG5vdCB3cml0ZSBQeEZCIGFuZCBQeEZC VSB3aGlsZSBQeENNRC5GUkUgaXMgc2V0IHRvICcxJy4KKyAqLworc3RhdGljIHZvaWQKK2F0 YV9haGNpX2ZyZV9zdGFydChzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoKQoreworICAgIHN0cnVj dCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9n ZXRfcGFyZW50KGNoLT5kZXYpKTsKKyAgICB1X2ludDMyX3Qgb2Zmc2V0ID0gY2gtPnVuaXQg PDwgNzsKKyAgICB1X2ludDY0X3Qgd29yazsKKworICAgIC8qIHNldHVwIHdvcmsgYXJlYXMg Ki8KKyAgICB3b3JrID0gY2gtPmRtYS53b3JrX2J1cyArIEFUQV9BSENJX0NMX09GRlNFVDsK KyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ0xCICsgb2Zmc2V0LCB3 b3JrICYgMHhmZmZmZmZmZik7CisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD SV9QX0NMQlUgKyBvZmZzZXQsIHdvcmsgPj4gMzIpOworCisgICAgd29yayA9IGNoLT5kbWEu d29ya19idXMgKyBBVEFfQUhDSV9GQl9PRkZTRVQ7CisgICAgQVRBX09VVEwoY3Rsci0+cl9y ZXMyLCBBVEFfQUhDSV9QX0ZCICsgb2Zmc2V0LCB3b3JrICYgMHhmZmZmZmZmZik7IAorICAg IEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQlUgKyBvZmZzZXQsIHdvcmsg Pj4gMzIpOworCisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCAr IG9mZnNldCwKKwkgICAgQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsg b2Zmc2V0KSB8IEFUQV9BSENJX1BfQ01EX0ZSRSk7Cit9CisKK3N0YXRpYyB2b2lkCithdGFf YWhjaV9mcmVfc3RvcChzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoKQoreworICAgIHN0cnVjdCBh dGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRf cGFyZW50KGNoLT5kZXYpKTsKKyAgICB1X2ludDMyX3Qgb2Zmc2V0ID0gY2gtPnVuaXQgPDwg NzsKKyAgICBpbnQgdGltZW91dCA9IDA7CisKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIs IEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAorCSAgICBBVEFfSU5MKGN0bHItPnJfcmVzMiwg QVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpICYgKH5BVEFfQUhDSV9QX0NNRF9GUkUpKTsKIAot ICAgIC8qIGlzc3VlIENvbW1hbmQgTGlzdCBPdmVycmlkZSBpZiBzdXBwb3J0ZWQgKi8gCi0g ICAgaWYgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9DQVApICYgQVRBX0FIQ0lf Q0FQX0NMTykgewotCWNtZCA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NN RCArIG9mZnNldCk7Ci0JY21kIHw9IEFUQV9BSENJX1BfQ01EX0NMTzsKLQlBVEFfT1VUTChj dGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LCBjbWQpOwotCXRpbWVvdXQg PSAwOwogCWRvIHsKIAkgICAgREVMQVkoMTAwMCk7CiAJICAgIGlmICh0aW1lb3V0KysgPiAx MDAwKSB7Ci0JCWRldmljZV9wcmludGYoZGV2LCAiZXhlY3V0aW5nIENMTyBmYWlsZWRcbiIp OworCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJhdGFfYWhjaV9mcmVfc3RvcCBmYWls ZWRcbiIpOwogCQlicmVhazsKIAkgICAgfQorICAgIH0gd2hpbGUgKEFUQV9JTkwoY3Rsci0+ cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCkgJiBBVEFfQUhDSV9QX0NNRF9GUik7 Cit9CisKK3N0YXRpYyB2b2lkCithdGFfYWhjaV9zdG9wX2NoYW5uZWwoc3RydWN0IGF0YV9j aGFubmVsICpjaCkKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChjaC0+ZGV2KSk7CisgICAgdV9p bnQzMl90IGNtZCwgb2Zmc2V0ID0gY2gtPnVuaXQgPDwgNzsKKyAgICBpbnQgdGltZW91dCA9 IDA7CisKKyAgICBjbWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQg KyBvZmZzZXQpOworICAgIGlmICgoY21kICYgKEFUQV9BSENJX1BfQ01EX1NUIHwgQVRBX0FI Q0lfUF9DTURfQ1IpKSA9PSAwKQorCXJldHVybjsKKworICAgIEFUQV9PVVRMKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQsCisJCSAgICBjbWQgJiAofkFUQV9BSENJ X1BfQ01EX1NUKSk7CisgICAgZG8geworCURFTEFZKDEwMDApOworCWlmICh0aW1lb3V0Kysg PiAxMDAwKSB7CisJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgImF0YV9haGNpX3N0b3Bf Y2hhbm5lbCBmYWlsZWRcbiIpOworCSAgICBicmVhazsKICAgICAgICAgfQotCXdoaWxlIChB VEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQrb2Zmc2V0KSZBVEFfQUhDSV9Q X0NNRF9DTE8pOwotICAgIH0KKyAgICB9IHdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVzMiwg QVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpICYgQVRBX0FIQ0lfUF9DTURfQ1IpOworfQorCisK K3N0YXRpYyB2b2lkCithdGFfYWhjaV9yZXN0YXJ0X2NoYW5uZWwoc3RydWN0IGF0YV9jaGFu bmVsICpjaCkKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChjaC0+ZGV2KSk7CisgICAgaW50IG9m ZnNldCA9IGNoLT51bml0IDw8IDc7CisKKyAgICAvKiBraWxsIG9mZiBhbGwgYWN0aXZpdHkg b24gdGhpcyBjaGFubmVsICovCisgICAgYXRhX2FoY2lfc3RvcF9jaGFubmVsKGNoKTsKIAog ICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KICAgICBBVEFfSURYX09VVEwo Y2gsIEFUQV9TRVJST1IsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0VSUk9SKSk7CkBAIC0xMDQ2 LDExICsxMTMzLDEyIEBAIGF0YV9haGNpX3Jlc3RhcnQoZGV2aWNlX3QgZGV2KQogICAgIEFU QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwKIAkgICAgIEFU QV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CiAKKyAgICAv KiBpc3N1ZSBDb21tYW5kIExpc3QgT3ZlcnJpZGUgaWYgc3VwcG9ydGVkICovCisgICAgYXRh X2FoY2lfY2xvX2VuYWJsZShjaCk7CisKICAgICAvKiBzdGFydCBvcGVyYXRpb25zIG9uIHRo aXMgY2hhbm5lbCAqLwogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9D TUQgKyBvZmZzZXQsCi0JICAgICAoQVRBX0FIQ0lfUF9DTURfQUNUSVZFIHwgQVRBX0FIQ0lf UF9DTURfRlJFIHwKLQkgICAgICBBVEFfQUhDSV9QX0NNRF9QT0QgfCBBVEFfQUhDSV9QX0NN RF9TVUQgfCBBVEFfQUhDSV9QX0NNRF9TVCkKLQkgICAgIHwgKGNoLT5kZXZpY2VzICYgQVRB X1BPUlRNVUxUSVBMSUVSID8gQVRBX0FIQ0lfUF9DTURfUE1BIDogMCkpOworCSAgICBBVEFf SU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQpIHwgQVRBX0FIQ0lf UF9DTURfU1QpOwogfQogCiBzdGF0aWMgdV9pbnQzMl90CkBAIC0xMDY1LDcgKzExNTMsNyBA QCBhdGFfYWhjaV9zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9yCiAJKHN0cnVjdCBh dGFfYWhjaV9jbWRfdGFiICopKGNoLT5kbWEud29yayArIEFUQV9BSENJX0NUX09GRlNFVCk7 CiAKICAgICAvKiBraWNrIGNvbnRyb2xsZXIgaW50byBzYW5lIHN0YXRlIGlmIG5lZWRlZCAq LwotICAgIGF0YV9haGNpX3Jlc3RhcnQoZGV2KTsKKyAgICBhdGFfYWhjaV9yZXN0YXJ0X2No YW5uZWwoY2gpOwogCiAgICAgLyogcHVsbCByZXNldCBhY3RpdmUgKi8KICAgICBiemVybyhj dHAtPmNmaXMsIDY0KTsKQEAgLTEwOTQsNyArMTE4Miw3IEBAIGF0YV9haGNpX3NvZnRyZXNl dChkZXZpY2VfdCBkZXYsIGludCBwb3IKICNlbmRpZgogICAgIGRvIHsKIAkgICAgREVMQVko MTAwMCk7Ci0JICAgIGlmICh0aW1lb3V0KysgPiAxMDAwKSB7CisJICAgIGlmICh0aW1lb3V0 KysgPiA1MDAwKSB7CiAJCWRldmljZV9wcmludGYoZGV2LCAic3RpbGwgQlVTWSBhZnRlciBz b2Z0cmVzZXRcbiIpOwogCQlicmVhazsKIAkgICAgfQpAQCAtMTExMCwxOSArMTE5OCwzNSBA QCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lf Y29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQo ZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMo ZGV2KTsKLSAgICB1X2ludDMyX3Qgc2lnbmF0dXJlOworICAgIHVfaW50MzJfdCBzaWduYXR1 cmUsIG9mZnNldCA9IGNoLT51bml0IDw8IDc7CisgICAgY2gtPmRldmljZXMgPSAwOwogCi0g ICAgaWYgKCEoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BJKSAmICgxIDw8IGNo LT51bml0KSkpIHsKLQlkZXZpY2VfcHJpbnRmKGRldiwgInBvcnQgbm90IGltcGxlbWVudGVk XG4iKTsKLQlyZXR1cm47Ci0gICAgfQorICAgIC8qIGtpbGwgb2ZmIGFsbCBhY3Rpdml0eSBv biB0aGlzIGNoYW5uZWwgKi8KKyAgICBhdGFfYWhjaV9zdG9wX2NoYW5uZWwoY2gpOworICAg IGF0YV9haGNpX2ZyZV9zdG9wKGNoKTsKKworICAgIC8qIHNldHVwIHdvcmsgYXJlYXMgYW5k IGVuYWJsZSBGSVMgcmVjZWl2aW5nICovCisgICAgYXRhX2FoY2lfZnJlX3N0YXJ0KGNoKTsK KworICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KKyAgICBBVEFfSURYX09V VEwoY2gsIEFUQV9TRVJST1IsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0VSUk9SKSk7CisKKyAg ICAvKiBjbGVhciBwb3J0IGludGVycnVwdHMgKi8KKyAgICBBVEFfT1VUTChjdGxyLT5yX3Jl czIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQsCisJCUFUQV9JTkwoY3Rsci0+cl9yZXMyLCBB VEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBB VEFfQUhDSV9JUywgKDEgPDwgY2gtPnVuaXQpKTsKIAotICAgIGF0YV9haGNpX3Jlc3RhcnQo ZGV2KTsKKyAgICAvKiBlbmFibGUgd2FudGVkIHBvcnQgaW50ZXJydXB0cyAqLworICAgIEFU QV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JRSArIG9mZnNldCwKKwkgICAgIChB VEFfQUhDSV9QX0lYX0NQRCB8IEFUQV9BSENJX1BfSVhfVEZFIHwgQVRBX0FIQ0lfUF9JWF9I QkYgfAorCSAgICAgIEFUQV9BSENJX1BfSVhfSEJEIHwgQVRBX0FIQ0lfUF9JWF9JRiB8IEFU QV9BSENJX1BfSVhfT0YgfAorCSAgICAgIEFUQV9BSENJX1BfSVhfUFJDIHwgQVRBX0FIQ0lf UF9JWF9QQyB8IEFUQV9BSENJX1BfSVhfRFAgfAorCSAgICAgIEFUQV9BSENJX1BfSVhfVUYg fCBBVEFfQUhDSV9QX0lYX1NEQiB8IEFUQV9BSENJX1BfSVhfRFMgfAorCSAgICAgIEFUQV9B SENJX1BfSVhfUFMgfCBBVEFfQUhDSV9QX0lYX0RIUikpOwogCiAgICAgaWYgKCFhdGFfc2F0 YV9waHlfcmVzZXQoZGV2KSkgewogCWlmIChib290dmVyYm9zZSkKIAkgICAgZGV2aWNlX3By aW50ZihkZXYsICJwaHkgcmVzZXQgZm91bmQgbm8gZGV2aWNlXG4iKTsKLQljaC0+ZGV2aWNl cyA9IDA7CiAJcmV0dXJuOwogICAgIH0KIApAQCAtMTE0NiwxMyArMTI1MCwyNCBAQCBhdGFf YWhjaV9yZXNldChkZXZpY2VfdCBkZXYpCiAgICAgY2FzZSAweGViMTQwMTAxOgogCWNoLT5k ZXZpY2VzID0gQVRBX0FUQVBJX01BU1RFUjsKIAlicmVhazsKLSAgICBkZWZhdWx0OiAvKiBT T1MgWFhYICovCisgICAgZGVmYXVsdDoKIAlpZiAoYm9vdHZlcmJvc2UpCiAJICAgIGRldmlj ZV9wcmludGYoZGV2LCAiTm8gc2lnbmF0dXJlLCBhc3VtaW5nIGRpc2sgZGV2aWNlXG4iKTsK LQljaC0+ZGV2aWNlcyA9IEFUQV9BVEFfTUFTVEVSOwogICAgIH0KICAgICBpZiAoYm9vdHZl cmJvc2UpCiAgICAgICAgIGRldmljZV9wcmludGYoZGV2LCAiYWhjaV9yZXNldCBkZXZpY2Vz PSUwOHhcbiIsIGNoLT5kZXZpY2VzKTsKKworICAgIC8qIFNvZnR3YXJlIHNoYWxsIG5vdCBz ZXQgUHhDTUQuU1QgdG8gMSB1bnRpbCBpdCBpcyBkZXRlcm1pbmVkCisgICAgICogdGhhdCBh IGZ1bmN0aW9uYWwgZGV2aWNlIGlzIHByZXNlbnQgb24gdGhlIHBvcnQuCisgICAgICovCisg ICAgaWYgKGNoLT5kZXZpY2VzKSB7CisgICAgICAgIC8qIGlzc3VlIENvbW1hbmQgTGlzdCBP dmVycmlkZSBpZiBzdXBwb3J0ZWQgKi8KKyAgICAgICAgYXRhX2FoY2lfY2xvX2VuYWJsZShj aCk7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCwK KwkJQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KSB8IEFU QV9BSENJX1BfQ01EX1NVRCB8CisJCSAgICAgIEFUQV9BSENJX1BfQ01EX0FDVElWRSB8IEFU QV9BSENJX1BfQ01EX1BPRCB8IEFUQV9BSENJX1BfQ01EX1NUIHwKKwkJICAgICAgKGNoLT5k ZXZpY2VzICYgQVRBX1BPUlRNVUxUSVBMSUVSID8gQVRBX0FIQ0lfUF9DTURfUE1BIDogMCkp OworICAgIH0KIH0KIAogc3RhdGljIHZvaWQKSW5kZXg6IHNyYy9zeXMvZGV2L2F0YS9hdGEt cGNpLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL25jdnMvc3JjL3N5cy9kZXYvYXRhL2F0 YS1wY2kuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjgKZGlmZiAtdSAtYiAtcCAtcjEu MTI4IGF0YS1wY2kuYwotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1wY2kuYwkxMSBKdW4gMjAw OCAwNjo0NDo1OCAtMDAwMAkxLjEyOAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YS1wY2kuYwky MSBKdWwgMjAwOCAwOToyMzozMSAtMDAwMApAQCAtMjYyLDYgKzI2MiwzMiBAQCBhdGFfcGNp X2RldGFjaChkZXZpY2VfdCBkZXYpCiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorYXRhX3Bj aV9zdXNwZW5kKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9s bGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIGludCBlcnJvciA9IDA7 CisKKyAgICBidXNfZ2VuZXJpY19zdXNwZW5kKGRldik7CisgICAgaWYgKGN0bHItPnN1c3Bl bmQpCisJZXJyb3IgPSBjdGxyLT5zdXNwZW5kKGRldik7CisKKyAgICByZXR1cm4gZXJyb3I7 Cit9CisKK2ludAorYXRhX3BjaV9yZXN1bWUoZGV2aWNlX3QgZGV2KQoreworICAgIHN0cnVj dCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Cisg ICAgaW50IGVycm9yID0gMDsKKworICAgIGlmIChjdGxyLT5yZXN1bWUpCisJZXJyb3IgPSBj dGxyLT5yZXN1bWUoZGV2KTsKKyAgICBidXNfZ2VuZXJpY19yZXN1bWUoZGV2KTsKKworICAg IHJldHVybiBlcnJvcjsKK30KKwogc3RydWN0IHJlc291cmNlICoKIGF0YV9wY2lfYWxsb2Nf cmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAq cmlkLAogCQkgICAgICAgdV9sb25nIHN0YXJ0LCB1X2xvbmcgZW5kLCB1X2xvbmcgY291bnQs IHVfaW50IGZsYWdzKQpAQCAtNTU2LDggKzU4Miw4IEBAIHN0YXRpYyBkZXZpY2VfbWV0aG9k X3QgYXRhX3BjaV9tZXRob2RzW10KICAgICBERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgICAg ICAgICAgICBhdGFfcGNpX2F0dGFjaCksCiAgICAgREVWTUVUSE9EKGRldmljZV9kZXRhY2gs ICAgICAgICAgICAgYXRhX3BjaV9kZXRhY2gpLAogICAgIERFVk1FVEhPRChkZXZpY2Vfc2h1 dGRvd24sICAgICAgICAgIGJ1c19nZW5lcmljX3NodXRkb3duKSwKLSAgICBERVZNRVRIT0Qo ZGV2aWNlX3N1c3BlbmQsICAgICAgICAgICBidXNfZ2VuZXJpY19zdXNwZW5kKSwKLSAgICBE RVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwgICAgICAgICAgICBidXNfZ2VuZXJpY19yZXN1bWUp LAorICAgIERFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwgICAgICAgICAgIGF0YV9wY2lfc3Vz cGVuZCksCisgICAgREVWTUVUSE9EKGRldmljZV9yZXN1bWUsICAgICAgICAgICAgYXRhX3Bj aV9yZXN1bWUpLAogCiAgICAgLyogYnVzIG1ldGhvZHMgKi8KICAgICBERVZNRVRIT0QoYnVz X2FsbG9jX3Jlc291cmNlLCAgICAgICBhdGFfcGNpX2FsbG9jX3Jlc291cmNlKSwKSW5kZXg6 IHNyYy9zeXMvZGV2L2F0YS9hdGEtcGNpLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL25j dnMvc3JjL3N5cy9kZXYvYXRhL2F0YS1wY2kuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44 OQpkaWZmIC11IC1iIC1wIC1yMS44OSBhdGEtcGNpLmgKLS0tIHNyYy9zeXMvZGV2L2F0YS9h dGEtcGNpLmgJMTAgSnVsIDIwMDggMjE6MzY6NTMgLTAwMDAJMS44OQorKysgc3JjL3N5cy9k ZXYvYXRhL2F0YS1wY2kuaAkyMSBKdWwgMjAwOCAwOToyMzozMSAtMDAwMApAQCAtNTUsNiAr NTUsOCBAQCBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyIHsKICAgICB2b2lkICAgICAgICAg ICAgICAgICgqcmVzZXQpKGRldmljZV90KTsKICAgICB2b2lkICAgICAgICAgICAgICAgICgq ZG1haW5pdCkoZGV2aWNlX3QpOwogICAgIHZvaWQgICAgICAgICAgICAgICAgKCpzZXRtb2Rl KShkZXZpY2VfdCwgaW50KTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICgqc3VzcGVuZCko ZGV2aWNlX3QpOworICAgIGludCAgICAgICAgICAgICAgICAgKCpyZXN1bWUpKGRldmljZV90 KTsKICAgICBzdHJ1Y3QgewogICAgIHZvaWQgICAgICAgICAgICAgICAgKCpmdW5jdGlvbiko dm9pZCAqKTsKICAgICB2b2lkICAgICAgICAgICAgICAgICphcmd1bWVudDsKQEAgLTQ2MCw2 ICs0NjIsOCBAQCBzdHJ1Y3QgYXRhX2Nvbm5lY3RfdGFzayB7CiBpbnQgYXRhX3BjaV9wcm9i ZShkZXZpY2VfdCBkZXYpOwogaW50IGF0YV9wY2lfYXR0YWNoKGRldmljZV90IGRldik7CiBp bnQgYXRhX3BjaV9kZXRhY2goZGV2aWNlX3QgZGV2KTsKK2ludCBhdGFfcGNpX3N1c3BlbmQo ZGV2aWNlX3QgZGV2KTsKK2ludCBhdGFfcGNpX3Jlc3VtZShkZXZpY2VfdCBkZXYpOwogc3Ry dWN0IHJlc291cmNlICogYXRhX3BjaV9hbGxvY19yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRl dmljZV90IGNoaWxkLCBpbnQgdHlwZSwgaW50ICpyaWQsIHVfbG9uZyBzdGFydCwgdV9sb25n IGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncyk7CiBpbnQgYXRhX3BjaV9yZWxlYXNl X3Jlc291cmNlKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQg cmlkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIpOwogaW50IGF0YV9wY2lfc2V0dXBfaW50cihkZXZp Y2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKmlycSwgaW50IGZs YWdzLCBkcml2ZXJfZmlsdGVyX3QgKmZpbHRlciwgZHJpdmVyX2ludHJfdCAqZnVuY3Rpb24s IHZvaWQgKmFyZ3VtZW50LCB2b2lkICoqY29va2llcCk7Cg== --------------070900010409000403070108--