From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from host.buserror.net ([209.198.135.123]:37152 "EHLO host.buserror.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750747AbcILXZg (ORCPT ); Mon, 12 Sep 2016 19:25:36 -0400 Message-ID: <1473722714.30217.196.camel@buserror.net> From: Scott Wood To: "Y.B. Lu" , "linux-mmc@vger.kernel.org" , "ulf.hansson@linaro.org" , Arnd Bergmann Cc: "linuxppc-dev@lists.ozlabs.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-clk@vger.kernel.org" , "linux-i2c@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "netdev@vger.kernel.org" , Mark Rutland , Rob Herring , Russell King , Jochen Friedrich , Joerg Roedel , Claudiu Manoil , Bhupesh Sharma , Qiang Zhao , Kumar Gala , Santosh Shilimkar , Leo Li , "X.B. Xie" Date: Mon, 12 Sep 2016 18:25:14 -0500 In-Reply-To: References: <1473150503-9550-1-git-send-email-yangbo.lu@nxp.com> <1473150503-9550-6-git-send-email-yangbo.lu@nxp.com> <1473392840.30217.170.camel@buserror.net> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Subject: Re: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms Sender: linux-clk-owner@vger.kernel.org List-ID: On Mon, 2016-09-12 at 06:39 +0000, Y.B. Lu wrote: > Hi Scott, > > Thanks for your review :) > See my comment inline. > > > > > -----Original Message----- > > From: Scott Wood [mailto:oss@buserror.net] > > Sent: Friday, September 09, 2016 11:47 AM > > To: Y.B. Lu; linux-mmc@vger.kernel.org; ulf.hansson@linaro.org; Arnd > > Bergmann > > Cc: linuxppc-dev@lists.ozlabs.org; devicetree@vger.kernel.org; linux-arm- > > kernel@lists.infradead.org; linux-kernel@vger.kernel.org; linux- > > clk@vger.kernel.org; linux-i2c@vger.kernel.org; iommu@lists.linux- > > foundation.org; netdev@vger.kernel.org; Mark Rutland; Rob Herring; > > Russell King; Jochen Friedrich; Joerg Roedel; Claudiu Manoil; Bhupesh > > Sharma; Qiang Zhao; Kumar Gala; Santosh Shilimkar; Leo Li; X.B. Xie > > Subject: Re: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms > > > > On Tue, 2016-09-06 at 16:28 +0800, Yangbo Lu wrote: > > > > > > The global utilities block controls power management, I/O device > > > enabling, power-onreset(POR) configuration monitoring, alternate > > > function selection for multiplexed signals,and clock control. > > > > > > This patch adds a driver to manage and access global utilities block. > > > Initially only reading SVR and registering soc device are supported. > > > Other guts accesses, such as reading RCW, should eventually be moved > > > into this driver as well. > > > > > > Signed-off-by: Yangbo Lu > > > Signed-off-by: Scott Wood > > Don't put my signoff on patches that I didn't put it on > > myself.  Definitely don't put mine *after* yours on patches that were > > last modified by you. > > > > If you want to mention that the soc_id encoding was my suggestion, then > > do so explicitly. > > > [Lu Yangbo-B47093] I found your 'signoff' on this patch at below link. > http://patchwork.ozlabs.org/patch/649211/ > > So, let me just change the order in next version ? > Signed-off-by: Scott Wood > Signed-off-by: Yangbo Lu No.  This isn't my patch so my signoff shouldn't be on it. > [Lu Yangbo-B47093] It's a good idea to move die into .family I think. > In my opinion, it's better to keep svr and name in soc_id just like your > suggestion above. > > > > { > > .soc_id = "svr:0x85490010,name:T1023E,", > > .family = "QorIQ T1024", > > } > The user probably don’t like to learn the svr value. What they want is just > to match the soc they use. > It's convenient to use name+rev for them to match a soc. What the user should want 99% of the time is to match the die (plus revision), not the soc. > Regarding shrinking the table, I think it's hard to use svr+mask. Because I > find many platforms use different masks. > We couldn’t know the mask according svr value. The mask would be part of the table: { { .die = "T1024", .svr = 0x85400000, .mask = 0xfff00000, }, { .die = "T1040", .svr = 0x85200000, .mask = 0xfff00000, }, { .die = "LS1088A", .svr = 0x87030000, .mask = 0xffff0000, }, ... } There's a small risk that we get the mask wrong and a different die is created that matches an existing table, but it doesn't seem too likely, and can easily be fixed with a kernel update if it happens. BTW, aren't ls2080a and ls2085a the same die?  And is there no non-E version of LS2080A/LS2040A? > > > + do { > > > + if (!matches->soc_id) > > > + return NULL; > > > + if (glob_match(svr_match, matches->soc_id)) > > > + break; > > > + } while (matches++); > > Are you expecting "matches++" to ever evaluate as false? > [Lu Yangbo-B47093] Yes, this is used to match the soc we use in qoriq_soc > array until getting true.  > We need to get the name and die information defined in array. I'm not asking whether the glob_match will ever return true.  I'm saying that "matches++" will never become NULL. > > > + /* Register soc device */ > > > + soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); > > > + if (!soc_dev_attr) { > > > + ret = -ENOMEM; > > > + goto out_unmap; > > > + } > > Couldn't this be statically allocated? > [Lu Yangbo-B47093] Do you mean we define this struct statically ? > > static struct soc_device_attribute soc_dev_attr; Yes. > > > + > > > + soc_dev = soc_device_register(soc_dev_attr); > > > + if (IS_ERR(soc_dev)) { > > > + ret = -ENODEV; > > Why are you changing the error code? > [Lu Yangbo-B47093] What error code should we use ? :) ret = PTR_ERR(soc_dev); + } > > > + return 0; > > > +out: > > > + kfree(soc_dev_attr->machine); > > > + kfree(soc_dev_attr->family); > > > + kfree(soc_dev_attr->soc_id); > > > + kfree(soc_dev_attr->revision); > > > + kfree(soc_dev_attr); > > > +out_unmap: > > > + iounmap(guts->regs); > > > +out_free: > > > + kfree(guts); > > devm > [Lu Yangbo-B47093] What's the devm meaning here :) If you allocate these with devm_kzalloc(), devm_kasprintf(), devm_kstrdup(), etc. then they will be freed automatically when the device is unbound. >   > > > > > > > > > > +static int fsl_guts_remove(struct platform_device *dev) { > > > + kfree(soc_dev_attr->machine); > > > + kfree(soc_dev_attr->family); > > > + kfree(soc_dev_attr->soc_id); > > > + kfree(soc_dev_attr->revision); > > > + kfree(soc_dev_attr); > > > + soc_device_unregister(soc_dev); > > > + iounmap(guts->regs); > > > + kfree(guts); > > > + return 0; > > > +} > > Don't free the memory before you unregister the device that uses it (moot > > if you use devm). > [Lu Yangbo-B47093] The soc.c driver mentions that. > Ensure soc_dev->attr is freed prior to calling soc_device_unregister. That comment is wrong.  Freeing the memory first creates a race condition that could result in accessing freed memory, if something accesses the soc device in parallel with unbinding. -Scott From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Subject: Re: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms Date: Mon, 12 Sep 2016 18:25:14 -0500 Message-ID: <1473722714.30217.196.camel@buserror.net> References: <1473150503-9550-1-git-send-email-yangbo.lu@nxp.com> <1473150503-9550-6-git-send-email-yangbo.lu@nxp.com> <1473392840.30217.170.camel@buserror.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: "Y.B. Lu" , "linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org" , Arnd Bergmann Cc: Mark Rutland , "devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Russell King , Bhupesh Sharma , "netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Santosh Shilimkar , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Jochen Friedrich , "X.B. Xie" , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , Rob Herring , "linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Claudiu Manoil , Kumar Gala , Leo Li , "linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org" , "linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" List-Id: linux-i2c@vger.kernel.org T24gTW9uLCAyMDE2LTA5LTEyIGF0IDA2OjM5ICswMDAwLCBZLkIuIEx1IHdyb3RlOgo+IEhpIFNj b3R0LAo+IAo+IFRoYW5rcyBmb3IgeW91ciByZXZpZXcgOikKPiBTZWUgbXkgY29tbWVudCBpbmxp bmUuCj4gCj4gPiAKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiBGcm9tOiBTY290 dCBXb29kIFttYWlsdG86b3NzQGJ1c2Vycm9yLm5ldF0KPiA+IFNlbnQ6IEZyaWRheSwgU2VwdGVt YmVyIDA5LCAyMDE2IDExOjQ3IEFNCj4gPiBUbzogWS5CLiBMdTsgbGludXgtbW1jQHZnZXIua2Vy bmVsLm9yZzsgdWxmLmhhbnNzb25AbGluYXJvLm9yZzsgQXJuZAo+ID4gQmVyZ21hbm4KPiA+IENj OiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsgZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5v cmc7IGxpbnV4LWFybS0KPiA+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1rZXJu ZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC0KPiA+IGNsa0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4 LWkyY0B2Z2VyLmtlcm5lbC5vcmc7IGlvbW11QGxpc3RzLmxpbnV4LQo+ID4gZm91bmRhdGlvbi5v cmc7IG5ldGRldkB2Z2VyLmtlcm5lbC5vcmc7IE1hcmsgUnV0bGFuZDsgUm9iIEhlcnJpbmc7Cj4g PiBSdXNzZWxsIEtpbmc7IEpvY2hlbiBGcmllZHJpY2g7IEpvZXJnIFJvZWRlbDsgQ2xhdWRpdSBN YW5vaWw7IEJodXBlc2gKPiA+IFNoYXJtYTsgUWlhbmcgWmhhbzsgS3VtYXIgR2FsYTsgU2FudG9z aCBTaGlsaW1rYXI7IExlbyBMaTsgWC5CLiBYaWUKPiA+IFN1YmplY3Q6IFJlOiBbdjExLCA1Lzhd IHNvYzogZnNsOiBhZGQgR1VUUyBkcml2ZXIgZm9yIFFvcklRIHBsYXRmb3Jtcwo+ID4gCj4gPiBP biBUdWUsIDIwMTYtMDktMDYgYXQgMTY6MjggKzA4MDAsIFlhbmdibyBMdSB3cm90ZToKPiA+ID4g Cj4gPiA+IFRoZSBnbG9iYWwgdXRpbGl0aWVzIGJsb2NrIGNvbnRyb2xzIHBvd2VyIG1hbmFnZW1l bnQsIEkvTyBkZXZpY2UKPiA+ID4gZW5hYmxpbmcsIHBvd2VyLW9ucmVzZXQoUE9SKSBjb25maWd1 cmF0aW9uIG1vbml0b3JpbmcsIGFsdGVybmF0ZQo+ID4gPiBmdW5jdGlvbiBzZWxlY3Rpb24gZm9y IG11bHRpcGxleGVkIHNpZ25hbHMsYW5kIGNsb2NrIGNvbnRyb2wuCj4gPiA+IAo+ID4gPiBUaGlz IHBhdGNoIGFkZHMgYSBkcml2ZXIgdG8gbWFuYWdlIGFuZCBhY2Nlc3MgZ2xvYmFsIHV0aWxpdGll cyBibG9jay4KPiA+ID4gSW5pdGlhbGx5IG9ubHkgcmVhZGluZyBTVlIgYW5kIHJlZ2lzdGVyaW5n IHNvYyBkZXZpY2UgYXJlIHN1cHBvcnRlZC4KPiA+ID4gT3RoZXIgZ3V0cyBhY2Nlc3Nlcywgc3Vj aCBhcyByZWFkaW5nIFJDVywgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbW92ZWQKPiA+ID4gaW50byB0 aGlzIGRyaXZlciBhcyB3ZWxsLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogWWFuZ2JvIEx1 IDx5YW5nYm8ubHVAbnhwLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8b3Nz QGJ1c2Vycm9yLm5ldD4KPiA+IERvbid0IHB1dCBteSBzaWdub2ZmIG9uIHBhdGNoZXMgdGhhdCBJ IGRpZG4ndCBwdXQgaXQgb24KPiA+IG15c2VsZi4gwqBEZWZpbml0ZWx5IGRvbid0IHB1dCBtaW5l ICphZnRlciogeW91cnMgb24gcGF0Y2hlcyB0aGF0IHdlcmUKPiA+IGxhc3QgbW9kaWZpZWQgYnkg eW91Lgo+ID4gCj4gPiBJZiB5b3Ugd2FudCB0byBtZW50aW9uIHRoYXQgdGhlIHNvY19pZCBlbmNv ZGluZyB3YXMgbXkgc3VnZ2VzdGlvbiwgdGhlbgo+ID4gZG8gc28gZXhwbGljaXRseS4KPiA+IAo+ IFtMdSBZYW5nYm8tQjQ3MDkzXSBJIGZvdW5kIHlvdXIgJ3NpZ25vZmYnIG9uIHRoaXMgcGF0Y2gg YXQgYmVsb3cgbGluay4KPiBodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvNjQ5MjEx Lwo+IAo+IFNvLCBsZXQgbWUganVzdCBjaGFuZ2UgdGhlIG9yZGVyIGluIG5leHQgdmVyc2lvbiA/ Cj4gU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8b3NzQGJ1c2Vycm9yLm5ldD4KPiBTaWduZWQt b2ZmLWJ5OiBZYW5nYm8gTHUgPHlhbmdiby5sdUBueHAuY29tPgoKTm8uIMKgVGhpcyBpc24ndCBt eSBwYXRjaCBzbyBteSBzaWdub2ZmIHNob3VsZG4ndCBiZSBvbiBpdC4KCj4gW0x1IFlhbmdiby1C NDcwOTNdIEl0J3MgYSBnb29kIGlkZWEgdG8gbW92ZSBkaWUgaW50byAuZmFtaWx5IEkgdGhpbmsu Cj4gSW4gbXkgb3BpbmlvbiwgaXQncyBiZXR0ZXIgdG8ga2VlcCBzdnIgYW5kIG5hbWUgaW4gc29j X2lkIGp1c3QgbGlrZSB5b3VyCj4gc3VnZ2VzdGlvbiBhYm92ZS4KPiA+IAo+ID4gCXsKPiA+IAkJ LnNvY19pZCA9ICJzdnI6MHg4NTQ5MDAxMCxuYW1lOlQxMDIzRSwiLAo+ID4gCQkuZmFtaWx5ID0g IlFvcklRIFQxMDI0IiwKPiA+IAl9Cj4gVGhlIHVzZXIgcHJvYmFibHkgZG9u4oCZdCBsaWtlIHRv IGxlYXJuIHRoZSBzdnIgdmFsdWUuIFdoYXQgdGhleSB3YW50IGlzIGp1c3QKPiB0byBtYXRjaCB0 aGUgc29jIHRoZXkgdXNlLgo+IEl0J3MgY29udmVuaWVudCB0byB1c2UgbmFtZStyZXYgZm9yIHRo ZW0gdG8gbWF0Y2ggYSBzb2MuCgpXaGF0IHRoZSB1c2VyIHNob3VsZCB3YW50IDk5JSBvZiB0aGUg dGltZSBpcyB0byBtYXRjaCB0aGUgZGllIChwbHVzIHJldmlzaW9uKSwKbm90IHRoZSBzb2MuCgo+ IFJlZ2FyZGluZyBzaHJpbmtpbmcgdGhlIHRhYmxlLCBJIHRoaW5rIGl0J3MgaGFyZCB0byB1c2Ug c3ZyK21hc2suIEJlY2F1c2UgSQo+IGZpbmQgbWFueSBwbGF0Zm9ybXMgdXNlIGRpZmZlcmVudCBt YXNrcy4KPiBXZSBjb3VsZG7igJl0IGtub3cgdGhlIG1hc2sgYWNjb3JkaW5nIHN2ciB2YWx1ZS4K ClRoZSBtYXNrIHdvdWxkIGJlIHBhcnQgb2YgdGhlIHRhYmxlOgoKewoJewoJCS5kaWUgPSAiVDEw MjQiLAoJCS5zdnIgPSAweDg1NDAwMDAwLAoJCS5tYXNrID0gMHhmZmYwMDAwMCwKCX0sCgl7CgkJ LmRpZSA9ICJUMTA0MCIsCgkJLnN2ciA9IDB4ODUyMDAwMDAsCgkJLm1hc2sgPSAweGZmZjAwMDAw LAoJfSwKCXsKCQkuZGllID0gIkxTMTA4OEEiLAoJCS5zdnIgPSAweDg3MDMwMDAwLAoJCS5tYXNr ID0gMHhmZmZmMDAwMCwKCX0sCgkuLi4KfQoKVGhlcmUncyBhIHNtYWxsIHJpc2sgdGhhdCB3ZSBn ZXQgdGhlIG1hc2sgd3JvbmcgYW5kIGEgZGlmZmVyZW50IGRpZSBpcyBjcmVhdGVkCnRoYXQgbWF0 Y2hlcyBhbiBleGlzdGluZyB0YWJsZSwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0b28gbGlrZWx5LCBh bmQgY2FuIGVhc2lseQpiZSBmaXhlZCB3aXRoIGEga2VybmVsIHVwZGF0ZSBpZiBpdCBoYXBwZW5z LgoKQlRXLCBhcmVuJ3QgbHMyMDgwYSBhbmQgbHMyMDg1YSB0aGUgc2FtZSBkaWU/IMKgQW5kIGlz IHRoZXJlIG5vIG5vbi1FIHZlcnNpb24Kb2YgTFMyMDgwQS9MUzIwNDBBPwoKPiA+ID4gKwlkbyB7 Cj4gPiA+ICsJCWlmICghbWF0Y2hlcy0+c29jX2lkKQo+ID4gPiArCQkJcmV0dXJuIE5VTEw7Cj4g PiA+ICsJCWlmIChnbG9iX21hdGNoKHN2cl9tYXRjaCwgbWF0Y2hlcy0+c29jX2lkKSkKPiA+ID4g KwkJCWJyZWFrOwo+ID4gPiArCX0gd2hpbGUgKG1hdGNoZXMrKyk7Cj4gPiBBcmUgeW91IGV4cGVj dGluZyAibWF0Y2hlcysrIiB0byBldmVyIGV2YWx1YXRlIGFzIGZhbHNlPwo+IFtMdSBZYW5nYm8t QjQ3MDkzXSBZZXMsIHRoaXMgaXMgdXNlZCB0byBtYXRjaCB0aGUgc29jIHdlIHVzZSBpbiBxb3Jp cV9zb2MKPiBhcnJheSB1bnRpbCBnZXR0aW5nIHRydWUuwqAKPiBXZSBuZWVkIHRvIGdldCB0aGUg bmFtZSBhbmQgZGllIGluZm9ybWF0aW9uIGRlZmluZWQgaW4gYXJyYXkuCgpJJ20gbm90IGFza2lu ZyB3aGV0aGVyIHRoZSBnbG9iX21hdGNoIHdpbGwgZXZlciByZXR1cm4gdHJ1ZS4gwqBJJ20gc2F5 aW5nIHRoYXQKIm1hdGNoZXMrKyIgd2lsbCBuZXZlciBiZWNvbWUgTlVMTC4KCj4gPiA+ICsJLyog UmVnaXN0ZXIgc29jIGRldmljZSAqLwo+ID4gPiArCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6 ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIXNvY19kZXZfYXR0 cikgewo+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCQlnb3RvIG91dF91bm1hcDsKPiA+ ID4gKwl9Cj4gPiBDb3VsZG4ndCB0aGlzIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkPwo+IFtMdSBZ YW5nYm8tQjQ3MDkzXSBEbyB5b3UgbWVhbiB3ZSBkZWZpbmUgdGhpcyBzdHJ1Y3Qgc3RhdGljYWxs eSA/Cj4gCj4gc3RhdGljIHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBzb2NfZGV2X2F0dHI7 CgpZZXMuCgo+ID4gPiArCj4gPiA+ICsJc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29j X2Rldl9hdHRyKTsKPiA+ID4gKwlpZiAoSVNfRVJSKHNvY19kZXYpKSB7Cj4gPiA+ICsJCXJldCA9 IC1FTk9ERVY7Cj4gPiBXaHkgYXJlIHlvdSBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZT8KPiBbTHUg WWFuZ2JvLUI0NzA5M10gV2hhdCBlcnJvciBjb2RlIHNob3VsZCB3ZSB1c2UgPyA6KQoKcmV0ID0g UFRSX0VSUihzb2NfZGV2KTsKCisJfQo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArb3V0Ogo+ID4g PiArCWtmcmVlKHNvY19kZXZfYXR0ci0+bWFjaGluZSk7Cj4gPiA+ICsJa2ZyZWUoc29jX2Rldl9h dHRyLT5mYW1pbHkpOwo+ID4gPiArCWtmcmVlKHNvY19kZXZfYXR0ci0+c29jX2lkKTsKPiA+ID4g KwlrZnJlZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKPiA+ID4gKwlrZnJlZShzb2NfZGV2X2F0 dHIpOwo+ID4gPiArb3V0X3VubWFwOgo+ID4gPiArCWlvdW5tYXAoZ3V0cy0+cmVncyk7Cj4gPiA+ ICtvdXRfZnJlZToKPiA+ID4gKwlrZnJlZShndXRzKTsKPiA+IGRldm0KPiBbTHUgWWFuZ2JvLUI0 NzA5M10gV2hhdCdzIHRoZSBkZXZtIG1lYW5pbmcgaGVyZSA6KQoKSWYgeW91IGFsbG9jYXRlIHRo ZXNlIHdpdGggZGV2bV9remFsbG9jKCksIGRldm1fa2FzcHJpbnRmKCksIGRldm1fa3N0cmR1cCgp LApldGMuIHRoZW4gdGhleSB3aWxsIGJlIGZyZWVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2 aWNlIGlzIHVuYm91bmQuCgo+IMKgCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gK3N0YXRpYyBpbnQg ZnNsX2d1dHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikgewo+ID4gPiArCWtm cmVlKHNvY19kZXZfYXR0ci0+bWFjaGluZSk7Cj4gPiA+ICsJa2ZyZWUoc29jX2Rldl9hdHRyLT5m YW1pbHkpOwo+ID4gPiArCWtmcmVlKHNvY19kZXZfYXR0ci0+c29jX2lkKTsKPiA+ID4gKwlrZnJl ZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKPiA+ID4gKwlrZnJlZShzb2NfZGV2X2F0dHIpOwo+ ID4gPiArCXNvY19kZXZpY2VfdW5yZWdpc3Rlcihzb2NfZGV2KTsKPiA+ID4gKwlpb3VubWFwKGd1 dHMtPnJlZ3MpOwo+ID4gPiArCWtmcmVlKGd1dHMpOwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiAr fQo+ID4gRG9uJ3QgZnJlZSB0aGUgbWVtb3J5IGJlZm9yZSB5b3UgdW5yZWdpc3RlciB0aGUgZGV2 aWNlIHRoYXQgdXNlcyBpdCAobW9vdAo+ID4gaWYgeW91IHVzZSBkZXZtKS4KPiBbTHUgWWFuZ2Jv LUI0NzA5M10gVGhlIHNvYy5jIGRyaXZlciBtZW50aW9ucyB0aGF0Lgo+IEVuc3VyZSBzb2NfZGV2 LT5hdHRyIGlzIGZyZWVkIHByaW9yIHRvIGNhbGxpbmcgc29jX2RldmljZV91bnJlZ2lzdGVyLgoK VGhhdCBjb21tZW50IGlzIHdyb25nLiDCoEZyZWVpbmcgdGhlIG1lbW9yeSBmaXJzdCBjcmVhdGVz IGEgcmFjZSBjb25kaXRpb24gdGhhdApjb3VsZCByZXN1bHQgaW4gYWNjZXNzaW5nIGZyZWVkIG1l bW9yeSwgaWYgc29tZXRoaW5nIGFjY2Vzc2VzIHRoZSBzb2MgZGV2aWNlCmluIHBhcmFsbGVsIHdp dGggdW5iaW5kaW5nLgoKLVNjb3R0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91bmRh dGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGlu Zm8vaW9tbXU= From mboxrd@z Thu Jan 1 00:00:00 1970 From: oss@buserror.net (Scott Wood) Date: Mon, 12 Sep 2016 18:25:14 -0500 Subject: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms In-Reply-To: References: <1473150503-9550-1-git-send-email-yangbo.lu@nxp.com> <1473150503-9550-6-git-send-email-yangbo.lu@nxp.com> <1473392840.30217.170.camel@buserror.net> Message-ID: <1473722714.30217.196.camel@buserror.net> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Mon, 2016-09-12 at 06:39 +0000, Y.B. Lu wrote: > Hi Scott, > > Thanks for your review :) > See my comment inline. > > > > > -----Original Message----- > > From: Scott Wood [mailto:oss at buserror.net] > > Sent: Friday, September 09, 2016 11:47 AM > > To: Y.B. Lu; linux-mmc at vger.kernel.org; ulf.hansson at linaro.org; Arnd > > Bergmann > > Cc: linuxppc-dev at lists.ozlabs.org; devicetree at vger.kernel.org; linux-arm- > > kernel at lists.infradead.org; linux-kernel at vger.kernel.org; linux- > > clk at vger.kernel.org; linux-i2c at vger.kernel.org; iommu at lists.linux- > > foundation.org; netdev at vger.kernel.org; Mark Rutland; Rob Herring; > > Russell King; Jochen Friedrich; Joerg Roedel; Claudiu Manoil; Bhupesh > > Sharma; Qiang Zhao; Kumar Gala; Santosh Shilimkar; Leo Li; X.B. Xie > > Subject: Re: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms > > > > On Tue, 2016-09-06 at 16:28 +0800, Yangbo Lu wrote: > > > > > > The global utilities block controls power management, I/O device > > > enabling, power-onreset(POR) configuration monitoring, alternate > > > function selection for multiplexed signals,and clock control. > > > > > > This patch adds a driver to manage and access global utilities block. > > > Initially only reading SVR and registering soc device are supported. > > > Other guts accesses, such as reading RCW, should eventually be moved > > > into this driver as well. > > > > > > Signed-off-by: Yangbo Lu > > > Signed-off-by: Scott Wood > > Don't put my signoff on patches that I didn't put it on > > myself. ?Definitely don't put mine *after* yours on patches that were > > last modified by you. > > > > If you want to mention that the soc_id encoding was my suggestion, then > > do so explicitly. > > > [Lu Yangbo-B47093] I found your 'signoff' on this patch at below link. > http://patchwork.ozlabs.org/patch/649211/ > > So, let me just change the order in next version ? > Signed-off-by: Scott Wood > Signed-off-by: Yangbo Lu No. ?This isn't my patch so my signoff shouldn't be on it. > [Lu Yangbo-B47093] It's a good idea to move die into .family I think. > In my opinion, it's better to keep svr and name in soc_id just like your > suggestion above. > > > > { > > .soc_id = "svr:0x85490010,name:T1023E,", > > .family = "QorIQ T1024", > > } > The user probably don?t like to learn the svr value. What they want is just > to match the soc they use. > It's convenient to use name+rev for them to match a soc. What the user should want 99% of the time is to match the die (plus revision), not the soc. > Regarding shrinking the table, I think it's hard to use svr+mask. Because I > find many platforms use different masks. > We couldn?t know the mask according svr value. The mask would be part of the table: { { .die = "T1024", .svr = 0x85400000, .mask = 0xfff00000, }, { .die = "T1040", .svr = 0x85200000, .mask = 0xfff00000, }, { .die = "LS1088A", .svr = 0x87030000, .mask = 0xffff0000, }, ... } There's a small risk that we get the mask wrong and a different die is created that matches an existing table, but it doesn't seem too likely, and can easily be fixed with a kernel update if it happens. BTW, aren't ls2080a and ls2085a the same die? ?And is there no non-E version of LS2080A/LS2040A? > > > + do { > > > + if (!matches->soc_id) > > > + return NULL; > > > + if (glob_match(svr_match, matches->soc_id)) > > > + break; > > > + } while (matches++); > > Are you expecting "matches++" to ever evaluate as false? > [Lu Yangbo-B47093] Yes, this is used to match the soc we use in qoriq_soc > array until getting true.? > We need to get the name and die information defined in array. I'm not asking whether the glob_match will ever return true. ?I'm saying that "matches++" will never become NULL. > > > + /* Register soc device */ > > > + soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); > > > + if (!soc_dev_attr) { > > > + ret = -ENOMEM; > > > + goto out_unmap; > > > + } > > Couldn't this be statically allocated? > [Lu Yangbo-B47093] Do you mean we define this struct statically ? > > static struct soc_device_attribute soc_dev_attr; Yes. > > > + > > > + soc_dev = soc_device_register(soc_dev_attr); > > > + if (IS_ERR(soc_dev)) { > > > + ret = -ENODEV; > > Why are you changing the error code? > [Lu Yangbo-B47093] What error code should we use ? :) ret = PTR_ERR(soc_dev); + } > > > + return 0; > > > +out: > > > + kfree(soc_dev_attr->machine); > > > + kfree(soc_dev_attr->family); > > > + kfree(soc_dev_attr->soc_id); > > > + kfree(soc_dev_attr->revision); > > > + kfree(soc_dev_attr); > > > +out_unmap: > > > + iounmap(guts->regs); > > > +out_free: > > > + kfree(guts); > > devm > [Lu Yangbo-B47093] What's the devm meaning here :) If you allocate these with devm_kzalloc(), devm_kasprintf(), devm_kstrdup(), etc. then they will be freed automatically when the device is unbound. > ? > > > > > > > > > > +static int fsl_guts_remove(struct platform_device *dev) { > > > + kfree(soc_dev_attr->machine); > > > + kfree(soc_dev_attr->family); > > > + kfree(soc_dev_attr->soc_id); > > > + kfree(soc_dev_attr->revision); > > > + kfree(soc_dev_attr); > > > + soc_device_unregister(soc_dev); > > > + iounmap(guts->regs); > > > + kfree(guts); > > > + return 0; > > > +} > > Don't free the memory before you unregister the device that uses it (moot > > if you use devm). > [Lu Yangbo-B47093] The soc.c driver mentions that. > Ensure soc_dev->attr is freed prior to calling soc_device_unregister. That comment is wrong. ?Freeing the memory first creates a race condition that could result in accessing freed memory, if something accesses the soc device in parallel with unbinding. -Scott From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Subject: Re: [v11, 5/8] soc: fsl: add GUTS driver for QorIQ platforms Date: Mon, 12 Sep 2016 18:25:14 -0500 Message-ID: <1473722714.30217.196.camel@buserror.net> References: <1473150503-9550-1-git-send-email-yangbo.lu@nxp.com> <1473150503-9550-6-git-send-email-yangbo.lu@nxp.com> <1473392840.30217.170.camel@buserror.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Mark Rutland , "devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Russell King , Bhupesh Sharma , "netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Santosh Shilimkar , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Jochen Friedrich , "X.B. Xie" , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , Rob Herring , "linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Claudiu Manoil , Kumar Gala , Leo Li , "linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org" , "linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" , To: "Y.B. Lu" , "linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org" , Arnd Bergmann Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org List-Id: netdev.vger.kernel.org T24gTW9uLCAyMDE2LTA5LTEyIGF0IDA2OjM5ICswMDAwLCBZLkIuIEx1IHdyb3RlOgo+IEhpIFNj b3R0LAo+IAo+IFRoYW5rcyBmb3IgeW91ciByZXZpZXcgOikKPiBTZWUgbXkgY29tbWVudCBpbmxp bmUuCj4gCj4gPiAKPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4gPiBGcm9tOiBTY290 dCBXb29kIFttYWlsdG86b3NzQGJ1c2Vycm9yLm5ldF0KPiA+IFNlbnQ6IEZyaWRheSwgU2VwdGVt YmVyIDA5LCAyMDE2IDExOjQ3IEFNCj4gPiBUbzogWS5CLiBMdTsgbGludXgtbW1jQHZnZXIua2Vy bmVsLm9yZzsgdWxmLmhhbnNzb25AbGluYXJvLm9yZzsgQXJuZAo+ID4gQmVyZ21hbm4KPiA+IENj OiBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsgZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5v cmc7IGxpbnV4LWFybS0KPiA+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC1rZXJu ZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC0KPiA+IGNsa0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4 LWkyY0B2Z2VyLmtlcm5lbC5vcmc7IGlvbW11QGxpc3RzLmxpbnV4LQo+ID4gZm91bmRhdGlvbi5v cmc7IG5ldGRldkB2Z2VyLmtlcm5lbC5vcmc7IE1hcmsgUnV0bGFuZDsgUm9iIEhlcnJpbmc7Cj4g PiBSdXNzZWxsIEtpbmc7IEpvY2hlbiBGcmllZHJpY2g7IEpvZXJnIFJvZWRlbDsgQ2xhdWRpdSBN YW5vaWw7IEJodXBlc2gKPiA+IFNoYXJtYTsgUWlhbmcgWmhhbzsgS3VtYXIgR2FsYTsgU2FudG9z aCBTaGlsaW1rYXI7IExlbyBMaTsgWC5CLiBYaWUKPiA+IFN1YmplY3Q6IFJlOiBbdjExLCA1Lzhd IHNvYzogZnNsOiBhZGQgR1VUUyBkcml2ZXIgZm9yIFFvcklRIHBsYXRmb3Jtcwo+ID4gCj4gPiBP biBUdWUsIDIwMTYtMDktMDYgYXQgMTY6MjggKzA4MDAsIFlhbmdibyBMdSB3cm90ZToKPiA+ID4g Cj4gPiA+IFRoZSBnbG9iYWwgdXRpbGl0aWVzIGJsb2NrIGNvbnRyb2xzIHBvd2VyIG1hbmFnZW1l bnQsIEkvTyBkZXZpY2UKPiA+ID4gZW5hYmxpbmcsIHBvd2VyLW9ucmVzZXQoUE9SKSBjb25maWd1 cmF0aW9uIG1vbml0b3JpbmcsIGFsdGVybmF0ZQo+ID4gPiBmdW5jdGlvbiBzZWxlY3Rpb24gZm9y IG11bHRpcGxleGVkIHNpZ25hbHMsYW5kIGNsb2NrIGNvbnRyb2wuCj4gPiA+IAo+ID4gPiBUaGlz IHBhdGNoIGFkZHMgYSBkcml2ZXIgdG8gbWFuYWdlIGFuZCBhY2Nlc3MgZ2xvYmFsIHV0aWxpdGll cyBibG9jay4KPiA+ID4gSW5pdGlhbGx5IG9ubHkgcmVhZGluZyBTVlIgYW5kIHJlZ2lzdGVyaW5n IHNvYyBkZXZpY2UgYXJlIHN1cHBvcnRlZC4KPiA+ID4gT3RoZXIgZ3V0cyBhY2Nlc3Nlcywgc3Vj aCBhcyByZWFkaW5nIFJDVywgc2hvdWxkIGV2ZW50dWFsbHkgYmUgbW92ZWQKPiA+ID4gaW50byB0 aGlzIGRyaXZlciBhcyB3ZWxsLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogWWFuZ2JvIEx1 IDx5YW5nYm8ubHVAbnhwLmNvbT4KPiA+ID4gU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8b3Nz QGJ1c2Vycm9yLm5ldD4KPiA+IERvbid0IHB1dCBteSBzaWdub2ZmIG9uIHBhdGNoZXMgdGhhdCBJ IGRpZG4ndCBwdXQgaXQgb24KPiA+IG15c2VsZi4gwqBEZWZpbml0ZWx5IGRvbid0IHB1dCBtaW5l ICphZnRlciogeW91cnMgb24gcGF0Y2hlcyB0aGF0IHdlcmUKPiA+IGxhc3QgbW9kaWZpZWQgYnkg eW91Lgo+ID4gCj4gPiBJZiB5b3Ugd2FudCB0byBtZW50aW9uIHRoYXQgdGhlIHNvY19pZCBlbmNv ZGluZyB3YXMgbXkgc3VnZ2VzdGlvbiwgdGhlbgo+ID4gZG8gc28gZXhwbGljaXRseS4KPiA+IAo+ IFtMdSBZYW5nYm8tQjQ3MDkzXSBJIGZvdW5kIHlvdXIgJ3NpZ25vZmYnIG9uIHRoaXMgcGF0Y2gg YXQgYmVsb3cgbGluay4KPiBodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvNjQ5MjEx Lwo+IAo+IFNvLCBsZXQgbWUganVzdCBjaGFuZ2UgdGhlIG9yZGVyIGluIG5leHQgdmVyc2lvbiA/ Cj4gU2lnbmVkLW9mZi1ieTogU2NvdHQgV29vZCA8b3NzQGJ1c2Vycm9yLm5ldD4KPiBTaWduZWQt b2ZmLWJ5OiBZYW5nYm8gTHUgPHlhbmdiby5sdUBueHAuY29tPgoKTm8uIMKgVGhpcyBpc24ndCBt eSBwYXRjaCBzbyBteSBzaWdub2ZmIHNob3VsZG4ndCBiZSBvbiBpdC4KCj4gW0x1IFlhbmdiby1C NDcwOTNdIEl0J3MgYSBnb29kIGlkZWEgdG8gbW92ZSBkaWUgaW50byAuZmFtaWx5IEkgdGhpbmsu Cj4gSW4gbXkgb3BpbmlvbiwgaXQncyBiZXR0ZXIgdG8ga2VlcCBzdnIgYW5kIG5hbWUgaW4gc29j X2lkIGp1c3QgbGlrZSB5b3VyCj4gc3VnZ2VzdGlvbiBhYm92ZS4KPiA+IAo+ID4gCXsKPiA+IAkJ LnNvY19pZCA9ICJzdnI6MHg4NTQ5MDAxMCxuYW1lOlQxMDIzRSwiLAo+ID4gCQkuZmFtaWx5ID0g IlFvcklRIFQxMDI0IiwKPiA+IAl9Cj4gVGhlIHVzZXIgcHJvYmFibHkgZG9u4oCZdCBsaWtlIHRv IGxlYXJuIHRoZSBzdnIgdmFsdWUuIFdoYXQgdGhleSB3YW50IGlzIGp1c3QKPiB0byBtYXRjaCB0 aGUgc29jIHRoZXkgdXNlLgo+IEl0J3MgY29udmVuaWVudCB0byB1c2UgbmFtZStyZXYgZm9yIHRo ZW0gdG8gbWF0Y2ggYSBzb2MuCgpXaGF0IHRoZSB1c2VyIHNob3VsZCB3YW50IDk5JSBvZiB0aGUg dGltZSBpcyB0byBtYXRjaCB0aGUgZGllIChwbHVzIHJldmlzaW9uKSwKbm90IHRoZSBzb2MuCgo+ IFJlZ2FyZGluZyBzaHJpbmtpbmcgdGhlIHRhYmxlLCBJIHRoaW5rIGl0J3MgaGFyZCB0byB1c2Ug c3ZyK21hc2suIEJlY2F1c2UgSQo+IGZpbmQgbWFueSBwbGF0Zm9ybXMgdXNlIGRpZmZlcmVudCBt YXNrcy4KPiBXZSBjb3VsZG7igJl0IGtub3cgdGhlIG1hc2sgYWNjb3JkaW5nIHN2ciB2YWx1ZS4K ClRoZSBtYXNrIHdvdWxkIGJlIHBhcnQgb2YgdGhlIHRhYmxlOgoKewoJewoJCS5kaWUgPSAiVDEw MjQiLAoJCS5zdnIgPSAweDg1NDAwMDAwLAoJCS5tYXNrID0gMHhmZmYwMDAwMCwKCX0sCgl7CgkJ LmRpZSA9ICJUMTA0MCIsCgkJLnN2ciA9IDB4ODUyMDAwMDAsCgkJLm1hc2sgPSAweGZmZjAwMDAw LAoJfSwKCXsKCQkuZGllID0gIkxTMTA4OEEiLAoJCS5zdnIgPSAweDg3MDMwMDAwLAoJCS5tYXNr ID0gMHhmZmZmMDAwMCwKCX0sCgkuLi4KfQoKVGhlcmUncyBhIHNtYWxsIHJpc2sgdGhhdCB3ZSBn ZXQgdGhlIG1hc2sgd3JvbmcgYW5kIGEgZGlmZmVyZW50IGRpZSBpcyBjcmVhdGVkCnRoYXQgbWF0 Y2hlcyBhbiBleGlzdGluZyB0YWJsZSwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0b28gbGlrZWx5LCBh bmQgY2FuIGVhc2lseQpiZSBmaXhlZCB3aXRoIGEga2VybmVsIHVwZGF0ZSBpZiBpdCBoYXBwZW5z LgoKQlRXLCBhcmVuJ3QgbHMyMDgwYSBhbmQgbHMyMDg1YSB0aGUgc2FtZSBkaWU/IMKgQW5kIGlz IHRoZXJlIG5vIG5vbi1FIHZlcnNpb24Kb2YgTFMyMDgwQS9MUzIwNDBBPwoKPiA+ID4gKwlkbyB7 Cj4gPiA+ICsJCWlmICghbWF0Y2hlcy0+c29jX2lkKQo+ID4gPiArCQkJcmV0dXJuIE5VTEw7Cj4g PiA+ICsJCWlmIChnbG9iX21hdGNoKHN2cl9tYXRjaCwgbWF0Y2hlcy0+c29jX2lkKSkKPiA+ID4g KwkJCWJyZWFrOwo+ID4gPiArCX0gd2hpbGUgKG1hdGNoZXMrKyk7Cj4gPiBBcmUgeW91IGV4cGVj dGluZyAibWF0Y2hlcysrIiB0byBldmVyIGV2YWx1YXRlIGFzIGZhbHNlPwo+IFtMdSBZYW5nYm8t QjQ3MDkzXSBZZXMsIHRoaXMgaXMgdXNlZCB0byBtYXRjaCB0aGUgc29jIHdlIHVzZSBpbiBxb3Jp cV9zb2MKPiBhcnJheSB1bnRpbCBnZXR0aW5nIHRydWUuwqAKPiBXZSBuZWVkIHRvIGdldCB0aGUg bmFtZSBhbmQgZGllIGluZm9ybWF0aW9uIGRlZmluZWQgaW4gYXJyYXkuCgpJJ20gbm90IGFza2lu ZyB3aGV0aGVyIHRoZSBnbG9iX21hdGNoIHdpbGwgZXZlciByZXR1cm4gdHJ1ZS4gwqBJJ20gc2F5 aW5nIHRoYXQKIm1hdGNoZXMrKyIgd2lsbCBuZXZlciBiZWNvbWUgTlVMTC4KCj4gPiA+ICsJLyog UmVnaXN0ZXIgc29jIGRldmljZSAqLwo+ID4gPiArCXNvY19kZXZfYXR0ciA9IGt6YWxsb2Moc2l6 ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIXNvY19kZXZfYXR0 cikgewo+ID4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCQlnb3RvIG91dF91bm1hcDsKPiA+ ID4gKwl9Cj4gPiBDb3VsZG4ndCB0aGlzIGJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkPwo+IFtMdSBZ YW5nYm8tQjQ3MDkzXSBEbyB5b3UgbWVhbiB3ZSBkZWZpbmUgdGhpcyBzdHJ1Y3Qgc3RhdGljYWxs eSA/Cj4gCj4gc3RhdGljIHN0cnVjdCBzb2NfZGV2aWNlX2F0dHJpYnV0ZSBzb2NfZGV2X2F0dHI7 CgpZZXMuCgo+ID4gPiArCj4gPiA+ICsJc29jX2RldiA9IHNvY19kZXZpY2VfcmVnaXN0ZXIoc29j X2Rldl9hdHRyKTsKPiA+ID4gKwlpZiAoSVNfRVJSKHNvY19kZXYpKSB7Cj4gPiA+ICsJCXJldCA9 IC1FTk9ERVY7Cj4gPiBXaHkgYXJlIHlvdSBjaGFuZ2luZyB0aGUgZXJyb3IgY29kZT8KPiBbTHUg WWFuZ2JvLUI0NzA5M10gV2hhdCBlcnJvciBjb2RlIHNob3VsZCB3ZSB1c2UgPyA6KQoKcmV0ID0g UFRSX0VSUihzb2NfZGV2KTsKCisJfQo+ID4gPiArCXJldHVybiAwOwo+ID4gPiArb3V0Ogo+ID4g PiArCWtmcmVlKHNvY19kZXZfYXR0ci0+bWFjaGluZSk7Cj4gPiA+ICsJa2ZyZWUoc29jX2Rldl9h dHRyLT5mYW1pbHkpOwo+ID4gPiArCWtmcmVlKHNvY19kZXZfYXR0ci0+c29jX2lkKTsKPiA+ID4g KwlrZnJlZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKPiA+ID4gKwlrZnJlZShzb2NfZGV2X2F0 dHIpOwo+ID4gPiArb3V0X3VubWFwOgo+ID4gPiArCWlvdW5tYXAoZ3V0cy0+cmVncyk7Cj4gPiA+ ICtvdXRfZnJlZToKPiA+ID4gKwlrZnJlZShndXRzKTsKPiA+IGRldm0KPiBbTHUgWWFuZ2JvLUI0 NzA5M10gV2hhdCdzIHRoZSBkZXZtIG1lYW5pbmcgaGVyZSA6KQoKSWYgeW91IGFsbG9jYXRlIHRo ZXNlIHdpdGggZGV2bV9remFsbG9jKCksIGRldm1fa2FzcHJpbnRmKCksIGRldm1fa3N0cmR1cCgp LApldGMuIHRoZW4gdGhleSB3aWxsIGJlIGZyZWVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZGV2 aWNlIGlzIHVuYm91bmQuCgo+IMKgCj4gPiAKPiA+IAo+ID4gPiAKPiA+ID4gK3N0YXRpYyBpbnQg ZnNsX2d1dHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikgewo+ID4gPiArCWtm cmVlKHNvY19kZXZfYXR0ci0+bWFjaGluZSk7Cj4gPiA+ICsJa2ZyZWUoc29jX2Rldl9hdHRyLT5m YW1pbHkpOwo+ID4gPiArCWtmcmVlKHNvY19kZXZfYXR0ci0+c29jX2lkKTsKPiA+ID4gKwlrZnJl ZShzb2NfZGV2X2F0dHItPnJldmlzaW9uKTsKPiA+ID4gKwlrZnJlZShzb2NfZGV2X2F0dHIpOwo+ ID4gPiArCXNvY19kZXZpY2VfdW5yZWdpc3Rlcihzb2NfZGV2KTsKPiA+ID4gKwlpb3VubWFwKGd1 dHMtPnJlZ3MpOwo+ID4gPiArCWtmcmVlKGd1dHMpOwo+ID4gPiArCXJldHVybiAwOwo+ID4gPiAr fQo+ID4gRG9uJ3QgZnJlZSB0aGUgbWVtb3J5IGJlZm9yZSB5b3UgdW5yZWdpc3RlciB0aGUgZGV2 aWNlIHRoYXQgdXNlcyBpdCAobW9vdAo+ID4gaWYgeW91IHVzZSBkZXZtKS4KPiBbTHUgWWFuZ2Jv LUI0NzA5M10gVGhlIHNvYy5jIGRyaXZlciBtZW50aW9ucyB0aGF0Lgo+IEVuc3VyZSBzb2NfZGV2 LT5hdHRyIGlzIGZyZWVkIHByaW9yIHRvIGNhbGxpbmcgc29jX2RldmljZV91bnJlZ2lzdGVyLgoK VGhhdCBjb21tZW50IGlzIHdyb25nLiDCoEZyZWVpbmcgdGhlIG1lbW9yeSBmaXJzdCBjcmVhdGVz IGEgcmFjZSBjb25kaXRpb24gdGhhdApjb3VsZCByZXN1bHQgaW4gYWNjZXNzaW5nIGZyZWVkIG1l bW9yeSwgaWYgc29tZXRoaW5nIGFjY2Vzc2VzIHRoZSBzb2MgZGV2aWNlCmluIHBhcmFsbGVsIHdp dGggdW5iaW5kaW5nLgoKLVNjb3R0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91bmRh dGlvbi5vcmcKaHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGlu Zm8vaW9tbXU=