Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
>-Original Message- >From: Ville Syrjälä [mailto:ville.syrj...@linux.intel.com] >Sent: Tuesday, May 7, 2019 5:40 PM >To: Shankar, Uma >Cc: Jonas Karlman ; intel-gfx@lists.freedesktop.org; dri- >de...@lists.freedesktop.org; seanp...@chromium.org; emil.l.veli...@gmail.com; >dcasta...@chromium.org; Lankhorst, Maarten ; >Syrjala, Ville >Subject: Re: [v8 01/10] drm: Add HDR source metadata property > >On Tue, May 07, 2019 at 01:25:42PM +0300, Ville Syrjälä wrote: >> On Tue, May 07, 2019 at 09:03:45AM +, Shankar, Uma wrote: >> > >> > >> > >-Original Message- >> > >From: Jonas Karlman [mailto:jo...@kwiboo.se] >> > >Sent: Saturday, May 4, 2019 3:48 PM >> > >To: Shankar, Uma ; >> > >intel-gfx@lists.freedesktop.org; dri- de...@lists.freedesktop.org >> > >Cc: dcasta...@chromium.org; emil.l.veli...@gmail.com; >> > >seanp...@chromium.org; Syrjala, Ville ; >> > >Lankhorst, Maarten >> > >Subject: Re: [v8 01/10] drm: Add HDR source metadata property >> > > >> > >On 2019-04-09 18:44, Uma Shankar wrote: >> > >> This patch adds a blob property to get HDR metadata information >> > >> from userspace. This will be send as part of AVI Infoframe to panel. >> > >> >> > >> It also implements get() and set() functions for HDR output >> > >> metadata property.The blob data is received from userspace and >> > >> saved in connector state, the same is returned as blob in get >> > >> property call to userspace. >> > >> >> > >> v2: Rebase and modified the metadata structure elements as per >> > >> Ville's POC changes. >> > >> >> > >> v3: No Change >> > >> >> > >> v4: Addressed Shashank's review comments >> > >> >> > >> v5: Rebase. >> > >> >> > >> v6: Addressed Brian Starkey's review comments, defined new >> > >> structure with header for dynamic metadata scalability. >> > >> Merge get/set property functions for metadata in this patch. >> > >> >> > >> v7: Addressed Jonas Karlman review comments and defined separate >> > >> structure for infoframe to better align with CTA 861.G spec. >> > >> Added Shashank's RB. >> > >> >> > >> Signed-off-by: Uma Shankar >> > >> Reviewed-by: Shashank Sharma >> > >> --- >> > >> drivers/gpu/drm/drm_atomic.c | 2 ++ >> > >> drivers/gpu/drm/drm_atomic_uapi.c | 13 + >> > >> drivers/gpu/drm/drm_connector.c | 6 ++ >> > >> include/drm/drm_connector.h | 11 +++ >> > >> include/drm/drm_mode_config.h | 6 ++ >> > >> include/linux/hdmi.h | 10 ++ >> > >> include/uapi/drm/drm_mode.h | 39 >> > >+++ >> > >> 7 files changed, 87 insertions(+) >> > >> >> > >> diff --git a/drivers/gpu/drm/drm_atomic.c >> > >> b/drivers/gpu/drm/drm_atomic.c index 5eb4013..8b9c126 100644 >> > >> --- a/drivers/gpu/drm/drm_atomic.c >> > >> +++ b/drivers/gpu/drm/drm_atomic.c >> > >> @@ -881,6 +881,8 @@ static void >> > >> drm_atomic_connector_print_state(struct drm_printer *p, >> > >> >> > >> drm_printf(p, "connector[%u]: %s\n", connector->base.id, >> > >>connector- name); >> > >> drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : >> > >> "(null)"); >> > >> + drm_printf(p, "\thdr_metadata_changed=%d\n", >> > >> + state->hdr_metadata_changed); >> > >> >> > >> if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) >> > >> if (state->writeback_job && state->writeback_job->fb) >> > >> diff >> > >> --git a/drivers/gpu/drm/drm_atomic_uapi.c >> > >> b/drivers/gpu/drm/drm_atomic_uapi.c >> > >> index ea797d4..6d0d161 100644 >> > >> --- a/drivers/gpu/drm/drm_atomic_uapi.c >> > >> +++ b/drivers/gpu/drm/drm_atomic_uapi.c >> > >> @@ -673,6 +673,8 @@ static int >> > >> drm_atomic_connector_set_property(struct drm_connector *connector, { >> > >> struct drm_device *dev = connector->dev; >> > >> struct drm_mode_config *config = >mode_config; >> > >> + bool replaced = false; >> > >> + int ret; >> > >> >> > >> if (property == config->prop_crtc_id) { >> > >> struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); >> > >> @@ >> > >> -721,6 >> > >> +723,14 @@ static int drm_atomic_connector_set_property(struct >> > >> +drm_connector >> > >*connector, >> > >> */ >> > >> if (state->link_status != DRM_LINK_STATUS_GOOD) >> > >> state->link_status = val; >> > >> + } else if (property == config->hdr_output_metadata_property) { >> > >> + ret = drm_atomic_replace_property_blob_from_id(dev, >> > >> + >hdr_output_metadata_blob_ptr, >> > >> + val, >> > >> + -1, sizeof(struct hdr_output_metadata), >> > >> + ); >> > >> + state->hdr_metadata_changed |= replaced; >> > >> + return ret; >> > >> } else if (property == config->aspect_ratio_property) { >> > >>
Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
On Tue, May 07, 2019 at 01:25:42PM +0300, Ville Syrjälä wrote: > On Tue, May 07, 2019 at 09:03:45AM +, Shankar, Uma wrote: > > > > > > >-Original Message- > > >From: Jonas Karlman [mailto:jo...@kwiboo.se] > > >Sent: Saturday, May 4, 2019 3:48 PM > > >To: Shankar, Uma ; intel-gfx@lists.freedesktop.org; > > >dri- > > >de...@lists.freedesktop.org > > >Cc: dcasta...@chromium.org; emil.l.veli...@gmail.com; > > >seanp...@chromium.org; > > >Syrjala, Ville ; Lankhorst, Maarten > > > > > >Subject: Re: [v8 01/10] drm: Add HDR source metadata property > > > > > >On 2019-04-09 18:44, Uma Shankar wrote: > > >> This patch adds a blob property to get HDR metadata information from > > >> userspace. This will be send as part of AVI Infoframe to panel. > > >> > > >> It also implements get() and set() functions for HDR output metadata > > >> property.The blob data is received from userspace and saved in > > >> connector state, the same is returned as blob in get property call to > > >> userspace. > > >> > > >> v2: Rebase and modified the metadata structure elements as per Ville's > > >> POC changes. > > >> > > >> v3: No Change > > >> > > >> v4: Addressed Shashank's review comments > > >> > > >> v5: Rebase. > > >> > > >> v6: Addressed Brian Starkey's review comments, defined new structure > > >> with header for dynamic metadata scalability. > > >> Merge get/set property functions for metadata in this patch. > > >> > > >> v7: Addressed Jonas Karlman review comments and defined separate > > >> structure for infoframe to better align with CTA 861.G spec. Added > > >> Shashank's RB. > > >> > > >> Signed-off-by: Uma Shankar > > >> Reviewed-by: Shashank Sharma > > >> --- > > >> drivers/gpu/drm/drm_atomic.c | 2 ++ > > >> drivers/gpu/drm/drm_atomic_uapi.c | 13 + > > >> drivers/gpu/drm/drm_connector.c | 6 ++ > > >> include/drm/drm_connector.h | 11 +++ > > >> include/drm/drm_mode_config.h | 6 ++ > > >> include/linux/hdmi.h | 10 ++ > > >> include/uapi/drm/drm_mode.h | 39 > > >+++ > > >> 7 files changed, 87 insertions(+) > > >> > > >> diff --git a/drivers/gpu/drm/drm_atomic.c > > >> b/drivers/gpu/drm/drm_atomic.c index 5eb4013..8b9c126 100644 > > >> --- a/drivers/gpu/drm/drm_atomic.c > > >> +++ b/drivers/gpu/drm/drm_atomic.c > > >> @@ -881,6 +881,8 @@ static void > > >> drm_atomic_connector_print_state(struct drm_printer *p, > > >> > > >> drm_printf(p, "connector[%u]: %s\n", connector->base.id, > > >> connector- > > >>name); > > >> drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : > > >> "(null)"); > > >> +drm_printf(p, "\thdr_metadata_changed=%d\n", > > >> + state->hdr_metadata_changed); > > >> > > >> if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) > > >> if (state->writeback_job && state->writeback_job->fb) > > >> diff --git > > >> a/drivers/gpu/drm/drm_atomic_uapi.c > > >> b/drivers/gpu/drm/drm_atomic_uapi.c > > >> index ea797d4..6d0d161 100644 > > >> --- a/drivers/gpu/drm/drm_atomic_uapi.c > > >> +++ b/drivers/gpu/drm/drm_atomic_uapi.c > > >> @@ -673,6 +673,8 @@ static int > > >> drm_atomic_connector_set_property(struct drm_connector *connector, { > > >> struct drm_device *dev = connector->dev; > > >> struct drm_mode_config *config = >mode_config; > > >> +bool replaced = false; > > >> +int ret; > > >> > > >> if (property == config->prop_crtc_id) { > > >> struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); > > >> @@ -721,6 > > >> +723,14 @@ static int drm_atomic_connector_set_property(struct > > >> drm_connector > > >*connector, > > >> */ > > >> if (state->link_status != DRM_LINK_STATUS_GOOD) > > >> state->link_status = val; > > >> +} else if (property == config->hdr_output_metadata_property) { > > >> +ret = drm_atomic_replace_property_blob_from_id(dev, > > >> +>hdr_output_metadata_blob_ptr, > > >> +val, > > >> +-1, sizeof(struct hdr_output_metadata), > > >> +); > > >> +state->hdr_metadata_changed |= replaced; > > >> +return ret; > > >> } else if (property == config->aspect_ratio_property) { > > >> state->picture_aspect_ratio = val; > > >> } else if (property == config->content_type_property) { @@ > > >> -807,6 > > >> +817,9 @@ static int drm_atomic_connector_set_property(struct > > >> drm_connector > > >*connector, > > >> *val = state->colorspace; > > >> } else if (property == connector->scaling_mode_property) { > > >> *val = state->scaling_mode; > > >> +} else if (property ==
Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
On Tue, Apr 09, 2019 at 10:14:35PM +0530, Uma Shankar wrote: > This patch adds a blob property to get HDR metadata > information from userspace. This will be send as part > of AVI Infoframe to panel. > > It also implements get() and set() functions for HDR output > metadata property.The blob data is received from userspace and > saved in connector state, the same is returned as blob in get > property call to userspace. > > v2: Rebase and modified the metadata structure elements > as per Ville's POC changes. > > v3: No Change > > v4: Addressed Shashank's review comments > > v5: Rebase. > > v6: Addressed Brian Starkey's review comments, defined > new structure with header for dynamic metadata scalability. > Merge get/set property functions for metadata in this patch. > > v7: Addressed Jonas Karlman review comments and defined separate > structure for infoframe to better align with CTA 861.G spec. Added > Shashank's RB. > > Signed-off-by: Uma Shankar > Reviewed-by: Shashank Sharma > --- > drivers/gpu/drm/drm_atomic.c | 2 ++ > drivers/gpu/drm/drm_atomic_uapi.c | 13 + > drivers/gpu/drm/drm_connector.c | 6 ++ > include/drm/drm_connector.h | 11 +++ > include/drm/drm_mode_config.h | 6 ++ > include/linux/hdmi.h | 10 ++ > include/uapi/drm/drm_mode.h | 39 > +++ > 7 files changed, 87 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index 5eb4013..8b9c126 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -881,6 +881,8 @@ static void drm_atomic_connector_print_state(struct > drm_printer *p, > > drm_printf(p, "connector[%u]: %s\n", connector->base.id, > connector->name); > drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : > "(null)"); > + drm_printf(p, "\thdr_metadata_changed=%d\n", > +state->hdr_metadata_changed); Is that flag actually useful? > > if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) > if (state->writeback_job && state->writeback_job->fb) > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c > b/drivers/gpu/drm/drm_atomic_uapi.c > index ea797d4..6d0d161 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -673,6 +673,8 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, > { > struct drm_device *dev = connector->dev; > struct drm_mode_config *config = >mode_config; > + bool replaced = false; > + int ret; > > if (property == config->prop_crtc_id) { > struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); > @@ -721,6 +723,14 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, >*/ > if (state->link_status != DRM_LINK_STATUS_GOOD) > state->link_status = val; > + } else if (property == config->hdr_output_metadata_property) { > + ret = drm_atomic_replace_property_blob_from_id(dev, > + >hdr_output_metadata_blob_ptr, > + val, > + -1, sizeof(struct hdr_output_metadata), > + ); > + state->hdr_metadata_changed |= replaced; > + return ret; > } else if (property == config->aspect_ratio_property) { > state->picture_aspect_ratio = val; > } else if (property == config->content_type_property) { > @@ -807,6 +817,9 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, > *val = state->colorspace; > } else if (property == connector->scaling_mode_property) { > *val = state->scaling_mode; > + } else if (property == config->hdr_output_metadata_property) { > + *val = (state->hdr_output_metadata_blob_ptr) ? Pointless parens. > + state->hdr_output_metadata_blob_ptr->base.id : 0; > } else if (property == connector->content_protection_property) { > *val = state->content_protection; > } else if (property == config->writeback_fb_id_property) { > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 2355124..0bdae90 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1058,6 +1058,12 @@ int drm_connector_create_standard_properties(struct > drm_device *dev) > return -ENOMEM; > dev->mode_config.non_desktop_property = prop; > > + prop = drm_property_create(dev, DRM_MODE_PROP_BLOB, > +"HDR_OUTPUT_METADATA", 0); > + if (!prop) > + return -ENOMEM; > + dev->mode_config.hdr_output_metadata_property = prop; > + > return 0; > } > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h >
Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
On Tue, May 07, 2019 at 09:03:45AM +, Shankar, Uma wrote: > > > >-Original Message- > >From: Jonas Karlman [mailto:jo...@kwiboo.se] > >Sent: Saturday, May 4, 2019 3:48 PM > >To: Shankar, Uma ; intel-gfx@lists.freedesktop.org; > >dri- > >de...@lists.freedesktop.org > >Cc: dcasta...@chromium.org; emil.l.veli...@gmail.com; seanp...@chromium.org; > >Syrjala, Ville ; Lankhorst, Maarten > > > >Subject: Re: [v8 01/10] drm: Add HDR source metadata property > > > >On 2019-04-09 18:44, Uma Shankar wrote: > >> This patch adds a blob property to get HDR metadata information from > >> userspace. This will be send as part of AVI Infoframe to panel. > >> > >> It also implements get() and set() functions for HDR output metadata > >> property.The blob data is received from userspace and saved in > >> connector state, the same is returned as blob in get property call to > >> userspace. > >> > >> v2: Rebase and modified the metadata structure elements as per Ville's > >> POC changes. > >> > >> v3: No Change > >> > >> v4: Addressed Shashank's review comments > >> > >> v5: Rebase. > >> > >> v6: Addressed Brian Starkey's review comments, defined new structure > >> with header for dynamic metadata scalability. > >> Merge get/set property functions for metadata in this patch. > >> > >> v7: Addressed Jonas Karlman review comments and defined separate > >> structure for infoframe to better align with CTA 861.G spec. Added > >> Shashank's RB. > >> > >> Signed-off-by: Uma Shankar > >> Reviewed-by: Shashank Sharma > >> --- > >> drivers/gpu/drm/drm_atomic.c | 2 ++ > >> drivers/gpu/drm/drm_atomic_uapi.c | 13 + > >> drivers/gpu/drm/drm_connector.c | 6 ++ > >> include/drm/drm_connector.h | 11 +++ > >> include/drm/drm_mode_config.h | 6 ++ > >> include/linux/hdmi.h | 10 ++ > >> include/uapi/drm/drm_mode.h | 39 > >+++ > >> 7 files changed, 87 insertions(+) > >> > >> diff --git a/drivers/gpu/drm/drm_atomic.c > >> b/drivers/gpu/drm/drm_atomic.c index 5eb4013..8b9c126 100644 > >> --- a/drivers/gpu/drm/drm_atomic.c > >> +++ b/drivers/gpu/drm/drm_atomic.c > >> @@ -881,6 +881,8 @@ static void > >> drm_atomic_connector_print_state(struct drm_printer *p, > >> > >>drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector- > >>name); > >>drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : > >> "(null)"); > >> + drm_printf(p, "\thdr_metadata_changed=%d\n", > >> + state->hdr_metadata_changed); > >> > >>if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) > >>if (state->writeback_job && state->writeback_job->fb) diff --git > >> a/drivers/gpu/drm/drm_atomic_uapi.c > >> b/drivers/gpu/drm/drm_atomic_uapi.c > >> index ea797d4..6d0d161 100644 > >> --- a/drivers/gpu/drm/drm_atomic_uapi.c > >> +++ b/drivers/gpu/drm/drm_atomic_uapi.c > >> @@ -673,6 +673,8 @@ static int > >> drm_atomic_connector_set_property(struct drm_connector *connector, { > >>struct drm_device *dev = connector->dev; > >>struct drm_mode_config *config = >mode_config; > >> + bool replaced = false; > >> + int ret; > >> > >>if (property == config->prop_crtc_id) { > >>struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); @@ -721,6 > >> +723,14 @@ static int drm_atomic_connector_set_property(struct > >> drm_connector > >*connector, > >> */ > >>if (state->link_status != DRM_LINK_STATUS_GOOD) > >>state->link_status = val; > >> + } else if (property == config->hdr_output_metadata_property) { > >> + ret = drm_atomic_replace_property_blob_from_id(dev, > >> + >hdr_output_metadata_blob_ptr, > >> + val, > >> + -1, sizeof(struct hdr_output_metadata), > >> + ); > >> + state->hdr_metadata_changed |= replaced; > >> + return ret; > >>} else if (property == config->aspect_ratio_property) { > >>state->picture_aspect_ratio = val; > >>} else if (property == config->content_type_property) { @@ -807,6 > >> +817,9 @@ static int drm_atomic_connector_set_property(struct drm_connector > >*connector, > >>*val = state->colorspace; > >>} else if (property == connector->scaling_mode_property) { > >>*val = state->scaling_mode; > >> + } else if (property == config->hdr_output_metadata_property) { > >> + *val = (state->hdr_output_metadata_blob_ptr) ? > >> + state->hdr_output_metadata_blob_ptr->base.id : 0; > >>} else if (property == connector->content_protection_property) { > >>*val = state->content_protection; > >>} else if (property == config->writeback_fb_id_property) { diff > >> --git a/drivers/gpu/drm/drm_connector.c > >> b/drivers/gpu/drm/drm_connector.c index 2355124..0bdae90 100644 > >> --- a/drivers/gpu/drm/drm_connector.c > >>
Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
>-Original Message- >From: Jonas Karlman [mailto:jo...@kwiboo.se] >Sent: Saturday, May 4, 2019 3:48 PM >To: Shankar, Uma ; intel-gfx@lists.freedesktop.org; dri- >de...@lists.freedesktop.org >Cc: dcasta...@chromium.org; emil.l.veli...@gmail.com; seanp...@chromium.org; >Syrjala, Ville ; Lankhorst, Maarten > >Subject: Re: [v8 01/10] drm: Add HDR source metadata property > >On 2019-04-09 18:44, Uma Shankar wrote: >> This patch adds a blob property to get HDR metadata information from >> userspace. This will be send as part of AVI Infoframe to panel. >> >> It also implements get() and set() functions for HDR output metadata >> property.The blob data is received from userspace and saved in >> connector state, the same is returned as blob in get property call to >> userspace. >> >> v2: Rebase and modified the metadata structure elements as per Ville's >> POC changes. >> >> v3: No Change >> >> v4: Addressed Shashank's review comments >> >> v5: Rebase. >> >> v6: Addressed Brian Starkey's review comments, defined new structure >> with header for dynamic metadata scalability. >> Merge get/set property functions for metadata in this patch. >> >> v7: Addressed Jonas Karlman review comments and defined separate >> structure for infoframe to better align with CTA 861.G spec. Added >> Shashank's RB. >> >> Signed-off-by: Uma Shankar >> Reviewed-by: Shashank Sharma >> --- >> drivers/gpu/drm/drm_atomic.c | 2 ++ >> drivers/gpu/drm/drm_atomic_uapi.c | 13 + >> drivers/gpu/drm/drm_connector.c | 6 ++ >> include/drm/drm_connector.h | 11 +++ >> include/drm/drm_mode_config.h | 6 ++ >> include/linux/hdmi.h | 10 ++ >> include/uapi/drm/drm_mode.h | 39 >+++ >> 7 files changed, 87 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_atomic.c >> b/drivers/gpu/drm/drm_atomic.c index 5eb4013..8b9c126 100644 >> --- a/drivers/gpu/drm/drm_atomic.c >> +++ b/drivers/gpu/drm/drm_atomic.c >> @@ -881,6 +881,8 @@ static void >> drm_atomic_connector_print_state(struct drm_printer *p, >> >> drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector- >>name); >> drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : >> "(null)"); >> +drm_printf(p, "\thdr_metadata_changed=%d\n", >> + state->hdr_metadata_changed); >> >> if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) >> if (state->writeback_job && state->writeback_job->fb) diff --git >> a/drivers/gpu/drm/drm_atomic_uapi.c >> b/drivers/gpu/drm/drm_atomic_uapi.c >> index ea797d4..6d0d161 100644 >> --- a/drivers/gpu/drm/drm_atomic_uapi.c >> +++ b/drivers/gpu/drm/drm_atomic_uapi.c >> @@ -673,6 +673,8 @@ static int >> drm_atomic_connector_set_property(struct drm_connector *connector, { >> struct drm_device *dev = connector->dev; >> struct drm_mode_config *config = >mode_config; >> +bool replaced = false; >> +int ret; >> >> if (property == config->prop_crtc_id) { >> struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); @@ -721,6 >> +723,14 @@ static int drm_atomic_connector_set_property(struct drm_connector >*connector, >> */ >> if (state->link_status != DRM_LINK_STATUS_GOOD) >> state->link_status = val; >> +} else if (property == config->hdr_output_metadata_property) { >> +ret = drm_atomic_replace_property_blob_from_id(dev, >> +>hdr_output_metadata_blob_ptr, >> +val, >> +-1, sizeof(struct hdr_output_metadata), >> +); >> +state->hdr_metadata_changed |= replaced; >> +return ret; >> } else if (property == config->aspect_ratio_property) { >> state->picture_aspect_ratio = val; >> } else if (property == config->content_type_property) { @@ -807,6 >> +817,9 @@ static int drm_atomic_connector_set_property(struct drm_connector >*connector, >> *val = state->colorspace; >> } else if (property == connector->scaling_mode_property) { >> *val = state->scaling_mode; >> +} else if (property == config->hdr_output_metadata_property) { >> +*val = (state->hdr_output_metadata_blob_ptr) ? >> +state->hdr_output_metadata_blob_ptr->base.id : 0; >> } else if (property == connector->content_protection_property) { >> *val = state->content_protection; >> } else if (property == config->writeback_fb_id_property) { diff >> --git a/drivers/gpu/drm/drm_connector.c >> b/drivers/gpu/drm/drm_connector.c index 2355124..0bdae90 100644 >> --- a/drivers/gpu/drm/drm_connector.c >> +++ b/drivers/gpu/drm/drm_connector.c >> @@ -1058,6 +1058,12 @@ int drm_connector_create_standard_properties(struct >drm_device *dev) >> return -ENOMEM; >> dev->mode_config.non_desktop_property = prop; >> >>
Re: [Intel-gfx] [v8 01/10] drm: Add HDR source metadata property
On 2019-04-09 18:44, Uma Shankar wrote: > This patch adds a blob property to get HDR metadata > information from userspace. This will be send as part > of AVI Infoframe to panel. > > It also implements get() and set() functions for HDR output > metadata property.The blob data is received from userspace and > saved in connector state, the same is returned as blob in get > property call to userspace. > > v2: Rebase and modified the metadata structure elements > as per Ville's POC changes. > > v3: No Change > > v4: Addressed Shashank's review comments > > v5: Rebase. > > v6: Addressed Brian Starkey's review comments, defined > new structure with header for dynamic metadata scalability. > Merge get/set property functions for metadata in this patch. > > v7: Addressed Jonas Karlman review comments and defined separate > structure for infoframe to better align with CTA 861.G spec. Added > Shashank's RB. > > Signed-off-by: Uma Shankar > Reviewed-by: Shashank Sharma > --- > drivers/gpu/drm/drm_atomic.c | 2 ++ > drivers/gpu/drm/drm_atomic_uapi.c | 13 + > drivers/gpu/drm/drm_connector.c | 6 ++ > include/drm/drm_connector.h | 11 +++ > include/drm/drm_mode_config.h | 6 ++ > include/linux/hdmi.h | 10 ++ > include/uapi/drm/drm_mode.h | 39 > +++ > 7 files changed, 87 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index 5eb4013..8b9c126 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -881,6 +881,8 @@ static void drm_atomic_connector_print_state(struct > drm_printer *p, > > drm_printf(p, "connector[%u]: %s\n", connector->base.id, > connector->name); > drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : > "(null)"); > + drm_printf(p, "\thdr_metadata_changed=%d\n", > +state->hdr_metadata_changed); > > if (connector->connector_type == DRM_MODE_CONNECTOR_WRITEBACK) > if (state->writeback_job && state->writeback_job->fb) > diff --git a/drivers/gpu/drm/drm_atomic_uapi.c > b/drivers/gpu/drm/drm_atomic_uapi.c > index ea797d4..6d0d161 100644 > --- a/drivers/gpu/drm/drm_atomic_uapi.c > +++ b/drivers/gpu/drm/drm_atomic_uapi.c > @@ -673,6 +673,8 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, > { > struct drm_device *dev = connector->dev; > struct drm_mode_config *config = >mode_config; > + bool replaced = false; > + int ret; > > if (property == config->prop_crtc_id) { > struct drm_crtc *crtc = drm_crtc_find(dev, NULL, val); > @@ -721,6 +723,14 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, >*/ > if (state->link_status != DRM_LINK_STATUS_GOOD) > state->link_status = val; > + } else if (property == config->hdr_output_metadata_property) { > + ret = drm_atomic_replace_property_blob_from_id(dev, > + >hdr_output_metadata_blob_ptr, > + val, > + -1, sizeof(struct hdr_output_metadata), > + ); > + state->hdr_metadata_changed |= replaced; > + return ret; > } else if (property == config->aspect_ratio_property) { > state->picture_aspect_ratio = val; > } else if (property == config->content_type_property) { > @@ -807,6 +817,9 @@ static int drm_atomic_connector_set_property(struct > drm_connector *connector, > *val = state->colorspace; > } else if (property == connector->scaling_mode_property) { > *val = state->scaling_mode; > + } else if (property == config->hdr_output_metadata_property) { > + *val = (state->hdr_output_metadata_blob_ptr) ? > + state->hdr_output_metadata_blob_ptr->base.id : 0; > } else if (property == connector->content_protection_property) { > *val = state->content_protection; > } else if (property == config->writeback_fb_id_property) { > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 2355124..0bdae90 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -1058,6 +1058,12 @@ int drm_connector_create_standard_properties(struct > drm_device *dev) > return -ENOMEM; > dev->mode_config.non_desktop_property = prop; > > + prop = drm_property_create(dev, DRM_MODE_PROP_BLOB, > +"HDR_OUTPUT_METADATA", 0); > + if (!prop) > + return -ENOMEM; > + dev->mode_config.hdr_output_metadata_property = prop; > + > return 0; > } > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 02a1312..5343f60 100644 > --- a/include/drm/drm_connector.h > +++