On 05/08, Harry Wentland wrote: > > > On 4/23/23 10:10, Melissa Wen wrote: > > From amdgpu_dm_plane we can get it for both CRTC and plane color > > properties. We are adding new plane properties for AMD driver-private > > color mgmt. > > > > Signed-off-by: Melissa Wen <m...@igalia.com> > > --- > > .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 37 +------------------ > > .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 35 ++++++++++++++++++ > > .../amd/display/amdgpu_dm/amdgpu_dm_plane.h | 7 ++++ > > 3 files changed, 44 insertions(+), 35 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c > > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c > > index 79324fbab1f1..27d7a8b18013 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c > > @@ -344,39 +344,6 @@ dm_crtc_additional_color_mgmt(struct drm_crtc *crtc) > > DRM_TRANSFER_FUNCTION_DEFAULT); > > } > > > > -static int > > -atomic_replace_property_blob_from_id(struct drm_device *dev, > > - struct drm_property_blob **blob, > > - uint64_t blob_id, > > - ssize_t expected_size, > > - ssize_t expected_elem_size, > > - bool *replaced) > > -{ > > - struct drm_property_blob *new_blob = NULL; > > - > > - if (blob_id != 0) { > > - new_blob = drm_property_lookup_blob(dev, blob_id); > > - if (new_blob == NULL) > > - return -EINVAL; > > - > > - if (expected_size > 0 && > > - new_blob->length != expected_size) { > > - drm_property_blob_put(new_blob); > > - return -EINVAL; > > - } > > - if (expected_elem_size > 0 && > > - new_blob->length % expected_elem_size != 0) { > > - drm_property_blob_put(new_blob); > > - return -EINVAL; > > - } > > - } > > - > > - *replaced |= drm_property_replace_blob(blob, new_blob); > > - drm_property_blob_put(new_blob); > > - > > - return 0; > > -} > > - > > static int > > amdgpu_dm_atomic_crtc_set_property(struct drm_crtc *crtc, > > struct drm_crtc_state *state, > > @@ -389,7 +356,7 @@ amdgpu_dm_atomic_crtc_set_property(struct drm_crtc > > *crtc, > > int ret; > > > > if (property == adev->mode_info.shaper_lut_property) { > > - ret = atomic_replace_property_blob_from_id(crtc->dev, > > + ret = amdgpu_dm_replace_property_blob_from_id(crtc->dev, > > &acrtc_state->shaper_lut, > > val, > > -1, sizeof(struct drm_color_lut), > > @@ -397,7 +364,7 @@ amdgpu_dm_atomic_crtc_set_property(struct drm_crtc > > *crtc, > > acrtc_state->base.color_mgmt_changed |= replaced; > > return ret; > > } else if (property == adev->mode_info.lut3d_property) { > > - ret = atomic_replace_property_blob_from_id(crtc->dev, > > + ret = amdgpu_dm_replace_property_blob_from_id(crtc->dev, > > &acrtc_state->lut3d, > > val, > > -1, sizeof(struct drm_color_lut), > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > index 322668973747..4e5498153be2 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > > @@ -1411,6 +1411,41 @@ static void dm_drm_plane_destroy_state(struct > > drm_plane *plane, > > drm_atomic_helper_plane_destroy_state(plane, state); > > } > > > > +#ifdef CONFIG_STEAM_DECK > > +int > > +amdgpu_dm_replace_property_blob_from_id(struct drm_device *dev, > > + struct drm_property_blob **blob, > > + uint64_t blob_id, > > + ssize_t expected_size, > > + ssize_t expected_elem_size, > > + bool *replaced) > > +{ > > + struct drm_property_blob *new_blob = NULL; > > + > > + if (blob_id != 0) { > > + new_blob = drm_property_lookup_blob(dev, blob_id); > > + if (new_blob == NULL) > > + return -EINVAL; > > + > > + if (expected_size > 0 && > > + new_blob->length != expected_size) { > > + drm_property_blob_put(new_blob); > > + return -EINVAL; > > + } > > + if (expected_elem_size > 0 && > > + new_blob->length % expected_elem_size != 0) { > > + drm_property_blob_put(new_blob); > > + return -EINVAL; > > + } > > + } > > + > > + *replaced |= drm_property_replace_blob(blob, new_blob); > > + drm_property_blob_put(new_blob); > > + > > + return 0; > > +} > > amdgpu_dm_plane doesn't seem the right place for it either. Maybe a new > amdgpu_dm_helper.c/h? > > Alternatively would this make sense to live in DRM core as a helper?
A DRM helper sounds better for me. I'll follow this path. Melissa > > Harry > > > +#endif > > + > > static const struct drm_plane_funcs dm_plane_funcs = { > > .update_plane = drm_atomic_helper_update_plane, > > .disable_plane = drm_atomic_helper_disable_plane, > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h > > b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h > > index 930f1572f898..1b05ac4c15f6 100644 > > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h > > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.h > > @@ -51,6 +51,13 @@ int amdgpu_dm_plane_fill_plane_buffer_attributes(struct > > amdgpu_device *adev, > > bool tmz_surface, > > bool force_disable_dcc); > > > > +int amdgpu_dm_replace_property_blob_from_id(struct drm_device *dev, > > + struct drm_property_blob **blob, > > + uint64_t blob_id, > > + ssize_t expected_size, > > + ssize_t expected_elem_size, > > + bool *replaced); > > + > > int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm, > > struct drm_plane *plane, > > unsigned long possible_crtcs, > >
signature.asc
Description: PGP signature