From: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org, suraj.kandpal@intel.com
Subject: [PATCH 09/10] drm/i915/dsc: Account for Odd pixel removal
Date: Thu, 17 Oct 2024 13:53:47 +0530 [thread overview]
Message-ID: <20241017082348.3413727-10-ankit.k.nautiyal@intel.com> (raw)
In-Reply-To: <20241017082348.3413727-1-ankit.k.nautiyal@intel.com>
With 3 DSC engines we can support 12 slices. With ultra joiner
usecase while dividing the width into 12 slices, we might
end up having odd number of pixels per pipe.
As per Bspec, pipe src size should be even, so an extra pixel is added
in each pipe. For Pipe A and C the odd pixel is added at the end of
pipe and for Pipe B and D it is added at the beginning of the pipe.
This extra pixel needs to be dropped in Splitter hardware.
So account for odd pixel removal while programming DSS CTL.
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
drivers/gpu/drm/i915/display/intel_vdsc.c | 26 +++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_vdsc.c b/drivers/gpu/drm/i915/display/intel_vdsc.c
index df5285d3e4b2..c41be2da4df5 100644
--- a/drivers/gpu/drm/i915/display/intel_vdsc.c
+++ b/drivers/gpu/drm/i915/display/intel_vdsc.c
@@ -768,6 +768,26 @@ void intel_uncompressed_joiner_enable(const struct intel_crtc_state *crtc_state)
}
}
+/*
+ * With 12 slices, there can be a case where the src width is odd.
+ * As per Bspec the src width should be even, so an extra Odd Pixel is
+ * programmed in Pipe in such cases. This extra pixel needs to be
+ * dropped in Splitter HW.
+ */
+static
+bool intel_dsc_need_odd_pixel_removal(const struct intel_crtc_state *crtc_state)
+{
+ int pipe_src_w = drm_rect_width(&crtc_state->pipe_src);
+
+ if (intel_crtc_num_joined_pipes(crtc_state) != 4)
+ return false;
+
+ if ((pipe_src_w + crtc_state->dsc.pixel_replication_count) % 4)
+ return true;
+
+ return false;
+}
+
void intel_dsc_enable(const struct intel_crtc_state *crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
@@ -806,6 +826,12 @@ void intel_dsc_enable(const struct intel_crtc_state *crtc_state)
dss_ctl1_val |= PRIMARY_BIG_JOINER_ENABLE;
}
+ if (intel_dsc_need_odd_pixel_removal(crtc_state)) {
+ dss_ctl2_val |= ODD_PIXEL_REMOVAL;
+ if (crtc->pipe == PIPE_A || crtc->pipe == PIPE_C)
+ dss_ctl2_val |= ODD_PIXEL_REMOVAL_CONFIG_EOL;
+ }
+
if (crtc_state->dsc.pixel_replication_count)
dss_ctl3_val = DSC_PIXEL_REPLICATION(crtc_state->dsc.pixel_replication_count);
--
2.45.2
next prev parent reply other threads:[~2024-10-17 8:21 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-17 8:23 [PATCH 00/10] Add support for 3 VDSC engines 12 slices Ankit Nautiyal
2024-10-17 8:23 ` [PATCH 01/10] drm/i915/display: Prepare for dsc 3 stream splitter Ankit Nautiyal
2024-10-17 8:58 ` Kandpal, Suraj
2024-10-17 8:23 ` [PATCH 02/10] drm/i915/vdsc: Use VDSC0/VDSC1 for LEFT/RIGHT VDSC engine Ankit Nautiyal
2024-10-17 9:04 ` Kandpal, Suraj
2024-10-17 8:23 ` [PATCH 03/10] drm/i915/vdsc: Add register bits for VDSC2 engine Ankit Nautiyal
2024-10-17 9:10 ` Kandpal, Suraj
2024-10-17 8:23 ` [PATCH 04/10] drm/i915/vdsc: Add support for read/write PPS for DSC3 Ankit Nautiyal
2024-10-18 2:17 ` Kandpal, Suraj
2024-10-21 12:14 ` Nautiyal, Ankit K
2024-10-17 8:23 ` [PATCH 05/10] drm/i915/dp: Add check for hdisplay divisible by slice count Ankit Nautiyal
2024-10-17 9:45 ` Kandpal, Suraj
2024-10-17 8:23 ` [PATCH 06/10] drm/i915/display: Add DSC pixel replication Ankit Nautiyal
2024-10-17 9:33 ` Kandpal, Suraj
2024-10-24 22:18 ` kernel test robot
2024-10-17 8:23 ` [PATCH 07/10] drm/i915/dp: Compute pixel replication count for DSC 12 slices case Ankit Nautiyal
2024-10-17 9:44 ` Kandpal, Suraj
2024-10-17 8:23 ` [PATCH 08/10] drm/i915/display: Account for pixel replication in pipe_src Ankit Nautiyal
2024-10-17 8:23 ` Ankit Nautiyal [this message]
2024-10-17 8:23 ` [PATCH 10/10] drm/i915/dp: Add support for 3 vdsc engines and 12 slices Ankit Nautiyal
2024-10-17 8:42 ` ✓ CI.Patch_applied: success for Add support for 3 VDSC engines 12 slices (rev3) Patchwork
2024-10-17 8:42 ` ✓ CI.checkpatch: " Patchwork
2024-10-17 8:43 ` ✓ CI.KUnit: " Patchwork
2024-10-17 8:55 ` ✓ CI.Build: " Patchwork
2024-10-17 8:57 ` ✓ CI.Hooks: " Patchwork
2024-10-17 8:59 ` ✗ CI.checksparse: warning " Patchwork
2024-10-17 9:24 ` ✓ CI.BAT: success " Patchwork
2024-10-17 18:15 ` ✗ CI.FULL: failure " 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=20241017082348.3413727-10-ankit.k.nautiyal@intel.com \
--to=ankit.k.nautiyal@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=suraj.kandpal@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox