Skip to content

Commit 6cf9916

Browse files
committed
Merge tag 'drm-intel-next-2020-05-15' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
UAPI Changes: - drm/i915: Show per-engine default property values in sysfs By providing the default values configured into the kernel via sysfs, it is much more convenient for userspace to restore those sane defaults, or at least know what are considered good baseline. This is useful, for example, to cleanup after any failed userspace prior to commencing new jobs. Cross-subsystem Changes: - video/hdmi: Add Unpack only function for DRM infoframe - Includes pull request gvt-next-2020-05-12 Driver Changes: - Restore Cherryview back to full-ppgtt (Chris, Mika) - Document locking guidelines for i915 (Chris, Daniel, Joonas) - Fix GitLab #1746: Handle idling during i915_gem_evict_something busy loops (Chris) - Display WA #1105: Require linear fb stride to be multiple of 512 bytes on gen9/glk (Ville) - Add Wa_14010685332 for ICP/ICL (Matt R) - Restrict w/a 1607087056 for EHL/JSL (Swathi) - Fix interrupt handling for DP AUX transactions on Tigerlake (Imre) - Revert "drm/i915/tgl: Include ro parts of l3 to invalidate" (Mika) - Fix HDC pipeline flush hardware bit on Gen12 (Mika) - Flush L3 when flushing render on Gen12 (Mika) - Invalidate aux table entries forcibly between BB on Gen12 (Mika) - Add aux table invalidate for all engines on Gen12 (Mika) - Force pte cacheline to main memory Gen8+ (Mika) - Add and enable TGL+ SAGV support (Stanislav) - Implement vm_ops->access on i915 mmaps for GDB (Chris, Kristian) - Replace zero-length array with flexible-array (Gustavo) - Improve batch buffer pool effectiveness to mitigate soft-rc6 hit (Chris) - Remove wait priority boosting (Chris) - Keep driver module referenced when PMU is active (Chris) - Sanitize RPS interrupts upon resume (Chris) - Extend pcode read timeout to 20 ms (Chris) - Wait for ACT sent before enabling MST pipe (Ville) - Extend support to async relocations to SNB (Chris) - Remove CNL pre-prod workarounds (Ville) - Don't enable WaIncreaseLatencyIPCEnabled when IPC is disabled (Sultan) - Record the active CCID from before reset (Chris) - Mark concurrent submissions with a weak-dependency (Chris) - Peel dma-fence-chains for await to allow engine-to-engine sync (Lionel) - Prevent using semaphores to chain up to external fences (Chris) - Fix GLK watermark calculations (Ville) - Emit await(batch) before MI_BB_START (Chris) - Reset execlists registers before HWSP (Chris) - Drop no-semaphore boosting in favor of fast timeslicing (Chris) - Fix enabled infoframe states of lspcon (Gwan-gyeong) - Program DP SDPs on pipe updates (Gwan-gyeong) - Stop sending DP SDPs on ddi disable (Gwan-gyeong) - Store CS timestamp frequency in Hz (Ville) - Remove unused HAS_FWTABLE macro (Pascal) - Use batchbuffer chaining for relocations to save ring space (Chris) - Try different engines for relocs if MI ops not supported (Chris, Tvrtko) - Lazily acquire the device wakeref for freeing objects (Chris) - Streamline display code arithmetics around rounding etc. (Ville) - Use bw state for per crtc SAGV evaluation (Stanislav) - Track active_pipes in bw_state (Stanislav) - Nuke mode.vrefresh usage (Ville) - Warn if the FBC is still writing to stolen on removal (Chris) - Added new PCode commands prepping for QGV rescricting (Stansilav) - Stop holding onto the pinned_default_state (Chris) - Propagate error from completed fences (Chris) - Ignore submit-fences on the same timeline (Chris) - Pull waiting on an external dma-fence into its routine (Chris) - Replace the hardcoded I915_FENCE_TIMEOUT with Kconfig (Chris) - Mark up the racy read of execlists->context_tag (Chris) - Tidy up the return handling for completed dma-fences (Chris) - Introduce skl_plane_wm_level accessor (Stanislav) - Extract SKL SAGV checking (Stanislav) - Make active_pipes check skl specific (Stanislav) - Suspend tasklets before resume sanitization (Chris) - Remove redundant exec_fence (Chris) - Mark the addition of the initial-breadcrumb in the request (Chris) - Transfer old virtual breadcrumbs to irq_worker (Chris) - Read the DP SDPs from the video DIP (Gwan-gyeong) - Program DP SDPs with computed configs (Gwan-gyeong) - Add state readout for DP VSC and DP HDR Metadata Infoframe SDP (Gwan-gyeong) - Add compute routine for DP PSR VSC SDP (Gwan-gyeong) - Use new DP VSC SDP compute routine on PSR (Gwan-gyeong) - Restrict qgv points which don't have enough bandwidth. (Stanislav) - Nuke pointless div by 64bit (Ville) - Static checker code fixes (Nathan, Mika, Chris) - Add logging function for DP VSC SDP (Gwan-gyeong) - Include HDMI DRM infoframe, DP HDR metadata and DP VSC SDP in the crtc state dump (Gwan-gyeong) - Make timeslicing explicit engine property (Chris, Tvrtko) - Selftest and debugging improvements (Chris) - Align variable names with BSpec (Ville) - Tidy up gen8+ breadcrumb emission code (Chris) - Turn intel_digital_port_connected() in a vfunc (Ville) - Use stashed away hpd isr bits in intel_digital_port_connected() (Ville) - Extract i915_cs_timestamp_{ns_to_ticks,tick_to_ns}() (Ville) Signed-off-by: Dave Airlie <[email protected]> From: Joonas Lahtinen <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents bfbe174 + 3a36aa2 commit 6cf9916

File tree

105 files changed

+3097
-1505
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+3097
-1505
lines changed

Documentation/gpu/i915.rst

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,52 @@ for execution also include a list of all locations within buffers that
329329
refer to GPU-addresses so that the kernel can edit the buffer correctly.
330330
This process is dubbed relocation.
331331

332+
Locking Guidelines
333+
------------------
334+
335+
.. note::
336+
This is a description of how the locking should be after
337+
refactoring is done. Does not necessarily reflect what the locking
338+
looks like while WIP.
339+
340+
#. All locking rules and interface contracts with cross-driver interfaces
341+
(dma-buf, dma_fence) need to be followed.
342+
343+
#. No struct_mutex anywhere in the code
344+
345+
#. dma_resv will be the outermost lock (when needed) and ww_acquire_ctx
346+
is to be hoisted at highest level and passed down within i915_gem_ctx
347+
in the call chain
348+
349+
#. While holding lru/memory manager (buddy, drm_mm, whatever) locks
350+
system memory allocations are not allowed
351+
352+
* Enforce this by priming lockdep (with fs_reclaim). If we
353+
allocate memory while holding these looks we get a rehash
354+
of the shrinker vs. struct_mutex saga, and that would be
355+
real bad.
356+
357+
#. Do not nest different lru/memory manager locks within each other.
358+
Take them in turn to update memory allocations, relying on the object’s
359+
dma_resv ww_mutex to serialize against other operations.
360+
361+
#. The suggestion for lru/memory managers locks is that they are small
362+
enough to be spinlocks.
363+
364+
#. All features need to come with exhaustive kernel selftests and/or
365+
IGT tests when appropriate
366+
367+
#. All LMEM uAPI paths need to be fully restartable (_interruptible()
368+
for all locks/waits/sleeps)
369+
370+
* Error handling validation through signal injection.
371+
Still the best strategy we have for validating GEM uAPI
372+
corner cases.
373+
Must be excessively used in the IGT, and we need to check
374+
that we really have full path coverage of all error cases.
375+
376+
* -EDEADLK handling with ww_mutex
377+
332378
GEM BO Management Implementation Details
333379
----------------------------------------
334380

drivers/gpu/drm/drm_dp_helper.c

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,3 +1629,177 @@ int drm_dp_set_phy_test_pattern(struct drm_dp_aux *aux,
16291629
return 0;
16301630
}
16311631
EXPORT_SYMBOL(drm_dp_set_phy_test_pattern);
1632+
1633+
static const char *dp_pixelformat_get_name(enum dp_pixelformat pixelformat)
1634+
{
1635+
if (pixelformat < 0 || pixelformat > DP_PIXELFORMAT_RESERVED)
1636+
return "Invalid";
1637+
1638+
switch (pixelformat) {
1639+
case DP_PIXELFORMAT_RGB:
1640+
return "RGB";
1641+
case DP_PIXELFORMAT_YUV444:
1642+
return "YUV444";
1643+
case DP_PIXELFORMAT_YUV422:
1644+
return "YUV422";
1645+
case DP_PIXELFORMAT_YUV420:
1646+
return "YUV420";
1647+
case DP_PIXELFORMAT_Y_ONLY:
1648+
return "Y_ONLY";
1649+
case DP_PIXELFORMAT_RAW:
1650+
return "RAW";
1651+
default:
1652+
return "Reserved";
1653+
}
1654+
}
1655+
1656+
static const char *dp_colorimetry_get_name(enum dp_pixelformat pixelformat,
1657+
enum dp_colorimetry colorimetry)
1658+
{
1659+
if (pixelformat < 0 || pixelformat > DP_PIXELFORMAT_RESERVED)
1660+
return "Invalid";
1661+
1662+
switch (colorimetry) {
1663+
case DP_COLORIMETRY_DEFAULT:
1664+
switch (pixelformat) {
1665+
case DP_PIXELFORMAT_RGB:
1666+
return "sRGB";
1667+
case DP_PIXELFORMAT_YUV444:
1668+
case DP_PIXELFORMAT_YUV422:
1669+
case DP_PIXELFORMAT_YUV420:
1670+
return "BT.601";
1671+
case DP_PIXELFORMAT_Y_ONLY:
1672+
return "DICOM PS3.14";
1673+
case DP_PIXELFORMAT_RAW:
1674+
return "Custom Color Profile";
1675+
default:
1676+
return "Reserved";
1677+
}
1678+
case DP_COLORIMETRY_RGB_WIDE_FIXED: /* and DP_COLORIMETRY_BT709_YCC */
1679+
switch (pixelformat) {
1680+
case DP_PIXELFORMAT_RGB:
1681+
return "Wide Fixed";
1682+
case DP_PIXELFORMAT_YUV444:
1683+
case DP_PIXELFORMAT_YUV422:
1684+
case DP_PIXELFORMAT_YUV420:
1685+
return "BT.709";
1686+
default:
1687+
return "Reserved";
1688+
}
1689+
case DP_COLORIMETRY_RGB_WIDE_FLOAT: /* and DP_COLORIMETRY_XVYCC_601 */
1690+
switch (pixelformat) {
1691+
case DP_PIXELFORMAT_RGB:
1692+
return "Wide Float";
1693+
case DP_PIXELFORMAT_YUV444:
1694+
case DP_PIXELFORMAT_YUV422:
1695+
case DP_PIXELFORMAT_YUV420:
1696+
return "xvYCC 601";
1697+
default:
1698+
return "Reserved";
1699+
}
1700+
case DP_COLORIMETRY_OPRGB: /* and DP_COLORIMETRY_XVYCC_709 */
1701+
switch (pixelformat) {
1702+
case DP_PIXELFORMAT_RGB:
1703+
return "OpRGB";
1704+
case DP_PIXELFORMAT_YUV444:
1705+
case DP_PIXELFORMAT_YUV422:
1706+
case DP_PIXELFORMAT_YUV420:
1707+
return "xvYCC 709";
1708+
default:
1709+
return "Reserved";
1710+
}
1711+
case DP_COLORIMETRY_DCI_P3_RGB: /* and DP_COLORIMETRY_SYCC_601 */
1712+
switch (pixelformat) {
1713+
case DP_PIXELFORMAT_RGB:
1714+
return "DCI-P3";
1715+
case DP_PIXELFORMAT_YUV444:
1716+
case DP_PIXELFORMAT_YUV422:
1717+
case DP_PIXELFORMAT_YUV420:
1718+
return "sYCC 601";
1719+
default:
1720+
return "Reserved";
1721+
}
1722+
case DP_COLORIMETRY_RGB_CUSTOM: /* and DP_COLORIMETRY_OPYCC_601 */
1723+
switch (pixelformat) {
1724+
case DP_PIXELFORMAT_RGB:
1725+
return "Custom Profile";
1726+
case DP_PIXELFORMAT_YUV444:
1727+
case DP_PIXELFORMAT_YUV422:
1728+
case DP_PIXELFORMAT_YUV420:
1729+
return "OpYCC 601";
1730+
default:
1731+
return "Reserved";
1732+
}
1733+
case DP_COLORIMETRY_BT2020_RGB: /* and DP_COLORIMETRY_BT2020_CYCC */
1734+
switch (pixelformat) {
1735+
case DP_PIXELFORMAT_RGB:
1736+
return "BT.2020 RGB";
1737+
case DP_PIXELFORMAT_YUV444:
1738+
case DP_PIXELFORMAT_YUV422:
1739+
case DP_PIXELFORMAT_YUV420:
1740+
return "BT.2020 CYCC";
1741+
default:
1742+
return "Reserved";
1743+
}
1744+
case DP_COLORIMETRY_BT2020_YCC:
1745+
switch (pixelformat) {
1746+
case DP_PIXELFORMAT_YUV444:
1747+
case DP_PIXELFORMAT_YUV422:
1748+
case DP_PIXELFORMAT_YUV420:
1749+
return "BT.2020 YCC";
1750+
default:
1751+
return "Reserved";
1752+
}
1753+
default:
1754+
return "Invalid";
1755+
}
1756+
}
1757+
1758+
static const char *dp_dynamic_range_get_name(enum dp_dynamic_range dynamic_range)
1759+
{
1760+
switch (dynamic_range) {
1761+
case DP_DYNAMIC_RANGE_VESA:
1762+
return "VESA range";
1763+
case DP_DYNAMIC_RANGE_CTA:
1764+
return "CTA range";
1765+
default:
1766+
return "Invalid";
1767+
}
1768+
}
1769+
1770+
static const char *dp_content_type_get_name(enum dp_content_type content_type)
1771+
{
1772+
switch (content_type) {
1773+
case DP_CONTENT_TYPE_NOT_DEFINED:
1774+
return "Not defined";
1775+
case DP_CONTENT_TYPE_GRAPHICS:
1776+
return "Graphics";
1777+
case DP_CONTENT_TYPE_PHOTO:
1778+
return "Photo";
1779+
case DP_CONTENT_TYPE_VIDEO:
1780+
return "Video";
1781+
case DP_CONTENT_TYPE_GAME:
1782+
return "Game";
1783+
default:
1784+
return "Reserved";
1785+
}
1786+
}
1787+
1788+
void drm_dp_vsc_sdp_log(const char *level, struct device *dev,
1789+
const struct drm_dp_vsc_sdp *vsc)
1790+
{
1791+
#define DP_SDP_LOG(fmt, ...) dev_printk(level, dev, fmt, ##__VA_ARGS__)
1792+
DP_SDP_LOG("DP SDP: %s, revision %u, length %u\n", "VSC",
1793+
vsc->revision, vsc->length);
1794+
DP_SDP_LOG(" pixelformat: %s\n",
1795+
dp_pixelformat_get_name(vsc->pixelformat));
1796+
DP_SDP_LOG(" colorimetry: %s\n",
1797+
dp_colorimetry_get_name(vsc->pixelformat, vsc->colorimetry));
1798+
DP_SDP_LOG(" bpc: %u\n", vsc->bpc);
1799+
DP_SDP_LOG(" dynamic range: %s\n",
1800+
dp_dynamic_range_get_name(vsc->dynamic_range));
1801+
DP_SDP_LOG(" content type: %s\n",
1802+
dp_content_type_get_name(vsc->content_type));
1803+
#undef DP_SDP_LOG
1804+
}
1805+
EXPORT_SYMBOL(drm_dp_vsc_sdp_log);

drivers/gpu/drm/i915/Kconfig.profile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
config DRM_I915_FENCE_TIMEOUT
2+
int "Timeout for unsignaled foreign fences (ms, jiffy granularity)"
3+
default 10000 # milliseconds
4+
help
5+
When listening to a foreign fence, we install a supplementary timer
6+
to ensure that we are always signaled and our userspace is able to
7+
make forward progress. This value specifies the timeout used for an
8+
unsignaled foreign fence.
9+
10+
May be 0 to disable the timeout, and rely on the foreign fence being
11+
eventually signaled.
12+
113
config DRM_I915_USERFAULT_AUTOSUSPEND
214
int "Runtime autosuspend delay for userspace GGTT mmaps (ms)"
315
default 250 # milliseconds

drivers/gpu/drm/i915/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ subdir-ccflags-y += -I$(srctree)/$(src)
3535

3636
# core driver code
3737
i915-y += i915_drv.o \
38+
i915_config.o \
3839
i915_irq.o \
3940
i915_getparam.o \
4041
i915_params.o \
@@ -87,11 +88,11 @@ gt-y += \
8788
gt/intel_engine_cs.o \
8889
gt/intel_engine_heartbeat.o \
8990
gt/intel_engine_pm.o \
90-
gt/intel_engine_pool.o \
9191
gt/intel_engine_user.o \
9292
gt/intel_ggtt.o \
9393
gt/intel_ggtt_fencing.o \
9494
gt/intel_gt.o \
95+
gt/intel_gt_buffer_pool.o \
9596
gt/intel_gt_clock_utils.o \
9697
gt/intel_gt_irq.o \
9798
gt/intel_gt_pm.o \

drivers/gpu/drm/i915/display/intel_audio.c

Lines changed: 29 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -514,85 +514,67 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
514514
mutex_unlock(&dev_priv->av_mutex);
515515
}
516516

517-
/* Add a factor to take care of rounding and truncations */
518-
#define ROUNDING_FACTOR 10000
519-
520-
static unsigned int get_hblank_early_enable_config(struct intel_encoder *encoder,
521-
const struct intel_crtc_state *crtc_state)
517+
static unsigned int calc_hblank_early_prog(struct intel_encoder *encoder,
518+
const struct intel_crtc_state *crtc_state)
522519
{
523520
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
524521
unsigned int link_clks_available, link_clks_required;
525522
unsigned int tu_data, tu_line, link_clks_active;
526-
unsigned int hblank_rise, hblank_early_prog;
527-
unsigned int h_active, h_total, hblank_delta, pixel_clk, v_total;
528-
unsigned int fec_coeff, refresh_rate, cdclk, vdsc_bpp;
523+
unsigned int h_active, h_total, hblank_delta, pixel_clk;
524+
unsigned int fec_coeff, cdclk, vdsc_bpp;
525+
unsigned int link_clk, lanes;
526+
unsigned int hblank_rise;
529527

530528
h_active = crtc_state->hw.adjusted_mode.crtc_hdisplay;
531529
h_total = crtc_state->hw.adjusted_mode.crtc_htotal;
532-
v_total = crtc_state->hw.adjusted_mode.crtc_vtotal;
533530
pixel_clk = crtc_state->hw.adjusted_mode.crtc_clock;
534-
refresh_rate = crtc_state->hw.adjusted_mode.vrefresh;
535531
vdsc_bpp = crtc_state->dsc.compressed_bpp;
536532
cdclk = i915->cdclk.hw.cdclk;
537533
/* fec= 0.972261, using rounding multiplier of 1000000 */
538534
fec_coeff = 972261;
535+
link_clk = crtc_state->port_clock;
536+
lanes = crtc_state->lane_count;
539537

540538
drm_dbg_kms(&i915->drm, "h_active = %u link_clk = %u :"
541539
"lanes = %u vdsc_bpp = %u cdclk = %u\n",
542-
h_active, crtc_state->port_clock, crtc_state->lane_count,
543-
vdsc_bpp, cdclk);
540+
h_active, link_clk, lanes, vdsc_bpp, cdclk);
544541

545-
if (WARN_ON(!crtc_state->port_clock || !crtc_state->lane_count ||
546-
!crtc_state->dsc.compressed_bpp || !i915->cdclk.hw.cdclk))
542+
if (WARN_ON(!link_clk || !pixel_clk || !lanes || !vdsc_bpp || !cdclk))
547543
return 0;
548544

549-
link_clks_available = ((((h_total - h_active) *
550-
((crtc_state->port_clock * ROUNDING_FACTOR) /
551-
pixel_clk)) / ROUNDING_FACTOR) - 28);
552-
553-
link_clks_required = DIV_ROUND_UP(192000, (refresh_rate *
554-
v_total)) * ((48 /
555-
crtc_state->lane_count) + 2);
545+
link_clks_available = (h_total - h_active) * link_clk / pixel_clk - 28;
546+
link_clks_required = DIV_ROUND_UP(192000 * h_total, 1000 * pixel_clk) * (48 / lanes + 2);
556547

557548
if (link_clks_available > link_clks_required)
558549
hblank_delta = 32;
559550
else
560-
hblank_delta = DIV_ROUND_UP(((((5 * ROUNDING_FACTOR) /
561-
crtc_state->port_clock) + ((5 *
562-
ROUNDING_FACTOR) /
563-
cdclk)) * pixel_clk),
564-
ROUNDING_FACTOR);
565-
566-
tu_data = (pixel_clk * vdsc_bpp * 8) / ((crtc_state->port_clock *
567-
crtc_state->lane_count * fec_coeff) / 1000000);
568-
tu_line = (((h_active * crtc_state->port_clock * fec_coeff) /
569-
1000000) / (64 * pixel_clk));
570-
link_clks_active = (tu_line - 1) * 64 + tu_data;
551+
hblank_delta = DIV64_U64_ROUND_UP(mul_u32_u32(5 * (link_clk + cdclk), pixel_clk),
552+
mul_u32_u32(link_clk, cdclk));
571553

572-
hblank_rise = ((link_clks_active + 6 * DIV_ROUND_UP(link_clks_active,
573-
250) + 4) * ((pixel_clk * ROUNDING_FACTOR) /
574-
crtc_state->port_clock)) / ROUNDING_FACTOR;
554+
tu_data = div64_u64(mul_u32_u32(pixel_clk * vdsc_bpp * 8, 1000000),
555+
mul_u32_u32(link_clk * lanes, fec_coeff));
556+
tu_line = div64_u64(h_active * mul_u32_u32(link_clk, fec_coeff),
557+
mul_u32_u32(64 * pixel_clk, 1000000));
558+
link_clks_active = (tu_line - 1) * 64 + tu_data;
575559

576-
hblank_early_prog = h_active - hblank_rise + hblank_delta;
560+
hblank_rise = (link_clks_active + 6 * DIV_ROUND_UP(link_clks_active, 250) + 4) * pixel_clk / link_clk;
577561

578-
return hblank_early_prog;
562+
return h_active - hblank_rise + hblank_delta;
579563
}
580564

581-
static unsigned int get_sample_room_req_config(const struct intel_crtc_state *crtc_state)
565+
static unsigned int calc_samples_room(const struct intel_crtc_state *crtc_state)
582566
{
583567
unsigned int h_active, h_total, pixel_clk;
584-
unsigned int samples_room;
568+
unsigned int link_clk, lanes;
585569

586570
h_active = crtc_state->hw.adjusted_mode.hdisplay;
587571
h_total = crtc_state->hw.adjusted_mode.htotal;
588572
pixel_clk = crtc_state->hw.adjusted_mode.clock;
573+
link_clk = crtc_state->port_clock;
574+
lanes = crtc_state->lane_count;
589575

590-
samples_room = ((((h_total - h_active) * ((crtc_state->port_clock *
591-
ROUNDING_FACTOR) / pixel_clk)) /
592-
ROUNDING_FACTOR) - 12) / ((48 /
593-
crtc_state->lane_count) + 2);
594-
595-
return samples_room;
576+
return ((h_total - h_active) * link_clk - 12 * pixel_clk) /
577+
(pixel_clk * (48 / lanes + 2));
596578
}
597579

598580
static void enable_audio_dsc_wa(struct intel_encoder *encoder,
@@ -618,8 +600,7 @@ static void enable_audio_dsc_wa(struct intel_encoder *encoder,
618600
(crtc_state->hw.adjusted_mode.hdisplay >= 3840 &&
619601
crtc_state->hw.adjusted_mode.vdisplay >= 2160)) {
620602
/* Get hblank early enable value required */
621-
hblank_early_prog = get_hblank_early_enable_config(encoder,
622-
crtc_state);
603+
hblank_early_prog = calc_hblank_early_prog(encoder, crtc_state);
623604
if (hblank_early_prog < 32) {
624605
val &= ~HBLANK_START_COUNT_MASK(pipe);
625606
val |= HBLANK_START_COUNT(pipe, HBLANK_START_COUNT_32);
@@ -635,7 +616,7 @@ static void enable_audio_dsc_wa(struct intel_encoder *encoder,
635616
}
636617

637618
/* Get samples room value required */
638-
samples_room = get_sample_room_req_config(crtc_state);
619+
samples_room = calc_samples_room(crtc_state);
639620
if (samples_room < 3) {
640621
val &= ~NUMBER_SAMPLES_PER_LINE_MASK(pipe);
641622
val |= NUMBER_SAMPLES_PER_LINE(pipe, samples_room);

0 commit comments

Comments
 (0)