From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carlos Palminha Date: Thu, 21 Jan 2016 18:30:37 +0000 Subject: Whats missing in my new FB DRM driver in ARC... waiting for console_lock to return Message-Id: <56A123CD.1060706@synopsys.com> List-Id: References: <5684268E.2000607@synopsys.com> <569CF78F.7050303@synopsys.com> <569CFA9B.4060108@synopsys.com> <569E5E51.8000303@synopsys.com> <569E69EB.3010003@synopsys.com> <56A11EF1.3070004@synopsys.com> In-Reply-To: <56A11EF1.3070004@synopsys.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Xinliang Liu , Carlos Palminha , Alexey Brodkin , Vineet Gupta Cc: "linux-snps-arc@lists.infradead.org" , linux-fbdev@vger.kernel.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, dri-devel hi... i just found that its blocking waiting for console_lock... @vineet, alexey: i think that console_lock is architecture dependent right? Do you know any issue with console_lock for ARC? On 21-01-2016 18:09, Carlos Palminha wrote: > i made some progress in identifying the issue... > When my driver calls drm_fb_helper_initial_config it seems DRM blocks waiting for register_framebuffer to return. > The sequence is drm_fb_helper_initial_config->drm_fb_helper_single_fb_probe->register_framebuffer. > > Its strange because register_framebuffer function is just a mutex around do_register_framebuffer. > > Any clue?! > > On 20-01-2016 01:24, Xinliang Liu wrote: >> On 20 January 2016 at 00:52, Carlos Palminha >> wrote: >>> when i boot the kernel and connect the HDMI cable after booting i can retrieve 4 modes... :) >>> >>> if i boot linux with the HDMI cable inserted the kernel hangs. >> >> What's the hang kernel log. Is it a oops? >> >>> Possible relation with HPD? >> >> Yes, I think there might be something wrong with the HPD interrupt or >> the EDID ready interrupt. >> I do meet the similar issue before when I using the upstream adv7511 >> driver to enable adv7533. >> I found that the HPD and EDID interrupt is not reliable. >> In order to get modes stably, I have to add some delay like bellow: >> -- >> --- a/drivers/gpu/drm/i2c/adv7511.c >> +++ b/drivers/gpu/drm/i2c/adv7511.c >> @@ -657,6 +657,8 @@ static int adv7511_get_modes(struct adv7511 *adv7511, >> regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER, >> ADV7511_POWER_POWER_DOWN, 0); >> adv7511->current_edid_segment = -1; >> + /* wait some time for edid is ready */ >> + msleep(200); >> } >> >> edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511); >> -- >> >> Best, >> -xinliang >> >>> >>> Regards, >>> C.Palminha >>> >>> # modetest -M drm-arcpgu -c >>> Connectors: >>> id encoder status type size (mm) modes encoders >>> 21 0 connected HDMI-A 0x0 4 20 >>> modes: >>> name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot) >>> 800x600 60 800 840 968 1056 600 601 605 628 flags: phsync, pvsync; type: driver >>> 800x600 56 800 824 896 1024 600 601 603 625 flags: phsync, pvsync; type: driver >>> 848x480 60 848 864 976 1088 480 486 494 517 flags: phsync, pvsync; type: driver >>> 640x480 60 640 656 752 800 480 490 492 525 flags: nhsync, nvsync; type: driver >>> props: >>> 1 EDID: >>> flags: immutable blob >>> blobs: >>> >>> value: >>> 2 DPMS: >>> flags: enum >>> enums: On=0 Standby=1 Suspend=2 Off=3 >>> value: 0 >>> >>> # >>> >>> On 19-01-2016 16:03, Carlos Palminha wrote: >>>> Hi Xiang, >>>> >>>> Its returning 0 modes... :( >>>> >>>> Regards, >>>> C.Palminha >>>> >>>> # modetest -M drm-arcpgu -c >>>> Connectors: >>>> id encoder status type size (mm) modes encoders >>>> 21 0 disconnected HDMI-A 0x0 0 20 >>>> props: >>>> 1 EDID: >>>> flags: immutable blob >>>> blobs: >>>> >>>> value: >>>> 2 DPMS: >>>> flags: enum >>>> enums: On=0 Standby=1 Suspend=2 Off=3 >>>> value: 0 >>>> >>>> # >>>> >>>> On 19-01-2016 03:38, Xinliang Liu wrote: >>>>> On 18 January 2016 at 22:45, Carlos Palminha >>>>> wrote: >>>>> >>>>>> I'm also getting a message from DRM saying can't find any crtc or >>>>>> sizes...i'm really missing something here. >>>>>> :( >>>>>> >>>>>> -- log -- >>>>>> [drm] Initialized drm 1.1.0 20060810 >>>>>> drm-arcpgu e0017000.pgu: No connectors reported connected with modes >>>>>> [drm] Cannot find any crtc or sizes - going 1024x768 >>>>>> Console: switching to colour frame buffer device 128x48 >>>>>> drm-arcpgu e0017000.pgu: fb0: frame buffer device >>>>>> [drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0 >>>>>> -- log --- >>>>>> >>>>>> Any help? >>>>>> >>>>>> Regards, >>>>>> C.Palminha >>>>>> >>>>>> >>>>>> On 18-01-2016 14:32, Carlos Palminha wrote: >>>>>>> Hi Xinliang, >>>>>>> >>>>>>> My get_modes seems to be implemented as the rcar driver... >>>>>>> Probably still missing some init step? >>>>>>> >>>>>>> Regards, >>>>>>> C.Palminha >>>>>>> >>>>>>> >>>>>>> static int arcpgu_drm_connector_get_modes(struct drm_connector >>>>>> *connector) >>>>>>> { >>>>>>> struct drm_encoder_slave *slave; >>>>>>> const struct drm_encoder_slave_funcs *sfuncs; >>>>>>> struct arcpgu_drm_connector * con >>>>>>> container_of(connector, struct arcpgu_drm_connector, connector); >>>>>>> >>>>>>> slave = con->encoder_slave; >>>>>>> if(slave = NULL) { >>>>>>> dev_err(connector->dev->dev, >>>>>>> "connector_get_modes: cannot find slave encoder for connector\n"); >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> sfuncs = slave->slave_funcs; >>>>>>> if(sfuncs->get_modes = NULL){ >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> return sfuncs-> >>>>>> >>>>>> get_modes(&slave->base,connector); >>>>>>> } >>>>>>> >>>>>> >>>>> >>>>> so, this will call adv7511 driver's >>>>> >>>>> get_modes call back. >>>>> I wonder if the system boot up, it can get modes or not. >>>>> You can test it with the modetest. i.e. $ modetest -M DRM_DRIVER_NAME -c >>>>> >>>>> >>>>> >>>>> >>>>>>> On 31-12-2015 02:19, Xinliang Liu wrote: >>>>>>>> >>>>>>>> >>>>>>>> On 31 December 2015 at 02:46, Carlos Palminha >>>>>>>> > >>>>>> wrote: >>>>>>>> >>>>>>>> Hi guys, >>>>>>>> >>>>>>>> I'm writing a DRM driver for a framebuffer embedded hardware that >>>>>>>> uses an i2c encoder (adv7511), following the basic steps suggested >>>>>>>> by Laurent in "anatomy of an embedded KMS driver": >>>>>>>> https://www.youtube.com/watch?v=Ja8fM7rTae4 >>>>>>>> >>>>>>>> After initiliazing all kms, crtc, encoder, i2c, connector functions >>>>>>>> and structures i'm calling drm_fbdev_cma_init to create a fbdev. >>>>>>>> >>>>>>>> When booting i'm getting an error message saying "No connectors >>>>>>>> reported connected with modes", but the driver init is ok and i can >>>>>>>> find the /dev/dri/* and /dev/fb0 devices. >>>>>>>> >>>>>>>> Any clue what i might be missing during the driver load? >>>>>>>> >>>>>>>> >>>>>>>> I think you should check on the 'get_modes' call back of adv7511 >>>>>>>> driver. (Or, if possible show us the code.) >>>>>>>> >>>>>>>> Best, >>>>>>>> -xinliang >>>>>>>> >>>>>>>> >>>>>>>> Thanks... >>>>>>>> >>>>>>>> Regards, >>>>>>>> C.Palminha >>>>>>>> >>>>>>>> --- boot log snippet --- >>>>>>>> [drm] Initialized drm 1.1.0 20060810 >>>>>>>> drm-arcpgu e0017000.pgu: No connectors reported connected with modes >>>>>>>> [drm] Cannot find any crtc or sizes - going 1024x768 >>>>>>>> Console: switching to colour frame buffer device 128x48 >>>>>>>> drm-arcpgu e0017000.pgu: fb0: frame buffer device >>>>>>>> [drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0 >>>>>>>> --- boot log snippet --- >>>>>>>> -- >>>>>>>> To unsubscribe from this list: send the line "unsubscribe >>>>>>>> linux-fbdev" in >>>>>>>> the body of a message to majordomo@vger.kernel.org >>>>>>>> >>>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>>>>>>> >>>>>>>> >>>>>> >>>>> From mboxrd@z Thu Jan 1 00:00:00 1970 From: CARLOS.PALMINHA@synopsys.com (Carlos Palminha) Date: Thu, 21 Jan 2016 18:30:37 +0000 Subject: Whats missing in my new FB DRM driver in ARC... waiting for console_lock to return In-Reply-To: <56A11EF1.3070004@synopsys.com> References: <5684268E.2000607@synopsys.com> <569CF78F.7050303@synopsys.com> <569CFA9B.4060108@synopsys.com> <569E5E51.8000303@synopsys.com> <569E69EB.3010003@synopsys.com> <56A11EF1.3070004@synopsys.com> List-ID: Message-ID: <56A123CD.1060706@synopsys.com> To: linux-snps-arc@lists.infradead.org hi... i just found that its blocking waiting for console_lock... @vineet, alexey: i think that console_lock is architecture dependent right? Do you know any issue with console_lock for ARC? On 21-01-2016 18:09, Carlos Palminha wrote: > i made some progress in identifying the issue... > When my driver calls drm_fb_helper_initial_config it seems DRM blocks waiting for register_framebuffer to return. > The sequence is drm_fb_helper_initial_config->drm_fb_helper_single_fb_probe->register_framebuffer. > > Its strange because register_framebuffer function is just a mutex around do_register_framebuffer. > > Any clue?! > > On 20-01-2016 01:24, Xinliang Liu wrote: >> On 20 January 2016 at 00:52, Carlos Palminha >> wrote: >>> when i boot the kernel and connect the HDMI cable after booting i can retrieve 4 modes... :) >>> >>> if i boot linux with the HDMI cable inserted the kernel hangs. >> >> What's the hang kernel log. Is it a oops? >> >>> Possible relation with HPD? >> >> Yes, I think there might be something wrong with the HPD interrupt or >> the EDID ready interrupt. >> I do meet the similar issue before when I using the upstream adv7511 >> driver to enable adv7533. >> I found that the HPD and EDID interrupt is not reliable. >> In order to get modes stably, I have to add some delay like bellow: >> -- >> --- a/drivers/gpu/drm/i2c/adv7511.c >> +++ b/drivers/gpu/drm/i2c/adv7511.c >> @@ -657,6 +657,8 @@ static int adv7511_get_modes(struct adv7511 *adv7511, >> regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER, >> ADV7511_POWER_POWER_DOWN, 0); >> adv7511->current_edid_segment = -1; >> + /* wait some time for edid is ready */ >> + msleep(200); >> } >> >> edid = drm_do_get_edid(connector, adv7511_get_edid_block, adv7511); >> -- >> >> Best, >> -xinliang >> >>> >>> Regards, >>> C.Palminha >>> >>> # modetest -M drm-arcpgu -c >>> Connectors: >>> id encoder status type size (mm) modes encoders >>> 21 0 connected HDMI-A 0x0 4 20 >>> modes: >>> name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot) >>> 800x600 60 800 840 968 1056 600 601 605 628 flags: phsync, pvsync; type: driver >>> 800x600 56 800 824 896 1024 600 601 603 625 flags: phsync, pvsync; type: driver >>> 848x480 60 848 864 976 1088 480 486 494 517 flags: phsync, pvsync; type: driver >>> 640x480 60 640 656 752 800 480 490 492 525 flags: nhsync, nvsync; type: driver >>> props: >>> 1 EDID: >>> flags: immutable blob >>> blobs: >>> >>> value: >>> 2 DPMS: >>> flags: enum >>> enums: On=0 Standby=1 Suspend=2 Off=3 >>> value: 0 >>> >>> # >>> >>> On 19-01-2016 16:03, Carlos Palminha wrote: >>>> Hi Xiang, >>>> >>>> Its returning 0 modes... :( >>>> >>>> Regards, >>>> C.Palminha >>>> >>>> # modetest -M drm-arcpgu -c >>>> Connectors: >>>> id encoder status type size (mm) modes encoders >>>> 21 0 disconnected HDMI-A 0x0 0 20 >>>> props: >>>> 1 EDID: >>>> flags: immutable blob >>>> blobs: >>>> >>>> value: >>>> 2 DPMS: >>>> flags: enum >>>> enums: On=0 Standby=1 Suspend=2 Off=3 >>>> value: 0 >>>> >>>> # >>>> >>>> On 19-01-2016 03:38, Xinliang Liu wrote: >>>>> On 18 January 2016 at 22:45, Carlos Palminha >>>>> wrote: >>>>> >>>>>> I'm also getting a message from DRM saying can't find any crtc or >>>>>> sizes...i'm really missing something here. >>>>>> :( >>>>>> >>>>>> -- log -- >>>>>> [drm] Initialized drm 1.1.0 20060810 >>>>>> drm-arcpgu e0017000.pgu: No connectors reported connected with modes >>>>>> [drm] Cannot find any crtc or sizes - going 1024x768 >>>>>> Console: switching to colour frame buffer device 128x48 >>>>>> drm-arcpgu e0017000.pgu: fb0: frame buffer device >>>>>> [drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0 >>>>>> -- log --- >>>>>> >>>>>> Any help? >>>>>> >>>>>> Regards, >>>>>> C.Palminha >>>>>> >>>>>> >>>>>> On 18-01-2016 14:32, Carlos Palminha wrote: >>>>>>> Hi Xinliang, >>>>>>> >>>>>>> My get_modes seems to be implemented as the rcar driver... >>>>>>> Probably still missing some init step? >>>>>>> >>>>>>> Regards, >>>>>>> C.Palminha >>>>>>> >>>>>>> >>>>>>> static int arcpgu_drm_connector_get_modes(struct drm_connector >>>>>> *connector) >>>>>>> { >>>>>>> struct drm_encoder_slave *slave; >>>>>>> const struct drm_encoder_slave_funcs *sfuncs; >>>>>>> struct arcpgu_drm_connector * con = >>>>>>> container_of(connector, struct arcpgu_drm_connector, connector); >>>>>>> >>>>>>> slave = con->encoder_slave; >>>>>>> if(slave == NULL) { >>>>>>> dev_err(connector->dev->dev, >>>>>>> "connector_get_modes: cannot find slave encoder for connector\n"); >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> sfuncs = slave->slave_funcs; >>>>>>> if(sfuncs->get_modes == NULL){ >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> return sfuncs-> >>>>>> >>>>>> get_modes(&slave->base,connector); >>>>>>> } >>>>>>> >>>>>> >>>>> >>>>> so, this will call adv7511 driver's >>>>> >>>>> get_modes call back. >>>>> I wonder if the system boot up, it can get modes or not. >>>>> You can test it with the modetest. i.e. $ modetest -M DRM_DRIVER_NAME -c >>>>> >>>>> >>>>> >>>>> >>>>>>> On 31-12-2015 02:19, Xinliang Liu wrote: >>>>>>>> >>>>>>>> >>>>>>>> On 31 December 2015 at 02:46, Carlos Palminha >>>>>>>> > >>>>>> wrote: >>>>>>>> >>>>>>>> Hi guys, >>>>>>>> >>>>>>>> I'm writing a DRM driver for a framebuffer embedded hardware that >>>>>>>> uses an i2c encoder (adv7511), following the basic steps suggested >>>>>>>> by Laurent in "anatomy of an embedded KMS driver": >>>>>>>> https://www.youtube.com/watch?v=Ja8fM7rTae4 >>>>>>>> >>>>>>>> After initiliazing all kms, crtc, encoder, i2c, connector functions >>>>>>>> and structures i'm calling drm_fbdev_cma_init to create a fbdev. >>>>>>>> >>>>>>>> When booting i'm getting an error message saying "No connectors >>>>>>>> reported connected with modes", but the driver init is ok and i can >>>>>>>> find the /dev/dri/* and /dev/fb0 devices. >>>>>>>> >>>>>>>> Any clue what i might be missing during the driver load? >>>>>>>> >>>>>>>> >>>>>>>> I think you should check on the 'get_modes' call back of adv7511 >>>>>>>> driver. (Or, if possible show us the code.) >>>>>>>> >>>>>>>> Best, >>>>>>>> -xinliang >>>>>>>> >>>>>>>> >>>>>>>> Thanks... >>>>>>>> >>>>>>>> Regards, >>>>>>>> C.Palminha >>>>>>>> >>>>>>>> --- boot log snippet --- >>>>>>>> [drm] Initialized drm 1.1.0 20060810 >>>>>>>> drm-arcpgu e0017000.pgu: No connectors reported connected with modes >>>>>>>> [drm] Cannot find any crtc or sizes - going 1024x768 >>>>>>>> Console: switching to colour frame buffer device 128x48 >>>>>>>> drm-arcpgu e0017000.pgu: fb0: frame buffer device >>>>>>>> [drm] Initialized drm-arcpgu 1.0.0 20151127 on minor 0 >>>>>>>> --- boot log snippet --- >>>>>>>> -- >>>>>>>> To unsubscribe from this list: send the line "unsubscribe >>>>>>>> linux-fbdev" in >>>>>>>> the body of a message to majordomo at vger.kernel.org >>>>>>>> >>>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>>>>>>> >>>>>>>> >>>>>> >>>>> From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carlos Palminha Subject: Whats missing in my new FB DRM driver in ARC... waiting for console_lock to return Date: Thu, 21 Jan 2016 18:30:37 +0000 Message-ID: <56A123CD.1060706@synopsys.com> References: <5684268E.2000607@synopsys.com> <569CF78F.7050303@synopsys.com> <569CFA9B.4060108@synopsys.com> <569E5E51.8000303@synopsys.com> <569E69EB.3010003@synopsys.com> <56A11EF1.3070004@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtprelay.synopsys.com (smtprelay2.synopsys.com [198.182.60.111]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BECF7A00C for ; Thu, 21 Jan 2016 10:30:45 -0800 (PST) In-Reply-To: <56A11EF1.3070004@synopsys.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Xinliang Liu , Carlos Palminha , Alexey Brodkin , Vineet Gupta Cc: "linux-snps-arc@lists.infradead.org" , linux-fbdev@vger.kernel.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, dri-devel List-Id: dri-devel@lists.freedesktop.org aGkuLi4KCmkganVzdCBmb3VuZCB0aGF0IGl0cyBibG9ja2luZyB3YWl0aW5nIGZvciBjb25zb2xl X2xvY2suLi4KQHZpbmVldCwgYWxleGV5OiBpIHRoaW5rIHRoYXQgY29uc29sZV9sb2NrIGlzIGFy Y2hpdGVjdHVyZSBkZXBlbmRlbnQgcmlnaHQ/IERvIHlvdSBrbm93IGFueSBpc3N1ZSB3aXRoIGNv bnNvbGVfbG9jayBmb3IgQVJDPwoKT24gMjEtMDEtMjAxNiAxODowOSwgQ2FybG9zIFBhbG1pbmhh IHdyb3RlOgo+IGkgbWFkZSBzb21lIHByb2dyZXNzIGluIGlkZW50aWZ5aW5nIHRoZSBpc3N1ZS4u Lgo+IFdoZW4gbXkgZHJpdmVyIGNhbGxzIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcgaXQg c2VlbXMgRFJNIGJsb2NrcyB3YWl0aW5nIGZvciByZWdpc3Rlcl9mcmFtZWJ1ZmZlciB0byByZXR1 cm4uCj4gVGhlIHNlcXVlbmNlIGlzIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWctPmRybV9m Yl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlLT5yZWdpc3Rlcl9mcmFtZWJ1ZmZlci4KPiAKPiBJdHMg c3RyYW5nZSBiZWNhdXNlIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyIGZ1bmN0aW9uIGlzIGp1c3QgYSBt dXRleCBhcm91bmQgZG9fcmVnaXN0ZXJfZnJhbWVidWZmZXIuCj4gCj4gQW55IGNsdWU/IQo+IAo+ IE9uIDIwLTAxLTIwMTYgMDE6MjQsIFhpbmxpYW5nIExpdSB3cm90ZToKPj4gT24gMjAgSmFudWFy eSAyMDE2IGF0IDAwOjUyLCBDYXJsb3MgUGFsbWluaGEKPj4gPENBUkxPUy5QQUxNSU5IQUBzeW5v cHN5cy5jb20+IHdyb3RlOgo+Pj4gd2hlbiBpIGJvb3QgdGhlIGtlcm5lbCBhbmQgY29ubmVjdCB0 aGUgSERNSSBjYWJsZSBhZnRlciBib290aW5nIGkgY2FuIHJldHJpZXZlIDQgbW9kZXMuLi4gOikK Pj4+Cj4+PiBpZiBpIGJvb3QgbGludXggd2l0aCB0aGUgSERNSSBjYWJsZSBpbnNlcnRlZCB0aGUg a2VybmVsIGhhbmdzLgo+Pgo+PiBXaGF0J3MgdGhlIGhhbmcga2VybmVsIGxvZy4gSXMgaXQgYSBv b3BzPwo+Pgo+Pj4gUG9zc2libGUgcmVsYXRpb24gd2l0aCBIUEQ/Cj4+Cj4+IFllcywgIEkgdGhp bmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIEhQRCBpbnRlcnJ1cHQg b3IKPj4gdGhlIEVESUQgcmVhZHkgaW50ZXJydXB0Lgo+PiBJIGRvIG1lZXQgdGhlIHNpbWlsYXIg aXNzdWUgYmVmb3JlIHdoZW4gSSB1c2luZyB0aGUgdXBzdHJlYW0gYWR2NzUxMQo+PiBkcml2ZXIg dG8gZW5hYmxlIGFkdjc1MzMuCj4+IEkgZm91bmQgdGhhdCB0aGUgSFBEIGFuZCBFRElEIGludGVy cnVwdCBpcyBub3QgcmVsaWFibGUuCj4+IEluIG9yZGVyIHRvIGdldCBtb2RlcyBzdGFibHksIEkg aGF2ZSB0byBhZGQgc29tZSBkZWxheSBsaWtlIGJlbGxvdzoKPj4gLS0KPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2kyYy9hZHY3NTExLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2kyYy9hZHY3 NTExLmMKPj4gQEAgLTY1Nyw2ICs2NTcsOCBAQCBzdGF0aWMgaW50IGFkdjc1MTFfZ2V0X21vZGVz KHN0cnVjdCBhZHY3NTExICphZHY3NTExLAo+PiAgICAgICAgICAgICAgICAgcmVnbWFwX3VwZGF0 ZV9iaXRzKGFkdjc1MTEtPnJlZ21hcCwgQURWNzUxMV9SRUdfUE9XRVIsCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQURWNzUxMV9QT1dFUl9QT1dFUl9ET1dOLCAwKTsKPj4g ICAgICAgICAgICAgICAgIGFkdjc1MTEtPmN1cnJlbnRfZWRpZF9zZWdtZW50ID0gLTE7Cj4+ICsg ICAgICAgICAgICAgICAvKiB3YWl0IHNvbWUgdGltZSBmb3IgZWRpZCBpcyByZWFkeSAqLwo+PiAr ICAgICAgICAgICAgICAgbXNsZWVwKDIwMCk7Cj4+ICAgICAgICAgfQo+Pgo+PiAgICAgICAgIGVk aWQgPSBkcm1fZG9fZ2V0X2VkaWQoY29ubmVjdG9yLCBhZHY3NTExX2dldF9lZGlkX2Jsb2NrLCBh ZHY3NTExKTsKPj4gLS0KPj4KPj4gQmVzdCwKPj4gLXhpbmxpYW5nCj4+Cj4+Pgo+Pj4gUmVnYXJk cywKPj4+IEMuUGFsbWluaGEKPj4+Cj4+PiAjIG1vZGV0ZXN0IC1NIGRybS1hcmNwZ3UgLWMKPj4+ IENvbm5lY3RvcnM6Cj4+PiBpZCAgICAgIGVuY29kZXIgc3RhdHVzICAgICAgICAgIHR5cGUgICAg c2l6ZSAobW0pICAgICAgIG1vZGVzICAgZW5jb2RlcnMKPj4+IDIxICAgICAgMCAgICAgICBjb25u ZWN0ZWQgICAgICAgSERNSS1BICAweDAgICAgICAgICAgICAgNCAgICAgICAyMAo+Pj4gICBtb2Rl czoKPj4+ICAgICAgICAgbmFtZSByZWZyZXNoIChIeikgaGRpc3AgaHNzIGhzZSBodG90IHZkaXNw IHZzcyB2c2UgdnRvdCkKPj4+ICAgODAweDYwMCA2MCA4MDAgODQwIDk2OCAxMDU2IDYwMCA2MDEg NjA1IDYyOCBmbGFnczogcGhzeW5jLCBwdnN5bmM7IHR5cGU6IGRyaXZlcgo+Pj4gICA4MDB4NjAw IDU2IDgwMCA4MjQgODk2IDEwMjQgNjAwIDYwMSA2MDMgNjI1IGZsYWdzOiBwaHN5bmMsIHB2c3lu YzsgdHlwZTogZHJpdmVyCj4+PiAgIDg0OHg0ODAgNjAgODQ4IDg2NCA5NzYgMTA4OCA0ODAgNDg2 IDQ5NCA1MTcgZmxhZ3M6IHBoc3luYywgcHZzeW5jOyB0eXBlOiBkcml2ZXIKPj4+ICAgNjQweDQ4 MCA2MCA2NDAgNjU2IDc1MiA4MDAgNDgwIDQ5MCA0OTIgNTI1IGZsYWdzOiBuaHN5bmMsIG52c3lu YzsgdHlwZTogZHJpdmVyCj4+PiAgIHByb3BzOgo+Pj4gICAgICAgICAxIEVESUQ6Cj4+PiAgICAg ICAgICAgICAgICAgZmxhZ3M6IGltbXV0YWJsZSBibG9iCj4+PiAgICAgICAgICAgICAgICAgYmxv YnM6Cj4+Pgo+Pj4gICAgICAgICAgICAgICAgIHZhbHVlOgo+Pj4gICAgICAgICAyIERQTVM6Cj4+ PiAgICAgICAgICAgICAgICAgZmxhZ3M6IGVudW0KPj4+ICAgICAgICAgICAgICAgICBlbnVtczog T249MCBTdGFuZGJ5PTEgU3VzcGVuZD0yIE9mZj0zCj4+PiAgICAgICAgICAgICAgICAgdmFsdWU6 IDAKPj4+Cj4+PiAjCj4+Pgo+Pj4gT24gMTktMDEtMjAxNiAxNjowMywgQ2FybG9zIFBhbG1pbmhh IHdyb3RlOgo+Pj4+IEhpIFhpYW5nLAo+Pj4+Cj4+Pj4gSXRzIHJldHVybmluZyAwIG1vZGVzLi4u IDooCj4+Pj4KPj4+PiBSZWdhcmRzLAo+Pj4+IEMuUGFsbWluaGEKPj4+Pgo+Pj4+ICMgbW9kZXRl c3QgLU0gZHJtLWFyY3BndSAtYwo+Pj4+IENvbm5lY3RvcnM6Cj4+Pj4gaWQgICAgICBlbmNvZGVy IHN0YXR1cyAgICAgICAgICB0eXBlICAgIHNpemUgKG1tKSAgICAgICBtb2RlcyAgIGVuY29kZXJz Cj4+Pj4gMjEgICAgICAwICAgICAgIGRpc2Nvbm5lY3RlZCAgICBIRE1JLUEgIDB4MCAgICAgICAg ICAgICAwICAgICAgIDIwCj4+Pj4gICBwcm9wczoKPj4+PiAgICAgICAgIDEgRURJRDoKPj4+PiAg ICAgICAgICAgICAgICAgZmxhZ3M6IGltbXV0YWJsZSBibG9iCj4+Pj4gICAgICAgICAgICAgICAg IGJsb2JzOgo+Pj4+Cj4+Pj4gICAgICAgICAgICAgICAgIHZhbHVlOgo+Pj4+ICAgICAgICAgMiBE UE1TOgo+Pj4+ICAgICAgICAgICAgICAgICBmbGFnczogZW51bQo+Pj4+ICAgICAgICAgICAgICAg ICBlbnVtczogT249MCBTdGFuZGJ5PTEgU3VzcGVuZD0yIE9mZj0zCj4+Pj4gICAgICAgICAgICAg ICAgIHZhbHVlOiAwCj4+Pj4KPj4+PiAjCj4+Pj4KPj4+PiBPbiAxOS0wMS0yMDE2IDAzOjM4LCBY aW5saWFuZyBMaXUgd3JvdGU6Cj4+Pj4+IE9uIDE4IEphbnVhcnkgMjAxNiBhdCAyMjo0NSwgQ2Fy bG9zIFBhbG1pbmhhIDxDQVJMT1MuUEFMTUlOSEFAc3lub3BzeXMuY29tPgo+Pj4+PiB3cm90ZToK Pj4+Pj4KPj4+Pj4+IEknbSBhbHNvIGdldHRpbmcgYSBtZXNzYWdlIGZyb20gRFJNIHNheWluZyBj YW4ndCBmaW5kIGFueSBjcnRjIG9yCj4+Pj4+PiBzaXplcy4uLmknbSByZWFsbHkgbWlzc2luZyBz b21ldGhpbmcgaGVyZS4KPj4+Pj4+IDooCj4+Pj4+Pgo+Pj4+Pj4gLS0gbG9nIC0tCj4+Pj4+PiBb ZHJtXSBJbml0aWFsaXplZCBkcm0gMS4xLjAgMjAwNjA4MTAKPj4+Pj4+IGRybS1hcmNwZ3UgZTAw MTcwMDAucGd1OiBObyBjb25uZWN0b3JzIHJlcG9ydGVkIGNvbm5lY3RlZCB3aXRoIG1vZGVzCj4+ Pj4+PiBbZHJtXSBDYW5ub3QgZmluZCBhbnkgY3J0YyBvciBzaXplcyAtIGdvaW5nIDEwMjR4NzY4 Cj4+Pj4+PiBDb25zb2xlOiBzd2l0Y2hpbmcgdG8gY29sb3VyIGZyYW1lIGJ1ZmZlciBkZXZpY2Ug MTI4eDQ4Cj4+Pj4+PiBkcm0tYXJjcGd1IGUwMDE3MDAwLnBndTogZmIwOiBmcmFtZSBidWZmZXIg ZGV2aWNlCj4+Pj4+PiBbZHJtXSBJbml0aWFsaXplZCBkcm0tYXJjcGd1IDEuMC4wIDIwMTUxMTI3 IG9uIG1pbm9yIDAKPj4+Pj4+IC0tIGxvZyAtLS0KPj4+Pj4+Cj4+Pj4+PiBBbnkgaGVscD8KPj4+ Pj4+Cj4+Pj4+PiBSZWdhcmRzLAo+Pj4+Pj4gQy5QYWxtaW5oYQo+Pj4+Pj4KPj4+Pj4+Cj4+Pj4+ PiBPbiAxOC0wMS0yMDE2IDE0OjMyLCBDYXJsb3MgUGFsbWluaGEgd3JvdGU6Cj4+Pj4+Pj4gSGkg WGlubGlhbmcsCj4+Pj4+Pj4KPj4+Pj4+PiBNeSBnZXRfbW9kZXMgc2VlbXMgdG8gYmUgaW1wbGVt ZW50ZWQgYXMgdGhlIHJjYXIgZHJpdmVyLi4uCj4+Pj4+Pj4gUHJvYmFibHkgc3RpbGwgbWlzc2lu ZyBzb21lIGluaXQgc3RlcD8KPj4+Pj4+Pgo+Pj4+Pj4+IFJlZ2FyZHMsCj4+Pj4+Pj4gQy5QYWxt aW5oYQo+Pj4+Pj4+Cj4+Pj4+Pj4KPj4+Pj4+PiBzdGF0aWMgaW50IGFyY3BndV9kcm1fY29ubmVj dG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcgo+Pj4+Pj4gKmNvbm5lY3RvcikKPj4+ Pj4+PiB7Cj4+Pj4+Pj4gc3RydWN0IGRybV9lbmNvZGVyX3NsYXZlICpzbGF2ZTsKPj4+Pj4+PiBj b25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfc2xhdmVfZnVuY3MgKnNmdW5jczsKPj4+Pj4+PiBzdHJ1 Y3QgYXJjcGd1X2RybV9jb25uZWN0b3IgKiBjb24gPQo+Pj4+Pj4+IGNvbnRhaW5lcl9vZihjb25u ZWN0b3IsIHN0cnVjdCBhcmNwZ3VfZHJtX2Nvbm5lY3RvciwgY29ubmVjdG9yKTsKPj4+Pj4+Pgo+ Pj4+Pj4+IHNsYXZlID0gY29uLT5lbmNvZGVyX3NsYXZlOwo+Pj4+Pj4+IGlmKHNsYXZlID09IE5V TEwpIHsKPj4+Pj4+PiBkZXZfZXJyKGNvbm5lY3Rvci0+ZGV2LT5kZXYsCj4+Pj4+Pj4gImNvbm5l Y3Rvcl9nZXRfbW9kZXM6IGNhbm5vdCBmaW5kIHNsYXZlIGVuY29kZXIgZm9yIGNvbm5lY3Rvclxu Iik7Cj4+Pj4+Pj4gcmV0dXJuIDA7Cj4+Pj4+Pj4gfQo+Pj4+Pj4+Cj4+Pj4+Pj4gc2Z1bmNzID0g c2xhdmUtPnNsYXZlX2Z1bmNzOwo+Pj4+Pj4+IGlmKHNmdW5jcy0+Z2V0X21vZGVzID09IE5VTEwp ewo+Pj4+Pj4+IHJldHVybiAwOwo+Pj4+Pj4+IH0KPj4+Pj4+Pgo+Pj4+Pj4+IHJldHVybiBzZnVu Y3MtPgo+Pj4+Pj4KPj4+Pj4+IGdldF9tb2Rlcygmc2xhdmUtPmJhc2UsY29ubmVjdG9yKTsKPj4+ Pj4+PiB9Cj4+Pj4+Pj4KPj4+Pj4+Cj4+Pj4+Cj4+Pj4+IHNvLCB0aGlzIHdpbGwgY2FsbCBhZHY3 NTExIGRyaXZlcidzCj4+Pj4+Cj4+Pj4+IGdldF9tb2RlcyBjYWxsIGJhY2suCj4+Pj4+IEkgd29u ZGVyIGlmIHRoZSBzeXN0ZW0gYm9vdCB1cCwgaXQgY2FuIGdldCBtb2RlcyBvciBub3QuCj4+Pj4+ IFlvdSBjYW4gdGVzdCBpdCB3aXRoIHRoZSBtb2RldGVzdC4gaS5lLiAkIG1vZGV0ZXN0IC1NIERS TV9EUklWRVJfTkFNRSAtYwo+Pj4+Pgo+Pj4+Pgo+Pj4+Pgo+Pj4+Pgo+Pj4+Pj4+IE9uIDMxLTEy LTIwMTUgMDI6MTksIFhpbmxpYW5nIExpdSB3cm90ZToKPj4+Pj4+Pj4KPj4+Pj4+Pj4KPj4+Pj4+ Pj4gT24gMzEgRGVjZW1iZXIgMjAxNSBhdCAwMjo0NiwgQ2FybG9zIFBhbG1pbmhhCj4+Pj4+Pj4+ IDxDQVJMT1MuUEFMTUlOSEFAc3lub3BzeXMuY29tIDxtYWlsdG86Q0FSTE9TLlBBTE1JTkhBQHN5 bm9wc3lzLmNvbT4+Cj4+Pj4+PiB3cm90ZToKPj4+Pj4+Pj4KPj4+Pj4+Pj4gICAgIEhpIGd1eXMs Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgICBJJ20gd3JpdGluZyBhIERSTSBkcml2ZXIgZm9yIGEgZnJh bWVidWZmZXIgZW1iZWRkZWQgaGFyZHdhcmUgdGhhdAo+Pj4+Pj4+PiAgICAgdXNlcyBhbiBpMmMg ZW5jb2RlciAoYWR2NzUxMSksIGZvbGxvd2luZyB0aGUgYmFzaWMgc3RlcHMgc3VnZ2VzdGVkCj4+ Pj4+Pj4+ICAgICBieSBMYXVyZW50IGluICJhbmF0b215IG9mIGFuIGVtYmVkZGVkIEtNUyBkcml2 ZXIiOgo+Pj4+Pj4+PiAgICAgaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1KYThmTTdy VGFlNAo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgICAgQWZ0ZXIgaW5pdGlsaWF6aW5nIGFsbCBrbXMsIGNy dGMsIGVuY29kZXIsIGkyYywgY29ubmVjdG9yIGZ1bmN0aW9ucwo+Pj4+Pj4+PiAgICAgYW5kIHN0 cnVjdHVyZXMgaSdtIGNhbGxpbmcgZHJtX2ZiZGV2X2NtYV9pbml0IHRvIGNyZWF0ZSBhIGZiZGV2 Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgICAgV2hlbiBib290aW5nIGknbSBnZXR0aW5nIGFuIGVycm9y IG1lc3NhZ2Ugc2F5aW5nICJObyBjb25uZWN0b3JzCj4+Pj4+Pj4+ICAgICByZXBvcnRlZCBjb25u ZWN0ZWQgd2l0aCBtb2RlcyIsIGJ1dCB0aGUgZHJpdmVyIGluaXQgaXMgb2sgYW5kIGkgY2FuCj4+ Pj4+Pj4+ICAgICBmaW5kIHRoZSAvZGV2L2RyaS8qIGFuZCAvZGV2L2ZiMCBkZXZpY2VzLgo+Pj4+ Pj4+Pgo+Pj4+Pj4+PiAgICAgQW55IGNsdWUgd2hhdCBpIG1pZ2h0IGJlIG1pc3NpbmcgZHVyaW5n IHRoZSBkcml2ZXIgbG9hZD8KPj4+Pj4+Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gSSB0aGluayB5b3Ug c2hvdWxkIGNoZWNrIG9uIHRoZSAnZ2V0X21vZGVzJyBjYWxsIGJhY2sgb2YgYWR2NzUxMQo+Pj4+ Pj4+PiBkcml2ZXIuIChPciwgaWYgcG9zc2libGUgc2hvdyB1cyB0aGUgY29kZS4pCj4+Pj4+Pj4+ Cj4+Pj4+Pj4+IEJlc3QsCj4+Pj4+Pj4+IC14aW5saWFuZwo+Pj4+Pj4+Pgo+Pj4+Pj4+Pgo+Pj4+ Pj4+PiAgICAgVGhhbmtzLi4uCj4+Pj4+Pj4+Cj4+Pj4+Pj4+ICAgICBSZWdhcmRzLAo+Pj4+Pj4+ PiAgICAgQy5QYWxtaW5oYQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiAgICAgLS0tIGJvb3QgbG9nIHNuaXBw ZXQgLS0tCj4+Pj4+Pj4+ICAgICBbZHJtXSBJbml0aWFsaXplZCBkcm0gMS4xLjAgMjAwNjA4MTAK Pj4+Pj4+Pj4gICAgIGRybS1hcmNwZ3UgZTAwMTcwMDAucGd1OiBObyBjb25uZWN0b3JzIHJlcG9y dGVkIGNvbm5lY3RlZCB3aXRoIG1vZGVzCj4+Pj4+Pj4+ICAgICBbZHJtXSBDYW5ub3QgZmluZCBh bnkgY3J0YyBvciBzaXplcyAtIGdvaW5nIDEwMjR4NzY4Cj4+Pj4+Pj4+ICAgICBDb25zb2xlOiBz d2l0Y2hpbmcgdG8gY29sb3VyIGZyYW1lIGJ1ZmZlciBkZXZpY2UgMTI4eDQ4Cj4+Pj4+Pj4+ICAg ICBkcm0tYXJjcGd1IGUwMDE3MDAwLnBndTogZmIwOiAgZnJhbWUgYnVmZmVyIGRldmljZQo+Pj4+ Pj4+PiAgICAgW2RybV0gSW5pdGlhbGl6ZWQgZHJtLWFyY3BndSAxLjAuMCAyMDE1MTEyNyBvbiBt aW5vciAwCj4+Pj4+Pj4+ICAgICAtLS0gYm9vdCBsb2cgc25pcHBldCAtLS0KPj4+Pj4+Pj4gICAg IC0tCj4+Pj4+Pj4+ICAgICBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUg bGluZSAidW5zdWJzY3JpYmUKPj4+Pj4+Pj4gICAgIGxpbnV4LWZiZGV2IiBpbgo+Pj4+Pj4+PiAg ICAgdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKPj4+ Pj4+Pj4gICAgIDxtYWlsdG86bWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZz4KPj4+Pj4+Pj4gICAg IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8t aW5mby5odG1sCj4+Pj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pgo+Pj4+PgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=