On Mon, Jan 24, 2011 at 10:55 AM, Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > Iterate over the attached CRTCs, encoders and connectors and call the > supplied reset vfunc in order to reset any cached state back to unknown. > Useful after an invalidation event such as a GPU reset or resuming. > Can't you just reprogram the modes at resume? I guess it would help to see what you are actually doing with this hook. Alex > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_crtc.c | 19 +++++++++++++++++++ > include/drm/drm_crtc.h | 7 +++++++ > 2 files changed, 26 insertions(+), 0 deletions(-) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index 2baa670..6d7323d 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -2674,3 +2674,22 @@ out: > mutex_unlock(&dev->mode_config.mutex); > return ret; > } > + > +void drm_mode_config_reset(struct drm_device *dev) > +{ > + struct drm_crtc *crtc; > + struct drm_encoder *encoder; > + struct drm_connector *connector; > + > + list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) > + if (crtc->funcs->reset) > + crtc->funcs->reset(crtc); > + > + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) > + if (encoder->funcs->reset) > + encoder->funcs->reset(encoder); > + > + list_for_each_entry(connector, &dev->mode_config.connector_list, head) > + if (connector->funcs->reset) > + connector->funcs->reset(connector); > +} > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index acd7fad..801be59 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -275,6 +275,7 @@ struct drm_pending_vblank_event; > > /** > * drm_crtc_funcs - control CRTCs for a given device > + * @reset: reset CRTC after state has been invalidate (e.g. resume) > * @dpms: control display power levels > * @save: save CRTC state > * @resore: restore CRTC state > @@ -302,6 +303,8 @@ struct drm_crtc_funcs { > void (*save)(struct drm_crtc *crtc); /* suspend? */ > /* Restore CRTC state */ > void (*restore)(struct drm_crtc *crtc); /* resume? */ > + /* Reset CRTC state */ > + void (*reset)(struct drm_crtc *crtc); > > /* cursor controls */ > int (*cursor_set)(struct drm_crtc *crtc, struct drm_file *file_priv, > @@ -379,6 +382,7 @@ struct drm_crtc { > * @dpms: set power state (see drm_crtc_funcs above) > * @save: save connector state > * @restore: restore connector state > + * @reset: reset connector after state has been invalidate (e.g. resume) > * @mode_valid: is this mode valid on the given connector? > * @mode_fixup: try to fixup proposed mode for this connector > * @mode_set: set this mode > @@ -396,6 +400,7 @@ struct drm_connector_funcs { > void (*dpms)(struct drm_connector *connector, int mode); > void (*save)(struct drm_connector *connector); > void (*restore)(struct drm_connector *connector); > + void (*reset)(struct drm_connector *connector); > > /* Check to see if anything is attached to the connector. > * @force is set to false whilst polling, true when checking the > @@ -413,6 +418,7 @@ struct drm_connector_funcs { > }; > > struct drm_encoder_funcs { > + void (*reset)(struct drm_encoder *encoder); > void (*destroy)(struct drm_encoder *encoder); > }; > > @@ -656,6 +662,7 @@ extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev, > struct drm_display_mode *mode); > extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode); > extern void drm_mode_config_init(struct drm_device *dev); > +extern void drm_mode_config_reset(struct drm_device *dev); > extern void drm_mode_config_cleanup(struct drm_device *dev); > extern void drm_mode_set_name(struct drm_display_mode *mode); > extern bool drm_mode_equal(struct drm_display_mode *mode1, struct drm_display_mode *mode2); > -- > 1.7.2.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel