Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   1// SPDX-License-Identifier: MIT
   2/*
   3 * Copyright © 2022 Intel Corporation
   4 *
   5 * Read out the current hardware modeset state, and sanitize it to the current
   6 * state.
   7 */
   8
   9#include <drm/drm_atomic_uapi.h>
  10#include <drm/drm_atomic_state_helper.h>
  11
  12#include "i915_drv.h"
  13#include "i915_reg.h"
  14#include "i9xx_wm.h"
  15#include "intel_atomic.h"
  16#include "intel_bw.h"
  17#include "intel_color.h"
  18#include "intel_crtc.h"
  19#include "intel_crtc_state_dump.h"
  20#include "intel_ddi.h"
  21#include "intel_de.h"
  22#include "intel_display.h"
  23#include "intel_display_power.h"
  24#include "intel_display_types.h"
  25#include "intel_dmc.h"
  26#include "intel_fifo_underrun.h"
  27#include "intel_modeset_setup.h"
  28#include "intel_pch_display.h"
  29#include "intel_pmdemand.h"
  30#include "intel_tc.h"
  31#include "intel_vblank.h"
  32#include "intel_wm.h"
  33#include "skl_watermark.h"
  34
  35static void intel_crtc_disable_noatomic_begin(struct intel_crtc *crtc,
  36					      struct drm_modeset_acquire_ctx *ctx)
  37{
  38	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
  39	struct intel_crtc_state *crtc_state =
  40		to_intel_crtc_state(crtc->base.state);
  41	struct intel_plane *plane;
  42	struct drm_atomic_state *state;
  43	struct intel_crtc *temp_crtc;
  44	enum pipe pipe = crtc->pipe;
  45
  46	if (!crtc_state->hw.active)
  47		return;
  48
  49	for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
  50		const struct intel_plane_state *plane_state =
  51			to_intel_plane_state(plane->base.state);
  52
  53		if (plane_state->uapi.visible)
  54			intel_plane_disable_noatomic(crtc, plane);
  55	}
  56
  57	state = drm_atomic_state_alloc(&i915->drm);
  58	if (!state) {
  59		drm_dbg_kms(&i915->drm,
  60			    "failed to disable [CRTC:%d:%s], out of memory",
  61			    crtc->base.base.id, crtc->base.name);
  62		return;
  63	}
  64
  65	state->acquire_ctx = ctx;
  66	to_intel_atomic_state(state)->internal = true;
  67
  68	/* Everything's already locked, -EDEADLK can't happen. */
  69	for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc,
  70					 BIT(pipe) |
  71					 intel_crtc_bigjoiner_slave_pipes(crtc_state)) {
  72		struct intel_crtc_state *temp_crtc_state =
  73			intel_atomic_get_crtc_state(state, temp_crtc);
  74		int ret;
  75
  76		ret = drm_atomic_add_affected_connectors(state, &temp_crtc->base);
  77
  78		drm_WARN_ON(&i915->drm, IS_ERR(temp_crtc_state) || ret);
  79	}
  80
  81	i915->display.funcs.display->crtc_disable(to_intel_atomic_state(state), crtc);
  82
  83	drm_atomic_state_put(state);
  84
  85	drm_dbg_kms(&i915->drm,
  86		    "[CRTC:%d:%s] hw state adjusted, was enabled, now disabled\n",
  87		    crtc->base.base.id, crtc->base.name);
  88
  89	crtc->active = false;
  90	crtc->base.enabled = false;
  91
  92	if (crtc_state->shared_dpll)
  93		intel_unreference_shared_dpll_crtc(crtc,
  94						   crtc_state->shared_dpll,
  95						   &crtc_state->shared_dpll->state);
  96}
  97
  98static void set_encoder_for_connector(struct intel_connector *connector,
  99				      struct intel_encoder *encoder)
 100{
 101	struct drm_connector_state *conn_state = connector->base.state;
 102
 103	if (conn_state->crtc)
 104		drm_connector_put(&connector->base);
 105
 106	if (encoder) {
 107		conn_state->best_encoder = &encoder->base;
 108		conn_state->crtc = encoder->base.crtc;
 109		drm_connector_get(&connector->base);
 110	} else {
 111		conn_state->best_encoder = NULL;
 112		conn_state->crtc = NULL;
 113	}
 114}
 115
 116static void reset_encoder_connector_state(struct intel_encoder *encoder)
 117{
 118	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
 119	struct intel_pmdemand_state *pmdemand_state =
 120		to_intel_pmdemand_state(i915->display.pmdemand.obj.state);
 121	struct intel_connector *connector;
 122	struct drm_connector_list_iter conn_iter;
 123
 124	drm_connector_list_iter_begin(&i915->drm, &conn_iter);
 125	for_each_intel_connector_iter(connector, &conn_iter) {
 126		if (connector->base.encoder != &encoder->base)
 127			continue;
 128
 129		/* Clear the corresponding bit in pmdemand active phys mask */
 130		intel_pmdemand_update_phys_mask(i915, encoder,
 131						pmdemand_state, false);
 132
 133		set_encoder_for_connector(connector, NULL);
 134
 135		connector->base.dpms = DRM_MODE_DPMS_OFF;
 136		connector->base.encoder = NULL;
 137	}
 138	drm_connector_list_iter_end(&conn_iter);
 139}
 140
 141static void reset_crtc_encoder_state(struct intel_crtc *crtc)
 142{
 143	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 144	struct intel_encoder *encoder;
 145
 146	for_each_encoder_on_crtc(&i915->drm, &crtc->base, encoder) {
 147		reset_encoder_connector_state(encoder);
 148		encoder->base.crtc = NULL;
 149	}
 150}
 151
 152static void intel_crtc_disable_noatomic_complete(struct intel_crtc *crtc)
 153{
 154	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 155	struct intel_bw_state *bw_state =
 156		to_intel_bw_state(i915->display.bw.obj.state);
 157	struct intel_cdclk_state *cdclk_state =
 158		to_intel_cdclk_state(i915->display.cdclk.obj.state);
 159	struct intel_dbuf_state *dbuf_state =
 160		to_intel_dbuf_state(i915->display.dbuf.obj.state);
 161	struct intel_pmdemand_state *pmdemand_state =
 162		to_intel_pmdemand_state(i915->display.pmdemand.obj.state);
 163	struct intel_crtc_state *crtc_state =
 164		to_intel_crtc_state(crtc->base.state);
 165	enum pipe pipe = crtc->pipe;
 166
 167	__drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
 168	intel_crtc_free_hw_state(crtc_state);
 169	intel_crtc_state_reset(crtc_state, crtc);
 170
 171	reset_crtc_encoder_state(crtc);
 172
 173	intel_fbc_disable(crtc);
 174	intel_update_watermarks(i915);
 175
 176	intel_display_power_put_all_in_set(i915, &crtc->enabled_power_domains);
 177
 178	cdclk_state->min_cdclk[pipe] = 0;
 179	cdclk_state->min_voltage_level[pipe] = 0;
 180	cdclk_state->active_pipes &= ~BIT(pipe);
 181
 182	dbuf_state->active_pipes &= ~BIT(pipe);
 183
 184	bw_state->data_rate[pipe] = 0;
 185	bw_state->num_active_planes[pipe] = 0;
 186
 187	intel_pmdemand_update_port_clock(i915, pmdemand_state, pipe, 0);
 188}
 189
 190/*
 191 * Return all the pipes using a transcoder in @transcoder_mask.
 192 * For bigjoiner configs return only the bigjoiner master.
 193 */
 194static u8 get_transcoder_pipes(struct drm_i915_private *i915,
 195			       u8 transcoder_mask)
 196{
 197	struct intel_crtc *temp_crtc;
 198	u8 pipes = 0;
 199
 200	for_each_intel_crtc(&i915->drm, temp_crtc) {
 201		struct intel_crtc_state *temp_crtc_state =
 202			to_intel_crtc_state(temp_crtc->base.state);
 203
 204		if (temp_crtc_state->cpu_transcoder == INVALID_TRANSCODER)
 205			continue;
 206
 207		if (intel_crtc_is_bigjoiner_slave(temp_crtc_state))
 208			continue;
 209
 210		if (transcoder_mask & BIT(temp_crtc_state->cpu_transcoder))
 211			pipes |= BIT(temp_crtc->pipe);
 212	}
 213
 214	return pipes;
 215}
 216
 217/*
 218 * Return the port sync master and slave pipes linked to @crtc.
 219 * For bigjoiner configs return only the bigjoiner master pipes.
 220 */
 221static void get_portsync_pipes(struct intel_crtc *crtc,
 222			       u8 *master_pipe_mask, u8 *slave_pipes_mask)
 223{
 224	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 225	struct intel_crtc_state *crtc_state =
 226		to_intel_crtc_state(crtc->base.state);
 227	struct intel_crtc *master_crtc;
 228	struct intel_crtc_state *master_crtc_state;
 229	enum transcoder master_transcoder;
 230
 231	if (!is_trans_port_sync_mode(crtc_state)) {
 232		*master_pipe_mask = BIT(crtc->pipe);
 233		*slave_pipes_mask = 0;
 234
 235		return;
 236	}
 237
 238	if (is_trans_port_sync_master(crtc_state))
 239		master_transcoder = crtc_state->cpu_transcoder;
 240	else
 241		master_transcoder = crtc_state->master_transcoder;
 242
 243	*master_pipe_mask = get_transcoder_pipes(i915, BIT(master_transcoder));
 244	drm_WARN_ON(&i915->drm, !is_power_of_2(*master_pipe_mask));
 245
 246	master_crtc = intel_crtc_for_pipe(i915, ffs(*master_pipe_mask) - 1);
 247	master_crtc_state = to_intel_crtc_state(master_crtc->base.state);
 248	*slave_pipes_mask = get_transcoder_pipes(i915, master_crtc_state->sync_mode_slaves_mask);
 249}
 250
 251static u8 get_bigjoiner_slave_pipes(struct drm_i915_private *i915, u8 master_pipes_mask)
 252{
 253	struct intel_crtc *master_crtc;
 254	u8 pipes = 0;
 255
 256	for_each_intel_crtc_in_pipe_mask(&i915->drm, master_crtc, master_pipes_mask) {
 257		struct intel_crtc_state *master_crtc_state =
 258			to_intel_crtc_state(master_crtc->base.state);
 259
 260		pipes |= intel_crtc_bigjoiner_slave_pipes(master_crtc_state);
 261	}
 262
 263	return pipes;
 264}
 265
 266static void intel_crtc_disable_noatomic(struct intel_crtc *crtc,
 267					struct drm_modeset_acquire_ctx *ctx)
 268{
 269	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 270	u8 portsync_master_mask;
 271	u8 portsync_slaves_mask;
 272	u8 bigjoiner_slaves_mask;
 273	struct intel_crtc *temp_crtc;
 274
 275	/* TODO: Add support for MST */
 276	get_portsync_pipes(crtc, &portsync_master_mask, &portsync_slaves_mask);
 277	bigjoiner_slaves_mask = get_bigjoiner_slave_pipes(i915,
 278							  portsync_master_mask |
 279							  portsync_slaves_mask);
 280
 281	drm_WARN_ON(&i915->drm,
 282		    portsync_master_mask & portsync_slaves_mask ||
 283		    portsync_master_mask & bigjoiner_slaves_mask ||
 284		    portsync_slaves_mask & bigjoiner_slaves_mask);
 285
 286	for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, bigjoiner_slaves_mask)
 287		intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
 288
 289	for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_slaves_mask)
 290		intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
 291
 292	for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc, portsync_master_mask)
 293		intel_crtc_disable_noatomic_begin(temp_crtc, ctx);
 294
 295	for_each_intel_crtc_in_pipe_mask(&i915->drm, temp_crtc,
 296					 bigjoiner_slaves_mask |
 297					 portsync_slaves_mask |
 298					 portsync_master_mask)
 299		intel_crtc_disable_noatomic_complete(temp_crtc);
 300}
 301
 302static void intel_modeset_update_connector_atomic_state(struct drm_i915_private *i915)
 303{
 304	struct intel_connector *connector;
 305	struct drm_connector_list_iter conn_iter;
 306
 307	drm_connector_list_iter_begin(&i915->drm, &conn_iter);
 308	for_each_intel_connector_iter(connector, &conn_iter) {
 309		struct drm_connector_state *conn_state = connector->base.state;
 310		struct intel_encoder *encoder =
 311			to_intel_encoder(connector->base.encoder);
 312
 313		set_encoder_for_connector(connector, encoder);
 314
 315		if (encoder) {
 316			struct intel_crtc *crtc =
 317				to_intel_crtc(encoder->base.crtc);
 318			const struct intel_crtc_state *crtc_state =
 319				to_intel_crtc_state(crtc->base.state);
 320
 321			conn_state->max_bpc = (crtc_state->pipe_bpp ?: 24) / 3;
 322		}
 323	}
 324	drm_connector_list_iter_end(&conn_iter);
 325}
 326
 327static void intel_crtc_copy_hw_to_uapi_state(struct intel_crtc_state *crtc_state)
 328{
 329	if (intel_crtc_is_bigjoiner_slave(crtc_state))
 330		return;
 331
 332	crtc_state->uapi.enable = crtc_state->hw.enable;
 333	crtc_state->uapi.active = crtc_state->hw.active;
 334	drm_WARN_ON(crtc_state->uapi.crtc->dev,
 335		    drm_atomic_set_mode_for_crtc(&crtc_state->uapi, &crtc_state->hw.mode) < 0);
 336
 337	crtc_state->uapi.adjusted_mode = crtc_state->hw.adjusted_mode;
 338	crtc_state->uapi.scaling_filter = crtc_state->hw.scaling_filter;
 339
 340	/* assume 1:1 mapping */
 341	drm_property_replace_blob(&crtc_state->hw.degamma_lut,
 342				  crtc_state->pre_csc_lut);
 343	drm_property_replace_blob(&crtc_state->hw.gamma_lut,
 344				  crtc_state->post_csc_lut);
 345
 346	drm_property_replace_blob(&crtc_state->uapi.degamma_lut,
 347				  crtc_state->hw.degamma_lut);
 348	drm_property_replace_blob(&crtc_state->uapi.gamma_lut,
 349				  crtc_state->hw.gamma_lut);
 350	drm_property_replace_blob(&crtc_state->uapi.ctm,
 351				  crtc_state->hw.ctm);
 352}
 353
 354static void
 355intel_sanitize_plane_mapping(struct drm_i915_private *i915)
 356{
 357	struct intel_crtc *crtc;
 358
 359	if (DISPLAY_VER(i915) >= 4)
 360		return;
 361
 362	for_each_intel_crtc(&i915->drm, crtc) {
 363		struct intel_plane *plane =
 364			to_intel_plane(crtc->base.primary);
 365		struct intel_crtc *plane_crtc;
 366		enum pipe pipe;
 367
 368		if (!plane->get_hw_state(plane, &pipe))
 369			continue;
 370
 371		if (pipe == crtc->pipe)
 372			continue;
 373
 374		drm_dbg_kms(&i915->drm,
 375			    "[PLANE:%d:%s] attached to the wrong pipe, disabling plane\n",
 376			    plane->base.base.id, plane->base.name);
 377
 378		plane_crtc = intel_crtc_for_pipe(i915, pipe);
 379		intel_plane_disable_noatomic(plane_crtc, plane);
 380	}
 381}
 382
 383static bool intel_crtc_has_encoders(struct intel_crtc *crtc)
 384{
 385	struct drm_device *dev = crtc->base.dev;
 386	struct intel_encoder *encoder;
 387
 388	for_each_encoder_on_crtc(dev, &crtc->base, encoder)
 389		return true;
 390
 391	return false;
 392}
 393
 394static bool intel_crtc_needs_link_reset(struct intel_crtc *crtc)
 395{
 396	struct drm_device *dev = crtc->base.dev;
 397	struct intel_encoder *encoder;
 398
 399	for_each_encoder_on_crtc(dev, &crtc->base, encoder) {
 400		struct intel_digital_port *dig_port = enc_to_dig_port(encoder);
 401
 402		if (dig_port && intel_tc_port_link_needs_reset(dig_port))
 403			return true;
 404	}
 405
 406	return false;
 407}
 408
 409static struct intel_connector *intel_encoder_find_connector(struct intel_encoder *encoder)
 410{
 411	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
 412	struct drm_connector_list_iter conn_iter;
 413	struct intel_connector *connector;
 414	struct intel_connector *found_connector = NULL;
 415
 416	drm_connector_list_iter_begin(&i915->drm, &conn_iter);
 417	for_each_intel_connector_iter(connector, &conn_iter) {
 418		if (&encoder->base == connector->base.encoder) {
 419			found_connector = connector;
 420			break;
 421		}
 422	}
 423	drm_connector_list_iter_end(&conn_iter);
 424
 425	return found_connector;
 426}
 427
 428static void intel_sanitize_fifo_underrun_reporting(const struct intel_crtc_state *crtc_state)
 429{
 430	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
 431	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 432
 433	/*
 434	 * We start out with underrun reporting disabled on active
 435	 * pipes to avoid races.
 436	 *
 437	 * Also on gmch platforms we dont have any hardware bits to
 438	 * disable the underrun reporting. Which means we need to start
 439	 * out with underrun reporting disabled also on inactive pipes,
 440	 * since otherwise we'll complain about the garbage we read when
 441	 * e.g. coming up after runtime pm.
 442	 *
 443	 * No protection against concurrent access is required - at
 444	 * worst a fifo underrun happens which also sets this to false.
 445	 */
 446	intel_init_fifo_underrun_reporting(i915, crtc,
 447					   !crtc_state->hw.active &&
 448					   !HAS_GMCH(i915));
 449}
 450
 451static bool intel_sanitize_crtc(struct intel_crtc *crtc,
 452				struct drm_modeset_acquire_ctx *ctx)
 453{
 454	struct drm_i915_private *i915 = to_i915(crtc->base.dev);
 455	struct intel_crtc_state *crtc_state = to_intel_crtc_state(crtc->base.state);
 456	bool needs_link_reset;
 457
 458	if (crtc_state->hw.active) {
 459		struct intel_plane *plane;
 460
 461		/* Disable everything but the primary plane */
 462		for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
 463			const struct intel_plane_state *plane_state =
 464				to_intel_plane_state(plane->base.state);
 465
 466			if (plane_state->uapi.visible &&
 467			    plane->base.type != DRM_PLANE_TYPE_PRIMARY)
 468				intel_plane_disable_noatomic(crtc, plane);
 469		}
 470
 471		/* Disable any background color/etc. set by the BIOS */
 472		intel_color_commit_noarm(crtc_state);
 473		intel_color_commit_arm(crtc_state);
 474	}
 475
 476	if (!crtc_state->hw.active ||
 477	    intel_crtc_is_bigjoiner_slave(crtc_state))
 478		return false;
 479
 480	needs_link_reset = intel_crtc_needs_link_reset(crtc);
 481
 482	/*
 483	 * Adjust the state of the output pipe according to whether we have
 484	 * active connectors/encoders.
 485	 */
 486	if (!needs_link_reset && intel_crtc_has_encoders(crtc))
 487		return false;
 488
 489	intel_crtc_disable_noatomic(crtc, ctx);
 490
 491	/*
 492	 * The HPD state on other active/disconnected TC ports may be stuck in
 493	 * the connected state until this port is disabled and a ~10ms delay has
 494	 * passed, wait here for that so that sanitizing other CRTCs will see the
 495	 * up-to-date HPD state.
 496	 */
 497	if (needs_link_reset)
 498		msleep(20);
 499
 500	return true;
 501}
 502
 503static void intel_sanitize_all_crtcs(struct drm_i915_private *i915,
 504				     struct drm_modeset_acquire_ctx *ctx)
 505{
 506	struct intel_crtc *crtc;
 507	u32 crtcs_forced_off = 0;
 508
 509	/*
 510	 * An active and disconnected TypeC port prevents the HPD live state
 511	 * to get updated on other active/disconnected TypeC ports, so after
 512	 * a port gets disabled the CRTCs using other TypeC ports must be
 513	 * rechecked wrt. their link status.
 514	 */
 515	for (;;) {
 516		u32 old_mask = crtcs_forced_off;
 517
 518		for_each_intel_crtc(&i915->drm, crtc) {
 519			u32 crtc_mask = drm_crtc_mask(&crtc->base);
 520
 521			if (crtcs_forced_off & crtc_mask)
 522				continue;
 523
 524			if (intel_sanitize_crtc(crtc, ctx))
 525				crtcs_forced_off |= crtc_mask;
 526		}
 527		if (crtcs_forced_off == old_mask)
 528			break;
 529	}
 530
 531	for_each_intel_crtc(&i915->drm, crtc) {
 532		struct intel_crtc_state *crtc_state =
 533			to_intel_crtc_state(crtc->base.state);
 534
 535		intel_crtc_state_dump(crtc_state, NULL, "setup_hw_state");
 536	}
 537}
 538
 539static bool has_bogus_dpll_config(const struct intel_crtc_state *crtc_state)
 540{
 541	struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
 542
 543	/*
 544	 * Some SNB BIOSen (eg. ASUS K53SV) are known to misprogram
 545	 * the hardware when a high res displays plugged in. DPLL P
 546	 * divider is zero, and the pipe timings are bonkers. We'll
 547	 * try to disable everything in that case.
 548	 *
 549	 * FIXME would be nice to be able to sanitize this state
 550	 * without several WARNs, but for now let's take the easy
 551	 * road.
 552	 */
 553	return IS_SANDYBRIDGE(i915) &&
 554		crtc_state->hw.active &&
 555		crtc_state->shared_dpll &&
 556		crtc_state->port_clock == 0;
 557}
 558
 559static void intel_sanitize_encoder(struct intel_encoder *encoder)
 560{
 561	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
 562	struct intel_connector *connector;
 563	struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
 564	struct intel_crtc_state *crtc_state = crtc ?
 565		to_intel_crtc_state(crtc->base.state) : NULL;
 566	struct intel_pmdemand_state *pmdemand_state =
 567		to_intel_pmdemand_state(i915->display.pmdemand.obj.state);
 568
 569	/*
 570	 * We need to check both for a crtc link (meaning that the encoder is
 571	 * active and trying to read from a pipe) and the pipe itself being
 572	 * active.
 573	 */
 574	bool has_active_crtc = crtc_state &&
 575		crtc_state->hw.active;
 576
 577	if (crtc_state && has_bogus_dpll_config(crtc_state)) {
 578		drm_dbg_kms(&i915->drm,
 579			    "BIOS has misprogrammed the hardware. Disabling pipe %c\n",
 580			    pipe_name(crtc->pipe));
 581		has_active_crtc = false;
 582	}
 583
 584	connector = intel_encoder_find_connector(encoder);
 585	if (connector && !has_active_crtc) {
 586		drm_dbg_kms(&i915->drm,
 587			    "[ENCODER:%d:%s] has active connectors but no active pipe!\n",
 588			    encoder->base.base.id,
 589			    encoder->base.name);
 590
 591		/* Clear the corresponding bit in pmdemand active phys mask */
 592		intel_pmdemand_update_phys_mask(i915, encoder,
 593						pmdemand_state, false);
 594
 595		/*
 596		 * Connector is active, but has no active pipe. This is fallout
 597		 * from our resume register restoring. Disable the encoder
 598		 * manually again.
 599		 */
 600		if (crtc_state) {
 601			struct drm_encoder *best_encoder;
 602
 603			drm_dbg_kms(&i915->drm,
 604				    "[ENCODER:%d:%s] manually disabled\n",
 605				    encoder->base.base.id,
 606				    encoder->base.name);
 607
 608			/* avoid oopsing in case the hooks consult best_encoder */
 609			best_encoder = connector->base.state->best_encoder;
 610			connector->base.state->best_encoder = &encoder->base;
 611
 612			/* FIXME NULL atomic state passed! */
 613			if (encoder->disable)
 614				encoder->disable(NULL, encoder, crtc_state,
 615						 connector->base.state);
 616			if (encoder->post_disable)
 617				encoder->post_disable(NULL, encoder, crtc_state,
 618						      connector->base.state);
 619
 620			connector->base.state->best_encoder = best_encoder;
 621		}
 622		encoder->base.crtc = NULL;
 623
 624		/*
 625		 * Inconsistent output/port/pipe state happens presumably due to
 626		 * a bug in one of the get_hw_state functions. Or someplace else
 627		 * in our code, like the register restore mess on resume. Clamp
 628		 * things to off as a safer default.
 629		 */
 630		connector->base.dpms = DRM_MODE_DPMS_OFF;
 631		connector->base.encoder = NULL;
 632	}
 633
 634	/* notify opregion of the sanitized encoder state */
 635	intel_opregion_notify_encoder(encoder, connector && has_active_crtc);
 636
 637	if (HAS_DDI(i915))
 638		intel_ddi_sanitize_encoder_pll_mapping(encoder);
 639}
 640
 641/* FIXME read out full plane state for all planes */
 642static void readout_plane_state(struct drm_i915_private *i915)
 643{
 644	struct intel_plane *plane;
 645	struct intel_crtc *crtc;
 646
 647	for_each_intel_plane(&i915->drm, plane) {
 648		struct intel_plane_state *plane_state =
 649			to_intel_plane_state(plane->base.state);
 650		struct intel_crtc_state *crtc_state;
 651		enum pipe pipe = PIPE_A;
 652		bool visible;
 653
 654		visible = plane->get_hw_state(plane, &pipe);
 655
 656		crtc = intel_crtc_for_pipe(i915, pipe);
 657		crtc_state = to_intel_crtc_state(crtc->base.state);
 658
 659		intel_set_plane_visible(crtc_state, plane_state, visible);
 660
 661		drm_dbg_kms(&i915->drm,
 662			    "[PLANE:%d:%s] hw state readout: %s, pipe %c\n",
 663			    plane->base.base.id, plane->base.name,
 664			    str_enabled_disabled(visible), pipe_name(pipe));
 665	}
 666
 667	for_each_intel_crtc(&i915->drm, crtc) {
 668		struct intel_crtc_state *crtc_state =
 669			to_intel_crtc_state(crtc->base.state);
 670
 671		intel_plane_fixup_bitmasks(crtc_state);
 672	}
 673}
 674
 675static void intel_modeset_readout_hw_state(struct drm_i915_private *i915)
 676{
 677	struct intel_cdclk_state *cdclk_state =
 678		to_intel_cdclk_state(i915->display.cdclk.obj.state);
 679	struct intel_dbuf_state *dbuf_state =
 680		to_intel_dbuf_state(i915->display.dbuf.obj.state);
 681	struct intel_pmdemand_state *pmdemand_state =
 682		to_intel_pmdemand_state(i915->display.pmdemand.obj.state);
 683	enum pipe pipe;
 684	struct intel_crtc *crtc;
 685	struct intel_encoder *encoder;
 686	struct intel_connector *connector;
 687	struct drm_connector_list_iter conn_iter;
 688	u8 active_pipes = 0;
 689
 690	for_each_intel_crtc(&i915->drm, crtc) {
 691		struct intel_crtc_state *crtc_state =
 692			to_intel_crtc_state(crtc->base.state);
 693
 694		__drm_atomic_helper_crtc_destroy_state(&crtc_state->uapi);
 695		intel_crtc_free_hw_state(crtc_state);
 696		intel_crtc_state_reset(crtc_state, crtc);
 697
 698		intel_crtc_get_pipe_config(crtc_state);
 699
 700		crtc_state->hw.enable = crtc_state->hw.active;
 701
 702		crtc->base.enabled = crtc_state->hw.enable;
 703		crtc->active = crtc_state->hw.active;
 704
 705		if (crtc_state->hw.active)
 706			active_pipes |= BIT(crtc->pipe);
 707
 708		drm_dbg_kms(&i915->drm,
 709			    "[CRTC:%d:%s] hw state readout: %s\n",
 710			    crtc->base.base.id, crtc->base.name,
 711			    str_enabled_disabled(crtc_state->hw.active));
 712	}
 713
 714	cdclk_state->active_pipes = active_pipes;
 715	dbuf_state->active_pipes = active_pipes;
 716
 717	readout_plane_state(i915);
 718
 719	for_each_intel_encoder(&i915->drm, encoder) {
 720		struct intel_crtc_state *crtc_state = NULL;
 721
 722		pipe = 0;
 723
 724		if (encoder->get_hw_state(encoder, &pipe)) {
 725			crtc = intel_crtc_for_pipe(i915, pipe);
 726			crtc_state = to_intel_crtc_state(crtc->base.state);
 727
 728			encoder->base.crtc = &crtc->base;
 729			intel_encoder_get_config(encoder, crtc_state);
 730
 731			/* read out to slave crtc as well for bigjoiner */
 732			if (crtc_state->bigjoiner_pipes) {
 733				struct intel_crtc *slave_crtc;
 734
 735				/* encoder should read be linked to bigjoiner master */
 736				WARN_ON(intel_crtc_is_bigjoiner_slave(crtc_state));
 737
 738				for_each_intel_crtc_in_pipe_mask(&i915->drm, slave_crtc,
 739								 intel_crtc_bigjoiner_slave_pipes(crtc_state)) {
 740					struct intel_crtc_state *slave_crtc_state;
 741
 742					slave_crtc_state = to_intel_crtc_state(slave_crtc->base.state);
 743					intel_encoder_get_config(encoder, slave_crtc_state);
 744				}
 745			}
 746
 747			intel_pmdemand_update_phys_mask(i915, encoder,
 748							pmdemand_state,
 749							true);
 750		} else {
 751			intel_pmdemand_update_phys_mask(i915, encoder,
 752							pmdemand_state,
 753							false);
 754
 755			encoder->base.crtc = NULL;
 756		}
 757
 758		if (encoder->sync_state)
 759			encoder->sync_state(encoder, crtc_state);
 760
 761		drm_dbg_kms(&i915->drm,
 762			    "[ENCODER:%d:%s] hw state readout: %s, pipe %c\n",
 763			    encoder->base.base.id, encoder->base.name,
 764			    str_enabled_disabled(encoder->base.crtc),
 765			    pipe_name(pipe));
 766	}
 767
 768	intel_dpll_readout_hw_state(i915);
 769
 770	drm_connector_list_iter_begin(&i915->drm, &conn_iter);
 771	for_each_intel_connector_iter(connector, &conn_iter) {
 772		struct intel_crtc_state *crtc_state = NULL;
 773
 774		if (connector->get_hw_state(connector)) {
 775			struct intel_crtc *crtc;
 776
 777			connector->base.dpms = DRM_MODE_DPMS_ON;
 778
 779			encoder = intel_attached_encoder(connector);
 780			connector->base.encoder = &encoder->base;
 781
 782			crtc = to_intel_crtc(encoder->base.crtc);
 783			crtc_state = crtc ? to_intel_crtc_state(crtc->base.state) : NULL;
 784
 785			if (crtc_state && crtc_state->hw.active) {
 786				/*
 787				 * This has to be done during hardware readout
 788				 * because anything calling .crtc_disable may
 789				 * rely on the connector_mask being accurate.
 790				 */
 791				crtc_state->uapi.connector_mask |=
 792					drm_connector_mask(&connector->base);
 793				crtc_state->uapi.encoder_mask |=
 794					drm_encoder_mask(&encoder->base);
 795			}
 796		} else {
 797			connector->base.dpms = DRM_MODE_DPMS_OFF;
 798			connector->base.encoder = NULL;
 799		}
 800
 801		if (connector->sync_state)
 802			connector->sync_state(connector, crtc_state);
 803
 804		drm_dbg_kms(&i915->drm,
 805			    "[CONNECTOR:%d:%s] hw state readout: %s\n",
 806			    connector->base.base.id, connector->base.name,
 807			    str_enabled_disabled(connector->base.encoder));
 808	}
 809	drm_connector_list_iter_end(&conn_iter);
 810
 811	for_each_intel_crtc(&i915->drm, crtc) {
 812		struct intel_bw_state *bw_state =
 813			to_intel_bw_state(i915->display.bw.obj.state);
 814		struct intel_crtc_state *crtc_state =
 815			to_intel_crtc_state(crtc->base.state);
 816		struct intel_plane *plane;
 817		int min_cdclk = 0;
 818
 819		if (crtc_state->hw.active) {
 820			/*
 821			 * The initial mode needs to be set in order to keep
 822			 * the atomic core happy. It wants a valid mode if the
 823			 * crtc's enabled, so we do the above call.
 824			 *
 825			 * But we don't set all the derived state fully, hence
 826			 * set a flag to indicate that a full recalculation is
 827			 * needed on the next commit.
 828			 */
 829			crtc_state->inherited = true;
 830
 831			intel_crtc_update_active_timings(crtc_state,
 832							 crtc_state->vrr.enable);
 833
 834			intel_crtc_copy_hw_to_uapi_state(crtc_state);
 835		}
 836
 837		for_each_intel_plane_on_crtc(&i915->drm, crtc, plane) {
 838			const struct intel_plane_state *plane_state =
 839				to_intel_plane_state(plane->base.state);
 840
 841			/*
 842			 * FIXME don't have the fb yet, so can't
 843			 * use intel_plane_data_rate() :(
 844			 */
 845			if (plane_state->uapi.visible)
 846				crtc_state->data_rate[plane->id] =
 847					4 * crtc_state->pixel_rate;
 848			/*
 849			 * FIXME don't have the fb yet, so can't
 850			 * use plane->min_cdclk() :(
 851			 */
 852			if (plane_state->uapi.visible && plane->min_cdclk) {
 853				if (crtc_state->double_wide || DISPLAY_VER(i915) >= 10)
 854					crtc_state->min_cdclk[plane->id] =
 855						DIV_ROUND_UP(crtc_state->pixel_rate, 2);
 856				else
 857					crtc_state->min_cdclk[plane->id] =
 858						crtc_state->pixel_rate;
 859			}
 860			drm_dbg_kms(&i915->drm,
 861				    "[PLANE:%d:%s] min_cdclk %d kHz\n",
 862				    plane->base.base.id, plane->base.name,
 863				    crtc_state->min_cdclk[plane->id]);
 864		}
 865
 866		if (crtc_state->hw.active) {
 867			min_cdclk = intel_crtc_compute_min_cdclk(crtc_state);
 868			if (drm_WARN_ON(&i915->drm, min_cdclk < 0))
 869				min_cdclk = 0;
 870		}
 871
 872		cdclk_state->min_cdclk[crtc->pipe] = min_cdclk;
 873		cdclk_state->min_voltage_level[crtc->pipe] =
 874			crtc_state->min_voltage_level;
 875
 876		intel_pmdemand_update_port_clock(i915, pmdemand_state, pipe,
 877						 crtc_state->port_clock);
 878
 879		intel_bw_crtc_update(bw_state, crtc_state);
 880	}
 881
 882	intel_pmdemand_init_pmdemand_params(i915, pmdemand_state);
 883}
 884
 885static void
 886get_encoder_power_domains(struct drm_i915_private *i915)
 887{
 888	struct intel_encoder *encoder;
 889
 890	for_each_intel_encoder(&i915->drm, encoder) {
 891		struct intel_crtc_state *crtc_state;
 892
 893		if (!encoder->get_power_domains)
 894			continue;
 895
 896		/*
 897		 * MST-primary and inactive encoders don't have a crtc state
 898		 * and neither of these require any power domain references.
 899		 */
 900		if (!encoder->base.crtc)
 901			continue;
 902
 903		crtc_state = to_intel_crtc_state(encoder->base.crtc->state);
 904		encoder->get_power_domains(encoder, crtc_state);
 905	}
 906}
 907
 908static void intel_early_display_was(struct drm_i915_private *i915)
 909{
 910	/*
 911	 * Display WA #1185 WaDisableDARBFClkGating:glk,icl,ehl,tgl
 912	 * Also known as Wa_14010480278.
 913	 */
 914	if (IS_DISPLAY_VER(i915, 10, 12))
 915		intel_de_rmw(i915, GEN9_CLKGATE_DIS_0, 0, DARBF_GATING_DIS);
 916
 917	/*
 918	 * WaRsPkgCStateDisplayPMReq:hsw
 919	 * System hang if this isn't done before disabling all planes!
 920	 */
 921	if (IS_HASWELL(i915))
 922		intel_de_rmw(i915, CHICKEN_PAR1_1, 0, FORCE_ARB_IDLE_PLANES);
 923
 924	if (IS_KABYLAKE(i915) || IS_COFFEELAKE(i915) || IS_COMETLAKE(i915)) {
 925		/* Display WA #1142:kbl,cfl,cml */
 926		intel_de_rmw(i915, CHICKEN_PAR1_1,
 927			     KBL_ARB_FILL_SPARE_22, KBL_ARB_FILL_SPARE_22);
 928		intel_de_rmw(i915, CHICKEN_MISC_2,
 929			     KBL_ARB_FILL_SPARE_13 | KBL_ARB_FILL_SPARE_14,
 930			     KBL_ARB_FILL_SPARE_14);
 931	}
 932}
 933
 934void intel_modeset_setup_hw_state(struct drm_i915_private *i915,
 935				  struct drm_modeset_acquire_ctx *ctx)
 936{
 937	struct intel_encoder *encoder;
 938	struct intel_crtc *crtc;
 939	intel_wakeref_t wakeref;
 940
 941	wakeref = intel_display_power_get(i915, POWER_DOMAIN_INIT);
 942
 943	intel_early_display_was(i915);
 944	intel_modeset_readout_hw_state(i915);
 945
 946	/* HW state is read out, now we need to sanitize this mess. */
 947	get_encoder_power_domains(i915);
 948
 949	intel_pch_sanitize(i915);
 950
 951	/*
 952	 * intel_sanitize_plane_mapping() may need to do vblank
 953	 * waits, so we need vblank interrupts restored beforehand.
 954	 */
 955	for_each_intel_crtc(&i915->drm, crtc) {
 956		struct intel_crtc_state *crtc_state =
 957			to_intel_crtc_state(crtc->base.state);
 958
 959		intel_sanitize_fifo_underrun_reporting(crtc_state);
 960
 961		drm_crtc_vblank_reset(&crtc->base);
 962
 963		if (crtc_state->hw.active) {
 964			intel_dmc_enable_pipe(i915, crtc->pipe);
 965			intel_crtc_vblank_on(crtc_state);
 966		}
 967	}
 968
 969	intel_fbc_sanitize(i915);
 970
 971	intel_sanitize_plane_mapping(i915);
 972
 973	for_each_intel_encoder(&i915->drm, encoder)
 974		intel_sanitize_encoder(encoder);
 975
 976	/*
 977	 * Sanitizing CRTCs needs their connector atomic state to be
 978	 * up-to-date, so ensure that already here.
 979	 */
 980	intel_modeset_update_connector_atomic_state(i915);
 981
 982	intel_sanitize_all_crtcs(i915, ctx);
 983
 984	intel_dpll_sanitize_state(i915);
 985
 986	intel_wm_get_hw_state(i915);
 987
 988	for_each_intel_crtc(&i915->drm, crtc) {
 989		struct intel_crtc_state *crtc_state =
 990			to_intel_crtc_state(crtc->base.state);
 991		struct intel_power_domain_mask put_domains;
 992
 993		intel_modeset_get_crtc_power_domains(crtc_state, &put_domains);
 994		if (drm_WARN_ON(&i915->drm, !bitmap_empty(put_domains.bits, POWER_DOMAIN_NUM)))
 995			intel_modeset_put_crtc_power_domains(crtc, &put_domains);
 996	}
 997
 998	intel_display_power_put(i915, POWER_DOMAIN_INIT, wakeref);
 999
1000	intel_power_domains_sanitize_state(i915);
1001}