From: Arun R Murthy <arun.r.murthy@intel.com>
To: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Subject: [PATCHv6 7/8] drm/i915/histogram: Histogram changes for Display 20+
Date: Thu, 21 Nov 2024 17:56:02 +0530 [thread overview]
Message-ID: <20241121122603.736267-8-arun.r.murthy@intel.com> (raw)
In-Reply-To: <20241121122603.736267-1-arun.r.murthy@intel.com>
In Display 20+, new registers are added for setting index, reading
histogram and writing the IET.
v2: Removed duplicate code (Jani)
v3: Moved histogram core changes to earlier patches (Jani/Suraj)
v4: Rebased after addressing comments on patch 1
v5: Added the retry logic from patch3 and rebased the patch series
v6: optimize wite_iet() (Suraj)
Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
---
.../gpu/drm/i915/display/intel_histogram.c | 105 +++++++++++++-----
.../drm/i915/display/intel_histogram_regs.h | 25 +++++
2 files changed, 103 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_histogram.c b/drivers/gpu/drm/i915/display/intel_histogram.c
index a64e778fface..db4bc60be557 100644
--- a/drivers/gpu/drm/i915/display/intel_histogram.c
+++ b/drivers/gpu/drm/i915/display/intel_histogram.c
@@ -29,6 +29,37 @@ struct intel_histogram {
u32 bin_data[HISTOGRAM_BIN_COUNT];
};
+static void set_bin_index_0(struct intel_display *display, enum pipe pipe)
+{
+ if (DISPLAY_VER(display) >= 20)
+ intel_de_rmw(display, DPST_IE_INDEX(pipe),
+ DPST_IE_BIN_INDEX_MASK, DPST_IE_BIN_INDEX(0));
+ else
+ intel_de_rmw(display, DPST_CTL(pipe),
+ DPST_CTL_BIN_REG_MASK,
+ DPST_CTL_BIN_REG_CLEAR);
+}
+
+static void write_iet(struct intel_display *display, enum pipe pipe,
+ u32 *data)
+{
+ int i;
+
+ for (i = 0; i < HISTOGRAM_IET_LENGTH; i++) {
+ if (DISPLAY_VER(display) >= 20)
+ intel_de_rmw(display, DPST_IE_BIN(pipe),
+ DPST_IE_BIN_DATA_MASK,
+ DPST_IE_BIN_DATA(data[i]));
+ else
+ intel_de_rmw(display, DPST_BIN(pipe),
+ DPST_BIN_DATA_MASK,
+ DPST_BIN_DATA(data[i]));
+
+ drm_dbg_atomic(display->drm, "iet_lut[%d]=%x\n",
+ i, data[i]);
+ }
+}
+
static bool intel_histogram_get_data(struct intel_crtc *intel_crtc)
{
struct intel_display *display = to_intel_display(intel_crtc);
@@ -36,12 +67,27 @@ static bool intel_histogram_get_data(struct intel_crtc *intel_crtc)
int index;
u32 dpstbin;
+ if (DISPLAY_VER(display) >= 20)
+ intel_de_rmw(display, DPST_HIST_INDEX(intel_crtc->pipe),
+ DPST_HIST_BIN_INDEX_MASK,
+ DPST_HIST_BIN_INDEX(0));
+ else
+ intel_de_rmw(display, DPST_CTL(intel_crtc->pipe),
+ DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK, 0);
+
for (index = 0; index < ARRAY_SIZE(histogram->bin_data); index++) {
- dpstbin = intel_de_read(display, DPST_BIN(intel_crtc->pipe));
+ dpstbin = intel_de_read(display, (DISPLAY_VER(display) >= 20 ?
+ DPST_HIST_BIN(intel_crtc->pipe) :
+ DPST_BIN(intel_crtc->pipe)));
if (!(dpstbin & DPST_BIN_BUSY)) {
- histogram->bin_data[index] = dpstbin & DPST_BIN_DATA_MASK;
- } else
+ histogram->bin_data[index] = dpstbin & (DISPLAY_VER(display) >= 20 ?
+ DPST_HIST_BIN_DATA_MASK :
+ DPST_BIN_DATA_MASK);
+ } else {
+ drm_err(display->drm, "Histogram bin busy, retyring\n");
+ fsleep(2);
return false;
+ }
}
return true;
}
@@ -69,8 +115,6 @@ static void intel_histogram_handle_int_work(struct work_struct *work)
* Set DPST_CTL Bin Reg function select to TC
* Set DPST_CTL Bin Register Index to 0
*/
- intel_de_rmw(display, DPST_CTL(intel_crtc->pipe),
- DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK, 0);
for (retry = 0; retry < HISTOGRAM_BIN_READ_RETRY_COUNT; retry++) {
if (intel_histogram_get_data(intel_crtc)) {
drm_property_replace_global_blob(display->drm,
@@ -153,15 +197,26 @@ static int intel_histogram_enable(struct intel_crtc *intel_crtc)
if (histogram->enable)
return 0;
- /* enable histogram, clear DPST_CTL bin reg func select to TC */
- intel_de_rmw(display, DPST_CTL(pipe),
- DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_IE_HIST_EN |
- DPST_CTL_HIST_MODE | DPST_CTL_IE_TABLE_VALUE_FORMAT |
- DPST_CTL_ENHANCEMENT_MODE_MASK | DPST_CTL_IE_MODI_TABLE_EN,
- DPST_CTL_BIN_REG_FUNC_TC | DPST_CTL_IE_HIST_EN |
- DPST_CTL_HIST_MODE_HSV |
- DPST_CTL_IE_TABLE_VALUE_FORMAT_1INT_9FRAC |
- DPST_CTL_EN_MULTIPLICATIVE | DPST_CTL_IE_MODI_TABLE_EN);
+ /* enable histogram, clear DPST_BIN reg and select TC function */
+ if (DISPLAY_VER(display) >= 20)
+ intel_de_rmw(display, DPST_CTL(pipe),
+ DPST_CTL_IE_HIST_EN |
+ DPST_CTL_HIST_MODE,
+ DPST_CTL_IE_HIST_EN |
+ DPST_CTL_HIST_MODE_HSV);
+ else
+ /* enable histogram, clear DPST_BIN reg and select TC function */
+ intel_de_rmw(display, DPST_CTL(pipe),
+ DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_IE_HIST_EN |
+ DPST_CTL_HIST_MODE |
+ DPST_CTL_IE_TABLE_VALUE_FORMAT |
+ DPST_CTL_ENHANCEMENT_MODE_MASK |
+ DPST_CTL_IE_MODI_TABLE_EN,
+ DPST_CTL_BIN_REG_FUNC_TC | DPST_CTL_IE_HIST_EN |
+ DPST_CTL_HIST_MODE_HSV |
+ DPST_CTL_IE_TABLE_VALUE_FORMAT_1INT_9FRAC |
+ DPST_CTL_EN_MULTIPLICATIVE |
+ DPST_CTL_IE_MODI_TABLE_EN);
/* Re-Visit: check if wait for one vblank is required */
drm_crtc_wait_one_vblank(&intel_crtc->base);
@@ -230,7 +285,6 @@ int intel_histogram_set_iet_lut(struct intel_crtc *intel_crtc, u32 *data)
struct intel_histogram *histogram = intel_crtc->histogram;
struct intel_display *display = to_intel_display(intel_crtc);
int pipe = intel_crtc->pipe;
- int i = 0;
if (!histogram)
return -EINVAL;
@@ -245,22 +299,19 @@ int intel_histogram_set_iet_lut(struct intel_crtc *intel_crtc, u32 *data)
return -EINVAL;
}
- /* Set DPST_CTL Bin Reg function select to IE & wait for a vblabk */
- intel_de_rmw(display, DPST_CTL(pipe),
- DPST_CTL_BIN_REG_FUNC_SEL, DPST_CTL_BIN_REG_FUNC_IE);
- drm_crtc_wait_one_vblank(&intel_crtc->base);
+ if (DISPLAY_VER(display) < 20) {
+ /* Set DPST_CTL Bin Reg function select to IE & wait for a vblabk */
+ intel_de_rmw(display, DPST_CTL(pipe),
+ DPST_CTL_BIN_REG_FUNC_SEL,
+ DPST_CTL_BIN_REG_FUNC_IE);
- /* Set DPST_CTL Bin Register Index to 0 */
- intel_de_rmw(display, DPST_CTL(pipe),
- DPST_CTL_BIN_REG_MASK, DPST_CTL_BIN_REG_CLEAR);
-
- for (i = 0; i < HISTOGRAM_IET_LENGTH; i++) {
- intel_de_rmw(display, DPST_BIN(pipe),
- DPST_BIN_DATA_MASK, data[i]);
- drm_dbg_atomic(display->drm, "iet_lut[%d]=%x\n", i, data[i]);
+ drm_crtc_wait_one_vblank(&intel_crtc->base);
}
+ set_bin_index_0(display, pipe);
+ write_iet(display, pipe, data);
+
return 0;
}
diff --git a/drivers/gpu/drm/i915/display/intel_histogram_regs.h b/drivers/gpu/drm/i915/display/intel_histogram_regs.h
index 213c9f483567..3fbb9c2deaae 100644
--- a/drivers/gpu/drm/i915/display/intel_histogram_regs.h
+++ b/drivers/gpu/drm/i915/display/intel_histogram_regs.h
@@ -45,6 +45,31 @@
#define _DPST_BIN_B 0x491C4
#define DPST_BIN(pipe) _MMIO_PIPE(pipe, _DPST_BIN_A, _DPST_BIN_B)
#define DPST_BIN_DATA_MASK REG_GENMASK(23, 0)
+#define DPST_BIN_DATA(val) REG_FIELD_PREP(DPST_BIN_DATA_MASK, val)
#define DPST_BIN_BUSY REG_BIT(31)
+#define _DPST_HIST_INDEX_A 0x490D8
+#define _DPST_HIST_INDEX_B 0x491D8
+#define DPST_HIST_INDEX(pipe) _MMIO_PIPE(pipe, _DPST_HIST_INDEX_A, _DPST_HIST_INDEX_B)
+#define DPST_HIST_BIN_INDEX_MASK REG_GENMASK(4, 0)
+#define DPST_HIST_BIN_INDEX(val) REG_FIELD_PREP(DPST_HIST_BIN_INDEX_MASK, val)
+
+#define _DPST_HIST_BIN_A 0x490C4
+#define _DPST_HIST_BIN_B 0x491C4
+#define DPST_HIST_BIN(pipe) _MMIO_PIPE(pipe, _DPST_HIST_BIN_A, _DPST_HIST_BIN_B)
+#define DPST_HIST_BIN_BUSY REG_BIT(31)
+#define DPST_HIST_BIN_DATA_MASK REG_GENMASK(30, 0)
+
+#define _DPST_IE_BIN_A 0x490CC
+#define _DPST_IE_BIN_B 0x491CC
+#define DPST_IE_BIN(pipe) _MMIO_PIPE(pipe, _DPST_IE_BIN_A, _DPST_IE_BIN_B)
+#define DPST_IE_BIN_DATA_MASK REG_GENMASK(9, 0)
+#define DPST_IE_BIN_DATA(val) REG_FIELD_PREP(DPST_IE_BIN_DATA_MASK, val)
+
+#define _DPST_IE_INDEX_A 0x490DC
+#define _DPST_IE_INDEX_B 0x491DC
+#define DPST_IE_INDEX(pipe) _MMIO_PIPE(pipe, _DPST_IE_INDEX_A, _DPST_IE_INDEX_B)
+#define DPST_IE_BIN_INDEX_MASK REG_GENMASK(6, 0)
+#define DPST_IE_BIN_INDEX(val) REG_FIELD_PREP(DPST_IE_BIN_INDEX_MASK, val)
+
#endif /* __INTEL_HISTOGRAM_REGS_H__ */
--
2.25.1
next prev parent reply other threads:[~2024-11-21 12:35 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-21 12:25 [PATCH 0/8] Display Global Histogram Arun R Murthy
2024-11-21 12:25 ` [PATCHv2 1/8] drm/i915/histogram: Define registers for histogram Arun R Murthy
2024-11-21 12:25 ` [PATCHv5 2/8] drm/i915/histogram: Add support " Arun R Murthy
2024-11-21 13:44 ` Kandpal, Suraj
2024-11-21 14:22 ` Murthy, Arun R
2024-11-21 12:25 ` [PATCH 3/8] drm/xe: Add histogram support to Xe builds Arun R Murthy
2024-11-21 12:25 ` [PATCHv5 4/8] drm/i915/histogram: histogram interrupt handling Arun R Murthy
2024-11-21 12:26 ` [PATCHv6 5/8] drm/i915/histogram: Add crtc properties for global histogram Arun R Murthy
2024-11-21 23:13 ` Dmitry Baryshkov
2024-11-22 4:24 ` Murthy, Arun R
2024-11-22 8:09 ` Dmitry Baryshkov
2024-11-22 8:19 ` Murthy, Arun R
2024-11-25 8:14 ` Murthy, Arun R
2024-11-21 12:26 ` [PATCHv2 6/8] drm/i915/histogram: histogram delay counter doesnt reset Arun R Murthy
2024-11-21 14:13 ` Kandpal, Suraj
2024-11-21 12:26 ` Arun R Murthy [this message]
2024-11-21 14:09 ` [PATCHv6 7/8] drm/i915/histogram: Histogram changes for Display 20+ Kandpal, Suraj
2024-11-21 14:39 ` Murthy, Arun R
2024-11-22 8:06 ` Kandpal, Suraj
2024-11-22 8:18 ` Murthy, Arun R
2024-11-23 4:55 ` Kandpal, Suraj
2024-11-21 12:26 ` [PATCH 8/8] drm/i915/histogram: Enable pipe dithering Arun R Murthy
2024-11-21 13:07 ` ✓ CI.Patch_applied: success for Display Global Histogram (rev4) Patchwork
2024-11-21 13:07 ` ✗ CI.checkpatch: warning " Patchwork
2024-11-21 13:09 ` ✓ CI.KUnit: success " Patchwork
2024-11-21 13:26 ` ✓ CI.Build: " Patchwork
2024-11-21 13:29 ` ✗ CI.Hooks: failure " Patchwork
2024-11-21 13:30 ` ✗ CI.checksparse: warning " Patchwork
2024-11-21 13:33 ` ✗ Fi.CI.CHECKPATCH: warning for Display Global Histogram (rev7) Patchwork
2024-11-21 13:33 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-11-21 13:40 ` [PATCH 0/8] Display Global Histogram Daniel Stone
2024-11-21 14:13 ` Murthy, Arun R
2024-11-21 13:50 ` ✓ Xe.CI.BAT: success for Display Global Histogram (rev4) Patchwork
2024-11-21 19:02 ` ✗ Xe.CI.Full: failure " Patchwork
2024-11-25 8:15 ` ✗ Fi.CI.CHECKPATCH: warning for Display Global Histogram (rev8) Patchwork
2024-11-25 8:15 ` ✗ Fi.CI.SPARSE: " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2024-11-21 14:39 [PATCHv5 2/8] drm/i915/histogram: Add support for histogram Arun R Murthy
2024-11-21 14:39 ` [PATCHv6 7/8] drm/i915/histogram: Histogram changes for Display 20+ Arun R Murthy
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=20241121122603.736267-8-arun.r.murthy@intel.com \
--to=arun.r.murthy@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
/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.