From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752003AbdFHV7H (ORCPT ); Thu, 8 Jun 2017 17:59:07 -0400 Received: from mail.kmu-office.ch ([178.209.48.109]:49931 "EHLO mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751923AbdFHV7E (ORCPT ); Thu, 8 Jun 2017 17:59:04 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Date: Thu, 08 Jun 2017 14:57:40 -0700 From: Stefan Agner To: dri-devel@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, airlied@linux.ie, meng.yi@nxp.com, alison.wang@freescale.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] drm/fsl-dcu: implement irq_preinstall/uninstall callbacks In-Reply-To: <37033e2d4e251d3ffaa16f31459864c5ee365b2f.1496372207.git-series.stefan@agner.ch> References: <37033e2d4e251d3ffaa16f31459864c5ee365b2f.1496372207.git-series.stefan@agner.ch> Message-ID: <3cbf67453d1f1724f9f815309b77d1aa@agner.ch> User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017-06-01 20:00, Stefan Agner wrote: > Make use of the irq_preinstall/uninstall callback to clear and > mask all interrupts. Use write 1 to clear as documented by the > data sheet (writing a 0 seems to have cleared interrupt status > too). Remove fsl_dcu_drm_irq_init and call drm_irq_install > directly from fsl_dcu_load makes error handling a bit simpler. > Do not set irq_enabled since drm_irq_install is taking care of > it. > > Signed-off-by: Stefan Agner Applied to my fsl-dcu branch for 4.13. -- Stefan > --- > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 20 ++++++++------------ > 1 file changed, 8 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c > b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c > index 6e00f4b..d86f35c 100644 > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c > @@ -51,19 +51,12 @@ static const struct regmap_config fsl_dcu_regmap_config = { > .volatile_reg = fsl_dcu_drm_is_volatile_reg, > }; > > -static int fsl_dcu_drm_irq_init(struct drm_device *dev) > +static void fsl_dcu_irq_uninstall(struct drm_device *dev) > { > struct fsl_dcu_drm_device *fsl_dev = dev->dev_private; > - int ret; > - > - ret = drm_irq_install(dev, fsl_dev->irq); > - if (ret < 0) > - dev_err(dev->dev, "failed to install IRQ handler\n"); > > - regmap_write(fsl_dev->regmap, DCU_INT_STATUS, 0); > + regmap_write(fsl_dev->regmap, DCU_INT_STATUS, ~0); > regmap_write(fsl_dev->regmap, DCU_INT_MASK, ~0); > - > - return ret; > } > > static int fsl_dcu_load(struct drm_device *dev, unsigned long flags) > @@ -83,10 +76,11 @@ static int fsl_dcu_load(struct drm_device *dev, > unsigned long flags) > goto done; > } > > - ret = fsl_dcu_drm_irq_init(dev); > - if (ret < 0) > + ret = drm_irq_install(dev, fsl_dev->irq); > + if (ret < 0) { > + dev_err(dev->dev, "failed to install IRQ handler\n"); > goto done; > - dev->irq_enabled = true; > + } > > if (legacyfb_depth != 16 && legacyfb_depth != 24 && > legacyfb_depth != 32) { > @@ -170,6 +164,8 @@ static struct drm_driver fsl_dcu_drm_driver = { > .load = fsl_dcu_load, > .unload = fsl_dcu_unload, > .irq_handler = fsl_dcu_drm_irq, > + .irq_preinstall = fsl_dcu_irq_uninstall, > + .irq_uninstall = fsl_dcu_irq_uninstall, > .gem_free_object_unlocked = drm_gem_cma_free_object, > .gem_vm_ops = &drm_gem_cma_vm_ops, > .prime_handle_to_fd = drm_gem_prime_handle_to_fd, > > base-commit: 2a1720376adda5ecf8e636fbfb05339c7dad1c55