On Wed, Apr 15, 2020 at 09:40:30AM +0200, Daniel Vetter wrote: > As usual, we can drop the drm_dev_put() and need to embed the > drm_device. Since it's so few, also go right ahead and leave > drm_device->dev_private set to NULL, so that we always use the > container_of() upcast, which is faster anyway. > > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > Cc: Joel Stanley <joel@xxxxxxxxx> > Cc: Andrew Jeffery <andrew@xxxxxxxx> > Cc: linux-aspeed@xxxxxxxxxxxxxxxx > Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx Acked-by: Sam Ravnborg <sam@xxxxxxxxxxxx> > --- > drivers/gpu/drm/aspeed/aspeed_gfx.h | 2 ++ > drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c | 2 +- > drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 31 +++++++++--------------- > drivers/gpu/drm/aspeed/aspeed_gfx_out.c | 2 +- > 4 files changed, 15 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx.h b/drivers/gpu/drm/aspeed/aspeed_gfx.h > index adc02940de6f..e7ca95827ae8 100644 > --- a/drivers/gpu/drm/aspeed/aspeed_gfx.h > +++ b/drivers/gpu/drm/aspeed/aspeed_gfx.h > @@ -5,6 +5,7 @@ > #include <drm/drm_simple_kms_helper.h> > > struct aspeed_gfx { > + struct drm_device drm; > void __iomem *base; > struct clk *clk; > struct reset_control *rst; > @@ -13,6 +14,7 @@ struct aspeed_gfx { > struct drm_simple_display_pipe pipe; > struct drm_connector connector; > }; > +#define to_aspeed_gfx(x) container_of(x, struct aspeed_gfx, drm) > > int aspeed_gfx_create_pipe(struct drm_device *drm); > int aspeed_gfx_create_output(struct drm_device *drm); > diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c b/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c > index 2184b8be6fd4..e54686c31a90 100644 > --- a/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c > +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_crtc.c > @@ -231,7 +231,7 @@ static const uint32_t aspeed_gfx_formats[] = { > > int aspeed_gfx_create_pipe(struct drm_device *drm) > { > - struct aspeed_gfx *priv = drm->dev_private; > + struct aspeed_gfx *priv = to_aspeed_gfx(drm); > > return drm_simple_display_pipe_init(drm, &priv->pipe, &aspeed_gfx_funcs, > aspeed_gfx_formats, > diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c > index ada2f6aca906..6b27242b9ee3 100644 > --- a/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c > +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_drv.c > @@ -77,7 +77,7 @@ static void aspeed_gfx_setup_mode_config(struct drm_device *drm) > static irqreturn_t aspeed_gfx_irq_handler(int irq, void *data) > { > struct drm_device *drm = data; > - struct aspeed_gfx *priv = drm->dev_private; > + struct aspeed_gfx *priv = to_aspeed_gfx(drm); > u32 reg; > > reg = readl(priv->base + CRT_CTRL1); > @@ -96,15 +96,10 @@ static irqreturn_t aspeed_gfx_irq_handler(int irq, void *data) > static int aspeed_gfx_load(struct drm_device *drm) > { > struct platform_device *pdev = to_platform_device(drm->dev); > - struct aspeed_gfx *priv; > + struct aspeed_gfx *priv = to_aspeed_gfx(drm); > struct resource *res; > int ret; > > - priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); > - if (!priv) > - return -ENOMEM; > - drm->dev_private = priv; > - > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > priv->base = devm_ioremap_resource(drm->dev, res); > if (IS_ERR(priv->base)) > @@ -187,8 +182,6 @@ static void aspeed_gfx_unload(struct drm_device *drm) > { > drm_kms_helper_poll_fini(drm); > drm_mode_config_cleanup(drm); > - > - drm->dev_private = NULL; > } > > DEFINE_DRM_GEM_CMA_FOPS(fops); > @@ -216,27 +209,26 @@ static const struct of_device_id aspeed_gfx_match[] = { > > static int aspeed_gfx_probe(struct platform_device *pdev) > { > - struct drm_device *drm; > + struct aspeed_gfx *priv; > int ret; > > - drm = drm_dev_alloc(&aspeed_gfx_driver, &pdev->dev); > - if (IS_ERR(drm)) > - return PTR_ERR(drm); > + priv = devm_drm_dev_alloc(&pdev->dev, &aspeed_gfx_driver, > + struct aspeed_gfx, drm); > + if (IS_ERR(priv)) > + return PTR_ERR(priv); > > - ret = aspeed_gfx_load(drm); > + ret = aspeed_gfx_load(&priv->drm); > if (ret) > - goto err_free; > + return ret; > > - ret = drm_dev_register(drm, 0); > + ret = drm_dev_register(&priv->drm, 0); > if (ret) > goto err_unload; > > return 0; > > err_unload: > - aspeed_gfx_unload(drm); > -err_free: > - drm_dev_put(drm); > + aspeed_gfx_unload(&priv->drm); > > return ret; > } > @@ -247,7 +239,6 @@ static int aspeed_gfx_remove(struct platform_device *pdev) > > drm_dev_unregister(drm); > aspeed_gfx_unload(drm); > - drm_dev_put(drm); > > return 0; > } > diff --git a/drivers/gpu/drm/aspeed/aspeed_gfx_out.c b/drivers/gpu/drm/aspeed/aspeed_gfx_out.c > index 67ee5fa10055..6759cb88415a 100644 > --- a/drivers/gpu/drm/aspeed/aspeed_gfx_out.c > +++ b/drivers/gpu/drm/aspeed/aspeed_gfx_out.c > @@ -28,7 +28,7 @@ static const struct drm_connector_funcs aspeed_gfx_connector_funcs = { > > int aspeed_gfx_create_output(struct drm_device *drm) > { > - struct aspeed_gfx *priv = drm->dev_private; > + struct aspeed_gfx *priv = to_aspeed_gfx(drm); > int ret; > > priv->connector.dpms = DRM_MODE_DPMS_OFF; > -- > 2.25.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel