From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 1/5] drm: Add DRM support for tiny LCD displays Date: Tue, 29 Mar 2016 09:27:08 +0200 Message-ID: <20160329072708.GH2510@phenom.ffwll.local> References: <1458135259-31050-1-git-send-email-noralf@tronnes.org> <1458135259-31050-2-git-send-email-noralf@tronnes.org> <20160316151123.GP14170@phenom.ffwll.local> <56EB26FB.3030402@tronnes.org> <20160318174733.GI14170@phenom.ffwll.local> <56F2CD6C.9080002@tronnes.org> <20160323172825.GD2510@phenom.ffwll.local> <56F515E8.3040408@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x235.google.com (mail-wm0-x235.google.com [IPv6:2a00:1450:400c:c09::235]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6F5316E630 for ; Tue, 29 Mar 2016 07:27:07 +0000 (UTC) Received: by mail-wm0-x235.google.com with SMTP id p65so126313635wmp.1 for ; Tue, 29 Mar 2016 00:27:07 -0700 (PDT) Content-Disposition: inline In-Reply-To: <56F515E8.3040408@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: thomas.petazzoni@free-electrons.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBNYXIgMjUsIDIwMTYgYXQgMTE6NDE6NDRBTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IAo+IERlbiAyMy4wMy4yMDE2IDE4OjI4LCBza3JldiBEYW5pZWwgVmV0dGVyOgo+ ID5PbiBXZWQsIE1hciAyMywgMjAxNiBhdCAwNjowNzo1NlBNICswMTAwLCBOb3JhbGYgVHLDuG5u ZXMgd3JvdGU6Cj4gPj5EZW4gMTguMDMuMjAxNiAxODo0Nywgc2tyZXYgRGFuaWVsIFZldHRlcjoK PiA+Pj5PbiBUaHUsIE1hciAxNywgMjAxNiBhdCAxMDo1MTo1NVBNICswMTAwLCBOb3JhbGYgVHLD uG5uZXMgd3JvdGU6Cj4gPj4+PkRlbiAxNi4wMy4yMDE2IDE2OjExLCBza3JldiBEYW5pZWwgVmV0 dGVyOgo+ID4+Pj4+T24gV2VkLCBNYXIgMTYsIDIwMTYgYXQgMDI6MzQ6MTVQTSArMDEwMCwgTm9y YWxmIFRyw7hubmVzIHdyb3RlOgo+ID4+Pj4+PnRpbnlkcm0gcHJvdmlkZXMgYSB2ZXJ5IHNpbXBs aWZpZWQgdmlldyBvZiBEUk0gZm9yIGRpc3BsYXlzIHRoYXQgaGFzCj4gPj4+Pj4+b25ib2FyZCB2 aWRlbyBtZW1vcnkgYW5kIGlzIGNvbm5lY3RlZCB0aHJvdWdoIGEgc2xvdyBidXMgbGlrZSBTUEkv STJDLgo+ID4+Pj4+Pgo+ID4+Pj4+PlNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9y YWxmQHRyb25uZXMub3JnPgo+ID4+Pj4+WWF5LCBpdCBmaW5hbGx5IGhhcHBlbnMhIEkgYWxyZWFk eSBtYWRlIGEgY29tbWVudCBvbiB0aGUgY292ZXIgbGV0dGVyCj4gPj4+Pj5hYm91dCB0aGUgZmJk ZXYgc3R1ZmYsIEkgdGhpbmsgdGhhdCdzIHRoZSBiaWdnZXN0IHBhcnQgdG8gc3BsaXQgb3V0IGZy b20KPiA+Pj4+PnRpbnlkcm0gaGVyZS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIGEgZGV0YWlsZWQg Y29kZSByZXZpZXcgbWFrZXMgc2Vuc2UKPiA+Pj4+PmJlZm9yZSB0aGF0IHBhcnQgaXMgZG9uZSAo YW5kIGhleSB3ZSBjYW4gc3RhcnQgbWVyZ2luZyBhbHJlYWR5KSwgc28ganVzdCBhCj4gPj4+Pj5o aWdoIGxldmVsIHJldmlldyBmb3Igbm93Ogo+ID4+Wy4uLl0KPiA+Pj4KPiA+Pj4+PkluIHRoZSBj YXNlIG9mIHRpbnlkcm0gSSB0aGluayB0aGF0IG1lYW5zIHdlIHNob3VsZCBoYXZlIGEgYnVuY2gg b2YgbmV3Cj4gPj4+Pj5kcm0gaGVscGVycywgb3IgZXh0ZW5zaW9ucyBmb3IgZXhpc3Rpbmcgb25l czoKPiA+Pj4+Pi0gZmJkZXYgZGVmZXJyZWQgaW8gc3VwcG9ydCB1c2luZyAtPmRpcnR5ZmIgaW4g ZHJtX2ZiX2hlbHBlci5jLgo+ID4+Pj5BcmUgeW91IHRoaW5raW5nIHNvbWV0aGluZyBsaWtlIHRo aXM/Cj4gPj4+Pgo+ID4+Pj5zdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB7Cj4gPj4+PiAgICAg aW50ICgqZGlydHlmYikoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKPiA+Pj4+ICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwKTsKPiA+Pj5XZSBhbHJlYWR5 IGhhdmUgYSBkaXJ0eV9mYiBmdW5jdGlvbiBpbgo+ID4+PmRldi0+bW9kZV9jb25maWctPmZ1bmNz LT5kaXJ0eV9mYigpLiBUaGlzIGlzIHRoZSBvZmZpY2lhbCBpbnRlcmZhY2UgbmF0aXZlCj4gPj4+ ZHJtL2ttcyB1c2Vyc3BhY2UgaXMgc3VwcG9zZWQgdG8gdXNlIHRvIGZsdXNoIGZyb250YnVmZmVy IHJlbmRlcmluZy4gVGhlCj4gPj4+eGZyZWU4Ni12aWRlby1tb2Rlc2V0dGluZyBkcml2ZXIgdXNl cyBpdC4KPiA+PkkgY291bGRuJ3QgZmluZCB0aGlzIGRpcnR5X2ZiKCkgZnVuY3Rpb24sIGJ1dCBJ IGFzc3VtZSB5b3UgbWVhbgo+ID4+ZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzLmRpcnR5KCkuCj4gPll1 cC4KPiA+Cj4gPj4+Pn07Cj4gPj4+Pgo+ID4+Pj5zdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7Cj4gPj4+ PiAgICAgc3BpbmxvY2tfdCBkaXJ0eV9sb2NrOwo+ID4+Pj4gICAgIHN0cnVjdCBkcm1fY2xpcF9y ZWN0ICpkaXJ0eV9jbGlwOwo+ID4+Pj59Owo+ID4+PlllYWgsIHRoaXMgcGFydCBpcyBuZWVkZWQg Zm9yIHRoZSBkZWxheWVkIHdvcmsgZm9yIHRoZSBmYmRldiBoZWxwZXIuCj4gPj4+c3RydWN0IHdv cmsgZGlydHlfZmJfd29yazsgaXMgbWlzc2luZy4KPiA+PlRoaXMgY29uZnVzZXMgbWUuCj4gPj5J ZiB3ZSBoYXZlIHRoaXMgdGhlbiB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgZmItPmZ1bmNzLT5kaXJ0 eSgpIGNhbGwsCj4gPj50aGUgZHJpdmVyIGNhbiBqdXN0IGFkZCBhIHdvcmsgZnVuY3Rpb24gaGVy ZSBpbnN0ZWFkLgo+ID4+Cj4gPj5Qb3NzaWJsZSBmYiBkaXJ0eSgpIGNhbGwgY2hhaW46Cj4gPj5D YWxscyB0byBkcm1fZmJfaGVscGVyX3N5c18qIG9yIG1tYXAgcGFnZSB3cml0ZXMgd2lsbCBzY2hl ZHVsZQo+ID4+ZmJfaW5mby0+ZGVmZXJyZWRfd29yay4gVGhlIHdvcmtlciBmdW5jIGZiX2RlZmVy cmVkX2lvX3dvcmsoKSBjYWxscwo+ID4+ZmJfaW5mby0+ZmJkZWZpby0+ZGVmZXJyZWRfaW8oKS4K PiA+PlRoZW4gZGVmZXJyZWRfaW8oKSBjYW4gY2FsbCBmYl9oZWxwZXItPmZiLT5mdW5jcy0+ZGly dHkoKS4KPiA+Pgo+ID4+SW4gbXkgdXNlLWNhc2UgdGhpcyBkaXJ0eSgpIGZ1bmN0aW9uIHdvdWxk IHNjaGVkdWxlIGEgZGVsYXllZF93b3JrIHRvIHJ1bgo+ID4+aW1tZWRpYXRlbHkgc2luY2UgaXQg aGFzIGFscmVhZHkgYmVlbiBkZWZlcnJlZCBjb2xsZWN0aW5nIGNoYW5nZXMuCj4gPj5UaGUgcmVn dWxhciBkcm0gc2lkZSBmcmFtZWJ1ZmZlciBkaXJ0eSgpIGNvbGxlY3RzIGRhbWFnZSBhbmQgc2No ZWR1bGVzCj4gPj50aGUgc2FtZSB3b3JrZXIgdG8gcnVuIGRlZmVycmVkLgo+ID4+Cj4gPj5JIGRv bid0IHNlZSBhbiBlYXN5IHdheSBmb3IgYSBkcml2ZXIgdG8gc2V0IHRoZSBkaXJ0eSgpIGZ1bmN0 aW9uIGluCj4gPj5kcm1fZmJfY21hX2hlbHBlciBhcGFydCBmcm9tIGRvaW5nIHRoaXM6Cj4gPj4K PiA+PiAgc3RydWN0IGRybV9mYmRldl9jbWEgewo+ID4+ICAgICAgICAgIHN0cnVjdCBkcm1fZmJf aGVscGVyICAgIGZiX2hlbHBlcjsKPiA+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2ZiX2NtYSAgICAg ICAqZmI7Cj4gPj4rICAgICAgICBpbnQgKCpkaXJ0eSkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZnJhbWVidWZmZXIsCj4gPj4rICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsIHVuc2lnbmVkIGZsYWdzLAo+ID4+KyAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNvbG9yLCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCj4gPj4rICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbnVtX2NsaXBzKTsKPiA+PiAgfTsKPiA+V2VsbCBteSBwb2ludCBp cyB0aGF0IGRybSBjb3JlIGFscmVhZHkgaGFzIGEgY2Fub25pY2FsIGludGVyZmFjZQo+ID4oZHJt X2ZyYW1lYnVmZmVyX2Z1bmNzLmRpcnR5KSB0byBmbHVzaCBvdXQgcmVuZGVyaW5nLiBBbmQgaXQn cyBzdXBwb3NlZCB0bwo+ID5iZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQsIGFuZCB1c2Vy c3BhY2UgaXMgc3VwcG9zZWQgdG8gYmF0Y2ggdXAKPiA+ZGlydHkgdXBkYXRlcy4KPiAKPiBCYXRj aGVkIHVwIGludG8gb25lIGlvY3RsIGNhbGw/Cj4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIEkg ZG9uJ3QgaGF2ZSB0byB1c2UgZGVsYXllZF93b3JrIGxpa2UgSSBkbyBub3cuCj4gSSBjYW4ganVz dCBxdWV1ZSBhIHdvcmtfc3RydWN0IHRvIHJ1biBpbW1lZGlhdGVseS4KPiAKPiBUaGlzIGNvbW1l bnQgaW4gaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oIG1hZGUgbWUgdGhpbmsgdGhhdCBJIG1p Z2h0Cj4gcmVjZWl2ZSBtdWx0aXBsZSBjYWxsczoKPiAKPiAgKiBUaGUga2VybmVsIG9yIGhhcmR3 YXJlIGlzIGZyZWUgdG8gdXBkYXRlIG1vcmUgdGhlbiBqdXN0IHRoZQo+ICAqIHJlZ2lvbiBzcGVj aWZpZWQgYnkgdGhlIGNsaXAgcmVjdHMuIFRoZSBrZXJuZWwgb3IgaGFyZHdhcmUKPiAgKiBtYXkg YWxzbyBkZWxheSBhbmQvb3IgY29hbGVzY2Ugc2V2ZXJhbCBjYWxscyB0byBkaXJ0eSBpbnRvIGEK PiAgKiBzaW5nbGUgdXBkYXRlLgoKVGhpcyBqdXN0IG1lYW5zIHRoYXQgdXNlcnNwYWNlIG11c3Qg ZW5zdXJlIHRoYXQgdGhlIGVudGlyZSBidWZmZXIgaXMgc3RpbGwKdmFsaWQsIHNwZWNpZmljYWxs eSB0aGF0IHJlZ2lvbnMgb3V0c2lkZSBvZiB0aGUgY2xpcHJlY3RzIGFyZSBub3QgZ2FyYWJnZS4K VGhpcyB3YXkgZHJpdmVycyBjYW4gaW5jcmVhc2UgdGhlIGFyZWEgdGhhdCdzIHVwbG9hZGVkIChl LmcuIHVwbG9hZCB0aGUKZW50aXJlIHNjcmVlbiBvciBvbmx5IDEgcmVjdCBzcGFubmluZyBhbGwg Y2xpcHJlY3RzIGluIGNhc2UgdGhhdCdzIHRoZQpvbmx5IHRoaW5nIHRoZSBodyBjYW4gZG8pLgoK VXNlcnNwYWNlIG90b2ggaXMgc3VwcG9zZWQgdG8gYmF0Y2ggdXAgdXBkYXRlcyBpbnRvIG9uZSBp b2N0bCBjYWxsIChhbmQKbm90IG9uZSBwZXIgZHJhd24gZ2x5cGggb3Igc29tZXRoaW5nIHNpbGx5 IGxpa2UgdGhhdCkuCgo+IEkgaGF2ZSBhc3N1bWVkIHRoYXQgSSBjYW4ndCBydW4gdGhlIHdob2xl IGRpc3BsYXkgdXBkYXRlIGZyb20gdGhlIGlvY3RsCj4gY2FsbCBzaW5jZSBvbmUgZnVsbCBkaXNw bGF5IHVwZGF0ZSBvbiB0aGUgIndvcnN0IiBkaXNwbGF5IHRha2VzIH4yMDBtcy4KPiBCdXQgbWF5 YmUgaXQncyBmaW5lIHRvIHJ1biBhbGwgdGhpcyBpbiB0aGUgaW9jdGwgY2FsbD8KCkhtLCB0aHVz IGZhciBhbGwgZHJpdmVycyBkbyB0aGVpciB1cGRhdGluZyBzeW5jaHJvbm91c2x5LiBCdXQgdGhl biBub25lCnlldCB0b29rIDIwMG1zIHRvIGRvIHRoYXQgLSBtb3N0IGhhdmUgaHcgZG1hIGZvciB0 aGUgdXBsb2FkIGl0c2VsZi4KClNob3J0IHRlcm0gSSdkIGp1c3QgZG8gdGhlIHVwZGF0ZSBzeW5j aHJvbm91c2x5LCBhc3luYyBkaXJ0eSB3aXRoIHRoaXMKc2xvdyBkaXNwbGF5IGhhcyBhbGwga2lu ZHMgb2YgZnVuIHByb2JsZW1zIEkgZ3Vlc3Mgd2l0aCBYIHJlbmRlcmluZwpnZXR0aW5nIGFoZWFk IGFuZCByZWR1Y2luZyBpbnRlcmFjdGl2aXR5IGV2ZW4gbW9yZS4gTG9uZyB0ZXJtIHRoZXJlJ3Mg dGFsawphYm91dCBhZGRpbmcgY2xpcHJlY3RzIHRvIGF0b21pYywgYW5kIHRoZW4gd2UgY291bGQg ZG8gYSBoZWxwZXIgdG8KaW1wbGVtZW50IGRpcnR5ZmIgYXMgYW4gYXN5bmMgYXRvbWljIHVwZGF0 ZS4KCj4gPldoYXQgSSdkIGxpa2UgaXMgdGhhdCB0aGUgZmJkZXYgZW11bGF0aW9uIHVzZXMgZXhh Y3RseSB0aGF0IGludGVyZmFjZSwKPiA+d2l0aG91dCByZXF1aXJpbmcgZHJpdmVycyB0byB3cml0 ZSBhbnkgYWRkaXRpb25hbCBmYmRldiBjb2RlIChsaWtlIHF4bCBhbmQKPiA+dWRsIGN1cnJlbnRs eSBoYXZlKS4gU2luY2UgdGhlIGRybV9mcmFtZWJ1ZmZlcl9mdW5jcy5kaXJ0eSBpcyBhbHJlYWR5 Cj4gPmV4cGVjdGVkIHRvIHJ1biBpbiBwcm9jZXNzIGNvbnRleHQgSSB0aGluayB0aGUgb25seSBi aXQgd2UgbmVlZCBpcyB0aGUKPiA+ZGVmZXJyZWRfd29yayB5b3UgYWxyZWFkeSBhZGRlZCBpbiBm YmRldiwgc28gdGhhdCB3ZSBjYW4gc2NoZWR1bGUgdGhlCj4gPmRyaXZlcidzIC0+ZGlydHkoKSBm dW5jdGlvbi4KPiA+Cj4gPlRoZXJlIHNob3VsZG4ndCBiZSBhbnkgbmVlZCB0byBoYXZlIGFub3Ro ZXIgLT5kaXJ0eSgpIGZ1bmN0aW9uIGFueXdoZXJlCj4gPmVsc2UuCj4gCj4gSSdsbCB0cnkgYW5k IHNlZSBpZiBJIGNhbiBleHBsYWluIGJldHRlciB3aXRoIHNvbWUgY29kZS4KPiBGaXJzdCB0aGUg ZHJtX2ZiX2hlbHBlciBwYXJ0Ogo+IAo+IHZvaWQgZHJtX2ZiX2hlbHBlcl9kZWZlcnJlZF9pbyhz dHJ1Y3QgZmJfaW5mbyAqaW5mbywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCj4gewo+ICAgICAgICAgc3RydWN0IGRybV9mYl9oZWxw ZXIgKmhlbHBlciA9IGluZm8tPnBhcjsKPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVu ZCwgbWluLCBtYXg7Cj4gICAgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwo+ICAgICAg ICAgc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gCj4gICAgICAgICBpZiAoIWhlbHBlci0+ZmItPmZ1bmNz LT5kaXJ0eSkKPiAgICAgICAgICAgICAgICAgcmV0dXJuOwo+IAo+ICAgICAgICAgc3Bpbl9sb2Nr KCZoZWxwZXItPmRpcnR5X2xvY2spOwo+ICAgICAgICAgY2xpcCA9ICpoZWxwZXItPmRpcnR5X2Ns aXA7Cj4gICAgICAgICAvKiByZXNldCBkaXJ0eV9jbGlwICovCj4gICAgICAgICBzcGluX3VubG9j aygmaGVscGVyLT5kaXJ0eV9sb2NrKTsKPiAKPiAgICAgICAgIG1pbiA9IFVMT05HX01BWDsKPiAg ICAgICAgIG1heCA9IDA7Cj4gICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2Vs aXN0LCBscnUpIHsKPiAgICAgICAgICAgICAgICAgc3RhcnQgPSBwYWdlLT5pbmRleCA8PCBQQUdF X1NISUZUOwo+ICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIFBBR0VfU0laRSAtIDE7Cj4g ICAgICAgICAgICAgICAgIG1pbiA9IG1pbihtaW4sIHN0YXJ0KTsKPiAgICAgICAgICAgICAgICAg bWF4ID0gbWF4KG1heCwgZW5kKTsKPiAgICAgICAgIH0KPiAKPiAgICAgICAgIGlmIChtaW4gPCBt YXgpIHsKPiAgICAgICAgICAgICAgICAgLyogVE9ETyBtZXJnZSB3aXRoIGNsaXAgKi8KPiAgICAg ICAgIH0KPiAKPiAgICAgICAgIGhlbHBlci0+ZmItPmZ1bmNzLT5kaXJ0eShoZWxwZXItPmZiLCBO VUxMLCAwLCAwLCAmY2xpcCwgMSk7Cj4gfQo+IEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9k ZWZlcnJlZF9pbyk7Cj4gCj4gLyogQ2FsbGVkIGJ5IHRoZSBkcm1fZmJfaGVscGVyX3N5c18qKCkg ZnVuY3Rpb25zICovCj4gc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9zeXNfZGVmZXJyZWQoc3Ry dWN0IGZiX2luZm8gKmluZm8sIHUzMiB4LCB1MzIgeSwKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCj4gewo+ICAgICAgICAgc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciA9IGluZm8tPnBhcjsKPiAgICAgICAgIHN0cnVjdCBk cm1fY2xpcF9yZWN0IGNsaXA7Cj4gCj4gICAgICAgICBpZiAoIWluZm8tPmZiZGVmaW8pCj4gICAg ICAgICAgICAgICAgIHJldHVybjsKPiAKPiAgICAgICAgIGNsaXAueDEgPSB4Owo+ICAgICAgICAg Y2xpcC54MiA9IHggKyB3aWR0aCAtMTsKPiAgICAgICAgIGNsaXkueTEgPSB5Owo+ICAgICAgICAg Y2xpcC55MiA9IHkgKyBoZWlnaHQgLSAxOwo+IAo+ICAgICAgICAgc3Bpbl9sb2NrKCZoZWxwZXIt PmRpcnR5X2xvY2spOwo+ICAgICAgICAgLyogVE9ETyBtZXJnZSBjbGlwIHdpdGggaGVscGVyLT5k aXJ0eV9jbGlwICovCj4gICAgICAgICBzcGluX3VubG9jaygmaGVscGVyLT5kaXJ0eV9sb2NrKTsK PiAKPiAgICAgICAgIHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+ZGVmZXJyZWRfd29yaywg aW5mby0+ZmJkZWZpby0+ZGVsYXkpOwo+IH0KPiAKPiAKPiBTbyB0aGUgcXVlc3Rpb24gSSBoYXZl IGFza2VkIGlzIHRoaXM6IEhvdyBjYW4gdGhlIGRyaXZlciBzZXQgdGhlCj4gZGlydHkoKSBmdW5j dGlvbiB3aXRoaW4gZHJtX2ZiX2NtYV9oZWxwZXI/Cj4gCj4gSGF2aW5nIGxvb2tlZCBhdCB0aGUg Y29kZSBvdmVyIGFuZCBvdmVyIGFnYWluLCBJIGhhdmUgYSBzdWdnZXN0aW9uLAo+IGJ1dCBpdCBh c3N1bWVzIHRoYXQgaXQncyBhbGxvd2VkIHRvIGNoYW5nZSBmYi0+ZnVuY3MuCj4gCj4gRmlyc3Qg dGhlIG5lY2Vzc2FyeSBkcm1fZmJfY21hX2hlbHBlciBjaGFuZ2VzOgo+IAo+IEVYUE9SVF9TWU1C T0woZHJtX2ZiX2NtYV9kZXN0cm95KTsKPiBFWFBPUlRfU1lNQk9MKGRybV9mYl9jbWFfY3JlYXRl X2hhbmRsZSk7Cj4gRVhQT1JUX1NZTUJPTChkcm1fZmJkZXZfY21hX2NyZWF0ZSk7Cj4gCj4gLyog VGhpcyBpcyB0aGUgZHJtX2ZiZGV2X2NtYV9pbml0KCkgY29kZSB3aXRoIG9uZSBjaGFuZ2UgKi8K PiBzdHJ1Y3QgZHJtX2ZiZGV2X2NtYSAqZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhfZnVuY3Moc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiAgICAgICAgIHVuc2lnbmVkIGludCBwcmVmZXJyZWRfYnBw LCB1bnNpZ25lZCBpbnQgbnVtX2NydGMsCj4gICAgICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5f Y291bnQsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgKmZ1bmNzKQo+IHsKPiBbLi4uXQo+ ICAgICAgICAgZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKGRldiwgaGVscGVyLCBmdW5jcyk7Cj4gWy4u Ll0KPiB9Cj4gCj4gc3RydWN0IGRybV9mYmRldl9jbWEgKmRybV9mYmRldl9jbWFfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgICAgICAgdW5zaWduZWQgaW50IHByZWZlcnJlZF9icHAs IHVuc2lnbmVkIGludCBudW1fY3J0YywKPiAgICAgICAgIHVuc2lnbmVkIGludCBtYXhfY29ubl9j b3VudCkKPiB7Cj4gICAgICAgICByZXR1cm4gZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhfZnVuY3Mo ZGV2LCBwcmVmZXJyZWRfYnBwLCBudW1fY3J0YywKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYXhfY29ubl9jb3VudCwKPiAmZHJtX2ZiX2NtYV9oZWxwZXJf ZnVuY3MpOwo+IH0KPiAKPiAKPiBOb3cgdGlueWRybSBzaG91bGQgYmUgYWJsZSB0byBkbyB0aGlz Ogo+IAo+IHN0YXRpYyBpbnQgdGlueWRybV9mYmRldl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZs YWdzLCB1bnNpZ25lZCBjb2xvciwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBudW1fY2xpcHMpCj4gewo+ICAgICAgICAgc3RydWN0IGRybV9mYl9oZWxwZXIg KmhlbHBlciA9IGluZm8tPnBhcjsKPiAgICAgICAgIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRl diA9IGhlbHBlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiAgICAgICAgIHN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgKmZiID0gaGVscGVyLT5mYjsKPiAgICAgICAgIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKmNtYV9vYmo7Cj4gCj4gICAgICAgICBpZiAodGRldi0+cGxhbmUuZmIgIT0gZmIpCj4gICAg ICAgICAgICAgICAgIHJldHVybiAwOwo+IAo+ICAgICAgICAgY21hX29iaiA9IGRybV9mYl9jbWFf Z2V0X2dlbV9vYmooZmIsIDApOwo+ICAgICAgICAgaWYgKCFjbWFfb2JqKSB7Cj4gICAgICAgICAg ICAgICAgIGRldl9lcnJfb25jZShpbmZvLT5kZXYsICJDYW4ndCBnZXQgY21hX29ialxuIik7Cj4g ICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICAgICAgICAgfQo+IAo+ICAgICAgICAg cmV0dXJuIHRkZXYtPmRpcnR5ZmIoZmIsIGNtYV9vYmotPnZhZGRyLCBmbGFncywgY29sb3IsIGNs aXBzLAo+IG51bV9jbGlwcyk7Cj4gfQo+IAo+IHN0YXRpYyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy X2Z1bmNzIHRpbnlkcm1fZmJfY21hX2Z1bmNzID0gewo+ICAgICAgICAgLmRlc3Ryb3kgICAgICAg ID0gZHJtX2ZiX2NtYV9kZXN0cm95LAo+ICAgICAgICAgLmNyZWF0ZV9oYW5kbGUgID0gZHJtX2Zi X2NtYV9jcmVhdGVfaGFuZGxlLAo+ICAgICAgICAgLmRpcnR5ICAgICAgICAgID0gdGlueWRybV9m YmRldl9kaXJ0eSwKPiB9OwoKQWgsIGNtYSBtaWRsYXllciBzdHJpa2VzIGFnYWluLiBXZSd2ZSBo YWQgYSBzaW1pbGFyIGRpc2N1c3Npb24gYXJvdW5kIHRoZQpnZW0gc2lkZSB3aGVuIHZjNCBsYW5k ZWQgZm9yIHNpbWlsYXIgcmVhc29ucyBpaXJjIC0gaXQncyBoYXJkIHRvIG92ZXJ3cml0ZQpzcGVj aWZpYyBoZWxwZXIgZnVuY3Rpb25zIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3VyLgoKSSBndWVz cyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gd291bGQgYmUgdG8gZXhwb3J0CmRybV9mYl9jbWFfZGVz dHJveS9jcmVhdGVfaGFuZGxlIGZ1bmN0aW9ucywgYW5kIHRoZW4gYWRkIGEKZHJtX2ZiX2NtYV9j cmVhdGVfd2l0aF9mdW5jcyBoZWxwZXIgd2hpY2ggeW91IGNhbiB1c2UgbGlrZSB0aGlzOgoKc3Rh dGljIGludCB0aW55ZHJtX2ZiZGV2X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1 cmZhY2Vfc2l6ZSAqc2l6ZXMpCnsKCXJldHVybiBkcm1fZmJfY21hX2NyZWF0ZV93aXRoX2Z1bmNz KGhlbHBlciwgc2l6ZXMsIHRpbnlkcm1fZmJfY21hX2Z1bmNzKTsKfQoKQ2hhbmdpbmcgZmItPmZ1 bmNzIGFmdGVyIGRybV9mcmFtZWJ1ZmZlcl9pbml0IGlzIGNhbGxlZCBpcyBhIG5vLWdvLCBzaW5j ZQp0aGF0IGZ1bmN0aW9uIGFsc28gcmVnaXN0ZXJzIHRoZSBmcmFtZWJ1ZmZlciBhbmQgbWFrZXMg aXQgdXNlcnNwYWNlCmFjY2Vzc2libGUuIFNvIGFmdGVyIHRoYXQgcG9pbnQgb3RoZXIgdGhyZWFk cyBjYW4gZ28mbG9vayBhdCBmYi0+ZnVuY3MuCgo+IAo+IHN0YXRpYyBpbnQgdGlueWRybV9mYmRl dl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMp Cj4gewo+ICAgICAgICAgc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gaGVscGVyLT5kZXYt PmRldl9wcml2YXRlOwo+ICAgICAgICAgc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvOwo+ ICAgICAgICAgc3RydWN0IGZiX29wcyAqZmJvcHM7Cj4gICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAq aW5mbzsKPiAKPiAgICAgICAgIC8qCj4gICAgICAgICAgKiBBIHBlciBkZXZpY2Ugc3RydWN0dXJl IGlzIG5lZWRlZCBmb3I6Cj4gICAgICAgICAgKiAtIGZib3BzIGJlY2F1c2UgZmJfZGVmZXJyZWRf aW9fY2xlYW51cCgpIGNsZWFycyBmYm9wcy5mYl9tbWFwCj4gICAgICAgICAgKiAtIGZiZGVmaW8g dG8gZ2V0IHBlciBkZXZpY2UgZGVsYXkKPiAgICAgICAgICAqLwo+ICAgICAgICAgZmJvcHMgPSBk ZXZtX2t6YWxsb2MoaGVscGVyLT5kZXYtPmRldiwgc2l6ZW9mKCpmYm9wcyksIEdGUF9LRVJORUwp Owo+ICAgICAgICAgZmJkZWZpbyA9IGRldm1fa3phbGxvYyhoZWxwZXItPmRldi0+ZGV2LCBzaXpl b2YoKmZiZGVmaW8pLAo+IEdGUF9LRVJORUwpOwo+ICAgICAgICAgaWYgKCFmYm9wcyB8fCAhZmJk ZWZpbykKPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gCj4gICAgICAgICByZXQg PSBkcm1fZmJkZXZfY21hX2NyZWF0ZShoZWxwZXIsIHNpemVzKTsKPiAgICAgICAgIGlmIChyZXQp Cj4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gCj4gICAgICAgICBoZWxwZXItPmZiLT5m dW5jcyA9ICZ0aW55ZHJtX2ZiX2NtYV9mdW5jczsKCk9rLCBmaXJzdCB0aGluZyBJJ3ZlIGZvcmdv dHRlbiBpcyB0aGF0IHRoZSBmYmRldiBjbWEgaGVscGVyIGRvZXNuJ3QgY2FsbAptb2RlX2NvbmZp Zy0+ZnVuY3MtPmZiX2NyZWF0ZSBhbmQgc28gZ2V0cyB0aGUgd3JvbmcgZmItPmZ1bmNzLiBPbmUg dGhpbmcKSSd2ZSBwb25kZXJlZCBmb3IgZGlmZmVyZW50IHJlYXNvbnMgbGF0ZWx5IGlzIHdoZXRo ZXIgdGhlIGZiZGV2IGVtdWxhdGlvbgpzaG91bGQgZ3JvdyBhIGZha2UgZHJtX2ZpbGUgZnByaXYu IFdpdGggdGhhdCB3ZSBjb3VsZCBqdXN0IGFsbG9jYXRlIGEgZHVtYgpidWZmZXIgYW5kIHBhc3Mg aXQgdG8gLT5mYl9jcmVhdGUgKGl0IHRha2VzIGEgaGFuZGxlLCB3aGljaCBtZWFucyB3ZSBuZWVk CmEgZmFrZSBmcHJpdikuIEkgdGhpbmsgdGhhdCB3b3VsZCBmdWxseSBkZW1pZGxheWVyIGNtYSBo ZWxwZXJzLiBPciB3ZQpjcmVhdGUgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIHRvIGRvIC0+ZmJfY3Jl YXRlIGJ1dCB3aXRoIGdlbSBvYmplY3RzCmluc3RlYWQgb2YgaWRzIGxpa2Ugd2hhdCB3ZSd2ZSBk b25lIGZvciB2YzQuIE9yIHdlIGp1c3Qgb3Blbi1jb2RlIGl0IGFsbC4KCk5vdCBzdXJlIHdoaWNo IGlzIGJldHRlciBoZXJlLgoKPiAKPiAgICAgICAgIGluZm8gPSBmYl9oZWxwZXItPmZiZGV2Owo+ ICAgICAgICAgLyoKPiAgICAgICAgICAqIGZiX2RlZmVycmVkX2lvIHJlcXVpcmVzIGEgdm1hbGxv YyBhZGRyZXNzIG9yIGEgcGh5c2ljYWwgYWRkcmVzcy4KPiAgICAgICAgICAqIGRybV9mYmRldl9j bWFfY3JlYXRlKCkgc2V0cyBzbWVtX3N0YXJ0IHRvIHRoZSBkbWEgYWRkcmVzcyB3aGljaAo+IGlz Cj4gICAgICAgICAgKiBhIGRldmljZSBhZGRyZXNzLiBUaGlzIGlzbid0IGFsd2F5cyBhIHBoeXNp Y2FsIGFkZHJlc3MuCj4gICAgICAgICAgKi8KPiAgICAgICAgIGluZm8tPnNtZW1fc3RhcnQgPSBw YWdlX3RvX3BoeXModmlydF90b19wYWdlKGluZm8tPnNjcmVlbl9idWZmZXIpKTsKPiAKPiAgICAg ICAgICpmYm9wcyA9ICppbmZvLT5mYm9wczsKPiAgICAgICAgIGluZm8tPmZib3BzID0gZmJvcHM7 Cj4gCj4gICAgICAgICBpbmZvLT5mYmRlZmlvID0gZmJkZWZpbzsKPiAgICAgICAgIGZiZGVmaW8t PmRlZmVycmVkX2lvID0gZHJtX2ZiX2hlbHBlcl9kZWZlcnJlZF9pbzsKPiAgICAgICAgIGZiZGVm aW8tPmRlbGF5ID0gbXNlY3NfdG9famlmZmllcyh0ZGV2LT5kZWZlcnJlZC0+ZGVmZXJfbXMpOwo+ ICAgICAgICAgLyogZGVsYXk9MCBpcyB0dXJuZWQgaW50byBkZWxheT1IWiwgc28gdXNlIDEgYXMg YSBtaW5pbXVtICovCj4gICAgICAgICBpZiAoIWZiZGVmaW8tPmRlbGF5KQo+ICAgICAgICAgICAg ICAgICBmYmRlZmlvLT5kZWxheSA9IDE7Cj4gICAgICAgICBmYl9kZWZlcnJlZF9pb19pbml0KGlu Zm8pOwo+IAo+ICAgICAgICAgcmV0dXJuIDA7Cj4gfQo+IAo+IHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2ZiX2hlbHBlcl9mdW5jcyA9IHsKPiAgICAgICAg IC5mYl9wcm9iZSA9IHRpbnlkcm1fZmJkZXZfY3JlYXRlLAo+IH07Cj4gCj4gaW50IHRpbnlkcm1f ZmJkZXZfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4gewo+ICAgICAgICAgc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IHRkZXYtPmJhc2U7Cj4gICAgICAgICBzdHJ1Y3QgZHJtX2Zi ZGV2X2NtYSAqY21hOwo+IAo+ICAgICAgICAgY21hID0gZHJtX2ZiZGV2X2NtYV9pbml0X3dpdGhf ZnVuY3MoZGV2LCAxNiwKPiBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAo+IGRldi0+bW9kZV9j b25maWcubnVtX2Nvbm5lY3RvciwKPiAmdGlueWRybV9mYl9oZWxwZXJfZnVuY3MpOwo+ICAgICAg ICAgaWYgKElTX0VSUihjbWEpKQo+ICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjbWEp OwoKSSB3YXMgd29uZGVyaW5nIHdoZXRoZXIgd2UgY291bGRuJ3QgYXZvaWQgdGhlIF93aXRoX2Z1 bmNzIGhlcmUgYnkgc2V0dGluZwp1cCBmYmRlZmlvIGlmZiAtPmRpcnR5IGlzIHNldC4gVGhlbiB5 b3UgY291bGQgYWRkIHRoZSBnZW5lcmljIGRlZmlvIHNldHVwCmNvZGUgdG8gZHJtX2ZiZGV2X2Nt YV9jcmVhdGUgYWZ0ZXIgaGVscGVyLT5mYiBpcyBhbGxvY2F0ZWQsIGJ1dCBvbmx5IGlmCmhlbHBl ci0+ZmItPmZ1bmNzLT5kaXJ0eSBpcyBzZXQuIE1ha2VzIGZvciBhIGJpdCBsZXNzIGJvaWxlcnBs YXRlLgoKT3IgZGlkIEkgbWlzcyBzb21ldGhpbmc/Ci1EYW5pZWwKCj4gCj4gICAgICAgICB0ZGV2 LT5mYmRldl9jbWEgPSBjbWE7Cj4gCj4gICAgICAgICByZXR1cm4gMDsKPiB9Cj4gCgotLSAKRGFu aWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Js b2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==