Den 03.05.2020 10.03, skrev Sam Ravnborg: > Hi Noralf. > > On Wed, Apr 29, 2020 at 02:48:25PM +0200, Noralf Trønnes wrote: >> Add a way for client to check the configuration before comitting. >> >> Signed-off-by: Noralf Trønnes <noralf@xxxxxxxxxxx> > Two small ntis. With these addressed: > Reviewed-by: Sam Ravnborg <sam@xxxxxxxxxxxx> >> --- >> drivers/gpu/drm/drm_client_modeset.c | 35 ++++++++++++++++++++++++---- >> include/drm/drm_client.h | 1 + >> 2 files changed, 32 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_client_modeset.c b/drivers/gpu/drm/drm_client_modeset.c >> index 7443114bd713..177158ff2a40 100644 >> --- a/drivers/gpu/drm/drm_client_modeset.c >> +++ b/drivers/gpu/drm/drm_client_modeset.c >> @@ -966,7 +966,7 @@ bool drm_client_rotation(struct drm_mode_set *modeset, unsigned int *rotation) >> } >> EXPORT_SYMBOL(drm_client_rotation); >> >> -static int drm_client_modeset_commit_atomic(struct drm_client_dev *client, bool active) >> +static int drm_client_modeset_commit_atomic(struct drm_client_dev *client, bool active, bool check) >> { >> struct drm_device *dev = client->dev; >> struct drm_plane *plane; >> @@ -1033,7 +1033,10 @@ static int drm_client_modeset_commit_atomic(struct drm_client_dev *client, bool >> } >> } >> >> - ret = drm_atomic_commit(state); >> + if (check) >> + ret = drm_atomic_check_only(state); >> + else >> + ret = drm_atomic_commit(state); >> >> out_state: >> if (ret == -EDEADLK) >> @@ -1094,6 +1097,30 @@ static int drm_client_modeset_commit_legacy(struct drm_client_dev *client) >> return ret; >> } >> >> +/** >> + * drm_client_modeset_check() - Check CRTC configuration > This part of the comment does not match the description below. > > >> + * @client: DRM client >> + * >> + * Check modeset configuration. >> + * >> + * Returns: >> + * Zero on success or negative error code on failure. >> + */ >> +int drm_client_modeset_check(struct drm_client_dev *client) >> +{ >> + int ret; >> + >> + if (!drm_drv_uses_atomic_modeset(client->dev)) >> + return 0; > If client does not use atomic the check should fail - no? Returning an error here would result in the client not working with non-atomic drivers which AFAIK doesn't have a way to check the state before hand. The client have to commit the state/configuration to find out if it is good. Noralf. > >> + >> + mutex_lock(&client->modeset_mutex); >> + ret = drm_client_modeset_commit_atomic(client, true, true); >> + mutex_unlock(&client->modeset_mutex); >> + >> + return ret; >> +} >> +EXPORT_SYMBOL(drm_client_modeset_check); >> + >> /** >> * drm_client_modeset_commit_locked() - Force commit CRTC configuration >> * @client: DRM client >> @@ -1112,7 +1139,7 @@ int drm_client_modeset_commit_locked(struct drm_client_dev *client) >> >> mutex_lock(&client->modeset_mutex); >> if (drm_drv_uses_atomic_modeset(dev)) >> - ret = drm_client_modeset_commit_atomic(client, true); >> + ret = drm_client_modeset_commit_atomic(client, true, false); >> else >> ret = drm_client_modeset_commit_legacy(client); >> mutex_unlock(&client->modeset_mutex); >> @@ -1188,7 +1215,7 @@ int drm_client_modeset_dpms(struct drm_client_dev *client, int mode) >> >> mutex_lock(&client->modeset_mutex); >> if (drm_drv_uses_atomic_modeset(dev)) >> - ret = drm_client_modeset_commit_atomic(client, mode == DRM_MODE_DPMS_ON); >> + ret = drm_client_modeset_commit_atomic(client, mode == DRM_MODE_DPMS_ON, false); >> else >> drm_client_modeset_dpms_legacy(client, mode); >> mutex_unlock(&client->modeset_mutex); >> diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h >> index 6ef5364d6dfb..b6ffa4863e45 100644 >> --- a/include/drm/drm_client.h >> +++ b/include/drm/drm_client.h >> @@ -164,6 +164,7 @@ int drm_client_modeset_create(struct drm_client_dev *client); >> void drm_client_modeset_free(struct drm_client_dev *client); >> int drm_client_modeset_probe(struct drm_client_dev *client, unsigned int width, unsigned int height); >> bool drm_client_rotation(struct drm_mode_set *modeset, unsigned int *rotation); >> +int drm_client_modeset_check(struct drm_client_dev *client); >> int drm_client_modeset_commit_locked(struct drm_client_dev *client); >> int drm_client_modeset_commit(struct drm_client_dev *client); >> int drm_client_modeset_dpms(struct drm_client_dev *client, int mode); >> -- >> 2.23.0 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@xxxxxxxxxxxxxxxxxxxxx >> https://lists.freedesktop.org/mailman/listinfo/dri-devel