From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <1473805463.30217.206.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: Tue, 13 Sep 2016 17:24:23 -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> <1473722714.30217.196.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-kernel-owner@vger.kernel.org List-ID: On Tue, 2016-09-13 at 07:23 +0000, Y.B. Lu wrote: > > > > > > -----Original Message----- > > From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc- > > owner@vger.kernel.org] On Behalf Of Scott Wood > > Sent: Tuesday, September 13, 2016 7:25 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 > > > > BTW, aren't ls2080a and ls2085a the same die?  And is there no non-E > > version of LS2080A/LS2040A? > [Lu Yangbo-B47093] I checked all the svr values in chip errata doc "Revision > level to part marking cross-reference" table. > I found ls2080a and ls2085a were in two separate doc. And I didn’t find non- > E version of LS2080A/LS2040A in chip errata doc. > Do you know is there any other doc we can confirm this? No.  Traditionally we've always had E and non-E versions of each chip, but I have no knowledge of whether that has changed (I do note that the way that E- status is indicated in SVR has changed). But please label LS2080A and LS2085A as the same die (or provide strong evidence that they are not). > > > > > > > > > > > > > > > > > > + 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. > [Lu Yangbo-B47093] The matches++ will never become NULL while it will return > NULL after matching for all the members in array. "matches++" will never "return NULL".  It's just an incrementing address.  It won't be null until you wrap around the address space, and even if the other loop terminators never kicked in you'd crash long before that happens. Please rewrite the loop as something like: while (matches->soc_id) { if (glob_match(...)) return matches; matches++; } return 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. > > > [Lu Yangbo-B47093] It's ok to define it statically. Is there any need to do > that? It's simpler. -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: Tue, 13 Sep 2016 17:24:23 -0500 Message-ID: <1473805463.30217.206.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> <1473722714.30217.196.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 T24gVHVlLCAyMDE2LTA5LTEzIGF0IDA3OjIzICswMDAwLCBZLkIuIEx1IHdyb3RlOgo+ID4gCgoK PiA+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IGxpbnV4LW1tYy1v d25lckB2Z2VyLmtlcm5lbC5vcmcgW21haWx0bzpsaW51eC1tbWMtCj4gPiBvd25lckB2Z2VyLmtl cm5lbC5vcmddIE9uIEJlaGFsZiBPZiBTY290dCBXb29kCj4gPiBTZW50OiBUdWVzZGF5LCBTZXB0 ZW1iZXIgMTMsIDIwMTYgNzoyNSBBTQo+ID4gVG86IFkuQi4gTHU7IGxpbnV4LW1tY0B2Z2VyLmtl cm5lbC5vcmc7IHVsZi5oYW5zc29uQGxpbmFyby5vcmc7IEFybmQKPiA+IEJlcmdtYW5uCj4gPiBD YzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwu b3JnOyBsaW51eC1hcm0tCj4gPiBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgbGludXgtCj4gPiBjbGtAdmdlci5rZXJuZWwub3JnOyBsaW51 eC1pMmNAdmdlci5rZXJuZWwub3JnOyBpb21tdUBsaXN0cy5saW51eC0KPiA+IGZvdW5kYXRpb24u b3JnOyBuZXRkZXZAdmdlci5rZXJuZWwub3JnOyBNYXJrIFJ1dGxhbmQ7IFJvYiBIZXJyaW5nOwo+ ID4gUnVzc2VsbCBLaW5nOyBKb2NoZW4gRnJpZWRyaWNoOyBKb2VyZyBSb2VkZWw7IENsYXVkaXUg TWFub2lsOyBCaHVwZXNoCj4gPiBTaGFybWE7IFFpYW5nIFpoYW87IEt1bWFyIEdhbGE7IFNhbnRv c2ggU2hpbGlta2FyOyBMZW8gTGk7IFguQi4gWGllCj4gPiBTdWJqZWN0OiBSZTogW3YxMSwgNS84 XSBzb2M6IGZzbDogYWRkIEdVVFMgZHJpdmVyIGZvciBRb3JJUSBwbGF0Zm9ybXMKPiA+IAo+ID4g QlRXLCBhcmVuJ3QgbHMyMDgwYSBhbmQgbHMyMDg1YSB0aGUgc2FtZSBkaWU/IMKgQW5kIGlzIHRo ZXJlIG5vIG5vbi1FCj4gPiB2ZXJzaW9uIG9mIExTMjA4MEEvTFMyMDQwQT8KPiBbTHUgWWFuZ2Jv LUI0NzA5M10gSSBjaGVja2VkIGFsbCB0aGUgc3ZyIHZhbHVlcyBpbiBjaGlwIGVycmF0YSBkb2Mg IlJldmlzaW9uCj4gbGV2ZWwgdG8gcGFydCBtYXJraW5nIGNyb3NzLXJlZmVyZW5jZSIgdGFibGUu Cj4gSSBmb3VuZCBsczIwODBhIGFuZCBsczIwODVhIHdlcmUgaW4gdHdvIHNlcGFyYXRlIGRvYy4g QW5kIEkgZGlkbuKAmXQgZmluZCBub24tCj4gRSB2ZXJzaW9uIG9mIExTMjA4MEEvTFMyMDQwQSBp biBjaGlwIGVycmF0YSBkb2MuCj4gRG8geW91IGtub3cgaXMgdGhlcmUgYW55IG90aGVyIGRvYyB3 ZSBjYW4gY29uZmlybSB0aGlzPwoKTm8uIMKgVHJhZGl0aW9uYWxseSB3ZSd2ZSBhbHdheXMgaGFk IEUgYW5kIG5vbi1FIHZlcnNpb25zIG9mIGVhY2ggY2hpcCwgYnV0IEkKaGF2ZSBubyBrbm93bGVk Z2Ugb2Ygd2hldGhlciB0aGF0IGhhcyBjaGFuZ2VkIChJIGRvIG5vdGUgdGhhdCB0aGUgd2F5IHRo YXQgRS0Kc3RhdHVzIGlzIGluZGljYXRlZCBpbiBTVlIgaGFzIGNoYW5nZWQpLgoKQnV0IHBsZWFz ZSBsYWJlbCBMUzIwODBBIGFuZCBMUzIwODVBIGFzIHRoZSBzYW1lIGRpZSAob3IgcHJvdmlkZSBz dHJvbmcKZXZpZGVuY2UgdGhhdCB0aGV5IGFyZSBub3QpLgoKPiAKPiA+IAo+ID4gCj4gPiA+IAo+ ID4gPiA+ID4gCj4gPiA+ID4gPiArCWRvIHsKPiA+ID4gPiA+ICsJCWlmICghbWF0Y2hlcy0+c29j X2lkKQo+ID4gPiA+ID4gKwkJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gKwkJaWYgKGdsb2JfbWF0 Y2goc3ZyX21hdGNoLCBtYXRjaGVzLT5zb2NfaWQpKQo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4g PiA+ID4gKwl9IHdoaWxlIChtYXRjaGVzKyspOwo+ID4gPiA+IEFyZSB5b3UgZXhwZWN0aW5nICJt YXRjaGVzKysiIHRvIGV2ZXIgZXZhbHVhdGUgYXMgZmFsc2U/Cj4gPiA+IFtMdSBZYW5nYm8tQjQ3 MDkzXSBZZXMsIHRoaXMgaXMgdXNlZCB0byBtYXRjaCB0aGUgc29jIHdlIHVzZSBpbgo+ID4gPiBx b3JpcV9zb2MgYXJyYXkgdW50aWwgZ2V0dGluZyB0cnVlLgo+ID4gPiBXZSBuZWVkIHRvIGdldCB0 aGUgbmFtZSBhbmQgZGllIGluZm9ybWF0aW9uIGRlZmluZWQgaW4gYXJyYXkuCj4gPiBJJ20gbm90 IGFza2luZyB3aGV0aGVyIHRoZSBnbG9iX21hdGNoIHdpbGwgZXZlciByZXR1cm4gdHJ1ZS4gwqBJ J20gc2F5aW5nCj4gPiB0aGF0ICJtYXRjaGVzKysiIHdpbGwgbmV2ZXIgYmVjb21lIE5VTEwuCj4g W0x1IFlhbmdiby1CNDcwOTNdIFRoZSBtYXRjaGVzKysgd2lsbCBuZXZlciBiZWNvbWUgTlVMTCB3 aGlsZSBpdCB3aWxsIHJldHVybgo+IE5VTEwgYWZ0ZXIgbWF0Y2hpbmcgZm9yIGFsbCB0aGUgbWVt YmVycyBpbiBhcnJheS4KCiJtYXRjaGVzKysiIHdpbGwgbmV2ZXIgInJldHVybiBOVUxMIi4gwqBJ dCdzIGp1c3QgYW4gaW5jcmVtZW50aW5nIGFkZHJlc3MuIMKgSXQKd29uJ3QgYmUgbnVsbCB1bnRp bCB5b3Ugd3JhcCBhcm91bmQgdGhlIGFkZHJlc3Mgc3BhY2UsIGFuZCBldmVuIGlmIHRoZSBvdGhl cgpsb29wIHRlcm1pbmF0b3JzIG5ldmVyIGtpY2tlZCBpbiB5b3UnZCBjcmFzaCBsb25nIGJlZm9y ZSB0aGF0IGhhcHBlbnMuCgpQbGVhc2UgcmV3cml0ZSB0aGUgbG9vcCBhcyBzb21ldGhpbmcgbGlr ZToKCgl3aGlsZSAobWF0Y2hlcy0+c29jX2lkKSB7CgkJaWYgKGdsb2JfbWF0Y2goLi4uKSkKCQkJ cmV0dXJuIG1hdGNoZXM7CgoJCW1hdGNoZXMrKzsKCX0KCglyZXR1cm4gTlVMTDsKCgo+ID4gPiA+ ID4gKwkvKiBSZWdpc3RlciBzb2MgZGV2aWNlICovCj4gPiA+ID4gPiArCXNvY19kZXZfYXR0ciA9 IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJ aWYgKCFzb2NfZGV2X2F0dHIpIHsKPiA+ID4gPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4gPiA+ID4g PiArCQlnb3RvIG91dF91bm1hcDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+IENvdWxkbid0IHRoaXMg YmUgc3RhdGljYWxseSBhbGxvY2F0ZWQ/Cj4gPiA+IFtMdSBZYW5nYm8tQjQ3MDkzXSBEbyB5b3Ug bWVhbiB3ZSBkZWZpbmUgdGhpcyBzdHJ1Y3Qgc3RhdGljYWxseSA/Cj4gPiA+IAo+ID4gPiBzdGF0 aWMgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHNvY19kZXZfYXR0cjsKPiA+IFllcy4KPiA+ IAo+IFtMdSBZYW5nYm8tQjQ3MDkzXSBJdCdzIG9rIHRvIGRlZmluZSBpdCBzdGF0aWNhbGx5LiBJ cyB0aGVyZSBhbnkgbmVlZCB0byBkbwo+IHRoYXQ/CgpJdCdzIHNpbXBsZXIuCgotU2NvdHQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxp bmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ== From mboxrd@z Thu Jan 1 00:00:00 1970 From: oss@buserror.net (Scott Wood) Date: Tue, 13 Sep 2016 17:24:23 -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> <1473722714.30217.196.camel@buserror.net> Message-ID: <1473805463.30217.206.camel@buserror.net> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, 2016-09-13 at 07:23 +0000, Y.B. Lu wrote: > > > > > > -----Original Message----- > > From: linux-mmc-owner at vger.kernel.org [mailto:linux-mmc- > > owner at vger.kernel.org] On Behalf Of Scott Wood > > Sent: Tuesday, September 13, 2016 7:25 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 > > > > BTW, aren't ls2080a and ls2085a the same die? ?And is there no non-E > > version of LS2080A/LS2040A? > [Lu Yangbo-B47093] I checked all the svr values in chip errata doc "Revision > level to part marking cross-reference" table. > I found ls2080a and ls2085a were in two separate doc. And I didn?t find non- > E version of LS2080A/LS2040A in chip errata doc. > Do you know is there any other doc we can confirm this? No. ?Traditionally we've always had E and non-E versions of each chip, but I have no knowledge of whether that has changed (I do note that the way that E- status is indicated in SVR has changed). But please label LS2080A and LS2085A as the same die (or provide strong evidence that they are not). > > > > > > > > > > > > > > > > > > + 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. > [Lu Yangbo-B47093] The matches++ will never become NULL while it will return > NULL after matching for all the members in array. "matches++" will never "return NULL". ?It's just an incrementing address. ?It won't be null until you wrap around the address space, and even if the other loop terminators never kicked in you'd crash long before that happens. Please rewrite the loop as something like: while (matches->soc_id) { if (glob_match(...)) return matches; matches++; } return 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. > > > [Lu Yangbo-B47093] It's ok to define it statically. Is there any need to do > that? It's simpler. -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: Tue, 13 Sep 2016 17:24:23 -0500 Message-ID: <1473805463.30217.206.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> <1473722714.30217.196.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 T24gVHVlLCAyMDE2LTA5LTEzIGF0IDA3OjIzICswMDAwLCBZLkIuIEx1IHdyb3RlOgo+ID4gCgoK PiA+IAo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+IEZyb206IGxpbnV4LW1tYy1v d25lckB2Z2VyLmtlcm5lbC5vcmcgW21haWx0bzpsaW51eC1tbWMtCj4gPiBvd25lckB2Z2VyLmtl cm5lbC5vcmddIE9uIEJlaGFsZiBPZiBTY290dCBXb29kCj4gPiBTZW50OiBUdWVzZGF5LCBTZXB0 ZW1iZXIgMTMsIDIwMTYgNzoyNSBBTQo+ID4gVG86IFkuQi4gTHU7IGxpbnV4LW1tY0B2Z2VyLmtl cm5lbC5vcmc7IHVsZi5oYW5zc29uQGxpbmFyby5vcmc7IEFybmQKPiA+IEJlcmdtYW5uCj4gPiBD YzogbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwu b3JnOyBsaW51eC1hcm0tCj4gPiBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgta2Vy bmVsQHZnZXIua2VybmVsLm9yZzsgbGludXgtCj4gPiBjbGtAdmdlci5rZXJuZWwub3JnOyBsaW51 eC1pMmNAdmdlci5rZXJuZWwub3JnOyBpb21tdUBsaXN0cy5saW51eC0KPiA+IGZvdW5kYXRpb24u b3JnOyBuZXRkZXZAdmdlci5rZXJuZWwub3JnOyBNYXJrIFJ1dGxhbmQ7IFJvYiBIZXJyaW5nOwo+ ID4gUnVzc2VsbCBLaW5nOyBKb2NoZW4gRnJpZWRyaWNoOyBKb2VyZyBSb2VkZWw7IENsYXVkaXUg TWFub2lsOyBCaHVwZXNoCj4gPiBTaGFybWE7IFFpYW5nIFpoYW87IEt1bWFyIEdhbGE7IFNhbnRv c2ggU2hpbGlta2FyOyBMZW8gTGk7IFguQi4gWGllCj4gPiBTdWJqZWN0OiBSZTogW3YxMSwgNS84 XSBzb2M6IGZzbDogYWRkIEdVVFMgZHJpdmVyIGZvciBRb3JJUSBwbGF0Zm9ybXMKPiA+IAo+ID4g QlRXLCBhcmVuJ3QgbHMyMDgwYSBhbmQgbHMyMDg1YSB0aGUgc2FtZSBkaWU/IMKgQW5kIGlzIHRo ZXJlIG5vIG5vbi1FCj4gPiB2ZXJzaW9uIG9mIExTMjA4MEEvTFMyMDQwQT8KPiBbTHUgWWFuZ2Jv LUI0NzA5M10gSSBjaGVja2VkIGFsbCB0aGUgc3ZyIHZhbHVlcyBpbiBjaGlwIGVycmF0YSBkb2Mg IlJldmlzaW9uCj4gbGV2ZWwgdG8gcGFydCBtYXJraW5nIGNyb3NzLXJlZmVyZW5jZSIgdGFibGUu Cj4gSSBmb3VuZCBsczIwODBhIGFuZCBsczIwODVhIHdlcmUgaW4gdHdvIHNlcGFyYXRlIGRvYy4g QW5kIEkgZGlkbuKAmXQgZmluZCBub24tCj4gRSB2ZXJzaW9uIG9mIExTMjA4MEEvTFMyMDQwQSBp biBjaGlwIGVycmF0YSBkb2MuCj4gRG8geW91IGtub3cgaXMgdGhlcmUgYW55IG90aGVyIGRvYyB3 ZSBjYW4gY29uZmlybSB0aGlzPwoKTm8uIMKgVHJhZGl0aW9uYWxseSB3ZSd2ZSBhbHdheXMgaGFk IEUgYW5kIG5vbi1FIHZlcnNpb25zIG9mIGVhY2ggY2hpcCwgYnV0IEkKaGF2ZSBubyBrbm93bGVk Z2Ugb2Ygd2hldGhlciB0aGF0IGhhcyBjaGFuZ2VkIChJIGRvIG5vdGUgdGhhdCB0aGUgd2F5IHRo YXQgRS0Kc3RhdHVzIGlzIGluZGljYXRlZCBpbiBTVlIgaGFzIGNoYW5nZWQpLgoKQnV0IHBsZWFz ZSBsYWJlbCBMUzIwODBBIGFuZCBMUzIwODVBIGFzIHRoZSBzYW1lIGRpZSAob3IgcHJvdmlkZSBz dHJvbmcKZXZpZGVuY2UgdGhhdCB0aGV5IGFyZSBub3QpLgoKPiAKPiA+IAo+ID4gCj4gPiA+IAo+ ID4gPiA+ID4gCj4gPiA+ID4gPiArCWRvIHsKPiA+ID4gPiA+ICsJCWlmICghbWF0Y2hlcy0+c29j X2lkKQo+ID4gPiA+ID4gKwkJCXJldHVybiBOVUxMOwo+ID4gPiA+ID4gKwkJaWYgKGdsb2JfbWF0 Y2goc3ZyX21hdGNoLCBtYXRjaGVzLT5zb2NfaWQpKQo+ID4gPiA+ID4gKwkJCWJyZWFrOwo+ID4g PiA+ID4gKwl9IHdoaWxlIChtYXRjaGVzKyspOwo+ID4gPiA+IEFyZSB5b3UgZXhwZWN0aW5nICJt YXRjaGVzKysiIHRvIGV2ZXIgZXZhbHVhdGUgYXMgZmFsc2U/Cj4gPiA+IFtMdSBZYW5nYm8tQjQ3 MDkzXSBZZXMsIHRoaXMgaXMgdXNlZCB0byBtYXRjaCB0aGUgc29jIHdlIHVzZSBpbgo+ID4gPiBx b3JpcV9zb2MgYXJyYXkgdW50aWwgZ2V0dGluZyB0cnVlLgo+ID4gPiBXZSBuZWVkIHRvIGdldCB0 aGUgbmFtZSBhbmQgZGllIGluZm9ybWF0aW9uIGRlZmluZWQgaW4gYXJyYXkuCj4gPiBJJ20gbm90 IGFza2luZyB3aGV0aGVyIHRoZSBnbG9iX21hdGNoIHdpbGwgZXZlciByZXR1cm4gdHJ1ZS4gwqBJ J20gc2F5aW5nCj4gPiB0aGF0ICJtYXRjaGVzKysiIHdpbGwgbmV2ZXIgYmVjb21lIE5VTEwuCj4g W0x1IFlhbmdiby1CNDcwOTNdIFRoZSBtYXRjaGVzKysgd2lsbCBuZXZlciBiZWNvbWUgTlVMTCB3 aGlsZSBpdCB3aWxsIHJldHVybgo+IE5VTEwgYWZ0ZXIgbWF0Y2hpbmcgZm9yIGFsbCB0aGUgbWVt YmVycyBpbiBhcnJheS4KCiJtYXRjaGVzKysiIHdpbGwgbmV2ZXIgInJldHVybiBOVUxMIi4gwqBJ dCdzIGp1c3QgYW4gaW5jcmVtZW50aW5nIGFkZHJlc3MuIMKgSXQKd29uJ3QgYmUgbnVsbCB1bnRp bCB5b3Ugd3JhcCBhcm91bmQgdGhlIGFkZHJlc3Mgc3BhY2UsIGFuZCBldmVuIGlmIHRoZSBvdGhl cgpsb29wIHRlcm1pbmF0b3JzIG5ldmVyIGtpY2tlZCBpbiB5b3UnZCBjcmFzaCBsb25nIGJlZm9y ZSB0aGF0IGhhcHBlbnMuCgpQbGVhc2UgcmV3cml0ZSB0aGUgbG9vcCBhcyBzb21ldGhpbmcgbGlr ZToKCgl3aGlsZSAobWF0Y2hlcy0+c29jX2lkKSB7CgkJaWYgKGdsb2JfbWF0Y2goLi4uKSkKCQkJ cmV0dXJuIG1hdGNoZXM7CgoJCW1hdGNoZXMrKzsKCX0KCglyZXR1cm4gTlVMTDsKCgo+ID4gPiA+ ID4gKwkvKiBSZWdpc3RlciBzb2MgZGV2aWNlICovCj4gPiA+ID4gPiArCXNvY19kZXZfYXR0ciA9 IGt6YWxsb2Moc2l6ZW9mKCpzb2NfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKPiA+ID4gPiA+ICsJ aWYgKCFzb2NfZGV2X2F0dHIpIHsKPiA+ID4gPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4gPiA+ID4g PiArCQlnb3RvIG91dF91bm1hcDsKPiA+ID4gPiA+ICsJfQo+ID4gPiA+IENvdWxkbid0IHRoaXMg YmUgc3RhdGljYWxseSBhbGxvY2F0ZWQ/Cj4gPiA+IFtMdSBZYW5nYm8tQjQ3MDkzXSBEbyB5b3Ug bWVhbiB3ZSBkZWZpbmUgdGhpcyBzdHJ1Y3Qgc3RhdGljYWxseSA/Cj4gPiA+IAo+ID4gPiBzdGF0 aWMgc3RydWN0IHNvY19kZXZpY2VfYXR0cmlidXRlIHNvY19kZXZfYXR0cjsKPiA+IFllcy4KPiA+ IAo+IFtMdSBZYW5nYm8tQjQ3MDkzXSBJdCdzIG9rIHRvIGRlZmluZSBpdCBzdGF0aWNhbGx5LiBJ cyB0aGVyZSBhbnkgbmVlZCB0byBkbwo+IHRoYXQ/CgpJdCdzIHNpbXBsZXIuCgotU2NvdHQKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11IG1haWxp bmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ==