From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1DA2EC4338F for ; Fri, 20 Aug 2021 16:07:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 05D2961214 for ; Fri, 20 Aug 2021 16:07:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235519AbhHTQHt (ORCPT ); Fri, 20 Aug 2021 12:07:49 -0400 Received: from foss.arm.com ([217.140.110.172]:34612 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237006AbhHTQFw (ORCPT ); Fri, 20 Aug 2021 12:05:52 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E785B11FB; Fri, 20 Aug 2021 09:05:10 -0700 (PDT) Received: from e110455-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A61903F70D; Fri, 20 Aug 2021 09:05:10 -0700 (PDT) Received: by e110455-lin.cambridge.arm.com (Postfix, from userid 1000) id 66016683943; Fri, 20 Aug 2021 17:05:09 +0100 (BST) Date: Fri, 20 Aug 2021 17:05:09 +0100 From: Liviu Dudau To: Thomas Zimmermann Cc: daniel@ffwll.ch, airlied@linux.ie, alexander.deucher@amd.com, christian.koenig@amd.com, brian.starkey@arm.com, sam@ravnborg.org, bbrezillon@kernel.org, nicolas.ferre@microchip.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, stefan@agner.ch, alison.wang@nxp.com, patrik.r.jakobsson@gmail.com, anitha.chrisanthus@intel.com, robdclark@gmail.com, edmund.j.dea@intel.com, sean@poorly.run, shawnguo@kernel.org, s.hauer@pengutronix.de, kernel@pengutronix.de, jyri.sarha@iki.fi, tomba@kernel.org, Dan.Sneddon@microchip.com, tomi.valkeinen@ideasonboard.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org Subject: Re: [PATCH v2 02/14] drm/arm/hdlcd: Convert to Linux IRQ interfaces Message-ID: <20210820160509.eo267b4r64v4qa3n@e110455-lin.cambridge.arm.com> References: <20210803090704.32152-1-tzimmermann@suse.de> <20210803090704.32152-3-tzimmermann@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210803090704.32152-3-tzimmermann@suse.de> Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On Tue, Aug 03, 2021 at 11:06:52AM +0200, Thomas Zimmermann wrote: > Drop the DRM IRQ midlayer in favor of Linux IRQ interfaces. DRM's > IRQ helpers are mostly useful for UMS drivers. Modern KMS drivers > don't benefit from using it. > > DRM IRQ callbacks are now being called directly or inlined. > > Calls to platform_get_irq() can fail with a negative errno code. > Abort initialization in this case. The DRM IRQ midlayer does not > handle this case correctly. > > v2: > * name struct drm_device variables 'drm' (Sam) > > Signed-off-by: Thomas Zimmermann > Acked-by: Sam Ravnborg Sorry for the delayed response due to holidays. Acked-by: Liviu Dudau Best regards, Liviu > --- > drivers/gpu/drm/arm/hdlcd_drv.c | 174 ++++++++++++++++++-------------- > drivers/gpu/drm/arm/hdlcd_drv.h | 1 + > 2 files changed, 97 insertions(+), 78 deletions(-) > > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c > index 81ae92390736..479c2422a2e0 100644 > --- a/drivers/gpu/drm/arm/hdlcd_drv.c > +++ b/drivers/gpu/drm/arm/hdlcd_drv.c > @@ -29,7 +29,6 @@ > #include > #include > #include > -#include > #include > #include > #include > @@ -38,6 +37,94 @@ > #include "hdlcd_drv.h" > #include "hdlcd_regs.h" > > +static irqreturn_t hdlcd_irq(int irq, void *arg) > +{ > + struct drm_device *drm = arg; > + struct hdlcd_drm_private *hdlcd = drm->dev_private; > + unsigned long irq_status; > + > + irq_status = hdlcd_read(hdlcd, HDLCD_REG_INT_STATUS); > + > +#ifdef CONFIG_DEBUG_FS > + if (irq_status & HDLCD_INTERRUPT_UNDERRUN) > + atomic_inc(&hdlcd->buffer_underrun_count); > + > + if (irq_status & HDLCD_INTERRUPT_DMA_END) > + atomic_inc(&hdlcd->dma_end_count); > + > + if (irq_status & HDLCD_INTERRUPT_BUS_ERROR) > + atomic_inc(&hdlcd->bus_error_count); > + > + if (irq_status & HDLCD_INTERRUPT_VSYNC) > + atomic_inc(&hdlcd->vsync_count); > + > +#endif > + if (irq_status & HDLCD_INTERRUPT_VSYNC) > + drm_crtc_handle_vblank(&hdlcd->crtc); > + > + /* acknowledge interrupt(s) */ > + hdlcd_write(hdlcd, HDLCD_REG_INT_CLEAR, irq_status); > + > + return IRQ_HANDLED; > +} > + > +static void hdlcd_irq_preinstall(struct drm_device *drm) > +{ > + struct hdlcd_drm_private *hdlcd = drm->dev_private; > + /* Ensure interrupts are disabled */ > + hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, 0); > + hdlcd_write(hdlcd, HDLCD_REG_INT_CLEAR, ~0); > +} > + > +static void hdlcd_irq_postinstall(struct drm_device *drm) > +{ > +#ifdef CONFIG_DEBUG_FS > + struct hdlcd_drm_private *hdlcd = drm->dev_private; > + unsigned long irq_mask = hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); > + > + /* enable debug interrupts */ > + irq_mask |= HDLCD_DEBUG_INT_MASK; > + > + hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, irq_mask); > +#endif > +} > + > +static int hdlcd_irq_install(struct drm_device *drm, int irq) > +{ > + int ret; > + > + if (irq == IRQ_NOTCONNECTED) > + return -ENOTCONN; > + > + hdlcd_irq_preinstall(drm); > + > + ret = request_irq(irq, hdlcd_irq, 0, drm->driver->name, drm); > + if (ret) > + return ret; > + > + hdlcd_irq_postinstall(drm); > + > + return 0; > +} > + > +static void hdlcd_irq_uninstall(struct drm_device *drm) > +{ > + struct hdlcd_drm_private *hdlcd = drm->dev_private; > + /* disable all the interrupts that we might have enabled */ > + unsigned long irq_mask = hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); > + > +#ifdef CONFIG_DEBUG_FS > + /* disable debug interrupts */ > + irq_mask &= ~HDLCD_DEBUG_INT_MASK; > +#endif > + > + /* disable vsync interrupts */ > + irq_mask &= ~HDLCD_INTERRUPT_VSYNC; > + hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, irq_mask); > + > + free_irq(hdlcd->irq, drm); > +} > + > static int hdlcd_load(struct drm_device *drm, unsigned long flags) > { > struct hdlcd_drm_private *hdlcd = drm->dev_private; > @@ -90,7 +177,12 @@ static int hdlcd_load(struct drm_device *drm, unsigned long flags) > goto setup_fail; > } > > - ret = drm_irq_install(drm, platform_get_irq(pdev, 0)); > + ret = platform_get_irq(pdev, 0); > + if (ret < 0) > + goto irq_fail; > + hdlcd->irq = ret; > + > + ret = hdlcd_irq_install(drm, hdlcd->irq); > if (ret < 0) { > DRM_ERROR("failed to install IRQ handler\n"); > goto irq_fail; > @@ -122,76 +214,6 @@ static void hdlcd_setup_mode_config(struct drm_device *drm) > drm->mode_config.funcs = &hdlcd_mode_config_funcs; > } > > -static irqreturn_t hdlcd_irq(int irq, void *arg) > -{ > - struct drm_device *drm = arg; > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - unsigned long irq_status; > - > - irq_status = hdlcd_read(hdlcd, HDLCD_REG_INT_STATUS); > - > -#ifdef CONFIG_DEBUG_FS > - if (irq_status & HDLCD_INTERRUPT_UNDERRUN) > - atomic_inc(&hdlcd->buffer_underrun_count); > - > - if (irq_status & HDLCD_INTERRUPT_DMA_END) > - atomic_inc(&hdlcd->dma_end_count); > - > - if (irq_status & HDLCD_INTERRUPT_BUS_ERROR) > - atomic_inc(&hdlcd->bus_error_count); > - > - if (irq_status & HDLCD_INTERRUPT_VSYNC) > - atomic_inc(&hdlcd->vsync_count); > - > -#endif > - if (irq_status & HDLCD_INTERRUPT_VSYNC) > - drm_crtc_handle_vblank(&hdlcd->crtc); > - > - /* acknowledge interrupt(s) */ > - hdlcd_write(hdlcd, HDLCD_REG_INT_CLEAR, irq_status); > - > - return IRQ_HANDLED; > -} > - > -static void hdlcd_irq_preinstall(struct drm_device *drm) > -{ > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - /* Ensure interrupts are disabled */ > - hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, 0); > - hdlcd_write(hdlcd, HDLCD_REG_INT_CLEAR, ~0); > -} > - > -static int hdlcd_irq_postinstall(struct drm_device *drm) > -{ > -#ifdef CONFIG_DEBUG_FS > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - unsigned long irq_mask = hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); > - > - /* enable debug interrupts */ > - irq_mask |= HDLCD_DEBUG_INT_MASK; > - > - hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, irq_mask); > -#endif > - return 0; > -} > - > -static void hdlcd_irq_uninstall(struct drm_device *drm) > -{ > - struct hdlcd_drm_private *hdlcd = drm->dev_private; > - /* disable all the interrupts that we might have enabled */ > - unsigned long irq_mask = hdlcd_read(hdlcd, HDLCD_REG_INT_MASK); > - > -#ifdef CONFIG_DEBUG_FS > - /* disable debug interrupts */ > - irq_mask &= ~HDLCD_DEBUG_INT_MASK; > -#endif > - > - /* disable vsync interrupts */ > - irq_mask &= ~HDLCD_INTERRUPT_VSYNC; > - > - hdlcd_write(hdlcd, HDLCD_REG_INT_MASK, irq_mask); > -} > - > #ifdef CONFIG_DEBUG_FS > static int hdlcd_show_underrun_count(struct seq_file *m, void *arg) > { > @@ -236,10 +258,6 @@ DEFINE_DRM_GEM_CMA_FOPS(fops); > > static const struct drm_driver hdlcd_driver = { > .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC, > - .irq_handler = hdlcd_irq, > - .irq_preinstall = hdlcd_irq_preinstall, > - .irq_postinstall = hdlcd_irq_postinstall, > - .irq_uninstall = hdlcd_irq_uninstall, > DRM_GEM_CMA_DRIVER_OPS, > #ifdef CONFIG_DEBUG_FS > .debugfs_init = hdlcd_debugfs_init, > @@ -316,7 +334,7 @@ static int hdlcd_drm_bind(struct device *dev) > err_unload: > of_node_put(hdlcd->crtc.port); > hdlcd->crtc.port = NULL; > - drm_irq_uninstall(drm); > + hdlcd_irq_uninstall(drm); > of_reserved_mem_device_release(drm->dev); > err_free: > drm_mode_config_cleanup(drm); > @@ -338,7 +356,7 @@ static void hdlcd_drm_unbind(struct device *dev) > hdlcd->crtc.port = NULL; > pm_runtime_get_sync(dev); > drm_atomic_helper_shutdown(drm); > - drm_irq_uninstall(drm); > + hdlcd_irq_uninstall(drm); > pm_runtime_put(dev); > if (pm_runtime_enabled(dev)) > pm_runtime_disable(dev); > diff --git a/drivers/gpu/drm/arm/hdlcd_drv.h b/drivers/gpu/drm/arm/hdlcd_drv.h > index fd438d177b64..909c39c28487 100644 > --- a/drivers/gpu/drm/arm/hdlcd_drv.h > +++ b/drivers/gpu/drm/arm/hdlcd_drv.h > @@ -11,6 +11,7 @@ struct hdlcd_drm_private { > struct clk *clk; > struct drm_crtc crtc; > struct drm_plane *plane; > + unsigned int irq; > #ifdef CONFIG_DEBUG_FS > atomic_t buffer_underrun_count; > atomic_t bus_error_count; > -- > 2.32.0 > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B1EDC4338F for ; Fri, 20 Aug 2021 16:06:52 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 17ED561214 for ; Fri, 20 Aug 2021 16:06:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 17ED561214 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=i725x/W8uw93NSxxJWMycouOuYRnggmjmTl6b6DXciw=; b=Tk8RD/JqxfMoZn OQYqgvnfULiI7zIvF3Mm5KCZaj0WE4Z/9VVO4KnlpawOfwQiAZJNBx92mb9aOqP01TCgovBg7dZrA Ltec0ZEzrBYSVU64FrvsvdtKmw1umeUHBQMYQEEXOsVgPJZ5JIRIAZjOOtQTy/XojRQXkN9ULE9OT UT0t9CYlNSsjZ1AtoElvKResKmEu4vKenJPrfGkzDQvnRkqrOjEocyGjtgt/XJ3lr5Wt4NHwMusLB HeJGmxj4hGzxCR59V0wXdyI4G4SjWduvgjcuf7WfKlXmIebtkDVfZxayM/1ckxInv6imbVRwW+0kZ 7gQOjtOh6J4I94TfiJCg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mH71E-00Bbv4-3w; Fri, 20 Aug 2021 16:05:20 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mH719-00Bbsx-Pc for linux-arm-kernel@lists.infradead.org; Fri, 20 Aug 2021 16:05:17 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E785B11FB; Fri, 20 Aug 2021 09:05:10 -0700 (PDT) Received: from e110455-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A61903F70D; Fri, 20 Aug 2021 09:05:10 -0700 (PDT) Received: by e110455-lin.cambridge.arm.com (Postfix, from userid 1000) id 66016683943; Fri, 20 Aug 2021 17:05:09 +0100 (BST) Date: Fri, 20 Aug 2021 17:05:09 +0100 From: Liviu Dudau To: Thomas Zimmermann Subject: Re: [PATCH v2 02/14] drm/arm/hdlcd: Convert to Linux IRQ interfaces Message-ID: <20210820160509.eo267b4r64v4qa3n@e110455-lin.cambridge.arm.com> References: <20210803090704.32152-1-tzimmermann@suse.de> <20210803090704.32152-3-tzimmermann@suse.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20210803090704.32152-3-tzimmermann@suse.de> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210820_090515_975694_057B8F46 X-CRM114-Status: GOOD ( 30.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: airlied@linux.ie, tomi.valkeinen@ideasonboard.com, edmund.j.dea@intel.com, stefan@agner.ch, amd-gfx@lists.freedesktop.org, anitha.chrisanthus@intel.com, sam@ravnborg.org, Dan.Sneddon@microchip.com, patrik.r.jakobsson@gmail.com, freedreno@lists.freedesktop.org, daniel@ffwll.ch, linux-arm-msm@vger.kernel.org, s.hauer@pengutronix.de, alison.wang@nxp.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, dri-devel@lists.freedesktop.org, sean@poorly.run, linux-arm-kernel@lists.infradead.org, tomba@kernel.org, bbrezillon@kernel.org, jyri.sarha@iki.fi, christian.koenig@amd.com, robdclark@gmail.com, kernel@pengutronix.de, alexander.deucher@amd.com, shawnguo@kernel.org, brian.starkey@arm.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBBdWcgMDMsIDIwMjEgYXQgMTE6MDY6NTJBTSArMDIwMCwgVGhvbWFzIFppbW1lcm1h bm4gd3JvdGU6Cj4gRHJvcCB0aGUgRFJNIElSUSBtaWRsYXllciBpbiBmYXZvciBvZiBMaW51eCBJ UlEgaW50ZXJmYWNlcy4gRFJNJ3MKPiBJUlEgaGVscGVycyBhcmUgbW9zdGx5IHVzZWZ1bCBmb3Ig VU1TIGRyaXZlcnMuIE1vZGVybiBLTVMgZHJpdmVycwo+IGRvbid0IGJlbmVmaXQgZnJvbSB1c2lu ZyBpdC4KPiAKPiBEUk0gSVJRIGNhbGxiYWNrcyBhcmUgbm93IGJlaW5nIGNhbGxlZCBkaXJlY3Rs eSBvciBpbmxpbmVkLgo+IAo+IENhbGxzIHRvIHBsYXRmb3JtX2dldF9pcnEoKSBjYW4gZmFpbCB3 aXRoIGEgbmVnYXRpdmUgZXJybm8gY29kZS4KPiBBYm9ydCBpbml0aWFsaXphdGlvbiBpbiB0aGlz IGNhc2UuIFRoZSBEUk0gSVJRIG1pZGxheWVyIGRvZXMgbm90Cj4gaGFuZGxlIHRoaXMgY2FzZSBj b3JyZWN0bHkuCj4gCj4gdjI6Cj4gCSogbmFtZSBzdHJ1Y3QgZHJtX2RldmljZSB2YXJpYWJsZXMg J2RybScgKFNhbSkKPiAKPiBTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1l cm1hbm5Ac3VzZS5kZT4KPiBBY2tlZC1ieTogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3Jn PgoKU29ycnkgZm9yIHRoZSBkZWxheWVkIHJlc3BvbnNlIGR1ZSB0byBob2xpZGF5cy4KCkFja2Vk LWJ5OiBMaXZpdSBEdWRhdSA8bGl2aXUuZHVkYXVAYXJtLmNvbT4KCkJlc3QgcmVnYXJkcywKTGl2 aXUKCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMgfCAxNzQgKysrKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9k cnYuaCB8ICAgMSArCj4gIDIgZmlsZXMgY2hhbmdlZCwgOTcgaW5zZXJ0aW9ucygrKSwgNzggZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2 LmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5jCj4gaW5kZXggODFhZTkyMzkwNzM2 Li40NzljMjQyMmEyZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9k cnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMKPiBAQCAtMjksNyAr MjksNiBAQAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRy bS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVm ZmVyX2hlbHBlci5oPgo+IC0jaW5jbHVkZSA8ZHJtL2RybV9pcnEuaD4KPiAgI2luY2x1ZGUgPGRy bS9kcm1fbW9kZXNldF9oZWxwZXIuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KPiAgI2lu Y2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4gQEAgLTM4LDYgKzM3LDk0IEBACj4gICNp bmNsdWRlICJoZGxjZF9kcnYuaCIKPiAgI2luY2x1ZGUgImhkbGNkX3JlZ3MuaCIKPiAgCj4gK3N0 YXRpYyBpcnFyZXR1cm5fdCBoZGxjZF9pcnEoaW50IGlycSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRl ICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwl1bnNpZ25lZCBsb25nIGlycV9zdGF0dXM7 Cj4gKwo+ICsJaXJxX3N0YXR1cyA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19JTlRfU1RB VFVTKTsKPiArCj4gKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKPiArCWlmIChpcnFfc3RhdHVzICYg SERMQ0RfSU5URVJSVVBUX1VOREVSUlVOKQo+ICsJCWF0b21pY19pbmMoJmhkbGNkLT5idWZmZXJf dW5kZXJydW5fY291bnQpOwo+ICsKPiArCWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBU X0RNQV9FTkQpCj4gKwkJYXRvbWljX2luYygmaGRsY2QtPmRtYV9lbmRfY291bnQpOwo+ICsKPiAr CWlmIChpcnFfc3RhdHVzICYgSERMQ0RfSU5URVJSVVBUX0JVU19FUlJPUikKPiArCQlhdG9taWNf aW5jKCZoZGxjZC0+YnVzX2Vycm9yX2NvdW50KTsKPiArCj4gKwlpZiAoaXJxX3N0YXR1cyAmIEhE TENEX0lOVEVSUlVQVF9WU1lOQykKPiArCQlhdG9taWNfaW5jKCZoZGxjZC0+dnN5bmNfY291bnQp Owo+ICsKPiArI2VuZGlmCj4gKwlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVSUlVQVF9WU1lO QykKPiArCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZoZGxjZC0+Y3J0Yyk7Cj4gKwo+ICsJLyog YWNrbm93bGVkZ2UgaW50ZXJydXB0KHMpICovCj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0Rf UkVHX0lOVF9DTEVBUiwgaXJxX3N0YXR1cyk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoZGxjZF9pcnFfcHJlaW5zdGFsbChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJt LT5kZXZfcHJpdmF0ZTsKPiArCS8qIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCAqLwo+ ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSywgMCk7Cj4gKwloZGxjZF93 cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9DTEVBUiwgfjApOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBoZGxjZF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gKwlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhk bGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBoZGxj ZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0spOwo+ICsKPiArCS8qIGVuYWJsZSBkZWJ1 ZyBpbnRlcnJ1cHRzICovCj4gKwlpcnFfbWFzayB8PSBIRExDRF9ERUJVR19JTlRfTUFTSzsKPiAr Cj4gKwloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBpcnFfbWFzayk7Cj4g KyNlbmRpZgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGhkbGNkX2lycV9pbnN0YWxsKHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIGludCBpcnEpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKGly cSA9PSBJUlFfTk9UQ09OTkVDVEVEKQo+ICsJCXJldHVybiAtRU5PVENPTk47Cj4gKwo+ICsJaGRs Y2RfaXJxX3ByZWluc3RhbGwoZHJtKTsKPiArCj4gKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGhk bGNkX2lycSwgMCwgZHJtLT5kcml2ZXItPm5hbWUsIGRybSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJaGRsY2RfaXJxX3Bvc3RpbnN0YWxsKGRybSk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhkbGNkX2lycV91bmluc3RhbGwoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxj ZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwkvKiBkaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyB0 aGF0IHdlIG1pZ2h0IGhhdmUgZW5hYmxlZCAqLwo+ICsJdW5zaWduZWQgbG9uZyBpcnFfbWFzayA9 IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSyk7Cj4gKwo+ICsjaWZkZWYgQ09O RklHX0RFQlVHX0ZTCj4gKwkvKiBkaXNhYmxlIGRlYnVnIGludGVycnVwdHMgKi8KPiArCWlycV9t YXNrICY9IH5IRExDRF9ERUJVR19JTlRfTUFTSzsKPiArI2VuZGlmCj4gKwo+ICsJLyogZGlzYWJs ZSB2c3luYyBpbnRlcnJ1cHRzICovCj4gKwlpcnFfbWFzayAmPSB+SERMQ0RfSU5URVJSVVBUX1ZT WU5DOwo+ICsJaGRsY2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSywgaXJxX21hc2sp Owo+ICsKPiArCWZyZWVfaXJxKGhkbGNkLT5pcnEsIGRybSk7Cj4gK30KPiArCj4gIHN0YXRpYyBp bnQgaGRsY2RfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdz KQo+ICB7Cj4gIAlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUgKmhkbGNkID0gZHJtLT5kZXZfcHJp dmF0ZTsKPiBAQCAtOTAsNyArMTc3LDEyIEBAIHN0YXRpYyBpbnQgaGRsY2RfbG9hZChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICAJCWdvdG8gc2V0dXBfZmFp bDsKPiAgCX0KPiAgCj4gLQlyZXQgPSBkcm1faXJxX2luc3RhbGwoZHJtLCBwbGF0Zm9ybV9nZXRf aXJxKHBkZXYsIDApKTsKPiArCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlp ZiAocmV0IDwgMCkKPiArCQlnb3RvIGlycV9mYWlsOwo+ICsJaGRsY2QtPmlycSA9IHJldDsKPiAr Cj4gKwlyZXQgPSBoZGxjZF9pcnFfaW5zdGFsbChkcm0sIGhkbGNkLT5pcnEpOwo+ICAJaWYgKHJl dCA8IDApIHsKPiAgCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4i KTsKPiAgCQlnb3RvIGlycV9mYWlsOwo+IEBAIC0xMjIsNzYgKzIxNCw2IEBAIHN0YXRpYyB2b2lk IGhkbGNkX3NldHVwX21vZGVfY29uZmlnKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gIAlkcm0t Pm1vZGVfY29uZmlnLmZ1bmNzID0gJmhkbGNkX21vZGVfY29uZmlnX2Z1bmNzOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgaXJxcmV0dXJuX3QgaGRsY2RfaXJxKGludCBpcnEsIHZvaWQgKmFyZykKPiAtewo+ IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKPiAtCXN0cnVjdCBoZGxjZF9kcm1fcHJp dmF0ZSAqaGRsY2QgPSBkcm0tPmRldl9wcml2YXRlOwo+IC0JdW5zaWduZWQgbG9uZyBpcnFfc3Rh dHVzOwo+IC0KPiAtCWlycV9zdGF0dXMgPSBoZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5U X1NUQVRVUyk7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gLQlpZiAoaXJxX3N0YXR1 cyAmIEhETENEX0lOVEVSUlVQVF9VTkRFUlJVTikKPiAtCQlhdG9taWNfaW5jKCZoZGxjZC0+YnVm ZmVyX3VuZGVycnVuX2NvdW50KTsKPiAtCj4gLQlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVS UlVQVF9ETUFfRU5EKQo+IC0JCWF0b21pY19pbmMoJmhkbGNkLT5kbWFfZW5kX2NvdW50KTsKPiAt Cj4gLQlpZiAoaXJxX3N0YXR1cyAmIEhETENEX0lOVEVSUlVQVF9CVVNfRVJST1IpCj4gLQkJYXRv bWljX2luYygmaGRsY2QtPmJ1c19lcnJvcl9jb3VudCk7Cj4gLQo+IC0JaWYgKGlycV9zdGF0dXMg JiBIRExDRF9JTlRFUlJVUFRfVlNZTkMpCj4gLQkJYXRvbWljX2luYygmaGRsY2QtPnZzeW5jX2Nv dW50KTsKPiAtCj4gLSNlbmRpZgo+IC0JaWYgKGlycV9zdGF0dXMgJiBIRExDRF9JTlRFUlJVUFRf VlNZTkMpCj4gLQkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmaGRsY2QtPmNydGMpOwo+IC0KPiAt CS8qIGFja25vd2xlZGdlIGludGVycnVwdChzKSAqLwo+IC0JaGRsY2Rfd3JpdGUoaGRsY2QsIEhE TENEX1JFR19JTlRfQ0xFQVIsIGlycV9zdGF0dXMpOwo+IC0KPiAtCXJldHVybiBJUlFfSEFORExF RDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGRsY2RfaXJxX3ByZWluc3RhbGwoc3RydWN0IGRy bV9kZXZpY2UgKmRybSkKPiAtewo+IC0Jc3RydWN0IGhkbGNkX2RybV9wcml2YXRlICpoZGxjZCA9 IGRybS0+ZGV2X3ByaXZhdGU7Cj4gLQkvKiBFbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQg Ki8KPiAtCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0ssIDApOwo+IC0JaGRs Y2Rfd3JpdGUoaGRsY2QsIEhETENEX1JFR19JTlRfQ0xFQVIsIH4wKTsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBoZGxjZF9pcnFfcG9zdGluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiAt ewo+IC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gLQlzdHJ1Y3QgaGRsY2RfZHJtX3ByaXZhdGUg KmhkbGNkID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiAtCXVuc2lnbmVkIGxvbmcgaXJxX21hc2sgPSBo ZGxjZF9yZWFkKGhkbGNkLCBIRExDRF9SRUdfSU5UX01BU0spOwo+IC0KPiAtCS8qIGVuYWJsZSBk ZWJ1ZyBpbnRlcnJ1cHRzICovCj4gLQlpcnFfbWFzayB8PSBIRExDRF9ERUJVR19JTlRfTUFTSzsK PiAtCj4gLQloZGxjZF93cml0ZShoZGxjZCwgSERMQ0RfUkVHX0lOVF9NQVNLLCBpcnFfbWFzayk7 Cj4gLSNlbmRpZgo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGhkbGNkX2ly cV91bmluc3RhbGwoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiAtewo+IC0Jc3RydWN0IGhkbGNk X2RybV9wcml2YXRlICpoZGxjZCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gLQkvKiBkaXNhYmxlIGFs bCB0aGUgaW50ZXJydXB0cyB0aGF0IHdlIG1pZ2h0IGhhdmUgZW5hYmxlZCAqLwo+IC0JdW5zaWdu ZWQgbG9uZyBpcnFfbWFzayA9IGhkbGNkX3JlYWQoaGRsY2QsIEhETENEX1JFR19JTlRfTUFTSyk7 Cj4gLQo+IC0jaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4gLQkvKiBkaXNhYmxlIGRlYnVnIGludGVy cnVwdHMgKi8KPiAtCWlycV9tYXNrICY9IH5IRExDRF9ERUJVR19JTlRfTUFTSzsKPiAtI2VuZGlm Cj4gLQo+IC0JLyogZGlzYWJsZSB2c3luYyBpbnRlcnJ1cHRzICovCj4gLQlpcnFfbWFzayAmPSB+ SERMQ0RfSU5URVJSVVBUX1ZTWU5DOwo+IC0KPiAtCWhkbGNkX3dyaXRlKGhkbGNkLCBIRExDRF9S RUdfSU5UX01BU0ssIGlycV9tYXNrKTsKPiAtfQo+IC0KPiAgI2lmZGVmIENPTkZJR19ERUJVR19G Uwo+ICBzdGF0aWMgaW50IGhkbGNkX3Nob3dfdW5kZXJydW5fY291bnQoc3RydWN0IHNlcV9maWxl ICptLCB2b2lkICphcmcpCj4gIHsKPiBAQCAtMjM2LDEwICsyNTgsNiBAQCBERUZJTkVfRFJNX0dF TV9DTUFfRk9QUyhmb3BzKTsKPiAgCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2RyaXZlciBo ZGxjZF9kcml2ZXIgPSB7Cj4gIAkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8IERSSVZF Ul9NT0RFU0VUIHwgRFJJVkVSX0FUT01JQywKPiAtCS5pcnFfaGFuZGxlciA9IGhkbGNkX2lycSwK PiAtCS5pcnFfcHJlaW5zdGFsbCA9IGhkbGNkX2lycV9wcmVpbnN0YWxsLAo+IC0JLmlycV9wb3N0 aW5zdGFsbCA9IGhkbGNkX2lycV9wb3N0aW5zdGFsbCwKPiAtCS5pcnFfdW5pbnN0YWxsID0gaGRs Y2RfaXJxX3VuaW5zdGFsbCwKPiAgCURSTV9HRU1fQ01BX0RSSVZFUl9PUFMsCj4gICNpZmRlZiBD T05GSUdfREVCVUdfRlMKPiAgCS5kZWJ1Z2ZzX2luaXQgPSBoZGxjZF9kZWJ1Z2ZzX2luaXQsCj4g QEAgLTMxNiw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGhkbGNkX2RybV9iaW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKPiAgZXJyX3VubG9hZDoKPiAgCW9mX25vZGVfcHV0KGhkbGNkLT5jcnRjLnBvcnQp Owo+ICAJaGRsY2QtPmNydGMucG9ydCA9IE5VTEw7Cj4gLQlkcm1faXJxX3VuaW5zdGFsbChkcm0p Owo+ICsJaGRsY2RfaXJxX3VuaW5zdGFsbChkcm0pOwo+ICAJb2ZfcmVzZXJ2ZWRfbWVtX2Rldmlj ZV9yZWxlYXNlKGRybS0+ZGV2KTsKPiAgZXJyX2ZyZWU6Cj4gIAlkcm1fbW9kZV9jb25maWdfY2xl YW51cChkcm0pOwo+IEBAIC0zMzgsNyArMzU2LDcgQEAgc3RhdGljIHZvaWQgaGRsY2RfZHJtX3Vu YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAloZGxjZC0+Y3J0Yy5wb3J0ID0gTlVMTDsKPiAg CXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKPiAgCWRybV9hdG9taWNfaGVscGVyX3NodXRkb3du KGRybSk7Cj4gLQlkcm1faXJxX3VuaW5zdGFsbChkcm0pOwo+ICsJaGRsY2RfaXJxX3VuaW5zdGFs bChkcm0pOwo+ICAJcG1fcnVudGltZV9wdXQoZGV2KTsKPiAgCWlmIChwbV9ydW50aW1lX2VuYWJs ZWQoZGV2KSkKPiAgCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2Rf ZHJ2LmgKPiBpbmRleCBmZDQzOGQxNzdiNjQuLjkwOWMzOWMyODQ4NyAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYXJtL2hkbGNkX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Fy bS9oZGxjZF9kcnYuaAo+IEBAIC0xMSw2ICsxMSw3IEBAIHN0cnVjdCBoZGxjZF9kcm1fcHJpdmF0 ZSB7Cj4gIAlzdHJ1Y3QgY2xrCQkJKmNsazsKPiAgCXN0cnVjdCBkcm1fY3J0YwkJCWNydGM7Cj4g IAlzdHJ1Y3QgZHJtX3BsYW5lCQkqcGxhbmU7Cj4gKwl1bnNpZ25lZCBpbnQJCQlpcnE7Cj4gICNp ZmRlZiBDT05GSUdfREVCVUdfRlMKPiAgCWF0b21pY190IGJ1ZmZlcl91bmRlcnJ1bl9jb3VudDsK PiAgCWF0b21pY190IGJ1c19lcnJvcl9jb3VudDsKPiAtLSAKPiAyLjMyLjAKPiAKCi0tIAo9PT09 PT09PT09PT09PT09PT09PQp8IEkgd291bGQgbGlrZSB0byB8CnwgZml4IHRoZSB3b3JsZCwgIHwK fCBidXQgdGhleSdyZSBub3QgfAp8IGdpdmluZyBtZSB0aGUgICB8CiBcIHNvdXJjZSBjb2RlISAg LwogIC0tLS0tLS0tLS0tLS0tLQogICAgwq9cXyjjg4QpXy/CrwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxp c3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=