Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755260AbbGFVCp (ORCPT ); Mon, 6 Jul 2015 17:02:45 -0400 Received: from fish.king.net.pl ([79.190.246.46]:35839 "EHLO king.net.pl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753661AbbGFVCi (ORCPT ); Mon, 6 Jul 2015 17:02:38 -0400 Date: Mon, 6 Jul 2015 22:57:02 +0200 (CEST) From: Paul Osmialowski X-X-Sender: newchief@localhost.localdomain To: Arnd Bergmann , Thomas Gleixner cc: Paul Osmialowski , linux-arm-kernel@lists.infradead.org, Mark Rutland , Nicolas Pitre , Linus Walleij , Rob Herring , Alexander Potashev , Jiri Slaby , linux-clk@vger.kernel.org, Russell King , Vinod Koul , Geert Uytterhoeven , linux-serial@vger.kernel.org, Uwe Kleine-Koenig , Anson Huang , Michael Turquette , devicetree@vger.kernel.org, Frank Li , Pawel Moll , Ian Campbell , Jingchang Lu , Yuri Tikhonov , linux-gpio@vger.kernel.org, Rob Herring , Sergei Poselenov , Paul Bolle , Greg Kroah-Hartman , Stephen Boyd , linux-kernel@vger.kernel.org, Kumar Gala , dmaengine@vger.kernel.org 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> <2009463.YLtdMegFel@wuerfel> User-Agent: Alpine 2.00 (LNX 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="98048-154481224-1436216237=:9686" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 31080 Lines: 535 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-154481224-1436216237=:9686 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Hi Guys, Let me share with you one more approach. I moved clocks back to sub-devices, so sharing the same resources (registers) is more obvious again. I like it better than previous approach. Can you look at this, please? On Sat, 4 Jul 2015, Paul Osmialowski wrote: > Hi Arnd, > > I'm attaching excerpt from Kinetis reference manual that may make situation > clearer. > > These MCG and SIM registers are used only to determine configuration (clock > fixed rates and clock signal origins) at run time. > > Namely, the real MCGOUTCLK source (in the middle) which is the parent for > core clock (CCLK) and peripheral clock (PCLK) is determined at run time by > reading MCG registers, let me quote commit message from Emcraft git repo: > > * Determine in run-time what oscillator module (OSC0 or OSC1) is used > as clock source for the main PLL. > * When OSC1 is selected, assume its frequency to be 12 MHz on all > boards (there is a 12 MHz oscillator on XTAL1/EXTAL1 on K70-SOM and > TWR-K70F120M boards). > > In my .dts I'm trying to possibly follow real clock hierarchy, but to go > anywhere behind MCGOUTCLK would require ability to rewrite .dtb e.g. by > U-boot. But that's too demanding for any potential users of this BSP. So > let's asume that MCGOUTCLK is the root clock and a parent for CCLK and PCLK. > > In my most recent version I added OSC0ERCLK explicitly as one more root > clock, since it is also used directly (through CG reg. 1 bit 0) by Freescale > fec network device whose in-tree driver I'm trying to make usable for > Kinetis. > > On Sat, 4 Jul 2015, Arnd Bergmann wrote: > >> On Friday 03 July 2015 00:08:27 Thomas Gleixner wrote: >> > On Thu, 2 Jul 2015, Paul Osmialowski wrote: >> > > On Thu, 2 Jul 2015, Arnd Bergmann wrote: >> > > >> > > > I wonder if you could move out the fixed rate clocks into their own >> > > > nodes. Are they actually controlled by the same block? If they are >> > > > just fixed, you can use the normal binding for fixed rate clocks >> > > > and only describe the clocks that are related to the driver. >> > > >> > > In my view having these clocks grouped together looks more convincing. >> > > After >> > > all, they all share the same I/O regs in order to read configuration. >> > >> > The fact that they share a register is not making them a group. That's >> > just a HW design decision and you need to deal with that by protecting >> > the register access, but not by trying to group them artificially at >> > the functional level. >> >> I'd disagree with that: The clock controller is the device that owns the >> registers and that should be one node in DT, as Paul's first version does. >> >> The part I'm still struggling with is understanding how the fixed-rate >> clocks are controlled through those registers. If they are indeed >> configured >> through the registers, the name is probably wrong and should be changed >> to whatever kind of non-fixed clock this is. >> >> Arnd >> > --98048-154481224-1436216237=:9686 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 RnJvbSAyNzNmZGMwMjJhNDRlMmM0YWM5NGE4YmMwNzBkZDQyYThmMjk5MjE1 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogUGF1bCBPc21pYWxv d3NraSA8cGF3ZWxvQGtpbmcubmV0LnBsPg0KRGF0ZTogTW9uLCAyOSBKdW4g MjAxNSAyMDo1ODo1NSArMDIwMA0KU3ViamVjdDogW1BBVENIIDMvOV0gYXJt OiB0d3ItazcwZjEyMG06IGNsb2NrIGRyaXZlciBmb3IgS2luZXRpcyBTb0MN Cg0KQmFzZWQgb24gSzcwUDI1Nk0xNTBTRjNSTS5wZGYgSzcwIFN1Yi1GYW1p bHkgUmVmZXJlbmNlIE1hbnVhbCwgUmV2LiAzLg0KDQpTaWduZWQtb2ZmLWJ5 OiBQYXVsIE9zbWlhbG93c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQotLS0N CiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy9jbG9jay9raW5ldGlzLWNsb2Nr LnR4dCAgICB8ICA4MiArKysrDQogYXJjaC9hcm0vYm9vdC9kdHMva2luZXRp cy5kdHNpICAgICAgICAgICAgICAgICAgICAgfCAgNDMgKysNCiBkcml2ZXJz L2Nsay9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArDQogZHJpdmVycy9jbGsvY2xrLWtpbmV0aXMuYyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA1MzIgKysrKysrKysrKysrKysrKysrKysrDQog NCBmaWxlcyBjaGFuZ2VkLCA2NTggaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv Y2xvY2sva2luZXRpcy1jbG9jay50eHQNCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9jbGsvY2xrLWtpbmV0aXMuYw0KDQpkaWZmIC0tZ2l0IGEvRG9j dW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2tpbmV0aXMt Y2xvY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L2Nsb2NrL2tpbmV0aXMtY2xvY2sudHh0DQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMC4uZDdjNGViZg0KLS0tIC9kZXYvbnVsbA0KKysr IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Nsb2NrL2tp bmV0aXMtY2xvY2sudHh0DQpAQCAtMCwwICsxLDgyIEBADQorKiBDbG9jayBi aW5kaW5ncyBmb3IgRnJlZXNjYWxlIEtpbmV0aXMgU29DDQorDQorUmVxdWly ZWQgcHJvcGVydGllczoNCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAiZnNs LGtpbmV0aXMtY211Ii4NCistIHJlZzogVHdvIGFkZHJlc3MgcmFuZ2VzOg0K KwktICJtY2ciIGZvciB0aGUgTXVsdGlwdXJwb3NlIENsb2NrIEdlbmV0YXRv ciAoTUNHKSByZWdpc3RlciBzZXQuDQorCS0gInNpbSIgZm9yIFN5c3RlbSBJ bnRlZ3JhdGlvbiBNb2R1bGUgKFNJTSkgcmVnaXN0ZXIgc2V0Lg0KKy0gcmVn LW5hbWVzOiBTaG91bGQgbmFtZSB0aGUgYWRkcmVzcyByYW5nZXMgKCJtY2ci IGFuZCAic2ltIiByZXNwZWN0aXZlbHkpLg0KKw0KK0Egc2V0IG9mIGNsb2Nr IHN1Yi1kZXZpY2VzIHNob3VsZCBiZSBhbHNvIHByb3ZpZGVkLiBFYWNoIHN1 Yi1kZXZpY2Ugc2hvdWxkIGJlDQorYSBmaXhlZC1yYXRlIGNsb2NrIG9yIGEg Y2xvY2sgZ2F0ZS4NCisNCitSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBzdWIt ZGV2aWNlczoNCistIGNsb2Nrczogc2luZ2xlIGVsZW1lbnQgbGlzdCBvZiBw YXJlbnQgY2xvY2tzIChvbmx5IGZvciBub24tcm9vdCBjbG9ja3MpLg0KKy0g I2Nsb2NrLWNlbGxzOiBGb3IgZml4ZWQgcmF0ZSBjbG9ja3MgbXVzdCBiZSA8 MD4sDQorCQlmb3IgY2xvY2sgZ2F0ZXMgbXVzdCBiZSA8Mj4gKHNlZSBiZWxv dykuDQorDQorRm9yIGNsb2NrIGdhdGUgYWRkcmVzc2VzIHNlZSBLNzAgU3Vi LUZhbWlseSBSZWZlcmVuY2UgTWFudWFsLCBSZXYuIDMgcGcuIDM0MQ0KK2Fu ZCBsYXRlci4gTm90aWNlIHRoYXQgYWRkcmVzc2VzIGFyZSB6ZXJvLWJhc2Vk LCBzbyBTSU1fU0NHQzEgaGFzIGFkZHJlc3MgMCwNCitTSU1fU0NHQzIgaGFz IGFkZHJlc3MgMSBhbmQgc28gb24uIFRoZSBzZWNvbmQgYWRkcmVzcyBjb21w b25lbnQgaXMgdGhlIGJpdA0KK2luZGV4Lg0KKw0KK05vdGljZSB0aGF0IChu b24tZ2F0ZSkgY2xvY2sgZGV2aWNlIG5hbWVzIG11c3QgYmUga25vd24gdG8g S2luZXRpcyBDTVUgZHJpdmVycy4NCisNCitDdXJyZW50bHkga25vd24gbmFt ZXMgYXJlOg0KKw0KK28gZml4ZWQtcmF0ZS1tY2dvdXQgKHJvb3QpDQorbyBm aXhlZC1yYXRlLW9zYzBlciAocm9vdCkNCitvIGZpeGVkLXJhdGUtY2NsayAo Zml4ZWQtcmF0ZS1tY2dvdXQgY2hpbGQpDQorbyBmaXhlZC1yYXRlLXBjbGsg KGZpeGVkLXJhdGUtbWNnb3V0IGNoaWxkKQ0KKw0KK0V4YW1wbGU6DQorDQor Y211QDQwMDY0MDAwIHsNCisJY29tcGF0aWJsZSA9ICJmc2wsa2luZXRpcy1j bXUiOw0KKwlyZWcgPSA8MHg0MDA2NDAwMCAweDE0PiwgPDB4NDAwNDcwMDAg MHgxMTAwPjsNCisJcmVnLW5hbWVzID0gIm1jZyIsICJzaW0iOw0KKw0KKwlt Y2dfb3V0Y2xrOiBmaXhlZC1yYXRlLW1jZ291dCB7DQorCQkjY2xvY2stY2Vs bHMgPSA8MD47DQorCX07DQorDQorCW1jZ19jY2xrOiBmaXhlZC1yYXRlLWNj bGsgew0KKwkJY2xvY2tzID0gPCZtY2dfb3V0Y2xrPjsNCisJCSNjbG9jay1j ZWxscyA9IDwwPjsNCisJfTsNCisNCisJbWNnX3BjbGs6IGZpeGVkLXJhdGUt cGNsayB7DQorCQljbG9ja3MgPSA8Jm1jZ19vdXRjbGs+Ow0KKwkJI2Nsb2Nr LWNlbGxzID0gPDA+Ow0KKwl9Ow0KKw0KKwltY2dfY2Nsa19nYXRlOiBjY2xr LWdhdGUgew0KKwkJY2xvY2tzID0gPCZtY2dfY2Nsaz47DQorCQkjY2xvY2st Y2VsbHMgPSA8Mj47DQorCX07DQorDQorCW1jZ19wY2xrX2dhdGU6IHBjbGst Z2F0ZSB7DQorCQljbG9ja3MgPSA8Jm1jZ19wY2xrPjsNCisJCSNjbG9jay1j ZWxscyA9IDwyPjsNCisJfTsNCisNCisJb3NjMF9lcmNsazogZml4ZWQtcmF0 ZS1vc2MwZXIgew0KKwkJI2Nsb2NrLWNlbGxzID0gPDA+Ow0KKwl9Ow0KKw0K Kwlvc2MwX2VyY2xrX2dhdGU6IG9zYzAtZ2F0ZSB7DQorCQljbG9ja3MgPSA8 Jm9zYzBfZXJjbGs+Ow0KKwkJI2Nsb2NrLWNlbGxzID0gPDI+Ow0KKwl9Ow0K K307DQorDQordWFydDE6IHNlcmlhbEA0MDA2YjAwMCB7DQorCWNvbXBhdGli bGUgPSAiZnNsLGtpbmV0aXMtbHB1YXJ0IjsNCisJcmVnID0gPDB4NDAwNmIw MDAgMHgxMDAwPjsNCisJaW50ZXJydXB0cyA9IDw0Nz4sIDw0OD47DQorCWlu dGVycnVwdC1uYW1lcyA9ICJ1YXJ0LXN0YXQiLCAidWFydC1lcnIiOw0KKwlj bG9ja3MgPSA8Jm1jZ19jY2xrX2dhdGUgMyAxMT47DQorCWNsb2NrLW5hbWVz ID0gImlwZyI7DQorCWRtYXMgPSA8JmVkbWEgMCA0PjsNCisJZG1hLW5hbWVz ID0gInJ4IjsNCit9Ow0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRz L2tpbmV0aXMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2tpbmV0aXMuZHRz aQ0KaW5kZXggOTNkMmE4YS4uYWQ1ODE2OCAxMDA2NDQNCi0tLSBhL2FyY2gv YXJtL2Jvb3QvZHRzL2tpbmV0aXMuZHRzaQ0KKysrIGIvYXJjaC9hcm0vYm9v dC9kdHMva2luZXRpcy5kdHNpDQpAQCAtMywzICszLDQ2IEBADQogICoNCiAg Ki8NCiAjaW5jbHVkZSAiYXJtdjctbS5kdHNpIg0KKw0KKy8gew0KKwlzb2Mg ew0KKwkJY211QDQwMDY0MDAwIHsNCisJCQljb21wYXRpYmxlID0gImZzbCxr aW5ldGlzLWNtdSI7DQorCQkJcmVnID0gPDB4NDAwNjQwMDAgMHgxND4sIDww eDQwMDQ3MDAwIDB4MTEwMD47DQorCQkJcmVnLW5hbWVzID0gIm1jZyIsICJz aW0iOw0KKw0KKwkJCW1jZ19vdXRjbGs6IGZpeGVkLXJhdGUtbWNnb3V0IHsN CisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+Ow0KKwkJCX07DQorDQorCQkJbWNn X2NjbGs6IGZpeGVkLXJhdGUtY2NsayB7DQorCQkJCWNsb2NrcyA9IDwmbWNn X291dGNsaz47DQorCQkJCSNjbG9jay1jZWxscyA9IDwwPjsNCisJCQl9Ow0K Kw0KKwkJCW1jZ19wY2xrOiBmaXhlZC1yYXRlLXBjbGsgew0KKwkJCQljbG9j a3MgPSA8Jm1jZ19vdXRjbGs+Ow0KKwkJCQkjY2xvY2stY2VsbHMgPSA8MD47 DQorCQkJfTsNCisNCisJCQltY2dfY2Nsa19nYXRlOiBjY2xrLWdhdGUgew0K KwkJCQljbG9ja3MgPSA8Jm1jZ19jY2xrPjsNCisJCQkJI2Nsb2NrLWNlbGxz ID0gPDI+Ow0KKwkJCX07DQorDQorCQkJbWNnX3BjbGtfZ2F0ZTogcGNsay1n YXRlIHsNCisJCQkJY2xvY2tzID0gPCZtY2dfcGNsaz47DQorCQkJCSNjbG9j ay1jZWxscyA9IDwyPjsNCisJCQl9Ow0KKw0KKwkJCW9zYzBfZXJjbGs6IGZp eGVkLXJhdGUtb3NjMGVyIHsNCisJCQkJI2Nsb2NrLWNlbGxzID0gPDA+Ow0K KwkJCX07DQorDQorCQkJb3NjMF9lcmNsa19nYXRlOiBvc2MwLWdhdGUgew0K KwkJCQljbG9ja3MgPSA8Jm9zYzBfZXJjbGs+Ow0KKwkJCQkjY2xvY2stY2Vs bHMgPSA8Mj47DQorCQkJfTsNCisJCX07DQorCX07DQorfTsNCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay9NYWtlZmlsZSBiL2RyaXZlcnMvY2xrL01ha2Vm aWxlDQppbmRleCBjNGNmMDc1Li4wZDQ4MTY3IDEwMDY0NA0KLS0tIGEvZHJp dmVycy9jbGsvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvY2xrL01ha2VmaWxl DQpAQCAtMjQsNiArMjQsNyBAQCBvYmotJChDT05GSUdfQ09NTU9OX0NMS19D RENFNzA2KQkrPSBjbGstY2RjZTcwNi5vDQogb2JqLSQoQ09ORklHX0FSQ0hf Q0xQUzcxMVgpCQkrPSBjbGstY2xwczcxMXgubw0KIG9iai0kKENPTkZJR19B UkNIX0VGTTMyKQkJKz0gY2xrLWVmbTMyZ2cubw0KIG9iai0kKENPTkZJR19B UkNIX0hJR0hCQU5LKQkJKz0gY2xrLWhpZ2hiYW5rLm8NCitvYmotJChDT05G SUdfQVJDSF9LSU5FVElTKQkJKz0gY2xrLWtpbmV0aXMubw0KIG9iai0kKENP TkZJR19NQUNIX0xPT05HU09OMzIpCQkrPSBjbGstbHMxeC5vDQogb2JqLSQo Q09ORklHX0NPTU1PTl9DTEtfTUFYX0dFTikJKz0gY2xrLW1heC1nZW4ubw0K IG9iai0kKENPTkZJR19DT01NT05fQ0xLX01BWDc3Njg2KQkrPSBjbGstbWF4 Nzc2ODYubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Nsay1raW5ldGlz LmMgYi9kcml2ZXJzL2Nsay9jbGsta2luZXRpcy5jDQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uZDIzMTUzZA0KLS0tIC9kZXYvbnVs bA0KKysrIGIvZHJpdmVycy9jbGsvY2xrLWtpbmV0aXMuYw0KQEAgLTAsMCAr MSw1MzIgQEANCisvKg0KKyAqIGNsay1raW5ldGlzLmMgLSBDbG9jayBkcml2 ZXIgZm9yIEtpbmV0aXMgSzcwIE1DRw0KKyAqDQorICogQmFzZWQgb24gbGVn YWN5IHByZS1PRiBjb2RlIGJ5IEFsZXhhbmRlciBQb3Rhc2hldiA8YXNwb3Rh c2hldkBlbWNyYWZ0LmNvbT4NCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAx NSBQYXVsIE9zbWlhbG93c2tpIDxwYXdlbG9Aa2luZy5uZXQucGw+DQorICoN CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcg0KKyAqIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUNCisgKiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+ DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgv c2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8 bGludXgvY2xrLXByb3ZpZGVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+DQorDQorZW51bSBraW5ldGlzX2Nsa19pZHMg ew0KKwlLSU5FVElTX0NMS19NQ0dPVVQgPSAwLA0KKwlLSU5FVElTX0NMS19P U0MwRVIsDQorCUtJTkVUSVNfQ0xLX0NDTEssDQorCUtJTkVUSVNfQ0xLX1BD TEssDQorCUtJTkVUSVNfQ0xLX05VTQ0KK307DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCB7DQorCWVudW0ga2luZXRpc19jbGtfaWRzCWlkOw0KKwljb25z dCBjaGFyCQkqbmFtZTsNCit9IGtpbmV0aXNfY2xrc1tLSU5FVElTX0NMS19O VU1dID0gew0KKwl7IC5pZCA9IEtJTkVUSVNfQ0xLX01DR09VVCwJLm5hbWUg PSAiZml4ZWQtcmF0ZS1tY2dvdXQiLAl9LA0KKwl7IC5pZCA9IEtJTkVUSVNf Q0xLX09TQzBFUiwJLm5hbWUgPSAiZml4ZWQtcmF0ZS1vc2MwZXIiLAl9LA0K Kwl7IC5pZCA9IEtJTkVUSVNfQ0xLX0NDTEssCS5uYW1lID0gImZpeGVkLXJh dGUtY2NsayIsCX0sDQorCXsgLmlkID0gS0lORVRJU19DTEtfUENMSywJLm5h bWUgPSAiZml4ZWQtcmF0ZS1wY2xrIiwJfSwNCit9Ow0KKw0KKy8qDQorICog RnJlcXVlbmNpZXMgb24gT1NDMCAoRVhUQUwwL1hUQUwwKSBhbmQgT1NDMSAo RVhUQUwxL1hUQUwxKQ0KKyAqDQorICogVGhlc2UgZnJlcXVlbmNpZXMgc2hv dWxkIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZXMgYXMgaW4gVS1Cb290Lg0K KyAqLw0KKyNkZWZpbmUgS0lORVRJU19PU0MwX1JBVEUJNTAwMDAwMDAJLyog NTAgTUh6ICovDQorI2RlZmluZSBLSU5FVElTX09TQzFfUkFURQkxMjAwMDAw MAkvKiAxMiBNSHogKi8NCisNCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NHX05V TVJFR1MJNw0KKw0KKy8qDQorICogU3lzdGVtIEludGVncmF0aW9uIE1vZHVs ZSAoU0lNKSByZWdpc3RlciBtYXANCisgKg0KKyAqIFRoaXMgbWFwIGFjdHVh bGx5IGNvdmVycyB0d28gaGFyZHdhcmUgbW9kdWxlczoNCisgKiAgICAgMS4g U0lNIGxvdy1wb3dlciBsb2dpYywgYXQgMHg0MDA0NzAwMA0KKyAqICAgICAy LiBTeXN0ZW0gaW50ZWdyYXRpb24gbW9kdWxlIChTSU0pLCBhdCAweDQwMDQ4 MDAwDQorICovDQorc3RydWN0IGtpbmV0aXNfc2ltX3JlZ3Mgew0KKwl1MzIg c29wdDE7CS8qIFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDEgKi8NCisJdTMy IHJzdjBbMTAyNF07DQorCXUzMiBzb3B0MjsJLyogU3lzdGVtIE9wdGlvbnMg UmVnaXN0ZXIgMiAqLw0KKwl1MzIgcnN2MTsNCisJdTMyIHNvcHQ0OwkvKiBT eXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA0ICovDQorCXUzMiBzb3B0NTsJLyog U3lzdGVtIE9wdGlvbnMgUmVnaXN0ZXIgNSAqLw0KKwl1MzIgc29wdDY7CS8q IFN5c3RlbSBPcHRpb25zIFJlZ2lzdGVyIDYgKi8NCisJdTMyIHNvcHQ3Owkv KiBTeXN0ZW0gT3B0aW9ucyBSZWdpc3RlciA3ICovDQorCXUzMiByc3YyWzJd Ow0KKwl1MzIgc2RpZDsJLyogU3lzdGVtIERldmljZSBJZGVudGlmaWNhdGlv biBSZWdpc3RlciAqLw0KKwl1MzIgc2NnY1tLSU5FVElTX1NJTV9DR19OVU1S RUdTXTsJLyogQ2xvY2sgR2F0aW5nIFJlZ3MgMS4uLjcgKi8NCisJdTMyIGNs a2RpdjE7CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDEgKi8N CisJdTMyIGNsa2RpdjI7CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lz dGVyIDIgKi8NCisJdTMyIGZjZmcxOwkvKiBGbGFzaCBDb25maWd1cmF0aW9u IFJlZ2lzdGVyIDEgKi8NCisJdTMyIGZjZmcyOwkvKiBGbGFzaCBDb25maWd1 cmF0aW9uIFJlZ2lzdGVyIDIgKi8NCisJdTMyIHVpZGg7CS8qIFVuaXF1ZSBJ ZGVudGlmaWNhdGlvbiBSZWdpc3RlciBIaWdoICovDQorCXUzMiB1aWRtaDsJ LyogVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyIE1pZC1IaWdoICov DQorCXUzMiB1aWRtbDsJLyogVW5pcXVlIElkZW50aWZpY2F0aW9uIFJlZ2lz dGVyIE1pZCBMb3cgKi8NCisJdTMyIHVpZGw7CS8qIFVuaXF1ZSBJZGVudGlm aWNhdGlvbiBSZWdpc3RlciBMb3cgKi8NCisJdTMyIGNsa2RpdjM7CS8qIFN5 c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDMgKi8NCisJdTMyIGNsa2Rp djQ7CS8qIFN5c3RlbSBDbG9jayBEaXZpZGVyIFJlZ2lzdGVyIDQgKi8NCisJ dTMyIG1jcjsJLyogTWlzYyBDb250cm9sIFJlZ2lzdGVyICovDQorfTsNCisj ZGVmaW5lIEtJTkVUSVNfU0lNX1BUUihiYXNlLCByZWcpIFwNCisJKCYoKChz dHJ1Y3Qga2luZXRpc19zaW1fcmVncyAqKShiYXNlKSktPnJlZykpDQorDQor LyoNCisgKiBTeXN0ZW0gQ2xvY2sgRGl2aWRlciBSZWdpc3RlciAxDQorICov DQorLyogQ2xvY2sgMSBvdXRwdXQgZGl2aWRlciB2YWx1ZSAoZm9yIHRoZSBj b3JlL3N5c3RlbSBjbG9jaykgKi8NCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NM S0RJVjFfT1VURElWMV9CSVRTCTI4DQorI2RlZmluZSBLSU5FVElTX1NJTV9D TEtESVYxX09VVERJVjFfTVNLIFwNCisJKCgoMSA8PCA0KSAtIDEpIDw8IEtJ TkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMV9CSVRTKQ0KKy8qIENsb2NrIDIg b3V0cHV0IGRpdmlkZXIgdmFsdWUgKGZvciB0aGUgcGVyaXBoZXJhbCBjbG9j aykgKi8NCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMl9C SVRTCTI0DQorI2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYxX09VVERJVjJf TVNLIFwNCisJKCgoMSA8PCA0KSAtIDEpIDw8IEtJTkVUSVNfU0lNX0NMS0RJ VjFfT1VURElWMl9CSVRTKQ0KKw0KKy8qDQorICogU3lzdGVtIENsb2NrIERp dmlkZXIgUmVnaXN0ZXIgMg0KKyAqLw0KKy8qIFVTQiBIUyBjbG9jayBkaXZp ZGVyIGZyYWN0aW9uICovDQorI2RlZmluZSBLSU5FVElTX1NJTV9DTEtESVYy X1VTQkhTRlJBQ19CSVQJOA0KKyNkZWZpbmUgS0lORVRJU19TSU1fQ0xLRElW Ml9VU0JIU0ZSQUNfTVNLIFwNCisJKDEgPDwgS0lORVRJU19TSU1fQ0xLRElW Ml9VU0JIU0ZSQUNfQklUKQ0KKy8qIFVTQiBIUyBjbG9jayBkaXZpZGVyIGRp dmlzb3IgKi8NCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjJfVVNCSFNE SVZfQklUCTkNCisjZGVmaW5lIEtJTkVUSVNfU0lNX0NMS0RJVjJfVVNCSFNE SVZfTVNLIFwNCisJKDcgPDwgS0lORVRJU19TSU1fQ0xLRElWMl9VU0JIU0RJ Vl9CSVQpDQorDQorLyoNCisgKiBNQ0cgQ29udHJvbCA1IFJlZ2lzdGVyDQor ICovDQorLyogUExMIEV4dGVybmFsIFJlZmVyZW5jZSBEaXZpZGVyICovDQor I2RlZmluZSBLSU5FVElTX01DR19DNV9QUkRJVl9CSVRTCTANCisjZGVmaW5l IEtJTkVUSVNfTUNHX0M1X1BSRElWX01TSyBcDQorCSgoKDEgPDwgMykgLSAx KSA8PCBLSU5FVElTX01DR19DNV9QUkRJVl9CSVRTKQ0KKy8qIFBMTCBTdG9w IEVuYWJsZSAqLw0KKyNkZWZpbmUgS0lORVRJU19NQ0dfQzVfUExMU1RFTl9N U0sJKDEgPDwgNSkNCisvKiBQTEwgQ2xvY2sgRW5hYmxlICovDQorI2RlZmlu ZSBLSU5FVElTX01DR19DNV9QTExDTEtFTl9NU0sJKDEgPDwgNikNCisvKiBQ TEwgRXh0ZXJuYWwgUmVmZXJlbmNlIFNlbGVjdCAoZm9yIEs3MEAxMjBNSHop ICovDQorI2RlZmluZSBLSU5FVElTX01DR19DNV9QTExSRUZTRUxfQklUCTcN CisjZGVmaW5lIEtJTkVUSVNfTUNHX0M1X1BMTFJFRlNFTF9NU0sJKDEgPDwg S0lORVRJU19NQ0dfQzVfUExMUkVGU0VMX0JJVCkNCisvKg0KKyAqIE1DRyBD b250cm9sIDYgUmVnaXN0ZXINCisgKi8NCisvKiBWQ08gRGl2aWRlciAqLw0K KyNkZWZpbmUgS0lORVRJU19NQ0dfQzZfVkRJVl9CSVRTCTANCisjZGVmaW5l IEtJTkVUSVNfTUNHX0M2X1ZESVZfTVNLIFwNCisJKCgoMSA8PCA1KSAtIDEp IDw8IEtJTkVUSVNfTUNHX0M2X1ZESVZfQklUUykNCisvKiBQTEwgU2VsZWN0 ICovDQorI2RlZmluZSBLSU5FVElTX01DR19DNl9QTExTX01TSwkJKDEgPDwg NikNCisvKg0KKyAqIE1DRyBDb250cm9sIDExIFJlZ2lzdGVyDQorICovDQor LyogUExMMSBFeHRlcm5hbCBSZWZlcmVuY2UgRGl2aWRlciAqLw0KKyNkZWZp bmUgS0lORVRJU19NQ0dfQzExX1BSRElWX0JJVFMJMA0KKyNkZWZpbmUgS0lO RVRJU19NQ0dfQzExX1BSRElWX01TSyBcDQorCSgoKDEgPDwgMykgLSAxKSA8 PCBLSU5FVElTX01DR19DMTFfUFJESVZfQklUUykNCisvKiBQTEwgQ2xvY2sg U2VsZWN0OiBQTEwwIG9yIFBMTDEgKi8NCisjZGVmaW5lIEtJTkVUSVNfTUNH X0MxMV9QTExDU19NU0sJKDEgPDwgNCkNCisvKiBQTEwxIFN0b3AgRW5hYmxl ICovDQorI2RlZmluZSBLSU5FVElTX01DR19DMTFfUExMU1RFTjFfTVNLCSgx IDw8IDUpDQorLyogUExMMSBDbG9jayBFbmFibGUgKi8NCisjZGVmaW5lIEtJ TkVUSVNfTUNHX0MxMV9QTExDTEtFTjFfTVNLCSgxIDw8IDYpDQorLyogUExM MSBFeHRlcm5hbCBSZWZlcmVuY2UgU2VsZWN0IChmb3IgSzcwQDEyME1Ieikg Ki8NCisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMV9QTExSRUZTRUwxX0JJVAk3 DQorI2RlZmluZSBLSU5FVElTX01DR19DMTFfUExMUkVGU0VMMV9NU0sJKDEg PDwgS0lORVRJU19NQ0dfQzExX1BMTFJFRlNFTDFfQklUKQ0KKy8qDQorICog TUNHIENvbnRyb2wgMTIgUmVnaXN0ZXINCisgKi8NCisvKiBWQ08xIERpdmlk ZXIgKi8NCisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMl9WRElWMV9CSVRTCTAN CisjZGVmaW5lIEtJTkVUSVNfTUNHX0MxMl9WRElWMV9NU0sgXA0KKwkoKCgx IDw8IDUpIC0gMSkgPDwgS0lORVRJU19NQ0dfQzEyX1ZESVYxX0JJVFMpDQor DQorLyoNCisgKiBNdWx0aXB1cnBvc2UgQ2xvY2sgR2VuZXJhdG9yIChNQ0cp IHJlZ2lzdGVyIG1hcA0KKyAqDQorICogU2VlIENoYXB0ZXIgMjUgb2YgdGhl IEs3MCBSZWZlcmVuY2UgTWFudWFsDQorICovDQorc3RydWN0IGtpbmV0aXNf bWNnX3JlZ3Mgew0KKwl1OCBjMTsJCS8qIE1DRyBDb250cm9sIDEgUmVnaXN0 ZXIgKi8NCisJdTggYzI7CQkvKiBNQ0cgQ29udHJvbCAyIFJlZ2lzdGVyICov DQorCXU4IGMzOwkJLyogTUNHIENvbnRyb2wgMyBSZWdpc3RlciAqLw0KKwl1 OCBjNDsJCS8qIE1DRyBDb250cm9sIDQgUmVnaXN0ZXIgKi8NCisJdTggYzU7 CQkvKiBNQ0cgQ29udHJvbCA1IFJlZ2lzdGVyICovDQorCXU4IGM2OwkJLyog TUNHIENvbnRyb2wgNiBSZWdpc3RlciAqLw0KKwl1OCBzdGF0dXM7CS8qIE1D RyBTdGF0dXMgUmVnaXN0ZXIgKi8NCisJdTggcnN2MDsNCisJdTggYXRjOwkJ LyogTUNHIEF1dG8gVHJpbSBDb250cm9sIFJlZ2lzdGVyICovDQorCXU4IHJz djE7DQorCXU4IGF0Y3ZoOwkvKiBNQ0cgQXV0byBUcmltIENvbXBhcmUgVmFs dWUgSGlnaCBSZWdpc3RlciAqLw0KKwl1OCBhdGN2bDsJLyogTUNHIEF1dG8g VHJpbSBDb21wYXJlIFZhbHVlIExvdyBSZWdpc3RlciAqLw0KKwl1OCBjNzsJ CS8qIE1DRyBDb250cm9sIDcgUmVnaXN0ZXIgKi8NCisJdTggYzg7CQkvKiBN Q0cgQ29udHJvbCA4IFJlZ2lzdGVyICovDQorCXU4IHJzdjI7DQorCXU4IGMx MDsJCS8qIE1DRyBDb250cm9sIDEwIFJlZ2lzdGVyICovDQorCXU4IGMxMTsJ CS8qIE1DRyBDb250cm9sIDExIFJlZ2lzdGVyICovDQorCXU4IGMxMjsJCS8q IE1DRyBDb250cm9sIDEyIFJlZ2lzdGVyICovDQorCXU4IHN0YXR1czI7CS8q IE1DRyBTdGF0dXMgMiBSZWdpc3RlciAqLw0KKwl1OCByc3YzOw0KK307DQor I2RlZmluZSBLSU5FVElTX01DR19QVFIoYmFzZSwgcmVnKSBcDQorCSgmKCgo c3RydWN0IGtpbmV0aXNfbWNnX3JlZ3MgKikoYmFzZSkpLT5yZWcpKQ0KKw0K K3N0cnVjdCBraW5ldGlzX2Nsa19nYXRlIHsNCisJY29uc3QgY2hhciAqY2xr X2dhdGVfbmFtZTsNCisJc3RydWN0IGNsayAqY2xrOw0KKwl1MzIgcmVnOw0K Kwl1MzIgaWR4Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsa19saXN0Ow0KK307 DQorDQorc3RydWN0IGtpbmV0aXNfY2xrX2dhdGVfZGF0YSB7DQorCXZvaWQg X19pb21lbSAqc2ltOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsa19nYXRlX2xp c3Q7DQorfTsNCisNCitzdHJ1Y3Qga2luZXRpc19zY2djIHsNCisJdW5zaWdu ZWQgbG9uZyBwYWRkcjsNCisJc3BpbmxvY2tfdCBsb2NrOw0KKwlzdHJ1Y3Qg bGlzdF9oZWFkIHNjZ2NfbGlzdDsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3Qg bGlzdF9oZWFkIGtpbmV0aXNfc2NnY19saXN0ID0gTElTVF9IRUFEX0lOSVQo a2luZXRpc19zY2djX2xpc3QpOw0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICpr aW5ldGlzX29mX2Nsa19nZXRfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w KQ0KK3sNCisJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBjbGtzcGVjOw0KKwlp bnQgcmV0Ow0KKwljb25zdCBjaGFyICpyZXR2YWw7DQorDQorCXJldCA9IG9m X3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAiY2xvY2tzIiwgIiNjbG9j ay1jZWxscyIsIDAsDQorCQkJCQkmY2xrc3BlYyk7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gTlVMTDsNCisNCisJcmV0dmFsID0gY2xrc3BlYy5ucC0+ZnVs bF9uYW1lOw0KKw0KKwlvZl9ub2RlX3B1dChjbGtzcGVjLm5wKTsNCisNCisJ cmV0dXJuIHJldHZhbDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBjbGsgKmtp bmV0aXNfZmluZF9jbGtfZ2F0ZSgNCisJCXN0cnVjdCBraW5ldGlzX2Nsa19n YXRlX2RhdGEgKmNsa19nYXRlX2RhdGEsIHUzMiByZWcsIHUzMiBpZHgpDQor ew0KKwlzdHJ1Y3Qga2luZXRpc19jbGtfZ2F0ZSAqZ2F0ZTsNCisNCisJbGlz dF9mb3JfZWFjaF9lbnRyeShnYXRlLCAmY2xrX2dhdGVfZGF0YS0+Y2xrX2dh dGVfbGlzdCwgY2xrX2xpc3QpDQorCQlpZiAoKGdhdGUtPnJlZyA9PSByZWcp ICYmIChnYXRlLT5pZHggPT0gaWR4KSkNCisJCQlyZXR1cm4gZ2F0ZS0+Y2xr Ow0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBr aW5ldGlzX3NjZ2MgKmtpbmV0aXNfZmluZF9zY2djKHVuc2lnbmVkIGxvbmcg cGFkZHIpDQorew0KKwlzdHJ1Y3Qga2luZXRpc19zY2djICpzY2djOw0KKw0K KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjZ2MsICZraW5ldGlzX3NjZ2NfbGlz dCwgc2NnY19saXN0KQ0KKwkJaWYgKHNjZ2MtPnBhZGRyID09IHBhZGRyKQ0K KwkJCXJldHVybiBzY2djOw0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQor c3RhdGljIHN0cnVjdCBjbGsgKmtpbmV0aXNfY2xrX2dhdGVfZ2V0KHN0cnVj dCBvZl9waGFuZGxlX2FyZ3MgKmNsa3NwZWMsDQorCQkJCQl2b2lkICpkYXRh KQ0KK3sNCisJY29uc3QgY2hhciAqY2xrX25hbWU7DQorCXN0cnVjdCBraW5l dGlzX2Nsa19nYXRlX2RhdGEgKmNsa19nYXRlX2RhdGEgPSBkYXRhOw0KKwlz dHJ1Y3Qga2luZXRpc19jbGtfZ2F0ZSAqZ2F0ZTsNCisJdTMyIHJlZyA9IGNs a3NwZWMtPmFyZ3NbMF07DQorCXUzMiBpZHggPSBjbGtzcGVjLT5hcmdzWzFd Ow0KKwlzdHJ1Y3QgY2xrICpjbGs7DQorCXN0cnVjdCBraW5ldGlzX3NjZ2Mg KnNjZ2M7DQorCXZvaWQgX19pb21lbSAqYWRkciA9IEtJTkVUSVNfU0lNX1BU UihjbGtfZ2F0ZV9kYXRhLT5zaW0sIHNjZ2NbcmVnXSk7DQorCXVuc2lnbmVk IGxvbmcgcGFkZHIgPSB2aXJ0X3RvX3BoeXMoYWRkcik7DQorDQorCWNsayA9 IGtpbmV0aXNfZmluZF9jbGtfZ2F0ZShjbGtfZ2F0ZV9kYXRhLCByZWcsIGlk eCk7DQorCWlmIChjbGspDQorCQlyZXR1cm4gY2xrOw0KKw0KKwljbGtfbmFt ZSA9IGtpbmV0aXNfb2ZfY2xrX2dldF9uYW1lKGNsa3NwZWMtPm5wKTsNCisJ QlVHX09OKCFjbGtfbmFtZSk7DQorDQorCXNjZ2MgPSBraW5ldGlzX2ZpbmRf c2NnYyhwYWRkcik7DQorCWlmICghc2NnYykgew0KKwkJc2NnYyA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBraW5ldGlzX3NjZ2MpLCBHRlBfS0VSTkVMKTsN CisJCWlmICghc2NnYykNCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsN CisJCXNjZ2MtPnBhZGRyID0gcGFkZHI7DQorCQlzcGluX2xvY2tfaW5pdCgm c2NnYy0+bG9jayk7DQorDQorCQlsaXN0X2FkZCgmc2NnYy0+c2NnY19saXN0 LCAma2luZXRpc19zY2djX2xpc3QpOw0KKwl9DQorDQorCWdhdGUgPSBremFs bG9jKHNpemVvZihzdHJ1Y3Qga2luZXRpc19jbGtfZ2F0ZSksIEdGUF9LRVJO RUwpOw0KKwlpZiAoIWdhdGUpDQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCisNCisJZ2F0ZS0+Y2xrX2dhdGVfbmFtZSA9IGthc3ByaW50ZihHRlBf S0VSTkVMLCAiJXM6JXU6JXUiLA0KKwkJCQljbGtzcGVjLT5ucC0+ZnVsbF9u YW1lLCByZWcsIGlkeCk7DQorCWlmICghZ2F0ZS0+Y2xrX2dhdGVfbmFtZSkg ew0KKwkJa2ZyZWUoZ2F0ZSk7DQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCisJfQ0KKw0KKwljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBn YXRlLT5jbGtfZ2F0ZV9uYW1lLCBjbGtfbmFtZSwgMCwgYWRkciwNCisJCQkJ CQkJaWR4LCAwLCAmc2NnYy0+bG9jayk7DQorCWlmIChJU19FUlIoY2xrKSkg ew0KKwkJcHJfZXJyKCJDYW5ub3QgcmVnaXN0ZXIgZ2F0ZSB0byBjbG9jayAl c1xuIiwgY2xrX25hbWUpOw0KKwkJa2ZyZWVfY29uc3QoZ2F0ZS0+Y2xrX2dh dGVfbmFtZSk7DQorCQlrZnJlZShnYXRlKTsNCisJCXJldHVybiBjbGs7DQor CX0NCisNCisJZ2F0ZS0+Y2xrID0gY2xrOw0KKwlnYXRlLT5yZWcgPSByZWc7 DQorCWdhdGUtPmlkeCA9IGlkeDsNCisNCisJbGlzdF9hZGQoJmdhdGUtPmNs a19saXN0LCAmY2xrX2dhdGVfZGF0YS0+Y2xrX2dhdGVfbGlzdCk7DQorDQor CXJldHVybiBjbGs7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGtpbmV0aXNfb2Zf cmVnaXN0ZXJfY2xrX2dhdGUoc3RydWN0IGRldmljZV9ub2RlICpucCkNCit7 DQorCWNvbnN0IGNoYXIgKmNsa19wYXJlbnRfbmFtZSA9IGtpbmV0aXNfb2Zf Y2xrX2dldF9uYW1lKG5wKTsNCisJc3RydWN0IGtpbmV0aXNfY2xrX2dhdGVf ZGF0YSAqY2xrX2dhdGU7DQorCXZvaWQgX19pb21lbSAqc2ltOw0KKwlpbnQg cmV0Ow0KKw0KKwlpZiAoIWNsa19wYXJlbnRfbmFtZSkgew0KKwkJcHJfZXJy KCJubyBjbG9jayBzcGVjaWZpZWQgZm9yIGdhdGUgJXNcbiIsIG5wLT5mdWxs X25hbWUpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXJldCA9IG9mX3Byb3Bl cnR5X21hdGNoX3N0cmluZyhucC0+cGFyZW50LCAicmVnLW5hbWVzIiwgInNp bSIpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJcHJfZXJyKCJmYWlsZWQgdG8g Z2V0IFNJTSBhZGRyZXNzIHJhbmdlIGZvciAlc1xuIiwNCisJCQkJCQkJbnAt PnBhcmVudC0+ZnVsbF9uYW1lKTsNCisJCXJldHVybjsNCisJfQ0KKwlzaW0g PSBvZl9pb21hcChucC0+cGFyZW50LCByZXQpOw0KKwlpZiAoIXNpbSkgew0K KwkJcHJfZXJyKCJmYWlsZWQgdG8gbWFwIFNJTSBhZGRyZXNzIHJhbmdlIGZv ciAlc1xuIiwNCisJCQkJCQkJbnAtPnBhcmVudC0+ZnVsbF9uYW1lKTsNCisJ CXJldHVybjsNCisJfQ0KKw0KKwljbGtfZ2F0ZSA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBraW5ldGlzX2Nsa19nYXRlX2RhdGEpLCBHRlBfS0VSTkVMKTsN CisJaWYgKCFjbGtfZ2F0ZSkgew0KKwkJaW91bm1hcChzaW0pOw0KKwkJcmV0 dXJuOw0KKwl9DQorDQorCWNsa19nYXRlLT5zaW0gPSBzaW07DQorCUlOSVRf TElTVF9IRUFEKCZjbGtfZ2F0ZS0+Y2xrX2dhdGVfbGlzdCk7DQorDQorCXJl dCA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIGtpbmV0aXNfY2xrX2dhdGVf Z2V0LCBjbGtfZ2F0ZSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQlwcl9lcnIo IkNvdWxkIG5vdCBhZGQgY2xvY2sgcHJvdmlkZXIgJXNcbiIsIG5wLT5mdWxs X25hbWUpOw0KKwkJa2ZyZWUoY2xrX2dhdGUpOw0KKwkJaW91bm1hcChzaW0p Ow0KKwkJcmV0dXJuOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGtpbmV0 aXNfb2ZfcmVnaXN0ZXJfZml4ZWRfcmF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLCB1MzIgY2xrX3ZhbCkNCit7DQorCWNvbnN0IGNoYXIgKmNsa19wYXJl bnRfbmFtZSA9IGtpbmV0aXNfb2ZfY2xrX2dldF9uYW1lKG5wKTsNCisJc3Ry dWN0IGNsayAqY2xrOw0KKwlpbnQgcmV0Ow0KKw0KKwljbGsgPSBjbGtfcmVn aXN0ZXJfZml4ZWRfcmF0ZShOVUxMLCBucC0+ZnVsbF9uYW1lLA0KKwkJCQkJ Y2xrX3BhcmVudF9uYW1lLA0KKwkJCQkJY2xrX3BhcmVudF9uYW1lID8gMCA6 IENMS19JU19ST09ULA0KKwkJCQkJY2xrX3ZhbCk7DQorCWlmIChJU19FUlIo Y2xrKSkgew0KKwkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2sg JXNcbiIsIG5wLT5mdWxsX25hbWUpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQor CXJldCA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2lt cGxlX2dldCwgY2xrKTsNCisJaWYgKHJldCA8IDApIHsNCisJCXByX2Vycigi Q291bGQgbm90IGFkZCBjbG9jayBwcm92aWRlciAlc1xuIiwgbnAtPmZ1bGxf bmFtZSk7DQorCQljbGtfdW5yZWdpc3RlcihjbGspOw0KKwkJcmV0dXJuOw0K Kwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9faW5pdCBraW5ldGlzX21jZ19p bml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApDQorew0KKwljb25zdCBpbnQg dmNvX2RpdiA9IDI7DQorCWNvbnN0IGludCB2ZGl2X21pbiA9IDE2Ow0KKwl1 MzIgY2xvY2tfdmFsW10gPSB7IFswIC4uLiBLSU5FVElTX0NMS19OVU1dID0g MCB9Ow0KKwl2b2lkIF9faW9tZW0gKmJhc2U7DQorCXZvaWQgX19pb21lbSAq c2ltOw0KKwlpbnQgcGxsX3NlbDsNCisJaW50IG9zY19zZWw7DQorCWludCBy ZXQ7DQorCXVuc2lnbmVkIGxvbmcgbWNnb3V0Ow0KKwllbnVtIGtpbmV0aXNf Y2xrX2lkcyBjbGtfaWQ7DQorCXUzMiBjbG9ja19jZWxsczsNCisJc3RydWN0 IGRldmljZV9ub2RlICpjaGlsZDsNCisNCisJcmV0ID0gb2ZfcHJvcGVydHlf bWF0Y2hfc3RyaW5nKG5wLCAicmVnLW5hbWVzIiwgIm1jZyIpOw0KKwlpZiAo cmV0IDwgMCkgew0KKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IE1DRyBhZGRy ZXNzIHJhbmdlIGZvciAlc1xuIiwNCisJCQkJCQkJCW5wLT5mdWxsX25hbWUp Ow0KKwkJcmV0dXJuOw0KKwl9DQorCWJhc2UgPSBvZl9pb21hcChucCwgcmV0 KTsNCisJaWYgKCFiYXNlKSB7DQorCQlwcl9lcnIoImZhaWxlZCB0byBtYXAg TUNHIGFkZHJlc3MgcmFuZ2UgZm9yICVzXG4iLA0KKwkJCQkJCQkJbnAtPmZ1 bGxfbmFtZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJcmV0ID0gb2ZfcHJv cGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAicmVnLW5hbWVzIiwgInNpbSIpOw0K KwlpZiAocmV0IDwgMCkgew0KKwkJcHJfZXJyKCJmYWlsZWQgdG8gZ2V0IFNJ TSBhZGRyZXNzIHJhbmdlIGZvciAlc1xuIiwNCisJCQkJCQkJCW5wLT5mdWxs X25hbWUpOw0KKwkJaW91bm1hcChiYXNlKTsNCisJCXJldHVybjsNCisJfQ0K KwlzaW0gPSBvZl9pb21hcChucCwgcmV0KTsNCisJaWYgKCFzaW0pIHsNCisJ CXByX2VycigiZmFpbGVkIHRvIG1hcCBTSU0gYWRkcmVzcyByYW5nZSBmb3Ig JXNcbiIsDQorCQkJCQkJCQlucC0+ZnVsbF9uYW1lKTsNCisJCWlvdW5tYXAo YmFzZSk7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoNCisJICogQ2hlY2sg d2hldGhlciBQTEwwIG9yIFBMTDEgaXMgdXNlZCBmb3IgTUNHT1VUQ0xLDQor CSAqLw0KKwlwbGxfc2VsID0gISEoaW9yZWFkOChLSU5FVElTX01DR19QVFIo YmFzZSwgYzExKSkgJg0KKwkJCQlLSU5FVElTX01DR19DMTFfUExMQ1NfTVNL KTsNCisNCisJLyoNCisJICogQ2hlY2sgd2hldGhlciBPU0MwIG9yIE9TQzEg aXMgdXNlZCB0byBzb3VyY2UgdGhlIG1haW4gUExMDQorCSAqLw0KKwlpZiAo cGxsX3NlbCkNCisJCW9zY19zZWwgPSAhIShpb3JlYWQ4KEtJTkVUSVNfTUNH X1BUUihiYXNlLCBjMTEpKSAmDQorCQkJCUtJTkVUSVNfTUNHX0MxMV9QTExS RUZTRUwxX01TSyk7DQorCWVsc2UNCisJCW9zY19zZWwgPSAhIShpb3JlYWQ4 KEtJTkVUSVNfTUNHX1BUUihiYXNlLCBjNSkpICYNCisJCQkJS0lORVRJU19N Q0dfQzVfUExMUkVGU0VMX01TSyk7DQorDQorCS8qDQorCSAqIFN0YXJ0IHdp dGggdGhlIE1DRyBpbnB1dCBjbG9jaw0KKwkgKi8NCisJbWNnb3V0ID0gb3Nj X3NlbCA/IEtJTkVUSVNfT1NDMV9SQVRFIDogS0lORVRJU19PU0MwX1JBVEU7 DQorDQorCS8qDQorCSAqIEFwcGx5IGRpdmlkZXJzIGFuZCBtdWx0aXBsaWVy cyBvZiB0aGUgc2VsZWN0ZWQgUExMDQorCSAqLw0KKwlpZiAocGxsX3NlbCkg ew0KKwkJLyoNCisJCSAqIFBMTDEgaW50ZXJuYWwgZGl2aWRlciAoUFJESVYp DQorCQkgKi8NCisJCW1jZ291dCAvPSAoKGlvcmVhZDgoS0lORVRJU19NQ0df UFRSKGJhc2UsIGMxMSkpICYNCisJCSAgS0lORVRJU19NQ0dfQzExX1BSRElW X01TSykgPj4gS0lORVRJU19NQ0dfQzExX1BSRElWX0JJVFMpICsgMTsNCisN CisJCS8qDQorCQkgKiBQTEwxIG11bHRpcGxpY2F0aW9uIGZhY3RvciAoVkRJ VikNCisJCSAqLw0KKwkJbWNnb3V0ICo9ICgoaW9yZWFkOChLSU5FVElTX01D R19QVFIoYmFzZSwgYzEyKSkgJg0KKwkJICBLSU5FVElTX01DR19DMTJfVkRJ VjFfTVNLKSA+PiBLSU5FVElTX01DR19DMTJfVkRJVjFfQklUUykgKw0KKwkJ CQkJCQkJICAgIHZkaXZfbWluOw0KKwl9IGVsc2Ugew0KKwkJLyoNCisJCSAq IFBMTDAgaW50ZXJuYWwgZGl2aWRlciAoUFJESVYpDQorCQkgKi8NCisJCW1j Z291dCAvPSAoKGlvcmVhZDgoS0lORVRJU19NQ0dfUFRSKGJhc2UsIGM1KSkg Jg0KKwkJCUtJTkVUSVNfTUNHX0M1X1BSRElWX01TSykgPj4NCisJCQlLSU5F VElTX01DR19DNV9QUkRJVl9CSVRTKSArIDE7DQorDQorCQkvKg0KKwkJICog UExMMCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKFZESVYpDQorCQkgKi8NCisJ CW1jZ291dCAqPSAoKGlvcmVhZDgoS0lORVRJU19NQ0dfUFRSKGJhc2UsIGM2 KSkgJg0KKwkJCUtJTkVUSVNfTUNHX0M2X1ZESVZfTVNLKSA+Pg0KKwkJCUtJ TkVUSVNfTUNHX0M2X1ZESVZfQklUUykgKyB2ZGl2X21pbjsNCisJfQ0KKw0K KwkvKg0KKwkgKiBBcHBseSB0aGUgUExMIG91dHB1dCBkaXZpZGVyDQorCSAq Lw0KKwltY2dvdXQgLz0gdmNvX2RpdjsNCisNCisJY2xvY2tfdmFsW0tJTkVU SVNfQ0xLX01DR09VVF0gPSBtY2dvdXQ7DQorCWNsb2NrX3ZhbFtLSU5FVElT X0NMS19PU0MwRVJdID0gS0lORVRJU19PU0MwX1JBVEU7DQorDQorCWNsb2Nr X3ZhbFtLSU5FVElTX0NMS19DQ0xLXSA9IG1jZ291dCAvDQorCQkoKChpb3Jl YWQzMihLSU5FVElTX1NJTV9QVFIoc2ltLCBjbGtkaXYxKSkgJg0KKwkJCUtJ TkVUSVNfU0lNX0NMS0RJVjFfT1VURElWMV9NU0spID4+DQorCQkJCUtJTkVU SVNfU0lNX0NMS0RJVjFfT1VURElWMV9CSVRTKSArIDEpOw0KKw0KKwkvKg0K KwkgKiBQZXJpcGhlcmFsIChidXMpIGNsb2NrDQorCSAqLw0KKwljbG9ja192 YWxbS0lORVRJU19DTEtfUENMS10gPSBtY2dvdXQgLw0KKwkJKCgoaW9yZWFk MzIoS0lORVRJU19TSU1fUFRSKHNpbSwgY2xrZGl2MSkpICYNCisJCQlLSU5F VElTX1NJTV9DTEtESVYxX09VVERJVjJfTVNLKSA+Pg0KKwkJCQlLSU5FVElT X1NJTV9DTEtESVYxX09VVERJVjJfQklUUykgKyAxKTsNCisNCisJaW91bm1h cChzaW0pOw0KKwlpb3VubWFwKGJhc2UpOw0KKw0KKwlmb3JfZWFjaF9jaGls ZF9vZl9ub2RlKG5wLCBjaGlsZCkgew0KKwkJaWYgKCFvZl9kZXZpY2VfaXNf YXZhaWxhYmxlKGNoaWxkKSkNCisJCQljb250aW51ZTsNCisNCisJCWNsb2Nr X2NlbGxzID0gMDsNCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl eChjaGlsZCwgIiNjbG9jay1jZWxscyIsIDAsDQorCQkJCQkJCSZjbG9ja19j ZWxscykpIHsNCisJCQlwcl9lcnIoIm5vICNjbG9jay1jZWxscyBzZXQgZm9y ICVzXG4iLA0KKwkJCQkJCQljaGlsZC0+ZnVsbF9uYW1lKTsNCisJCQljb250 aW51ZTsNCisJCX0NCisNCisJCS8qDQorCQkgKiBIYW5kbGUgY2xvY2sgZ2F0 ZXMgKHJlY29nbml6ZWQgYnkgdHdvIGNsb2NrIGNlbGxzKQ0KKwkJICovDQor CQlpZiAoMiA9PSBjbG9ja19jZWxscykgew0KKwkJCWtpbmV0aXNfb2ZfcmVn aXN0ZXJfY2xrX2dhdGUoY2hpbGQpOw0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0K Kw0KKwkJZm9yIChjbGtfaWQgPSAwOyBjbGtfaWQgPCBLSU5FVElTX0NMS19O VU07IGNsa19pZCsrKQ0KKwkJCWlmICghb2Zfbm9kZV9jbXAoY2hpbGQtPm5h bWUsDQorCQkJCQkgICAga2luZXRpc19jbGtzW2Nsa19pZF0ubmFtZSkpDQor CQkJCWJyZWFrOw0KKw0KKwkJaWYgKEtJTkVUSVNfQ0xLX05VTSA9PSBjbGtf aWQpIHsNCisJCQlwcl9lcnIoInVua25vd24gY2xvY2sgJXMgc3BlY2lmaWVk XG4iLCBjaGlsZC0+bmFtZSk7DQorCQkJY29udGludWU7DQorCQl9DQorDQor CQlpZiAoIWNsb2NrX3ZhbFtjbGtfaWRdKSB7DQorCQkJcHJfZXJyKCJubyBj bG9jayByYXRlIGZvciAlc1xuIiwgY2hpbGQtPm5hbWUpOw0KKwkJCWNvbnRp bnVlOw0KKwkJfQ0KKw0KKwkJa2luZXRpc19vZl9yZWdpc3Rlcl9maXhlZF9y YXRlKGNoaWxkLCBjbG9ja192YWxbY2xrX2lkXSk7DQorCX0NCit9DQorDQor Q0xLX09GX0RFQ0xBUkUoa2luZXRpc19tY2csICJmc2wsa2luZXRpcy1jbXUi LCBraW5ldGlzX21jZ19pbml0KTsNCi0tIA0KMi4zLjYNCg0K --98048-154481224-1436216237=:9686-- -- 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/