Quoting Ville Syrjala (2019-06-19 18:08:40) > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Switch from the driver-wide vblank vfuncs to the per-crtc ones so that > we don't have so many platform specific vfuncs in the driver struct. > > We still need to do something about the rest fo the irq vfuncs... > > v2: s/INTEL_GEN>=3/IS_GEN3/ > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_display.c | 104 ++++++++++++++++--- > drivers/gpu/drm/i915/i915_irq.c | 93 +++++++---------- > drivers/gpu/drm/i915/i915_irq.h | 14 +++ > 3 files changed, 143 insertions(+), 68 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index 5f30f348b0c0..e55bd75528c1 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -13567,7 +13567,7 @@ u32 intel_crtc_get_vblank_counter(struct intel_crtc *crtc) > if (!vblank->max_vblank_count) > return (u32)drm_crtc_accurate_vblank_count(&crtc->base); > > - return dev->driver->get_vblank_counter(dev, crtc->pipe); > + return crtc->base.funcs->get_vblank_counter(&crtc->base); > } > > static void intel_update_crtc(struct drm_crtc *crtc, > @@ -14105,18 +14105,6 @@ static int intel_atomic_commit(struct drm_device *dev, > return 0; > } > > -static const struct drm_crtc_funcs intel_crtc_funcs = { > - .gamma_set = drm_atomic_helper_legacy_gamma_set, > - .set_config = drm_atomic_helper_set_config, > - .destroy = intel_crtc_destroy, > - .page_flip = drm_atomic_helper_page_flip, > - .atomic_duplicate_state = intel_crtc_duplicate_state, > - .atomic_destroy_state = intel_crtc_destroy_state, > - .set_crc_source = intel_crtc_set_crc_source, > - .verify_crc_source = intel_crtc_verify_crc_source, > - .get_crc_sources = intel_crtc_get_crc_sources, > -}; > - > struct wait_rps_boost { > struct wait_queue_entry wait; > > @@ -14910,8 +14898,76 @@ static void intel_crtc_init_scalers(struct intel_crtc *crtc, > scaler_state->scaler_id = -1; > } > > +#define INTEL_CRTC_FUNCS \ > + .gamma_set = drm_atomic_helper_legacy_gamma_set, \ > + .set_config = drm_atomic_helper_set_config, \ > + .destroy = intel_crtc_destroy, \ > + .page_flip = drm_atomic_helper_page_flip, \ > + .atomic_duplicate_state = intel_crtc_duplicate_state, \ > + .atomic_destroy_state = intel_crtc_destroy_state, \ > + .set_crc_source = intel_crtc_set_crc_source, \ > + .verify_crc_source = intel_crtc_verify_crc_source, \ > + .get_crc_sources = intel_crtc_get_crc_sources > + > +static const struct drm_crtc_funcs bdw_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = g4x_get_vblank_counter, > + .enable_vblank = bdw_enable_vblank, > + .disable_vblank = bdw_disable_vblank, Used if (INTEL_GEN(dev_priv) >= 8) && !GMCH Used to be gen8_enable_vblank and used for all gen8+ && !GMCH. > +}; > + > +static const struct drm_crtc_funcs ilk_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = g4x_get_vblank_counter, > + .enable_vblank = ilk_enable_vblank, > + .disable_vblank = ilk_disable_vblank, Ilk/Ironlake only. > +}; > + > +static const struct drm_crtc_funcs g4x_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = g4x_get_vblank_counter, > + .enable_vblank = i965_enable_vblank, > + .disable_vblank = i965_disable_vblank, g4x/vlv/chv, checks out same as before/after > +}; > + > +static const struct drm_crtc_funcs i965_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = i915_get_vblank_counter, > + .enable_vblank = i965_enable_vblank, > + .disable_vblank = i965_disable_vblank, The rest of gen4 > +}; > + > +static const struct drm_crtc_funcs i945gm_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = i915_get_vblank_counter, > + .enable_vblank = i945gm_enable_vblank, > + .disable_vblank = i945gm_disable_vblank, > +}; > + > +static const struct drm_crtc_funcs i915_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + .get_vblank_counter = i915_get_vblank_counter, > + .enable_vblank = i8xx_enable_vblank, > + .disable_vblank = i8xx_disable_vblank, > +}; > + > +static const struct drm_crtc_funcs i8xx_crtc_funcs = { > + INTEL_CRTC_FUNCS, > + > + /* no hw vblank counter */ > + .enable_vblank = i8xx_enable_vblank, > + .disable_vblank = i8xx_disable_vblank, And the look all consistent. I'm convinced that this is all the same per-platform functions as before. Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx