Subversion Repositories Kolibri OS

Rev

Rev 6937 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6937 Rev 7144
Line 282... Line 282...
282
	if (IS_BROADWELL(dev))
282
	if (IS_BROADWELL(dev))
283
		gen8_irq_power_well_post_enable(dev_priv,
283
		gen8_irq_power_well_post_enable(dev_priv,
284
						1 << PIPE_C | 1 << PIPE_B);
284
						1 << PIPE_C | 1 << PIPE_B);
285
}
285
}
Line -... Line 286...
-
 
286
 
-
 
287
static void hsw_power_well_pre_disable(struct drm_i915_private *dev_priv)
-
 
288
{
-
 
289
	if (IS_BROADWELL(dev_priv))
-
 
290
		gen8_irq_power_well_pre_disable(dev_priv,
-
 
291
						1 << PIPE_C | 1 << PIPE_B);
-
 
292
}
286
 
293
 
287
static void skl_power_well_post_enable(struct drm_i915_private *dev_priv,
294
static void skl_power_well_post_enable(struct drm_i915_private *dev_priv,
288
				       struct i915_power_well *power_well)
295
				       struct i915_power_well *power_well)
289
{
296
{
Line 307... Line 314...
307
		gen8_irq_power_well_post_enable(dev_priv,
314
		gen8_irq_power_well_post_enable(dev_priv,
308
						1 << PIPE_C | 1 << PIPE_B);
315
						1 << PIPE_C | 1 << PIPE_B);
309
	}
316
	}
310
}
317
}
Line -... Line 318...
-
 
318
 
-
 
319
static void skl_power_well_pre_disable(struct drm_i915_private *dev_priv,
-
 
320
				       struct i915_power_well *power_well)
-
 
321
{
-
 
322
	if (power_well->data == SKL_DISP_PW_2)
-
 
323
		gen8_irq_power_well_pre_disable(dev_priv,
-
 
324
						1 << PIPE_C | 1 << PIPE_B);
-
 
325
}
311
 
326
 
312
static void hsw_set_power_well(struct drm_i915_private *dev_priv,
327
static void hsw_set_power_well(struct drm_i915_private *dev_priv,
313
			       struct i915_power_well *power_well, bool enable)
328
			       struct i915_power_well *power_well, bool enable)
314
{
329
{
315
	bool is_enabled, enable_requested;
330
	bool is_enabled, enable_requested;
Line 332... Line 347...
332
			hsw_power_well_post_enable(dev_priv);
347
			hsw_power_well_post_enable(dev_priv);
333
		}
348
		}
Line 334... Line 349...
334
 
349
 
335
	} else {
350
	} else {
-
 
351
		if (enable_requested) {
336
		if (enable_requested) {
352
			hsw_power_well_pre_disable(dev_priv);
337
			I915_WRITE(HSW_PWR_WELL_DRIVER, 0);
353
			I915_WRITE(HSW_PWR_WELL_DRIVER, 0);
338
			POSTING_READ(HSW_PWR_WELL_DRIVER);
354
			POSTING_READ(HSW_PWR_WELL_DRIVER);
339
			DRM_DEBUG_KMS("Requesting to disable the power well\n");
355
			DRM_DEBUG_KMS("Requesting to disable the power well\n");
340
		}
356
		}
Line 454... Line 470...
454
	  *  set disable sequence was followed.
470
	  *  set disable sequence was followed.
455
	  * 2] Check if display uninitialize sequence is initialized.
471
	  * 2] Check if display uninitialize sequence is initialized.
456
	  */
472
	  */
457
}
473
}
Line 458... Line 474...
458
 
474
 
459
static void gen9_set_dc_state_debugmask_memory_up(
-
 
460
			struct drm_i915_private *dev_priv)
475
static void gen9_set_dc_state_debugmask(struct drm_i915_private *dev_priv)
461
{
476
{
-
 
477
	uint32_t val, mask;
-
 
478
 
-
 
479
	mask = DC_STATE_DEBUG_MASK_MEMORY_UP;
-
 
480
 
-
 
481
	if (IS_BROXTON(dev_priv))
Line 462... Line 482...
462
	uint32_t val;
482
		mask |= DC_STATE_DEBUG_MASK_CORES;
463
 
483
 
464
	/* The below bit doesn't need to be cleared ever afterwards */
484
	/* The below bit doesn't need to be cleared ever afterwards */
465
	val = I915_READ(DC_STATE_DEBUG);
485
	val = I915_READ(DC_STATE_DEBUG);
466
	if (!(val & DC_STATE_DEBUG_MASK_MEMORY_UP)) {
486
	if ((val & mask) != mask) {
467
		val |= DC_STATE_DEBUG_MASK_MEMORY_UP;
487
		val |= mask;
468
		I915_WRITE(DC_STATE_DEBUG, val);
488
		I915_WRITE(DC_STATE_DEBUG, val);
469
		POSTING_READ(DC_STATE_DEBUG);
489
		POSTING_READ(DC_STATE_DEBUG);
Line 523... Line 543...
523
	if (i915.enable_dc == 0)
543
	if (i915.enable_dc == 0)
524
		state = DC_STATE_DISABLE;
544
		state = DC_STATE_DISABLE;
525
	else if (i915.enable_dc == 1 && state > DC_STATE_EN_UPTO_DC5)
545
	else if (i915.enable_dc == 1 && state > DC_STATE_EN_UPTO_DC5)
526
		state = DC_STATE_EN_UPTO_DC5;
546
		state = DC_STATE_EN_UPTO_DC5;
Line 527... Line -...
527
 
-
 
528
	if (state & DC_STATE_EN_UPTO_DC5_DC6_MASK)
-
 
529
		gen9_set_dc_state_debugmask_memory_up(dev_priv);
-
 
530
 
547
 
531
	val = I915_READ(DC_STATE_EN);
548
	val = I915_READ(DC_STATE_EN);
532
	DRM_DEBUG_KMS("Setting DC state from %02x to %02x\n",
549
	DRM_DEBUG_KMS("Setting DC state from %02x to %02x\n",
Line 533... Line 550...
533
		      val & mask, state);
550
		      val & mask, state);
Line 575... Line 592...
575
{
592
{
576
	struct drm_device *dev = dev_priv->dev;
593
	struct drm_device *dev = dev_priv->dev;
577
	bool pg2_enabled = intel_display_power_well_is_enabled(dev_priv,
594
	bool pg2_enabled = intel_display_power_well_is_enabled(dev_priv,
578
					SKL_DISP_PW_2);
595
					SKL_DISP_PW_2);
Line -... Line 596...
-
 
596
 
579
 
597
	WARN_ONCE(!IS_SKYLAKE(dev) && !IS_KABYLAKE(dev),
580
	WARN_ONCE(!IS_SKYLAKE(dev), "Platform doesn't support DC5.\n");
598
		  "Platform doesn't support DC5.\n");
581
	WARN_ONCE(!HAS_RUNTIME_PM(dev), "Runtime PM not enabled.\n");
599
	WARN_ONCE(!HAS_RUNTIME_PM(dev), "Runtime PM not enabled.\n");
Line 582... Line 600...
582
	WARN_ONCE(pg2_enabled, "PG2 not disabled to enable DC5.\n");
600
	WARN_ONCE(pg2_enabled, "PG2 not disabled to enable DC5.\n");
583
 
601
 
Line 611... Line 629...
611
 
629
 
612
static void assert_can_enable_dc6(struct drm_i915_private *dev_priv)
630
static void assert_can_enable_dc6(struct drm_i915_private *dev_priv)
613
{
631
{
Line -... Line 632...
-
 
632
	struct drm_device *dev = dev_priv->dev;
614
	struct drm_device *dev = dev_priv->dev;
633
 
615
 
634
	WARN_ONCE(!IS_SKYLAKE(dev) && !IS_KABYLAKE(dev),
616
	WARN_ONCE(!IS_SKYLAKE(dev), "Platform doesn't support DC6.\n");
635
		  "Platform doesn't support DC6.\n");
617
	WARN_ONCE(!HAS_RUNTIME_PM(dev), "Runtime PM not enabled.\n");
636
	WARN_ONCE(!HAS_RUNTIME_PM(dev), "Runtime PM not enabled.\n");
618
	WARN_ONCE(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
637
	WARN_ONCE(I915_READ(UTIL_PIN_CTL) & UTIL_PIN_ENABLE,
619
		  "Backlight is not disabled.\n");
638
		  "Backlight is not disabled.\n");
Line 638... Line 657...
638
 
657
 
639
static void gen9_disable_dc5_dc6(struct drm_i915_private *dev_priv)
658
static void gen9_disable_dc5_dc6(struct drm_i915_private *dev_priv)
640
{
659
{
Line -... Line 660...
-
 
660
	assert_can_disable_dc5(dev_priv);
641
	assert_can_disable_dc5(dev_priv);
661
 
642
 
662
	if ((IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) &&
Line 643... Line 663...
643
	if (IS_SKYLAKE(dev_priv) && i915.enable_dc != 0 && i915.enable_dc != 1)
663
	    i915.enable_dc != 0 && i915.enable_dc != 1)
644
		assert_can_disable_dc6(dev_priv);
664
		assert_can_disable_dc6(dev_priv);
Line 666... Line 686...
666
}
686
}
Line 667... Line 687...
667
 
687
 
668
static void skl_set_power_well(struct drm_i915_private *dev_priv,
688
static void skl_set_power_well(struct drm_i915_private *dev_priv,
669
			struct i915_power_well *power_well, bool enable)
689
			struct i915_power_well *power_well, bool enable)
670
{
-
 
671
	struct drm_device *dev = dev_priv->dev;
690
{
672
	uint32_t tmp, fuse_status;
691
	uint32_t tmp, fuse_status;
673
	uint32_t req_mask, state_mask;
692
	uint32_t req_mask, state_mask;
Line 674... Line 693...
674
	bool is_enabled, enable_requested, check_fuse_status = false;
693
	bool is_enabled, enable_requested, check_fuse_status = false;
Line 704... Line 723...
704
	req_mask = SKL_POWER_WELL_REQ(power_well->data);
723
	req_mask = SKL_POWER_WELL_REQ(power_well->data);
705
	enable_requested = tmp & req_mask;
724
	enable_requested = tmp & req_mask;
706
	state_mask = SKL_POWER_WELL_STATE(power_well->data);
725
	state_mask = SKL_POWER_WELL_STATE(power_well->data);
707
	is_enabled = tmp & state_mask;
726
	is_enabled = tmp & state_mask;
Line -... Line 727...
-
 
727
 
-
 
728
	if (!enable && enable_requested)
-
 
729
		skl_power_well_pre_disable(dev_priv, power_well);
708
 
730
 
709
	if (enable) {
731
	if (enable) {
710
		if (!enable_requested) {
732
		if (!enable_requested) {
711
			WARN((tmp & state_mask) &&
733
			WARN((tmp & state_mask) &&
712
				!I915_READ(HSW_PWR_WELL_BIOS),
734
				!I915_READ(HSW_PWR_WELL_BIOS),
713
				"Invalid for power well status to be enabled, unless done by the BIOS, \
735
				"Invalid for power well status to be enabled, unless done by the BIOS, \
714
				when request is to disable!\n");
-
 
715
			if (power_well->data == SKL_DISP_PW_2) {
-
 
716
					/*
-
 
717
				 * DDI buffer programming unnecessary during
-
 
718
				 * driver-load/resume as it's already done
-
 
719
				 * during modeset initialization then. It's
-
 
720
				 * also invalid here as encoder list is still
-
 
721
				 * uninitialized.
-
 
722
					 */
-
 
723
					if (!dev_priv->power_domains.initializing)
-
 
724
						intel_prepare_ddi(dev);
-
 
725
			}
736
				when request is to disable!\n");
726
			I915_WRITE(HSW_PWR_WELL_DRIVER, tmp | req_mask);
737
			I915_WRITE(HSW_PWR_WELL_DRIVER, tmp | req_mask);
Line 727... Line 738...
727
		}
738
		}
728
 
739
 
Line 826... Line 837...
826
}
837
}
Line 827... Line 838...
827
 
838
 
828
static void gen9_dc_off_power_well_disable(struct drm_i915_private *dev_priv,
839
static void gen9_dc_off_power_well_disable(struct drm_i915_private *dev_priv,
829
					   struct i915_power_well *power_well)
840
					   struct i915_power_well *power_well)
-
 
841
{
830
{
842
	if ((IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) &&
831
	if (IS_SKYLAKE(dev_priv) && i915.enable_dc != 0 && i915.enable_dc != 1)
843
	    i915.enable_dc != 0 && i915.enable_dc != 1)
832
		skl_enable_dc6(dev_priv);
844
		skl_enable_dc6(dev_priv);
833
	else
845
	else
834
		gen9_enable_dc5(dev_priv);
846
		gen9_enable_dc5(dev_priv);
Line 838... Line 850...
838
					   struct i915_power_well *power_well)
850
					   struct i915_power_well *power_well)
839
{
851
{
840
	if (power_well->count > 0) {
852
	if (power_well->count > 0) {
841
		gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
853
		gen9_set_dc_state(dev_priv, DC_STATE_DISABLE);
842
	} else {
854
	} else {
843
		if (IS_SKYLAKE(dev_priv) && i915.enable_dc != 0 &&
855
		if ((IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) &&
-
 
856
		    i915.enable_dc != 0 &&
844
		    i915.enable_dc != 1)
857
		    i915.enable_dc != 1)
845
			gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
858
			gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC6);
846
		else
859
		else
847
			gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC5);
860
			gen9_set_dc_state(dev_priv, DC_STATE_EN_UPTO_DC5);
848
	}
861
	}
Line 991... Line 1004...
991
{
1004
{
992
	spin_lock_irq(&dev_priv->irq_lock);
1005
	spin_lock_irq(&dev_priv->irq_lock);
993
	valleyview_disable_display_irqs(dev_priv);
1006
	valleyview_disable_display_irqs(dev_priv);
994
	spin_unlock_irq(&dev_priv->irq_lock);
1007
	spin_unlock_irq(&dev_priv->irq_lock);
Line -... Line 1008...
-
 
1008
 
-
 
1009
	/* make sure we're done processing display irqs */
-
 
1010
	synchronize_irq(dev_priv->dev->irq);
995
 
1011
 
996
	vlv_power_sequencer_reset(dev_priv);
1012
	vlv_power_sequencer_reset(dev_priv);
Line 997... Line 1013...
997
}
1013
}
998
 
1014
 
Line 1939... Line 1955...
1939
 
1955
 
1940
void skl_pw1_misc_io_init(struct drm_i915_private *dev_priv)
1956
void skl_pw1_misc_io_init(struct drm_i915_private *dev_priv)
1941
{
1957
{
Line 1942... Line 1958...
1942
	struct i915_power_well *well;
1958
	struct i915_power_well *well;
1943
 
1959
 
Line 1944... Line 1960...
1944
	if (!IS_SKYLAKE(dev_priv))
1960
	if (!(IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)))
1945
		return;
1961
		return;
Line 1953... Line 1969...
1953
 
1969
 
1954
void skl_pw1_misc_io_fini(struct drm_i915_private *dev_priv)
1970
void skl_pw1_misc_io_fini(struct drm_i915_private *dev_priv)
1955
{
1971
{
Line 1956... Line 1972...
1956
	struct i915_power_well *well;
1972
	struct i915_power_well *well;
1957
 
1973
 
Line 1958... Line 1974...
1958
	if (!IS_SKYLAKE(dev_priv))
1974
	if (!(IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)))
1959
		return;
1975
		return;
Line 2123... Line 2139...
2123
	if (!resume)
2139
	if (!resume)
2124
		return;
2140
		return;
Line 2125... Line 2141...
2125
 
2141
 
Line 2126... Line 2142...
2126
	skl_init_cdclk(dev_priv);
2142
	skl_init_cdclk(dev_priv);
2127
 
2143
 
2128
	if (dev_priv->csr.dmc_payload)
2144
	if (dev_priv->csr.dmc_payload && intel_csr_load_program(dev_priv))
Line 2129... Line 2145...
2129
		intel_csr_load_program(dev_priv);
2145
		gen9_set_dc_state_debugmask(dev_priv);
2130
}
2146
}
2131
 
2147