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=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 C4C5AC432BE for ; Mon, 2 Aug 2021 15:27:34 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 9152D610A8 for ; Mon, 2 Aug 2021 15:27:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 9152D610A8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 088AB6E471; Mon, 2 Aug 2021 15:27:33 +0000 (UTC) Received: from mail-oi1-x22b.google.com (mail-oi1-x22b.google.com [IPv6:2607:f8b0:4864:20::22b]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D1D66E090; Mon, 2 Aug 2021 15:27:31 +0000 (UTC) Received: by mail-oi1-x22b.google.com with SMTP id t128so24565012oig.1; Mon, 02 Aug 2021 08:27:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=612/JVdKAz1qdrtNpS+wKTTb6C92VSuWsomQcNmS5Mw=; b=k3gDCijKpvOLyL5osu46BBobyi+eSCbNv6R0x4S/mAxFFGoTA25WmxUEzODNRjvTKt Xk+vmOzepQRJMVRqvx0hSVVErn6TK0GTe14yxFEc02uwNkgAMVgUl2kl0lT3elgNYmTt L7HFIfl3pAqQ4JZ60bX2stn3eMNAdvibdRjceyHRUOgdfNWq8EH2rswHqgH/mKmlYflA wbu0IDekH+x7W4PibMOZRxgx6UwJeAf+apaD0H6iJhYwLSMZD4qo07rhnsNNjK801nwH qGbGuaVRn7G7az9xcoRi9BBDrPzZcqVIW5hpMh0m5CZ55dv7xcBaxaHjLGIbYlSpo2th uM7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=612/JVdKAz1qdrtNpS+wKTTb6C92VSuWsomQcNmS5Mw=; b=Oi5iQC8NAt0Qi4W7c686gKI8OCjOjrqFyVo2PI2b0EiFcY54DQZdkY0Xbgkyf0ymD9 U+wxa2qmkQsh7ADK4Am6XmiSQD0JtsqfXskDm09S+cSbiNy7nzglVf4Mnl4004gx3gS4 QGYyIWsbtD2/EsIwMHDheVtmbGvwqZJrzc4XL5pG9BVX4kQsPb69E0QU/oxoUX7mhmIF 18toEqfhNK8eGNJiMqNsWjuWn2oe5k6lAJGb7hqrIdG0bUx8d5fct4U6XzzTYWzbUbXy Faar0wgpKNTTQgOdMii5c6dPGTS0LnYfytCJE1uTI2+BnWJXmdJX2MOTUyTWpTJ1itMT dQuw== X-Gm-Message-State: AOAM531jKN4pCyEMusgFi9dFRrc4d8+3V98+K+yFjkOoz1I0YrUQZeG/ Hkkjmrlkh5hLR7ScSMwSoa9KATlsRYU0rwIpLTc= X-Google-Smtp-Source: ABdhPJwKUpNeOIXqOAgml/bHU3F1D89teHU+7ObGdkrtZ0l8aGwF4bh0Xdvq4fQzSAcsYvJIyhG0YWEombYoR93sNYA= X-Received: by 2002:aca:53ca:: with SMTP id h193mr8387560oib.5.1627918049331; Mon, 02 Aug 2021 08:27:29 -0700 (PDT) MIME-Version: 1.0 References: <20210727182721.17981-1-tzimmermann@suse.de> <20210727182721.17981-10-tzimmermann@suse.de> In-Reply-To: <20210727182721.17981-10-tzimmermann@suse.de> From: Alex Deucher Date: Mon, 2 Aug 2021 11:27:18 -0400 Message-ID: Subject: Re: [PATCH 09/14] drm/radeon: Convert to Linux IRQ interfaces To: Thomas Zimmermann Cc: Daniel Vetter , Dave Airlie , "Deucher, Alexander" , Christian Koenig , Liviu Dudau , Brian Starkey , Sam Ravnborg , bbrezillon@kernel.org, nicolas.ferre@microchip.com, Maarten Lankhorst , Maxime Ripard , Stefan Agner , alison.wang@nxp.com, Patrik Jakobsson , anitha.chrisanthus@intel.com, Rob Clark , edmund.j.dea@intel.com, Sean Paul , Shawn Guo , Sascha Hauer , Sascha Hauer , jyri.sarha@iki.fi, tomba@kernel.org, linux-arm-msm , Maling list - DRI developers , amd-gfx list , freedreno , linux-arm-kernel Content-Type: text/plain; charset="UTF-8" X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Tue, Jul 27, 2021 at 2:27 PM 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. > > Signed-off-by: Thomas Zimmermann Reviewed-by: Alex Deucher > --- > drivers/gpu/drm/radeon/radeon_drv.c | 4 --- > drivers/gpu/drm/radeon/radeon_irq_kms.c | 44 +++++++++++++++++++++---- > drivers/gpu/drm/radeon/radeon_kms.h | 4 --- > 3 files changed, 37 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c > index c8dd68152d65..b74cebca1f89 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -607,10 +607,6 @@ static const struct drm_driver kms_driver = { > .postclose = radeon_driver_postclose_kms, > .lastclose = radeon_driver_lastclose_kms, > .unload = radeon_driver_unload_kms, > - .irq_preinstall = radeon_driver_irq_preinstall_kms, > - .irq_postinstall = radeon_driver_irq_postinstall_kms, > - .irq_uninstall = radeon_driver_irq_uninstall_kms, > - .irq_handler = radeon_driver_irq_handler_kms, > .ioctls = radeon_ioctls_kms, > .num_ioctls = ARRAY_SIZE(radeon_ioctls_kms), > .dumb_create = radeon_mode_dumb_create, > diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c > index a36ce826d0c0..3907785d0798 100644 > --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c > @@ -31,7 +31,7 @@ > > #include > #include > -#include > +#include > #include > #include > #include > @@ -51,7 +51,7 @@ > * radeon_irq_process is a macro that points to the per-asic > * irq handler callback. > */ > -irqreturn_t radeon_driver_irq_handler_kms(int irq, void *arg) > +static irqreturn_t radeon_driver_irq_handler_kms(int irq, void *arg) > { > struct drm_device *dev = (struct drm_device *) arg; > struct radeon_device *rdev = dev->dev_private; > @@ -118,7 +118,7 @@ static void radeon_dp_work_func(struct work_struct *work) > * Gets the hw ready to enable irqs (all asics). > * This function disables all interrupt sources on the GPU. > */ > -void radeon_driver_irq_preinstall_kms(struct drm_device *dev) > +static void radeon_driver_irq_preinstall_kms(struct drm_device *dev) > { > struct radeon_device *rdev = dev->dev_private; > unsigned long irqflags; > @@ -150,7 +150,7 @@ void radeon_driver_irq_preinstall_kms(struct drm_device *dev) > * Handles stuff to be done after enabling irqs (all asics). > * Returns 0 on success. > */ > -int radeon_driver_irq_postinstall_kms(struct drm_device *dev) > +static int radeon_driver_irq_postinstall_kms(struct drm_device *dev) > { > struct radeon_device *rdev = dev->dev_private; > > @@ -169,7 +169,7 @@ int radeon_driver_irq_postinstall_kms(struct drm_device *dev) > * > * This function disables all interrupt sources on the GPU (all asics). > */ > -void radeon_driver_irq_uninstall_kms(struct drm_device *dev) > +static void radeon_driver_irq_uninstall_kms(struct drm_device *dev) > { > struct radeon_device *rdev = dev->dev_private; > unsigned long irqflags; > @@ -194,6 +194,36 @@ void radeon_driver_irq_uninstall_kms(struct drm_device *dev) > spin_unlock_irqrestore(&rdev->irq.lock, irqflags); > } > > +static int radeon_irq_install(struct radeon_device *rdev, int irq) > +{ > + struct drm_device *dev = rdev->ddev; > + int ret; > + > + if (irq == IRQ_NOTCONNECTED) > + return -ENOTCONN; > + > + radeon_driver_irq_preinstall_kms(dev); > + > + /* PCI devices require shared interrupts. */ > + ret = request_irq(irq, radeon_driver_irq_handler_kms, > + IRQF_SHARED, dev->driver->name, dev); > + if (ret) > + return ret; > + > + radeon_driver_irq_postinstall_kms(dev); > + > + return 0; > +} > + > +static void radeon_irq_uninstall(struct radeon_device *rdev) > +{ > + struct drm_device *dev = rdev->ddev; > + struct pci_dev *pdev = to_pci_dev(dev->dev); > + > + radeon_driver_irq_uninstall_kms(dev); > + free_irq(pdev->irq, dev); > +} > + > /** > * radeon_msi_ok - asic specific msi checks > * > @@ -314,7 +344,7 @@ int radeon_irq_kms_init(struct radeon_device *rdev) > INIT_WORK(&rdev->audio_work, r600_audio_update_hdmi); > > rdev->irq.installed = true; > - r = drm_irq_install(rdev->ddev, rdev->pdev->irq); > + r = radeon_irq_install(rdev, rdev->pdev->irq); > if (r) { > rdev->irq.installed = false; > flush_delayed_work(&rdev->hotplug_work); > @@ -335,7 +365,7 @@ int radeon_irq_kms_init(struct radeon_device *rdev) > void radeon_irq_kms_fini(struct radeon_device *rdev) > { > if (rdev->irq.installed) { > - drm_irq_uninstall(rdev->ddev); > + radeon_irq_uninstall(rdev); > rdev->irq.installed = false; > if (rdev->msi_enabled) > pci_disable_msi(rdev->pdev); > diff --git a/drivers/gpu/drm/radeon/radeon_kms.h b/drivers/gpu/drm/radeon/radeon_kms.h > index 9b97bf38acd4..36e73cea9215 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.h > +++ b/drivers/gpu/drm/radeon/radeon_kms.h > @@ -31,9 +31,5 @@ > u32 radeon_get_vblank_counter_kms(struct drm_crtc *crtc); > int radeon_enable_vblank_kms(struct drm_crtc *crtc); > void radeon_disable_vblank_kms(struct drm_crtc *crtc); > -irqreturn_t radeon_driver_irq_handler_kms(int irq, void *arg); > -void radeon_driver_irq_preinstall_kms(struct drm_device *dev); > -int radeon_driver_irq_postinstall_kms(struct drm_device *dev); > -void radeon_driver_irq_uninstall_kms(struct drm_device *dev); > > #endif /* __RADEON_KMS_H__ */ > -- > 2.32.0 > > _______________________________________________ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx