On Tue, Sep 22, 2015 at 03:15:11PM +0200, Daniel Vetter wrote: > On Wed, Sep 16, 2015 at 11:07:07PM +0530, Shashank Sharma wrote: > > I915 driver registers gamma correction as palette correction > > property with DRM layer. This patch adds set_property() and get_property() > > handlers for pipe level gamma correction. > > > > The set function attaches the Gamma correction blob to CRTC state, these > > values will be committed during atomic commit. > > > > Signed-off-by: Shashank Sharma <shashank.sharma@xxxxxxxxx> > > Signed-off-by: Kausal Malladi <kausalmalladi@xxxxxxxxx> > > --- > > drivers/gpu/drm/i915/intel_atomic.c | 20 ++++++++++++++++++++ > > drivers/gpu/drm/i915/intel_color_manager.c | 21 +++++++++++++++++++++ > > drivers/gpu/drm/i915/intel_drv.h | 5 +++++ > > 3 files changed, 46 insertions(+) > > > > diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c > > index 500d2998..0b61fef 100644 > > --- a/drivers/gpu/drm/i915/intel_atomic.c > > +++ b/drivers/gpu/drm/i915/intel_atomic.c > > @@ -315,6 +315,13 @@ int intel_crtc_atomic_set_property(struct drm_crtc *crtc, > > struct drm_property *property, > > uint64_t val) > > { > > + struct drm_device *dev = crtc->dev; > > + struct drm_mode_config *config = &dev->mode_config; > > + > > + if (property == config->cm_palette_after_ctm_property) > > + return intel_color_manager_set_pipe_gamma(dev, state, > > + &crtc->base, val); > > + > > DRM_DEBUG_KMS("Unknown crtc property '%s'\n", property->name); > > return -EINVAL; > > } > > @@ -324,6 +331,19 @@ int intel_crtc_atomic_get_property(struct drm_crtc *crtc, > > struct drm_property *property, > > uint64_t *val) > > { > > + struct drm_device *dev = crtc->dev; > > + struct drm_mode_config *config = &dev->mode_config; > > + > > + if (property == config->cm_palette_after_ctm_property) { > > + *val = (state->palette_after_ctm_blob) ? > > + state->palette_after_ctm_blob->base.id : 0; > > + goto found; > > + } > > Since color manager properties are meant as a new standardize KMS > extension (we put them into the core drm_crtc_state) the get/set support > should also be in the core. See e.g. how the rotation property is handled > in drm_atomic_plane_get/set_property. So all this code should be added to > drm_atomic_crtc_get/set_property. I've forgotten to explain how drivers can then opt-in KMS extensions if we have the decode support unconditionally there and also register the props unconditionally: That's done by only attaching these standardized props to a crtc/plane if the corresponding object supports it. -Daniel > > > > + > > DRM_DEBUG_KMS("Unknown crtc property '%s'\n", property->name); > > return -EINVAL; > > + > > +found: > > + DRM_DEBUG_KMS("Found property %s\n", property->name); > > + return 0; > > } > > diff --git a/drivers/gpu/drm/i915/intel_color_manager.c b/drivers/gpu/drm/i915/intel_color_manager.c > > index 77f58f2..9421bb6 100644 > > --- a/drivers/gpu/drm/i915/intel_color_manager.c > > +++ b/drivers/gpu/drm/i915/intel_color_manager.c > > @@ -27,6 +27,27 @@ > > > > #include "intel_color_manager.h" > > > > +int intel_color_manager_set_pipe_gamma(struct drm_device *dev, > > + struct drm_crtc_state *crtc_state, > > + struct drm_mode_object *obj, uint32_t blob_id) > > +{ > > + struct drm_property_blob *blob; > > + > > + blob = drm_property_lookup_blob(dev, blob_id); > > + if (!blob) { > > + DRM_DEBUG_KMS("Invalid Blob ID\n"); > > + return -EINVAL; > > + } > > + > > + if (crtc_state->palette_after_ctm_blob) > > + drm_property_unreference_blob( > > + crtc_state->palette_after_ctm_blob); > > + > > + /* Attach the blob to be committed in state */ > > + crtc_state->palette_after_ctm_blob = blob; > > + return 0; > > +} > > What is this used for? It looks a bit like legacy property code, and we > have a generic helper to make that happen > (drm_atomic_helper_crtc_set_property). > > Generally please don't add functions/structs without also adding a user, > it means that reviewers have to constantly jump around in your patch > series to figure out how something is used. Instead if you want to split > things up really fine add a stub function frist (but including relevant > callers) and then fill out the bits separately. > -Daniel > > > + > > int get_pipe_capabilities(struct drm_device *dev, > > struct drm_palette_caps *palette_caps, struct drm_crtc *crtc) > > { > > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h > > index e27e754..d0193e2 100644 > > --- a/drivers/gpu/drm/i915/intel_drv.h > > +++ b/drivers/gpu/drm/i915/intel_drv.h > > @@ -1466,4 +1466,9 @@ void intel_plane_destroy_state(struct drm_plane *plane, > > struct drm_plane_state *state); > > extern const struct drm_plane_helper_funcs intel_plane_helper_funcs; > > > > +/* intel_color_manager.c */ > > +int intel_color_manager_set_pipe_gamma(struct drm_device *dev, > > + struct drm_crtc_state *crtc_state, > > + struct drm_mode_object *obj, uint32_t blob_id); > > + > > #endif /* __INTEL_DRV_H__ */ > > -- > > 1.9.1 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > > http://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx