Message ID | 20210706074409.8664-1-tzimmermann@suse.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | drm/ingenic: Convert to Linux IRQ interfaces | expand |
Hi, Le sam., juil. 10 2021 at 08:33:47 +0200, Sam Ravnborg <sam@ravnborg.org> a écrit : > Hi Thomas, > > On Tue, Jul 06, 2021 at 09:44:09AM +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. >> >> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >> --- >> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 13 +++++++------ >> 1 file changed, 7 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> index c296472164d9..a09b7da21b53 100644 >> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >> @@ -33,7 +33,6 @@ >> #include <drm/drm_fourcc.h> >> #include <drm/drm_gem_atomic_helper.h> >> #include <drm/drm_gem_framebuffer_helper.h> >> -#include <drm/drm_irq.h> >> #include <drm/drm_managed.h> >> #include <drm/drm_of.h> >> #include <drm/drm_panel.h> >> @@ -799,8 +798,6 @@ static const struct drm_driver >> ingenic_drm_driver_data = { >> .fops = &ingenic_drm_fops, >> .gem_create_object = ingenic_drm_gem_create_object, >> DRM_GEM_CMA_DRIVER_OPS, >> - >> - .irq_handler = ingenic_drm_irq_handler, >> }; >> >> static const struct drm_plane_funcs >> ingenic_drm_primary_plane_funcs = { >> @@ -1098,7 +1095,7 @@ static int ingenic_drm_bind(struct device >> *dev, bool has_components) >> encoder->possible_clones = clone_mask; >> } >> >> - ret = drm_irq_install(drm, irq); >> + ret = request_irq(irq, ingenic_drm_irq_handler, 0, >> drm->driver->name, drm); >> Can't you use the devm variant? >> if (ret) { >> dev_err(dev, "Unable to install IRQ handler\n"); >> return ret; >> @@ -1192,14 +1189,18 @@ static void ingenic_drm_unbind(struct >> device *dev) >> { >> struct ingenic_drm *priv = dev_get_drvdata(dev); >> struct clk *parent_clk = clk_get_parent(priv->pix_clk); >> + struct drm_device *drm = &priv->drm; >> + struct platform_device *pdev = to_platform_device(drm->dev); >> + >> + free_irq(platform_get_irq(pdev, 0), drm); > > The driver was missing a drm_irq_uninstall() so the above code is > actually a small bug-fix. It should be mentioned in the changelog. > With this fixed: > Reviewed-by: Sam Ravnborg <sam@ravnborg.org> > > Note: I expect Paul to review too and apply. I wasn't Cc'd? :( -Paul > > Sam > >> >> clk_notifier_unregister(parent_clk, &priv->clock_nb); >> if (priv->lcd_clk) >> clk_disable_unprepare(priv->lcd_clk); >> clk_disable_unprepare(priv->pix_clk); >> >> - drm_dev_unregister(&priv->drm); >> - drm_atomic_helper_shutdown(&priv->drm); >> + drm_dev_unregister(drm); >> + drm_atomic_helper_shutdown(drm); >> } >> >> static const struct component_master_ops ingenic_master_ops = { >> -- >> 2.32.0
Hi Am 10.07.21 um 12:04 schrieb Paul Cercueil: > Hi, > > Le sam., juil. 10 2021 at 08:33:47 +0200, Sam Ravnborg > <sam@ravnborg.org> a écrit : >> Hi Thomas, >> >> On Tue, Jul 06, 2021 at 09:44:09AM +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. >>> >>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >>> --- >>> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 13 +++++++------ >>> 1 file changed, 7 insertions(+), 6 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >>> b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >>> index c296472164d9..a09b7da21b53 100644 >>> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >>> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c >>> @@ -33,7 +33,6 @@ >>> #include <drm/drm_fourcc.h> >>> #include <drm/drm_gem_atomic_helper.h> >>> #include <drm/drm_gem_framebuffer_helper.h> >>> -#include <drm/drm_irq.h> >>> #include <drm/drm_managed.h> >>> #include <drm/drm_of.h> >>> #include <drm/drm_panel.h> >>> @@ -799,8 +798,6 @@ static const struct drm_driver >>> ingenic_drm_driver_data = { >>> .fops = &ingenic_drm_fops, >>> .gem_create_object = ingenic_drm_gem_create_object, >>> DRM_GEM_CMA_DRIVER_OPS, >>> - >>> - .irq_handler = ingenic_drm_irq_handler, >>> }; >>> >>> static const struct drm_plane_funcs ingenic_drm_primary_plane_funcs >>> = { >>> @@ -1098,7 +1095,7 @@ static int ingenic_drm_bind(struct device >>> *dev, bool has_components) >>> encoder->possible_clones = clone_mask; >>> } >>> >>> - ret = drm_irq_install(drm, irq); >>> + ret = request_irq(irq, ingenic_drm_irq_handler, 0, >>> drm->driver->name, drm); >>> > > Can't you use the devm variant? I think so, I just tried to minimize the difference. Best regards Thomas > >>> if (ret) { >>> dev_err(dev, "Unable to install IRQ handler\n"); >>> return ret; >>> @@ -1192,14 +1189,18 @@ static void ingenic_drm_unbind(struct device >>> *dev) >>> { >>> struct ingenic_drm *priv = dev_get_drvdata(dev); >>> struct clk *parent_clk = clk_get_parent(priv->pix_clk); >>> + struct drm_device *drm = &priv->drm; >>> + struct platform_device *pdev = to_platform_device(drm->dev); >>> + >>> + free_irq(platform_get_irq(pdev, 0), drm); >> >> The driver was missing a drm_irq_uninstall() so the above code is >> actually a small bug-fix. It should be mentioned in the changelog. >> With this fixed: >> Reviewed-by: Sam Ravnborg <sam@ravnborg.org> >> >> Note: I expect Paul to review too and apply. > > I wasn't Cc'd? :( > > -Paul > >> >> Sam >> >>> >>> clk_notifier_unregister(parent_clk, &priv->clock_nb); >>> if (priv->lcd_clk) >>> clk_disable_unprepare(priv->lcd_clk); >>> clk_disable_unprepare(priv->pix_clk); >>> >>> - drm_dev_unregister(&priv->drm); >>> - drm_atomic_helper_shutdown(&priv->drm); >>> + drm_dev_unregister(drm); >>> + drm_atomic_helper_shutdown(drm); >>> } >>> >>> static const struct component_master_ops ingenic_master_ops = { >>> -- >>> 2.32.0 > >
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c index c296472164d9..a09b7da21b53 100644 --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c @@ -33,7 +33,6 @@ #include <drm/drm_fourcc.h> #include <drm/drm_gem_atomic_helper.h> #include <drm/drm_gem_framebuffer_helper.h> -#include <drm/drm_irq.h> #include <drm/drm_managed.h> #include <drm/drm_of.h> #include <drm/drm_panel.h> @@ -799,8 +798,6 @@ static const struct drm_driver ingenic_drm_driver_data = { .fops = &ingenic_drm_fops, .gem_create_object = ingenic_drm_gem_create_object, DRM_GEM_CMA_DRIVER_OPS, - - .irq_handler = ingenic_drm_irq_handler, }; static const struct drm_plane_funcs ingenic_drm_primary_plane_funcs = { @@ -1098,7 +1095,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) encoder->possible_clones = clone_mask; } - ret = drm_irq_install(drm, irq); + ret = request_irq(irq, ingenic_drm_irq_handler, 0, drm->driver->name, drm); if (ret) { dev_err(dev, "Unable to install IRQ handler\n"); return ret; @@ -1192,14 +1189,18 @@ static void ingenic_drm_unbind(struct device *dev) { struct ingenic_drm *priv = dev_get_drvdata(dev); struct clk *parent_clk = clk_get_parent(priv->pix_clk); + struct drm_device *drm = &priv->drm; + struct platform_device *pdev = to_platform_device(drm->dev); + + free_irq(platform_get_irq(pdev, 0), drm); clk_notifier_unregister(parent_clk, &priv->clock_nb); if (priv->lcd_clk) clk_disable_unprepare(priv->lcd_clk); clk_disable_unprepare(priv->pix_clk); - drm_dev_unregister(&priv->drm); - drm_atomic_helper_shutdown(&priv->drm); + drm_dev_unregister(drm); + drm_atomic_helper_shutdown(drm); } static const struct component_master_ops ingenic_master_ops = {
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. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)