[PATCH 18/28] drm/i915/writeback: Add connector atomic check
Dmitry Baryshkov
dmitry.baryshkov at oss.qualcomm.com
Sat Jul 26 12:38:41 UTC 2025
On Fri, Jul 25, 2025 at 10:33:59AM +0530, Suraj Kandpal wrote:
> Add connector helper function for atomic check which sets the
> mode_changed bit and checks if pixel format of fb is valid or not.
>
> Signed-off-by: Suraj Kandpal <suraj.kandpal at intel.com>
> ---
> .../gpu/drm/i915/display/intel_writeback.c | 49 +++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_writeback.c b/drivers/gpu/drm/i915/display/intel_writeback.c
> index 9b2432d86d35..7fb30cc61991 100644
> --- a/drivers/gpu/drm/i915/display/intel_writeback.c
> +++ b/drivers/gpu/drm/i915/display/intel_writeback.c
> @@ -186,6 +186,54 @@ static void intel_writeback_connector_destroy(struct drm_connector *connector)
> kfree(connector);
> }
>
> +static int intel_writeback_check_format(u32 format)
> +{
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(writeback_formats); i++) {
> + if (writeback_formats[i] == format)
> + return 0;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int intel_writeback_atomic_check(struct drm_connector *connector,
> + struct drm_atomic_state *state)
> +{
> + struct drm_connector_state *conn_state =
> + drm_atomic_get_new_connector_state(state, connector);
> + struct drm_crtc_state *crtc_state;
> + struct drm_framebuffer *fb;
> + int ret;
> +
> + /* We return 0 since this is called while disabling writeback encoder */
> + if (!conn_state->crtc)
> + return 0;
> +
> + /* We do not allow a blank commit when using writeback connector */
> + if (!conn_state->writeback_job)
> + return -EINVAL;
> +
> + fb = conn_state->writeback_job->fb;
> + if (!fb)
> + return -EINVAL;
Other atomic_check functions return 0 if there is no writeback_job or no
FB. Please elaborate.
> +
> + crtc_state = drm_atomic_get_new_crtc_state(state, conn_state->crtc);
> + if (fb->width != crtc_state->mode.hdisplay ||
> + fb->height != crtc_state->mode.vdisplay)
> + return -EINVAL;
> +
> + ret = intel_writeback_check_format(fb->format->format);
> + if (ret) {
> + drm_dbg_kms(connector->dev,
> + "Unsupported drm format sent in writeback job\n");
> + return ret;
> + }
Missing a call to drm_atomic_helper_check_wb_connector_state(). Please
use the framework where available.
> +
> + return 0;
> +}
> +
> static struct drm_writeback_connector *
> intel_get_writeback_connector(struct drm_connector *connector)
> {
> @@ -221,6 +269,7 @@ static const struct drm_connector_helper_funcs conn_helper_funcs = {
> .get_writeback_connector = intel_get_writeback_connector,
> .get_modes = intel_writeback_get_modes,
> .mode_valid = intel_writeback_mode_valid,
> + .atomic_check = intel_writeback_atomic_check,
> .prepare_writeback_job = intel_writeback_prepare_job,
> .cleanup_writeback_job = intel_writeback_cleanup_job,
> };
> --
> 2.34.1
>
--
With best wishes
Dmitry
More information about the Intel-xe
mailing list