Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jul 2008 14:35:56 +0400
From:      "Andrey V. Elsukov" <bu7cher@yandex.ru>
To:        Sergey G Nasonov <snasonov@bcc.ru>
Cc:        freebsd-current@freebsd.org, =?UTF-8?B?U8O4cmVuIFNjaG1pZHQ=?= <sos@FreeBSD.org>
Subject:   RFC, RFT: AHCI driver reorganization (was: Re: ATA subsystem lost drive after resume process)
Message-ID:  <4884668C.5060606@yandex.ru>
In-Reply-To: <200807151124.36621.snasonov@bcc.ru>
References:  <200807151124.36621.snasonov@bcc.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4884668C.5060606>