From: Jani Nikula <jani.nikula@linux.intel.com>
To: Arun R Murthy <arun.r.murthy@intel.com>, intel-gfx@lists.freedesktop.org
Cc: Arun R Murthy <arun.r.murthy@intel.com>
Subject: Re: [PATCHv2 5/5] drm/i915/display/histogram: Histogram changes for Display LNL+
Date: Thu, 12 Sep 2024 12:59:46 +0300 [thread overview]
Message-ID: <87mskdgpkd.fsf@intel.com> (raw)
In-Reply-To: <20240821102349.3961986-6-arun.r.murthy@intel.com>
On Wed, 21 Aug 2024, Arun R Murthy <arun.r.murthy@intel.com> wrote:
> In LNL+, histogram/IE data and index registers are added which was
> included in the control registers in the legacy platforms. The new
> registers are used for reading histogram and writing the IET LUT data.
>
> v2: Removed duplicate code (Jani)
>
> Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> ---
> .../gpu/drm/i915/display/intel_histogram.c | 138 ++++++++++++------
> .../gpu/drm/i915/display/intel_histogram.h | 25 ++++
> 2 files changed, 122 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_histogram.c b/drivers/gpu/drm/i915/display/intel_histogram.c
> index 189f7ccd6df8..9c31a7d83362 100644
> --- a/drivers/gpu/drm/i915/display/intel_histogram.c
> +++ b/drivers/gpu/drm/i915/display/intel_histogram.c
> @@ -26,38 +26,41 @@ struct intel_histogram {
> u32 bindata[HISTOGRAM_BIN_COUNT];
> };
>
> -static void intel_histogram_handle_int_work(struct work_struct *work)
> +static void intel_histogram_read_data(struct intel_histogram *histogram)
Please refactor the stuff in patches 1-4 so the LNL changes just drop in
cleanly, so we don't have to refactor stuff here anymore.
> {
> - struct intel_histogram *histogram = container_of(work,
> - struct intel_histogram, handle_histogram_int_work.work);
> struct drm_i915_private *i915 = histogram->i915;
> struct intel_crtc *intel_crtc = histogram->crtc;
> - char *histogram_event[] = {"HISTOGRAM=1", NULL};
> u32 dpstbin;
> int i, try = 0;
>
> - /* Wa: 14014889975 */
> - if (IS_DISPLAY_VER(i915, 12, 13))
> +retry:
> + if (DISPLAY_VER(i915) >= 20) {
> + /* Set index to zero */
> + intel_de_rmw(i915, DPST_HIST_INDEX(intel_crtc->pipe),
> + DPST_HIST_BIN_INDEX_MASK, DPST_HIST_BIN_INDEX(0));
> + } else {
> intel_de_rmw(i915, DPST_CTL(intel_crtc->pipe),
> - DPST_CTL_RESTORE, 0);
> + DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK, 0);
> + }
>
> - /*
> - * TODO: PSR to be exited while reading the Histogram data
> - * Set DPST_CTL Bin Reg function select to TC
> - * Set DPST_CTL Bin Register Index to 0
> - */
> -retry:
> - intel_de_rmw(i915, DPST_CTL(intel_crtc->pipe),
> - DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK, 0);
> for (i = 0; i < HISTOGRAM_BIN_COUNT; i++) {
> - dpstbin = intel_de_read(i915, DPST_BIN(intel_crtc->pipe));
> + dpstbin = intel_de_read(i915, DPST_HIST_BIN(intel_crtc->pipe));
> if (dpstbin & DPST_BIN_BUSY) {
> /*
> * If DPST_BIN busy bit is set, then set the
> * DPST_CTL bin reg index to 0 and proceed
> * from beginning.
> */
> - if (try++ >= 5) {
> + if (DISPLAY_VER(i915) >= 20) {
> + intel_de_rmw(i915, DPST_HIST_INDEX(intel_crtc->pipe),
> + DPST_HIST_BIN_INDEX_MASK,
> + DPST_HIST_BIN_INDEX(0));
> + } else {
> + intel_de_rmw(i915, DPST_CTL(intel_crtc->pipe),
> + DPST_CTL_BIN_REG_MASK, 0);
> + }
> +
> + if (try++ == 5) {
> drm_err(&i915->drm,
> "Histogram block is busy, failed to read\n");
> intel_de_rmw(i915, DPST_GUARD(intel_crtc->pipe),
> @@ -66,10 +69,37 @@ static void intel_histogram_handle_int_work(struct work_struct *work)
> }
> goto retry;
> }
> - histogram->bindata[i] = dpstbin & DPST_BIN_DATA_MASK;
> + histogram->bindata[i] = dpstbin & DPST_HIST_BIN_DATA_MASK;
> drm_dbg_atomic(&i915->drm, "Histogram[%d]=%x\n",
> i, histogram->bindata[i]);
> }
> +}
> +
> +static void intel_histogram_get_data(struct intel_histogram *histogram)
> +{
> +
> + /*
> + * TODO: PSR to be exited while reading the Histogram data
> + * Set DPST_CTL Bin Reg function select to TC
> + * Set DPST_CTL Bin Register Index to 0
> + */
> + intel_histogram_read_data(histogram);
> +}
> +
> +static void intel_histogram_handle_int_work(struct work_struct *work)
> +{
> + struct intel_histogram *histogram = container_of(work,
> + struct intel_histogram, handle_histogram_int_work.work);
> + struct drm_i915_private *i915 = histogram->i915;
> + struct intel_crtc *intel_crtc = histogram->crtc;
> + char *histogram_event[] = {"HISTOGRAM=1", NULL};
> +
> + /* Wa: 14014889975 */
> + if (IS_DISPLAY_VER(i915, 12, 13))
> + intel_de_rmw(i915, DPST_CTL(intel_crtc->pipe),
> + DPST_CTL_RESTORE, 0);
> +
> + intel_histogram_get_data(histogram);
>
> drm_property_replace_global_blob(&i915->drm,
> &intel_crtc->config->histogram,
> @@ -161,12 +191,19 @@ static int intel_histogram_enable(struct intel_crtc *intel_crtc)
> * enable DPST_CTL Histogram mode
> * Clear DPST_CTL Bin Reg function select to TC
> */
> - intel_de_rmw(i915, 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_BIN_REG_FUNC_TC | DPST_CTL_IE_HIST_EN |
> - DPST_CTL_HIST_MODE_HSV |
> - DPST_CTL_IE_TABLE_VALUE_FORMAT_1INT_9FRAC);
> + if (DISPLAY_VER(i915) >= 20)
> + intel_de_rmw(i915, DPST_CTL(pipe),
> + DPST_CTL_IE_HIST_EN |
> + DPST_CTL_HIST_MODE,
> + DPST_CTL_IE_HIST_EN |
> + DPST_CTL_HIST_MODE_HSV);
> + else
> + intel_de_rmw(i915, 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_BIN_REG_FUNC_TC | DPST_CTL_IE_HIST_EN |
> + DPST_CTL_HIST_MODE_HSV |
> + DPST_CTL_IE_TABLE_VALUE_FORMAT_1INT_9FRAC);
>
> /* Re-Visit: check if wait for one vblank is required */
> drm_crtc_wait_one_vblank(&intel_crtc->base);
> @@ -252,24 +289,43 @@ int intel_histogram_set_iet_lut(struct intel_crtc *intel_crtc, u32 *data)
> * Set DPST_CTL Bin Reg function select to IE
> * Set DPST_CTL Bin Register Index to 0
> */
> - intel_de_rmw(i915, DPST_CTL(pipe),
> - DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK,
> - DPST_CTL_BIN_REG_FUNC_IE | DPST_CTL_BIN_REG_CLEAR);
> -
> - for (i = 0; i < HISTOGRAM_IET_LENGTH; i++) {
> - intel_de_rmw(i915, DPST_BIN(pipe),
> - DPST_BIN_DATA_MASK, data[i]);
> - drm_dbg_atomic(&i915->drm, "iet_lut[%d]=%x\n", i, data[i]);
> + if (DISPLAY_VER(i915) >= 20) {
> + /* Set index to zero */
> + intel_de_rmw(i915, DPST_IE_INDEX(pipe),
> + DPST_IE_BIN_INDEX_MASK, DPST_IE_BIN_INDEX(0));
> + for (i = 0; i < HISTOGRAM_IET_LENGTH; i++) {
> + intel_de_rmw(i915, DPST_IE_BIN(pipe),
> + DPST_IE_BIN_DATA_MASK,
> + DPST_IE_BIN_DATA(data[i]));
> + drm_dbg_atomic(&i915->drm, "iet_lut[%d]=%x\n",
> + i, data[i]);
> + }
> + intel_de_rmw(i915, DPST_CTL(pipe),
> + DPST_CTL_ENHANCEMENT_MODE_MASK |
> + DPST_CTL_IE_MODI_TABLE_EN,
> + DPST_CTL_EN_MULTIPLICATIVE |
> + DPST_CTL_IE_MODI_TABLE_EN);
> + } else {
> + intel_de_rmw(i915, DPST_CTL(pipe),
> + DPST_CTL_BIN_REG_FUNC_SEL | DPST_CTL_BIN_REG_MASK,
> + DPST_CTL_BIN_REG_FUNC_IE | DPST_CTL_BIN_REG_CLEAR);
> + for (i = 0; i < HISTOGRAM_IET_LENGTH; i++) {
> + intel_de_rmw(i915, DPST_BIN(pipe),
> + DPST_BIN_DATA_MASK, data[i]);
> + drm_dbg_atomic(&i915->drm, "iet_lut[%d]=%x\n",
> + i, data[i]);
> + }
> + intel_de_rmw(i915, DPST_CTL(pipe),
> + DPST_CTL_ENHANCEMENT_MODE_MASK |
> + DPST_CTL_IE_MODI_TABLE_EN,
> + DPST_CTL_EN_MULTIPLICATIVE |
> + DPST_CTL_IE_MODI_TABLE_EN);
> +
> + /* Once IE is applied, change DPST CTL to TC */
> + intel_de_rmw(i915, DPST_CTL(pipe),
> + DPST_CTL_BIN_REG_FUNC_SEL,
> + DPST_CTL_BIN_REG_FUNC_TC);
> }
> -
> - intel_de_rmw(i915, DPST_CTL(pipe),
> - DPST_CTL_ENHANCEMENT_MODE_MASK | DPST_CTL_IE_MODI_TABLE_EN,
> - DPST_CTL_EN_MULTIPLICATIVE | DPST_CTL_IE_MODI_TABLE_EN);
> -
> - /* Once IE is applied, change DPST CTL to TC */
> - intel_de_rmw(i915, DPST_CTL(pipe),
> - DPST_CTL_BIN_REG_FUNC_SEL, DPST_CTL_BIN_REG_FUNC_TC);
> -
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/i915/display/intel_histogram.h b/drivers/gpu/drm/i915/display/intel_histogram.h
> index 5e24d3c5c28b..436e0b8e9ffd 100644
> --- a/drivers/gpu/drm/i915/display/intel_histogram.h
> +++ b/drivers/gpu/drm/i915/display/intel_histogram.h
> @@ -48,8 +48,33 @@ enum pipe;
> #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 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)
> +
> #define INTEL_HISTOGRAM_PIPEA 0x90000000
> #define INTEL_HISTOGRAM_PIPEB 0x90000002
> #define INTEL_HISTOGRAM_EVENT(pipe) PIPE(pipe, \
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-09-12 9:59 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-21 10:23 [PATCHv2 0/5] Display Global histogram Arun R Murthy
2024-08-21 10:23 ` [PATCHv2 1/5] drm/i915/display: Add support for histogram Arun R Murthy
2024-08-23 21:33 ` kernel test robot
2024-09-10 12:11 ` Kulkarni, Vandita
2024-09-12 9:08 ` Murthy, Arun R
2024-09-12 10:17 ` Kulkarni, Vandita
2024-09-15 12:47 ` Murthy, Arun R
2024-09-11 5:37 ` Kandpal, Suraj
2024-09-11 9:45 ` Kandpal, Suraj
2024-09-15 4:59 ` Murthy, Arun R
2024-09-12 9:45 ` Jani Nikula
2024-08-21 10:23 ` [PATCHv2 2/5] drm/i915/display: histogram interrupt handling Arun R Murthy
2024-09-11 5:29 ` Kulkarni, Vandita
2024-09-12 9:52 ` Murthy, Arun R
2024-09-12 10:30 ` Kulkarni, Vandita
2024-09-11 10:00 ` Kandpal, Suraj
2024-09-15 14:09 ` Murthy, Arun R
2024-09-12 9:53 ` Jani Nikula
2024-09-17 11:04 ` Murthy, Arun R
2024-08-21 10:23 ` [PATCHv2 3/5] Add crtc properties for global histogram Arun R Murthy
2024-09-03 5:24 ` Kulkarni, Vandita
2024-09-03 5:32 ` Kulkarni, Vandita
2024-09-04 5:01 ` Murthy, Arun R
2024-09-12 9:57 ` Jani Nikula
2024-09-18 10:55 ` Murthy, Arun R
2024-08-21 10:23 ` [PATCHv2 4/5] drm/i915/histogram: histogram delay counter doesnt reset Arun R Murthy
2024-09-11 10:39 ` Kandpal, Suraj
2024-09-18 16:24 ` Murthy, Arun R
2024-09-11 10:41 ` Kandpal, Suraj
2024-09-18 16:24 ` Murthy, Arun R
2024-08-21 10:23 ` [PATCHv2 5/5] drm/i915/display/histogram: Histogram changes for Display LNL+ Arun R Murthy
2024-09-10 12:20 ` Kulkarni, Vandita
2024-09-12 9:09 ` Murthy, Arun R
2024-09-11 10:50 ` Kandpal, Suraj
2024-09-19 12:59 ` Murthy, Arun R
2024-09-12 9:59 ` Jani Nikula [this message]
2024-09-19 12:59 ` Murthy, Arun R
2024-08-21 11:08 ` ✗ Fi.CI.CHECKPATCH: warning for Display Global Histogram (rev2) Patchwork
2024-08-21 11:08 ` ✗ Fi.CI.SPARSE: " 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=87mskdgpkd.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=arun.r.murthy@intel.com \
--cc=intel-gfx@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.