From mboxrd@z Thu Jan 1 00:00:00 1970 From: zourongrong@huawei.com (Rongrong Zou) Date: Sat, 12 Nov 2016 18:36:15 +0800 Subject: [PATCH v6 6/9] drm/hisilicon/hibmc: Add encoder for VDAC In-Reply-To: References: <1477639682-22520-1-git-send-email-zourongrong@gmail.com> <1477639682-22520-7-git-send-email-zourongrong@gmail.com> Message-ID: <5826F09F.20303@huawei.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org ? 2016/11/11 6:20, Sean Paul ??: > On Fri, Oct 28, 2016 at 3:27 AM, Rongrong Zou wrote: >> Add encoder funcs and helpers for VDAC. >> >> Signed-off-by: Rongrong Zou >> --- >> drivers/gpu/drm/hisilicon/hibmc/Makefile | 2 +- >> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 6 ++ >> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 2 + >> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c | 89 ++++++++++++++++++++++++ >> 4 files changed, 98 insertions(+), 1 deletion(-) >> create mode 100644 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c >> >> diff --git a/drivers/gpu/drm/hisilicon/hibmc/Makefile b/drivers/gpu/drm/hisilicon/hibmc/Makefile >> index 72e107e..e04f114 100644 >> --- a/drivers/gpu/drm/hisilicon/hibmc/Makefile >> +++ b/drivers/gpu/drm/hisilicon/hibmc/Makefile >> @@ -1,5 +1,5 @@ >> ccflags-y := -Iinclude/drm >> -hibmc-drm-y := hibmc_drm_drv.o hibmc_drm_de.o hibmc_drm_fbdev.o hibmc_drm_power.o hibmc_ttm.o >> +hibmc-drm-y := hibmc_drm_drv.o hibmc_drm_de.o hibmc_drm_vdac.o hibmc_drm_fbdev.o hibmc_drm_power.o hibmc_ttm.o >> >> obj-$(CONFIG_DRM_HISI_HIBMC) +=hibmc-drm.o >> #obj-y += hibmc-drm.o >> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c >> index 303cd36..ba191e1 100644 >> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c >> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c >> @@ -125,6 +125,12 @@ static int hibmc_kms_init(struct hibmc_drm_device *hidev) >> return ret; >> } >> >> + ret = hibmc_encoder_init(hidev); >> + if (ret) { >> + DRM_ERROR("failed to init encoder\n"); >> + return ret; >> + } >> + >> return 0; >> } >> >> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h >> index 5731ec2..401cea4 100644 >> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h >> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h >> @@ -47,6 +47,7 @@ struct hibmc_drm_device { >> struct drm_device *dev; >> struct drm_plane plane; >> struct drm_crtc crtc; >> + struct drm_encoder encoder; > > Same comment here, you don't need to keep track of this ok, it can be dealt with like crtc. > >> bool mode_config_initialized; >> >> /* ttm */ >> @@ -87,6 +88,7 @@ static inline struct hibmc_bo *gem_to_hibmc_bo(struct drm_gem_object *gem) >> >> int hibmc_plane_init(struct hibmc_drm_device *hidev); >> int hibmc_crtc_init(struct hibmc_drm_device *hidev); >> +int hibmc_encoder_init(struct hibmc_drm_device *hidev); >> int hibmc_fbdev_init(struct hibmc_drm_device *hidev); >> void hibmc_fbdev_fini(struct hibmc_drm_device *hidev); >> >> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c >> new file mode 100644 >> index 0000000..953f659 >> --- /dev/null >> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c >> @@ -0,0 +1,89 @@ >> +/* Hisilicon Hibmc SoC drm driver >> + * >> + * Based on the bochs drm driver. >> + * >> + * Copyright (c) 2016 Huawei Limited. >> + * >> + * Author: >> + * Rongrong Zou >> + * Rongrong Zou >> + * Jianhua Li >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + */ >> + >> +#include >> +#include >> + >> +#include "hibmc_drm_drv.h" >> +#include "hibmc_drm_regs.h" >> + >> +static int defx = 800; >> +static int defy = 600; >> + >> +module_param(defx, int, 0444); >> +module_param(defy, int, 0444); >> +MODULE_PARM_DESC(defx, "default x resolution"); >> +MODULE_PARM_DESC(defy, "default y resolution"); > > Not used, and I'm not sure these are a good idea it is used in following patch, i think it is put in wrong place. > >> + >> +static void hibmc_encoder_disable(struct drm_encoder *encoder) >> +{ >> +} >> + >> +static void hibmc_encoder_enable(struct drm_encoder *encoder) >> +{ >> +} > > Null-checked, no need to stub thanks for pointing it out. > >> + >> +static void hibmc_encoder_mode_set(struct drm_encoder *encoder, >> + struct drm_display_mode *mode, >> + struct drm_display_mode *adj_mode) >> +{ >> + u32 reg; >> + struct drm_device *dev = encoder->dev; >> + struct hibmc_drm_device *hidev = dev->dev_private; >> + >> + /* just open DISPLAY_CONTROL_HISILE register bit 3:0*/ >> + reg = readl(hidev->mmio + DISPLAY_CONTROL_HISILE); >> + reg |= 0xf; > > Can you just pull this into a #define instead of explaining in the comment? ok, thanks. > >> + writel(reg, hidev->mmio + DISPLAY_CONTROL_HISILE); >> +} >> + >> +static int hibmc_encoder_atomic_check(struct drm_encoder *encoder, >> + struct drm_crtc_state *crtc_state, >> + struct drm_connector_state *conn_state) >> +{ >> + return 0; >> +} > > null-checked, remove stub ok, will do. > >> + >> +static const struct drm_encoder_helper_funcs hibmc_encoder_helper_funcs = { >> + .mode_set = hibmc_encoder_mode_set, >> + .disable = hibmc_encoder_disable, >> + .enable = hibmc_encoder_enable, >> + .atomic_check = hibmc_encoder_atomic_check, >> +}; >> + >> +static const struct drm_encoder_funcs hibmc_encoder_encoder_funcs = { >> + .destroy = drm_encoder_cleanup, >> +}; >> + >> +int hibmc_encoder_init(struct hibmc_drm_device *hidev) >> +{ >> + struct drm_device *dev = hidev->dev; >> + struct drm_encoder *encoder = &hidev->encoder; >> + int ret; >> + >> + encoder->possible_crtcs = 0x1; >> + ret = drm_encoder_init(dev, encoder, &hibmc_encoder_encoder_funcs, >> + DRM_MODE_ENCODER_DAC, NULL); >> + if (ret) { >> + DRM_ERROR("failed to init encoder\n"); > > print ret will do, thanks. > >> + return ret; >> + } >> + >> + drm_encoder_helper_add(encoder, &hibmc_encoder_helper_funcs); >> + return 0; >> +} >> -- >> 1.9.1 >> >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel at lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > _______________________________________________ > linuxarm mailing list > linuxarm at huawei.com > http://rnd-openeuler.huawei.com/mailman/listinfo/linuxarm > > . > -- Regards, Rongrong From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rongrong Zou Subject: Re: [PATCH v6 6/9] drm/hisilicon/hibmc: Add encoder for VDAC Date: Sat, 12 Nov 2016 18:36:15 +0800 Message-ID: <5826F09F.20303@huawei.com> References: <1477639682-22520-1-git-send-email-zourongrong@gmail.com> <1477639682-22520-7-git-send-email-zourongrong@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Sean Paul , Rongrong Zou Cc: Mark Rutland , Archit , shenhui@huawei.com, Tomeu Vizoso , Jonathan Corbet , Dave Airlie , catalin.marinas@arm.com, Emil Velikov , linuxarm@huawei.com, dri-devel , Xinliang Liu , james.xiong@huawei.com, Daniel Stone , Daniel Vetter , Will Deacon , lijianhua@huawei.com, Linux ARM Kernel , Benjamin Gaignard List-Id: dri-devel@lists.freedesktop.org 5ZyoIDIwMTYvMTEvMTEgNjoyMCwgU2VhbiBQYXVsIOWGmemBkzoKPiBPbiBGcmksIE9jdCAyOCwg MjAxNiBhdCAzOjI3IEFNLCBSb25ncm9uZyBab3UgPHpvdXJvbmdyb25nQGdtYWlsLmNvbT4gd3Jv dGU6Cj4+IEFkZCBlbmNvZGVyIGZ1bmNzIGFuZCBoZWxwZXJzIGZvciBWREFDLgo+Pgo+PiBTaWdu ZWQtb2ZmLWJ5OiBSb25ncm9uZyBab3UgPHpvdXJvbmdyb25nQGdtYWlsLmNvbT4KPj4gLS0tCj4+ ICAgZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9NYWtlZmlsZSAgICAgICAgIHwgIDIg Ky0KPj4gICBkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9kcnYuYyAg fCAgNiArKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvaGlibWNfZHJtX2Ry di5oICB8ICAyICsKPj4gICBkcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2Ry bV92ZGFjLmMgfCA4OSArKysrKysrKysrKysrKysrKysrKysrKysKPj4gICA0IGZpbGVzIGNoYW5n ZWQsIDk4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fdmRhYy5jCj4+Cj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9NYWtlZmlsZQo+PiBpbmRleCA3MmUxMDdl Li5lMDRmMTE0IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1j L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9oaXNpbGljb24vaGlibWMvTWFrZWZp bGUKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAgY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KPj4g LWhpYm1jLWRybS15IDo9IGhpYm1jX2RybV9kcnYubyBoaWJtY19kcm1fZGUubyBoaWJtY19kcm1f ZmJkZXYubyBoaWJtY19kcm1fcG93ZXIubyBoaWJtY190dG0ubwo+PiAraGlibWMtZHJtLXkgOj0g aGlibWNfZHJtX2Rydi5vIGhpYm1jX2RybV9kZS5vIGhpYm1jX2RybV92ZGFjLm8gaGlibWNfZHJt X2ZiZGV2Lm8gaGlibWNfZHJtX3Bvd2VyLm8gaGlibWNfdHRtLm8KPj4KPj4gICBvYmotJChDT05G SUdfRFJNX0hJU0lfSElCTUMpICAgKz1oaWJtYy1kcm0ubwo+PiAgICNvYmoteSArPSBoaWJtYy1k cm0ubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJt Y19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9k cnYuYwo+PiBpbmRleCAzMDNjZDM2Li5iYTE5MWUxIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9kcnYuYwo+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9kcnYuYwo+PiBAQCAtMTI1LDYgKzEyNSwx MiBAQCBzdGF0aWMgaW50IGhpYm1jX2ttc19pbml0KHN0cnVjdCBoaWJtY19kcm1fZGV2aWNlICpo aWRldikKPj4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+PiAgICAgICAgICB9Cj4+Cj4+ ICsgICAgICAgcmV0ID0gaGlibWNfZW5jb2Rlcl9pbml0KGhpZGV2KTsKPj4gKyAgICAgICBpZiAo cmV0KSB7Cj4+ICsgICAgICAgICAgICAgICBEUk1fRVJST1IoImZhaWxlZCB0byBpbml0IGVuY29k ZXJcbiIpOwo+PiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4gKyAgICAgICB9Cj4+ICsK Pj4gICAgICAgICAgcmV0dXJuIDA7Cj4+ICAgfQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2hpc2lsaWNvbi9oaWJtYy9oaWJtY19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0v aGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV9kcnYuaAo+PiBpbmRleCA1NzMxZWMyLi40MDFjZWE0 IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2Ry bV9kcnYuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxpY29uL2hpYm1jL2hpYm1jX2Ry bV9kcnYuaAo+PiBAQCAtNDcsNiArNDcsNyBAQCBzdHJ1Y3QgaGlibWNfZHJtX2RldmljZSB7Cj4+ ICAgICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICAqZGV2Owo+PiAgICAgICAgICBzdHJ1Y3QgZHJt X3BsYW5lIHBsYW5lOwo+PiAgICAgICAgICBzdHJ1Y3QgZHJtX2NydGMgY3J0YzsKPj4gKyAgICAg ICBzdHJ1Y3QgZHJtX2VuY29kZXIgZW5jb2RlcjsKPgo+IFNhbWUgY29tbWVudCBoZXJlLCB5b3Ug ZG9uJ3QgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoaXMKCm9rLCBpdCBjYW4gYmUgZGVhbHQgd2l0 aCBsaWtlIGNydGMuCgo+Cj4+ICAgICAgICAgIGJvb2wgbW9kZV9jb25maWdfaW5pdGlhbGl6ZWQ7 Cj4+Cj4+ICAgICAgICAgIC8qIHR0bSAqLwo+PiBAQCAtODcsNiArODgsNyBAQCBzdGF0aWMgaW5s aW5lIHN0cnVjdCBoaWJtY19ibyAqZ2VtX3RvX2hpYm1jX2JvKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqZ2VtKQo+Pgo+PiAgIGludCBoaWJtY19wbGFuZV9pbml0KHN0cnVjdCBoaWJtY19kcm1fZGV2 aWNlICpoaWRldik7Cj4+ICAgaW50IGhpYm1jX2NydGNfaW5pdChzdHJ1Y3QgaGlibWNfZHJtX2Rl dmljZSAqaGlkZXYpOwo+PiAraW50IGhpYm1jX2VuY29kZXJfaW5pdChzdHJ1Y3QgaGlibWNfZHJt X2RldmljZSAqaGlkZXYpOwo+PiAgIGludCBoaWJtY19mYmRldl9pbml0KHN0cnVjdCBoaWJtY19k cm1fZGV2aWNlICpoaWRldik7Cj4+ICAgdm9pZCBoaWJtY19mYmRldl9maW5pKHN0cnVjdCBoaWJt Y19kcm1fZGV2aWNlICpoaWRldik7Cj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aGlzaWxpY29uL2hpYm1jL2hpYm1jX2RybV92ZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaGlzaWxp Y29uL2hpYm1jL2hpYm1jX2RybV92ZGFjLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5k ZXggMDAwMDAwMC4uOTUzZjY1OQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9oaXNpbGljb24vaGlibWMvaGlibWNfZHJtX3ZkYWMuYwo+PiBAQCAtMCwwICsxLDg5IEBA Cj4+ICsvKiBIaXNpbGljb24gSGlibWMgU29DIGRybSBkcml2ZXIKPj4gKyAqCj4+ICsgKiBCYXNl ZCBvbiB0aGUgYm9jaHMgZHJtIGRyaXZlci4KPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTYgSHVhd2VpIExpbWl0ZWQuCj4+ICsgKgo+PiArICogQXV0aG9yOgo+PiArICogICAgIFJvbmdy b25nIFpvdSA8em91cm9uZ3JvbmdAaHVhd2VpLmNvbT4KPj4gKyAqICAgICBSb25ncm9uZyBab3Ug PHpvdXJvbmdyb25nQGdtYWlsLmNvbT4KPj4gKyAqICAgICBKaWFuaHVhIExpIDxsaWppYW5odWFA aHVhd2VpLmNvbT4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK Pj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVy Lmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArCj4+ICsjaW5jbHVk ZSAiaGlibWNfZHJtX2Rydi5oIgo+PiArI2luY2x1ZGUgImhpYm1jX2RybV9yZWdzLmgiCj4+ICsK Pj4gK3N0YXRpYyBpbnQgZGVmeCA9IDgwMDsKPj4gK3N0YXRpYyBpbnQgZGVmeSA9IDYwMDsKPj4g Kwo+PiArbW9kdWxlX3BhcmFtKGRlZngsIGludCwgMDQ0NCk7Cj4+ICttb2R1bGVfcGFyYW0oZGVm eSwgaW50LCAwNDQ0KTsKPj4gK01PRFVMRV9QQVJNX0RFU0MoZGVmeCwgImRlZmF1bHQgeCByZXNv bHV0aW9uIik7Cj4+ICtNT0RVTEVfUEFSTV9ERVNDKGRlZnksICJkZWZhdWx0IHkgcmVzb2x1dGlv biIpOwo+Cj4gTm90IHVzZWQsIGFuZCBJJ20gbm90IHN1cmUgdGhlc2UgYXJlIGEgZ29vZCBpZGVh CgppdCBpcyB1c2VkIGluIGZvbGxvd2luZyBwYXRjaCwgaSB0aGluayBpdCBpcyBwdXQgaW4gd3Jv bmcgcGxhY2UuCgo+Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGhpYm1jX2VuY29kZXJfZGlzYWJsZShz dHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4+ICt7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGhpYm1jX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKPj4g K3sKPj4gK30KPgo+IE51bGwtY2hlY2tlZCwgbm8gbmVlZCB0byBzdHViCgp0aGFua3MgZm9yIHBv aW50aW5nIGl0IG91dC4KCj4KPj4gKwo+PiArc3RhdGljIHZvaWQgaGlibWNfZW5jb2Rlcl9tb2Rl X3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9t b2RlKQo+PiArewo+PiArICAgICAgIHUzMiByZWc7Cj4+ICsgICAgICAgc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGVuY29kZXItPmRldjsKPj4gKyAgICAgICBzdHJ1Y3QgaGlibWNfZHJtX2Rldmlj ZSAqaGlkZXYgPSBkZXYtPmRldl9wcml2YXRlOwo+PiArCj4+ICsgICAgICAgLyoganVzdCBvcGVu IERJU1BMQVlfQ09OVFJPTF9ISVNJTEUgcmVnaXN0ZXIgYml0IDM6MCovCj4+ICsgICAgICAgcmVn ID0gcmVhZGwoaGlkZXYtPm1taW8gKyBESVNQTEFZX0NPTlRST0xfSElTSUxFKTsKPj4gKyAgICAg ICByZWcgfD0gMHhmOwo+Cj4gQ2FuIHlvdSBqdXN0IHB1bGwgdGhpcyBpbnRvIGEgI2RlZmluZSBp bnN0ZWFkIG9mIGV4cGxhaW5pbmcgaW4gdGhlIGNvbW1lbnQ/CgpvaywgdGhhbmtzLgoKPgo+PiAr ICAgICAgIHdyaXRlbChyZWcsIGhpZGV2LT5tbWlvICsgRElTUExBWV9DT05UUk9MX0hJU0lMRSk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaGlibWNfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZSkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gMDsKPj4gK30KPgo+IG51bGwtY2hl Y2tlZCwgcmVtb3ZlIHN0dWIKCm9rLCB3aWxsIGRvLgoKPgo+PiArCj4+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyBoaWJtY19lbmNvZGVyX2hlbHBlcl9mdW5j cyA9IHsKPj4gKyAgICAgICAubW9kZV9zZXQgPSBoaWJtY19lbmNvZGVyX21vZGVfc2V0LAo+PiAr ICAgICAgIC5kaXNhYmxlID0gaGlibWNfZW5jb2Rlcl9kaXNhYmxlLAo+PiArICAgICAgIC5lbmFi bGUgPSBoaWJtY19lbmNvZGVyX2VuYWJsZSwKPj4gKyAgICAgICAuYXRvbWljX2NoZWNrID0gaGli bWNfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9lbmNvZGVyX2Z1bmNzIGhpYm1jX2VuY29kZXJfZW5jb2Rlcl9mdW5jcyA9IHsKPj4g KyAgICAgICAuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCj4+ICt9Owo+PiArCj4+ICtp bnQgaGlibWNfZW5jb2Rlcl9pbml0KHN0cnVjdCBoaWJtY19kcm1fZGV2aWNlICpoaWRldikKPj4g K3sKPj4gKyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaGlkZXYtPmRldjsKPj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmaGlkZXYtPmVuY29kZXI7Cj4+ICsg ICAgICAgaW50IHJldDsKPj4gKwo+PiArICAgICAgIGVuY29kZXItPnBvc3NpYmxlX2NydGNzID0g MHgxOwo+PiArICAgICAgIHJldCA9IGRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmaGli bWNfZW5jb2Rlcl9lbmNvZGVyX2Z1bmNzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRFJNX01PREVfRU5DT0RFUl9EQUMsIE5VTEwpOwo+PiArICAgICAgIGlmIChyZXQpIHsKPj4g KyAgICAgICAgICAgICAgIERSTV9FUlJPUigiZmFpbGVkIHRvIGluaXQgZW5jb2RlclxuIik7Cj4K PiBwcmludCByZXQKCndpbGwgZG8sIHRoYW5rcy4KCj4KPj4gKyAgICAgICAgICAgICAgIHJldHVy biByZXQ7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZHJtX2VuY29kZXJfaGVscGVyX2Fk ZChlbmNvZGVyLCAmaGlibWNfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+PiArICAgICAgIHJldHVy biAwOwo+PiArfQo+PiAtLQo+PiAxLjkuMQo+Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dAo+PiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPj4gaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBsaW51eGFybSBtYWls aW5nIGxpc3QKPiBsaW51eGFybUBodWF3ZWkuY29tCj4gaHR0cDovL3JuZC1vcGVuZXVsZXIuaHVh d2VpLmNvbS9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4YXJtCj4KPiAuCj4KCgotLSAKUmVnYXJkcywg Um9uZ3JvbmcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK