Skip to content

Commit 2f8d854

Browse files
committed
Merge tag 'drm-intel-next-2023-12-07' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
- Improve display debug msgs and other general clean-ups (Ville, Rahuul) - PSR fixes and improvements around selective fetch (Jouni, Ville) - Remove FBC restrictions for Xe2LPD displays (Vinod) - Skip some timing checks on BXT/GLK DSI transcoders (Ville) - DP MST Fixes (Ville) - Correct the input parameter on _intel_dsb_commit (heminhong) - Fix IP version of the display WAs (Bala) - DGFX uses direct VBT pin mapping (Clint) - Proper handling of bool on PIPE_CONF_CHECK macros (Jani) - Skip state verification with TBT-ALT mod (Mika Kahona) - General organization of display code for reusage with Xe (Jouni, Luca, Jani, Maarten) - Squelch a sparse warning (Jani) - Don't use "proxy" headers (Andy Shevchenko) - Use devm_gpiod_get() for all GPIOs (Hans) - Fix ADL+ tiled plane stride (Ville) - Use octal permissions in display debugfs (Jani) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZXIWG6bRYaUw0w6-@intel.com
2 parents 5edfd7d + 10690b8 commit 2f8d854

Some content is hidden

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

43 files changed

+750
-481
lines changed

drivers/gpu/drm/i915/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ i915-y += \
280280
display/intel_dsb.o \
281281
display/intel_dsb_buffer.o \
282282
display/intel_fb.o \
283+
display/intel_fb_bo.o \
283284
display/intel_fb_pin.o \
284285
display/intel_fbc.o \
285286
display/intel_fdi.o \
@@ -318,7 +319,8 @@ i915-$(CONFIG_ACPI) += \
318319
display/intel_acpi.o \
319320
display/intel_opregion.o
320321
i915-$(CONFIG_DRM_FBDEV_EMULATION) += \
321-
display/intel_fbdev.o
322+
display/intel_fbdev.o \
323+
display/intel_fbdev_fb.o
322324
i915-$(CONFIG_DEBUG_FS) += \
323325
display/intel_display_debugfs.o \
324326
display/intel_display_debugfs_params.o \

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2477,7 +2477,7 @@ static unsigned int ilk_plane_wm_max(const struct drm_i915_private *dev_priv,
24772477
* FIFO size is only half of the self
24782478
* refresh FIFO size on ILK/SNB.
24792479
*/
2480-
if (DISPLAY_VER(dev_priv) <= 6)
2480+
if (DISPLAY_VER(dev_priv) < 7)
24812481
fifo_size /= 2;
24822482
}
24832483

@@ -2818,7 +2818,7 @@ static int ilk_compute_pipe_wm(struct intel_atomic_state *state,
28182818
usable_level = dev_priv->display.wm.num_levels - 1;
28192819

28202820
/* ILK/SNB: LP2+ watermarks only w/o sprites */
2821-
if (DISPLAY_VER(dev_priv) <= 6 && pipe_wm->sprites_enabled)
2821+
if (DISPLAY_VER(dev_priv) < 7 && pipe_wm->sprites_enabled)
28222822
usable_level = 1;
28232823

28242824
/* ILK/SNB/IVB: LP1+ watermarks only w/o scaling */
@@ -2961,7 +2961,7 @@ static void ilk_wm_merge(struct drm_i915_private *dev_priv,
29612961
int last_enabled_level = num_levels - 1;
29622962

29632963
/* ILK/SNB/IVB: LP1+ watermarks only w/ single pipe */
2964-
if ((DISPLAY_VER(dev_priv) <= 6 || IS_IVYBRIDGE(dev_priv)) &&
2964+
if ((DISPLAY_VER(dev_priv) < 7 || IS_IVYBRIDGE(dev_priv)) &&
29652965
config->num_pipes_active > 1)
29662966
last_enabled_level = 0;
29672967

@@ -3060,7 +3060,7 @@ static void ilk_compute_wm_results(struct drm_i915_private *dev_priv,
30603060
* Always set WM_LP_SPRITE_EN when spr_val != 0, even if the
30613061
* level is disabled. Doing otherwise could cause underruns.
30623062
*/
3063-
if (DISPLAY_VER(dev_priv) <= 6 && r->spr_val) {
3063+
if (DISPLAY_VER(dev_priv) < 7 && r->spr_val) {
30643064
drm_WARN_ON(&dev_priv->drm, wm_lp != 1);
30653065
results->wm_lp_spr[wm_lp - 1] |= WM_LP_SPRITE_ENABLE;
30663066
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,6 +1440,13 @@ static void gen11_dsi_post_disable(struct intel_atomic_state *state,
14401440
static enum drm_mode_status gen11_dsi_mode_valid(struct drm_connector *connector,
14411441
struct drm_display_mode *mode)
14421442
{
1443+
struct drm_i915_private *i915 = to_i915(connector->dev);
1444+
enum drm_mode_status status;
1445+
1446+
status = intel_cpu_transcoder_mode_valid(i915, mode);
1447+
if (status != MODE_OK)
1448+
return status;
1449+
14431450
/* FIXME: DSC? */
14441451
return intel_dsi_mode_valid(connector, mode);
14451452
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2201,15 +2201,16 @@ static u8 map_ddc_pin(struct drm_i915_private *i915, u8 vbt_pin)
22012201
const u8 *ddc_pin_map;
22022202
int i, n_entries;
22032203

2204+
if (IS_DGFX(i915))
2205+
return vbt_pin;
2206+
22042207
if (INTEL_PCH_TYPE(i915) >= PCH_LNL || HAS_PCH_MTP(i915) ||
22052208
IS_ALDERLAKE_P(i915)) {
22062209
ddc_pin_map = adlp_ddc_pin_map;
22072210
n_entries = ARRAY_SIZE(adlp_ddc_pin_map);
22082211
} else if (IS_ALDERLAKE_S(i915)) {
22092212
ddc_pin_map = adls_ddc_pin_map;
22102213
n_entries = ARRAY_SIZE(adls_ddc_pin_map);
2211-
} else if (INTEL_PCH_TYPE(i915) >= PCH_DG1) {
2212-
return vbt_pin;
22132214
} else if (IS_ROCKETLAKE(i915) && INTEL_PCH_TYPE(i915) == PCH_TGP) {
22142215
ddc_pin_map = rkl_pch_tgp_ddc_pin_map;
22152216
n_entries = ARRAY_SIZE(rkl_pch_tgp_ddc_pin_map);

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ static int icl_pcode_read_qgv_point_info(struct drm_i915_private *dev_priv,
8787
return ret;
8888

8989
dclk = val & 0xffff;
90-
sp->dclk = DIV_ROUND_UP((16667 * dclk) + (DISPLAY_VER(dev_priv) > 11 ? 500 : 0), 1000);
90+
sp->dclk = DIV_ROUND_UP((16667 * dclk) + (DISPLAY_VER(dev_priv) >= 12 ? 500 : 0),
91+
1000);
9192
sp->t_rp = (val & 0xff0000) >> 16;
9293
sp->t_rcd = (val & 0xff000000) >> 24;
9394

@@ -480,7 +481,7 @@ static int tgl_get_bw_info(struct drm_i915_private *dev_priv, const struct intel
480481
if (num_channels < qi.max_numchannels && DISPLAY_VER(dev_priv) >= 12)
481482
qi.deinterleave = max(DIV_ROUND_UP(qi.deinterleave, 2), 1);
482483

483-
if (DISPLAY_VER(dev_priv) > 11 && num_channels > qi.max_numchannels)
484+
if (DISPLAY_VER(dev_priv) >= 12 && num_channels > qi.max_numchannels)
484485
drm_warn(&dev_priv->drm, "Number of channels exceeds max number of channels.");
485486
if (qi.max_numchannels != 0)
486487
num_channels = min_t(u8, num_channels, qi.max_numchannels);
@@ -897,7 +898,7 @@ static int icl_find_qgv_points(struct drm_i915_private *i915,
897898
unsigned int idx;
898899
unsigned int max_data_rate;
899900

900-
if (DISPLAY_VER(i915) > 11)
901+
if (DISPLAY_VER(i915) >= 12)
901902
idx = tgl_max_bw_index(i915, num_active_planes, i);
902903
else
903904
idx = icl_max_bw_index(i915, num_active_planes, i);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2597,7 +2597,7 @@ static int intel_vdsc_min_cdclk(const struct intel_crtc_state *crtc_state)
25972597
* Since PPC = 2 with bigjoiner
25982598
* => CDCLK >= compressed_bpp * Pixel clock / 2 * Bigjoiner Interface bits
25992599
*/
2600-
int bigjoiner_interface_bits = DISPLAY_VER(i915) > 13 ? 36 : 24;
2600+
int bigjoiner_interface_bits = DISPLAY_VER(i915) >= 14 ? 36 : 24;
26012601
int min_cdclk_bj =
26022602
(to_bpp_int_roundup(crtc_state->dsc.compressed_bpp_x16) *
26032603
pixel_clock) / (2 * bigjoiner_interface_bits);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,13 @@ intel_crt_mode_valid(struct drm_connector *connector,
348348
struct drm_device *dev = connector->dev;
349349
struct drm_i915_private *dev_priv = to_i915(dev);
350350
int max_dotclk = dev_priv->max_dotclk_freq;
351+
enum drm_mode_status status;
351352
int max_clock;
352353

354+
status = intel_cpu_transcoder_mode_valid(dev_priv, mode);
355+
if (status != MODE_OK)
356+
return status;
357+
353358
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
354359
return MODE_NO_DBLESCAN;
355360

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,15 @@ void intel_crtc_state_dump(const struct intel_crtc_state *pipe_config,
262262
drm_dbg_kms(&i915->drm, "fec: %s, enhanced framing: %s\n",
263263
str_enabled_disabled(pipe_config->fec_enable),
264264
str_enabled_disabled(pipe_config->enhanced_framing));
265+
266+
drm_dbg_kms(&i915->drm, "sdp split: %s\n",
267+
str_enabled_disabled(pipe_config->sdp_split_enable));
268+
269+
drm_dbg_kms(&i915->drm, "psr: %s, psr2: %s, panel replay: %s, selective fetch: %s\n",
270+
str_enabled_disabled(pipe_config->has_psr),
271+
str_enabled_disabled(pipe_config->has_psr2),
272+
str_enabled_disabled(pipe_config->has_panel_replay),
273+
str_enabled_disabled(pipe_config->enable_psr2_sel_fetch));
265274
}
266275

267276
drm_dbg_kms(&i915->drm, "framestart delay: %d, MSA timing delay: %d\n",

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

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
#include "intel_fb_pin.h"
2222
#include "intel_frontbuffer.h"
2323
#include "intel_psr.h"
24+
#include "intel_psr_regs.h"
2425
#include "skl_watermark.h"
2526

27+
#include "gem/i915_gem_object.h"
28+
2629
/* Cursor formats */
2730
static const u32 intel_cursor_formats[] = {
2831
DRM_FORMAT_ARGB8888,
@@ -33,11 +36,11 @@ static u32 intel_cursor_base(const struct intel_plane_state *plane_state)
3336
struct drm_i915_private *dev_priv =
3437
to_i915(plane_state->uapi.plane->dev);
3538
const struct drm_framebuffer *fb = plane_state->hw.fb;
36-
const struct drm_i915_gem_object *obj = intel_fb_obj(fb);
39+
struct drm_i915_gem_object *obj = intel_fb_obj(fb);
3740
u32 base;
3841

3942
if (DISPLAY_INFO(dev_priv)->cursor_needs_physical)
40-
base = sg_dma_address(obj->mm.pages->sgl);
43+
base = i915_gem_object_get_dma_address(obj, 0);
4144
else
4245
base = intel_plane_ggtt_offset(plane_state);
4346

@@ -484,6 +487,35 @@ static int i9xx_check_cursor(struct intel_crtc_state *crtc_state,
484487
return 0;
485488
}
486489

490+
static void i9xx_cursor_disable_sel_fetch_arm(struct intel_plane *plane,
491+
const struct intel_crtc_state *crtc_state)
492+
{
493+
struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
494+
enum pipe pipe = plane->pipe;
495+
496+
if (!crtc_state->enable_psr2_sel_fetch)
497+
return;
498+
499+
intel_de_write_fw(dev_priv, PLANE_SEL_FETCH_CTL(pipe, plane->id), 0);
500+
}
501+
502+
static void i9xx_cursor_update_sel_fetch_arm(struct intel_plane *plane,
503+
const struct intel_crtc_state *crtc_state,
504+
const struct intel_plane_state *plane_state)
505+
{
506+
struct drm_i915_private *i915 = to_i915(plane->base.dev);
507+
enum pipe pipe = plane->pipe;
508+
509+
if (!crtc_state->enable_psr2_sel_fetch)
510+
return;
511+
512+
if (drm_rect_height(&plane_state->psr2_sel_fetch_area) > 0)
513+
intel_de_write_fw(i915, PLANE_SEL_FETCH_CTL(pipe, plane->id),
514+
plane_state->ctl);
515+
else
516+
i9xx_cursor_disable_sel_fetch_arm(plane, crtc_state);
517+
}
518+
487519
/* TODO: split into noarm+arm pair */
488520
static void i9xx_cursor_update_arm(struct intel_plane *plane,
489521
const struct intel_crtc_state *crtc_state,
@@ -531,10 +563,10 @@ static void i9xx_cursor_update_arm(struct intel_plane *plane,
531563
skl_write_cursor_wm(plane, crtc_state);
532564

533565
if (plane_state)
534-
intel_psr2_program_plane_sel_fetch_arm(plane, crtc_state,
535-
plane_state);
566+
i9xx_cursor_update_sel_fetch_arm(plane, crtc_state,
567+
plane_state);
536568
else
537-
intel_psr2_disable_plane_sel_fetch_arm(plane, crtc_state);
569+
i9xx_cursor_disable_sel_fetch_arm(plane, crtc_state);
538570

539571
if (plane->cursor.base != base ||
540572
plane->cursor.size != fbc_ctl ||

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,15 @@ void intel_cx0_phy_set_signal_levels(struct intel_encoder *encoder,
415415
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
416416
const struct intel_ddi_buf_trans *trans;
417417
enum phy phy = intel_port_to_phy(i915, encoder->port);
418-
u8 owned_lane_mask = intel_cx0_get_owned_lane_mask(i915, encoder);
418+
u8 owned_lane_mask;
419419
intel_wakeref_t wakeref;
420420
int n_entries, ln;
421+
struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
422+
423+
if (intel_tc_port_in_tbt_alt_mode(dig_port))
424+
return;
425+
426+
owned_lane_mask = intel_cx0_get_owned_lane_mask(i915, encoder);
421427

422428
wakeref = intel_cx0_phy_transaction_begin(encoder);
423429

@@ -3136,6 +3142,9 @@ void intel_cx0pll_state_verify(struct intel_atomic_state *state,
31363142
encoder = intel_get_crtc_new_encoder(state, new_crtc_state);
31373143
phy = intel_port_to_phy(i915, encoder->port);
31383144

3145+
if (intel_tc_port_in_tbt_alt_mode(enc_to_dig_port(encoder)))
3146+
return;
3147+
31393148
intel_cx0pll_readout_hw_state(encoder, &mpll_hw_state);
31403149

31413150
if (intel_is_c10phy(i915, phy))

0 commit comments

Comments
 (0)