Hi, On 29 August 2016 at 15:49, Daniel Vetter <daniel.vetter@xxxxxxxx> wrote: > It's deprecated and only should be used by drivers which still use > drm_platform_init, not by anyone else. > > And indeed it's entirely unused and can be nuked. > > This required a bit more fudging, but I guess kirin_dc_ops really > wants to operate on the platform_device, not something else. Also > bonus points for implementing abstraction, and then storing the vfunc > in a global variable. > > v2: Don't break the build soooo badly :( > Note that the cleanup function is a bit confused: ade_data was never > set as drvdata, and calling drm_crtc_cleanup directly is a bug - this > is called indirectly through drm_mode_config_cleanup, which calls into > crtc->destroy, which already has the call to drm_crtc_cleanup. Which > means we can just nuke it. > > Note this is the 2nd attempt after the first one failed and had to be > reverted again in > > commit 9cd2e854d61ccfa51686f3ed7b0c917708fc641f > Author: Daniel Vetter <daniel.vetter@xxxxxxxx> > Date: Wed Aug 17 13:59:40 2016 +0200 > > Revert "drm/hisilicon: Don't set drm_device->platformdev" > > Cc: Xinliang Liu <xinliang.liu@xxxxxxxxxx> > Cc: Xinwei Kong <kong.kongxinwei@xxxxxxxxxxxxx> > Cc: Archit Taneja <architt@xxxxxxxxxxxxxx> > Cc: Sean Paul <seanpaul@xxxxxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > --- > drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 11 +++-------- > drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 8 +++----- > drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h | 4 ++-- > 3 files changed, 8 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > index 7e7a4d43d6b6..26022122bcd1 100644 > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > @@ -974,9 +974,9 @@ static int ade_dts_parse(struct platform_device *pdev, struct ade_hw_ctx *ctx) > return 0; > } > > -static int ade_drm_init(struct drm_device *dev) > +static int ade_drm_init(struct platform_device *pdev) > { > - struct platform_device *pdev = dev->platformdev; > + struct drm_device *dev = platform_get_drvdata(pdev); if we can get the platformdev here, how about just get pdev here and don't change the parameter of ade_drm_init : - struct platform_device *pdev = dev->platformdev; + struct platform_device *pdev = o_platform_device(dev->dev); Best, -xinliang > struct ade_data *ade; > struct ade_hw_ctx *ctx; > struct ade_crtc *acrtc; > @@ -1035,13 +1035,8 @@ static int ade_drm_init(struct drm_device *dev) > return 0; > } > > -static void ade_drm_cleanup(struct drm_device *dev) > +static void ade_drm_cleanup(struct platform_device *pdev) > { > - struct platform_device *pdev = dev->platformdev; > - struct ade_data *ade = platform_get_drvdata(pdev); > - struct drm_crtc *crtc = &ade->acrtc.base; > - > - drm_crtc_cleanup(crtc); > } > > const struct kirin_dc_ops ade_dc_ops = { > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c > index 1fc2f502d20d..b9b8c25da5e3 100644 > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c > @@ -41,7 +41,7 @@ static int kirin_drm_kms_cleanup(struct drm_device *dev) > #endif > drm_kms_helper_poll_fini(dev); > drm_vblank_cleanup(dev); > - dc_ops->cleanup(dev); > + dc_ops->cleanup(to_platform_device(dev->dev)); > drm_mode_config_cleanup(dev); > devm_kfree(dev->dev, priv); > dev->dev_private = NULL; > @@ -103,7 +103,7 @@ static int kirin_drm_kms_init(struct drm_device *dev) > kirin_drm_mode_config_init(dev); > > /* display controller init */ > - ret = dc_ops->init(dev); > + ret = dc_ops->init(to_platform_device(dev->dev)); > if (ret) > goto err_mode_config_cleanup; > > @@ -137,7 +137,7 @@ static int kirin_drm_kms_init(struct drm_device *dev) > err_unbind_all: > component_unbind_all(dev->dev, dev); > err_dc_cleanup: > - dc_ops->cleanup(dev); > + dc_ops->cleanup(to_platform_device(dev->dev)); > err_mode_config_cleanup: > drm_mode_config_cleanup(dev); > devm_kfree(dev->dev, priv); > @@ -210,8 +210,6 @@ static int kirin_drm_bind(struct device *dev) > if (!drm_dev) > return -ENOMEM; > > - drm_dev->platformdev = to_platform_device(dev); > - > ret = kirin_drm_kms_init(drm_dev); > if (ret) > goto err_drm_dev_unref; > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h > index 1a07caf8e7f4..a0bb217c4c64 100644 > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h > @@ -15,8 +15,8 @@ > > /* display controller init/cleanup ops */ > struct kirin_dc_ops { > - int (*init)(struct drm_device *dev); > - void (*cleanup)(struct drm_device *dev); > + int (*init)(struct platform_device *pdev); > + void (*cleanup)(struct platform_device *pdev); > }; > > struct kirin_drm_private { > -- > 2.9.3 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel