From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from perceval.ideasonboard.com ([213.167.242.64]:36058 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725954AbeHTLxe (ORCPT ); Mon, 20 Aug 2018 07:53:34 -0400 From: Laurent Pinchart To: Ulrich Hecht Cc: linux-renesas-soc@vger.kernel.org, dri-devel@lists.freedesktop.org, jacopo+renesas@jmondi.org, kieran.bingham+renesas@ideasonboard.com Subject: Re: [PROTO][PATCH 02/10] drm: rcar-du: Add r8a77995 device support Date: Mon, 20 Aug 2018 11:39:44 +0300 Message-ID: <12609537.6v2WhfLlsh@avalon> In-Reply-To: <1534254604-24204-3-git-send-email-uli+renesas@fpond.eu> References: <1534254604-24204-1-git-send-email-uli+renesas@fpond.eu> <1534254604-24204-3-git-send-email-uli+renesas@fpond.eu> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Ulrich, Thank you for the patch. On Tuesday, 14 August 2018 16:49:56 EEST Ulrich Hecht wrote: > Add support for the R-Car D3 (R8A77995) SoC to the R-Car DU driver. > > Based on patch by Koji Matsuoka . > > Signed-off-by: Ulrich Hecht > --- > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 17 ++++++----------- > drivers/gpu/drm/rcar-du/rcar_du_drv.c | 26 ++++++++++++++++++++++++++ > drivers/gpu/drm/rcar-du/rcar_du_drv.h | 1 + > drivers/gpu/drm/rcar-du/rcar_du_group.c | 3 ++- > 4 files changed, 35 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c index cd6803a..9153e7a 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > @@ -53,14 +53,6 @@ static void rcar_du_crtc_clr(struct rcar_du_crtc *rcrtc, > u32 reg, u32 clr) rcar_du_read(rcdu, rcrtc->mmio_offset + reg) & ~clr); > } > > -static void rcar_du_crtc_set(struct rcar_du_crtc *rcrtc, u32 reg, u32 set) > -{ > - struct rcar_du_device *rcdu = rcrtc->group->dev; > - > - rcar_du_write(rcdu, rcrtc->mmio_offset + reg, > - rcar_du_read(rcdu, rcrtc->mmio_offset + reg) | set); > -} > - > static void rcar_du_crtc_clr_set(struct rcar_du_crtc *rcrtc, u32 reg, > u32 clr, u32 set) > { > @@ -527,7 +519,8 @@ static void rcar_du_crtc_start(struct rcar_du_crtc > *rcrtc) * actively driven). > */ > interlaced = rcrtc->crtc.mode.flags & DRM_MODE_FLAG_INTERLACE; > - rcar_du_crtc_clr_set(rcrtc, DSYSR, DSYSR_TVM_MASK | DSYSR_SCM_MASK, > + rcar_du_crtc_clr_set(rcrtc, DSYSR, > + DSYSR_TVM_MASK | DSYSR_SCM_MASK | DSYSR_ILTS, The ILTS bit defaults to 0 so this shouldn't be needed. However, we never initialize the DSYSR register completely but only modify bits. It would be safer to write all bits at init time. I'll write a separate patch. > (interlaced ? DSYSR_SCM_INT_VIDEO : 0) | > DSYSR_TVM_MASTER); > > @@ -596,7 +589,9 @@ static void rcar_du_crtc_stop(struct rcar_du_crtc > *rcrtc) * Select switch sync mode. This stops display operation and > configures * the HSYNC and VSYNC signals as inputs. > */ > - rcar_du_crtc_clr_set(rcrtc, DSYSR, DSYSR_TVM_MASK, DSYSR_TVM_SWITCH); > + rcar_du_crtc_clr_set(rcrtc, DSYSR, DSYSR_TVM_MASK | DSYSR_ILTS, > + rcar_du_needs(rcrtc->group->dev, RCAR_DU_QUIRK_TVM_MASTER_ONLY) ? > + DSYSR_TVM_MASTER : DSYSR_TVM_SWITCH); Now this is a problem. The driver uses switch mode as a way to disable the display output, as the display enable bits in the DSYSR register cover a group of two DU channels. TVM switch mode was the only workaround I found to be able to disable the display output. If the D3 and E3 SoCs don't implement TVM switch mode we need a different mechanism. > rcar_du_group_start_stop(rcrtc->group, false); > } > @@ -744,7 +739,7 @@ static int rcar_du_crtc_enable_vblank(struct drm_crtc > *crtc) struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); > > rcar_du_crtc_write(rcrtc, DSRCR, DSRCR_VBCL); > - rcar_du_crtc_set(rcrtc, DIER, DIER_VBE); > + rcar_du_crtc_clr_set(rcrtc, DIER, DIER_TVE | DIER_FRE, DIER_VBE); > rcrtc->vblank_enable = true; > > return 0; > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c > b/drivers/gpu/drm/rcar-du/rcar_du_drv.c index 56f9472..5c2f764 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c > +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c > @@ -294,6 +294,31 @@ static const struct rcar_du_device_info > rcar_du_r8a77970_info = { .num_lvds = 1, > }; > > +static const struct rcar_du_device_info rcar_du_r8a77995_info = { > + .gen = 3, > + .features = RCAR_DU_FEATURE_CRTC_IRQ_CLOCK > + | RCAR_DU_FEATURE_EXT_CTRL_REGS > + | RCAR_DU_FEATURE_VSP1_SOURCE, > + .quirks = RCAR_DU_QUIRK_TVM_MASTER_ONLY, > + .channels_mask = BIT(1) | BIT(0), > + .routes = { > + /* R8A77995 has two LVDS output and one RGB output. */ > + [RCAR_DU_OUTPUT_DPAD0] = { > + .possible_crtcs = BIT(0) | BIT(1), > + .port = 0, > + }, > + [RCAR_DU_OUTPUT_LVDS0] = { > + .possible_crtcs = BIT(0), > + .port = 1, > + }, > + [RCAR_DU_OUTPUT_LVDS1] = { > + .possible_crtcs = BIT(1), > + .port = 2, > + }, > + }, > + .num_lvds = 2, > +}; > + > static const struct of_device_id rcar_du_of_table[] = { > { .compatible = "renesas,du-r8a7743", .data = &rzg1_du_r8a7743_info }, > { .compatible = "renesas,du-r8a7745", .data = &rzg1_du_r8a7745_info }, > @@ -307,6 +332,7 @@ static const struct of_device_id rcar_du_of_table[] = { > { .compatible = "renesas,du-r8a7796", .data = &rcar_du_r8a7796_info }, > { .compatible = "renesas,du-r8a77965", .data = &rcar_du_r8a77965_info }, > { .compatible = "renesas,du-r8a77970", .data = &rcar_du_r8a77970_info }, > + { .compatible = "renesas,du-r8a77995", .data = &rcar_du_r8a77995_info }, > { } > }; > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h > b/drivers/gpu/drm/rcar-du/rcar_du_drv.h index b3a25e8..6257405 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h > +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h > @@ -32,6 +32,7 @@ struct rcar_du_device; > #define RCAR_DU_FEATURE_VSP1_SOURCE (1 << 2) /* Has inputs from VSP1 */ > > #define RCAR_DU_QUIRK_ALIGN_128B (1 << 0) /* Align pitches to 128 bytes */ > +#define RCAR_DU_QUIRK_TVM_MASTER_ONLY (1 << 1) /* Does not have TV > switch/sync modes */ > > /* > * struct rcar_du_output_routing - Output routing specification > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_group.c > b/drivers/gpu/drm/rcar-du/rcar_du_group.c index d539cb2..9a0a694 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_group.c > +++ b/drivers/gpu/drm/rcar-du/rcar_du_group.c > @@ -178,7 +178,8 @@ void rcar_du_group_put(struct rcar_du_group *rgrp) > static void __rcar_du_group_start_stop(struct rcar_du_group *rgrp, bool > start) { > rcar_du_group_write(rgrp, DSYSR, > - (rcar_du_group_read(rgrp, DSYSR) & ~(DSYSR_DRES | DSYSR_DEN)) | > + (rcar_du_group_read(rgrp, DSYSR) & > + ~(DSYSR_DRES | DSYSR_DEN | DSYSR_ILTS)) | > (start ? DSYSR_DEN : DSYSR_DRES)); > } -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PROTO][PATCH 02/10] drm: rcar-du: Add r8a77995 device support Date: Mon, 20 Aug 2018 11:39:44 +0300 Message-ID: <12609537.6v2WhfLlsh@avalon> References: <1534254604-24204-1-git-send-email-uli+renesas@fpond.eu> <1534254604-24204-3-git-send-email-uli+renesas@fpond.eu> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 85AE7899F2 for ; Mon, 20 Aug 2018 08:38:53 +0000 (UTC) In-Reply-To: <1534254604-24204-3-git-send-email-uli+renesas@fpond.eu> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ulrich Hecht Cc: linux-renesas-soc@vger.kernel.org, kieran.bingham+renesas@ideasonboard.com, jacopo+renesas@jmondi.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgVWxyaWNoLAoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCgpPbiBUdWVzZGF5LCAxNCBBdWd1 c3QgMjAxOCAxNjo0OTo1NiBFRVNUIFVscmljaCBIZWNodCB3cm90ZToKPiBBZGQgc3VwcG9ydCBm b3IgdGhlIFItQ2FyIEQzIChSOEE3Nzk5NSkgU29DIHRvIHRoZSBSLUNhciBEVSBkcml2ZXIuCj4g Cj4gQmFzZWQgb24gcGF0Y2ggYnkgS29qaSBNYXRzdW9rYSA8a29qaS5tYXRzdW9rYS54bUByZW5l c2FzLmNvbT4uCj4gCj4gU2lnbmVkLW9mZi1ieTogVWxyaWNoIEhlY2h0IDx1bGkrcmVuZXNhc0Bm cG9uZC5ldT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRjLmMg IHwgMTcgKysrKysrLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9k dV9kcnYuYyAgIHwgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUv ZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuaCAgIHwgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcmNh ci1kdS9yY2FyX2R1X2dyb3VwLmMgfCAgMyArKy0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNl cnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRjLmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3Jj YXJfZHVfY3J0Yy5jIGluZGV4IGNkNjgwM2EuLjkxNTNlN2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cmNhci1kdS9yY2FyX2R1X2NydGMuYwo+IEBAIC01MywxNCArNTMsNiBAQCBzdGF0aWMgdm9pZCBy Y2FyX2R1X2NydGNfY2xyKHN0cnVjdCByY2FyX2R1X2NydGMgKnJjcnRjLAo+IHUzMiByZWcsIHUz MiBjbHIpIHJjYXJfZHVfcmVhZChyY2R1LCByY3J0Yy0+bW1pb19vZmZzZXQgKyByZWcpICYgfmNs cik7Cj4gIH0KPiAKPiAtc3RhdGljIHZvaWQgcmNhcl9kdV9jcnRjX3NldChzdHJ1Y3QgcmNhcl9k dV9jcnRjICpyY3J0YywgdTMyIHJlZywgdTMyIHNldCkKPiAtewo+IC0Jc3RydWN0IHJjYXJfZHVf ZGV2aWNlICpyY2R1ID0gcmNydGMtPmdyb3VwLT5kZXY7Cj4gLQo+IC0JcmNhcl9kdV93cml0ZShy Y2R1LCByY3J0Yy0+bW1pb19vZmZzZXQgKyByZWcsCj4gLQkJICAgICAgcmNhcl9kdV9yZWFkKHJj ZHUsIHJjcnRjLT5tbWlvX29mZnNldCArIHJlZykgfCBzZXQpOwo+IC19Cj4gLQo+ICBzdGF0aWMg dm9pZCByY2FyX2R1X2NydGNfY2xyX3NldChzdHJ1Y3QgcmNhcl9kdV9jcnRjICpyY3J0YywgdTMy IHJlZywKPiAgCQkJCSB1MzIgY2xyLCB1MzIgc2V0KQo+ICB7Cj4gQEAgLTUyNyw3ICs1MTksOCBA QCBzdGF0aWMgdm9pZCByY2FyX2R1X2NydGNfc3RhcnQoc3RydWN0IHJjYXJfZHVfY3J0Ywo+ICpy Y3J0YykgKiBhY3RpdmVseSBkcml2ZW4pLgo+ICAJICovCj4gIAlpbnRlcmxhY2VkID0gcmNydGMt PmNydGMubW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOwo+IC0JcmNhcl9kdV9j cnRjX2Nscl9zZXQocmNydGMsIERTWVNSLCBEU1lTUl9UVk1fTUFTSyB8IERTWVNSX1NDTV9NQVNL LAo+ICsJcmNhcl9kdV9jcnRjX2Nscl9zZXQocmNydGMsIERTWVNSLAo+ICsJCQkgICAgIERTWVNS X1RWTV9NQVNLIHwgRFNZU1JfU0NNX01BU0sgfCBEU1lTUl9JTFRTLAoKVGhlIElMVFMgYml0IGRl ZmF1bHRzIHRvIDAgc28gdGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLiBIb3dldmVyLCB3ZSBuZXZl ciAKaW5pdGlhbGl6ZSB0aGUgRFNZU1IgcmVnaXN0ZXIgY29tcGxldGVseSBidXQgb25seSBtb2Rp ZnkgYml0cy4gSXQgd291bGQgYmUgCnNhZmVyIHRvIHdyaXRlIGFsbCBiaXRzIGF0IGluaXQgdGlt ZS4gSSdsbCB3cml0ZSBhIHNlcGFyYXRlIHBhdGNoLgoKPiAgCQkJICAgICAoaW50ZXJsYWNlZCA/ IERTWVNSX1NDTV9JTlRfVklERU8gOiAwKSB8Cj4gIAkJCSAgICAgRFNZU1JfVFZNX01BU1RFUik7 Cj4gCj4gQEAgLTU5Niw3ICs1ODksOSBAQCBzdGF0aWMgdm9pZCByY2FyX2R1X2NydGNfc3RvcChz dHJ1Y3QgcmNhcl9kdV9jcnRjCj4gKnJjcnRjKSAqIFNlbGVjdCBzd2l0Y2ggc3luYyBtb2RlLiBU aGlzIHN0b3BzIGRpc3BsYXkgb3BlcmF0aW9uIGFuZAo+IGNvbmZpZ3VyZXMgKiB0aGUgSFNZTkMg YW5kIFZTWU5DIHNpZ25hbHMgYXMgaW5wdXRzLgo+ICAJICovCj4gLQlyY2FyX2R1X2NydGNfY2xy X3NldChyY3J0YywgRFNZU1IsIERTWVNSX1RWTV9NQVNLLCBEU1lTUl9UVk1fU1dJVENIKTsKPiAr CXJjYXJfZHVfY3J0Y19jbHJfc2V0KHJjcnRjLCBEU1lTUiwgRFNZU1JfVFZNX01BU0sgfCBEU1lT Ul9JTFRTLAo+ICsJCXJjYXJfZHVfbmVlZHMocmNydGMtPmdyb3VwLT5kZXYsIFJDQVJfRFVfUVVJ UktfVFZNX01BU1RFUl9PTkxZKSA/Cj4gKwkJRFNZU1JfVFZNX01BU1RFUiA6IERTWVNSX1RWTV9T V0lUQ0gpOwoKTm93IHRoaXMgaXMgYSBwcm9ibGVtLiBUaGUgZHJpdmVyIHVzZXMgc3dpdGNoIG1v ZGUgYXMgYSB3YXkgdG8gZGlzYWJsZSB0aGUgCmRpc3BsYXkgb3V0cHV0LCBhcyB0aGUgZGlzcGxh eSBlbmFibGUgYml0cyBpbiB0aGUgRFNZU1IgcmVnaXN0ZXIgY292ZXIgYSBncm91cCAKb2YgdHdv IERVIGNoYW5uZWxzLiBUVk0gc3dpdGNoIG1vZGUgd2FzIHRoZSBvbmx5IHdvcmthcm91bmQgSSBm b3VuZCB0byBiZSBhYmxlIAp0byBkaXNhYmxlIHRoZSBkaXNwbGF5IG91dHB1dC4gSWYgdGhlIEQz IGFuZCBFMyBTb0NzIGRvbid0IGltcGxlbWVudCBUVk0gCnN3aXRjaCBtb2RlIHdlIG5lZWQgYSBk aWZmZXJlbnQgbWVjaGFuaXNtLgoKPiAgCXJjYXJfZHVfZ3JvdXBfc3RhcnRfc3RvcChyY3J0Yy0+ Z3JvdXAsIGZhbHNlKTsKPiAgfQo+IEBAIC03NDQsNyArNzM5LDcgQEAgc3RhdGljIGludCByY2Fy X2R1X2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2NydGMKPiAqY3J0Yykgc3RydWN0IHJj YXJfZHVfY3J0YyAqcmNydGMgPSB0b19yY2FyX2NydGMoY3J0Yyk7Cj4gCj4gIAlyY2FyX2R1X2Ny dGNfd3JpdGUocmNydGMsIERTUkNSLCBEU1JDUl9WQkNMKTsKPiAtCXJjYXJfZHVfY3J0Y19zZXQo cmNydGMsIERJRVIsIERJRVJfVkJFKTsKPiArCXJjYXJfZHVfY3J0Y19jbHJfc2V0KHJjcnRjLCBE SUVSLCBESUVSX1RWRSB8IERJRVJfRlJFLCBESUVSX1ZCRSk7Cj4gIAlyY3J0Yy0+dmJsYW5rX2Vu YWJsZSA9IHRydWU7Cj4gCj4gIAlyZXR1cm4gMDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNh cl9kdV9kcnYuYyBpbmRleCA1NmY5NDcyLi41YzJmNzY0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcmNh ci1kdS9yY2FyX2R1X2Rydi5jCj4gQEAgLTI5NCw2ICsyOTQsMzEgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCByY2FyX2R1X2RldmljZV9pbmZvCj4gcmNhcl9kdV9yOGE3Nzk3MF9pbmZvID0geyAubnVt X2x2ZHMgPSAxLAo+ICB9Owo+IAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJjYXJfZHVfZGV2aWNl X2luZm8gcmNhcl9kdV9yOGE3Nzk5NV9pbmZvID0gewo+ICsJLmdlbiA9IDMsCj4gKwkuZmVhdHVy ZXMgPSBSQ0FSX0RVX0ZFQVRVUkVfQ1JUQ19JUlFfQ0xPQ0sKPiArCQkgIHwgUkNBUl9EVV9GRUFU VVJFX0VYVF9DVFJMX1JFR1MKPiArCQkgIHwgUkNBUl9EVV9GRUFUVVJFX1ZTUDFfU09VUkNFLAo+ ICsJLnF1aXJrcyA9IFJDQVJfRFVfUVVJUktfVFZNX01BU1RFUl9PTkxZLAo+ICsJLmNoYW5uZWxz X21hc2sgPSBCSVQoMSkgfCBCSVQoMCksCj4gKwkucm91dGVzID0gewo+ICsJCS8qIFI4QTc3OTk1 IGhhcyB0d28gTFZEUyBvdXRwdXQgYW5kIG9uZSBSR0Igb3V0cHV0LiAqLwo+ICsJCVtSQ0FSX0RV X09VVFBVVF9EUEFEMF0gPSB7Cj4gKwkJCS5wb3NzaWJsZV9jcnRjcyA9IEJJVCgwKSB8IEJJVCgx KSwKPiArCQkJLnBvcnQgPSAwLAo+ICsJCX0sCj4gKwkJW1JDQVJfRFVfT1VUUFVUX0xWRFMwXSA9 IHsKPiArCQkJLnBvc3NpYmxlX2NydGNzID0gQklUKDApLAo+ICsJCQkucG9ydCA9IDEsCj4gKwkJ fSwKPiArCQlbUkNBUl9EVV9PVVRQVVRfTFZEUzFdID0gewo+ICsJCQkucG9zc2libGVfY3J0Y3Mg PSBCSVQoMSksCj4gKwkJCS5wb3J0ID0gMiwKPiArCQl9LAo+ICsJfSwKPiArCS5udW1fbHZkcyA9 IDIsCj4gK307Cj4gKwo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByY2FyX2R1 X29mX3RhYmxlW10gPSB7Cj4gIAl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc0MyIs IC5kYXRhID0gJnJ6ZzFfZHVfcjhhNzc0M19pbmZvIH0sCj4gIAl7IC5jb21wYXRpYmxlID0gInJl bmVzYXMsZHUtcjhhNzc0NSIsIC5kYXRhID0gJnJ6ZzFfZHVfcjhhNzc0NV9pbmZvIH0sCj4gQEAg LTMwNyw2ICszMzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByY2FyX2R1 X29mX3RhYmxlW10gPSB7Cj4gIAl7IC5jb21wYXRpYmxlID0gInJlbmVzYXMsZHUtcjhhNzc5NiIs IC5kYXRhID0gJnJjYXJfZHVfcjhhNzc5Nl9pbmZvIH0sCj4gIAl7IC5jb21wYXRpYmxlID0gInJl bmVzYXMsZHUtcjhhNzc5NjUiLCAuZGF0YSA9ICZyY2FyX2R1X3I4YTc3OTY1X2luZm8gfSwKPiAg CXsgLmNvbXBhdGlibGUgPSAicmVuZXNhcyxkdS1yOGE3Nzk3MCIsIC5kYXRhID0gJnJjYXJfZHVf cjhhNzc5NzBfaW5mbyB9LAo+ICsJeyAuY29tcGF0aWJsZSA9ICJyZW5lc2FzLGR1LXI4YTc3OTk1 IiwgLmRhdGEgPSAmcmNhcl9kdV9yOGE3Nzk5NV9pbmZvIH0sCj4gIAl7IH0KPiAgfTsKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuaAo+IGIvZHJp dmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuaCBpbmRleCBiM2EyNWU4Li42MjU3NDA1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfZHJ2LmgKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5oCj4gQEAgLTMyLDYgKzMy LDcgQEAgc3RydWN0IHJjYXJfZHVfZGV2aWNlOwo+ICAjZGVmaW5lIFJDQVJfRFVfRkVBVFVSRV9W U1AxX1NPVVJDRQkoMSA8PCAyKQkvKiBIYXMgaW5wdXRzIGZyb20gVlNQMSAqLwo+IAo+ICAjZGVm aW5lIFJDQVJfRFVfUVVJUktfQUxJR05fMTI4QgkoMSA8PCAwKQkvKiBBbGlnbiBwaXRjaGVzIHRv IDEyOCBieXRlcyAKKi8KPiArI2RlZmluZSBSQ0FSX0RVX1FVSVJLX1RWTV9NQVNURVJfT05MWQko MSA8PCAxKQkvKiBEb2VzIG5vdCBoYXZlIFRWCj4gc3dpdGNoL3N5bmMgbW9kZXMgKi8KPiAKPiAg LyoKPiAgICogc3RydWN0IHJjYXJfZHVfb3V0cHV0X3JvdXRpbmcgLSBPdXRwdXQgcm91dGluZyBz cGVjaWZpY2F0aW9uCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJf ZHVfZ3JvdXAuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9ncm91cC5jIGlu ZGV4IGQ1MzljYjIuLjlhMGE2OTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXIt ZHUvcmNhcl9kdV9ncm91cC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9k dV9ncm91cC5jCj4gQEAgLTE3OCw3ICsxNzgsOCBAQCB2b2lkIHJjYXJfZHVfZ3JvdXBfcHV0KHN0 cnVjdCByY2FyX2R1X2dyb3VwICpyZ3JwKQo+ICBzdGF0aWMgdm9pZCBfX3JjYXJfZHVfZ3JvdXBf c3RhcnRfc3RvcChzdHJ1Y3QgcmNhcl9kdV9ncm91cCAqcmdycCwgYm9vbAo+IHN0YXJ0KSB7Cj4g IAlyY2FyX2R1X2dyb3VwX3dyaXRlKHJncnAsIERTWVNSLAo+IC0JCShyY2FyX2R1X2dyb3VwX3Jl YWQocmdycCwgRFNZU1IpICYgfihEU1lTUl9EUkVTIHwgRFNZU1JfREVOKSkgfAo+ICsJCShyY2Fy X2R1X2dyb3VwX3JlYWQocmdycCwgRFNZU1IpICYKPiArCQkgfihEU1lTUl9EUkVTIHwgRFNZU1Jf REVOIHwgRFNZU1JfSUxUUykpIHwKPiAgCQkoc3RhcnQgPyBEU1lTUl9ERU4gOiBEU1lTUl9EUkVT KSk7Cj4gIH0KCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK