diff options
author | Eric Anholt <eric@anholt.net> | 2011-03-30 16:01:04 -0400 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-05-10 16:56:29 -0400 |
commit | 929c77fb38aa1e5f028f1b59dfb641b25fffea8b (patch) | |
tree | 2efb13e1a82a3444a92277a865aa8ffabed5f33a /drivers/gpu | |
parent | 0b701d27b37d52b80d8da2d8d15fb99e072ee819 (diff) |
drm/i915: Remove the PCH paths from the pre-Ironlake crtc_mode_set().
Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 281 |
1 files changed, 23 insertions, 258 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f121aaf20ba9..622820b6a236 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -4538,10 +4538,8 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4538 | struct intel_encoder *encoder; | 4538 | struct intel_encoder *encoder; |
4539 | const intel_limit_t *limit; | 4539 | const intel_limit_t *limit; |
4540 | int ret; | 4540 | int ret; |
4541 | struct fdi_m_n m_n = {0}; | ||
4542 | u32 reg, temp; | 4541 | u32 reg, temp; |
4543 | u32 lvds_sync = 0; | 4542 | u32 lvds_sync = 0; |
4544 | int target_clock; | ||
4545 | 4543 | ||
4546 | list_for_each_entry(encoder, &mode_config->encoder_list, base.head) { | 4544 | list_for_each_entry(encoder, &mode_config->encoder_list, base.head) { |
4547 | if (encoder->base.crtc != crtc) | 4545 | if (encoder->base.crtc != crtc) |
@@ -4583,9 +4581,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4583 | refclk / 1000); | 4581 | refclk / 1000); |
4584 | } else if (!IS_GEN2(dev)) { | 4582 | } else if (!IS_GEN2(dev)) { |
4585 | refclk = 96000; | 4583 | refclk = 96000; |
4586 | if (HAS_PCH_SPLIT(dev) && | ||
4587 | (!has_edp_encoder || intel_encoder_is_pch_edp(&has_edp_encoder->base))) | ||
4588 | refclk = 120000; /* 120Mhz refclk */ | ||
4589 | } else { | 4584 | } else { |
4590 | refclk = 48000; | 4585 | refclk = 48000; |
4591 | } | 4586 | } |
@@ -4642,143 +4637,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4642 | } | 4637 | } |
4643 | } | 4638 | } |
4644 | 4639 | ||
4645 | /* FDI link */ | ||
4646 | if (HAS_PCH_SPLIT(dev)) { | ||
4647 | int pixel_multiplier = intel_mode_get_pixel_multiplier(adjusted_mode); | ||
4648 | int lane = 0, link_bw, bpp; | ||
4649 | /* CPU eDP doesn't require FDI link, so just set DP M/N | ||
4650 | according to current link config */ | ||
4651 | if (has_edp_encoder && !intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | ||
4652 | target_clock = mode->clock; | ||
4653 | intel_edp_link_config(has_edp_encoder, | ||
4654 | &lane, &link_bw); | ||
4655 | } else { | ||
4656 | /* [e]DP over FDI requires target mode clock | ||
4657 | instead of link clock */ | ||
4658 | if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) | ||
4659 | target_clock = mode->clock; | ||
4660 | else | ||
4661 | target_clock = adjusted_mode->clock; | ||
4662 | |||
4663 | /* FDI is a binary signal running at ~2.7GHz, encoding | ||
4664 | * each output octet as 10 bits. The actual frequency | ||
4665 | * is stored as a divider into a 100MHz clock, and the | ||
4666 | * mode pixel clock is stored in units of 1KHz. | ||
4667 | * Hence the bw of each lane in terms of the mode signal | ||
4668 | * is: | ||
4669 | */ | ||
4670 | link_bw = intel_fdi_link_freq(dev) * MHz(100)/KHz(1)/10; | ||
4671 | } | ||
4672 | |||
4673 | /* determine panel color depth */ | ||
4674 | temp = I915_READ(PIPECONF(pipe)); | ||
4675 | temp &= ~PIPE_BPC_MASK; | ||
4676 | if (is_lvds) { | ||
4677 | /* the BPC will be 6 if it is 18-bit LVDS panel */ | ||
4678 | if ((I915_READ(PCH_LVDS) & LVDS_A3_POWER_MASK) == LVDS_A3_POWER_UP) | ||
4679 | temp |= PIPE_8BPC; | ||
4680 | else | ||
4681 | temp |= PIPE_6BPC; | ||
4682 | } else if (has_edp_encoder) { | ||
4683 | switch (dev_priv->edp.bpp/3) { | ||
4684 | case 8: | ||
4685 | temp |= PIPE_8BPC; | ||
4686 | break; | ||
4687 | case 10: | ||
4688 | temp |= PIPE_10BPC; | ||
4689 | break; | ||
4690 | case 6: | ||
4691 | temp |= PIPE_6BPC; | ||
4692 | break; | ||
4693 | case 12: | ||
4694 | temp |= PIPE_12BPC; | ||
4695 | break; | ||
4696 | } | ||
4697 | } else | ||
4698 | temp |= PIPE_8BPC; | ||
4699 | I915_WRITE(PIPECONF(pipe), temp); | ||
4700 | |||
4701 | switch (temp & PIPE_BPC_MASK) { | ||
4702 | case PIPE_8BPC: | ||
4703 | bpp = 24; | ||
4704 | break; | ||
4705 | case PIPE_10BPC: | ||
4706 | bpp = 30; | ||
4707 | break; | ||
4708 | case PIPE_6BPC: | ||
4709 | bpp = 18; | ||
4710 | break; | ||
4711 | case PIPE_12BPC: | ||
4712 | bpp = 36; | ||
4713 | break; | ||
4714 | default: | ||
4715 | DRM_ERROR("unknown pipe bpc value\n"); | ||
4716 | bpp = 24; | ||
4717 | } | ||
4718 | |||
4719 | if (!lane) { | ||
4720 | /* | ||
4721 | * Account for spread spectrum to avoid | ||
4722 | * oversubscribing the link. Max center spread | ||
4723 | * is 2.5%; use 5% for safety's sake. | ||
4724 | */ | ||
4725 | u32 bps = target_clock * bpp * 21 / 20; | ||
4726 | lane = bps / (link_bw * 8) + 1; | ||
4727 | } | ||
4728 | |||
4729 | intel_crtc->fdi_lanes = lane; | ||
4730 | |||
4731 | if (pixel_multiplier > 1) | ||
4732 | link_bw *= pixel_multiplier; | ||
4733 | ironlake_compute_m_n(bpp, lane, target_clock, link_bw, &m_n); | ||
4734 | } | ||
4735 | |||
4736 | /* Ironlake: try to setup display ref clock before DPLL | ||
4737 | * enabling. This is only under driver's control after | ||
4738 | * PCH B stepping, previous chipset stepping should be | ||
4739 | * ignoring this setting. | ||
4740 | */ | ||
4741 | if (HAS_PCH_SPLIT(dev)) { | ||
4742 | temp = I915_READ(PCH_DREF_CONTROL); | ||
4743 | /* Always enable nonspread source */ | ||
4744 | temp &= ~DREF_NONSPREAD_SOURCE_MASK; | ||
4745 | temp |= DREF_NONSPREAD_SOURCE_ENABLE; | ||
4746 | temp &= ~DREF_SSC_SOURCE_MASK; | ||
4747 | temp |= DREF_SSC_SOURCE_ENABLE; | ||
4748 | I915_WRITE(PCH_DREF_CONTROL, temp); | ||
4749 | |||
4750 | POSTING_READ(PCH_DREF_CONTROL); | ||
4751 | udelay(200); | ||
4752 | |||
4753 | if (has_edp_encoder) { | ||
4754 | if (intel_panel_use_ssc(dev_priv)) { | ||
4755 | temp |= DREF_SSC1_ENABLE; | ||
4756 | I915_WRITE(PCH_DREF_CONTROL, temp); | ||
4757 | |||
4758 | POSTING_READ(PCH_DREF_CONTROL); | ||
4759 | udelay(200); | ||
4760 | } | ||
4761 | temp &= ~DREF_CPU_SOURCE_OUTPUT_MASK; | ||
4762 | |||
4763 | /* Enable CPU source on CPU attached eDP */ | ||
4764 | if (!intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | ||
4765 | if (intel_panel_use_ssc(dev_priv)) | ||
4766 | temp |= DREF_CPU_SOURCE_OUTPUT_DOWNSPREAD; | ||
4767 | else | ||
4768 | temp |= DREF_CPU_SOURCE_OUTPUT_NONSPREAD; | ||
4769 | } else { | ||
4770 | /* Enable SSC on PCH eDP if needed */ | ||
4771 | if (intel_panel_use_ssc(dev_priv)) { | ||
4772 | DRM_ERROR("enabling SSC on PCH\n"); | ||
4773 | temp |= DREF_SUPERSPREAD_SOURCE_ENABLE; | ||
4774 | } | ||
4775 | } | ||
4776 | I915_WRITE(PCH_DREF_CONTROL, temp); | ||
4777 | POSTING_READ(PCH_DREF_CONTROL); | ||
4778 | udelay(200); | ||
4779 | } | ||
4780 | } | ||
4781 | |||
4782 | if (IS_PINEVIEW(dev)) { | 4640 | if (IS_PINEVIEW(dev)) { |
4783 | fp = (1 << clock.n) << 16 | clock.m1 << 8 | clock.m2; | 4641 | fp = (1 << clock.n) << 16 | clock.m1 << 8 | clock.m2; |
4784 | if (has_reduced_clock) | 4642 | if (has_reduced_clock) |
@@ -4791,25 +4649,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4791 | reduced_clock.m2; | 4649 | reduced_clock.m2; |
4792 | } | 4650 | } |
4793 | 4651 | ||
4794 | /* Enable autotuning of the PLL clock (if permissible) */ | 4652 | dpll = DPLL_VGA_MODE_DIS; |
4795 | if (HAS_PCH_SPLIT(dev)) { | ||
4796 | int factor = 21; | ||
4797 | |||
4798 | if (is_lvds) { | ||
4799 | if ((intel_panel_use_ssc(dev_priv) && | ||
4800 | dev_priv->lvds_ssc_freq == 100) || | ||
4801 | (I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP) | ||
4802 | factor = 25; | ||
4803 | } else if (is_sdvo && is_tv) | ||
4804 | factor = 20; | ||
4805 | |||
4806 | if (clock.m1 < factor * clock.n) | ||
4807 | fp |= FP_CB_TUNE; | ||
4808 | } | ||
4809 | |||
4810 | dpll = 0; | ||
4811 | if (!HAS_PCH_SPLIT(dev)) | ||
4812 | dpll = DPLL_VGA_MODE_DIS; | ||
4813 | 4653 | ||
4814 | if (!IS_GEN2(dev)) { | 4654 | if (!IS_GEN2(dev)) { |
4815 | if (is_lvds) | 4655 | if (is_lvds) |
@@ -4821,12 +4661,10 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4821 | if (pixel_multiplier > 1) { | 4661 | if (pixel_multiplier > 1) { |
4822 | if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) | 4662 | if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) |
4823 | dpll |= (pixel_multiplier - 1) << SDVO_MULTIPLIER_SHIFT_HIRES; | 4663 | dpll |= (pixel_multiplier - 1) << SDVO_MULTIPLIER_SHIFT_HIRES; |
4824 | else if (HAS_PCH_SPLIT(dev)) | ||
4825 | dpll |= (pixel_multiplier - 1) << PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT; | ||
4826 | } | 4664 | } |
4827 | dpll |= DPLL_DVO_HIGH_SPEED; | 4665 | dpll |= DPLL_DVO_HIGH_SPEED; |
4828 | } | 4666 | } |
4829 | if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) | 4667 | if (is_dp) |
4830 | dpll |= DPLL_DVO_HIGH_SPEED; | 4668 | dpll |= DPLL_DVO_HIGH_SPEED; |
4831 | 4669 | ||
4832 | /* compute bitmask from p1 value */ | 4670 | /* compute bitmask from p1 value */ |
@@ -4834,9 +4672,6 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4834 | dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW; | 4672 | dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW; |
4835 | else { | 4673 | else { |
4836 | dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; | 4674 | dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA01_P1_POST_DIV_SHIFT; |
4837 | /* also FPA1 */ | ||
4838 | if (HAS_PCH_SPLIT(dev)) | ||
4839 | dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; | ||
4840 | if (IS_G4X(dev) && has_reduced_clock) | 4675 | if (IS_G4X(dev) && has_reduced_clock) |
4841 | dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; | 4676 | dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT; |
4842 | } | 4677 | } |
@@ -4854,7 +4689,7 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4854 | dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; | 4689 | dpll |= DPLLB_LVDS_P2_CLOCK_DIV_14; |
4855 | break; | 4690 | break; |
4856 | } | 4691 | } |
4857 | if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) | 4692 | if (INTEL_INFO(dev)->gen >= 4) |
4858 | dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); | 4693 | dpll |= (6 << PLL_LOAD_PULSE_PHASE_SHIFT); |
4859 | } else { | 4694 | } else { |
4860 | if (is_lvds) { | 4695 | if (is_lvds) { |
@@ -4888,12 +4723,10 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4888 | 4723 | ||
4889 | /* Ironlake's plane is forced to pipe, bit 24 is to | 4724 | /* Ironlake's plane is forced to pipe, bit 24 is to |
4890 | enable color space conversion */ | 4725 | enable color space conversion */ |
4891 | if (!HAS_PCH_SPLIT(dev)) { | 4726 | if (pipe == 0) |
4892 | if (pipe == 0) | 4727 | dspcntr &= ~DISPPLANE_SEL_PIPE_MASK; |
4893 | dspcntr &= ~DISPPLANE_SEL_PIPE_MASK; | 4728 | else |
4894 | else | 4729 | dspcntr |= DISPPLANE_SEL_PIPE_B; |
4895 | dspcntr |= DISPPLANE_SEL_PIPE_B; | ||
4896 | } | ||
4897 | 4730 | ||
4898 | if (pipe == 0 && INTEL_INFO(dev)->gen < 4) { | 4731 | if (pipe == 0 && INTEL_INFO(dev)->gen < 4) { |
4899 | /* Enable pixel doubling when the dot clock is > 90% of the (display) | 4732 | /* Enable pixel doubling when the dot clock is > 90% of the (display) |
@@ -4909,23 +4742,16 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4909 | pipeconf &= ~PIPECONF_DOUBLE_WIDE; | 4742 | pipeconf &= ~PIPECONF_DOUBLE_WIDE; |
4910 | } | 4743 | } |
4911 | 4744 | ||
4912 | if (!HAS_PCH_SPLIT(dev)) | 4745 | dpll |= DPLL_VCO_ENABLE; |
4913 | dpll |= DPLL_VCO_ENABLE; | ||
4914 | 4746 | ||
4915 | DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); | 4747 | DRM_DEBUG_KMS("Mode for pipe %c:\n", pipe == 0 ? 'A' : 'B'); |
4916 | drm_mode_debug_printmodeline(mode); | 4748 | drm_mode_debug_printmodeline(mode); |
4917 | 4749 | ||
4918 | /* assign to Ironlake registers */ | 4750 | fp_reg = FP0(pipe); |
4919 | if (HAS_PCH_SPLIT(dev)) { | 4751 | dpll_reg = DPLL(pipe); |
4920 | fp_reg = PCH_FP0(pipe); | ||
4921 | dpll_reg = PCH_DPLL(pipe); | ||
4922 | } else { | ||
4923 | fp_reg = FP0(pipe); | ||
4924 | dpll_reg = DPLL(pipe); | ||
4925 | } | ||
4926 | 4752 | ||
4927 | /* PCH eDP needs FDI, but CPU eDP does not */ | 4753 | /* PCH eDP needs FDI, but CPU eDP does not */ |
4928 | if (!has_edp_encoder || intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | 4754 | if (!has_edp_encoder) { |
4929 | I915_WRITE(fp_reg, fp); | 4755 | I915_WRITE(fp_reg, fp); |
4930 | I915_WRITE(dpll_reg, dpll & ~DPLL_VCO_ENABLE); | 4756 | I915_WRITE(dpll_reg, dpll & ~DPLL_VCO_ENABLE); |
4931 | 4757 | ||
@@ -4933,50 +4759,19 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4933 | udelay(150); | 4759 | udelay(150); |
4934 | } | 4760 | } |
4935 | 4761 | ||
4936 | /* enable transcoder DPLL */ | ||
4937 | if (HAS_PCH_CPT(dev)) { | ||
4938 | temp = I915_READ(PCH_DPLL_SEL); | ||
4939 | switch (pipe) { | ||
4940 | case 0: | ||
4941 | temp |= TRANSA_DPLL_ENABLE | TRANSA_DPLLA_SEL; | ||
4942 | break; | ||
4943 | case 1: | ||
4944 | temp |= TRANSB_DPLL_ENABLE | TRANSB_DPLLB_SEL; | ||
4945 | break; | ||
4946 | case 2: | ||
4947 | /* FIXME: manage transcoder PLLs? */ | ||
4948 | temp |= TRANSC_DPLL_ENABLE | TRANSC_DPLLB_SEL; | ||
4949 | break; | ||
4950 | default: | ||
4951 | BUG(); | ||
4952 | } | ||
4953 | I915_WRITE(PCH_DPLL_SEL, temp); | ||
4954 | |||
4955 | POSTING_READ(PCH_DPLL_SEL); | ||
4956 | udelay(150); | ||
4957 | } | ||
4958 | |||
4959 | /* The LVDS pin pair needs to be on before the DPLLs are enabled. | 4762 | /* The LVDS pin pair needs to be on before the DPLLs are enabled. |
4960 | * This is an exception to the general rule that mode_set doesn't turn | 4763 | * This is an exception to the general rule that mode_set doesn't turn |
4961 | * things on. | 4764 | * things on. |
4962 | */ | 4765 | */ |
4963 | if (is_lvds) { | 4766 | if (is_lvds) { |
4964 | reg = LVDS; | 4767 | reg = LVDS; |
4965 | if (HAS_PCH_SPLIT(dev)) | ||
4966 | reg = PCH_LVDS; | ||
4967 | 4768 | ||
4968 | temp = I915_READ(reg); | 4769 | temp = I915_READ(reg); |
4969 | temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP; | 4770 | temp |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP; |
4970 | if (pipe == 1) { | 4771 | if (pipe == 1) { |
4971 | if (HAS_PCH_CPT(dev)) | 4772 | temp |= LVDS_PIPEB_SELECT; |
4972 | temp |= PORT_TRANS_B_SEL_CPT; | ||
4973 | else | ||
4974 | temp |= LVDS_PIPEB_SELECT; | ||
4975 | } else { | 4773 | } else { |
4976 | if (HAS_PCH_CPT(dev)) | 4774 | temp &= ~LVDS_PIPEB_SELECT; |
4977 | temp &= ~PORT_TRANS_SEL_MASK; | ||
4978 | else | ||
4979 | temp &= ~LVDS_PIPEB_SELECT; | ||
4980 | } | 4775 | } |
4981 | /* set the corresponsding LVDS_BORDER bit */ | 4776 | /* set the corresponsding LVDS_BORDER bit */ |
4982 | temp |= dev_priv->lvds_border_bits; | 4777 | temp |= dev_priv->lvds_border_bits; |
@@ -4992,8 +4787,8 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
4992 | * appropriately here, but we need to look more thoroughly into how | 4787 | * appropriately here, but we need to look more thoroughly into how |
4993 | * panels behave in the two modes. | 4788 | * panels behave in the two modes. |
4994 | */ | 4789 | */ |
4995 | /* set the dithering flag on non-PCH LVDS as needed */ | 4790 | /* set the dithering flag on LVDS as needed */ |
4996 | if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) { | 4791 | if (INTEL_INFO(dev)->gen >= 4) { |
4997 | if (dev_priv->lvds_dither) | 4792 | if (dev_priv->lvds_dither) |
4998 | temp |= LVDS_ENABLE_DITHER; | 4793 | temp |= LVDS_ENABLE_DITHER; |
4999 | else | 4794 | else |
@@ -5018,34 +4813,18 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
5018 | I915_WRITE(reg, temp); | 4813 | I915_WRITE(reg, temp); |
5019 | } | 4814 | } |
5020 | 4815 | ||
5021 | /* set the dithering flag and clear for anything other than a panel. */ | 4816 | if (is_dp) { |
5022 | if (HAS_PCH_SPLIT(dev)) { | ||
5023 | pipeconf &= ~PIPECONF_DITHER_EN; | ||
5024 | pipeconf &= ~PIPECONF_DITHER_TYPE_MASK; | ||
5025 | if (dev_priv->lvds_dither && (is_lvds || has_edp_encoder)) { | ||
5026 | pipeconf |= PIPECONF_DITHER_EN; | ||
5027 | pipeconf |= PIPECONF_DITHER_TYPE_ST1; | ||
5028 | } | ||
5029 | } | ||
5030 | |||
5031 | if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | ||
5032 | intel_dp_set_m_n(crtc, mode, adjusted_mode); | 4817 | intel_dp_set_m_n(crtc, mode, adjusted_mode); |
5033 | } else if (HAS_PCH_SPLIT(dev)) { | ||
5034 | /* For non-DP output, clear any trans DP clock recovery setting.*/ | ||
5035 | I915_WRITE(TRANSDATA_M1(pipe), 0); | ||
5036 | I915_WRITE(TRANSDATA_N1(pipe), 0); | ||
5037 | I915_WRITE(TRANSDPLINK_M1(pipe), 0); | ||
5038 | I915_WRITE(TRANSDPLINK_N1(pipe), 0); | ||
5039 | } | 4818 | } |
5040 | 4819 | ||
5041 | if (!has_edp_encoder || intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | 4820 | if (!has_edp_encoder) { |
5042 | I915_WRITE(dpll_reg, dpll); | 4821 | I915_WRITE(dpll_reg, dpll); |
5043 | 4822 | ||
5044 | /* Wait for the clocks to stabilize. */ | 4823 | /* Wait for the clocks to stabilize. */ |
5045 | POSTING_READ(dpll_reg); | 4824 | POSTING_READ(dpll_reg); |
5046 | udelay(150); | 4825 | udelay(150); |
5047 | 4826 | ||
5048 | if (INTEL_INFO(dev)->gen >= 4 && !HAS_PCH_SPLIT(dev)) { | 4827 | if (INTEL_INFO(dev)->gen >= 4) { |
5049 | temp = 0; | 4828 | temp = 0; |
5050 | if (is_sdvo) { | 4829 | if (is_sdvo) { |
5051 | temp = intel_mode_get_pixel_multiplier(adjusted_mode); | 4830 | temp = intel_mode_get_pixel_multiplier(adjusted_mode); |
@@ -5116,30 +4895,16 @@ static int i9xx_crtc_mode_set(struct drm_crtc *crtc, | |||
5116 | /* pipesrc and dspsize control the size that is scaled from, | 4895 | /* pipesrc and dspsize control the size that is scaled from, |
5117 | * which should always be the user's requested size. | 4896 | * which should always be the user's requested size. |
5118 | */ | 4897 | */ |
5119 | if (!HAS_PCH_SPLIT(dev)) { | 4898 | I915_WRITE(DSPSIZE(plane), |
5120 | I915_WRITE(DSPSIZE(plane), | 4899 | ((mode->vdisplay - 1) << 16) | |
5121 | ((mode->vdisplay - 1) << 16) | | 4900 | (mode->hdisplay - 1)); |
5122 | (mode->hdisplay - 1)); | 4901 | I915_WRITE(DSPPOS(plane), 0); |
5123 | I915_WRITE(DSPPOS(plane), 0); | ||
5124 | } | ||
5125 | I915_WRITE(PIPESRC(pipe), | 4902 | I915_WRITE(PIPESRC(pipe), |
5126 | ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1)); | 4903 | ((mode->hdisplay - 1) << 16) | (mode->vdisplay - 1)); |
5127 | 4904 | ||
5128 | if (HAS_PCH_SPLIT(dev)) { | ||
5129 | I915_WRITE(PIPE_DATA_M1(pipe), TU_SIZE(m_n.tu) | m_n.gmch_m); | ||
5130 | I915_WRITE(PIPE_DATA_N1(pipe), m_n.gmch_n); | ||
5131 | I915_WRITE(PIPE_LINK_M1(pipe), m_n.link_m); | ||
5132 | I915_WRITE(PIPE_LINK_N1(pipe), m_n.link_n); | ||
5133 | |||
5134 | if (has_edp_encoder && !intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | ||
5135 | ironlake_set_pll_edp(crtc, adjusted_mode->clock); | ||
5136 | } | ||
5137 | } | ||
5138 | |||
5139 | I915_WRITE(PIPECONF(pipe), pipeconf); | 4905 | I915_WRITE(PIPECONF(pipe), pipeconf); |
5140 | POSTING_READ(PIPECONF(pipe)); | 4906 | POSTING_READ(PIPECONF(pipe)); |
5141 | if (!HAS_PCH_SPLIT(dev)) | 4907 | intel_enable_pipe(dev_priv, pipe, false); |
5142 | intel_enable_pipe(dev_priv, pipe, false); | ||
5143 | 4908 | ||
5144 | intel_wait_for_vblank(dev, pipe); | 4909 | intel_wait_for_vblank(dev, pipe); |
5145 | 4910 | ||