Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Mar 2014 14:50:18 -0300
From:      Luiz Otavio O Souza <loos.br@gmail.com>
To:        "freebsd-embedded@freebsd.org" <freebsd-embedded@freebsd.org>
Subject:   Re: [patch] LM75 kernel driver
Message-ID:  <CAJ8CS7p980WsbAhdwZqNY%2BtACYm6b5GscYprNMto1F6dwE6GNA@mail.gmail.com>
In-Reply-To: <69CF7423-FD5B-44B3-8B90-E76BA96BB31A@gmail.com>
References:  <69CF7423-FD5B-44B3-8B90-E76BA96BB31A@gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--047d7bb70ae4a7569804f4443c0b
Content-Type: text/plain; charset=ISO-8859-1

On Fri, Nov 29, 2013 at 5:28 PM, Luiz Otavio O Souza wrote:
> Hi,
>
> I've written a kernel driver for lm75 (i2c temperature sensor).
>
> It's a very simple, convenient and cheap way to verify an i2c bus.
>
> This driver provides full control of the lm75 registers (configuration bits, over temperature and hysteresis settings) and so provides basic read and write test abilities.
>
> The high resolution version (lm75b - 11 bits) isn't supported ATM, but i have plans to do so.

The high resolution version (lm75[a/b]) is now tested and supported.

This new version is tested on RSPRO (with gpioiic(4)), on BBB and RPi
using both, gpioiic(4) and embedded i2c controllers.

It can be used together with snmp_lm75
(http://lists.freebsd.org/pipermail/freebsd-embedded/2014-March/002281.html)
to export the lm75 temperature via SNMP, it's use is quite
straightforward.

The updated version is attached.

Luiz


>
> On my RPi i've added this to sys/boot/fdt/dts/rpi.dts:
>
>                 bsc0 {
>
>                         lm750 {
>                                 compatible = "lm75";
>                                 i2c-address = <0x96>;
>                         };
>
>                         lm751 {
>                                 compatible = "lm75";
>                                 i2c-address = <0x9e>;
>                         };
>                 };
>
> And 'device lm75' to RPI-B kernel file (after apply the attached patch).
>
> Here is the result:
>
> iichb0: <BCM2708/2835 BSC controller> mem 0x20205000-0x2020501f irq 61 on simplebus0
> iicbus1: <OFW I2C bus> on iichb0
> iic1: <I2C generic I/O> on iicbus1
> lm751: <LM75 temperature sensor> at addr 0x96 on iicbus1
> lm752: <LM75 temperature sensor> at addr 0x9e on iicbus1
>
> # sysctl dev.lm75.1
> dev.lm75.1.%desc: LM75 temperature sensor
> dev.lm75.1.%driver: lm75
> dev.lm75.1.%location: addr=0x96
> dev.lm75.1.%pnpinfo: name=lm750 compat=lm75
> dev.lm75.1.%parent: iicbus1
> dev.lm75.1.temperature: 30.0C
> dev.lm75.1.thyst: 75.0C
> dev.lm75.1.tos: 80.0C
> dev.lm75.1.conf.faults: 1
> dev.lm75.1.conf.mode: comparator
> dev.lm75.1.conf.polarity: active-low
> dev.lm75.1.conf.shutdown: 0
>
> # sysctl dev.lm75.2
> dev.lm75.2.%desc: LM75 temperature sensor
> dev.lm75.2.%driver: lm75
> dev.lm75.2.%location: addr=0x9e
> dev.lm75.2.%pnpinfo: name=lm751 compat=lm75
> dev.lm75.2.%parent: iicbus1
> dev.lm75.2.temperature: 29.5C
> dev.lm75.2.thyst: 60.0C
> dev.lm75.2.tos: 80.0C
> dev.lm75.2.conf.faults: 2
> dev.lm75.2.conf.mode: interrupt
> dev.lm75.2.conf.polarity: active-low
> dev.lm75.2.conf.shutdown: 0
>
>
> I hope this may be useful for someone else.
>
> Luiz
>
>

--047d7bb70ae4a7569804f4443c0b
Content-Type: text/plain; charset=US-ASCII; name="lm75.diff"
Content-Disposition: attachment; filename="lm75.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hsm1mtdq1

SW5kZXg6IHN5cy9jb25mL2ZpbGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9jb25mL2ZpbGVzCShyZXZp
c2lvbiAyNjI4NjApCisrKyBzeXMvY29uZi9maWxlcwkod29ya2luZyBjb3B5KQpAQCAtMTQ0Myw2
ICsxNDQzLDcgQEAKIGRldi9paWNidXMvaWljc21iLmMJCW9wdGlvbmFsIGlpY3NtYgkJCQlcCiAJ
ZGVwZW5kZW5jeQkiaWljYnVzX2lmLmgiCiBkZXYvaWljYnVzL2lpY29jLmMJCW9wdGlvbmFsIGlp
Y29jCitkZXYvaWljYnVzL2xtNzUuYwkJb3B0aW9uYWwgbG03NQogZGV2L2lpY2J1cy9wY2Y4NTYz
LmMJCW9wdGlvbmFsIHBjZjg1NjMKIGRldi9paWNidXMvczM1MzkwYS5jCQlvcHRpb25hbCBzMzUz
OTBhCiBkZXYvaWlyL2lpci5jCQkJb3B0aW9uYWwgaWlyCkluZGV4OiBzeXMvZGV2L2lpY2J1cy9s
bTc1LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9paWNidXMvbG03NS5jCShyZXZpc2lvbiAwKQor
Kysgc3lzL2Rldi9paWNidXMvbG03NS5jCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTU3IEBA
CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMCBBbmRyZWFzIFRvYmxlci4KKyAqIENvcHlyaWdo
dCAoYykgMjAxMyBMdWl6IE90YXZpbyBPIFNvdXphIDxsb29zQGZyZWVic2Qub3JnPi4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8
c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJvcHRfcGxh
dGZvcm0uaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4K
KyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1
ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lz
L3N5c3RtLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L2lp
Y2J1cy9paWNidXMuaD4KKyNpbmNsdWRlIDxkZXYvaWljYnVzL2lpY29uZi5oPgorCisjaWZkZWYg
RkRUCisjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3
X2J1cy5oPgorI2luY2x1ZGUgPGRldi9vZncvb2Z3X2J1c19zdWJyLmg+CisjZW5kaWYKKworLyog
TE03NSByZWdpc3RlcnMuICovCisjZGVmaW5lCUxNNzVfVEVNUAkweDAKKyNkZWZpbmUJTE03NV9D
T05GCTB4MQorI2RlZmluZQlMTTc1X0NPTkZfRlNISUZUCTMKKyNkZWZpbmUJTE03NV9DT05GX0ZB
VUxUCQkweDE4CisjZGVmaW5lCUxNNzVfQ09ORl9QT0wJCTB4MDQKKyNkZWZpbmUJTE03NV9DT05G
X01PREUJCTB4MDIKKyNkZWZpbmUJTE03NV9DT05GX1NIVVRECQkweDAxCisjZGVmaW5lCUxNNzVf
Q09ORl9NQVNLCQkweDFmCisjZGVmaW5lCUxNNzVfVEhZU1QJMHgyCisjZGVmaW5lCUxNNzVfVE9T
CTB4MworCisvKiBMTTc1IGNvbnN0YW50cy4gKi8KKyNkZWZpbmUJTE03NV9NSU5fVEVNUAktNTUK
KyNkZWZpbmUJTE03NV9NQVhfVEVNUAkxMjUKKyNkZWZpbmUJTE03NV8wNTAwQwkweDgwCisjZGVm
aW5lCUxNNzVfMDI1MEMJMHg0MAorI2RlZmluZQlMTTc1XzAxMjVDCTB4MjAKKyNkZWZpbmUJTE03
NV9NU0IJMHg4MDAwCisjZGVmaW5lCUxNNzVfTkVHX0JJVAlMTTc1X01TQgorI2RlZmluZQlUWl9a
RVJPQwkyNzMyCisKKy8qIExNNzUgc3VwcG9ydGVkIG1vZGVscy4gKi8KKyNkZWZpbmUJSFdUWVBF
X05PTkUJMAorI2RlZmluZQlIV1RZUEVfTE03NQkxCisjZGVmaW5lCUhXVFlQRV9MTTc1QQkyCisK
KyNpZmRlZiBGRFQKK3N0YXRpYyBzdHJ1Y3Qgb2Z3X2NvbXBhdF9kYXRhIGNvbXBhdF9kYXRhW10g
PSB7CisJeyAiZnJlZWJzZCxsbTc1IiwJSFdUWVBFX0xNNzUgfSwKKwl7ICJmcmVlYnNkLGxtNzVh
IiwJSFdUWVBFX0xNNzVBIH0sCisJeyBOVUxMLAkJCUhXVFlQRV9OT05FIH0sCit9OworI2VuZGlm
CisKKy8qIFJlZ3VsYXIgYnVzIGF0dGFjaG1lbnQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50ICBs
bTc1X3Byb2JlKGRldmljZV90KTsKK3N0YXRpYyBpbnQgIGxtNzVfYXR0YWNoKGRldmljZV90KTsK
Kworc3RydWN0IGxtNzVfc29mdGMgeworCWRldmljZV90CQlzY19kZXY7CisJc3RydWN0IGludHJf
Y29uZmlnX2hvb2sgZW51bV9ob29rOworCWludDMyX3QJCQlzY19od3R5cGU7CisJdWludDMyX3QJ
CXNjX2FkZHI7CisJdWludDMyX3QJCXNjX2NvbmY7Cit9OworCitpbnQgbG03NV9mYXVsdHNbNF0g
PSB7IDEsIDIsIDQsIDYgfTsKKworLyogVXRpbGl0eSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQg
IGxtNzVfY29uZl9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV9j
b25mX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICopOworc3RhdGljIGludCAgbG03NV90ZW1wX3Jl
YWQoc3RydWN0IGxtNzVfc29mdGMgKiwgdWludDhfdCwgaW50ICopOworc3RhdGljIGludCAgbG03
NV90ZW1wX3dyaXRlKHN0cnVjdCBsbTc1X3NvZnRjICosIHVpbnQ4X3QsIGludCk7CitzdGF0aWMg
dm9pZCBsbTc1X3N0YXJ0KHZvaWQgKik7CitzdGF0aWMgaW50ICBsbTc1X3JlYWQoZGV2aWNlX3Qs
IHVpbnQzMl90LCB1aW50OF90LCB1aW50OF90ICosIHNpemVfdCk7CitzdGF0aWMgaW50ICBsbTc1
X3dyaXRlKGRldmljZV90LCB1aW50MzJfdCwgdWludDhfdCAqLCBzaXplX3QpOworc3RhdGljIGlu
dCAgbG03NV9zdHJfbW9kZShjaGFyICopOworc3RhdGljIGludCAgbG03NV9zdHJfcG9sKGNoYXIg
Kik7CitzdGF0aWMgaW50ICBsbTc1X3RlbXBfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOwor
c3RhdGljIGludCAgbG03NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworc3Rh
dGljIGludCAgbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBp
bnQgIGxtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKTsKK3N0YXRpYyBpbnQgIGxt
NzVfc2h1dGRvd25fc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpOworCitzdGF0aWMgZGV2aWNl
X21ldGhvZF90ICBsbTc1X21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJ
REVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWxtNzVfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2Vf
YXR0YWNoLAlsbTc1X2F0dGFjaCksCisKKwlERVZNRVRIT0RfRU5ECit9OworCitzdGF0aWMgZHJp
dmVyX3QgbG03NV9kcml2ZXIgPSB7CisJImxtNzUiLAorCWxtNzVfbWV0aG9kcywKKwlzaXplb2Yo
c3RydWN0IGxtNzVfc29mdGMpCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBsbTc1X2RldmNsYXNz
OworCitEUklWRVJfTU9EVUxFKGxtNzUsIGlpY2J1cywgbG03NV9kcml2ZXIsIGxtNzVfZGV2Y2xh
c3MsIDAsIDApOworCitzdGF0aWMgaW50CitsbTc1X3JlYWQoZGV2aWNlX3QgZGV2LCB1aW50MzJf
dCBhZGRyLCB1aW50OF90IHJlZywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlpbnQg
dHJ5OworCisJc3RydWN0IGlpY19tc2cgbXNnWzJdID0geworCSAgICB7IGFkZHIsIElJQ19NX1dS
IHwgSUlDX01fTk9TVE9QLCAxLCAmcmVnIH0sCisJICAgIHsgYWRkciwgSUlDX01fUkQsIGxlbiwg
ZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190cmFu
c2ZlcihkZXYsIG1zZywgMikgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgwKTsK
KwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJpaWNi
dXMgcmVhZCBmYWlsZWRcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJcGF1c2UoImxtNzVf
cmVhZCIsIGh6KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfd3JpdGUoZGV2aWNlX3QgZGV2
LCB1aW50MzJfdCBhZGRyLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworCWludCB0cnk7
CisKKwlzdHJ1Y3QgaWljX21zZyBtc2dbMV0gPSB7CisJICAgIHsgYWRkciwgSUlDX01fV1IsIGxl
biwgZGF0YSB9LAorCX07CisKKwl0cnkgPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGlpY2J1c190
cmFuc2ZlcihkZXYsIG1zZywgMSkgIT0gMCkKKwkJCWdvdG8gcmV0cnk7CisKKwkJcmV0dXJuICgw
KTsKKwlyZXRyeToKKwkJaWYgKCsrdHJ5ID4gNSkgeworCQkJZGV2aWNlX3ByaW50ZihkZXYsICJp
aWNidXMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCXBhdXNlKCJs
bTc1X3dyaXRlIiwgaHopOworCX0KK30KKworc3RhdGljIGludAorbG03NV9wcm9iZShkZXZpY2Vf
dCBkZXYpCit7CisJaW50IHR5cGU7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJdHlwZSA9
IDA7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisjaWZkZWYgRkRUCisJc2MtPnNjX2h3
dHlwZSA9IG9md19idXNfc2VhcmNoX2NvbXBhdGlibGUoZGV2LCBjb21wYXRfZGF0YSktPm9jZF9k
YXRhOworCWlmIChzYy0+c2NfaHd0eXBlID09IEhXVFlQRV9OT05FKQorCQlyZXR1cm4gKEVOWElP
KTsKKyNlbHNlCisJc2MtPnNjX2h3dHlwZSA9IEhXVFlQRV9MTTc1OworCWlmIChyZXNvdXJjZV9p
bnRfdmFsdWUoZGV2aWNlX2dldF9uYW1lKGRldiksIGRldmljZV9nZXRfdW5pdChkZXYpLAorCSAg
ICAibG03NWEiLCAmdHlwZSkgPT0gMCAmJiB0eXBlKQorCQlzYy0+c2NfaHd0eXBlID0gSFdUWVBF
X0xNNzVBOworI2VuZGlmCisKKwlzd2l0Y2ggKHNjLT5zY19od3R5cGUpIHsKKwljYXNlIEhXVFlQ
RV9MTTc1QToKKwkJZGV2aWNlX3NldF9kZXNjKGRldiwgIkxNNzVBIHRlbXBlcmF0dXJlIHNlbnNv
ciIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiTE03NSB0
ZW1wZXJhdHVyZSBzZW5zb3IiKTsKKwl9CisKKwlyZXR1cm4gKEJVU19QUk9CRV9HRU5FUklDKTsK
K30KKworc3RhdGljIGludAorbG03NV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBs
bTc1X3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5zY19k
ZXYgPSBkZXY7CisJc2MtPnNjX2FkZHIgPSBpaWNidXNfZ2V0X2FkZHIoZGV2KTsKKworCXNjLT5l
bnVtX2hvb2suaWNoX2Z1bmMgPSBsbTc1X3N0YXJ0OworCXNjLT5lbnVtX2hvb2suaWNoX2FyZyA9
IGRldjsKKworCS8qCisJICogV2UgaGF2ZSB0byB3YWl0IHVudGlsIGludGVycnVwdHMgYXJlIGVu
YWJsZWQuIEkyQyByZWFkIGFuZCB3cml0ZQorCSAqIG9ubHkgd29ya3MgaWYgdGhlIGludGVycnVw
dHMgYXJlIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAoY29uZmlnX2ludHJob29rX2VzdGFibGlzaCgm
c2MtPmVudW1faG9vaykgIT0gMCkKKwkJcmV0dXJuIChFTk9NRU0pOworCisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIHZvaWQKK2xtNzVfc3RhcnQodm9pZCAqeGRldikKK3sKKwlkZXZpY2VfdCBk
ZXY7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKmN0
eDsKKwlzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZV9ub2RlOworCXN0cnVjdCBzeXNjdGxfb2lkX2xp
c3QgKnRyZWU7CisKKwlkZXYgPSAoZGV2aWNlX3QpeGRldjsKKwlzYyA9IGRldmljZV9nZXRfc29m
dGMoZGV2KTsKKwljdHggPSBkZXZpY2VfZ2V0X3N5c2N0bF9jdHgoZGV2KTsKKwl0cmVlX25vZGUg
PSBkZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisJdHJlZSA9IFNZU0NUTF9DSElMRFJFTih0
cmVlX25vZGUpOworCisJY29uZmlnX2ludHJob29rX2Rpc2VzdGFibGlzaCgmc2MtPmVudW1faG9v
ayk7CisKKwkvKiBSZWFkIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLworCWlmIChsbTc1
X2NvbmZfcmVhZChzYykgIT0gMCkgeworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNhbm5vdCByZWFk
IHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLlxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBU
ZW1wZXJhdHVyZS4gKi8KKwlTWVNDVExfQUREX1BST0MoY3R4LCB0cmVlLCBPSURfQVVUTywgInRl
bXBlcmF0dXJlIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JEIHwgQ1RMRkxBR19NUFNB
RkUsIGRldiwgTE03NV9URU1QLAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiQ3VycmVu
dCB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi
dGh5c3QiLAorCSAgICBDVExUWVBFX0lOVCB8IENUTEZMQUdfUlcgfCBDVExGTEFHX01QU0FGRSwg
ZGV2LCBMTTc1X1RIWVNULAorCSAgICBsbTc1X3RlbXBfc3lzY3RsLCAiSUsiLCAiSHlzdGVyZXNp
cyB0ZW1wZXJhdHVyZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAi
dG9zIiwKKwkgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXIHwgQ1RMRkxBR19NUFNBRkUsIGRl
diwgTE03NV9UT1MsCisJICAgIGxtNzVfdGVtcF9zeXNjdGwsICJJSyIsICJPdmVydGVtcGVyYXR1
cmUiKTsKKworCS8qIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gKi8KKwlTWVNDVExfQUREX1BS
T0MoY3R4LCB0cmVlLCBPSURfQVVUTywgImZhdWx0cyIsCisJICAgIENUTEZMQUdfUlcgfCBDVExU
WVBFX1VJTlQsIGRldiwgMCwKKwkgICAgbG03NV9mYXVsdHNfc3lzY3RsLCAiSVUiLCAiTE03NSBm
YXVsdCBxdWV1ZSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAibW9k
ZSIsCisJICAgIENUTEZMQUdfUlcgfCBDVExUWVBFX1NUUklORywgZGV2LCAwLAorCSAgICBsbTc1
X21vZGVfc3lzY3RsLCAiQSIsICJMTTc1IG1vZGUiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCB0
cmVlLCBPSURfQVVUTywgInBvbGFyaXR5IiwKKwkgICAgQ1RMRkxBR19SVyB8IENUTFRZUEVfU1RS
SU5HLCBkZXYsIDAsCisJICAgIGxtNzVfcG9sX3N5c2N0bCwgIkEiLCAiTE03NSBPUyBwb2xhcml0
eSIpOworCVNZU0NUTF9BRERfUFJPQyhjdHgsIHRyZWUsIE9JRF9BVVRPLCAic2h1dGRvd24iLAor
CSAgICBDVExGTEFHX1JXIHwgQ1RMVFlQRV9VSU5ULCBkZXYsIDAsCisJICAgIGxtNzVfc2h1dGRv
d25fc3lzY3RsLCAiSVUiLCAiTE03NSBzaHV0ZG93biIpOworfQorCitzdGF0aWMgaW50CitsbTc1
X2NvbmZfcmVhZChzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MpCit7CisJdWludDhfdCBidWY4OworCisJ
aWYgKGxtNzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgTE03NV9DT05GLCAmYnVmOCwg
MSkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXNjLT5zY19jb25mID0gKHVpbnQzMl90KWJ1Zjg7
CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitsbTc1X2NvbmZfd3JpdGUoc3RydWN0
IGxtNzVfc29mdGMgKnNjKQoreworCXVpbnQ4X3QgYnVmOFsyXTsKKworCWJ1ZjhbMF0gPSBMTTc1
X0NPTkY7CisJYnVmOFsxXSA9ICh1aW50OF90KXNjLT5zY19jb25mICYgTE03NV9DT05GX01BU0s7
CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgYnVmOCwgMikgPCAw
KQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVf
dGVtcF9yZWFkKHN0cnVjdCBsbTc1X3NvZnRjICpzYywgdWludDhfdCByZWcsIGludCAqdGVtcCkK
K3sKKwl1aW50OF90IGJ1ZjhbMl07CisJdWludDE2X3QgYnVmOworCWludCB0OworCisJaWYgKGxt
NzVfcmVhZChzYy0+c2NfZGV2LCBzYy0+c2NfYWRkciwgcmVnLCBidWY4LCAyKSA8IDApCisJCXJl
dHVybiAoLTEpOworCisJYnVmID0gKGJ1ZjhbMF0gPDwgOCkgfCAoYnVmOFsxXSAmIDB4ZmYpOwor
CisJLyoKKwkgKiBMTTc1IGhhcyBhIDkgYml0IEFEQyB3aXRoIHJlc29sdXRpb24gb2YgMC41IEMg
cGVyIGJpdC4KKwkgKiBMTTc1QSBoYXMgYSAxMSBiaXQgQURDIHdpdGggcmVzb2x1dGlvbiBvZiAw
LjEyNSBDIHBlciBiaXQuCisJICogVGVtcGVyYXR1cmUgaXMgc3RvcmVkIHdpdGggdHdvJ3MgY29t
cGxlbWVudC4KKwkgKi8KKwlpZiAoYnVmICYgTE03NV9ORUdfQklUKQorCQlidWYgPSB+YnVmICsg
MTsKKwkqdGVtcCA9ICgoaW50MTZfdClidWYgPj4gOCkgKiAxMDsKKwl0ID0gMDsKKwlpZiAoc2Mt
PnNjX2h3dHlwZSA9PSBIV1RZUEVfTE03NUEpIHsKKwkJaWYgKGJ1ZiAmIExNNzVfMDEyNUMpCisJ
CQl0ICs9IDEyNTsKKwkJaWYgKGJ1ZiAmIExNNzVfMDI1MEMpCisJCQl0ICs9IDI1MDsKKwl9CisJ
aWYgKGJ1ZiAmIExNNzVfMDUwMEMpCisJCXQgKz0gNTAwOworCXQgLz0gMTAwOworCSp0ZW1wICs9
IHQ7CisJaWYgKGJ1ZiAmIExNNzVfTkVHX0JJVCkKKwkJKnRlbXAgPSAtKCp0ZW1wKTsKKwkqdGVt
cCArPSBUWl9aRVJPQzsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfdGVt
cF93cml0ZShzdHJ1Y3QgbG03NV9zb2Z0YyAqc2MsIHVpbnQ4X3QgcmVnLCBpbnQgdGVtcCkKK3sK
Kwl1aW50OF90IGJ1ZjhbM107CisJdWludDE2X3QgYnVmOworCisJaWYgKHRlbXAgPiBMTTc1X01B
WF9URU1QKQorCQl0ZW1wID0gTE03NV9NQVhfVEVNUDsKKwlpZiAodGVtcCA8IExNNzVfTUlOX1RF
TVApCisJCXRlbXAgPSBMTTc1X01JTl9URU1QOworCisJYnVmID0gKHVpbnQxNl90KXRlbXA7CisJ
YnVmIDw8PSA4OworCisJYnVmOFswXSA9IHJlZzsKKwlidWY4WzFdID0gYnVmID4+IDg7CisJYnVm
OFsyXSA9IGJ1ZiAmIDB4ZmY7CisKKwlpZiAobG03NV93cml0ZShzYy0+c2NfZGV2LCBzYy0+c2Nf
YWRkciwgYnVmOCwgMykgPCAwKQorCQlyZXR1cm4gKC0xKTsKKworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyBpbnQKK2xtNzVfc3RyX21vZGUoY2hhciAqYnVmKQoreworCWludCBsZW4sIHJ0cm47
CisKKwlydHJuID0gLTE7CisJbGVuID0gc3RybGVuKGJ1Zik7CisJaWYgKGxlbiA+IDIgJiYgc3Ry
bmNhc2VjbXAoImludGVycnVwdCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMTsKKwllbHNl
IGlmIChsZW4gPiAyICYmIHN0cm5jYXNlY21wKCJjb21wYXJhdG9yIiwgYnVmLCBsZW4pID09IDAp
CisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGludAorbG03NV9z
dHJfcG9sKGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGVuLCBydHJuOworCisJcnRybiA9IC0xOworCWxl
biA9IHN0cmxlbihidWYpOworCWlmIChsZW4gPiAxICYmIHN0cm5jYXNlY21wKCJoaWdoIiwgYnVm
LCBsZW4pID09IDApCisJCXJ0cm4gPSAxOworCWVsc2UgaWYgKGxlbiA+IDEgJiYgc3RybmNhc2Vj
bXAoImxvdyIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0gMDsKKwllbHNlIGlmIChsZW4gPiA4
ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtaGlnaCIsIGJ1ZiwgbGVuKSA9PSAwKQorCQlydHJuID0g
MTsKKwllbHNlIGlmIChsZW4gPiA4ICYmIHN0cm5jYXNlY21wKCJhY3RpdmUtbG93IiwgYnVmLCBs
ZW4pID09IDApCisJCXJ0cm4gPSAwOworCisJcmV0dXJuIChydHJuKTsKK30KKworc3RhdGljIGlu
dAorbG03NV90ZW1wX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWRldmljZV90IGRl
djsKKwlpbnQgZXJyb3IsIHRlbXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCXVpbnQ4X3Qg
cmVnOworCisJZGV2ID0gYXJnMTsKKwlyZWcgPSBhcmcyOworCXNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOworCisJaWYgKGxtNzVfdGVtcF9yZWFkKHNjLCByZWcsICZ0ZW1wKSAhPSAwKQorCQly
ZXR1cm4gKEVJTyk7CisKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZ0ZW1wLCAw
LCByZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVy
biAoZXJyb3IpOworCisJaWYgKGxtNzVfdGVtcF93cml0ZShzYywgcmVnLCB0ZW1wKSAhPSAwKQor
CQlyZXR1cm4gKEVJTyk7CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorbG03
NV9mYXVsdHNfc3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2Owor
CWludCBlcnJvciwgZmF1bHRzLCBpLCBuZXdmLCB0bXA7CisJc3RydWN0IGxtNzVfc29mdGMgKnNj
OworCisJZGV2ID0gYXJnMTsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl0bXAgPSAo
c2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfRkFVTFQpID4+IExNNzVfQ09ORl9GU0hJRlQ7CisJaWYg
KHRtcCA+IG5pdGVtcyhsbTc1X2ZhdWx0cykpCisJCXRtcCA9IG5pdGVtcyhsbTc1X2ZhdWx0cyk7
CisJZmF1bHRzID0gbG03NV9mYXVsdHNbdG1wXTsKKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9p
bnQob2lkcCwgJmZhdWx0cywgMCwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0
ciA9PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCWlmIChmYXVsdHMgIT0gbG03NV9mYXVs
dHNbdG1wXSkgeworCQluZXdmID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5pdGVtcyhsbTc1X2Zh
dWx0cyk7IGkrKykKKwkJCWlmIChmYXVsdHMgPj0gbG03NV9mYXVsdHNbaV0pCisJCQkJbmV3ZiA9
IGk7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfRkFVTFQ7CisJCXNjLT5zY19jb25mIHw9
IG5ld2YgPDwgTE03NV9DT05GX0ZTSElGVDsKKwkJaWYgKGxtNzVfY29uZl93cml0ZShzYykgIT0g
MCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGlj
IGludAorbG03NV9tb2RlX3N5c2N0bChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWNoYXIgYnVm
WzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBtb2RlLCBuZXdtOworCXN0cnVjdCBs
bTc1X3NvZnRjICpzYzsKKworCWRldiA9IGFyZzE7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJaWYgKHNjLT5zY19jb25mICYgTE03NV9DT05GX01PREUpIHsKKwkJbW9kZSA9IDE7CisJ
CXN0cmxjcHkoYnVmLCAiaW50ZXJydXB0Iiwgc2l6ZW9mKGJ1ZikpOworCX0gZWxzZSB7CisJCW1v
ZGUgPSAwOworCQlzdHJsY3B5KGJ1ZiwgImNvbXBhcmF0b3IiLCBzaXplb2YoYnVmKSk7CisJfQor
CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX3N0cmluZyhvaWRwLCBidWYsIHNpemVvZihidWYpLCBy
ZXEpOworCWlmIChlcnJvciAhPSAwIHx8IHJlcS0+bmV3cHRyID09IE5VTEwpCisJCXJldHVybiAo
ZXJyb3IpOworCisJbmV3bSA9IGxtNzVfc3RyX21vZGUoYnVmKTsKKwlpZiAobmV3bSAhPSAtMSAm
JiBtb2RlICE9IG5ld20pIHsKKwkJc2MtPnNjX2NvbmYgJj0gfkxNNzVfQ09ORl9NT0RFOworCQlp
ZiAobmV3bSA9PSAxKQorCQkJc2MtPnNjX2NvbmYgfD0gTE03NV9DT05GX01PREU7CisJCWlmIChs
bTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7CisJfQorCisJcmV0dXJu
IChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfcG9sX3N5c2N0bChTWVNDVExfSEFORExF
Ul9BUkdTKQoreworCWNoYXIgYnVmWzE2XTsKKwlkZXZpY2VfdCBkZXY7CisJaW50IGVycm9yLCBu
ZXdwLCBwb2w7CisJc3RydWN0IGxtNzVfc29mdGMgKnNjOworCisJZGV2ID0gYXJnMTsKKwlzYyA9
IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlpZiAoc2MtPnNjX2NvbmYgJiBMTTc1X0NPTkZfUE9M
KSB7CisJCXBvbCA9IDE7CisJCXN0cmxjcHkoYnVmLCAiYWN0aXZlLWhpZ2giLCBzaXplb2YoYnVm
KSk7CisJfSBlbHNlIHsKKwkJcG9sID0gMDsKKwkJc3RybGNweShidWYsICJhY3RpdmUtbG93Iiwg
c2l6ZW9mKGJ1ZikpOworCX0KKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9zdHJpbmcob2lkcCwg
YnVmLCBzaXplb2YoYnVmKSwgcmVxKTsKKwlpZiAoZXJyb3IgIT0gMCB8fCByZXEtPm5ld3B0ciA9
PSBOVUxMKQorCQlyZXR1cm4gKGVycm9yKTsKKworCW5ld3AgPSBsbTc1X3N0cl9wb2woYnVmKTsK
KwlpZiAobmV3cCAhPSAtMSAmJiBwb2wgIT0gbmV3cCkgeworCQlzYy0+c2NfY29uZiAmPSB+TE03
NV9DT05GX1BPTDsKKwkJaWYgKG5ld3AgPT0gMSkKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09O
Rl9QT0w7CisJCWlmIChsbTc1X2NvbmZfd3JpdGUoc2MpICE9IDApCisJCQlyZXR1cm4gKEVJTyk7
CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQKK2xtNzVfc2h1dGRvd25f
c3lzY3RsKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJZGV2aWNlX3QgZGV2OworCWludCBlcnJv
ciwgc2h1dGRvd24sIHRtcDsKKwlzdHJ1Y3QgbG03NV9zb2Z0YyAqc2M7CisKKwlkZXYgPSBhcmcx
OworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXRtcCA9IHNodXRkb3duID0gKHNjLT5z
Y19jb25mICYgTE03NV9DT05GX1NIVVREKSA/IDEgOiAwOworCisJZXJyb3IgPSBzeXNjdGxfaGFu
ZGxlX2ludChvaWRwLCAmc2h1dGRvd24sIDAsIHJlcSk7CisJaWYgKGVycm9yICE9IDAgfHwgcmVx
LT5uZXdwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpZiAoc2h1dGRvd24gIT0g
dG1wKSB7CisJCXNjLT5zY19jb25mICY9IH5MTTc1X0NPTkZfU0hVVEQ7CisJCWlmIChzaHV0ZG93
bikKKwkJCXNjLT5zY19jb25mIHw9IExNNzVfQ09ORl9TSFVURDsKKwkJaWYgKGxtNzVfY29uZl93
cml0ZShzYykgIT0gMCkKKwkJCXJldHVybiAoRUlPKTsKKwl9CisKKwlyZXR1cm4gKGVycm9yKTsK
K30KClByb3BlcnR5IGNoYW5nZXMgb246IHN5cy9kZXYvaWljYnVzL2xtNzUuYwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK3Rl
eHQvcGxhaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpBZGRlZDogc3ZuOmtleXdv
cmRzCiMjIC0wLDAgKzEgIyMKK0ZyZWVCU0Q9JUgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogc2hhcmUvbWFuL21hbjQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hhcmUv
bWFuL21hbjQvTWFrZWZpbGUJKHJldmlzaW9uIDI2Mjg2MCkKKysrIHNoYXJlL21hbi9tYW40L01h
a2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDcgQEAKIAlsZ2UuNCBcCiAJJHtf
bGluZGV2LjR9IFwKIAkke19saW51eC40fSBcCisJbG03NS40IFwKIAlsbWMuNCBcCiAJbG8uNCBc
CiAJbHAuNCBcCkluZGV4OiBzaGFyZS9tYW4vbWFuNC9sbTc1LjQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2hh
cmUvbWFuL21hbjQvbG03NS40CShyZXZpc2lvbiAwKQorKysgc2hhcmUvbWFuL21hbjQvbG03NS40
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisuXCIKKy5cIiBDb3B5cmlnaHQgKGMp
IDIwMTQgTHVpeiBPdGF2aW8gTyBTb3V6YSA8bG9vc0BmcmVlYnNkLm9yZz4KKy5cIiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLlwiCisuXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisuXCIgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisuXCIgYXJl
IG1ldDoKKy5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorLlwiICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKy5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLlwiCisuXCIgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKy5c
IiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTCisuXCIgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKy5cIiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisuXCIg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUCisuXCIgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorLlwiIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
LlwiIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKy5cIiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKy5cIiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLlwiCisu
XCIgJEZyZWVCU0QkCisuXCIKKy5EZCBNYXJjaCA3LCAyMDE0CisuRHQgTE03NSA0CisuT3MKKy5T
aCBOQU1FCisuTm0gbG03NQorLk5kIGxtNzUgaTJjIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29y
IGRyaXZlcgorLlNoIFNZTk9QU0lTCisuQ2QgImRldmljZSBpaWMiCisuQ2QgImRldmljZSBpaWNi
dXMiCisuQ2QgImRldmljZSBsbTc1IgorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQorZHJpdmVy
IHByb3ZpZGVzIGFjY2VzcyB0byBzZW5zb3IgZGF0YSBhbmQgY29uZmlndXJhdGlvbiBvdmVyIHRo
ZQorLlhyIGlpY2J1cyA0IC4KKy5QcAorSXQgcHJvdmlkZXMgYW4gZWFzeSBhbmQgc2ltcGxlIHdh
eSB0byBjaGVjayB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBpMmMgYnVzCithcyBpdCBwcm92aWRl
cyByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGhlCisuTm0KK2NvbmZpZ3VyYXRpb24gcmVnaXN0
ZXIuCisuUHAKK1RoZSBhY2Nlc3MgdG8KKy5ObQorZGF0YSBpcyBtYWRlIHZpYSB0aGUKKy5YciBz
eXNjdGwgOAoraW50ZXJmYWNlOgorLkJkIC1saXRlcmFsCitkZXYubG03NS4wLiVkZXNjOiBMTTc1
QSB0ZW1wZXJhdHVyZSBzZW5zb3IKK2Rldi5sbTc1LjAuJWRyaXZlcjogbG03NQorZGV2LmxtNzUu
MC4lbG9jYXRpb246IGFkZHI9MHg0OQorZGV2LmxtNzUuMC4lcG5waW5mbzogbmFtZT1sbTc1MCBj
b21wYXQ9ZnJlZWJzZCxsbTc1YQorZGV2LmxtNzUuMC4lcGFyZW50OiBpaWNidXMzCitkZXYubG03
NS4wLnRlbXBlcmF0dXJlOiAyNy4xQworZGV2LmxtNzUuMC50aHlzdDogNzUuMEMKK2Rldi5sbTc1
LjAudG9zOiA4MC4wQworZGV2LmxtNzUuMC5mYXVsdHM6IDEKK2Rldi5sbTc1LjAubW9kZTogY29t
cGFyYXRvcgorZGV2LmxtNzUuMC5wb2xhcml0eTogYWN0aXZlLWxvdworZGV2LmxtNzUuMC5zaHV0
ZG93bjogMAorLkVkCisuQmwgLXRhZyAtd2lkdGggIi5WYSBkZXYubG03NS4lZC50ZW1wZXJhdHVy
ZSIKKy5JdCBWYSBkZXYubG03NS4lZC50ZW1wZXJhdHVyZQorSXMgdGhlIHJlYWQtb25seSB2YWx1
ZSBvZiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSByZWFkIGJ5IHRoZSBzZW5zb3IuCisuSXQgVmEg
ZGV2LmxtNzUuJWQudGh5c3QKK1NldHMgdGhlIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUuCitPbmNl
IHRoZSB0ZW1wZXJhdHVyZSBnZXQgb3ZlciB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZh
bHVlICh0b3MpCitpdCBuZWVkIHRvIGRyb3AgYmVsbG93IHRoZSBoeXN0ZXJlc2lzIHRlbXBlcmF0
dXJlIHRvIGRpc2FibGUgdGhlIG91dHB1dAorKGludGVycnVwdCkgcGluIGFnYWluLgorLkl0IFZh
IGRldi5sbTc1LiVkLnRvcworU2V0cyB0aGUgb3ZlcnRlbXBlcmF0dXJlIHNodXRkb3duIHZhbHVl
LgorT25jZSB0aGUgdGVtcGVyYXR1cmUgZ2V0IG92ZXIgdGhpcyB2YWx1ZSB0aGUgb3V0cHV0IHBp
biB3aWxsIGJlIGVuYWJsZWQuCitUaGUgd2F5IHRoZSBvdXRwdXQgKGludGVycnVwdCkgcGluIHdv
cmtzLCBkZXBlbmRzIG9uIHRoZSBtb2RlLgorLkl0IFZhIGRldi5sbTc1LiVkLmZhdWx0cworSXMg
dGhlIG51bWJlciBvZiBmYXVsdHMgdGhhdCBtdXN0IG9jY3VyIGNvbnNlY3V0aXZlbHkgdG8gYWN0
aXZhdGUgdGhlCitpbnRlcnJ1cHQgKG91dHB1dCkgcGluLgorSXQgY2FuIGJlIHNldCB0byAxLCAy
LCA0LCBhbmQgNi4KKy5JdCBWYSBkZXYubG03NS4lZC5tb2RlCitTZXQgdGhlIG9wZXJhdGlvbiBt
b2RlIGZvciB0aGUgc2Vuc29yIGludGVycnVwdCBwaW4uCitJdCBjYW4gYmUgc2V0IHRvICdjb21w
YXJhdG9yJyAoZGVmYXVsdCkgb3IgJ2ludGVycnVwdCcuCisuSXQgVmEgZGV2LmxtNzUuJWQucG9s
YXJpdHkKK1NldCB0aGUgcG9sYXJpdHkgb2YgdGhlIHNlbnNvciBpbnRlcnJ1cHQgcGluLgorSXQg
Y2FuIGJlIHNldCB0byAnYWN0aXZlLWxvdycgKGRlZmF1bHQpIG9yICdhY3RpdmUtaGlnaCcuCitQ
bGVhc2Ugbm90ZSB0aGF0IHRoZSBvdXRwdXQgcGluIGlzIGFuIG9wZW4tZHJhaW4gb3V0cHV0IGFu
ZCBpdCBuZWVkcyBhCitwcm9wZXIgcHVsbC11cCByZXNpc3RvciB0byB3b3JrLgorLkl0IFZhIGRl
di5sbTc1LiVkLnNodXRkb3duCitXaGVuIHNldCB0byAnMScgaXQgc2h1dGRvd24gdGhlIHNlbnNv
ci4KK1RoZSB0ZW1wZXJhdHVyZSBjb252ZXJ0aW9uIHN0b3BzIGJ1dCB0aGUgc2Vuc29yIHJlbWFp
bnMgd2l0aCBpdHMgaTJjIGJ1cworYWN0aXZlLCBpLmUuLCBpdCBjYW4gYmUgd29rZW4gdXAgYnkg
c2V0dGluZyB0aGlzIG9wdGlvbiB0byAnMCcgYWdhaW4uCisuRWwKKy5QcAorUGxlYXNlIGNoZWNr
IHRoZQorLk5tCitkYXRhc2hlZXQgZm9yIG1vcmUgZGV0YWlscy4KKy5QcAorV2hlbiB1c2VkIHRv
Z2V0aGVyIHdpdGgKKy5YciBzbm1wX2xtNzUgMworaXQgYWxsb3dzIHRoZSBtb25pdG9yaW5nIG9m
CisuTm0KK3RlbXBlcmF0dXJlIGRhdGEgb3ZlciBTTk1QLgorLlBwCitUaGUKKy5ObQorZHJpdmVy
IHN1cHBvcnRzIGJvdGggdGhlIGxvdyBhbmQgdGhlIGhpZ2ggcmVzb2x1dGlvbiBtb2RlbHMuCisu
UHAKK1RoZSBsb3cgcmVzb2x1dGlvbiBtb2RlbCAobG03NSkgcHJvdmlkZXMgYSA5IGJpdCBvdXRw
dXQgd2l0aCB0aGUgTFNCCityZXByZXNlbnRpbmcgMC41Qy4KKy5QcAorVGhlIGhpZ2ggcmVzb2x1
dGlvbiBtb2RlbCAobG03NWEpIHByb3ZpZGVzIGFuIDExIGJpdCBvdXRwdXQgd2l0aCB0aGUgTFNC
CityZXByZXNlbnRpbmcgMC4xMjVDLgorLlBwCitPbiBhCisuWHIgZGV2aWNlLmhpbnRzIDUKK2Jh
c2VkIHN5c3RlbSwgbGlrZQorLkxpIE1JUFMgLAordGhlc2UgdmFsdWVzIGFyZSBjb25maWd1cmFi
bGUgZm9yIHRoZQorLk5tIDoKKy5CbCAtdGFnIC13aWR0aCAiLlZhIGhpbnQubG03NS4lZC5sbTc1
YSIKKy5JdCBWYSBoaW50LmxtNzUuJWQuYXQKK0lzIHRoZQorLlhyIGlpY2J1cyA0Cit5b3UgYXJl
IGF0dGFjaGluZyB0by4KKy5JdCBWYSBoaW50LmxtNzUuJWQuYWRkcgorSXMgdGhlCisuTm0KK2ky
YyBhZGRyZXNzIG9uIHRoZQorLlhyIGlpY2J1cyA0IC4KKy5JdCBWYSBoaW50LmxtNzUuJWQubG03
NWEKK1doZW4gc2V0IHRvICcxJyBlbmFibGVzIHRoZSBoaWdoIHJlc29sdXRpb24gdGVtcGVyYXR1
cmUgcmVhZGluZyBmb3IgdGhpcworc2Vuc29yLgorLkVsCisuUHAKK09uIGEKKy5YciBGRFQgNAor
YmFzZWQgc3lzdGVtLCBsaWtlCisuTGkgQVJNICwKK3RoZSBEVFMgcGFydCBmb3IgYQorLk5tCitk
ZXZpY2UgdXN1YWxseSBsb29rcyBsaWtlOgorLkJkIC1saXRlcmFsCitpMmMgeworCisJLi4uCisK
KwlsbTc1MCB7CisJCWNvbXBhdGlibGUgPSAiZnJlZWJzZCxsbTc1IjsKKwkJaTJjLWFkZHJlc3Mg
PSA8MHg0OD47CisJfTsKKworCWxtNzUxIHsKKwkJY29tcGF0aWJsZSA9ICJmcmVlYnNkLGxtNzVh
IjsKKwkJaTJjLWFkZHJlc3MgPSA8MHg0OT47CisJfTsKK307CisuRWQKKy5QcAorV2hlcmU6Cisu
QmwgLXRhZyAtd2lkdGggIi5WYSBpMmMtYWRkcmVzcyIKKy5JdCBWYSBjb21wYXRpYmxlCitTaG91
bGQgYmUgc2V0IHRvICJmcmVlYnNkLGxtNzUiIGZvciB0aGUgbG93IHJlc29sdXRpb24gZGV2aWNl
cyBhbmQKKyJmcmVlYnNkLGxtNzVhIiBmb3IgdGhlIGhpZ2ggcmVzb2x1dGlvbiBkZXZpY2VzLgor
Lkl0IFZhIGkyYy1hZGRyZXNzCitUaGUKKy5WYSBpMmMtYWRkcmVzcworcHJvcGVydHkgaW5kaWNh
dGVzIHdoaWNoIGkyYyBhZGRyZXNzIHRoZQorLk5tCitpcyB3aXJlZCBhdC4KKy5ObQordGVtcGVy
YXR1cmUgc2Vuc29ycyBjYW4gYmUgd2lyZWQgdG8gOCBkaWZmZXJlbnQgYWRkcmVzcywgYWxsb3dp
bmcgdXAgdG8gOAorc2Vuc29ycyBvbiB0aGUgc2FtZQorLlhyIGlpY2J1cyA0IC4KKy5FbAorLlNo
IFNFRSBBTFNPCisuWHIgc25tcF9sbTc1IDMgLAorLlhyIGZkdCA0ICwKKy5YciBpaWMgNCAsCisu
WHIgaWljYnVzIDQgLAorLlhyIHN5c2N0bCA4CisuU2ggSElTVE9SWQorVGhlCisuTm0KK2RyaXZl
ciBmaXJzdCBhcHBlYXJlZCBpbgorLkZ4IDExLjAgLgorLlNoIEFVVEhPUlMKKy5BbiAtbm9zcGxp
dAorVGhlIGRyaXZlciBhbmQgdGhpcyBtYW51YWwgcGFnZSB3YXMgd3JpdHRlbiBieQorLkFuIEx1
aXogT3RhdmlvIE8gU291emEgQXEgbG9vc0BGcmVlQlNELm9yZwoKUHJvcGVydHkgY2hhbmdlcyBv
bjogc2hhcmUvbWFuL21hbjQvbG03NS40Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTAsMCArMSAjIwordGV4dC9wbGFpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkFkZGVkOiBzdm46a2V5d29yZHMKIyMgLTAsMCArMSAjIworRnJlZUJTRD0lSApcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMK
K25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cg==
--047d7bb70ae4a7569804f4443c0b--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ8CS7p980WsbAhdwZqNY%2BtACYm6b5GscYprNMto1F6dwE6GNA>