From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC PATCH 1/6] spi: Extend the core to ease integration of SPI memory controllers Date: Mon, 5 Mar 2018 14:47:02 +0100 Message-ID: <20180305144702.0afd663e@bbrezillon> References: <20180205232120.5851-1-boris.brezillon@bootlin.com> <20180205232120.5851-2-boris.brezillon@bootlin.com> <20180305100025.3b25ae3d@bbrezillon> <7314a397-2821-ceb8-a9ff-f14d0dd2a176@wedev4u.fr> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Boris Brezillon , Yogesh Gaur , Vignesh R , Kamal Dasu , Richard Weinberger , linux-spi@vger.kernel.org, Peter Pan , Marek Vasut , Frieder Schrempf , Mark Brown , linux-mtd@lists.infradead.org, =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , Sourav Poddar , Brian Norris , David Woodhouse To: Cyrille Pitchen Return-path: In-Reply-To: <7314a397-2821-ceb8-a9ff-f14d0dd2a176@wedev4u.fr> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org List-Id: linux-spi.vger.kernel.org T24gTW9uLCA1IE1hciAyMDE4IDE0OjAxOjU5ICswMTAwCkN5cmlsbGUgUGl0Y2hlbiA8Y3lyaWxs ZS5waXRjaGVuQHdlZGV2NHUuZnI+IHdyb3RlOgoKPiBIaSBCb3JpcywKPiAKPiBMZSAwNS8wMy8y MDE4IMOgIDEwOjAwLCBCb3JpcyBCcmV6aWxsb24gYSDDqWNyaXTCoDoKPiA+IEhlbGxvIEN5cmls bGUsCj4gPiAKPiA+IE9uIFN1biwgNCBNYXIgMjAxOCAyMjoxNToyMCArMDEwMAo+ID4gQ3lyaWxs ZSBQaXRjaGVuIDxjeXJpbGxlLnBpdGNoZW5Ad2VkZXY0dS5mcj4gd3JvdGU6Cj4gPiAgIAo+ID4+ PiArCj4gPj4+ICtzdGF0aWMgaW50IHNwaV9jaGVja19idXN3aWR0aF9yZXEoc3RydWN0IHNwaV9t ZW0gKm1lbSwgdTggYnVzd2lkdGgsIGJvb2wgdHgpCj4gPj4+ICt7Cj4gPj4+ICsJdTMyIG1vZGUg PSBtZW0tPnNwaS0+bW9kZTsKPiA+Pj4gKwo+ID4+PiArCXN3aXRjaCAoYnVzd2lkdGgpIHsKPiA+ Pj4gKwljYXNlIDE6Cj4gPj4+ICsJCXJldHVybiAwOwo+ID4+PiArCj4gPj4+ICsJY2FzZSAyOgo+ ID4+PiArCQlpZiAoKHR4ICYmIChtb2RlICYgKFNQSV9UWF9EVUFMIHwgU1BJX1RYX1FVQUQpKSkg fHwKPiA+Pj4gKwkJICAgICghdHggJiYgKG1vZGUgJiAoU1BJX1JYX0RVQUwgfCBTUElfUlhfUVVB RCkpKSkgICAgCj4gPj4KPiA+PiBTb21lIFNQSSAoZmxhc2gpIGNvbnRyb2xsZXIgbWF5IHN1cHBv cnQgUXVhZCBwcm90b2NvbHMgYnV0IG5vIER1YWxzCj4gPj4gcHJvdG9jb2xzIGF0IGFsbC4gSGVu Y2UgeW91IHNob3VsZCBvbmx5IHRlc3QgU1BJX3tSLFRdWF9EVUFMLiAgCj4gPiAKPiA+IEhtLCBJ J2QgcmF0aGVyIG5vdCBjaGFuZ2UgdGhhdCwgc2luY2UgaXQncyB3aGF0IGhhdmUgYmVlbiB1c2Vk IHNvIGZhci4KPiA+IE5vdGUgdGhhdCBhIGNvbnRyb2xsZXIgdGhhdCB3YW50cyB0byBwdXQgbW9y ZSBjb25zdHJhaW50cyBjYW4gc3RpbGwKPiA+IGltcGxlbWVudCB0aGUgLT5zdXBwb3J0c19vcCgp IGhvb2suCj4gPiAgIAo+ID4+Cj4gPj4gQW55d2F5LCBJIHRoaW5rIHRoZSBmdW5jdGlvbiBzaG91 bGQgY29tcGxldGVseSBiZSByZW1vdmVkIGJlY2F1c2UKPiA+PiBTUElfe1IsVH1YX3tEVUFMLFFV QUR9IGZsYWdzIHNob3VsZCBiZSBkZXByZWNhdGVkLgo+ID4+Cj4gPj4gVGhleSB3ZXJlIGZpbmUg d2hlbiBpbnRyb2R1Y2VkIGxvbmcgdGltZSBhZ28gd2hlbiBRdWFkIFNQSSBmbGFzaGVzIG9ubHkK PiA+PiBzdXBwb3J0ZWQgRmFzdCBSZWFkIDEtMS00IGFuZCBtYXliZSBmZXcgb2YgdGhlbSBQYWdl IFByb2dyYW0gMS0xLTQuCj4gPj4KPiA+PiBIb3dldmVyIGZvciBtYW55IHllYXJzIG5vdywgUXVh ZCBTUEkgZmxhc2hlcyBzdXBwb3J0IGZhciBtdWNoIFNQSSBwcm90b2NvbHMKPiA+PiBhbmQgY29t bWFuZHMuIEZvciBpbnN0YW5jZToKPiA+PiBGYXN0IFJlYWQgMS0xLTQKPiA+PiBGYXN0IFJlYWQg MS00LTQKPiA+PiAoRmFzdCBSZWFkIDQtNC00KQo+ID4+IFBhZ2UgUHJvZ3JhbSAxLTEtNAo+ID4+ IFBhZ2UgUHJvZ3JhbSAxLTQtNAo+ID4+IFBhZ2UgUHJvZ3JhbSA0LTQtNAo+ID4+Cj4gPj4gRmFz dCBSZWFkIHgteS16IG1lYW5zIHRoYXQ6Cj4gPj4gLSB0aGUgb3AgY29kZSBpcyB0cmFuc2ZlcmVk ICh0eCkgb24geCBJL08gbGluZShzKQo+ID4+IC0gdGhlIGFkZHJlc3MsIG1vZGUgYW5kIGR1bW1p ZXMgYXJlIHRyYW5zZmVyZWQgKHR4KSBvbiB5IEkvTyBsaW5lKHMpCj4gPj4gLSB0aGUgZGF0YSBh cmUgcmVjZWl2ZWQgKHJ4KSBvbiB6IEkvTyBsaW5lKHMpCj4gPj4KPiA+PiBQYWdlIFByb2dyYW0g eC15LXogc3RhbmRzIGZvcjoKPiA+PiAtIHRoZSBvcCBjb2RlIGJlaW5nIHRyYW5zZmVyZWQgKHR4 KSBvbiB4IEkvTyBsaW5lKHMpCj4gPj4gLSB0aGUgYWRkcmVzcyBpcyB0cmFuc2ZlcmVkICh0eCkg b24geSBJL08gbGluZShzKQo+ID4+IHRoZSBkYXRhIGFyZSB0cmFuc2ZlcmVkICh0eCkgb24geiBJ L08gbGluZShzKQo+ID4+Cj4gPj4gVGhlbiBzb21lIFNQSSBmbGFzaCBjb250cm9sbGVycyBhbmQv b3IgbWVtb3JpZXMgbWF5IHN1cHBvcnQgRmFzdCBSZWFkIDEtNC00Cj4gPj4gYnV0IG5vdCBQYWdl IFByb2dyYW0gMS0xLTQgd2hlcmVhcyBvdGhlcnMgbWF5IHN1cHBvcnQgUGFnZSBQcm9ncmFtIDEt MS00Cj4gPj4gYnV0IG5vdCBGYXN0IFJlYWQgMS00LTQuCj4gPj4KPiA+PiBTbyB1c2luZyBvbmx5 IFNQSV97UixUfVhfe0RVQUwsUVVBRH0gZmxhZ3MsIGhvdyBkbyB3ZSBtYWtlIHRoZSBkaWZmZXJl bmNlCj4gPj4gYmV0d2VlbiBzdXBwb3J0IG9mIEZhc3QgUmVhZCAxLTQtNCBhbmQgUGFnZSBQcm9n cmFtIDEtMS00IG9yIGJldHdlZW4KPiA+PiBGYXN0IFJlYWQgMS0xLTQgYW5kIEZhc3QgUmVhZCAx LTQtNCA/ICAKPiA+IAo+ID4gSSB0aGluayB5b3UncmUgbWl4aW5nIDIgZGlmZmVyZW50IHRoaW5n czoKPiA+IAo+ID4gMS8gVGhlIFJYL1RYIGJ1c3dpZHRoIGNhcGFiaWxpdGllcyBmb3IgZ2VuZXJp YyBTUEkvRHVhbFNQSS9RdWFkU1BJCj4gPiAgICB0cmFuc2ZlcnMsIHdoaWNoIGlzLCBJIGd1ZXNz LCB3aGF0IHRoZXNlIGZsYWdzIGhhdmUgYmVlbiBjcmVhdGVkIGZvcgo+ID4gCj4gPiAyLyBUaGUg YnVzd2lkdGggb2YgZWFjaCBpbnN0cnVjdGlvbiBvZiBhIG1lbW9yeS1saWtlIG9wZXJhdGlvbiAo YnkKPiA+ICAgIGluc3RydWN0aW9uIEkgbWVhbiwgQ01ELCBBRERSLCBEQVRBIGN5Y2xlcykKPiA+ IAo+ID4gVGhlcmUgaXMgbm8gcmVhc29uIGZvciBhIGdlbmVyaWMgU1BJIGNvbnRyb2xsZXIgdG8g c3BlY2lmeSB0aGluZ3MgZm9yCj4gPiAjMiwgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgYW55dGhp bmcgYWJvdXQgdGhpcyBzcGktbWVtIHByb3RvY29sLCBhbGwKPiA+IGl0IGNhbiBkbyBpcyBzZW5k L3JlY3YgZGF0YSB1c2luZyBhIHNwZWNpZmljIGJ1cyB3aWR0aC4KPiA+ICAKPiAKPiBJIG1pZ2h0 IGJlIHdyb25nIGJ1dCBJIHRoaW5rIFNQSSBmbGFzaGVzIGFyZSB0aGUgb25seSBTUEkgZGV2aWNl cyB1c2luZyBtb3JlCj4gdGhhbiBvbmUgSS9PIGxpbmUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRh LgoKRlBHQXMsIGFuZCBJIHRoZXJlIGFyZSBhbmQgd2lsbCBiZSBvdGhlciBkZXZpY2VzIHVzaW5n IHRoZSBzcGktbWVtCnByb3RvY29sIHRvIGFkZHJlc3Mgbm9uLW1lbW9yeSBkZXZpY2VzLiBBZnRl ciBhbGwsIHRoaXMgcHJvdG9jb2wgaXMKanVzdCBlbmZvcmNpbmcgYSBzcGVjaWZpYyBzZXF1ZW5j ZSB0aGF0IGhhcyBub3RoaW5nIG1lbW9yeS1zcGVjaWZpYy4KCj4gCj4gQW55d2F5LCBsZXQgYXNz dW1lIGRldmljZXMgb3RoZXIgdGhhbiBTUEkgZmxhc2ggYWxzbyB1c2UgbWFueSBJL08gbGluZXMK PiBoZW5jZSBtYWtlIHVzZSBvZiB0aGUgU1BJX3tSLFR9WF97RFVBTCxRVUFEfSBmbGFncy4KPiAK PiBJdCBsb29rcyBsaWtlIHRoaXMgc2VyaWVzIGlzIGRlYWxpbmcgYSBuZXcgU1BJIEFQSSBkZWRp Y2F0ZWQgdG8gU1BJIG1lbW9yaWVzLgoKSSBzYWlkIG1lbW9yeS1saWtlIGRldmljZXMsIGFuZCBp dCdzIGFjdHVhbGx5IGFib3V0IHN1cHBvcnRpbmcgYW55IGtpbmQKb2YgZGV2aWNlcyB0aGF0IGZv bGxvdyB0aGUgc3BpLW1lbSBwcm90b2NvbCwgb3IgaW4gb3RoZXIgd29yZHMsIGFueQpraW5kIG9m IGNvbW11bmljYXRpb24gd2hlcmUgdHJhbnNhY3Rpb25zIGFyZSBvZiB0aGUgZm9sbG93aW5nIGZv cm06CgoxLyBhbiBvcGNvZGUKMi8gMCB0byBOIGFkZHJlc3MgY3ljbGVzCjMvIDAgdG8gTiBkdW1t eSBjeWNsZXMKNC8gMCB0byBOIGRhdGEgaW4vb3V0IGN5Y2xlcwoKPiBKdXN0IG15IG9waW5pb24g YnV0IDEvIGFuZCB0aGUgYXNzb2NpYXRlZCBTUElfe1IsVH1YX3tEVUFMLFFVQUR9IGZsYWdzIHNo b3VsZAo+IGJlIGxlZnQgb25seSBmb3IgdGhlIGdlbmVyaWMgU1BJIEFQSSwgLSB3aXRoIHNwaV9z eW5jKCksICdzdHJ1Y3Qgc3BpX21lc3NhZ2UnLAo+ICdzdHJ1Y3Qgc3BpX3RyYW5zZmVyJyBhbmQg c28gb24uCgpBbmQgdGhhdCdzIHdoYXQgcHJldHR5IG11Y2ggd2hhdCBJJ20gZG9pbmc6IGEgY29u dHJvbGxlciBpbXBsZW1lbnRpbmcKdGhlIHNwaV9tZW1fb3BzIGludGVyZmFjZSBjYW4gY2hlY2sg dGhlIG9wZXJhdGlvbiBieSBpdHNlbGYsIGlmIHRoZQpkZWZhdWx0IGNoZWNrIGJhc2VkIG9uIFNQ SV97UixUfVhfe0RVQUwsUVVBRH0gZmxhZ3MgaXMgbm90IHN1ZmZpY2llbnQuCgo+IAo+IE9uIHRo ZSBvdGhlciBoYW5kLCB0aGUgbmV3IFNQSSBmbGFzaCBkZWRpY2F0ZWQgQVBJIHNob3VsZCBvbmx5 IGZvY3VzIG9uIDIvCj4gYW5kIHRvdGFsbHkgaWdub3JlIHRoZSBTUElfe1IsVH1YX3tEVUFMLFFV QUR9IGZsYWdzLgoKTm90IHdoZW4gd2UgZmFsbGJhY2sgdG8gdGhlIGdlbmVyaWMgQVBJLCBidXQg b3RoZXJ3aXNlLCBJJ20gZmluZSB3aXRoCm1ha2luZyAtPnN1cHBvcnRzX29wKCkgbWFuZGF0b3J5 IGFuZCBvbmx5IHByb3ZpZGluZyB0aGUgZ2VuZXJpYyBjaGVja3MKYXMgYSBoZWxwZXIuCgo+IAo+ IElmIHdlIHRha2UgdGhlIGV4YW1wbGUgb2YgdGhlIHNhbWE1ZDIgUVNQSSBjb250cm9sbGVyLCB3 ZSBjYW4gdXNlIG1vcmUgdGhhbiBvbmUKPiBJL08gbGluZSBvbmx5IHdoZW4gY29uZmlndXJlIGlu ICJzZXJpYWwgZmxhc2ggbWVtb3J5IiBtb2RlLiBIb3dldmVyIHdoZW4gaW4gInNwaSIKPiBtb2Rl LCB3aGVuIGNhbiBvbmx5IHVzZSByZWd1bGFyIE1PU0kgYW5kIE1JU08gbGluZXMuCj4gCj4gV2l0 aCBzcGlfbWVtX3N1cHBvcnRzX29wKCkgYXMgcHJvcG9zZWQgYmVsb3csIHdlIHdvdWxkIGhhdmUg dG8gc2V0IGJvdGggU1BJX1JYX1FVQUQKPiBhbmQgU1BJX1RYX1FVQUQgdG8gYWxsb3cgRmFzdCBS ZWFkIDEtNC00IHdoZW4gaW4gInNlcmlhbCBmbGFzaCBtZW1vcnkiIG1vZGUuCj4gSG93ZXZlciB3 aXRoIG90aGVyIFNQSSBkZXZpY2VzLCBoZW5jZSB3aGVuIGluICJzcGkiIG1vZGUsIHRoZSBTUElf e1IsVH1YX1FVQUQgZmxhZ3MKPiB3b3VsZCBzdGlsbCBiZSBzZXQgdGhvdWdoIHRoZSBjb250cm9s bGVyIGNhbm5vdCBzdXBwb3J0IG1vcmUgdGhhbiBhIHNpbmdsZSBJL08gbGluZS4KCk9rYXksIHRo YXQncyBhIGdvb2QgcmVhc29uIHRvIGdldCB0aGlzIGdlbmVyaWMgY2hlY2sgb3V0IG9mIHRoZQpz cGlfbWVtX3N1cHBvcnRzX29wKCkgcGF0aCBhbmQgaW5zdGVhZCBwcm92aWRlIGEgZ2VuZXJpYyBo ZWxwZXIgdGhhdApjYW4gYmUgdXNlZCBieSBkcml2ZXJzIHdoaWNoIHdhbnRzIHRvIHJlbHkgb24g U1BJX3tSLFR9WF97RFVBTCxRVUFEfQpmbGFncy4KCj4gCj4gVGhlIFNQSV97UixUfV97RFVBTCxR VUFEfSBmbGFncyBjb3VsZCBiZSB0ZXN0ZWQgaW4gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9m Cj4gc3BpX21lbV9zdXBwb3J0c19vcCgpIGJ1dCBzaG91bGQgbm90IGJlIHRlc3RlZCBhcyBtYW5k YXRvcnkgZmxhZ3MgZm9yIGFsbCBTUEkKPiAoZmxhc2gpIGNvbnRyb2xsZXJzLgoKQWdyZWVkLiBJ IHN0aWxsIHRoaW5rIHdlIG5lZWQgYSB3YXkgdG8gcmVzdHJpY3QgdGhlIG51bWJlciBvZiBJTy1s aW5lcwpiYXNlZCBvbiBib2FyZC1yZWxhdGVkIGluZm9ybWF0aW9uLCBhbmQgaWYgc3BpLT5tb2Rl IGlzIG5vdCBhcHByb3ByaWF0ZQpmb3IgdGhhdCwgd2UgbmVlZCBpdCBzb21ld2hlcmUgZWxzZS4g T3RoZXJ3aXNlLCB5b3UgbWlnaHQgZW5kLXVwCmFzc3VtaW5nIFFTUEkgaXMgc3VwcG9ydGVkIGJ5 IGJvdGggdGhlIGRldmljZSBhbmQgdGhlIGNvbnRyb2xsZXIsIHdoaWxlCnRoZSBjb25uZWN0aW9u cyBvbiB0aGUgYm9hcmQgaXMsIGZvciBpbnN0YW5jZSwgbGltaXRpbmcgaXQgdG8gU1BJIG9yCkR1 YWxTUEkuCgoKPiA+ICAgCj4gPj4+ICsKPiA+Pj4gKy8qKgo+ID4+PiArICogc3RydWN0IHNwaV9t ZW1fb3AgLSBkZXNjcmliZXMgYSBTUEkgbWVtb3J5IG9wZXJhdGlvbgo+ID4+PiArICogQGNtZC5i dXN3aWR0aDogbnVtYmVyIG9mIElPIGxpbmVzIHVzZWQgdG8gdHJhbnNtaXQgdGhlIGNvbW1hbmQK PiA+Pj4gKyAqIEBjbWQub3Bjb2RlOiBvcGVyYXRpb24gb3Bjb2RlCj4gPj4+ICsgKiBAYWRkci5u Ynl0ZXM6IG51bWJlciBvZiBhZGRyZXNzIGJ5dGVzIHRvIHNlbmQuIENhbiBiZSB6ZXJvIGlmIHRo ZSBvcGVyYXRpb24KPiA+Pj4gKyAqCQkgZG9lcyBub3QgbmVlZCB0byBzZW5kIGFuIGFkZHJlc3MK PiA+Pj4gKyAqIEBhZGRyLmJ1c3dpZHRoOiBudW1iZXIgb2YgSU8gbGluZXMgdXNlZCB0byB0cmFu c21pdCB0aGUgYWRkcmVzcyBjeWNsZXMKPiA+Pj4gKyAqIEBhZGRyLmJ1ZjogYnVmZmVyIHN0b3Jp bmcgdGhlIGFkZHJlc3MgYnl0ZXMKPiA+Pj4gKyAqIEBkdW1teS5uYnl0ZXM6IG51bWJlciBvZiBk dW1teSBieXRlcyB0byBzZW5kIGFmdGVyIGFuIG9wY29kZSBvciBhZGRyZXNzLiBDYW4KPiA+Pj4g KyAqCQkgIGJlIHplcm8gaWYgdGhlIG9wZXJhdGlvbiBkb2VzIG5vdCByZXF1aXJlIGR1bW15IGJ5 dGVzCj4gPj4+ICsgKiBAZHVtbXkuYnVzd2lkdGg6IG51bWJlciBvZiBJTyBsYW5lcyB1c2VkIHRv IHRyYW5zbWl0IHRoZSBkdW1teSBieXRlcwo+ID4+PiArICogQGRhdGEuYnVzd2lkdGg6IG51bWJl ciBvZiBJTyBsYW5lcyB1c2VkIHRvIHNlbmQvcmVjZWl2ZSB0aGUgZGF0YQo+ID4+PiArICogQGRh dGEuZGlyOiBkaXJlY3Rpb24gb2YgdGhlIHRyYW5zZmVyCj4gPj4+ICsgKiBAZGF0YS5idWYuaW46 IGlucHV0IGJ1ZmZlcgo+ID4+PiArICogQGRhdGEuYnVmLm91dDogb3V0cHV0IGJ1ZmZlcgo+ID4+ PiArICovCj4gPj4+ICtzdHJ1Y3Qgc3BpX21lbV9vcCB7Cj4gPj4+ICsJc3RydWN0IHsKPiA+Pj4g KwkJdTggYnVzd2lkdGg7Cj4gPj4+ICsJCXU4IG9wY29kZTsKPiA+Pj4gKwl9IGNtZDsKPiA+Pj4g Kwo+ID4+PiArCXN0cnVjdCB7Cj4gPj4+ICsJCXU4IG5ieXRlczsKPiA+Pj4gKwkJdTggYnVzd2lk dGg7Cj4gPj4+ICsJCWNvbnN0IHU4ICpidWY7ICAgIAo+ID4+Cj4gPj4gRm9yIHRoZSBhZGRyZXNz IHZhbHVlLCBJIHdvdWxkIHJhdGhlciB1c2Ugc29tZSBsb2ZmX3QgdHlwZSwgaW5zdGVhZCBvZgo+ ID4+IGNvbnN0IHU4ICouIAo+ID4+IEFjdHVhbGx5LCBtb3N0IChpZiBub3QgYWxsKSBTUEkgZmxh c2ggY29udHJvbGxlcnMgaGF2ZSBzb21lIGhhcmR3YXJlCj4gPj4gcmVnaXN0ZXIgdG8gc2V0IHRo ZSBhZGRyZXNzIHZhbHVlIG9mIHRoZSBTUEkgZmxhc2ggY29tbWFuZCB0byBiZQo+ID4+IHNlbnQu IEhlbmNlIGhhdmluZyB0aGlzIHZhbHVlIGRpcmVjdGx5IGluIHRoZSByaWdodCBmb3JtYXQgd291 bGQgYXZvaWQgdG8KPiA+PiBjb252ZXJ0LiAgCj4gPiAKPiA+IFdoYXQgaXMgdGhlIGFwcHJvcHJp YXRlIGZvcm1hdD8gQW4gYWRkcmVzcyBlbmNvZGVkIGluIGEgNjQtYml0IGludGVnZXIKPiA+IGRv ZXMgbm90IGdpdmUgYW55IGluZm9ybWF0aW9uIG9uIGhvdyB0aGVzZSBieXRlcyBzaG91bGQgYmUg dHJhbnNtaXR0ZWQKPiA+IG9uIHRoZSBidXMuIFNQSSBOT1IgaXMgcGFzc2luZyB0aGUgYWRkcmVz cyBpbiBiaWcgZW5kaWFuLCBTUEkgTkFORCBzZWVtcwo+ID4gdG8gZG8gdGhlIHNhbWUsIGJ1dCB3 ZSdyZSBub3Qgc3VyZSB0aGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIGFsbCBraW5kIG9mCj4gPiBt ZW1vcmllcyBvciBkZXZpY2VzIHVzaW5nIHRoaXMgc3BpLW1lbSBwcm90b2NvbC4KPiA+IAo+ID4g QWxzbywgYnkgcGFzc2luZyBpdCB0aHJvdWdoIGFuIGludGVnZXIgd2UgbGltaXQgb3Vyc2VsdmVz IHRvIDggYnl0ZXMuCj4gPiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGJ1dCB3aG8ga25vd3MgOi0p Lgo+ID4gCj4gPiBJZiB3ZSBnbyBmb3IgdGhpcyBsb2ZmX3QgZmllbGQsIHdlJ2xsIGhhdmUgdG8g YWRkIGFuIGVuZGlhbm5lc3MgZmllbGQKPiA+IGhlcmUgYW5kIGZvcmNlIGFsbCBkcml2ZXJzIHRv IGNoZWNrIGl0Lgo+ID4gIAo+IAo+IEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCBhbnkgZW5kaWFubmVz cyBmaWVsZC4gV2UgYWxyZWFkeSB1c2UgbG9mZl90IG9ubHksCj4gd2l0aG91dCBhZGRpdGlvbmFs IGVuZGlhbm5lc3MgcGFyYW1hdGVyLCBpbiBzcGktbm9yIGJ1dCBhbHNvIGluIHRoZSBhYm92ZQo+ IE1URCBsYXllciAoc2VlICdzdHJ1Y3QgbXRkX2luZm8nKSBhbmQgdGlsbCBub3cgaXQgaGFzIGp1 c3Qgd29ya2VkIGZpbmUuCgpJdCdzIG5vdCBhYm91dCB0aGUgTVREIGxheWVyLiBDYW4geW91IHBy ZWRpY3QgdGhhdCBhbGwgZGV2aWNlcyB3aWxsCnRyYW5zbWl0IHRoZSBhZGRyZXNzIGluIGJpZy1l bmRpYW4/IEkgY2FuJ3QuCgo+IAo+IE1vc3QsIGlmIG5vdCBhbGwsIFNQSSBmbGFzaCBjb250cm9s bGVycyBoYXZlIGEgZGVkaWNhdGVkIGZpZWxkIGluIG9uZSBvZgo+IHRoZWlyIHJlZ2lzdGVycyB0 byB3cml0ZSB0aGUgYWRkcmVzcyB2YWx1ZSBpbnRvIGl0LiBHZW5lcmFsbHksIHRoaXMgcmVnaXN0 ZXIKPiBpcyB3cml0dGVuIHdpdGggYW4gaW50ZWdlciBpbiB0aGUgQ1BVIG5hdGl2ZSBieXRlIG9y ZGVyIHNvIG5vIG5lZWQgdG8gY29udmVydC4KCkl0J3Mgbm90IGFib3V0IGhvdyB5b3Ugd3JpdGUg eW91ciByZWdpc3RlciwgYnV0IGluIHdoaWNoIG9yZGVyIGFkZHJlc3MKYnl0ZXMgYXJlIHRyYW5z bWl0dGVkIG9uIHRoZSBTUEkgd2lyZS4gQ3VycmVudGx5LCBTUEkgTk9SIHVzZSB0aGUgTVNCCmZp cnN0IHNjaGVtZSwgYnV0IHRoYXQgd29uJ3QgbmVjZXNzYXJpbHkgYmUgdGhlIGNhc2UgZm9yIG90 aGVyIFNQSQpkZXZpY2VzLgoKPiAKPiBBbmQgYW55d2F5LCBpZiBzb21lIGNvbnZlcnNpb24gaXMg ZXZlciBuZWVkZWQsIHRoZSBTUEkgZmxhc2ggY29udHJvbGxlcgo+IGRyaXZlciBrbm93cyBpdCBz byB3ZSBjb3VsZCBzZXQgYXMgYSBydWxlIHRoYXQgdGhlIGludGVnZXIgdmFsdWUgZm9yIHRoZQo+ IGFkZHJlc3MgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgbmF0aXZlIENQVSBieXRlIG9yZGVyLiBB dCBsZWFzdCBtb3N0IFNQSSBmbGFzaAo+IGNvbnRyb2xsZXIgZHJpdmVyIHdvbid0IGhhdmUgdG8g Y29udmVydCBmcm9tIGEgY29uc3QgdTggKiB0byBzb21lIHVuc2lnbmVkCj4gaW50ZWdyYWwgdHlw ZSBtb3JlIHN1aXRlZCB0byB0aGVpciByZWdpc3RlciBhY2Nlc3Nlcy4KClRoZXkgd2lsbCBoYXZl IHRvIGF0IGxlYXN0IG1ha2Ugc3VyZSBpdCdzIHByb3Blcmx5IGVuY29kZWQ6IGlmIHRoZQpkZXZp Y2UgaXMgZXhwZWN0aW5nIHRoZSBhZGRyZXNzIHRvIGJlIHRyYW5zbWl0dGVkIExTQiBmaXJzdCAo QUtBCmxpdHRsZS1lbmRpYW4pLCB0aGV5J2xsIGhhdmUgdG8gc3dhcCBhZGRyZXNzIGJ5dGVzIGJl Zm9yZSB3cml0aW5nIHRoZQp2YWx1ZSB0byB0aGUgcmVnaXN0ZXIuCgo+ICAKPiA+PiBBRkFJSywg b25seSBtMjVwODAgbmVlZHMgdG8gY29udmVydCBmcm9tIGxvZmZfdCB0byB1OCAqIGFuZCBvbmx5 Cj4gPj4gd2hlbiB1c2luZyB0aGUgcmVndWxhciBTUEkgQVBJLCBpZSBzcGlfc3luYygpLCBhcyB0 aGUgJ3N0cnVjdAo+ID4+IHNwaV9mbGFzaF9yZWFkX21lc3NhZycgYWxyZWFkeSB1c2VzIHNvbWUg aW50ZWdyYWwgdHlwZSB0b28uICAKPiA+IAo+ID4gQW5kIEknbSBub3Qgc3VyZSB0aGlzIHdhcyBh IGdvb2QgaWRlYS4KPiA+ICAgCj4gPj4KPiA+PiAgCj4gPj4+ICsJfSBhZGRyOwo+ID4+PiArCj4g Pj4+ICsJc3RydWN0IHsKPiA+Pj4gKwkJdTggbmJ5dGVzOwo+ID4+PiArCQl1OCBidXN3aWR0aDsK PiA+Pj4gKwl9IGR1bW15Owo+ID4+PiArCj4gPj4+ICsJc3RydWN0IHsKPiA+Pj4gKwkJdTggYnVz d2lkdGg7Cj4gPj4+ICsJCWVudW0gc3BpX21lbV9kYXRhX2RpciBkaXI7Cj4gPj4+ICsJCXVuc2ln bmVkIGludCBuYnl0ZXM7Cj4gPj4+ICsJCS8qIGJ1Zi57aW4sb3V0fSBtdXN0IGJlIERNQS1hYmxl LiAqLwo+ID4+PiArCQl1bmlvbiB7Cj4gPj4+ICsJCQl2b2lkICppbjsKPiA+Pj4gKwkJCWNvbnN0 IHZvaWQgKm91dDsKPiA+Pj4gKwkJfSBidWY7Cj4gPj4+ICsJfSBkYXRhOyAgICAKPiA+Pgo+ID4+ IEFsc28sIHlvdSBzaG91bGQgYWRkIGFub3RoZXIgbWVtYmVyIGluIHRoaXMgc3RydWN0dXJlIHRv IHNldCB0aGUgJ3R5cGUnIG9mCj4gPj4gb3BlcmF0aW9uIGZvciB0aGUgU1BJIGZsYXNoIGNvbW1h bmQ6Cj4gPj4gLSByZWdpc3RlciByZWFkCj4gPj4gLSByZWdpc3RlciB3cml0ZQo+ID4+IC0gbWVt b3J5IHJlYWQKPiA+PiAtIG1lbW9yeSB3cml0ZQo+ID4+IC0gbWVtb3J5IGVyYXNlCj4gPj4gWy0g U0ZEUCByZWFkID8gXQo+ID4+IFstIE9UUCByZWFkL3dyaXRlID8gXSAgCj4gPiAKPiA+IE5vLCBy ZWFsbHksIHRoYXQncyBub3QgYmVsb25naW5nIGhlcmUuIEl0J3MgZW50aXJlbHkgU1BJIE5PUiBz cGVjaWZpYy4KPiA+ICAgCj4gCj4gSSBkaXNhZ3JlZSB3aXRoIHlvdSBvbiB0aGF0LiBFeGNlcHQg Zm9yIFNGRFAgb2YgY291cnNlLCB0aGlzIHdpbGwgYWxzbyBhcHBseSB0bwo+IFNQSSBOQU5EIGFz IHdlbGwuIEFuZCB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBwYXNzZWQgZG93biB0byB0aGUg U1BJIChmbGFzaCkKPiBjb250cm9sbGVyIGRyaXZlciwgaW5zdGVhZCBvZiBiZWluZyBsb3N0IGF0 IHRoZSBTUEkgTkFORC9OT1IgbGV2ZWxzLAoKSSdtIG5vdCBzYXlpbmcgd2Ugc2hvdWxkIGtlZXAg dGhlc2UgaW5mb3JtYXRpb24gYXQgdGhlIHNwaS1ub3IvbmFuZApsZXZlbCwganVzdCBzYXlpbmcg d2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gbWFrZSBpdCBsb29rIGxpa2UgYSBnZW5lcmljCnNvbHV0 aW9uIHNvIHRoYXQgU1BJIGNvbnRyb2xsZXJzIGRvbid0IGhhdmUgdG8gZ3Vlc3Mgd2hhdCB0aGV5 IHNob3VsZApkbyBiYXNlZCBvbiB0aGUgbWVtb3J5IG9wZXJhdGlvbiB0eXBlLgoKVHlwaWNhbGx5 LCB3aHkgc2hvdWxkIGEgU1BJIGNvbnRyb2xsZXIgY2FyZSBhYm91dCB3aGV0aGVyIHRoZSBvcGVy YXRpb24KaXMgYW4gZXJhc2UsIGEgcmVnIHJlYWQgb3IgYSByZWcgd3JpdGUuIEZyb20gdGhlIGNv bnRyb2xsZXIgUG9WLCBpdCdzCmp1c3QgYW4gc3BpLW1lbSBvcGVyYXRpb24uClRoZSB1c2UgY2Fz ZXMgeW91IHdhbnQgdG8gb3B0aW1pemUgYXJlIHJlYWQvd3JpdGUgdXNlci1kYXRhLCBhbmQgdGhp cwpjYW4gYmUgZG9uZSBpbiBkaWZmZXJlbnQgd2F5cyAoZGlyZWN0IG1lbW9yeSBtYXBwaW5nIGlz IG9uZSBzb2x1dGlvbikuCgo+IHNvIHRoZSBTUEkKPiBjb250cm9sbGVyIGRyaXZlciBjb3VsZCB0 YWtlIHRoZSBwcm9wZXIgYWN0aW9ucyAoZGF0YSBjYWNoZSBmbHVzaC9pbnZhbGlkYXRpb24KPiBm b3IgbWVtb3J5IG9wZXJhdGlvbnMsCgpUaGlzIG9uZSBoYXMgdG8gZG8gd2l0aCBkaXJlY3QgbWFw cGluZywgc28gYW4gQVBJIHRvIGFsbG93IGRpcmVjdAptYXBwaW5nIHNob3VsZCBoZWxwIGFkZHJl c3MgdGhhdC4KCj4gZW5hYmxpbmcvZGlzYWJsaW5nIG9uLXRoZS1mbHkgZGF0YSBzY3JhbWJsaW5n LAoKQW5kIHdoYXQncyB0aGUgcHJvYmxlbSB3aXRoIHBhc3NpbmcgdGhlIHNjcmFtYmxlIGluZm9y bWF0aW9uIG9uIGEKcGVyLW9wZXJhdGlvbiBiYXNpcyBhbmQgbGV0dGluZyB0aGUgdXBwZXIgbGF5 ZXIgZGVjaWRlIHdoZW4gaXQncyBhIGdvb2QKaWRlYSB0byB1c2UgaXQgb3Igbm90PwoKPiBhbmQg b3RoZXIKPiBjb250cm9sbGVyIHNwZWNpZmljIGNvbnN0cmFpbnRzKS4KCkNvdWxkIHlvdSBiZSBt b3JlIHNwZWNpZmljPwoKSSByZWFsbHkgaGF2ZSB0aGUgZmVlbGluZyB5b3UncmUgcmV2aWV3aW5n IHRoYXQgd2l0aCB5b3VyIFNQSSBOT1IKbWFpbnRhaW5lciBleWUsIHdoaWxlLCBhcyBJIHNhaWQg c2V2ZXJhbCB0aW1lcywgSSdtIHRyeWluZyB0bwphZGRyZXNzIHRoZSBwcm9ibGVtIG1vcmUgZ2Vu ZXJpY2FsbHkuIE15IGludGVudCBpcyBub3QgdG8gbW92ZSBldmVyeQpiaXRzIHlvdSBoYXZlIGlu IHRoZSBzcGktbm9yIGxheWVyIHRvIHRoZSBzcGkgbGF5ZXIuIEluc3RlYWQsIHdlIGNhbgpwcm9n cmVzc2l2ZWx5IHByb3ZpZGUgYSBjb25zaXN0ZW50IEFQSSB0aGF0IGhlbHBzIHlvdSBkZWFsIHdp dGggbWVtb3J5CmRldmljZXMgKEkgZ3Vlc3Mgc3VwcG9ydGluZyBkaXJlY3QgbWVtb3J5IG1hcHBp bmcgaXMgdGhlIG5leHQgc3RlcCBpZgp3ZSB3YW50IHRvIGdldCB0aGUgYmVzdCBwZXJmcyBvdXQg b2YgdGhlc2UgYWR2YW5jZWQgY29udHJvbGxlcnMpIGluIGEKZGV2aWNlIGFnbm9zdGljIGZhc2hp b24uCgpSZWdhcmRzLAoKQm9yaXMKCi0tIApCb3JpcyBCcmV6aWxsb24sIEJvb3RsaW4gKGZvcm1l cmx5IEZyZWUgRWxlY3Ryb25zKQpFbWJlZGRlZCBMaW51eCBhbmQgS2VybmVsIGVuZ2luZWVyaW5n Cmh0dHBzOi8vYm9vdGxpbi5jb20KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==