Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750857AbbGBKMQ (ORCPT ); Thu, 2 Jul 2015 06:12:16 -0400 Received: from fish.king.net.pl ([79.190.246.46]:58825 "EHLO king.net.pl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752886AbbGBKMC (ORCPT ); Thu, 2 Jul 2015 06:12:02 -0400 Date: Thu, 2 Jul 2015 12:08:39 +0200 (CEST) From: Paul Osmialowski X-X-Sender: newchief@localhost.localdomain To: Arnd Bergmann cc: Paul Osmialowski , linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , Ian Campbell , Jiri Slaby , Kumar Gala , Linus Walleij , Mark Rutland , Michael Turquette , Pawel Moll , Rob Herring , Russell King , Stephen Boyd , Vinod Koul , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org, devicetree@vger.kernel.org, dmaengine@vger.kernel.org, Nicolas Pitre , Sergei Poselenov , Paul Bolle , Jingchang Lu , Yuri Tikhonov , Rob Herring , Geert Uytterhoeven , Uwe Kleine-Koenig , Alexander Potashev , Frank Li , Thomas Gleixner , Anson Huang Subject: Re: [PATCH v2 3/9] arm: twr-k70f120m: clock driver for Kinetis SoC In-Reply-To: Message-ID: References: <1435667250-28299-1-git-send-email-pawelo@king.net.pl> <1435667250-28299-4-git-send-email-pawelo@king.net.pl> <28154735.0HeJqZBqop@wuerfel> User-Agent: Alpine 2.00 (LNX 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="98048-1640744698-1435831729=:13210" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 28216 Lines: 512 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --98048-1640744698-1435831729=:13210 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Nah, I've found this code hard to maintain. I'm attaching simplified version. Thanks, Paul On Wed, 1 Jul 2015, Paul Osmialowski wrote: > Hi Arnd, > > Can you look at attached candidate for the third iteration? Is it any better > now? > > Thanks, > Paul > > On Tue, 30 Jun 2015, Arnd Bergmann wrote: > >> On Tuesday 30 June 2015 14:27:24 Paul Osmialowski wrote: >> > Based on K70P256M150SF3RM.pdf K70 Sub-Family Reference Manual, Rev. 3. >> > >> > Signed-off-by: Paul Osmialowski >> > --- >> > .../devicetree/bindings/clock/kinetis-clock.txt | 63 +++ >> > arch/arm/boot/dts/kinetis.dtsi | 36 ++ >> > drivers/clk/Makefile | 1 + >> > drivers/clk/clk-kinetis.c | 463 >> > +++++++++++++++++++++ >> > 4 files changed, 563 insertions(+) >> > create mode 100644 >> > Documentation/devicetree/bindings/clock/kinetis-clock.txt >> > create mode 100644 drivers/clk/clk-kinetis.c >> > >> > diff --git a/Documentation/devicetree/bindings/clock/kinetis-clock.txt >> > b/Documentation/devicetree/bindings/clock/kinetis-clock.txt >> > new file mode 100644 >> > index 0000000..63af6a5 >> > --- /dev/null >> > +++ b/Documentation/devicetree/bindings/clock/kinetis-clock.txt >> > @@ -0,0 +1,63 @@ >> > +* Clock bindings for Freescale Kinetis SoC >> > + >> > +Required properties: >> > +- compatible: Should be "fsl,kinetis-cmu". >> > +- reg: Two address ranges, one for the Clock Genetator register set, >> > + one for System Integration Module register set. >> > +- Set of clock devices: one fixed-rate-root, fixed-rate clocks and >> > clock-gates. >> > + >> > +For clock-gate addresses see K70 Sub-Family Reference Manual, Rev. 3 >> > pg. 341 >> > +and later. Notice that addresses are zero-based, so SIM_SCGC1 has >> > address 0, >> > +SIM_SCGC2 has address 1 and so on. The second address component is the >> > bit >> > +index. >> >> Please document the sub-nodes that are allowed, and the format >> of the clock specifiers. >> >> > + >> > +Example: >> > + >> > +cmu@40064000 { >> > + compatible = "fsl,kinetis-cmu"; >> > + reg = <0x40064000 0x14>, <0x40047000 0x1100>; >> > + >> > + mcg_outclk: fixed-rate-root@mcgout { >> > + device_type = "mcgout"; >> > + #clock-cells = <0>; >> > + }; >> > + >> > + mcg_cclk: fixed-rate@cclk { >> >> '@' is a reserved character here that is used before the address >> of the device, so this has to be a hexadecimal number without leading >> '0x', and it should match the 'reg' property of the device. >> >> > + device_type = "cclk"; >> > + #clock-cells = <0>; >> > + clocks = <&mcg_outclk>; >> > + }; >> >> The device_type property here is not a standard identifier, >> and you don't list it as an optional or mandatory property. >> >> Please remove it and instead use the compatible property, the >> name or the address. >> >> Arnd >> > --98048-1640744698-1435831729=:13210 Content-Type: TEXT/x-diff; name=0003-arm-twr-k70f120m-clock-driver-for-Kinetis-SoC.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=0003-arm-twr-k70f120m-clock-driver-for-Kinetis-SoC.patch RnJvbSBhZTQzZGNkMTdlZWMzZWIyYzNhZDRkN2NkNTE0Mjk1ZDkzNTY1NWZl IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogUGF1bCBPc21pYWxv d3NraSA8cGF3ZWxvQGtpbmcubmV0LnBsPg0KRGF0ZTogTW9uLCAyOSBKdW4g MjAxNSAyMDo1ODo1NSArMDIwMA0KU3ViamVjdDogW1BBVENIIDMvOV0gYXJt OiB0d3ItazcwZjEyMG06IGNsb2NrIGRyaXZlciBmb3IgS2luZXRpcyBTb0MN Cg0KQmFzZWQgb24gSzcwUDI1Nk0xNTBTRjNSTS5wZGYgSzcwIFN1Yi1GYW1p bHkgUmVmZXJlbmNlIE1hbnVhbCwgUmV2LiAzLg0KDQpTaWduZWQtb2ZmLWJ5 OiBQYXVsIE9zbWlhbG93c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQotLS0N CiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9raW5ldGlzLWNsb2Nr LnR4dCAgICB8ICA2NSArKysNCiBhcmNoL2FybS9ib290L2R0cy9raW5ldGlz LmR0c2kgICAgICAgICAgICAgICAgICAgICB8ICAyOSArKw0KIGRyaXZlcnMv Y2xrL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsNCiBkcml2ZXJzL2Nsay9jbGsta2luZXRpcy5jICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDQ3NSArKysrKysrKysrKysrKysrKysrKysNCiA0 IGZpbGVzIGNoYW5nZWQsIDU3MCBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9j bG9jay9raW5ldGlzLWNsb2NrLnR4dA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2Nsay9jbGsta2luZXRpcy5jDQoNCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2sva2luZXRpcy1j bG9jay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv Y2xvY2sva2luZXRpcy1jbG9jay50eHQNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwLi5lNmMxY2ZhDQotLS0gL2Rldi9udWxsDQorKysg Yi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvY2xvY2sva2lu ZXRpcy1jbG9jay50eHQNCkBAIC0wLDAgKzEsNjUgQEANCisqIENsb2NrIGJp bmRpbmdzIGZvciBGcmVlc2NhbGUgS2luZXRpcyBTb0MNCisNCitSZXF1aXJl ZCBwcm9wZXJ0aWVzOg0KKy0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJmc2ws a2luZXRpcy1jbXUiLg0KKy0gcmVnOiBUd28gYWRkcmVzcyByYW5nZXMsIG9u ZSBmb3IgdGhlIE11bHRpcHVycG9zZSBDbG9jayBHZW5ldGF0b3IgKE1DRykN CisJcmVnaXN0ZXIgc2V0LCBvbmUgZm9yIFN5c3RlbSBJbnRlZ3JhdGlvbiBN b2R1bGUgKFNJTSkgcmVnaXN0ZXIgc2V0Lg0KKy0gU2V0IG9mIGNsb2NrIGRl dmljZXMgKG9ibGlnYXRvcnkpOg0KKwktIGZpeGVkLXJhdGUtbWNnb3V0DQor CQlSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KKwkJLSAjY2xvY2stY2VsbHM6IG11 c3QgYmUgPDA+Lg0KKwktIGZpeGVkLXJhdGUtY2Nsaw0KKwkJUmVxdWlyZWQg cHJvcGVydGllczoNCisJCS0gI2Nsb2NrLWNlbGxzOiBtdXN0IGJlIDwwPi4N CisJLSBmaXhlZC1yYXRlLXBjbGsNCisJCVJlcXVpcmVkIHByb3BlcnRpZXM6 DQorCQktICNjbG9jay1jZWxsczogbXVzdCBiZSA8MD4uDQorCS0gY2Nsay1n YXRlDQorCQlSZXF1aXJlZCBwcm9wZXJ0aWVzOg0KKwkJLSAjY2xvY2stY2Vs bHM6IG11c3QgYmUgPDI+IChzZWUgYmVsb3cpLg0KKwktIHBjbGstZ2F0ZQ0K KwkJUmVxdWlyZWQgcHJvcGVydGllczoNCisJCS0gI2Nsb2NrLWNlbGxzOiBt dXN0IGJlIDwyPiAoc2VlIGJlbG93KS4NCisNCitGb3IgY2xvY2sgZ2F0ZSBh ZGRyZXNzZXMgc2VlIEs3MCBTdWItRmFtaWx5IFJlZmVyZW5jZSBNYW51YWws IFJldi4gMyBwZy4gMzQxDQorYW5kIGxhdGVyLiBOb3RpY2UgdGhhdCBhZGRy ZXNzZXMgYXJlIHplcm8tYmFzZWQsIHNvIFNJTV9TQ0dDMSBoYXMgYWRkcmVz cyAwLA0KK1NJTV9TQ0dDMiBoYXMgYWRkcmVzcyAxIGFuZCBzbyBvbi4gVGhl IHNlY29uZCBhZGRyZXNzIGNvbXBvbmVudCBpcyB0aGUgYml0DQoraW5kZXgu DQorDQorRXhhbXBsZToNCisNCitjbXVANDAwNjQwMDAgew0KKwljb21wYXRp YmxlID0gImZzbCxraW5ldGlzLWNtdSI7DQorCXJlZyA9IDwweDQwMDY0MDAw IDB4MTQ+LCA8MHg0MDA0NzAwMCAweDExMDA+Ow0KKw0KKwltY2dfb3V0Y2xr OiBmaXhlZC1yYXRlLW1jZ291dCB7DQorCQkjY2xvY2stY2VsbHMgPSA8MD47 DQorCX07DQorDQorCW1jZ19jY2xrOiBmaXhlZC1yYXRlLWNjbGsgew0KKwkJ I2Nsb2NrLWNlbGxzID0gPDA+Ow0KKwl9Ow0KKw0KKwltY2dfcGNsazogZml4 ZWQtcmF0ZS1wY2xrIHsNCisJCSNjbG9jay1jZWxscyA9IDwwPjsNCisJfTsN CisNCisJbWNnX2NjbGtfZ2F0ZTogY2Nsay1nYXRlIHsNCisJCSNjbG9jay1j ZWxscyA9IDwyPjsNCisJfTsNCisNCisJbWNnX3BjbGtfZ2F0ZTogcGNsay1n YXRlIHsNCisJCSNjbG9jay1jZWxscyA9IDwyPjsNCisJfTsNCit9Ow0KKw0K K3VhcnQxOiBzZXJpYWxANDAwNmIwMDAgew0KKwljb21wYXRpYmxlID0gImZz bCxraW5ldGlzLWxwdWFydCI7DQorCXJlZyA9IDwweDQwMDZiMDAwIDB4MTAw MD47DQorCWludGVycnVwdHMgPSA8NDc+LCA8NDg+Ow0KKwlpbnRlcnJ1cHQt bmFtZXMgPSAidWFydC1zdGF0IiwgInVhcnQtZXJyIjsNCisJY2xvY2tzID0g PCZtY2dfY2Nsa19nYXRlIDMgMTE+Ow0KKwljbG9jay1uYW1lcyA9ICJpcGci Ow0KKwlkbWFzID0gPCZlZG1hIDAgND47DQorCWRtYS1uYW1lcyA9ICJyeCI7 DQorfTsNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9raW5ldGlz LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9raW5ldGlzLmR0c2kNCmluZGV4 IDkzZDJhOGEuLjQyYTExYzcgMTAwNjQ0DQotLS0gYS9hcmNoL2FybS9ib290 L2R0cy9raW5ldGlzLmR0c2kNCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tp bmV0aXMuZHRzaQ0KQEAgLTMsMyArMywzMiBAQA0KICAqDQogICovDQogI2lu Y2x1ZGUgImFybXY3LW0uZHRzaSINCisNCisvIHsNCisJc29jIHsNCisJCWNt dUA0MDA2NDAwMCB7DQorCQkJY29tcGF0aWJsZSA9ICJmc2wsa2luZXRpcy1j bXUiOw0KKwkJCXJlZyA9IDwweDQwMDY0MDAwIDB4MTQ+LCA8MHg0MDA0NzAw MCAweDExMDA+Ow0KKw0KKwkJCW1jZ19vdXRjbGs6IGZpeGVkLXJhdGUtbWNn b3V0IHsNCisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+Ow0KKwkJCX07DQorDQor CQkJbWNnX2NjbGs6IGZpeGVkLXJhdGUtY2NsayB7DQorCQkJCSNjbG9jay1j ZWxscyA9IDwwPjsNCisJCQl9Ow0KKw0KKwkJCW1jZ19wY2xrOiBmaXhlZC1y YXRlLXBjbGsgew0KKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47DQorCQkJfTsN CisNCisJCQltY2dfY2Nsa19nYXRlOiBjY2xrLWdhdGUgew0KKwkJCQkjY2xv Y2stY2VsbHMgPSA8Mj47DQorCQkJfTsNCisNCisJCQltY2dfcGNsa19nYXRl OiBwY2xrLWdhdGUgew0KKwkJCQkjY2xvY2stY2VsbHMgPSA8Mj47DQorCQkJ fTsNCisJCX07DQorCX07DQorfTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Ns ay9NYWtlZmlsZSBiL2RyaXZlcnMvY2xrL01ha2VmaWxlDQppbmRleCA2MzQx OGNmLi40MTJkNzZiIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9jbGsvTWFrZWZp bGUNCisrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxlDQpAQCAtMjQsNiArMjQs NyBAQCBvYmotJChDT05GSUdfQ09NTU9OX0NMS19DRENFNzA2KQkrPSBjbGst Y2RjZTcwNi5vDQogb2JqLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpCQkrPSBj bGstY2xwczcxMXgubw0KIG9iai0kKENPTkZJR19BUkNIX0VGTTMyKQkJKz0g Y2xrLWVmbTMyZ2cubw0KIG9iai0kKENPTkZJR19BUkNIX0hJR0hCQU5LKQkJ Kz0gY2xrLWhpZ2hiYW5rLm8NCitvYmotJChDT05GSUdfQVJDSF9LSU5FVElT KQkJKz0gY2xrLWtpbmV0aXMubw0KIG9iai0kKENPTkZJR19NQUNIX0xPT05H U09OMzIpCQkrPSBjbGstbHMxeC5vDQogb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfTUFYX0dFTikJKz0gY2xrLW1heC1nZW4ubw0KIG9iai0kKENPTkZJR19D T01NT05fQ0xLX01BWDc3Njg2KQkrPSBjbGstbWF4Nzc2ODYubw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1raW5ldGlzLmMgYi9kcml2ZXJzL2Ns ay9jbGsta2luZXRpcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uYTZlOGEyOA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9jbGsvY2xrLWtpbmV0aXMuYw0KQEAgLTAsMCArMSw0NzUgQEANCisvKg0K KyAqIGNsay1raW5ldGlzLmMgLSBDbG9jayBkcml2ZXIgZm9yIEtpbmV0aXMg SzcwIE1DRw0KKyAqDQorICogQmFzZWQgb24gbGVnYWN5IHByZS1PRiBjb2Rl IGJ5IEFsZXhhbmRlciBQb3Rhc2hldiA8YXNwb3Rhc2hldkBlbWNyYWZ0LmNv bT4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNSBQYXVsIE9zbWlhbG93 c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQorICoNCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAqIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQor ICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQorI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3Zp ZGVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+DQorDQorZW51bSBraW5ldGlzX2Nsa19pZHMgew0KKwlLSU5FVElTX0NM S19NQ0dPVVQgPSAwLA0KKwlLSU5FVElTX0NMS19DQ0xLLA0KKwlLSU5FVElT X0NMS19QQ0xLLA0KKwlLSU5FVElTX0NMS19DQ0xLX0dBVEUsDQorCUtJTkVU SVNfQ0xLX1BDTEtfR0FURSwNCisJS0lORVRJU19DTEtfTlVNDQorfTsNCisN CitzdGF0aWMgY29uc3Qgc3RydWN0IHsNCisJZW51bSBraW5ldGlzX2Nsa19p ZHMgaWQ7DQorCWNvbnN0IGNoYXIgKm5hbWU7DQorfSBraW5ldGlzX2Nsa3Nb S0lORVRJU19DTEtfTlVNXSA9IHsNCisJeyAuaWQgPSBLSU5FVElTX0NMS19N Q0dPVVQsIC5uYW1lID0gImZpeGVkLXJhdGUtbWNnb3V0IiwgfSwNCisJeyAu aWQgPSBLSU5FVElTX0NMS19DQ0xLLCAubmFtZSA9ICJmaXhlZC1yYXRlLWNj bGsiLCB9LA0KKwl7IC5pZCA9IEtJTkVUSVNfQ0xLX1BDTEssIC5uYW1lID0g ImZpeGVkLXJhdGUtcGNsayIsIH0sDQorCXsgLmlkID0gS0lORVRJU19DTEtf Q0NMS19HQVRFLCAubmFtZSA9ICJjY2xrLWdhdGUiLCB9LA0KKwl7IC5pZCA9 IEtJTkVUSVNfQ0xLX1BDTEtfR0FURSwgLm5hbWUgPSAicGNsay1nYXRlIiwg fSwNCit9Ow0KKw0KKy8qDQorICogRnJlcXVlbmNpZXMgb24gT1NDMCAoRVhU QUwwL1hUQUwwKSBhbmQgT1NDMSAoRVhUQUwxL1hUQUwxKQ0KKyAqDQorICog VGhlc2UgZnJlcXVlbmNpZXMgc2hvdWxkIGJlIHNldCB0byB0aGUgc2FtZSB2 YWx1ZXMgYXMgaW4gVS1Cb290Lg0KKyAqLw0KKyNkZWZpbmUgS0lORVRJU19P U0MwX1JBVEUJNTAwMDAwMDAJLyogNTAgTUh6ICovDQorI2RlZmluZSBLSU5F VElTX09TQzFfUkFURQkxMjAwMDAwMAkvKiAxMiBNSHogKi8NCisNCisjZGVm aW5lIEtJTkVUSVNfU0lNX0NHX05VTVJFR1MJNw0KKw0KKy8qDQorICogU3lz dGVtIEludGVncmF0aW9uIE1vZHVsZSAoU0lNKSByZWdpc3RlciBtYXANCisg Kg0KKyAqIFRoaXMgbWFwIGFjdHVhbGx5IGNvdmVycyB0d28gaGFyZHdhcmUg bW9kdWxlczoNCisgKiAgICAgMS4gU0lNIGxvdy1wb3dlciBsb2dpYywgYXQg MHg0MDA0NzAwMA0KKyAqICAgICAyLiBTeXN0ZW0gaW50ZWdyYXRpb24gbW9k dWxlIChTSU0pLCBhdCAweDQwMDQ4MDAwDQorICovDQorc3RydWN0IGtpbmV0 aXNfc2ltX3JlZ3Mgew0KKwl1MzIgc29wdDE7CS8qIFN5c3RlbSBPcHRpb25z IFJlZ2lzdGVyIDEgKi8NCisJdTMyIHJzdjBbMTAyNF07DQorCXUzMiBzb3B0 MjsJLyogU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgMiAqLw0KKwl1MzIgcnN2 MTsNCisJdTMyIHNvcHQ0OwkvKiBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA0 ICovDQorCXUzMiBzb3B0NTsJLyogU3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIg NSAqLw0KKwl1MzIgc29wdDY7CS8qIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVy IDYgKi8NCisJdTMyIHNvcHQ3OwkvKiBTeXN0ZW0gT3B0aW9ucyBSZWdpc3Rl ciA3ICovDQorCXUzMiByc3YyWzJdOw0KKwl1MzIgc2RpZDsJLyogU3lzdGVt IERldmljZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAqLw0KKwl1MzIgc2Nn Y1tLSU5FVElTX1NJTV9DR19OVU1SRUdTXTsJLyogQ2xvY2sgR2F0aW5nIFJl Z3MgMS4uLjcgKi8NCisJdTMyIGNsa2RpdjE7CS8qIFN5c3RlbSBDbG9jayBE aXZpZGVyIFJlZ2lzdGVyIDEgKi8NCisJdTMyIGNsa2RpdjI7CS8qIFN5c3Rl bSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDIgKi8NCisJdTMyIGZjZmcxOwkv KiBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8NCisJdTMyIGZj ZmcyOwkvKiBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8NCisJ dTMyIHVpZGg7CS8qIFVuaXF1ZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciBI aWdoICovDQorCXUzMiB1aWRtaDsJLyogVW5pcXVlIElkZW50aWZpY2F0aW9u IFJlZ2lzdGVyIE1pZC1IaWdoICovDQorCXUzMiB1aWRtbDsJLyogVW5pcXVl IElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1pZCBMb3cgKi8NCisJdTMyIHVp ZGw7CS8qIFVuaXF1ZSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciBMb3cgKi8N CisJdTMyIGNsa2RpdjM7CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lz dGVyIDMgKi8NCisJdTMyIGNsa2RpdjQ7CS8qIFN5c3RlbSBDbG9jayBEaXZp ZGVyIFJlZ2lzdGVyIDQgKi8NCisJdTMyIG1jcjsJLyogTWlzYyBDb250cm9s IFJlZ2lzdGVyICovDQorfTsNCisjZGVmaW5lIEtJTkVUSVNfU0lNX1BUUihi YXNlLCByZWcpIFwNCisJKCYoKChzdHJ1Y3Qga2luZXRpc19zaW1fcmVncyAq KShiYXNlKSktPnJlZykpDQorDQorLyoNCisgKiBTeXN0ZW0gQ2xvY2sgRGl2 aWRlciBSZWdpc3RlciAxDQorICovDQorLyogQ2xvY2sgMSBvdXRwdXQgZGl2 aWRlciB2YWx1ZSAoZm9yIHRoZSBjb3JlL3N5c3RlbSBjbG9jaykgKi8NCisj ZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMV9CSVRTCTI4DQor I2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYxX09VVERJVjFfTVNLIFwNCisJ KCgoMSA8PCA0KSAtIDEpIDw8IEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElW MV9CSVRTKQ0KKy8qIENsb2NrIDIgb3V0cHV0IGRpdmlkZXIgdmFsdWUgKGZv ciB0aGUgcGVyaXBoZXJhbCBjbG9jaykgKi8NCisjZGVmaW5lIEtJTkVUSVNf U0lNX0NMS0RJVjFfT1VURElWMl9CSVRTCTI0DQorI2RlZmluZSBLSU5FVElT X1NJTV9DTEtESVYxX09VVERJVjJfTVNLIFwNCisJKCgoMSA8PCA0KSAtIDEp IDw8IEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMl9CSVRTKQ0KKw0KKy8q DQorICogU3lzdGVtIENsb2NrIERpdmlkZXIgUmVnaXN0ZXIgMg0KKyAqLw0K Ky8qIFVTQiBIUyBjbG9jayBkaXZpZGVyIGZyYWN0aW9uICovDQorI2RlZmlu ZSBLSU5FVElTX1NJTV9DTEtESVYyX1VTQkhTRlJBQ19CSVQJOA0KKyNkZWZp bmUgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JIU0ZSQUNfTVNLIFwNCisJKDEg PDwgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JIU0ZSQUNfQklUKQ0KKy8qIFVT QiBIUyBjbG9jayBkaXZpZGVyIGRpdmlzb3IgKi8NCisjZGVmaW5lIEtJTkVU SVNfU0lNX0NMS0RJVjJfVVNCSFNESVZfQklUCTkNCisjZGVmaW5lIEtJTkVU SVNfU0lNX0NMS0RJVjJfVVNCSFNESVZfTVNLIFwNCisJKDcgPDwgS0lORVRJ U19TSU1fQ0xLRElWMl9VU0JIU0RJVl9CSVQpDQorDQorLyoNCisgKiBNQ0cg Q29udHJvbCA1IFJlZ2lzdGVyDQorICovDQorLyogUExMIEV4dGVybmFsIFJl ZmVyZW5jZSBEaXZpZGVyICovDQorI2RlZmluZSBLSU5FVElTX01DR19DNV9Q UkRJVl9CSVRTCTANCisjZGVmaW5lIEtJTkVUSVNfTUNHX0M1X1BSRElWX01T SyBcDQorCSgoKDEgPDwgMykgLSAxKSA8PCBLSU5FVElTX01DR19DNV9QUkRJ Vl9CSVRTKQ0KKy8qIFBMTCBTdG9wIEVuYWJsZSAqLw0KKyNkZWZpbmUgS0lO RVRJU19NQ0dfQzVfUExMU1RFTl9NU0sJKDEgPDwgNSkNCisvKiBQTEwgQ2xv Y2sgRW5hYmxlICovDQorI2RlZmluZSBLSU5FVElTX01DR19DNV9QTExDTEtF Tl9NU0sJKDEgPDwgNikNCisvKiBQTEwgRXh0ZXJuYWwgUmVmZXJlbmNlIFNl bGVjdCAoZm9yIEs3MEAxMjBNSHopICovDQorI2RlZmluZSBLSU5FVElTX01D R19DNV9QTExSRUZTRUxfQklUCTcNCisjZGVmaW5lIEtJTkVUSVNfTUNHX0M1 X1BMTFJFRlNFTF9NU0sJKDEgPDwgS0lORVRJU19NQ0dfQzVfUExMUkVGU0VM X0JJVCkNCisvKg0KKyAqIE1DRyBDb250cm9sIDYgUmVnaXN0ZXINCisgKi8N CisvKiBWQ08gRGl2aWRlciAqLw0KKyNkZWZpbmUgS0lORVRJU19NQ0dfQzZf VkRJVl9CSVRTCTANCisjZGVmaW5lIEtJTkVUSVNfTUNHX0M2X1ZESVZfTVNL IFwNCisJKCgoMSA8PCA1KSAtIDEpIDw8IEtJTkVUSVNfTUNHX0M2X1ZESVZf QklUUykNCisvKiBQTEwgU2VsZWN0ICovDQorI2RlZmluZSBLSU5FVElTX01D R19DNl9QTExTX01TSwkJKDEgPDwgNikNCisvKg0KKyAqIE1DRyBDb250cm9s IDExIFJlZ2lzdGVyDQorICovDQorLyogUExMMSBFeHRlcm5hbCBSZWZlcmVu Y2UgRGl2aWRlciAqLw0KKyNkZWZpbmUgS0lORVRJU19NQ0dfQzExX1BSRElW X0JJVFMJMA0KKyNkZWZpbmUgS0lORVRJU19NQ0dfQzExX1BSRElWX01TSyBc DQorCSgoKDEgPDwgMykgLSAxKSA8PCBLSU5FVElTX01DR19DMTFfUFJESVZf QklUUykNCisvKiBQTEwgQ2xvY2sgU2VsZWN0OiBQTEwwIG9yIFBMTDEgKi8N CisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMV9QTExDU19NU0sJKDEgPDwgNCkN CisvKiBQTEwxIFN0b3AgRW5hYmxlICovDQorI2RlZmluZSBLSU5FVElTX01D R19DMTFfUExMU1RFTjFfTVNLCSgxIDw8IDUpDQorLyogUExMMSBDbG9jayBF bmFibGUgKi8NCisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMV9QTExDTEtFTjFf TVNLCSgxIDw8IDYpDQorLyogUExMMSBFeHRlcm5hbCBSZWZlcmVuY2UgU2Vs ZWN0IChmb3IgSzcwQDEyME1IeikgKi8NCisjZGVmaW5lIEtJTkVUSVNfTUNH X0MxMV9QTExSRUZTRUwxX0JJVAk3DQorI2RlZmluZSBLSU5FVElTX01DR19D MTFfUExMUkVGU0VMMV9NU0sJKDEgPDwgS0lORVRJU19NQ0dfQzExX1BMTFJF RlNFTDFfQklUKQ0KKy8qDQorICogTUNHIENvbnRyb2wgMTIgUmVnaXN0ZXIN CisgKi8NCisvKiBWQ08xIERpdmlkZXIgKi8NCisjZGVmaW5lIEtJTkVUSVNf TUNHX0MxMl9WRElWMV9CSVRTCTANCisjZGVmaW5lIEtJTkVUSVNfTUNHX0Mx Ml9WRElWMV9NU0sgXA0KKwkoKCgxIDw8IDUpIC0gMSkgPDwgS0lORVRJU19N Q0dfQzEyX1ZESVYxX0JJVFMpDQorDQorLyoNCisgKiBNdWx0aXB1cnBvc2Ug Q2xvY2sgR2VuZXJhdG9yIChNQ0cpIHJlZ2lzdGVyIG1hcA0KKyAqDQorICog U2VlIENoYXB0ZXIgMjUgb2YgdGhlIEs3MCBSZWZlcmVuY2UgTWFudWFsDQor ICovDQorc3RydWN0IGtpbmV0aXNfbWNnX3JlZ3Mgew0KKwl1OCBjMTsJCS8q IE1DRyBDb250cm9sIDEgUmVnaXN0ZXIgKi8NCisJdTggYzI7CQkvKiBNQ0cg Q29udHJvbCAyIFJlZ2lzdGVyICovDQorCXU4IGMzOwkJLyogTUNHIENvbnRy b2wgMyBSZWdpc3RlciAqLw0KKwl1OCBjNDsJCS8qIE1DRyBDb250cm9sIDQg UmVnaXN0ZXIgKi8NCisJdTggYzU7CQkvKiBNQ0cgQ29udHJvbCA1IFJlZ2lz dGVyICovDQorCXU4IGM2OwkJLyogTUNHIENvbnRyb2wgNiBSZWdpc3RlciAq Lw0KKwl1OCBzdGF0dXM7CS8qIE1DRyBTdGF0dXMgUmVnaXN0ZXIgKi8NCisJ dTggcnN2MDsNCisJdTggYXRjOwkJLyogTUNHIEF1dG8gVHJpbSBDb250cm9s IFJlZ2lzdGVyICovDQorCXU4IHJzdjE7DQorCXU4IGF0Y3ZoOwkvKiBNQ0cg QXV0byBUcmltIENvbXBhcmUgVmFsdWUgSGlnaCBSZWdpc3RlciAqLw0KKwl1 OCBhdGN2bDsJLyogTUNHIEF1dG8gVHJpbSBDb21wYXJlIFZhbHVlIExvdyBS ZWdpc3RlciAqLw0KKwl1OCBjNzsJCS8qIE1DRyBDb250cm9sIDcgUmVnaXN0 ZXIgKi8NCisJdTggYzg7CQkvKiBNQ0cgQ29udHJvbCA4IFJlZ2lzdGVyICov DQorCXU4IHJzdjI7DQorCXU4IGMxMDsJCS8qIE1DRyBDb250cm9sIDEwIFJl Z2lzdGVyICovDQorCXU4IGMxMTsJCS8qIE1DRyBDb250cm9sIDExIFJlZ2lz dGVyICovDQorCXU4IGMxMjsJCS8qIE1DRyBDb250cm9sIDEyIFJlZ2lzdGVy ICovDQorCXU4IHN0YXR1czI7CS8qIE1DRyBTdGF0dXMgMiBSZWdpc3RlciAq Lw0KKwl1OCByc3YzOw0KK307DQorI2RlZmluZSBLSU5FVElTX01DR19QVFIo YmFzZSwgcmVnKSBcDQorCSgmKCgoc3RydWN0IGtpbmV0aXNfbWNnX3JlZ3Mg KikoYmFzZSkpLT5yZWcpKQ0KKw0KK3N0cnVjdCBraW5ldGlzX2Nsa19nYXRl IHsNCisJY29uc3QgY2hhciAqY2xrX2dhdGVfbmFtZTsNCisJc3RydWN0IGNs ayAqY2xrOw0KKwl1MzIgcmVnOw0KKwl1MzIgaWR4Ow0KKwlzdHJ1Y3QgbGlz dF9oZWFkIGNsa19saXN0Ow0KK307DQorDQorc3RydWN0IGtpbmV0aXNfY2xr X2dhdGVfZGF0YSB7DQorCWNvbnN0IGNoYXIgKmNsa19wYXJlbnRfbmFtZTsN CisJdm9pZCBfX2lvbWVtICpzaW07DQorCXN0cnVjdCBsaXN0X2hlYWQgY2xr X2dhdGVfbGlzdDsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgY2xrICpraW5l dGlzX2ZpbmRfY2xrX2dhdGUoDQorCQlzdHJ1Y3Qga2luZXRpc19jbGtfZ2F0 ZV9kYXRhICpjbGtfZ2F0ZV9kYXRhLCB1MzIgcmVnLCB1MzIgaWR4KQ0KK3sN CisJc3RydWN0IGtpbmV0aXNfY2xrX2dhdGUgKmdhdGU7DQorDQorCWxpc3Rf Zm9yX2VhY2hfZW50cnkoZ2F0ZSwgJmNsa19nYXRlX2RhdGEtPmNsa19nYXRl X2xpc3QsIGNsa19saXN0KQ0KKwkJaWYgKChnYXRlLT5yZWcgPT0gcmVnKSAm JiAoZ2F0ZS0+aWR4ID09IGlkeCkpDQorCQkJcmV0dXJuIGdhdGUtPmNsazsN CisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgY2xr ICpraW5ldGlzX2Nsa19nYXRlX2dldChzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdz ICpjbGtzcGVjLA0KKwkJCQkJdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBr aW5ldGlzX2Nsa19nYXRlX2RhdGEgKmNsa19nYXRlX2RhdGEgPSBkYXRhOw0K KwlzdHJ1Y3Qga2luZXRpc19jbGtfZ2F0ZSAqZ2F0ZTsNCisJdTMyIHJlZyA9 IGNsa3NwZWMtPmFyZ3NbMF07DQorCXUzMiBpZHggPSBjbGtzcGVjLT5hcmdz WzFdOw0KKwlzdHJ1Y3QgY2xrICpjbGs7DQorDQorCWNsayA9IGtpbmV0aXNf ZmluZF9jbGtfZ2F0ZShjbGtfZ2F0ZV9kYXRhLCByZWcsIGlkeCk7DQorCWlm IChjbGspDQorCQlyZXR1cm4gY2xrOw0KKw0KKwlnYXRlID0ga3phbGxvYyhz aXplb2Yoc3RydWN0IGtpbmV0aXNfY2xrX2dhdGUpLCBHRlBfS0VSTkVMKTsN CisJaWYgKCFnYXRlKQ0KKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQor CWdhdGUtPmNsa19nYXRlX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwg IiVzOiV1OiV1IiwNCisJCQkJY2xrc3BlYy0+bnAtPmZ1bGxfbmFtZSwgcmVn LCBpZHgpOw0KKw0KKwljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBn YXRlLT5jbGtfZ2F0ZV9uYW1lLA0KKwkJCQljbGtfZ2F0ZV9kYXRhLT5jbGtf cGFyZW50X25hbWUsIDAsDQorCQkJCUtJTkVUSVNfU0lNX1BUUihjbGtfZ2F0 ZV9kYXRhLT5zaW0sIHNjZ2NbcmVnXSksDQorCQkJCWlkeCwgMCwgTlVMTCk7 DQorCWlmIChJU19FUlIoY2xrKSkgew0KKwkJcHJfZXJyKCJDYW5ub3QgcmVn aXN0ZXIgZ2F0ZSB0byBjbG9jayAlc1xuIiwNCisJCQkJY2xrX2dhdGVfZGF0 YS0+Y2xrX3BhcmVudF9uYW1lKTsNCisJCWtmcmVlX2NvbnN0KGdhdGUtPmNs a19nYXRlX25hbWUpOw0KKwkJa2ZyZWUoZ2F0ZSk7DQorCQlyZXR1cm4gY2xr Ow0KKwl9DQorDQorCWdhdGUtPmNsayA9IGNsazsNCisJZ2F0ZS0+cmVnID0g cmVnOw0KKwlnYXRlLT5pZHggPSBpZHg7DQorDQorCWxpc3RfYWRkKCZnYXRl LT5jbGtfbGlzdCwgJmNsa19nYXRlX2RhdGEtPmNsa19nYXRlX2xpc3QpOw0K Kw0KKwlyZXR1cm4gY2xrOw0KK30NCisNCitzdGF0aWMgaW50IGtpbmV0aXNf b2ZfcmVnaXN0ZXJfZml4ZWRfcmF0ZV9yb290KHN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnAsDQorCQkJCQkJCXUzMiBjbG9ja192YWwpDQorew0KKwlzdHJ1Y3Qg Y2xrICpjbGs7DQorCWludCByZXQ7DQorDQorCWNsayA9IGNsa19yZWdpc3Rl cl9maXhlZF9yYXRlKE5VTEwsIG5wLT5mdWxsX25hbWUsIE5VTEwsIENMS19J U19ST09ULA0KKwkJCQkJCQkJICAgIGNsb2NrX3ZhbCk7DQorCWlmIChJU19F UlIoY2xrKSkgew0KKwkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgY2xv Y2sgJXNcbiIsIG5wLT5mdWxsX25hbWUpOw0KKwkJcmV0dXJuIFBUUl9FUlIo Y2xrKTsNCisJfQ0KKw0KKwlyZXQgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5w LCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNsayk7DQorCWlmIChyZXQgPCAw KSB7DQorCQlwcl9lcnIoIkNvdWxkIG5vdCBhZGQgY2xvY2sgcHJvdmlkZXIg JXNcbiIsIG5wLT5mdWxsX25hbWUpOw0KKwkJY2xrX3VucmVnaXN0ZXIoY2xr KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBpbnQga2luZXRpc19vZl9yZWdpc3Rlcl9maXhlZF9yYXRl KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQorCQkJCQlzdHJ1Y3QgZGV2aWNl X25vZGUgKnBhcmVudF9jbGssDQorCQkJCQl1MzIgY2xvY2tfdmFsKQ0KK3sN CisJc3RydWN0IGNsayAqY2xrOw0KKwlpbnQgcmV0Ow0KKw0KKwljbGsgPSBj bGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCBucC0+ZnVsbF9uYW1lLA0K KwkJCQkJcGFyZW50X2Nsay0+ZnVsbF9uYW1lLCAwLCBjbG9ja192YWwpOw0K KwlpZiAoSVNfRVJSKGNsaykpIHsNCisJCXByX2VycigiQ291bGQgbm90IHJl Z2lzdGVyIGNsb2NrICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsNCisJCXJldHVy biBQVFJfRVJSKGNsayk7DQorCX0NCisNCisJcmV0ID0gb2ZfY2xrX2FkZF9w cm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBjbGspOw0KKwlp ZiAocmV0IDwgMCkgew0KKwkJcHJfZXJyKCJDb3VsZCBub3QgYWRkIGNsb2Nr IHByb3ZpZGVyICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsNCisJCWNsa191bnJl Z2lzdGVyKGNsayk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IGtpbmV0aXNfb2ZfcmVnaXN0ZXJf Y2xrX2dhdGUoc3RydWN0IGRldmljZV9ub2RlICpucCwNCisJCQkJCXN0cnVj dCBkZXZpY2Vfbm9kZSAqcGFyZW50X2NsaywNCisJCQkJCXZvaWQgX19pb21l bSAqc2ltKQ0KK3sNCisJc3RydWN0IGtpbmV0aXNfY2xrX2dhdGVfZGF0YSAq Y2xrX2dhdGU7DQorCWludCByZXQ7DQorDQorCWNsa19nYXRlID0ga3phbGxv YyhzaXplb2Yoc3RydWN0IGtpbmV0aXNfY2xrX2dhdGVfZGF0YSksIEdGUF9L RVJORUwpOw0KKwlpZiAoIWNsa19nYXRlKQ0KKwkJcmV0dXJuIC1FTk9NRU07 DQorDQorCWNsa19nYXRlLT5jbGtfcGFyZW50X25hbWUgPSBwYXJlbnRfY2xr LT5mdWxsX25hbWU7DQorCWNsa19nYXRlLT5zaW0gPSBzaW07DQorCUlOSVRf TElTVF9IRUFEKCZjbGtfZ2F0ZS0+Y2xrX2dhdGVfbGlzdCk7DQorDQorCXJl dCA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIGtpbmV0aXNfY2xrX2dhdGVf Z2V0LCBjbGtfZ2F0ZSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlwcl9lcnIo IkNvdWxkIG5vdCBhZGQgY2xvY2sgcHJvdmlkZXIgJXNcbiIsIG5wLT5mdWxs X25hbWUpOw0KKwkJa2ZyZWUoY2xrX2dhdGUpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgX19p bml0IGtpbmV0aXNfbWNnX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCkN Cit7DQorCWNvbnN0IGludCB2Y29fZGl2ID0gMjsNCisJY29uc3QgaW50IHZk aXZfbWluID0gMTY7DQorCXUzMiBjbG9ja192YWxfbWNnb3V0Ow0KKwl1MzIg Y2xvY2tfdmFsX2NjbGs7DQorCXUzMiBjbG9ja192YWxfcGNsazsNCisJdm9p ZCBfX2lvbWVtICpiYXNlOw0KKwl2b2lkIF9faW9tZW0gKnNpbTsNCisJaW50 IHBsbF9zZWw7DQorCWludCBvc2Nfc2VsOw0KKwl1bnNpZ25lZCBsb25nIG1j Z291dDsNCisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsNCisJc3RydWN0 IGRldmljZV9ub2RlICpjbGtfbm9kZXNbS0lORVRJU19DTEtfTlVNXTsNCisJ aW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBLSU5FVElTX0NMS19OVU07 IGkrKykNCisJCWNsa19ub2Rlc1tpXSA9IE5VTEw7DQorDQorCWJhc2UgPSBv Zl9pb21hcChucCwgMCk7DQorCWlmICghYmFzZSkgew0KKwkJcHJfZXJyKCJG YWlsZWQgdG8gbWFwIGFkZHJlc3MgcmFuZ2UgZm9yIGtpbmV0aXMsbWNnIG5v ZGVcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXNpbSA9IG9mX2lvbWFw KG5wLCAxKTsNCisJaWYgKCFzaW0pIHsNCisJCXByX2VycigiRmFpbGVkIHRv IG1hcCBhZGRyZXNzIHJhbmdlIGZvciBraW5ldGlzIFNJTSBtb2R1bGVcbiIp Ow0KKwkJaW91bm1hcChiYXNlKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkv Kg0KKwkgKiBDaGVjayB3aGV0aGVyIFBMTDAgb3IgUExMMSBpcyB1c2VkIGZv ciBNQ0dPVVRDTEsNCisJICovDQorCXBsbF9zZWwgPSAhIShpb3JlYWQ4KEtJ TkVUSVNfTUNHX1BUUihiYXNlLCBjMTEpKSAmDQorCQkJCUtJTkVUSVNfTUNH X0MxMV9QTExDU19NU0spOw0KKw0KKwkvKg0KKwkgKiBDaGVjayB3aGV0aGVy IE9TQzAgb3IgT1NDMSBpcyB1c2VkIHRvIHNvdXJjZSB0aGUgbWFpbiBQTEwN CisJICovDQorCWlmIChwbGxfc2VsKQ0KKwkJb3NjX3NlbCA9ICEhKGlvcmVh ZDgoS0lORVRJU19NQ0dfUFRSKGJhc2UsIGMxMSkpICYNCisJCQkJS0lORVRJ U19NQ0dfQzExX1BMTFJFRlNFTDFfTVNLKTsNCisJZWxzZQ0KKwkJb3NjX3Nl bCA9ICEhKGlvcmVhZDgoS0lORVRJU19NQ0dfUFRSKGJhc2UsIGM1KSkgJg0K KwkJCQlLSU5FVElTX01DR19DNV9QTExSRUZTRUxfTVNLKTsNCisNCisJLyoN CisJICogU3RhcnQgd2l0aCB0aGUgTUNHIGlucHV0IGNsb2NrDQorCSAqLw0K KwltY2dvdXQgPSBvc2Nfc2VsID8gS0lORVRJU19PU0MxX1JBVEUgOiBLSU5F VElTX09TQzBfUkFURTsNCisNCisJLyoNCisJICogQXBwbHkgZGl2aWRlcnMg YW5kIG11bHRpcGxpZXJzIG9mIHRoZSBzZWxlY3RlZCBQTEwNCisJICovDQor CWlmIChwbGxfc2VsKSB7DQorCQkvKg0KKwkJICogUExMMSBpbnRlcm5hbCBk aXZpZGVyIChQUkRJVikNCisJCSAqLw0KKwkJbWNnb3V0IC89ICgoaW9yZWFk OChLSU5FVElTX01DR19QVFIoYmFzZSwgYzExKSkgJg0KKwkJICBLSU5FVElT X01DR19DMTFfUFJESVZfTVNLKSA+PiBLSU5FVElTX01DR19DMTFfUFJESVZf QklUUykgKyAxOw0KKw0KKwkJLyoNCisJCSAqIFBMTDEgbXVsdGlwbGljYXRp b24gZmFjdG9yIChWRElWKQ0KKwkJICovDQorCQltY2dvdXQgKj0gKChpb3Jl YWQ4KEtJTkVUSVNfTUNHX1BUUihiYXNlLCBjMTIpKSAmDQorCQkgIEtJTkVU SVNfTUNHX0MxMl9WRElWMV9NU0spID4+IEtJTkVUSVNfTUNHX0MxMl9WRElW MV9CSVRTKSArDQorCQkJCQkJCQkgICAgdmRpdl9taW47DQorCX0gZWxzZSB7 DQorCQkvKg0KKwkJICogUExMMCBpbnRlcm5hbCBkaXZpZGVyIChQUkRJVikN CisJCSAqLw0KKwkJbWNnb3V0IC89ICgoaW9yZWFkOChLSU5FVElTX01DR19Q VFIoYmFzZSwgYzUpKSAmDQorCQkJS0lORVRJU19NQ0dfQzVfUFJESVZfTVNL KSA+Pg0KKwkJCUtJTkVUSVNfTUNHX0M1X1BSRElWX0JJVFMpICsgMTsNCisN CisJCS8qDQorCQkgKiBQTEwwIG11bHRpcGxpY2F0aW9uIGZhY3RvciAoVkRJ VikNCisJCSAqLw0KKwkJbWNnb3V0ICo9ICgoaW9yZWFkOChLSU5FVElTX01D R19QVFIoYmFzZSwgYzYpKSAmDQorCQkJS0lORVRJU19NQ0dfQzZfVkRJVl9N U0spID4+DQorCQkJS0lORVRJU19NQ0dfQzZfVkRJVl9CSVRTKSArIHZkaXZf bWluOw0KKwl9DQorDQorCS8qDQorCSAqIEFwcGx5IHRoZSBQTEwgb3V0cHV0 IGRpdmlkZXINCisJICovDQorCW1jZ291dCAvPSB2Y29fZGl2Ow0KKw0KKwlj bG9ja192YWxfbWNnb3V0ID0gbWNnb3V0Ow0KKw0KKwljbG9ja192YWxfY2Ns ayA9IG1jZ291dCAvDQorCQkoKChpb3JlYWQzMihLSU5FVElTX1NJTV9QVFIo c2ltLCBjbGtkaXYxKSkgJg0KKwkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VU RElWMV9NU0spID4+DQorCQkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElW MV9CSVRTKSArIDEpOw0KKw0KKwkvKg0KKwkgKiBQZXJpcGhlcmFsIChidXMp IGNsb2NrDQorCSAqLw0KKwljbG9ja192YWxfcGNsayA9IG1jZ291dCAvDQor CQkoKChpb3JlYWQzMihLSU5FVElTX1NJTV9QVFIoc2ltLCBjbGtkaXYxKSkg Jg0KKwkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMl9NU0spID4+DQor CQkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMl9CSVRTKSArIDEpOw0K Kw0KKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgew0KKwkJ aWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGNoaWxkKSkNCisJCQljb250 aW51ZTsNCisNCisJCWZvciAoaSA9IDA7IGkgPCBLSU5FVElTX0NMS19OVU07 IGkrKykgew0KKwkJCWlmICghb2Zfbm9kZV9jbXAoY2hpbGQtPm5hbWUsIGtp bmV0aXNfY2xrc1tpXS5uYW1lKSkgew0KKwkJCQlpZiAoY2xrX25vZGVzW2tp bmV0aXNfY2xrc1tpXS5pZF0pIHsNCisJCQkJCXByX2VycigibW9yZSB0aGFu IG9uZSAlcyBzcGVjaWZpZWRcbiIsDQorCQkJCQkJCQljaGlsZC0+bmFtZSk7 DQorCQkJCQlnb3RvIGZhaWw7DQorCQkJCX0gZWxzZQ0KKwkJCQkJY2xrX25v ZGVzW2tpbmV0aXNfY2xrc1tpXS5pZF0gPSBjaGlsZDsNCisJCQl9DQorCQl9 DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IEtJTkVUSVNfQ0xLX05VTTsg aSsrKSB7DQorCQlpZiAoIShjbGtfbm9kZXNba2luZXRpc19jbGtzW2ldLmlk XSkpIHsNCisJCQlwcl9lcnIoIk9uZSBvZiBvYmxpZ2F0b3J5IGNsb2NrcyBO T1Qgc3BlY2lmaWVkXG4iKTsNCisJCQlnb3RvIGZhaWw7DQorCQl9DQorCX0N CisNCisJaWYgKGtpbmV0aXNfb2ZfcmVnaXN0ZXJfZml4ZWRfcmF0ZV9yb290 KGNsa19ub2Rlc1tLSU5FVElTX0NMS19NQ0dPVVRdLA0KKwkJCQkJCWNsb2Nr X3ZhbF9tY2dvdXQpKQ0KKwkJZ290byBmYWlsOw0KKw0KKwlpZiAoIShraW5l dGlzX29mX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY2xrX25vZGVzW0tJTkVUSVNf Q0xLX0NDTEtdLA0KKwkJCQljbGtfbm9kZXNbS0lORVRJU19DTEtfTUNHT1VU XSwgY2xvY2tfdmFsX2NjbGspKSkNCisJCWtpbmV0aXNfb2ZfcmVnaXN0ZXJf Y2xrX2dhdGUoY2xrX25vZGVzW0tJTkVUSVNfQ0xLX0NDTEtfR0FURV0sDQor CQkJCWNsa19ub2Rlc1tLSU5FVElTX0NMS19DQ0xLXSwgc2ltKTsNCisNCisJ aWYgKCEoa2luZXRpc19vZl9yZWdpc3Rlcl9maXhlZF9yYXRlKGNsa19ub2Rl c1tLSU5FVElTX0NMS19QQ0xLXSwNCisJCQkJY2xrX25vZGVzW0tJTkVUSVNf Q0xLX01DR09VVF0sIGNsb2NrX3ZhbF9wY2xrKSkpDQorCQlraW5ldGlzX29m X3JlZ2lzdGVyX2Nsa19nYXRlKGNsa19ub2Rlc1tLSU5FVElTX0NMS19QQ0xL X0dBVEVdLA0KKwkJCQljbGtfbm9kZXNbS0lORVRJU19DTEtfUENMS10sIHNp bSk7DQorDQorCXJldHVybjsNCisNCitmYWlsOg0KKw0KKwlpb3VubWFwKHNp bSk7DQorCWlvdW5tYXAoYmFzZSk7DQorfQ0KKw0KK0NMS19PRl9ERUNMQVJF KGtpbmV0aXNfbWNnLCAiZnNsLGtpbmV0aXMtY211Iiwga2luZXRpc19tY2df aW5pdCk7DQotLSANCjIuMy42DQoNCg== --98048-1640744698-1435831729=:13210-- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/