@@ -1899,20 +1899,13 @@ static void vlv_prepare_pll(const struct intel_crtc_state *crtc_state)
18991899{
19001900 struct intel_crtc * crtc = to_intel_crtc (crtc_state -> uapi .crtc );
19011901 struct drm_i915_private * dev_priv = to_i915 (crtc -> base .dev );
1902+ const struct dpll * clock = & crtc_state -> dpll ;
19021903 enum dpio_phy phy = vlv_pipe_to_phy (crtc -> pipe );
19031904 enum pipe pipe = crtc -> pipe ;
1904- u32 mdiv ;
1905- u32 bestn , bestm1 , bestm2 , bestp1 , bestp2 ;
1906- u32 coreclk , reg_val ;
1905+ u32 mdiv , coreclk , reg_val ;
19071906
19081907 vlv_dpio_get (dev_priv );
19091908
1910- bestn = crtc_state -> dpll .n ;
1911- bestm1 = crtc_state -> dpll .m1 ;
1912- bestm2 = crtc_state -> dpll .m2 ;
1913- bestp1 = crtc_state -> dpll .p1 ;
1914- bestp2 = crtc_state -> dpll .p2 ;
1915-
19161909 /* See eDP HDMI DPIO driver vbios notes doc */
19171910
19181911 /* PLL B needs special handling */
@@ -1931,10 +1924,12 @@ static void vlv_prepare_pll(const struct intel_crtc_state *crtc_state)
19311924 vlv_dpio_write (dev_priv , phy , VLV_CMN_DW0 , 0x610 );
19321925
19331926 /* Set idtafcrecal before PLL is enabled */
1934- mdiv = ((bestm1 << DPIO_M1DIV_SHIFT ) | (bestm2 & DPIO_M2DIV_MASK ));
1935- mdiv |= ((bestp1 << DPIO_P1_SHIFT ) | (bestp2 << DPIO_P2_SHIFT ));
1936- mdiv |= ((bestn << DPIO_N_SHIFT ));
1937- mdiv |= (1 << DPIO_K_SHIFT );
1927+ mdiv = (clock -> m1 << DPIO_M1DIV_SHIFT ) |
1928+ (clock -> m2 & DPIO_M2DIV_MASK ) |
1929+ (clock -> p1 << DPIO_P1_SHIFT ) |
1930+ (clock -> p2 << DPIO_P2_SHIFT ) |
1931+ (clock -> n << DPIO_N_SHIFT ) |
1932+ (1 << DPIO_K_SHIFT );
19381933
19391934 /*
19401935 * Post divider depends on pixel clock rate, DAC vs digital (and LVDS,
@@ -2030,47 +2025,44 @@ static void chv_prepare_pll(const struct intel_crtc_state *crtc_state)
20302025{
20312026 struct intel_crtc * crtc = to_intel_crtc (crtc_state -> uapi .crtc );
20322027 struct drm_i915_private * dev_priv = to_i915 (crtc -> base .dev );
2028+ const struct dpll * clock = & crtc_state -> dpll ;
20332029 enum pipe pipe = crtc -> pipe ;
20342030 enum dpio_channel port = vlv_pipe_to_channel (pipe );
20352031 enum dpio_phy phy = vlv_pipe_to_phy (crtc -> pipe );
2036- u32 loopfilter , tribuf_calcntr ;
2037- u32 bestm2 , bestp1 , bestp2 , bestm2_frac ;
2038- u32 dpio_val ;
2039- int vco ;
2040-
2041- bestm2_frac = crtc_state -> dpll .m2 & 0x3fffff ;
2042- bestm2 = crtc_state -> dpll .m2 >> 22 ;
2043- bestp1 = crtc_state -> dpll .p1 ;
2044- bestp2 = crtc_state -> dpll .p2 ;
2045- vco = crtc_state -> dpll .vco ;
2032+ u32 dpio_val , loopfilter , tribuf_calcntr ;
2033+ u32 m2_frac ;
2034+
2035+ m2_frac = clock -> m2 & 0x3fffff ;
20462036 dpio_val = 0 ;
20472037 loopfilter = 0 ;
20482038
20492039 vlv_dpio_get (dev_priv );
20502040
20512041 /* p1 and p2 divider */
20522042 vlv_dpio_write (dev_priv , phy , CHV_CMN_DW13 (port ),
2053- 5 << DPIO_CHV_S1_DIV_SHIFT |
2054- bestp1 << DPIO_CHV_P1_DIV_SHIFT |
2055- bestp2 << DPIO_CHV_P2_DIV_SHIFT |
2056- 1 << DPIO_CHV_K_DIV_SHIFT );
2043+ 5 << DPIO_CHV_S1_DIV_SHIFT |
2044+ clock -> p1 << DPIO_CHV_P1_DIV_SHIFT |
2045+ clock -> p2 << DPIO_CHV_P2_DIV_SHIFT |
2046+ 1 << DPIO_CHV_K_DIV_SHIFT );
20572047
20582048 /* Feedback post-divider - m2 */
2059- vlv_dpio_write (dev_priv , phy , CHV_PLL_DW0 (port ), bestm2 );
2049+ vlv_dpio_write (dev_priv , phy , CHV_PLL_DW0 (port ),
2050+ clock -> m2 >> 22 );
20602051
20612052 /* Feedback refclk divider - n and m1 */
20622053 vlv_dpio_write (dev_priv , phy , CHV_PLL_DW1 (port ),
2063- DPIO_CHV_M1_DIV_BY_2 |
2064- 1 << DPIO_CHV_N_DIV_SHIFT );
2054+ DPIO_CHV_M1_DIV_BY_2 |
2055+ 1 << DPIO_CHV_N_DIV_SHIFT );
20652056
20662057 /* M2 fraction division */
2067- vlv_dpio_write (dev_priv , phy , CHV_PLL_DW2 (port ), bestm2_frac );
2058+ vlv_dpio_write (dev_priv , phy , CHV_PLL_DW2 (port ),
2059+ m2_frac );
20682060
20692061 /* M2 fraction division enable */
20702062 dpio_val = vlv_dpio_read (dev_priv , phy , CHV_PLL_DW3 (port ));
20712063 dpio_val &= ~(DPIO_CHV_FEEDFWD_GAIN_MASK | DPIO_CHV_FRAC_DIV_EN );
20722064 dpio_val |= (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT );
2073- if (bestm2_frac )
2065+ if (m2_frac )
20742066 dpio_val |= DPIO_CHV_FRAC_DIV_EN ;
20752067 vlv_dpio_write (dev_priv , phy , CHV_PLL_DW3 (port ), dpio_val );
20762068
@@ -2079,22 +2071,22 @@ static void chv_prepare_pll(const struct intel_crtc_state *crtc_state)
20792071 dpio_val &= ~(DPIO_CHV_INT_LOCK_THRESHOLD_MASK |
20802072 DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE );
20812073 dpio_val |= (0x5 << DPIO_CHV_INT_LOCK_THRESHOLD_SHIFT );
2082- if (!bestm2_frac )
2074+ if (!m2_frac )
20832075 dpio_val |= DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE ;
20842076 vlv_dpio_write (dev_priv , phy , CHV_PLL_DW9 (port ), dpio_val );
20852077
20862078 /* Loop filter */
2087- if (vco == 5400000 ) {
2079+ if (clock -> vco == 5400000 ) {
20882080 loopfilter |= (0x3 << DPIO_CHV_PROP_COEFF_SHIFT );
20892081 loopfilter |= (0x8 << DPIO_CHV_INT_COEFF_SHIFT );
20902082 loopfilter |= (0x1 << DPIO_CHV_GAIN_CTRL_SHIFT );
20912083 tribuf_calcntr = 0x9 ;
2092- } else if (vco <= 6200000 ) {
2084+ } else if (clock -> vco <= 6200000 ) {
20932085 loopfilter |= (0x5 << DPIO_CHV_PROP_COEFF_SHIFT );
20942086 loopfilter |= (0xB << DPIO_CHV_INT_COEFF_SHIFT );
20952087 loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT );
20962088 tribuf_calcntr = 0x9 ;
2097- } else if (vco <= 6480000 ) {
2089+ } else if (clock -> vco <= 6480000 ) {
20982090 loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT );
20992091 loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT );
21002092 loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT );
0 commit comments