From: Arun R Murthy <arun.r.murthy@intel.com>
To: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Harry Wentland" <harry.wentland@amd.com>,
"Leo Li" <sunpeng.li@amd.com>,
"Rodrigo Siqueira" <siqueira@igalia.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"Jani Nikula" <jani.nikula@linux.intel.com>,
"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
"Tvrtko Ursulin" <tursulin@ursulin.net>,
"Lucas De Marchi" <lucas.demarchi@intel.com>,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
uma.shankar@intel.com, chaitanya.kumar.borah@intel.com,
suraj.kandpal@intel.com
Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
"Imported from f20250128-dpst-v8-0-871b94d777f8"@intel.com,
Arun R Murthy <arun.r.murthy@intel.com>
Subject: [PATCH v9 04/20] drm/colorop: Export function to create pipeline element histogram
Date: Mon, 01 Dec 2025 13:58:46 +0530 [thread overview]
Message-ID: <20251201-dpst-v9-4-e462d55dba65@intel.com> (raw)
In-Reply-To: <20251201-dpst-v9-0-e462d55dba65@intel.com>
Create properties associated for histogram and then export function to
initialize the color pipeline element histogram. The properties include
histogram capabilities, enable and data.
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
drivers/gpu/drm/drm_atomic_uapi.c | 18 +++++++++
drivers/gpu/drm/drm_colorop.c | 84 +++++++++++++++++++++++++++++++++++++++
include/drm/drm_colorop.h | 55 +++++++++++++++++++++++++
3 files changed, 157 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index f2ba8e4c2bf2317880eed9d17f7ba3b113f2c057..3505c00dfc5168de3476fb94bced123f9c886cb2 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -778,6 +778,9 @@ static int drm_atomic_colorop_set_property(struct drm_colorop *colorop,
struct drm_property *property,
uint64_t val)
{
+ u32 ret = 0;
+ bool replaced = false;
+
if (property == colorop->bypass_property) {
state->bypass = val;
} else if (property == colorop->lut1d_interpolation_property) {
@@ -788,6 +791,15 @@ static int drm_atomic_colorop_set_property(struct drm_colorop *colorop,
state->multiplier = val;
} else if (property == colorop->lut3d_interpolation_property) {
colorop->lut3d_interpolation = val;
+ } else if (property == colorop->histogram_enable_property) {
+ ret = drm_property_replace_blob_from_id(colorop->dev,
+ &state->histogram_enable,
+ val,
+ -1,
+ sizeof(struct drm_histogram_config),
+ &replaced);
+ state->histogram_updated |= replaced;
+ return ret;
} else if (property == colorop->data_property) {
return drm_atomic_color_set_data_property(colorop, state,
property, val);
@@ -823,6 +835,12 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
*val = colorop->lut3d_interpolation;
else if (property == colorop->data_property)
*val = (state->data) ? state->data->base.id : 0;
+ else if (property == colorop->histogram_caps_property)
+ *val = (state->histogram_caps) ? state->histogram_caps->base.id : 0;
+ else if (property == colorop->histogram_enable_property)
+ *val = (state->histogram_enable) ? state->histogram_enable->base.id : 0;
+ else if (property == colorop->histogram_data_property)
+ *val = (state->histogram_data) ? state->histogram_data->base.id : 0;
else
return -EINVAL;
diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 96eaaa078281a48dad057e06900b112ebb032631..e3e22db3b911e79979488b1493e72cd9a11ed418 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -461,6 +461,90 @@ int drm_plane_colorop_3dlut_init(struct drm_device *dev, struct drm_colorop *col
}
EXPORT_SYMBOL(drm_plane_colorop_3dlut_init);
+/**
+ * drm_crtc_colorop_histogram_init: create histogram properties
+ *
+ * @colorop: pointer to the color pipeline
+ * @crtc: pointer to the struct drm_crtc.
+ * @caps: pointer to the struct drm_histogram_caps, holds the
+ * histogram hardware capabilities.
+ * @flags: colorop pipeline flags defined in drm_colorop.h
+ *
+ * The property HISTOGRAM_CAPS exposes the hardware capability for
+ * histogram which includes the histogram mode, number of bins etc
+ * The property HISTOGRAM_ENABLE allows user to enable/disable the
+ * histogram feature and also configure the hardware.
+ * Upon KMD enabling by writing to the hardware registers, histogram
+ * is generated. Histogram is composed of 'n' bins with each bin
+ * being an integer(pixel count).
+ * An event HISTOGRAM will be sent to the user. User upon receiving this
+ * event can read the hardware generated histogram using crtc property
+ * DATA.
+ * User can use this histogram data to enhance the image or in shaders.
+ *
+ * Property HISTOGRAM_CAPS is a blob pointing to the struct drm_histogram_caps
+ * Description of the structure is in include/uapi/drm/drm_mode.h
+ * Property HISTOGRAM_ENABLE is a blob pointing to the struct
+ * drm_histogram_config
+ * Description of the structure is in include/uapi/drm/drm_mode.h
+ * Property DATA is a blob pointing to the struct drm_histogram
+ * Description of the structure is in include/uapi/drm/drm_mode.h
+ *
+ * RETURNS:
+ * Zero for success or -errno
+ */
+int drm_crtc_colorop_histogram_init(struct drm_colorop *colorop,
+ struct drm_crtc *crtc,
+ struct drm_histogram_caps *caps,
+ uint32_t flags)
+{
+ struct drm_property *prop;
+ struct drm_property_blob *blob;
+ struct drm_histogram_caps *blob_data;
+ int ret;
+
+ ret = drm_crtc_colorop_init(crtc->dev, colorop, crtc,
+ DRM_COLOROP_HISTOGRAM, flags);
+ if (ret)
+ return ret;
+
+ blob = drm_property_create_blob(crtc->dev,
+ sizeof(struct drm_histogram_caps),
+ NULL);
+ if (IS_ERR(blob))
+ return -1;
+ blob_data = blob->data;
+ blob_data->histogram_mode = caps->histogram_mode;
+ blob_data->bins_count = caps->bins_count;
+
+ /* histogram capabilities */
+ prop = drm_property_create(crtc->dev, DRM_MODE_PROP_ATOMIC |
+ DRM_MODE_PROP_IMMUTABLE | DRM_MODE_PROP_BLOB,
+ "HISTOGRAM_CAPS", blob->base.id);
+ if (!prop)
+ return -ENOMEM;
+ colorop->histogram_caps_property = prop;
+ drm_object_attach_property(&colorop->base, colorop->histogram_caps_property,
+ 0);
+
+ /* histogram enable */
+ prop = drm_property_create(crtc->dev, DRM_MODE_PROP_ATOMIC |
+ DRM_MODE_PROP_BLOB, "HISTOGRAM_ENABLE", 0);
+ if (!prop)
+ return -ENOMEM;
+ colorop->histogram_enable_property = prop;
+ drm_object_attach_property(&colorop->base, colorop->histogram_enable_property,
+ 0);
+
+ /* histogram data/bins */
+ ret = drm_colorop_create_data_prop(crtc->dev, colorop);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+EXPORT_SYMBOL(drm_crtc_colorop_histogram_init);
+
static void __drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop,
struct drm_colorop_state *state)
{
diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
index 33cb6a2446dacf612d5f4dc35674e7518dfa9c58..4d905c13274c13d8d50e1c9e45a87feec72f82ae 100644
--- a/include/drm/drm_colorop.h
+++ b/include/drm/drm_colorop.h
@@ -185,6 +185,37 @@ struct drm_colorop_state {
*/
struct drm_property_blob *data;
+ /**
+ * @histogram_caps:
+ *
+ * The blob points to the structure drm_histogram_caps.
+ * For more info on the elements of the struct drm_histogram_caps
+ * see include/uapi/drm/drm_mode.h
+ */
+ struct drm_property_blob *histogram_caps;
+ /**
+ * @histogram_enable:
+ *
+ * The blob points to the structure drm_histogram_config.
+ * For more information on the elements of struct drm_histogram_config
+ * see include/uapi/drm/drm_mode.h
+ */
+ struct drm_property_blob *histogram_enable;
+ /**
+ * @histogram_data:
+ *
+ * The blob points to the structure drm_histogram.
+ * For more information on the elements of struct drm_histogram
+ * see include/uapi/drm/drm_mode.h
+ */
+ struct drm_property_blob *histogram_data;
+ /**
+ * @histogram_updated:
+ *
+ * Flag to say that the histogram data is updated by the KMD.
+ */
+ bool histogram_updated;
+
/** @state: backpointer to global drm_atomic_state */
struct drm_atomic_state *state;
};
@@ -348,6 +379,26 @@ struct drm_colorop {
*/
struct drm_property *lut3d_interpolation_property;
+ /**
+ * @histogram_caps_property: Optional CRTC property for getting the
+ * histogram hardware capability.
+ */
+ struct drm_property *histogram_caps_property;
+
+ /**
+ * @histogram_enable_property:
+ *
+ * property to enable hardware histogram
+ */
+ struct drm_property *histogram_enable_property;
+
+ /**
+ * @histogram_data_property
+ *
+ * Read only property for histogram data
+ */
+ struct drm_property *histogram_data_property;
+
/**
* @data_property:
*
@@ -408,6 +459,10 @@ int drm_plane_colorop_3dlut_init(struct drm_device *dev, struct drm_colorop *col
uint32_t lut_size,
enum drm_colorop_lut3d_interpolation_type interpolation,
uint32_t flags);
+int drm_crtc_colorop_histogram_init(struct drm_colorop *colorop,
+ struct drm_crtc *crtc,
+ struct drm_histogram_caps *caps,
+ uint32_t flags);
struct drm_colorop_state *
drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop);
--
2.25.1
next prev parent reply other threads:[~2025-12-01 8:29 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 8:28 [PATCH v9 00/20] Display Global Histogram Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 01/20] DO_NOT_REVIEW: plane/crtc color pipeline Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 02/20] drm: Define histogram structures exposed to user Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 03/20] drm: Add new element histogram for colorop Arun R Murthy
2025-12-01 8:28 ` Arun R Murthy [this message]
2025-12-01 8:28 ` [PATCH v9 05/20] drm: Define ImageEnhancemenT LUT structures exposed to user Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 06/20] drm: Add new element Image EnhancemenT for colorop Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 07/20] drm/colorop: Export function to create pipeline element iet lut Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 08/20] drm/i915/histogram: Define registers for histogram Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 09/20] drm/i915/histogram: Add support " Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 10/20] drm/xe: Add histogram support to Xe builds Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 11/20] drm/i915/histogram: histogram interrupt handling Arun R Murthy
2025-12-01 8:28 ` [PATCH DO_NOT_RTEVIEW v9 12/20] Plane Color Pipeline support for Intel platforms Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 13/20] drm/i915/colorop: Add crtc color pipeline for i915 Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 14/20] drm/i915/histogram: Hook i915 histogram with drm histogram Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 15/20] drm/i915/iet: Add support to writing the IET LUT data Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 16/20] drm/i915/colorop: create IET LUT properties Arun R Murthy
2025-12-01 8:28 ` [PATCH v9 17/20] drm/i915/crtc: Hook i915 IET LUT with the drm IET properties Arun R Murthy
2025-12-01 8:29 ` [PATCH v9 18/20] drm/i915/histogram: histogram delay counter doesn't reset Arun R Murthy
2025-12-01 8:29 ` [PATCH v9 19/20] drm/i915/histogram: Histogram changes for Display 20+ Arun R Murthy
2025-12-01 8:29 ` [PATCH v9 20/20] drm/i915/histogram: Enable pipe dithering Arun R Murthy
2025-12-01 10:41 ` ✗ Fi.CI.BUILD: failure for Display Global Histogram (rev14) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251201-dpst-v9-4-e462d55dba65@intel.com \
--to=arun.r.murthy@intel.com \
--cc="Imported from f20250128-dpst-v8-0-871b94d777f8"@intel.com \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=chaitanya.kumar.borah@intel.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=harry.wentland@amd.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=lucas.demarchi@intel.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=rodrigo.vivi@intel.com \
--cc=simona@ffwll.ch \
--cc=siqueira@igalia.com \
--cc=sunpeng.li@amd.com \
--cc=suraj.kandpal@intel.com \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tursulin@ursulin.net \
--cc=tzimmermann@suse.de \
--cc=uma.shankar@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.