On Wed, Sep 30, 2026 at 08:41:57PM +0800, Xilin Wu wrote: > Expose HDR_OUTPUT_METADATA and validate and pack it during atomic check. > Program Generic2 from the checked bridge state on every stream enable. > Reuse the DRM metadata conversion and infoframe packing helpers, omit > the HDMI checksum when constructing the DP SDP, and zero reserved bytes. > > Require 10 bpc for HDR transfer functions and reject insufficient > bandwidth after link training instead of silently reducing color depth. > Revalidate sink HDR capabilities after powering up an eDP panel, using > the stream enable failure path if the requested output is unsupported. > > Force a modeset for metadata changes and include metadata enable and > disable in peripheral flush requests. Keep HDR streams out of PSR and > clear Generic2 enable state when disabling the stream. Preserve the > software metadata across teardown so that every stream rebuild restores > the checked packets. > > Give checked HDR modesets precedence over SDR video-pattern tests. Reject > new test requests with NAK while HDR is configured and return -EBUSY from > the debugfs test control. Clear the test override under plugged_lock when > applying HDR so that a request arriving after atomic check cannot replace > the checked output depth. Keep pending test colorimetry from overriding > HDR signalling. Atomic checks leave the running test state untouched. > > Assisted-by: LLM > Signed-off-by: Xilin Wu <[email protected]> > --- > drivers/gpu/drm/msm/Kconfig | 1 + > drivers/gpu/drm/msm/dp/dp_ctrl.c | 9 ++++-- > drivers/gpu/drm/msm/dp/dp_display.c | 39 +++++++++++++++++++++--- > drivers/gpu/drm/msm/dp/dp_drm.c | 4 ++- > drivers/gpu/drm/msm/dp/dp_drm.h | 2 ++ > drivers/gpu/drm/msm/dp/dp_panel.c | 33 ++++++++++++++++++++ > drivers/gpu/drm/msm/dp/dp_panel.h | 3 ++ > drivers/gpu/drm/msm/dp/dp_utils.c | 61 > ++++++++++++++++++++++++++++++++++--- > drivers/gpu/drm/msm/dp/dp_utils.h | 5 ++- > 9 files changed, 145 insertions(+), 12 deletions(-) > > @@ -717,17 +727,25 @@ int msm_dp_display_atomic_check(struct msm_dp > *msm_dp_display, > > guard(mutex)(&dp->plugged_lock); > > + ret = msm_dp_utils_pack_hdr_sdp(conn_state, &state->hdr_sdp); > + if (ret) > + return ret; > + > + state->hdr_enabled = !!conn_state->hdr_output_metadata;
This should be done in atomic_check. Also please make sure that we don't copy data from the state to the long-term structures. I'd rather pass state pointer around. > bpp = msm_dp_utils_select_bpp(info->bpc, conn_state->max_requested_bpc, > clock, dp->panel->link_caps_valid ? > dp->panel->link_info.rate : 0, > - dp->panel->link_info.num_lanes); > + dp->panel->link_info.num_lanes, > + state->hdr_enabled && > state->hdr_sdp.db[2] != > + HDMI_EOTF_TRADITIONAL_GAMMA_SDR); > if (bpp < 0) > return bpp; > > state->bpp = bpp; > state->colorspace = conn_state->colorspace; > state->vsc_enabled = drm_mode_is_420_only(info, mode) || > - state->colorspace != DRM_MODE_COLORIMETRY_DEFAULT; > + state->colorspace != DRM_MODE_COLORIMETRY_DEFAULT > || > + state->hdr_enabled; > if (!state->vsc_enabled) > return 0; > -- With best wishes Dmitry
