From patchwork Wed May 31 10:10:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Shankar, Uma" X-Patchwork-Id: 9756449 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9D40B602BF for ; Wed, 31 May 2017 09:38:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93F79269E2 for ; Wed, 31 May 2017 09:38:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 88C7528474; Wed, 31 May 2017 09:38:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 2A11F269E2 for ; Wed, 31 May 2017 09:38:29 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8EBA16E1ED; Wed, 31 May 2017 09:37:45 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7EE2F6E1C9; Wed, 31 May 2017 09:37:33 +0000 (UTC) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga104.jf.intel.com with ESMTP; 31 May 2017 02:37:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,422,1491289200"; d="scan'208";a="268419072" Received: from ubuntu-tc11.iind.intel.com ([10.223.26.127]) by fmsmga004.fm.intel.com with ESMTP; 31 May 2017 02:37:31 -0700 From: Uma Shankar To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [RFC 7/9] drm: Implement HDR source metadata set and get property handling Date: Wed, 31 May 2017 15:40:55 +0530 Message-Id: <1496225457-30514-8-git-send-email-uma.shankar@intel.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1496225457-30514-1-git-send-email-uma.shankar@intel.com> References: <1496225457-30514-1-git-send-email-uma.shankar@intel.com> Cc: Uma Shankar X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP HDR source metadata set and get property implemented in this patch. The blob data is received from userspace and saved in connector state, the same is returned as blob in get property call to userspace. Signed-off-by: Uma Shankar --- drivers/gpu/drm/drm_atomic.c | 15 +++++++++++++++ drivers/gpu/drm/drm_atomic_helper.c | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index e163701..c0007c1 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -1140,6 +1140,8 @@ int drm_atomic_connector_set_property(struct drm_connector *connector, { struct drm_device *dev = connector->dev; struct drm_mode_config *config = &dev->mode_config; + bool replaced = false; + int ret; if (property == config->prop_crtc_id) { struct drm_crtc *crtc = drm_crtc_find(dev, val); @@ -1188,6 +1190,14 @@ 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_source_metadata_property) { + ret = drm_atomic_replace_property_blob_from_id(dev, + &state->hdr_source_metadata_blob_ptr, + val, + -1, + &replaced); + state->hdr_metadata_changed |= replaced; + return ret; } else if (property == config->aspect_ratio_property) { state->picture_aspect_ratio = val; } else if (property == connector->scaling_mode_property) { @@ -1210,6 +1220,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->funcs->atomic_print_state) connector->funcs->atomic_print_state(p, state); @@ -1272,6 +1284,9 @@ static void drm_atomic_connector_print_state(struct drm_printer *p, *val = state->picture_aspect_ratio; } else if (property == connector->scaling_mode_property) { *val = state->scaling_mode; + } else if (property == config->hdr_source_metadata_property) { + *val = (state->hdr_source_metadata_blob_ptr) ? + state->hdr_source_metadata_blob_ptr->base.id : 0; } else if (connector->funcs->atomic_get_property) { return connector->funcs->atomic_get_property(connector, state, property, val); diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 93b0221..1406441 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -3436,6 +3436,10 @@ void drm_atomic_helper_connector_reset(struct drm_connector *connector) memcpy(state, connector->state, sizeof(*state)); if (state->crtc) drm_connector_get(connector); + if (state->hdr_source_metadata_blob_ptr) + drm_property_blob_get(state->hdr_source_metadata_blob_ptr); + + state->hdr_metadata_changed = false; } EXPORT_SYMBOL(__drm_atomic_helper_connector_duplicate_state); @@ -3562,6 +3566,8 @@ struct drm_atomic_state * { if (state->crtc) drm_connector_put(state->connector); + if (state->hdr_source_metadata_blob_ptr) + drm_property_blob_put(state->hdr_source_metadata_blob_ptr); } EXPORT_SYMBOL(__drm_atomic_helper_connector_destroy_state);