On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote: > The old state is useful for drivers that need to perform operations at > enable time that depend on the transition between the old and new > states. > > While at it, rename the operation to .atomic_enable() to be consistent > with .atomic_disable(), as the .enable() operation is used by atomic > helpers only. > > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/arc/arcpgu_crtc.c | 5 ++-- > drivers/gpu/drm/arm/hdlcd_crtc.c | 5 ++-- > drivers/gpu/drm/arm/malidp_crtc.c | 5 ++-- For the hdlcd and mali-dp changes: Acked-by: Liviu Dudau <Liviu.Dudau@xxxxxxx> I'll assume you are going to push the changes through drm-misc rather than me cherry picking the changes from the patch. Thanks! Liviu > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 5 ++-- > drivers/gpu/drm/drm_atomic_helper.c | 7 +++-- > drivers/gpu/drm/drm_simple_kms_helper.c | 5 ++-- > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 ++-- > drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 5 ++-- > drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 5 ++-- > drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 5 ++-- > drivers/gpu/drm/imx/ipuv3-crtc.c | 5 ++-- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 5 ++-- > drivers/gpu/drm/meson/meson_crtc.c | 5 ++-- > drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 5 ++-- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 5 ++-- > drivers/gpu/drm/omapdrm/omap_crtc.c | 5 ++-- > drivers/gpu/drm/qxl/qxl_display.c | 5 ++-- > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 5 ++-- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 5 ++-- > drivers/gpu/drm/sti/sti_crtc.c | 5 ++-- > drivers/gpu/drm/stm/ltdc.c | 5 ++-- > drivers/gpu/drm/sun4i/sun4i_crtc.c | 5 ++-- > drivers/gpu/drm/tegra/dc.c | 5 ++-- > drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 8 +++++- > drivers/gpu/drm/vc4/vc4_crtc.c | 5 ++-- > drivers/gpu/drm/virtio/virtgpu_display.c | 5 ++-- > drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 7 +++-- > drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 7 +++-- > drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 5 ++-- > drivers/gpu/drm/zte/zx_vou.c | 5 ++-- > include/drm/drm_modeset_helper_vtables.h | 38 +++++++++++++------------ > 31 files changed, 117 insertions(+), 80 deletions(-) > > diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c > index 1f306781c9d5..c9bc6a90ac83 100644 > --- a/drivers/gpu/drm/arc/arcpgu_crtc.c > +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c > @@ -119,7 +119,8 @@ static void arc_pgu_crtc_mode_set_nofb(struct drm_crtc *crtc) > clk_set_rate(arcpgu->clk, m->crtc_clock * 1000); > } > > -static void arc_pgu_crtc_enable(struct drm_crtc *crtc) > +static void arc_pgu_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc); > > @@ -161,9 +162,9 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = { > .mode_set = drm_helper_crtc_mode_set, > .mode_set_base = drm_helper_crtc_mode_set_base, > .mode_set_nofb = arc_pgu_crtc_mode_set_nofb, > - .enable = arc_pgu_crtc_enable, > .disable = arc_pgu_crtc_disable, > .atomic_begin = arc_pgu_crtc_atomic_begin, > + .atomic_enable = arc_pgu_crtc_atomic_enable, > }; > > static void arc_pgu_plane_atomic_update(struct drm_plane *plane, > diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c > index d67b6f15e8b8..2b7f4f05d91f 100644 > --- a/drivers/gpu/drm/arm/hdlcd_crtc.c > +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c > @@ -165,7 +165,8 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc *crtc) > clk_set_rate(hdlcd->clk, m->crtc_clock * 1000); > } > > -static void hdlcd_crtc_enable(struct drm_crtc *crtc) > +static void hdlcd_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc); > > @@ -218,10 +219,10 @@ static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = { > - .enable = hdlcd_crtc_enable, > .disable = hdlcd_crtc_disable, > .atomic_check = hdlcd_crtc_atomic_check, > .atomic_begin = hdlcd_crtc_atomic_begin, > + .atomic_enable = hdlcd_crtc_atomic_enable, > }; > > static int hdlcd_plane_atomic_check(struct drm_plane *plane, > diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c > index 4bb38a21efec..8e5b1c0181ab 100644 > --- a/drivers/gpu/drm/arm/malidp_crtc.c > +++ b/drivers/gpu/drm/arm/malidp_crtc.c > @@ -46,7 +46,8 @@ static enum drm_mode_status malidp_crtc_mode_valid(struct drm_crtc *crtc, > return MODE_OK; > } > > -static void malidp_crtc_enable(struct drm_crtc *crtc) > +static void malidp_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct malidp_drm *malidp = crtc_to_malidp_device(crtc); > struct malidp_hw_device *hwdev = malidp->dev; > @@ -408,9 +409,9 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc, > > static const struct drm_crtc_helper_funcs malidp_crtc_helper_funcs = { > .mode_valid = malidp_crtc_mode_valid, > - .enable = malidp_crtc_enable, > .disable = malidp_crtc_disable, > .atomic_check = malidp_crtc_atomic_check, > + .atomic_enable = malidp_crtc_atomic_enable, > }; > > static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > index f6b8c5908a20..e54e503180f4 100644 > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c > @@ -183,7 +183,8 @@ static void atmel_hlcdc_crtc_disable(struct drm_crtc *c) > pm_runtime_put_sync(dev->dev); > } > > -static void atmel_hlcdc_crtc_enable(struct drm_crtc *c) > +static void atmel_hlcdc_crtc_atomic_enable(struct drm_crtc *c, > + struct drm_crtc_state *old_state) > { > struct drm_device *dev = c->dev; > struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c); > @@ -320,10 +321,10 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = { > .mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb, > .mode_set_base = drm_helper_crtc_mode_set_base, > .disable = atmel_hlcdc_crtc_disable, > - .enable = atmel_hlcdc_crtc_enable, > .atomic_check = atmel_hlcdc_crtc_atomic_check, > .atomic_begin = atmel_hlcdc_crtc_atomic_begin, > .atomic_flush = atmel_hlcdc_crtc_atomic_flush, > + .atomic_enable = atmel_hlcdc_crtc_atomic_enable, > }; > > static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c) > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 2f269e4267da..23e4661a62fe 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -1069,12 +1069,13 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, > struct drm_atomic_state *old_state) > { > struct drm_crtc *crtc; > + struct drm_crtc_state *old_crtc_state; > struct drm_crtc_state *new_crtc_state; > struct drm_connector *connector; > struct drm_connector_state *new_conn_state; > int i; > > - for_each_new_crtc_in_state(old_state, crtc, new_crtc_state, i) { > + for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) { > const struct drm_crtc_helper_funcs *funcs; > > /* Need to filter out CRTCs where only planes change. */ > @@ -1090,8 +1091,8 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, > DRM_DEBUG_ATOMIC("enabling [CRTC:%d:%s]\n", > crtc->base.id, crtc->name); > > - if (funcs->enable) > - funcs->enable(crtc); > + if (funcs->atomic_enable) > + funcs->atomic_enable(crtc, old_crtc_state); > else > funcs->commit(crtc); > } > diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c > index e084f9f8ca66..58c27ab1756f 100644 > --- a/drivers/gpu/drm/drm_simple_kms_helper.c > +++ b/drivers/gpu/drm/drm_simple_kms_helper.c > @@ -40,7 +40,8 @@ static int drm_simple_kms_crtc_check(struct drm_crtc *crtc, > return drm_atomic_add_affected_planes(state->state, crtc); > } > > -static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc) > +static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct drm_simple_display_pipe *pipe; > > @@ -64,8 +65,8 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc) > > static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = { > .atomic_check = drm_simple_kms_crtc_check, > + .atomic_enable = drm_simple_kms_crtc_enable, > .disable = drm_simple_kms_crtc_disable, > - .enable = drm_simple_kms_crtc_enable, > }; > > static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = { > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > index d72777f6411a..b7e2fadb6442 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > @@ -21,7 +21,8 @@ > #include "exynos_drm_drv.h" > #include "exynos_drm_plane.h" > > -static void exynos_drm_crtc_enable(struct drm_crtc *crtc) > +static void exynos_drm_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc); > > @@ -82,11 +83,11 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = { > - .enable = exynos_drm_crtc_enable, > .disable = exynos_drm_crtc_disable, > .atomic_check = exynos_crtc_atomic_check, > .atomic_begin = exynos_crtc_atomic_begin, > .atomic_flush = exynos_crtc_atomic_flush, > + .atomic_enable = exynos_drm_crtc_atomic_enable, > }; > > void exynos_crtc_handle_event(struct exynos_drm_crtc *exynos_crtc) > diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c > index cc4e944a1d3c..0e3752437e44 100644 > --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c > +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c > @@ -63,7 +63,8 @@ static void fsl_dcu_drm_crtc_atomic_disable(struct drm_crtc *crtc, > clk_disable_unprepare(fsl_dev->pix_clk); > } > > -static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc) > +static void fsl_dcu_drm_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct drm_device *dev = crtc->dev; > struct fsl_dcu_drm_device *fsl_dev = dev->dev_private; > @@ -133,7 +134,7 @@ static void fsl_dcu_drm_crtc_mode_set_nofb(struct drm_crtc *crtc) > static const struct drm_crtc_helper_funcs fsl_dcu_drm_crtc_helper_funcs = { > .atomic_disable = fsl_dcu_drm_crtc_atomic_disable, > .atomic_flush = fsl_dcu_drm_crtc_atomic_flush, > - .enable = fsl_dcu_drm_crtc_enable, > + .atomic_enable = fsl_dcu_drm_crtc_atomic_enable, > .mode_set_nofb = fsl_dcu_drm_crtc_mode_set_nofb, > }; > > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c > index 59542bddc980..49ef47c0c81a 100644 > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c > @@ -192,7 +192,8 @@ static struct drm_plane *hibmc_plane_init(struct hibmc_drm_private *priv) > return plane; > } > > -static void hibmc_crtc_enable(struct drm_crtc *crtc) > +static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > unsigned int reg; > struct hibmc_drm_private *priv = crtc->dev->dev_private; > @@ -453,11 +454,11 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = { > }; > > static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = { > - .enable = hibmc_crtc_enable, > .disable = hibmc_crtc_disable, > .mode_set_nofb = hibmc_crtc_mode_set_nofb, > .atomic_begin = hibmc_crtc_atomic_begin, > .atomic_flush = hibmc_crtc_atomic_flush, > + .atomic_enable = hibmc_crtc_atomic_enable, > }; > > int hibmc_de_init(struct hibmc_drm_private *priv) > diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > index c96c228a9898..8e00818b24fc 100644 > --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c > @@ -467,7 +467,8 @@ static void ade_dump_regs(void __iomem *base) > static void ade_dump_regs(void __iomem *base) { } > #endif > > -static void ade_crtc_enable(struct drm_crtc *crtc) > +static void ade_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct ade_crtc *acrtc = to_ade_crtc(crtc); > struct ade_hw_ctx *ctx = acrtc->ctx; > @@ -553,11 +554,11 @@ static void ade_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = { > - .enable = ade_crtc_enable, > .disable = ade_crtc_disable, > .mode_set_nofb = ade_crtc_mode_set_nofb, > .atomic_begin = ade_crtc_atomic_begin, > .atomic_flush = ade_crtc_atomic_flush, > + .atomic_enable = ade_crtc_atomic_enable, > }; > > static const struct drm_crtc_funcs ade_crtc_funcs = { > diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c > index 5456c15d962c..53e0b24beda6 100644 > --- a/drivers/gpu/drm/imx/ipuv3-crtc.c > +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c > @@ -50,7 +50,8 @@ static inline struct ipu_crtc *to_ipu_crtc(struct drm_crtc *crtc) > return container_of(crtc, struct ipu_crtc, base); > } > > -static void ipu_crtc_enable(struct drm_crtc *crtc) > +static void ipu_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc); > struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent); > @@ -293,7 +294,7 @@ static const struct drm_crtc_helper_funcs ipu_helper_funcs = { > .atomic_check = ipu_crtc_atomic_check, > .atomic_begin = ipu_crtc_atomic_begin, > .atomic_disable = ipu_crtc_atomic_disable, > - .enable = ipu_crtc_enable, > + .atomic_enable = ipu_crtc_atomic_enable, > }; > > static void ipu_put_resources(struct ipu_crtc *ipu_crtc) > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index 6582e1f56d37..5971b0827d1b 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -366,7 +366,8 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc) > } > } > > -static void mtk_drm_crtc_enable(struct drm_crtc *crtc) > +static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); > struct mtk_ddp_comp *ovl = mtk_crtc->ddp_comp[0]; > @@ -487,10 +488,10 @@ static const struct drm_crtc_funcs mtk_crtc_funcs = { > static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = { > .mode_fixup = mtk_drm_crtc_mode_fixup, > .mode_set_nofb = mtk_drm_crtc_mode_set_nofb, > - .enable = mtk_drm_crtc_enable, > .disable = mtk_drm_crtc_disable, > .atomic_begin = mtk_drm_crtc_atomic_begin, > .atomic_flush = mtk_drm_crtc_atomic_flush, > + .atomic_enable = mtk_drm_crtc_atomic_enable, > }; > > static int mtk_drm_crtc_init(struct drm_device *drm, > diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c > index c986eb03b9d9..6f148307b0e0 100644 > --- a/drivers/gpu/drm/meson/meson_crtc.c > +++ b/drivers/gpu/drm/meson/meson_crtc.c > @@ -79,7 +79,8 @@ static const struct drm_crtc_funcs meson_crtc_funcs = { > > }; > > -static void meson_crtc_enable(struct drm_crtc *crtc) > +static void meson_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct meson_crtc *meson_crtc = to_meson_crtc(crtc); > struct drm_crtc_state *crtc_state = crtc->state; > @@ -149,10 +150,10 @@ static void meson_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs meson_crtc_helper_funcs = { > - .enable = meson_crtc_enable, > .disable = meson_crtc_disable, > .atomic_begin = meson_crtc_atomic_begin, > .atomic_flush = meson_crtc_atomic_flush, > + .atomic_enable = meson_crtc_atomic_enable, > }; > > void meson_crtc_irq(struct meson_drm *priv) > diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c > index 615e1def64d9..9c20133f3f8d 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c > +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c > @@ -295,7 +295,8 @@ static void mdp4_crtc_disable(struct drm_crtc *crtc) > mdp4_crtc->enabled = false; > } > > -static void mdp4_crtc_enable(struct drm_crtc *crtc) > +static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); > struct mdp4_kms *mdp4_kms = get_kms(crtc); > @@ -493,10 +494,10 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = { > static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = { > .mode_set_nofb = mdp4_crtc_mode_set_nofb, > .disable = mdp4_crtc_disable, > - .enable = mdp4_crtc_enable, > .atomic_check = mdp4_crtc_atomic_check, > .atomic_begin = mdp4_crtc_atomic_begin, > .atomic_flush = mdp4_crtc_atomic_flush, > + .atomic_enable = mdp4_crtc_atomic_enable, > }; > > static void mdp4_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus) > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c > index cb5415d6c04b..d39d9d24d169 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c > @@ -429,7 +429,8 @@ static void mdp5_crtc_disable(struct drm_crtc *crtc) > mdp5_crtc->enabled = false; > } > > -static void mdp5_crtc_enable(struct drm_crtc *crtc) > +static void mdp5_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc); > struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state); > @@ -940,10 +941,10 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = { > static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = { > .mode_set_nofb = mdp5_crtc_mode_set_nofb, > .disable = mdp5_crtc_disable, > - .enable = mdp5_crtc_enable, > .atomic_check = mdp5_crtc_atomic_check, > .atomic_begin = mdp5_crtc_atomic_begin, > .atomic_flush = mdp5_crtc_atomic_flush, > + .atomic_enable = mdp5_crtc_atomic_enable, > }; > > static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus) > diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c > index dd0ef40ca469..7a1b7a9cc270 100644 > --- a/drivers/gpu/drm/omapdrm/omap_crtc.c > +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c > @@ -356,7 +356,8 @@ static void omap_crtc_arm_event(struct drm_crtc *crtc) > } > } > > -static void omap_crtc_enable(struct drm_crtc *crtc) > +static void omap_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct omap_crtc *omap_crtc = to_omap_crtc(crtc); > int ret; > @@ -568,10 +569,10 @@ static const struct drm_crtc_funcs omap_crtc_funcs = { > static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = { > .mode_set_nofb = omap_crtc_mode_set_nofb, > .disable = omap_crtc_disable, > - .enable = omap_crtc_enable, > .atomic_check = omap_crtc_atomic_check, > .atomic_begin = omap_crtc_atomic_begin, > .atomic_flush = omap_crtc_atomic_flush, > + .atomic_enable = omap_crtc_atomic_enable, > }; > > /* ----------------------------------------------------------------------------- > diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c > index 7ede5f131a5c..ea95e7e7cc7f 100644 > --- a/drivers/gpu/drm/qxl/qxl_display.c > +++ b/drivers/gpu/drm/qxl/qxl_display.c > @@ -447,7 +447,8 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc) > > } > > -static void qxl_crtc_enable(struct drm_crtc *crtc) > +static void qxl_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > DRM_DEBUG("\n"); > } > @@ -466,8 +467,8 @@ static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = { > .disable = qxl_crtc_disable, > .mode_fixup = qxl_crtc_mode_fixup, > .mode_set_nofb = qxl_mode_set_nofb, > - .enable = qxl_crtc_enable, > .atomic_flush = qxl_crtc_atomic_flush, > + .atomic_enable = qxl_crtc_atomic_enable, > }; > > static int qxl_primary_atomic_check(struct drm_plane *plane, > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > index 345eff72f581..6aa3fa8d06f9 100644 > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > @@ -552,7 +552,8 @@ void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc) > * CRTC Functions > */ > > -static void rcar_du_crtc_enable(struct drm_crtc *crtc) > +static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc); > > @@ -610,9 +611,9 @@ static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc, > > static const struct drm_crtc_helper_funcs crtc_helper_funcs = { > .disable = rcar_du_crtc_disable, > - .enable = rcar_du_crtc_enable, > .atomic_begin = rcar_du_crtc_atomic_begin, > .atomic_flush = rcar_du_crtc_atomic_flush, > + .atomic_enable = rcar_du_crtc_atomic_enable, > }; > > static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > index 5d450332c2fd..bb59f7410634 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c > @@ -871,7 +871,8 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc, > return true; > } > > -static void vop_crtc_enable(struct drm_crtc *crtc) > +static void vop_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct vop *vop = to_vop(crtc); > const struct vop_data *vop_data = vop->data; > @@ -1079,11 +1080,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = { > - .enable = vop_crtc_enable, > .disable = vop_crtc_disable, > .mode_fixup = vop_crtc_mode_fixup, > .atomic_flush = vop_crtc_atomic_flush, > .atomic_begin = vop_crtc_atomic_begin, > + .atomic_enable = vop_crtc_atomic_enable, > }; > > static void vop_crtc_destroy(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c > index d45a4335df5d..bb864345fedf 100644 > --- a/drivers/gpu/drm/sti/sti_crtc.c > +++ b/drivers/gpu/drm/sti/sti_crtc.c > @@ -20,7 +20,8 @@ > #include "sti_vid.h" > #include "sti_vtg.h" > > -static void sti_crtc_enable(struct drm_crtc *crtc) > +static void sti_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct sti_mixer *mixer = to_sti_mixer(crtc); > > @@ -222,10 +223,10 @@ static void sti_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs sti_crtc_helper_funcs = { > - .enable = sti_crtc_enable, > .disable = sti_crtc_disabling, > .mode_set_nofb = sti_crtc_mode_set_nofb, > .atomic_flush = sti_crtc_atomic_flush, > + .atomic_enable = sti_crtc_atomic_enable, > }; > > static void sti_crtc_destroy(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c > index 1b9483d4f2a4..337fce004d08 100644 > --- a/drivers/gpu/drm/stm/ltdc.c > +++ b/drivers/gpu/drm/stm/ltdc.c > @@ -386,7 +386,8 @@ static void ltdc_crtc_load_lut(struct drm_crtc *crtc) > ldev->clut[i]); > } > > -static void ltdc_crtc_enable(struct drm_crtc *crtc) > +static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct ltdc_device *ldev = crtc_to_ltdc(crtc); > > @@ -524,10 +525,10 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *crtc, > > static struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs = { > .load_lut = ltdc_crtc_load_lut, > - .enable = ltdc_crtc_enable, > .disable = ltdc_crtc_disable, > .mode_set_nofb = ltdc_crtc_mode_set_nofb, > .atomic_flush = ltdc_crtc_atomic_flush, > + .atomic_enable = ltdc_crtc_atomic_enable, > }; > > int ltdc_crtc_enable_vblank(struct drm_device *ddev, unsigned int pipe) > diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c > index f8c70439d1e2..509e4d8014f3 100644 > --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c > +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c > @@ -86,7 +86,8 @@ static void sun4i_crtc_disable(struct drm_crtc *crtc) > } > } > > -static void sun4i_crtc_enable(struct drm_crtc *crtc) > +static void sun4i_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc); > > @@ -98,8 +99,8 @@ static void sun4i_crtc_enable(struct drm_crtc *crtc) > static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = { > .atomic_begin = sun4i_crtc_atomic_begin, > .atomic_flush = sun4i_crtc_atomic_flush, > + .atomic_enable = sun4i_crtc_atomic_enable, > .disable = sun4i_crtc_disable, > - .enable = sun4i_crtc_enable, > }; > > static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c > index c875f11786b9..2e0d167cb657 100644 > --- a/drivers/gpu/drm/tegra/dc.c > +++ b/drivers/gpu/drm/tegra/dc.c > @@ -1243,7 +1243,8 @@ static void tegra_crtc_disable(struct drm_crtc *crtc) > pm_runtime_put_sync(dc->dev); > } > > -static void tegra_crtc_enable(struct drm_crtc *crtc) > +static void tegra_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct drm_display_mode *mode = &crtc->state->adjusted_mode; > struct tegra_dc_state *state = to_dc_state(crtc->state); > @@ -1352,10 +1353,10 @@ static void tegra_crtc_atomic_flush(struct drm_crtc *crtc, > > static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = { > .disable = tegra_crtc_disable, > - .enable = tegra_crtc_enable, > .atomic_check = tegra_crtc_atomic_check, > .atomic_begin = tegra_crtc_atomic_begin, > .atomic_flush = tegra_crtc_atomic_flush, > + .atomic_enable = tegra_crtc_atomic_enable, > }; > > static irqreturn_t tegra_dc_irq(int irq, void *data) > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c > index d524ed0d5146..6c5892763d27 100644 > --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c > +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c > @@ -504,6 +504,12 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc) > mutex_unlock(&tilcdc_crtc->enable_lock); > } > > +static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > +{ > + tilcdc_crtc_enable(crtc); > +} > + > static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown) > { > struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc); > @@ -729,9 +735,9 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = { > > static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = { > .mode_fixup = tilcdc_crtc_mode_fixup, > - .enable = tilcdc_crtc_enable, > .disable = tilcdc_crtc_disable, > .atomic_check = tilcdc_crtc_atomic_check, > + .atomic_enable = tilcdc_crtc_atomic_enable, > }; > > int tilcdc_crtc_max_width(struct drm_crtc *crtc) > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c > index f20c01759c0d..4c03a565b276 100644 > --- a/drivers/gpu/drm/vc4/vc4_crtc.c > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c > @@ -533,7 +533,8 @@ static void vc4_crtc_disable(struct drm_crtc *crtc) > } > } > > -static void vc4_crtc_enable(struct drm_crtc *crtc) > +static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct drm_device *dev = crtc->dev; > struct vc4_dev *vc4 = to_vc4_dev(dev); > @@ -870,10 +871,10 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = { > static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = { > .mode_set_nofb = vc4_crtc_mode_set_nofb, > .disable = vc4_crtc_disable, > - .enable = vc4_crtc_enable, > .mode_valid = vc4_crtc_mode_valid, > .atomic_check = vc4_crtc_atomic_check, > .atomic_flush = vc4_crtc_atomic_flush, > + .atomic_enable = vc4_crtc_atomic_enable, > }; > > static const struct vc4_crtc_data pv0_data = { > diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c > index d51bd4521f17..03a3c12ed100 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_display.c > +++ b/drivers/gpu/drm/virtio/virtgpu_display.c > @@ -113,7 +113,8 @@ static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc) > crtc->mode.vdisplay, 0, 0); > } > > -static void virtio_gpu_crtc_enable(struct drm_crtc *crtc) > +static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > } > > @@ -145,11 +146,11 @@ static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = { > - .enable = virtio_gpu_crtc_enable, > .disable = virtio_gpu_crtc_disable, > .mode_set_nofb = virtio_gpu_crtc_mode_set_nofb, > .atomic_check = virtio_gpu_crtc_atomic_check, > .atomic_flush = virtio_gpu_crtc_atomic_flush, > + .atomic_enable = virtio_gpu_crtc_atomic_enable, > }; > > static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder, > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c > index f8acd3a15523..832b83c582c2 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c > @@ -203,7 +203,7 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc) > } > > /** > - * vmw_ldu_crtc_helper_enable - Noop > + * vmw_ldu_crtc_atomic_enable - Noop > * > * @crtc: CRTC associated with the new screen > * > @@ -212,7 +212,8 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc) > * but since for LDU the display plane is closely tied to the > * CRTC, it makes more sense to do those at plane update time. > */ > -static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc) > +static void vmw_ldu_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > } > > @@ -376,12 +377,12 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = { > }; > > static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = { > - .enable = vmw_ldu_crtc_helper_enable, > .disable = vmw_ldu_crtc_helper_disable, > .mode_set_nofb = vmw_ldu_crtc_mode_set_nofb, > .atomic_check = vmw_du_crtc_atomic_check, > .atomic_begin = vmw_du_crtc_atomic_begin, > .atomic_flush = vmw_du_crtc_atomic_flush, > + .atomic_enable = vmw_ldu_crtc_atomic_enable, > }; > > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c > index 1cb826c503bf..8ba3bad06909 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c > @@ -270,13 +270,14 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc) > } > > /** > - * vmw_sou_crtc_helper_enable - Noop > + * vmw_sou_crtc_atomic_enable - Noop > * > * @crtc: CRTC associated with the new screen > * > * This is called after a mode set has been completed. > */ > -static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc) > +static void vmw_sou_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > } > > @@ -573,12 +574,12 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = { > > static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = { > .prepare = vmw_sou_crtc_helper_prepare, > - .enable = vmw_sou_crtc_helper_enable, > .disable = vmw_sou_crtc_helper_disable, > .mode_set_nofb = vmw_sou_crtc_mode_set_nofb, > .atomic_check = vmw_du_crtc_atomic_check, > .atomic_begin = vmw_du_crtc_atomic_begin, > .atomic_flush = vmw_du_crtc_atomic_flush, > + .atomic_enable = vmw_sou_crtc_atomic_enable, > }; > > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c > index 4eb93b47d6db..f2b39d9c51cc 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c > @@ -412,7 +412,8 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc) > } > > > -static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc) > +static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct vmw_private *dev_priv; > struct vmw_screen_target_display_unit *stdu; > @@ -1415,12 +1416,12 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = { > > static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = { > .prepare = vmw_stdu_crtc_helper_prepare, > - .enable = vmw_stdu_crtc_helper_enable, > .disable = vmw_stdu_crtc_helper_disable, > .mode_set_nofb = vmw_stdu_crtc_mode_set_nofb, > .atomic_check = vmw_du_crtc_atomic_check, > .atomic_begin = vmw_du_crtc_atomic_begin, > .atomic_flush = vmw_du_crtc_atomic_flush, > + .atomic_enable = vmw_stdu_crtc_atomic_enable, > }; > > > diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c > index 5fbd10b60ee5..ccb4b0bdb8c6 100644 > --- a/drivers/gpu/drm/zte/zx_vou.c > +++ b/drivers/gpu/drm/zte/zx_vou.c > @@ -350,7 +350,8 @@ static inline void vou_chn_set_update(struct zx_crtc *zcrtc) > zx_writel(zcrtc->chnreg + CHN_UPDATE, 1); > } > > -static void zx_crtc_enable(struct drm_crtc *crtc) > +static void zx_crtc_atomic_enable(struct drm_crtc *crtc, > + struct drm_crtc_state *old_state) > { > struct drm_display_mode *mode = &crtc->state->adjusted_mode; > bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE; > @@ -490,9 +491,9 @@ static void zx_crtc_atomic_flush(struct drm_crtc *crtc, > } > > static const struct drm_crtc_helper_funcs zx_crtc_helper_funcs = { > - .enable = zx_crtc_enable, > .disable = zx_crtc_disable, > .atomic_flush = zx_crtc_atomic_flush, > + .atomic_enable = zx_crtc_atomic_enable, > }; > > static int zx_vou_enable_vblank(struct drm_crtc *crtc) > diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h > index 474a1029ec79..d74a2cafc3de 100644 > --- a/include/drm/drm_modeset_helper_vtables.h > +++ b/include/drm/drm_modeset_helper_vtables.h > @@ -316,24 +316,6 @@ struct drm_crtc_helper_funcs { > void (*disable)(struct drm_crtc *crtc); > > /** > - * @enable: > - * > - * This callback should be used to enable the CRTC. With the atomic > - * drivers it is called before all encoders connected to this CRTC are > - * enabled through the encoder's own &drm_encoder_helper_funcs.enable > - * hook. If that sequence is too simple drivers can just add their own > - * hooks and call it from this CRTC callback here by looping over all > - * encoders connected to it using for_each_encoder_on_crtc(). > - * > - * This hook is used only by atomic helpers, for symmetry with @disable. > - * Atomic drivers don't need to implement it if there's no need to > - * enable anything at the CRTC level. To ensure that runtime PM handling > - * (using either DPMS or the new "ACTIVE" property) works > - * @enable must be the inverse of @disable for atomic drivers. > - */ > - void (*enable)(struct drm_crtc *crtc); > - > - /** > * @atomic_check: > * > * Drivers should check plane-update related CRTC constraints in this > @@ -433,6 +415,26 @@ struct drm_crtc_helper_funcs { > struct drm_crtc_state *old_crtc_state); > > /** > + * @atomic_enable: > + * > + * This callback should be used to enable the CRTC. With the atomic > + * drivers it is called before all encoders connected to this CRTC are > + * enabled through the encoder's own &drm_encoder_helper_funcs.enable > + * hook. If that sequence is too simple drivers can just add their own > + * hooks and call it from this CRTC callback here by looping over all > + * encoders connected to it using for_each_encoder_on_crtc(). > + * > + * This hook is used only by atomic helpers, for symmetry with > + * @atomic_disable. Atomic drivers don't need to implement it if there's > + * no need to enable anything at the CRTC level. To ensure that runtime > + * PM handling (using either DPMS or the new "ACTIVE" property) works > + * @atomic_enable must be the inverse of @atomic_disable for atomic > + * drivers. > + */ > + void (*atomic_enable)(struct drm_crtc *crtc, > + struct drm_crtc_state *old_crtc_state); > + > + /** > * @atomic_disable: > * > * This callback should be used to disable the CRTC. With the atomic > -- > Regards, > > Laurent Pinchart > -- ==================== | I would like to | | fix the world, | | but they're not | | giving me the | \ source code! / --------------- ¯\_(ツ)_/¯ _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel