From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Date: Tue, 15 Oct 2019 18:28:27 +0000 Subject: Re: [PATCH v2 00/15] DRM fbconv helpers for converting fbdev drivers Message-Id: <20191015182827.GJ1208@intel.com> List-Id: References: <20191014140416.28517-1-tzimmermann@suse.de> <20191015143318.GP11828@phenom.ffwll.local> <5241e699-f66a-d212-03a5-bb736639e66b@suse.de> <20191015181337.GG1208@intel.com> In-Reply-To: <20191015181337.GG1208@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: Daniel Vetter Cc: Linux Fbdev development list , Bartlomiej Zolnierkiewicz , Dave Airlie , Greg KH , Michel =?iso-8859-1?Q?D=E4nzer?= , Jonathan Corbet , Mathieu Malaterre , dri-devel , Thomas Zimmermann , Sean Paul On Tue, Oct 15, 2019 at 09:13:37PM +0300, Ville Syrj=E4l=E4 wrote: > On Tue, Oct 15, 2019 at 07:48:29PM +0200, Daniel Vetter wrote: > > On Tue, Oct 15, 2019 at 7:28 PM Thomas Zimmermann = wrote: > > > > > > Hi Daniel > > > > > > Am 15.10.19 um 16:33 schrieb Daniel Vetter: > > > > Hi Thomas, > > > > > > > > On Mon, Oct 14, 2019 at 04:04:01PM +0200, Thomas Zimmermann wrote: > > > >> (was: DRM driver for fbdev devices) > > > >> > > > >> This is version 2 of the fbdev conversion helpers. It's more or le= ss a > > > >> rewrite of the original patchset. > > > >> > > > >> The fbdev subsystem is considered legacy and will probably be remo= ved at > > > >> some point. This would mean the loss of a signifanct number of dri= vers. > > > >> Some of the affected hardware is not in use any longer, but some h= ardware > > > >> is still around and provides good(-enough) framebuffers. > > > >> > > > >> The fbconv helpers allow for running the current DRM stack on top = of fbdev > > > >> drivers. It's a set of functions that convert between fbdev interf= aces and > > > >> DRM interfaces. Based on SHMEM and simple KMS helpers, it only off= ers the > > > >> basic functionality of a framebuffer, but should be compatible wit= h most > > > >> existing fbdev drivers. > > > >> > > > >> A DRM driver using fbconv helpers consists of > > > >> > > > >> * DRM stub code that calls into fbconv helpers, and > > > >> * the original fbdev driver code. > > > >> > > > >> The fbdev driver code has to be modified to register itself with t= he > > > >> stub driver instead of the fbdev core framework. A tutorial on how= to use > > > >> the helpers is part of this patchset. The resulting driver hybrid = can be > > > >> refactored into a first-class DRM driver. The fbconv helpers conta= in a > > > >> number of comments, labeled 'DRM porting note', which explain the = required > > > >> steps. > > > >> > > > >> I tested the current patchset with the following drivers: atyfb, a= ty128fb, > > > >> matroxfb, pm2fb, pm3fb, rivafb, s3fb, savagefb, sisfb, tdfxfb and = tridentfb. > > > >> With each, I was able to successfully start with fbcon enabled, ru= n weston and > > > >> X11. The drivers are available at [1]. For reference, the patchset= includes > > > >> the Matrox stub driver. > > > > > > > > So I really don't want to rain on the parade here, since if you thi= nk this > > > > is useful when converting fbdev drivers I'll buy that, and I'm all = for > > > > getting more modern drivers into drm. > > > > > > > > But I have a bunch of concerns with the approach you're proposing h= ere: > > > > > > > > - we've tried staging for drm driver refactoring, it hurts. Separat= e tree > > > > plus the quick pace in refactoring create lots of pains. And for = small > > > > drivers refacotoring before it's not buying you anything above > > > > refactoring in your own personal tree. And for big drivers we're = fairly > > > > lenient with merging drivers that aren't fully polished yet, if t= here's > > > > a team serious enough with cleaning up the mess. I think even mer= ging > > > > partial drivers directly under drivers/gpu (but behind CONFIG_BRO= KEN) is > > > > better than staging. > > > > > > I mostly put this into staging, because it's the kind of code you'd > > > expect there. > >=20 > > Yeah, except we tried, it's a real pain. Conclusion by everyone > > involved is that staging doesn't work for the drm subsystem. > >=20 > > > > - we've had conversion helpers before (for the legacy kms -> atomic > > > > upgrade). They constantly broke, pretty much every release when s= omeone > > > > wanted to use them they first had to fix them up again. I think h= aving > > > > those helpers is good, but better to just have them in some branch > > > > somewhere where it's clear that they might not work anymore on la= test > > > > upstream. > > > > > > > > - especially for some of these simple fbdev drivers I feel like just > > > > typing a new driver from scratch might be simpler. > > > > > > > > A few more concerns specifically for your mga example: > > > > > > > > - We already have a mga driver. Might be better to integrate suppor= t for > > > > older mgas into that than have a parallel driver. > > > > > > Two colleagues of mine, Takashi and Egbert, send a patch that added > > > support for desktop G200s to mgag200. [1] But it was rejected because > > > the devices are two old and not relevant any longer. If that opinion = has > > > changed in the meantime, I wouldn't mind adding support for desktop G= PUs > > > to the driver. > >=20 > > Hm that seems to have petered out inconclusive. I definitely think a > > merged mga driver is better than 2 drm atomic kms drivers for roughly > > the same hardware. I'm also assuming that at least for now no one > > plans to resurrect the 3d acceleration support for these old chips. > > But even then it's fairly easy to disable all that on the server > > chips. > >=20 > > > > - Your helper is based on simple display pipe, and I think for thes= e old > > > > mga chips (especially the dual pipe mga 450 and 550) simple displ= ay pipe > > > > helper is more a hindering detour than actual help. From a quick = read > > > > through the code (especially all the custom ioctls) you definitel= y want > > > > separate TV-out connector to expose all the tv mode properties (i= nstead > > > > of the custom ioctls). > > > > > > Around the G100, there's something like a change in generation. Befor= e, > > > devices had only a single output and less than 8 MiB of RAM. This wor= ks > > > well with GEM SHMEM and simple KMS. Afterwards, devices have 8 MiB or > > > more and multiple outputs. GEM VRAM and the full set of helpers fit t= his > > > much better. Maybe having 2 drivers that share common code (or 3 with > > > the Server Engine chipsets) makes most sense. > >=20 > > Yeah if that's the case maybe a mga100 and mga200g driver fits better. > > Former based on simple display pipe. >=20 > The display hardware differences are quite minimal from=20 > 1064SG to G200. G400 did add the second CRTC but essentially > nothing else changed from G200 display. G450/G550 changed > the PLLS around a bit just for the heck of it, and integrated=20 > the TMDS transmitter and TV encoder. And then they did even > more PLL madness with the different G200 server chip variants. >=20 > So IMO from display hw POV G100 vs. G200 split doesn't really > make sense. Ah, I did forget that G100 and earlier don't support the cursor 16 color mode that G200+ have. So I guess there is a little bit of a difference there. --=20 Ville Syrj=E4l=E4 Intel From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 00/15] DRM fbconv helpers for converting fbdev drivers Date: Tue, 15 Oct 2019 21:28:27 +0300 Message-ID: <20191015182827.GJ1208@intel.com> References: <20191014140416.28517-1-tzimmermann@suse.de> <20191015143318.GP11828@phenom.ffwll.local> <5241e699-f66a-d212-03a5-bb736639e66b@suse.de> <20191015181337.GG1208@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 226216E87C for ; Tue, 15 Oct 2019 18:28:34 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20191015181337.GG1208@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Linux Fbdev development list , Bartlomiej Zolnierkiewicz , Dave Airlie , Greg KH , Michel =?iso-8859-1?Q?D=E4nzer?= , Jonathan Corbet , Mathieu Malaterre , dri-devel , Thomas Zimmermann , Sean Paul List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBPY3QgMTUsIDIwMTkgYXQgMDk6MTM6MzdQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIFR1ZSwgT2N0IDE1LCAyMDE5IGF0IDA3OjQ4OjI5UE0gKzAyMDAsIERhbmll bCBWZXR0ZXIgd3JvdGU6Cj4gPiBPbiBUdWUsIE9jdCAxNSwgMjAxOSBhdCA3OjI4IFBNIFRob21h cyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPiB3cm90ZToKPiA+ID4KPiA+ID4gSGkg RGFuaWVsCj4gPiA+Cj4gPiA+IEFtIDE1LjEwLjE5IHVtIDE2OjMzIHNjaHJpZWIgRGFuaWVsIFZl dHRlcjoKPiA+ID4gPiBIaSBUaG9tYXMsCj4gPiA+ID4KPiA+ID4gPiBPbiBNb24sIE9jdCAxNCwg MjAxOSBhdCAwNDowNDowMVBNICswMjAwLCBUaG9tYXMgWmltbWVybWFubiB3cm90ZToKPiA+ID4g Pj4gKHdhczogRFJNIGRyaXZlciBmb3IgZmJkZXYgZGV2aWNlcykKPiA+ID4gPj4KPiA+ID4gPj4g VGhpcyBpcyB2ZXJzaW9uIDIgb2YgdGhlIGZiZGV2IGNvbnZlcnNpb24gaGVscGVycy4gSXQncyBt b3JlIG9yIGxlc3MgYQo+ID4gPiA+PiByZXdyaXRlIG9mIHRoZSBvcmlnaW5hbCBwYXRjaHNldC4K PiA+ID4gPj4KPiA+ID4gPj4gVGhlIGZiZGV2IHN1YnN5c3RlbSBpcyBjb25zaWRlcmVkIGxlZ2Fj eSBhbmQgd2lsbCBwcm9iYWJseSBiZSByZW1vdmVkIGF0Cj4gPiA+ID4+IHNvbWUgcG9pbnQuIFRo aXMgd291bGQgbWVhbiB0aGUgbG9zcyBvZiBhIHNpZ25pZmFuY3QgbnVtYmVyIG9mIGRyaXZlcnMu Cj4gPiA+ID4+IFNvbWUgb2YgdGhlIGFmZmVjdGVkIGhhcmR3YXJlIGlzIG5vdCBpbiB1c2UgYW55 IGxvbmdlciwgYnV0IHNvbWUgaGFyZHdhcmUKPiA+ID4gPj4gaXMgc3RpbGwgYXJvdW5kIGFuZCBw cm92aWRlcyBnb29kKC1lbm91Z2gpIGZyYW1lYnVmZmVycy4KPiA+ID4gPj4KPiA+ID4gPj4gVGhl IGZiY29udiBoZWxwZXJzIGFsbG93IGZvciBydW5uaW5nIHRoZSBjdXJyZW50IERSTSBzdGFjayBv biB0b3Agb2YgZmJkZXYKPiA+ID4gPj4gZHJpdmVycy4gSXQncyBhIHNldCBvZiBmdW5jdGlvbnMg dGhhdCBjb252ZXJ0IGJldHdlZW4gZmJkZXYgaW50ZXJmYWNlcyBhbmQKPiA+ID4gPj4gRFJNIGlu dGVyZmFjZXMuIEJhc2VkIG9uIFNITUVNIGFuZCBzaW1wbGUgS01TIGhlbHBlcnMsIGl0IG9ubHkg b2ZmZXJzIHRoZQo+ID4gPiA+PiBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIGEgZnJhbWVidWZmZXIs IGJ1dCBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIG1vc3QKPiA+ID4gPj4gZXhpc3RpbmcgZmJk ZXYgZHJpdmVycy4KPiA+ID4gPj4KPiA+ID4gPj4gQSBEUk0gZHJpdmVyIHVzaW5nIGZiY29udiBo ZWxwZXJzIGNvbnNpc3RzIG9mCj4gPiA+ID4+Cj4gPiA+ID4+ICAgKiBEUk0gc3R1YiBjb2RlIHRo YXQgY2FsbHMgaW50byBmYmNvbnYgaGVscGVycywgYW5kCj4gPiA+ID4+ICAgKiB0aGUgb3JpZ2lu YWwgZmJkZXYgZHJpdmVyIGNvZGUuCj4gPiA+ID4+Cj4gPiA+ID4+IFRoZSBmYmRldiBkcml2ZXIg Y29kZSBoYXMgdG8gYmUgbW9kaWZpZWQgdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGggdGhlCj4gPiA+ ID4+IHN0dWIgZHJpdmVyIGluc3RlYWQgb2YgdGhlIGZiZGV2IGNvcmUgZnJhbWV3b3JrLiBBIHR1 dG9yaWFsIG9uIGhvdyB0byB1c2UKPiA+ID4gPj4gdGhlIGhlbHBlcnMgaXMgcGFydCBvZiB0aGlz IHBhdGNoc2V0LiBUaGUgcmVzdWx0aW5nIGRyaXZlciBoeWJyaWQgY2FuIGJlCj4gPiA+ID4+IHJl ZmFjdG9yZWQgaW50byBhIGZpcnN0LWNsYXNzIERSTSBkcml2ZXIuIFRoZSBmYmNvbnYgaGVscGVy cyBjb250YWluIGEKPiA+ID4gPj4gbnVtYmVyIG9mIGNvbW1lbnRzLCBsYWJlbGVkICdEUk0gcG9y dGluZyBub3RlJywgd2hpY2ggZXhwbGFpbiB0aGUgcmVxdWlyZWQKPiA+ID4gPj4gc3RlcHMuCj4g PiA+ID4+Cj4gPiA+ID4+IEkgdGVzdGVkIHRoZSBjdXJyZW50IHBhdGNoc2V0IHdpdGggdGhlIGZv bGxvd2luZyBkcml2ZXJzOiBhdHlmYiwgYXR5MTI4ZmIsCj4gPiA+ID4+IG1hdHJveGZiLCBwbTJm YiwgcG0zZmIsIHJpdmFmYiwgczNmYiwgc2F2YWdlZmIsIHNpc2ZiLCB0ZGZ4ZmIgYW5kIHRyaWRl bnRmYi4KPiA+ID4gPj4gV2l0aCBlYWNoLCBJIHdhcyBhYmxlIHRvIHN1Y2Nlc3NmdWxseSBzdGFy dCB3aXRoIGZiY29uIGVuYWJsZWQsIHJ1biB3ZXN0b24gYW5kCj4gPiA+ID4+IFgxMS4gVGhlIGRy aXZlcnMgYXJlIGF2YWlsYWJsZSBhdCBbMV0uIEZvciByZWZlcmVuY2UsIHRoZSBwYXRjaHNldCBp bmNsdWRlcwo+ID4gPiA+PiB0aGUgTWF0cm94IHN0dWIgZHJpdmVyLgo+ID4gPiA+Cj4gPiA+ID4g U28gSSByZWFsbHkgZG9uJ3Qgd2FudCB0byByYWluIG9uIHRoZSBwYXJhZGUgaGVyZSwgc2luY2Ug aWYgeW91IHRoaW5rIHRoaXMKPiA+ID4gPiBpcyB1c2VmdWwgd2hlbiBjb252ZXJ0aW5nIGZiZGV2 IGRyaXZlcnMgSSdsbCBidXkgdGhhdCwgYW5kIEknbSBhbGwgZm9yCj4gPiA+ID4gZ2V0dGluZyBt b3JlIG1vZGVybiBkcml2ZXJzIGludG8gZHJtLgo+ID4gPiA+Cj4gPiA+ID4gQnV0IEkgaGF2ZSBh IGJ1bmNoIG9mIGNvbmNlcm5zIHdpdGggdGhlIGFwcHJvYWNoIHlvdSdyZSBwcm9wb3NpbmcgaGVy ZToKPiA+ID4gPgo+ID4gPiA+IC0gd2UndmUgdHJpZWQgc3RhZ2luZyBmb3IgZHJtIGRyaXZlciBy ZWZhY3RvcmluZywgaXQgaHVydHMuIFNlcGFyYXRlIHRyZWUKPiA+ID4gPiAgIHBsdXMgdGhlIHF1 aWNrIHBhY2UgaW4gcmVmYWN0b3JpbmcgY3JlYXRlIGxvdHMgb2YgcGFpbnMuIEFuZCBmb3Igc21h bGwKPiA+ID4gPiAgIGRyaXZlcnMgcmVmYWNvdG9yaW5nIGJlZm9yZSBpdCdzIG5vdCBidXlpbmcg eW91IGFueXRoaW5nIGFib3ZlCj4gPiA+ID4gICByZWZhY3RvcmluZyBpbiB5b3VyIG93biBwZXJz b25hbCB0cmVlLiBBbmQgZm9yIGJpZyBkcml2ZXJzIHdlJ3JlIGZhaXJseQo+ID4gPiA+ICAgbGVu aWVudCB3aXRoIG1lcmdpbmcgZHJpdmVycyB0aGF0IGFyZW4ndCBmdWxseSBwb2xpc2hlZCB5ZXQs IGlmIHRoZXJlJ3MKPiA+ID4gPiAgIGEgdGVhbSBzZXJpb3VzIGVub3VnaCB3aXRoIGNsZWFuaW5n IHVwIHRoZSBtZXNzLiBJIHRoaW5rIGV2ZW4gbWVyZ2luZwo+ID4gPiA+ICAgcGFydGlhbCBkcml2 ZXJzIGRpcmVjdGx5IHVuZGVyIGRyaXZlcnMvZ3B1IChidXQgYmVoaW5kIENPTkZJR19CUk9LRU4p IGlzCj4gPiA+ID4gICBiZXR0ZXIgdGhhbiBzdGFnaW5nLgo+ID4gPgo+ID4gPiBJIG1vc3RseSBw dXQgdGhpcyBpbnRvIHN0YWdpbmcsIGJlY2F1c2UgaXQncyB0aGUga2luZCBvZiBjb2RlIHlvdSdk Cj4gPiA+IGV4cGVjdCB0aGVyZS4KPiA+IAo+ID4gWWVhaCwgZXhjZXB0IHdlIHRyaWVkLCBpdCdz IGEgcmVhbCBwYWluLiBDb25jbHVzaW9uIGJ5IGV2ZXJ5b25lCj4gPiBpbnZvbHZlZCBpcyB0aGF0 IHN0YWdpbmcgZG9lc24ndCB3b3JrIGZvciB0aGUgZHJtIHN1YnN5c3RlbS4KPiA+IAo+ID4gPiA+ IC0gd2UndmUgaGFkIGNvbnZlcnNpb24gaGVscGVycyBiZWZvcmUgKGZvciB0aGUgbGVnYWN5IGtt cyAtPiBhdG9taWMKPiA+ID4gPiAgIHVwZ3JhZGUpLiBUaGV5IGNvbnN0YW50bHkgYnJva2UsIHBy ZXR0eSBtdWNoIGV2ZXJ5IHJlbGVhc2Ugd2hlbiBzb21lb25lCj4gPiA+ID4gICB3YW50ZWQgdG8g dXNlIHRoZW0gdGhleSBmaXJzdCBoYWQgdG8gZml4IHRoZW0gdXAgYWdhaW4uIEkgdGhpbmsgaGF2 aW5nCj4gPiA+ID4gICB0aG9zZSBoZWxwZXJzIGlzIGdvb2QsIGJ1dCBiZXR0ZXIgdG8ganVzdCBo YXZlIHRoZW0gaW4gc29tZSBicmFuY2gKPiA+ID4gPiAgIHNvbWV3aGVyZSB3aGVyZSBpdCdzIGNs ZWFyIHRoYXQgdGhleSBtaWdodCBub3Qgd29yayBhbnltb3JlIG9uIGxhdGVzdAo+ID4gPiA+ICAg dXBzdHJlYW0uCj4gPiA+ID4KPiA+ID4gPiAtIGVzcGVjaWFsbHkgZm9yIHNvbWUgb2YgdGhlc2Ug c2ltcGxlIGZiZGV2IGRyaXZlcnMgSSBmZWVsIGxpa2UganVzdAo+ID4gPiA+ICAgdHlwaW5nIGEg bmV3IGRyaXZlciBmcm9tIHNjcmF0Y2ggbWlnaHQgYmUgc2ltcGxlci4KPiA+ID4gPgo+ID4gPiA+ IEEgZmV3IG1vcmUgY29uY2VybnMgc3BlY2lmaWNhbGx5IGZvciB5b3VyIG1nYSBleGFtcGxlOgo+ ID4gPiA+Cj4gPiA+ID4gLSBXZSBhbHJlYWR5IGhhdmUgYSBtZ2EgZHJpdmVyLiBNaWdodCBiZSBi ZXR0ZXIgdG8gaW50ZWdyYXRlIHN1cHBvcnQgZm9yCj4gPiA+ID4gICBvbGRlciBtZ2FzIGludG8g dGhhdCB0aGFuIGhhdmUgYSBwYXJhbGxlbCBkcml2ZXIuCj4gPiA+Cj4gPiA+IFR3byBjb2xsZWFn dWVzIG9mIG1pbmUsIFRha2FzaGkgYW5kIEVnYmVydCwgc2VuZCBhIHBhdGNoIHRoYXQgYWRkZWQK PiA+ID4gc3VwcG9ydCBmb3IgZGVza3RvcCBHMjAwcyB0byBtZ2FnMjAwLiBbMV0gQnV0IGl0IHdh cyByZWplY3RlZCBiZWNhdXNlCj4gPiA+IHRoZSBkZXZpY2VzIGFyZSB0d28gb2xkIGFuZCBub3Qg cmVsZXZhbnQgYW55IGxvbmdlci4gSWYgdGhhdCBvcGluaW9uIGhhcwo+ID4gPiBjaGFuZ2VkIGlu IHRoZSBtZWFudGltZSwgSSB3b3VsZG4ndCBtaW5kIGFkZGluZyBzdXBwb3J0IGZvciBkZXNrdG9w IEdQVXMKPiA+ID4gdG8gdGhlIGRyaXZlci4KPiA+IAo+ID4gSG0gdGhhdCBzZWVtcyB0byBoYXZl IHBldGVyZWQgb3V0IGluY29uY2x1c2l2ZS4gSSBkZWZpbml0ZWx5IHRoaW5rIGEKPiA+IG1lcmdl ZCBtZ2EgZHJpdmVyIGlzIGJldHRlciB0aGFuIDIgZHJtIGF0b21pYyBrbXMgZHJpdmVycyBmb3Ig cm91Z2hseQo+ID4gdGhlIHNhbWUgaGFyZHdhcmUuIEknbSBhbHNvIGFzc3VtaW5nIHRoYXQgYXQg bGVhc3QgZm9yIG5vdyBubyBvbmUKPiA+IHBsYW5zIHRvIHJlc3VycmVjdCB0aGUgM2QgYWNjZWxl cmF0aW9uIHN1cHBvcnQgZm9yIHRoZXNlIG9sZCBjaGlwcy4KPiA+IEJ1dCBldmVuIHRoZW4gaXQn cyBmYWlybHkgZWFzeSB0byBkaXNhYmxlIGFsbCB0aGF0IG9uIHRoZSBzZXJ2ZXIKPiA+IGNoaXBz Lgo+ID4gCj4gPiA+ID4gLSBZb3VyIGhlbHBlciBpcyBiYXNlZCBvbiBzaW1wbGUgZGlzcGxheSBw aXBlLCBhbmQgSSB0aGluayBmb3IgdGhlc2Ugb2xkCj4gPiA+ID4gICBtZ2EgY2hpcHMgKGVzcGVj aWFsbHkgdGhlIGR1YWwgcGlwZSBtZ2EgNDUwIGFuZCA1NTApIHNpbXBsZSBkaXNwbGF5IHBpcGUK PiA+ID4gPiAgIGhlbHBlciBpcyBtb3JlIGEgaGluZGVyaW5nIGRldG91ciB0aGFuIGFjdHVhbCBo ZWxwLiBGcm9tIGEgcXVpY2sgcmVhZAo+ID4gPiA+ICAgdGhyb3VnaCB0aGUgY29kZSAoZXNwZWNp YWxseSBhbGwgdGhlIGN1c3RvbSBpb2N0bHMpIHlvdSBkZWZpbml0ZWx5IHdhbnQKPiA+ID4gPiAg IHNlcGFyYXRlIFRWLW91dCBjb25uZWN0b3IgdG8gZXhwb3NlIGFsbCB0aGUgdHYgbW9kZSBwcm9w ZXJ0aWVzIChpbnN0ZWFkCj4gPiA+ID4gICBvZiB0aGUgY3VzdG9tIGlvY3RscykuCj4gPiA+Cj4g PiA+IEFyb3VuZCB0aGUgRzEwMCwgdGhlcmUncyBzb21ldGhpbmcgbGlrZSBhIGNoYW5nZSBpbiBn ZW5lcmF0aW9uLiBCZWZvcmUsCj4gPiA+IGRldmljZXMgaGFkIG9ubHkgYSBzaW5nbGUgb3V0cHV0 IGFuZCBsZXNzIHRoYW4gOCBNaUIgb2YgUkFNLiBUaGlzIHdvcmtzCj4gPiA+IHdlbGwgd2l0aCBH RU0gU0hNRU0gYW5kIHNpbXBsZSBLTVMuIEFmdGVyd2FyZHMsIGRldmljZXMgaGF2ZSA4IE1pQiBv cgo+ID4gPiBtb3JlIGFuZCBtdWx0aXBsZSBvdXRwdXRzLiBHRU0gVlJBTSBhbmQgdGhlIGZ1bGwg c2V0IG9mIGhlbHBlcnMgZml0IHRoaXMKPiA+ID4gbXVjaCBiZXR0ZXIuIE1heWJlIGhhdmluZyAy IGRyaXZlcnMgdGhhdCBzaGFyZSBjb21tb24gY29kZSAob3IgMyB3aXRoCj4gPiA+IHRoZSBTZXJ2 ZXIgRW5naW5lIGNoaXBzZXRzKSBtYWtlcyBtb3N0IHNlbnNlLgo+ID4gCj4gPiBZZWFoIGlmIHRo YXQncyB0aGUgY2FzZSBtYXliZSBhIG1nYTEwMCBhbmQgbWdhMjAwZyBkcml2ZXIgZml0cyBiZXR0 ZXIuCj4gPiBGb3JtZXIgYmFzZWQgb24gc2ltcGxlIGRpc3BsYXkgcGlwZS4KPiAKPiBUaGUgZGlz cGxheSBoYXJkd2FyZSBkaWZmZXJlbmNlcyBhcmUgcXVpdGUgbWluaW1hbCBmcm9tIAo+IDEwNjRT RyB0byBHMjAwLiBHNDAwIGRpZCBhZGQgdGhlIHNlY29uZCBDUlRDIGJ1dCBlc3NlbnRpYWxseQo+ IG5vdGhpbmcgZWxzZSBjaGFuZ2VkIGZyb20gRzIwMCBkaXNwbGF5LiBHNDUwL0c1NTAgY2hhbmdl ZAo+IHRoZSBQTExTIGFyb3VuZCBhIGJpdCBqdXN0IGZvciB0aGUgaGVjayBvZiBpdCwgYW5kIGlu dGVncmF0ZWQgCj4gdGhlIFRNRFMgdHJhbnNtaXR0ZXIgYW5kIFRWIGVuY29kZXIuIEFuZCB0aGVu IHRoZXkgZGlkIGV2ZW4KPiBtb3JlIFBMTCBtYWRuZXNzIHdpdGggdGhlIGRpZmZlcmVudCBHMjAw IHNlcnZlciBjaGlwIHZhcmlhbnRzLgo+IAo+IFNvIElNTyBmcm9tIGRpc3BsYXkgaHcgUE9WIEcx MDAgdnMuIEcyMDAgc3BsaXQgZG9lc24ndCByZWFsbHkKPiBtYWtlIHNlbnNlLgoKQWgsIEkgZGlk IGZvcmdldCB0aGF0IEcxMDAgYW5kIGVhcmxpZXIgZG9uJ3Qgc3VwcG9ydCB0aGUKY3Vyc29yIDE2 IGNvbG9yIG1vZGUgdGhhdCBHMjAwKyBoYXZlLiBTbyBJIGd1ZXNzIHRoZXJlIGlzIGEKbGl0dGxl IGJpdCBvZiBhIGRpZmZlcmVuY2UgdGhlcmUuCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==