Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755083AbbGAQCa (ORCPT ); Wed, 1 Jul 2015 12:02:30 -0400 Received: from fish.king.net.pl ([79.190.246.46]:58098 "EHLO king.net.pl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754970AbbGAQBq (ORCPT ); Wed, 1 Jul 2015 12:01:46 -0400 Date: Wed, 1 Jul 2015 17:57:30 +0200 (CEST) From: Paul Osmialowski X-X-Sender: newchief@localhost.localdomain To: Arnd Bergmann cc: linux-arm-kernel@lists.infradead.org, Paul Osmialowski , 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: <28154735.0HeJqZBqop@wuerfel> 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-21318021-1435766259=:14440" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 28275 Lines: 503 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-21318021-1435766259=:14440 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed 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-21318021-1435766259=:14440 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 RnJvbSAyMmU4OWJkYmVhNjM5ZDhkNGRhYmE1NDg5MjdjNjYxZjM5ZmY0NTUx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogUGF1bCBPc21pYWxv d3NraSA8cGF3ZWxvQGtpbmcubmV0LnBsPg0KRGF0ZTogTW9uLCAyOSBKdW4g MjAxNSAyMDo1ODo1NSArMDIwMA0KU3ViamVjdDogW1BBVENIIDMvOV0gYXJt OiB0d3ItazcwZjEyMG06IGNsb2NrIGRyaXZlciBmb3IgS2luZXRpcyBTb0MN Cg0KQmFzZWQgb24gSzcwUDI1Nk0xNTBTRjNSTS5wZGYgSzcwIFN1Yi1GYW1p bHkgUmVmZXJlbmNlIE1hbnVhbCwgUmV2LiAzLg0KDQpTaWduZWQtb2ZmLWJ5 OiBQYXVsIE9zbWlhbG93c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQotLS0N CiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9raW5ldGlzLWNsb2Nr LnR4dCAgICB8ICA2NSArKysNCiBhcmNoL2FybS9ib290L2R0cy9raW5ldGlz LmR0c2kgICAgICAgICAgICAgICAgICAgICB8ICAyOSArKw0KIGRyaXZlcnMv Y2xrL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsNCiBkcml2ZXJzL2Nsay9jbGsta2luZXRpcy5jICAgICAgICAgICAg ICAgICAgICAgICAgICB8IDQ4NiArKysrKysrKysrKysrKysrKysrKysNCiA0 IGZpbGVzIGNoYW5nZWQsIDU4MSBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1v 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 ay9NYWtlZmlsZSBiL2RyaXZlcnMvY2xrL01ha2VmaWxlDQppbmRleCBiMjQx YzE3Li41ODcxOGVkIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9jbGsvTWFrZWZp bGUNCisrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxlDQpAQCAtMjQsNiArMjQs NyBAQCBvYmotJChDT05GSUdfQ09NTU9OX0NMS19DRENFNzA2KQkrPSBjbGst Y2RjZTcwNi5vDQogb2JqLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpCQkrPSBj bGstY2xwczcxMXgubw0KIG9iai0kKENPTkZJR19BUkNIX0VGTTMyKQkJKz0g Y2xrLWVmbTMyZ2cubw0KIG9iai0kKENPTkZJR19BUkNIX0hJR0hCQU5LKQkJ Kz0gY2xrLWhpZ2hiYW5rLm8NCitvYmotJChDT05GSUdfQVJDSF9LSU5FVElT KQkJKz0gY2xrLWtpbmV0aXMubw0KIG9iai0kKENPTkZJR19NQUNIX0xPT05H U09OMzIpCQkrPSBjbGstbHMxeC5vDQogb2JqLSQoQ09ORklHX0NPTU1PTl9D TEtfTUFYX0dFTikJKz0gY2xrLW1heC1nZW4ubw0KIG9iai0kKENPTkZJR19D T01NT05fQ0xLX01BWDc3Njg2KQkrPSBjbGstbWF4Nzc2ODYubw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1raW5ldGlzLmMgYi9kcml2ZXJzL2Ns ay9jbGsta2luZXRpcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uZDhiNWU3ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9jbGsvY2xrLWtpbmV0aXMuYw0KQEAgLTAsMCArMSw0ODYgQEANCisvKg0K KyAqIGNsay1raW5ldGlzLmMgLSBDbG9jayBkcml2ZXIgZm9yIEtpbmV0aXMg SzcwIE1DRw0KKyAqDQorICogQmFzZWQgb24gbGVnYWN5IHByZS1PRiBjb2Rl IGJ5IEFsZXhhbmRlciBQb3Rhc2hldiA8YXNwb3Rhc2hldkBlbWNyYWZ0LmNv bT4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNSBQYXVsIE9zbWlhbG93 c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQorICoNCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAqIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxp c2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQor ICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQorI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNs dWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3Zp ZGVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1ZGUgPGxp bnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+DQorDQorZW51bSB7DQorCUtJTkVUSVNfQ0xLX01DR09VVCA9IDAsDQor CUtJTkVUSVNfQ0xLX0NDTEssDQorCUtJTkVUSVNfQ0xLX1BDTEssDQorCUtJ TkVUSVNfQ0xLX0NDTEtfR0FURSwNCisJS0lORVRJU19DTEtfUENMS19HQVRF LA0KKwlLSU5FVElTX0NMS19OVU0NCit9Ow0KKw0KKy8qDQorICogRnJlcXVl bmNpZXMgb24gT1NDMCAoRVhUQUwwL1hUQUwwKSBhbmQgT1NDMSAoRVhUQUwx L1hUQUwxKQ0KKyAqDQorICogVGhlc2UgZnJlcXVlbmNpZXMgc2hvdWxkIGJl IHNldCB0byB0aGUgc2FtZSB2YWx1ZXMgYXMgaW4gVS1Cb290Lg0KKyAqLw0K KyNkZWZpbmUgS0lORVRJU19PU0MwX1JBVEUJNTAwMDAwMDAJLyogNTAgTUh6 ICovDQorI2RlZmluZSBLSU5FVElTX09TQzFfUkFURQkxMjAwMDAwMAkvKiAx MiBNSHogKi8NCisNCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NHX05VTVJFR1MJ Nw0KKw0KKy8qDQorICogU3lzdGVtIEludGVncmF0aW9uIE1vZHVsZSAoU0lN KSByZWdpc3RlciBtYXANCisgKg0KKyAqIFRoaXMgbWFwIGFjdHVhbGx5IGNv dmVycyB0d28gaGFyZHdhcmUgbW9kdWxlczoNCisgKiAgICAgMS4gU0lNIGxv dy1wb3dlciBsb2dpYywgYXQgMHg0MDA0NzAwMA0KKyAqICAgICAyLiBTeXN0 ZW0gaW50ZWdyYXRpb24gbW9kdWxlIChTSU0pLCBhdCAweDQwMDQ4MDAwDQor ICovDQorc3RydWN0IGtpbmV0aXNfc2ltX3JlZ3Mgew0KKwl1MzIgc29wdDE7 CS8qIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDEgKi8NCisJdTMyIHJzdjBb MTAyNF07DQorCXUzMiBzb3B0MjsJLyogU3lzdGVtIE9wdGlvbnMgUmVnaXN0 ZXIgMiAqLw0KKwl1MzIgcnN2MTsNCisJdTMyIHNvcHQ0OwkvKiBTeXN0ZW0g T3B0aW9ucyBSZWdpc3RlciA0ICovDQorCXUzMiBzb3B0NTsJLyogU3lzdGVt IE9wdGlvbnMgUmVnaXN0ZXIgNSAqLw0KKwl1MzIgc29wdDY7CS8qIFN5c3Rl bSBPcHRpb25zIFJlZ2lzdGVyIDYgKi8NCisJdTMyIHNvcHQ3OwkvKiBTeXN0 ZW0gT3B0aW9ucyBSZWdpc3RlciA3ICovDQorCXUzMiByc3YyWzJdOw0KKwl1 MzIgc2RpZDsJLyogU3lzdGVtIERldmljZSBJZGVudGlmaWNhdGlvbiBSZWdp c3RlciAqLw0KKwl1MzIgc2NnY1tLSU5FVElTX1NJTV9DR19OVU1SRUdTXTsJ LyogQ2xvY2sgR2F0aW5nIFJlZ3MgMS4uLjcgKi8NCisJdTMyIGNsa2RpdjE7 CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDEgKi8NCisJdTMy IGNsa2RpdjI7CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDIg Ki8NCisJdTMyIGZjZmcxOwkvKiBGbGFzaCBDb25maWd1cmF0aW9uIFJlZ2lz dGVyIDEgKi8NCisJdTMyIGZjZmcyOwkvKiBGbGFzaCBDb25maWd1cmF0aW9u IFJlZ2lzdGVyIDIgKi8NCisJdTMyIHVpZGg7CS8qIFVuaXF1ZSBJZGVudGlm aWNhdGlvbiBSZWdpc3RlciBIaWdoICovDQorCXUzMiB1aWRtaDsJLyogVW5p cXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1pZC1IaWdoICovDQorCXUz MiB1aWRtbDsJLyogVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1p ZCBMb3cgKi8NCisJdTMyIHVpZGw7CS8qIFVuaXF1ZSBJZGVudGlmaWNhdGlv biBSZWdpc3RlciBMb3cgKi8NCisJdTMyIGNsa2RpdjM7CS8qIFN5c3RlbSBD bG9jayBEaXZpZGVyIFJlZ2lzdGVyIDMgKi8NCisJdTMyIGNsa2RpdjQ7CS8q IFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDQgKi8NCisJdTMyIG1j cjsJLyogTWlzYyBDb250cm9sIFJlZ2lzdGVyICovDQorfTsNCisjZGVmaW5l IEtJTkVUSVNfU0lNX1BUUihiYXNlLCByZWcpIFwNCisJKCYoKChzdHJ1Y3Qg a2luZXRpc19zaW1fcmVncyAqKShiYXNlKSktPnJlZykpDQorDQorLyoNCisg KiBTeXN0ZW0gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAxDQorICovDQorLyog Q2xvY2sgMSBvdXRwdXQgZGl2aWRlciB2YWx1ZSAoZm9yIHRoZSBjb3JlL3N5 c3RlbSBjbG9jaykgKi8NCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjFf T1VURElWMV9CSVRTCTI4DQorI2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYx X09VVERJVjFfTVNLIFwNCisJKCgoMSA8PCA0KSAtIDEpIDw8IEtJTkVUSVNf U0lNX0NMS0RJVjFfT1VURElWMV9CSVRTKQ0KKy8qIENsb2NrIDIgb3V0cHV0 IGRpdmlkZXIgdmFsdWUgKGZvciB0aGUgcGVyaXBoZXJhbCBjbG9jaykgKi8N CisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMl9CSVRTCTI0 DQorI2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYxX09VVERJVjJfTVNLIFwN CisJKCgoMSA8PCA0KSAtIDEpIDw8IEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VU RElWMl9CSVRTKQ0KKw0KKy8qDQorICogU3lzdGVtIENsb2NrIERpdmlkZXIg UmVnaXN0ZXIgMg0KKyAqLw0KKy8qIFVTQiBIUyBjbG9jayBkaXZpZGVyIGZy YWN0aW9uICovDQorI2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYyX1VTQkhT RlJBQ19CSVQJOA0KKyNkZWZpbmUgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JI U0ZSQUNfTVNLIFwNCisJKDEgPDwgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JI U0ZSQUNfQklUKQ0KKy8qIFVTQiBIUyBjbG9jayBkaXZpZGVyIGRpdmlzb3Ig Ki8NCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjJfVVNCSFNESVZfQklU CTkNCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjJfVVNCSFNESVZfTVNL IFwNCisJKDcgPDwgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JIU0RJVl9CSVQp DQorDQorLyoNCisgKiBNQ0cgQ29udHJvbCA1IFJlZ2lzdGVyDQorICovDQor LyogUExMIEV4dGVybmFsIFJlZmVyZW5jZSBEaXZpZGVyICovDQorI2RlZmlu ZSBLSU5FVElTX01DR19DNV9QUkRJVl9CSVRTCTANCisjZGVmaW5lIEtJTkVU SVNfTUNHX0M1X1BSRElWX01TSyBcDQorCSgoKDEgPDwgMykgLSAxKSA8PCBL SU5FVElTX01DR19DNV9QUkRJVl9CSVRTKQ0KKy8qIFBMTCBTdG9wIEVuYWJs ZSAqLw0KKyNkZWZpbmUgS0lORVRJU19NQ0dfQzVfUExMU1RFTl9NU0sJKDEg PDwgNSkNCisvKiBQTEwgQ2xvY2sgRW5hYmxlICovDQorI2RlZmluZSBLSU5F VElTX01DR19DNV9QTExDTEtFTl9NU0sJKDEgPDwgNikNCisvKiBQTEwgRXh0 ZXJuYWwgUmVmZXJlbmNlIFNlbGVjdCAoZm9yIEs3MEAxMjBNSHopICovDQor I2RlZmluZSBLSU5FVElTX01DR19DNV9QTExSRUZTRUxfQklUCTcNCisjZGVm aW5lIEtJTkVUSVNfTUNHX0M1X1BMTFJFRlNFTF9NU0sJKDEgPDwgS0lORVRJ U19NQ0dfQzVfUExMUkVGU0VMX0JJVCkNCisvKg0KKyAqIE1DRyBDb250cm9s IDYgUmVnaXN0ZXINCisgKi8NCisvKiBWQ08gRGl2aWRlciAqLw0KKyNkZWZp bmUgS0lORVRJU19NQ0dfQzZfVkRJVl9CSVRTCTANCisjZGVmaW5lIEtJTkVU SVNfTUNHX0M2X1ZESVZfTVNLIFwNCisJKCgoMSA8PCA1KSAtIDEpIDw8IEtJ TkVUSVNfTUNHX0M2X1ZESVZfQklUUykNCisvKiBQTEwgU2VsZWN0ICovDQor I2RlZmluZSBLSU5FVElTX01DR19DNl9QTExTX01TSwkJKDEgPDwgNikNCisv Kg0KKyAqIE1DRyBDb250cm9sIDExIFJlZ2lzdGVyDQorICovDQorLyogUExM MSBFeHRlcm5hbCBSZWZlcmVuY2UgRGl2aWRlciAqLw0KKyNkZWZpbmUgS0lO RVRJU19NQ0dfQzExX1BSRElWX0JJVFMJMA0KKyNkZWZpbmUgS0lORVRJU19N Q0dfQzExX1BSRElWX01TSyBcDQorCSgoKDEgPDwgMykgLSAxKSA8PCBLSU5F VElTX01DR19DMTFfUFJESVZfQklUUykNCisvKiBQTEwgQ2xvY2sgU2VsZWN0 OiBQTEwwIG9yIFBMTDEgKi8NCisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMV9Q TExDU19NU0sJKDEgPDwgNCkNCisvKiBQTEwxIFN0b3AgRW5hYmxlICovDQor I2RlZmluZSBLSU5FVElTX01DR19DMTFfUExMU1RFTjFfTVNLCSgxIDw8IDUp DQorLyogUExMMSBDbG9jayBFbmFibGUgKi8NCisjZGVmaW5lIEtJTkVUSVNf TUNHX0MxMV9QTExDTEtFTjFfTVNLCSgxIDw8IDYpDQorLyogUExMMSBFeHRl cm5hbCBSZWZlcmVuY2UgU2VsZWN0IChmb3IgSzcwQDEyME1IeikgKi8NCisj ZGVmaW5lIEtJTkVUSVNfTUNHX0MxMV9QTExSRUZTRUwxX0JJVAk3DQorI2Rl ZmluZSBLSU5FVElTX01DR19DMTFfUExMUkVGU0VMMV9NU0sJKDEgPDwgS0lO RVRJU19NQ0dfQzExX1BMTFJFRlNFTDFfQklUKQ0KKy8qDQorICogTUNHIENv bnRyb2wgMTIgUmVnaXN0ZXINCisgKi8NCisvKiBWQ08xIERpdmlkZXIgKi8N CisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMl9WRElWMV9CSVRTCTANCisjZGVm aW5lIEtJTkVUSVNfTUNHX0MxMl9WRElWMV9NU0sgXA0KKwkoKCgxIDw8IDUp IC0gMSkgPDwgS0lORVRJU19NQ0dfQzEyX1ZESVYxX0JJVFMpDQorDQorLyoN CisgKiBNdWx0aXB1cnBvc2UgQ2xvY2sgR2VuZXJhdG9yIChNQ0cpIHJlZ2lz dGVyIG1hcA0KKyAqDQorICogU2VlIENoYXB0ZXIgMjUgb2YgdGhlIEs3MCBS ZWZlcmVuY2UgTWFudWFsDQorICovDQorc3RydWN0IGtpbmV0aXNfbWNnX3Jl Z3Mgew0KKwl1OCBjMTsJCS8qIE1DRyBDb250cm9sIDEgUmVnaXN0ZXIgKi8N CisJdTggYzI7CQkvKiBNQ0cgQ29udHJvbCAyIFJlZ2lzdGVyICovDQorCXU4 IGMzOwkJLyogTUNHIENvbnRyb2wgMyBSZWdpc3RlciAqLw0KKwl1OCBjNDsJ CS8qIE1DRyBDb250cm9sIDQgUmVnaXN0ZXIgKi8NCisJdTggYzU7CQkvKiBN Q0cgQ29udHJvbCA1IFJlZ2lzdGVyICovDQorCXU4IGM2OwkJLyogTUNHIENv bnRyb2wgNiBSZWdpc3RlciAqLw0KKwl1OCBzdGF0dXM7CS8qIE1DRyBTdGF0 dXMgUmVnaXN0ZXIgKi8NCisJdTggcnN2MDsNCisJdTggYXRjOwkJLyogTUNH IEF1dG8gVHJpbSBDb250cm9sIFJlZ2lzdGVyICovDQorCXU4IHJzdjE7DQor CXU4IGF0Y3ZoOwkvKiBNQ0cgQXV0byBUcmltIENvbXBhcmUgVmFsdWUgSGln aCBSZWdpc3RlciAqLw0KKwl1OCBhdGN2bDsJLyogTUNHIEF1dG8gVHJpbSBD b21wYXJlIFZhbHVlIExvdyBSZWdpc3RlciAqLw0KKwl1OCBjNzsJCS8qIE1D RyBDb250cm9sIDcgUmVnaXN0ZXIgKi8NCisJdTggYzg7CQkvKiBNQ0cgQ29u dHJvbCA4IFJlZ2lzdGVyICovDQorCXU4IHJzdjI7DQorCXU4IGMxMDsJCS8q IE1DRyBDb250cm9sIDEwIFJlZ2lzdGVyICovDQorCXU4IGMxMTsJCS8qIE1D RyBDb250cm9sIDExIFJlZ2lzdGVyICovDQorCXU4IGMxMjsJCS8qIE1DRyBD b250cm9sIDEyIFJlZ2lzdGVyICovDQorCXU4IHN0YXR1czI7CS8qIE1DRyBT dGF0dXMgMiBSZWdpc3RlciAqLw0KKwl1OCByc3YzOw0KK307DQorI2RlZmlu ZSBLSU5FVElTX01DR19QVFIoYmFzZSwgcmVnKSBcDQorCSgmKCgoc3RydWN0 IGtpbmV0aXNfbWNnX3JlZ3MgKikoYmFzZSkpLT5yZWcpKQ0KKw0KK3N0cnVj dCBraW5ldGlzX2Nsa19nYXRlIHsNCisJY29uc3QgY2hhciAqY2xrX2dhdGVf bmFtZTsNCisJc3RydWN0IGNsayAqY2xrOw0KKwl1MzIgcmVnOw0KKwl1MzIg aWR4Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsa19saXN0Ow0KK307DQorDQor c3RydWN0IGtpbmV0aXNfY2xrX2dhdGVfZGF0YSB7DQorCWNvbnN0IGNoYXIg KmNsa19wYXJlbnRfbmFtZTsNCisJdm9pZCBfX2lvbWVtICpzaW07DQorCXN0 cnVjdCBsaXN0X2hlYWQgY2xrX2dhdGVfbGlzdDsNCit9Ow0KKw0KK3N0YXRp YyBzdHJ1Y3QgY2xrICpraW5ldGlzX2ZpbmRfY2xrX2dhdGUoDQorCQlzdHJ1 Y3Qga2luZXRpc19jbGtfZ2F0ZV9kYXRhICpjbGtfZ2F0ZV9kYXRhLCB1MzIg cmVnLCB1MzIgaWR4KQ0KK3sNCisJc3RydWN0IGtpbmV0aXNfY2xrX2dhdGUg KmdhdGU7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2F0ZSwgJmNsa19n YXRlX2RhdGEtPmNsa19nYXRlX2xpc3QsIGNsa19saXN0KQ0KKwkJaWYgKChn YXRlLT5yZWcgPT0gcmVnKSAmJiAoZ2F0ZS0+aWR4ID09IGlkeCkpDQorCQkJ cmV0dXJuIGdhdGUtPmNsazsNCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0K K3N0YXRpYyBzdHJ1Y3QgY2xrICpraW5ldGlzX2Nsa19nYXRlX2dldChzdHJ1 Y3Qgb2ZfcGhhbmRsZV9hcmdzICpjbGtzcGVjLA0KKwkJCQkJdm9pZCAqZGF0 YSkNCit7DQorCXN0cnVjdCBraW5ldGlzX2Nsa19nYXRlX2RhdGEgKmNsa19n YXRlX2RhdGEgPSBkYXRhOw0KKwlzdHJ1Y3Qga2luZXRpc19jbGtfZ2F0ZSAq Z2F0ZTsNCisJdTMyIHJlZyA9IGNsa3NwZWMtPmFyZ3NbMF07DQorCXUzMiBp ZHggPSBjbGtzcGVjLT5hcmdzWzFdOw0KKwlzdHJ1Y3QgY2xrICpjbGs7DQor DQorCWNsayA9IGtpbmV0aXNfZmluZF9jbGtfZ2F0ZShjbGtfZ2F0ZV9kYXRh LCByZWcsIGlkeCk7DQorCWlmIChjbGspDQorCQlyZXR1cm4gY2xrOw0KKw0K KwlnYXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtpbmV0aXNfY2xrX2dh dGUpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFnYXRlKQ0KKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7DQorCWdhdGUtPmNsa19nYXRlX25hbWUgPSBrYXNw cmludGYoR0ZQX0tFUk5FTCwgIiVzOiV1OiV1IiwNCisJCQkJY2xrc3BlYy0+ bnAtPmZ1bGxfbmFtZSwgcmVnLCBpZHgpOw0KKw0KKwljbGsgPSBjbGtfcmVn aXN0ZXJfZ2F0ZShOVUxMLCBnYXRlLT5jbGtfZ2F0ZV9uYW1lLA0KKwkJCQlj bGtfZ2F0ZV9kYXRhLT5jbGtfcGFyZW50X25hbWUsIDAsDQorCQkJCUtJTkVU SVNfU0lNX1BUUihjbGtfZ2F0ZV9kYXRhLT5zaW0sIHNjZ2NbcmVnXSksDQor CQkJCWlkeCwgMCwgTlVMTCk7DQorCWlmIChJU19FUlIoY2xrKSkgew0KKwkJ cHJfZXJyKCJDYW5ub3QgcmVnaXN0ZXIgZ2F0ZSB0byBjbG9jayAlc1xuIiwN CisJCQkJY2xrX2dhdGVfZGF0YS0+Y2xrX3BhcmVudF9uYW1lKTsNCisJCWtm cmVlX2NvbnN0KGdhdGUtPmNsa19nYXRlX25hbWUpOw0KKwkJa2ZyZWUoZ2F0 ZSk7DQorCQlyZXR1cm4gY2xrOw0KKwl9DQorDQorCWdhdGUtPmNsayA9IGNs azsNCisJZ2F0ZS0+cmVnID0gcmVnOw0KKwlnYXRlLT5pZHggPSBpZHg7DQor DQorCWxpc3RfYWRkKCZnYXRlLT5jbGtfbGlzdCwgJmNsa19nYXRlX2RhdGEt PmNsa19nYXRlX2xpc3QpOw0KKw0KKwlyZXR1cm4gY2xrOw0KK30NCisNCitz dGF0aWMgaW50IGtpbmV0aXNfb2ZfcmVnaXN0ZXJfZml4ZWRfcmF0ZV9yb290 KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQorCQkJCQkJCXUzMiBjbG9ja192 YWwpDQorew0KKwlzdHJ1Y3QgY2xrICpjbGs7DQorCWludCByZXQ7DQorDQor CWNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKE5VTEwsIG5wLT5mdWxs X25hbWUsIE5VTEwsIENMS19JU19ST09ULA0KKwkJCQkJCQkJICAgIGNsb2Nr X3ZhbCk7DQorCWlmIChJU19FUlIoY2xrKSkgew0KKwkJcHJfZXJyKCJDb3Vs ZCBub3QgcmVnaXN0ZXIgY2xvY2sgJXNcbiIsIG5wLT5mdWxsX25hbWUpOw0K KwkJcmV0dXJuIFBUUl9FUlIoY2xrKTsNCisJfQ0KKw0KKwlyZXQgPSBvZl9j bGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsIGNs ayk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlwcl9lcnIoIkNvdWxkIG5vdCBh ZGQgY2xvY2sgcHJvdmlkZXIgJXNcbiIsIG5wLT5mdWxsX25hbWUpOw0KKwkJ Y2xrX3VucmVnaXN0ZXIoY2xrKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQga2luZXRpc19vZl9y ZWdpc3Rlcl9maXhlZF9yYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsDQor CQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudF9jbGssDQorCQkJCQl1 MzIgY2xvY2tfdmFsKQ0KK3sNCisJc3RydWN0IGNsayAqY2xrOw0KKwlpbnQg cmV0Ow0KKw0KKwljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShOVUxM LCBucC0+ZnVsbF9uYW1lLA0KKwkJCQkJcGFyZW50X2Nsay0+ZnVsbF9uYW1l LCAwLCBjbG9ja192YWwpOw0KKwlpZiAoSVNfRVJSKGNsaykpIHsNCisJCXBy X2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGNsb2NrICVzXG4iLCBucC0+ZnVs bF9uYW1lKTsNCisJCXJldHVybiBQVFJfRVJSKGNsayk7DQorCX0NCisNCisJ cmV0ID0gb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1w bGVfZ2V0LCBjbGspOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJcHJfZXJyKCJD b3VsZCBub3QgYWRkIGNsb2NrIHByb3ZpZGVyICVzXG4iLCBucC0+ZnVsbF9u YW1lKTsNCisJCWNsa191bnJlZ2lzdGVyKGNsayk7DQorCQlyZXR1cm4gcmV0 Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGtp bmV0aXNfb2ZfcmVnaXN0ZXJfY2xrX2dhdGUoc3RydWN0IGRldmljZV9ub2Rl ICpucCwNCisJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50X2NsaywN CisJCQkJCXZvaWQgX19pb21lbSAqc2ltKQ0KK3sNCisJc3RydWN0IGtpbmV0 aXNfY2xrX2dhdGVfZGF0YSAqY2xrX2dhdGU7DQorCWludCByZXQ7DQorDQor CWNsa19nYXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtpbmV0aXNfY2xr X2dhdGVfZGF0YSksIEdGUF9LRVJORUwpOw0KKwlpZiAoIWNsa19nYXRlKQ0K KwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWNsa19nYXRlLT5jbGtfcGFyZW50 X25hbWUgPSBwYXJlbnRfY2xrLT5mdWxsX25hbWU7DQorCWNsa19nYXRlLT5z aW0gPSBzaW07DQorCUlOSVRfTElTVF9IRUFEKCZjbGtfZ2F0ZS0+Y2xrX2dh dGVfbGlzdCk7DQorDQorCXJldCA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobnAs IGtpbmV0aXNfY2xrX2dhdGVfZ2V0LCBjbGtfZ2F0ZSk7DQorCWlmIChyZXQg PCAwKSB7DQorCQlwcl9lcnIoIkNvdWxkIG5vdCBhZGQgY2xvY2sgcHJvdmlk ZXIgJXNcbiIsIG5wLT5mdWxsX25hbWUpOw0KKwkJa2ZyZWUoY2xrX2dhdGUp Ow0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIHZvaWQgX19pbml0IGtpbmV0aXNfbWNnX2luaXQoc3RydWN0 IGRldmljZV9ub2RlICpucCkNCit7DQorCWNvbnN0IGludCB2Y29fZGl2ID0g MjsNCisJY29uc3QgaW50IHZkaXZfbWluID0gMTY7DQorCXUzMiBjbG9ja192 YWxfbWNnb3V0Ow0KKwl1MzIgY2xvY2tfdmFsX2NjbGs7DQorCXUzMiBjbG9j a192YWxfcGNsazsNCisJdm9pZCBfX2lvbWVtICpiYXNlOw0KKwl2b2lkIF9f aW9tZW0gKnNpbTsNCisJaW50IHBsbF9zZWw7DQorCWludCBvc2Nfc2VsOw0K Kwl1bnNpZ25lZCBsb25nIG1jZ291dDsNCisJc3RydWN0IGRldmljZV9ub2Rl ICpjaGlsZDsNCisJc3RydWN0IGRldmljZV9ub2RlICpjbGtfbm9kZXNbS0lO RVRJU19DTEtfTlVNXTsNCisJaW50IGk7DQorCWJvb2wgb2s7DQorDQorCWZv ciAoaSA9IDA7IGkgPCBLSU5FVElTX0NMS19OVU07IGkrKykNCisJCWNsa19u b2Rlc1tpXSA9IE5VTEw7DQorDQorCWJhc2UgPSBvZl9pb21hcChucCwgMCk7 DQorCWlmICghYmFzZSkgew0KKwkJcHJfZXJyKCJGYWlsZWQgdG8gbWFwIGFk ZHJlc3MgcmFuZ2UgZm9yIGtpbmV0aXMsbWNnIG5vZGVcbiIpOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCXNpbSA9IG9mX2lvbWFwKG5wLCAxKTsNCisJaWYg KCFzaW0pIHsNCisJCXByX2VycigiRmFpbGVkIHRvIG1hcCBhZGRyZXNzIHJh bmdlIGZvciBraW5ldGlzIFNJTSBtb2R1bGVcbiIpOw0KKwkJaW91bm1hcChi YXNlKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkvKg0KKwkgKiBDaGVjayB3 aGV0aGVyIFBMTDAgb3IgUExMMSBpcyB1c2VkIGZvciBNQ0dPVVRDTEsNCisJ ICovDQorCXBsbF9zZWwgPSAhIShpb3JlYWQ4KEtJTkVUSVNfTUNHX1BUUihi YXNlLCBjMTEpKSAmDQorCQkJCUtJTkVUSVNfTUNHX0MxMV9QTExDU19NU0sp Ow0KKw0KKwkvKg0KKwkgKiBDaGVjayB3aGV0aGVyIE9TQzAgb3IgT1NDMSBp cyB1c2VkIHRvIHNvdXJjZSB0aGUgbWFpbiBQTEwNCisJICovDQorCWlmIChw bGxfc2VsKQ0KKwkJb3NjX3NlbCA9ICEhKGlvcmVhZDgoS0lORVRJU19NQ0df UFRSKGJhc2UsIGMxMSkpICYNCisJCQkJS0lORVRJU19NQ0dfQzExX1BMTFJF RlNFTDFfTVNLKTsNCisJZWxzZQ0KKwkJb3NjX3NlbCA9ICEhKGlvcmVhZDgo S0lORVRJU19NQ0dfUFRSKGJhc2UsIGM1KSkgJg0KKwkJCQlLSU5FVElTX01D R19DNV9QTExSRUZTRUxfTVNLKTsNCisNCisJLyoNCisJICogU3RhcnQgd2l0 aCB0aGUgTUNHIGlucHV0IGNsb2NrDQorCSAqLw0KKwltY2dvdXQgPSBvc2Nf c2VsID8gS0lORVRJU19PU0MxX1JBVEUgOiBLSU5FVElTX09TQzBfUkFURTsN CisNCisJLyoNCisJICogQXBwbHkgZGl2aWRlcnMgYW5kIG11bHRpcGxpZXJz IG9mIHRoZSBzZWxlY3RlZCBQTEwNCisJICovDQorCWlmIChwbGxfc2VsKSB7 DQorCQkvKg0KKwkJICogUExMMSBpbnRlcm5hbCBkaXZpZGVyIChQUkRJVikN CisJCSAqLw0KKwkJbWNnb3V0IC89ICgoaW9yZWFkOChLSU5FVElTX01DR19Q VFIoYmFzZSwgYzExKSkgJg0KKwkJICBLSU5FVElTX01DR19DMTFfUFJESVZf TVNLKSA+PiBLSU5FVElTX01DR19DMTFfUFJESVZfQklUUykgKyAxOw0KKw0K KwkJLyoNCisJCSAqIFBMTDEgbXVsdGlwbGljYXRpb24gZmFjdG9yIChWRElW KQ0KKwkJICovDQorCQltY2dvdXQgKj0gKChpb3JlYWQ4KEtJTkVUSVNfTUNH X1BUUihiYXNlLCBjMTIpKSAmDQorCQkgIEtJTkVUSVNfTUNHX0MxMl9WRElW MV9NU0spID4+IEtJTkVUSVNfTUNHX0MxMl9WRElWMV9CSVRTKSArDQorCQkJ CQkJCQkgICAgdmRpdl9taW47DQorCX0gZWxzZSB7DQorCQkvKg0KKwkJICog UExMMCBpbnRlcm5hbCBkaXZpZGVyIChQUkRJVikNCisJCSAqLw0KKwkJbWNn b3V0IC89ICgoaW9yZWFkOChLSU5FVElTX01DR19QVFIoYmFzZSwgYzUpKSAm DQorCQkJS0lORVRJU19NQ0dfQzVfUFJESVZfTVNLKSA+Pg0KKwkJCUtJTkVU SVNfTUNHX0M1X1BSRElWX0JJVFMpICsgMTsNCisNCisJCS8qDQorCQkgKiBQ TEwwIG11bHRpcGxpY2F0aW9uIGZhY3RvciAoVkRJVikNCisJCSAqLw0KKwkJ bWNnb3V0ICo9ICgoaW9yZWFkOChLSU5FVElTX01DR19QVFIoYmFzZSwgYzYp KSAmDQorCQkJS0lORVRJU19NQ0dfQzZfVkRJVl9NU0spID4+DQorCQkJS0lO RVRJU19NQ0dfQzZfVkRJVl9CSVRTKSArIHZkaXZfbWluOw0KKwl9DQorDQor CS8qDQorCSAqIEFwcGx5IHRoZSBQTEwgb3V0cHV0IGRpdmlkZXINCisJICov DQorCW1jZ291dCAvPSB2Y29fZGl2Ow0KKw0KKwljbG9ja192YWxfbWNnb3V0 ID0gbWNnb3V0Ow0KKw0KKwljbG9ja192YWxfY2NsayA9IG1jZ291dCAvDQor CQkoKChpb3JlYWQzMihLSU5FVElTX1NJTV9QVFIoc2ltLCBjbGtkaXYxKSkg Jg0KKwkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMV9NU0spID4+DQor CQkJCUtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMV9CSVRTKSArIDEpOw0K Kw0KKwkvKg0KKwkgKiBQZXJpcGhlcmFsIChidXMpIGNsb2NrDQorCSAqLw0K KwljbG9ja192YWxfcGNsayA9IG1jZ291dCAvDQorCQkoKChpb3JlYWQzMihL SU5FVElTX1NJTV9QVFIoc2ltLCBjbGtkaXYxKSkgJg0KKwkJCUtJTkVUSVNf U0lNX0NMS0RJVjFfT1VURElWMl9NU0spID4+DQorCQkJCUtJTkVUSVNfU0lN X0NMS0RJVjFfT1VURElWMl9CSVRTKSArIDEpOw0KKw0KKwlmb3JfZWFjaF9j aGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgew0KKwkJaWYgKCFvZl9kZXZpY2Vf aXNfYXZhaWxhYmxlKGNoaWxkKSkNCisJCQljb250aW51ZTsNCisNCisJCW9r ID0gdHJ1ZTsNCisNCisJCWlmICghb2Zfbm9kZV9jbXAoY2hpbGQtPm5hbWUs ICJmaXhlZC1yYXRlLW1jZ291dCIpKSB7DQorCQkJaWYgKGNsa19ub2Rlc1tL SU5FVElTX0NMS19NQ0dPVVRdKQ0KKwkJCQlvayA9IGZhbHNlOw0KKwkJCWVs c2UNCisJCQkJY2xrX25vZGVzW0tJTkVUSVNfQ0xLX01DR09VVF0gPSBjaGls ZDsNCisJCX0gZWxzZSBpZiAoIW9mX25vZGVfY21wKGNoaWxkLT5uYW1lLCAi Zml4ZWQtcmF0ZS1jY2xrIikpIHsNCisJCQlpZiAoY2xrX25vZGVzW0tJTkVU SVNfQ0xLX0NDTEtdKQ0KKwkJCQlvayA9IGZhbHNlOw0KKwkJCWVsc2UNCisJ CQkJY2xrX25vZGVzW0tJTkVUSVNfQ0xLX0NDTEtdID0gY2hpbGQ7DQorCQl9 IGVsc2UgaWYgKCFvZl9ub2RlX2NtcChjaGlsZC0+bmFtZSwgImZpeGVkLXJh dGUtcGNsayIpKSB7DQorCQkJaWYgKGNsa19ub2Rlc1tLSU5FVElTX0NMS19Q Q0xLXSkNCisJCQkJb2sgPSBmYWxzZTsNCisJCQllbHNlDQorCQkJCWNsa19u b2Rlc1tLSU5FVElTX0NMS19QQ0xLXSA9IGNoaWxkOw0KKwkJfSBlbHNlIGlm ICghb2Zfbm9kZV9jbXAoY2hpbGQtPm5hbWUsICJjY2xrLWdhdGUiKSkgew0K KwkJCWlmIChjbGtfbm9kZXNbS0lORVRJU19DTEtfQ0NMS19HQVRFXSkNCisJ CQkJb2sgPSBmYWxzZTsNCisJCQllbHNlDQorCQkJCWNsa19ub2Rlc1tLSU5F VElTX0NMS19DQ0xLX0dBVEVdID0gY2hpbGQ7DQorCQl9IGVsc2UgaWYgKCFv Zl9ub2RlX2NtcChjaGlsZC0+bmFtZSwgInBjbGstZ2F0ZSIpKSB7DQorCQkJ aWYgKGNsa19ub2Rlc1tLSU5FVElTX0NMS19QQ0xLX0dBVEVdKQ0KKwkJCQlv ayA9IGZhbHNlOw0KKwkJCWVsc2UNCisJCQkJY2xrX25vZGVzW0tJTkVUSVNf Q0xLX1BDTEtfR0FURV0gPSBjaGlsZDsNCisJCX0gZWxzZSB7DQorCQkJcHJf ZXJyKCJ1bmtub3duIGNsb2NrICVzIHNwZWNpZmllZFxuIiwgY2hpbGQtPm5h bWUpOw0KKwkJCXJldHVybjsNCisJCX0NCisNCisJCWlmICghb2spIHsNCisJ CQlwcl9lcnIoIm1vcmUgdGhhbiBvbmUgJXMgc3BlY2lmaWVkXG4iLCBjaGls ZC0+bmFtZSk7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwl9DQorDQorCWZvciAo aSA9IDA7IGkgPCBLSU5FVElTX0NMS19OVU07IGkrKykgew0KKwkJaWYgKCEo Y2xrX25vZGVzW2ldKSkgew0KKwkJCXByX2VycigiT25lIG9mOiBmaXhlZC1y YXRlLW1jZ291dCwgZml4ZWQtcmF0ZS1jY2xrLCAiDQorCQkJCSJmaXhlZC1y YXRlLXBjbGssIGNjbGstZ2F0ZSwgcGNsay1nYXRlICINCisJCQkJIk5PVCBz cGVjaWZpZWRcbiIpOw0KKwkJCXJldHVybjsNCisJCX0NCisJfQ0KKw0KKwlp ZiAoa2luZXRpc19vZl9yZWdpc3Rlcl9maXhlZF9yYXRlX3Jvb3QoY2xrX25v ZGVzW0tJTkVUSVNfQ0xLX01DR09VVF0sDQorCQkJCQkJY2xvY2tfdmFsX21j Z291dCkpDQorCQlyZXR1cm47DQorDQorCWlmICghKGtpbmV0aXNfb2ZfcmVn aXN0ZXJfZml4ZWRfcmF0ZShjbGtfbm9kZXNbS0lORVRJU19DTEtfQ0NMS10s DQorCQkJCWNsa19ub2Rlc1tLSU5FVElTX0NMS19NQ0dPVVRdLCBjbG9ja192 YWxfY2NsaykpKQ0KKwkJa2luZXRpc19vZl9yZWdpc3Rlcl9jbGtfZ2F0ZShj bGtfbm9kZXNbS0lORVRJU19DTEtfQ0NMS19HQVRFXSwNCisJCQkJY2xrX25v ZGVzW0tJTkVUSVNfQ0xLX0NDTEtdLCBzaW0pOw0KKw0KKwlpZiAoIShraW5l dGlzX29mX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoY2xrX25vZGVzW0tJTkVUSVNf Q0xLX1BDTEtdLA0KKwkJCQljbGtfbm9kZXNbS0lORVRJU19DTEtfTUNHT1VU XSwgY2xvY2tfdmFsX3BjbGspKSkNCisJCWtpbmV0aXNfb2ZfcmVnaXN0ZXJf Y2xrX2dhdGUoY2xrX25vZGVzW0tJTkVUSVNfQ0xLX1BDTEtfR0FURV0sDQor CQkJCWNsa19ub2Rlc1tLSU5FVElTX0NMS19QQ0xLXSwgc2ltKTsNCit9DQor DQorQ0xLX09GX0RFQ0xBUkUoa2luZXRpc19tY2csICJmc2wsa2luZXRpcy1j bXUiLCBraW5ldGlzX21jZ19pbml0KTsNCi0tIA0KMi4zLjYNCg0K --98048-21318021-1435766259=:14440-- -- 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/