Sorry for the additional email. I see that the colorspace is ignored if the connector is not HDMI, eDP or Display Port. Should we add some kind of validation?
On Sat, Oct 18, 2025 at 04:01:16AM +0200, Louis Chauvet wrote: > To emulate some HDR features of displays, it is required to expose some > properties on HDMI, eDP and DP connectors. > > Signed-off-by: Louis Chauvet <[email protected]> > --- > drivers/gpu/drm/vkms/tests/vkms_config_test.c | 3 +++ > drivers/gpu/drm/vkms/vkms_config.c | 1 + > drivers/gpu/drm/vkms/vkms_config.h | 26 ++++++++++++++++++++++++++ > drivers/gpu/drm/vkms/vkms_connector.c | 15 +++++++++++++++ > 4 files changed, 45 insertions(+) > > diff --git a/drivers/gpu/drm/vkms/tests/vkms_config_test.c > b/drivers/gpu/drm/vkms/tests/vkms_config_test.c > index 8633210342a4..a89ccd75060d 100644 > --- a/drivers/gpu/drm/vkms/tests/vkms_config_test.c > +++ b/drivers/gpu/drm/vkms/tests/vkms_config_test.c > @@ -187,6 +187,9 @@ static void vkms_config_test_default_config(struct kunit > *test) > vkms_config_for_each_connector(config, connector_cfg) { > KUNIT_EXPECT_EQ(test, > vkms_config_connector_get_type(connector_cfg), > DRM_MODE_CONNECTOR_VIRTUAL); > + KUNIT_EXPECT_EQ(test, > + > vkms_config_connector_get_supported_colorspaces(connector_cfg), > + 0); > } > > KUNIT_EXPECT_TRUE(test, vkms_config_is_valid(config)); > diff --git a/drivers/gpu/drm/vkms/vkms_config.c > b/drivers/gpu/drm/vkms/vkms_config.c > index 20750c9f6d08..56e2082b91c9 100644 > --- a/drivers/gpu/drm/vkms/vkms_config.c > +++ b/drivers/gpu/drm/vkms/vkms_config.c > @@ -772,6 +772,7 @@ struct vkms_config_connector > *vkms_config_create_connector(struct vkms_config *c > connector_cfg->config = config; > connector_cfg->status = connector_status_connected; > vkms_config_connector_set_type(connector_cfg, > DRM_MODE_CONNECTOR_VIRTUAL); > + vkms_config_connector_set_supported_colorspaces(connector_cfg, 0); > xa_init_flags(&connector_cfg->possible_encoders, XA_FLAGS_ALLOC); > > list_add_tail(&connector_cfg->link, &config->connectors); > diff --git a/drivers/gpu/drm/vkms/vkms_config.h > b/drivers/gpu/drm/vkms/vkms_config.h > index 36d289a010f6..ec614c2d4a30 100644 > --- a/drivers/gpu/drm/vkms/vkms_config.h > +++ b/drivers/gpu/drm/vkms/vkms_config.h > @@ -141,6 +141,7 @@ struct vkms_config_connector { > > int type; > enum drm_connector_status status; > + u32 supported_colorspaces; > struct xarray possible_encoders; > > /* Internal usage */ > @@ -239,6 +240,31 @@ struct vkms_config *vkms_config_default_create(bool > enable_cursor, > */ > void vkms_config_destroy(struct vkms_config *config); > > +/** > + * vkms_config_connector_set_supported_colorspaces() - Set the supported > colorspaces for a connector > + * @connector_cfg: Connector configuration to modify > + * @supported_colorspaces: Bitmask of supported colorspaces > (DRM_COLOR_YCBCR_*) > + */ > +static inline void > +vkms_config_connector_set_supported_colorspaces(struct vkms_config_connector > *connector_cfg, > + u32 supported_colorspaces) > +{ > + connector_cfg->supported_colorspaces = supported_colorspaces; > +} > + > +/** > + * vkms_config_connector_get_supported_colorspaces() - Get the supported > colorspaces for a connector > + * @connector_cfg: Connector configuration to query > + * > + * Returns: > + * Bitmask of supported colorspaces (DRM_COLOR_YCBCR_*) > + */ > +static inline u32 > +vkms_config_connector_get_supported_colorspaces(struct vkms_config_connector > *connector_cfg) > +{ > + return connector_cfg->supported_colorspaces; > +} > + > /** > * vkms_config_get_device_name() - Return the name of the device > * @config: Configuration to get the device name from > diff --git a/drivers/gpu/drm/vkms/vkms_connector.c > b/drivers/gpu/drm/vkms/vkms_connector.c > index 5a87dc2d4c63..cc59d13c2d22 100644 > --- a/drivers/gpu/drm/vkms/vkms_connector.c > +++ b/drivers/gpu/drm/vkms/vkms_connector.c > @@ -84,6 +84,21 @@ struct vkms_connector *vkms_connector_init(struct > vkms_device *vkmsdev, > if (ret) > return ERR_PTR(ret); > > + if (vkms_config_connector_get_supported_colorspaces(connector_cfg)) { > + if (connector_cfg->type == DRM_MODE_CONNECTOR_HDMIA) { > + > drm_mode_create_hdmi_colorspace_property(&connector->base, > + > vkms_config_connector_get_supported_colorspaces(connector_cfg)); > + > drm_connector_attach_hdr_output_metadata_property(&connector->base); > + > drm_connector_attach_colorspace_property(&connector->base); > + } else if (connector_cfg->type == > DRM_MODE_CONNECTOR_DisplayPort || > + connector_cfg->type == DRM_MODE_CONNECTOR_eDP) { > + drm_mode_create_dp_colorspace_property(&connector->base, > + > vkms_config_connector_get_supported_colorspaces(connector_cfg)); > + > drm_connector_attach_hdr_output_metadata_property(&connector->base); > + > drm_connector_attach_colorspace_property(&connector->base); > + } > + } > + > drm_connector_helper_add(&connector->base, &vkms_conn_helper_funcs); > > return connector; > > -- > 2.51.0 >
