Skip to content

Commit b0efc42

Browse files
committed
drm/i915/dpio: Clean up the vlv/chv PHY register bits
Use REG_BIT() & co. for the vlv/chv DPIO PHY registers. Note that DPIO_BIAS_CURRENT_CTL_SHIFT was incorrectly defined to be 21 wheres 20 is the correct value. It is not used in the code though so didn't bother splitting to a separate patch. v2: drop stray tabs (Jani) Signed-off-by: Ville Syrjälä <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Reviewed-by: Jani Nikula <[email protected]>
1 parent 32373aa commit b0efc42

File tree

4 files changed

+229
-202
lines changed

4 files changed

+229
-202
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1553,10 +1553,11 @@ static void assert_chv_phy_powergate(struct drm_i915_private *dev_priv, enum dpi
15531553
}
15541554

15551555
if (ch == DPIO_CH0)
1556-
actual = val >> DPIO_ANYDL_POWERDOWN_SHIFT_CH0;
1556+
actual = REG_FIELD_GET(DPIO_ANYDL_POWERDOWN_CH0 |
1557+
DPIO_ALLDL_POWERDOWN_CH0, val);
15571558
else
1558-
actual = val >> DPIO_ANYDL_POWERDOWN_SHIFT_CH1;
1559-
actual &= DPIO_ALLDL_POWERDOWN | DPIO_ANYDL_POWERDOWN;
1559+
actual = REG_FIELD_GET(DPIO_ANYDL_POWERDOWN_CH1 |
1560+
DPIO_ALLDL_POWERDOWN_CH1, val);
15601561

15611562
drm_WARN(&dev_priv->drm, actual != expected,
15621563
"Unexpected DPIO lane power down: all %d, any %d. Expected: all %d, any %d. (0x%x = 0x%08x)\n",

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

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
757757
for (i = 0; i < crtc_state->lane_count; i++) {
758758
val = vlv_dpio_read(dev_priv, phy, CHV_TX_DW4(ch, i));
759759
val &= ~DPIO_SWING_DEEMPH9P5_MASK;
760-
val |= deemph_reg_value << DPIO_SWING_DEEMPH9P5_SHIFT;
760+
val |= DPIO_SWING_DEEMPH9P5(deemph_reg_value);
761761
vlv_dpio_write(dev_priv, phy, CHV_TX_DW4(ch, i), val);
762762
}
763763

@@ -766,15 +766,15 @@ void chv_set_phy_signal_level(struct intel_encoder *encoder,
766766
val = vlv_dpio_read(dev_priv, phy, CHV_TX_DW2(ch, i));
767767

768768
val &= ~DPIO_SWING_MARGIN000_MASK;
769-
val |= margin_reg_value << DPIO_SWING_MARGIN000_SHIFT;
769+
val |= DPIO_SWING_MARGIN000(margin_reg_value);
770770

771771
/*
772772
* Supposedly this value shouldn't matter when unique transition
773773
* scale is disabled, but in fact it does matter. Let's just
774774
* always program the same value and hope it's OK.
775775
*/
776-
val &= ~(0xff << DPIO_UNIQ_TRANS_SCALE_SHIFT);
777-
val |= 0x9a << DPIO_UNIQ_TRANS_SCALE_SHIFT;
776+
val &= ~DPIO_UNIQ_TRANS_SCALE_MASK;
777+
val |= DPIO_UNIQ_TRANS_SCALE(0x9a);
778778

779779
vlv_dpio_write(dev_priv, phy, CHV_TX_DW2(ch, i), val);
780780
}
@@ -902,20 +902,20 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
902902

903903
/* program clock channel usage */
904904
val = vlv_dpio_read(dev_priv, phy, VLV_PCS01_DW8(ch));
905-
val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
906-
if (pipe != PIPE_B)
907-
val &= ~CHV_PCS_USEDCLKCHANNEL;
905+
val |= DPIO_PCS_USEDCLKCHANNEL_OVRRIDE;
906+
if (pipe == PIPE_B)
907+
val |= DPIO_PCS_USEDCLKCHANNEL;
908908
else
909-
val |= CHV_PCS_USEDCLKCHANNEL;
909+
val &= ~DPIO_PCS_USEDCLKCHANNEL;
910910
vlv_dpio_write(dev_priv, phy, VLV_PCS01_DW8(ch), val);
911911

912912
if (crtc_state->lane_count > 2) {
913913
val = vlv_dpio_read(dev_priv, phy, VLV_PCS23_DW8(ch));
914-
val |= CHV_PCS_USEDCLKCHANNEL_OVRRIDE;
915-
if (pipe != PIPE_B)
916-
val &= ~CHV_PCS_USEDCLKCHANNEL;
914+
val |= DPIO_PCS_USEDCLKCHANNEL_OVRRIDE;
915+
if (pipe == PIPE_B)
916+
val |= DPIO_PCS_USEDCLKCHANNEL;
917917
else
918-
val |= CHV_PCS_USEDCLKCHANNEL;
918+
val &= ~DPIO_PCS_USEDCLKCHANNEL;
919919
vlv_dpio_write(dev_priv, phy, VLV_PCS23_DW8(ch), val);
920920
}
921921

@@ -925,10 +925,10 @@ void chv_phy_pre_pll_enable(struct intel_encoder *encoder,
925925
* pick the CL based on the port.
926926
*/
927927
val = vlv_dpio_read(dev_priv, phy, CHV_CMN_DW19(ch));
928-
if (pipe != PIPE_B)
929-
val &= ~CHV_CMN_USEDCLKCHANNEL;
930-
else
928+
if (pipe == PIPE_B)
931929
val |= CHV_CMN_USEDCLKCHANNEL;
930+
else
931+
val &= ~CHV_CMN_USEDCLKCHANNEL;
932932
vlv_dpio_write(dev_priv, phy, CHV_CMN_DW19(ch), val);
933933

934934
vlv_dpio_put(dev_priv);
@@ -962,11 +962,10 @@ void chv_phy_pre_encoder_enable(struct intel_encoder *encoder,
962962
for (i = 0; i < crtc_state->lane_count; i++) {
963963
/* Set the upar bit */
964964
if (crtc_state->lane_count == 1)
965-
data = 0x0;
965+
data = 0;
966966
else
967-
data = (i == 1) ? 0x0 : 0x1;
968-
vlv_dpio_write(dev_priv, phy, CHV_TX_DW14(ch, i),
969-
data << DPIO_UPAR_SHIFT);
967+
data = (i == 1) ? 0 : DPIO_UPAR;
968+
vlv_dpio_write(dev_priv, phy, CHV_TX_DW14(ch, i), data);
970969
}
971970

972971
/* Data lane stagger programming */
@@ -1099,13 +1098,13 @@ void vlv_phy_pre_pll_enable(struct intel_encoder *encoder,
10991098
vlv_dpio_get(dev_priv);
11001099

11011100
vlv_dpio_write(dev_priv, phy, VLV_PCS_DW0_GRP(ch),
1102-
DPIO_PCS_TX_LANE2_RESET |
1103-
DPIO_PCS_TX_LANE1_RESET);
1101+
DPIO_PCS_TX_LANE2_RESET |
1102+
DPIO_PCS_TX_LANE1_RESET);
11041103
vlv_dpio_write(dev_priv, phy, VLV_PCS_DW1_GRP(ch),
1105-
DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
1106-
DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
1107-
(1<<DPIO_PCS_CLK_DATAWIDTH_SHIFT) |
1108-
DPIO_PCS_CLK_SOFT_RESET);
1104+
DPIO_PCS_CLK_CRI_RXEB_EIOS_EN |
1105+
DPIO_PCS_CLK_CRI_RXDIGFILTSG_EN |
1106+
DPIO_PCS_CLK_DATAWIDTH_8_10 |
1107+
DPIO_PCS_CLK_SOFT_RESET);
11091108

11101109
/* Fix up inter-pair skew failure */
11111110
vlv_dpio_write(dev_priv, phy, VLV_PCS_DW12_GRP(ch), 0x00750f00);
@@ -1130,12 +1129,10 @@ void vlv_phy_pre_encoder_enable(struct intel_encoder *encoder,
11301129
vlv_dpio_get(dev_priv);
11311130

11321131
/* Enable clock channels for this port */
1133-
val = 0;
1134-
if (pipe)
1135-
val |= (1<<21);
1136-
else
1137-
val &= ~(1<<21);
1138-
val |= 0x001000c4;
1132+
val = DPIO_PCS_USEDCLKCHANNEL_OVRRIDE;
1133+
if (pipe == PIPE_B)
1134+
val |= DPIO_PCS_USEDCLKCHANNEL;
1135+
val |= 0xc4;
11391136
vlv_dpio_write(dev_priv, phy, VLV_PCS_DW8_GRP(ch), val);
11401137

11411138
/* Program lane clock */

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

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -527,11 +527,11 @@ void vlv_crtc_clock_get(struct intel_crtc_state *crtc_state)
527527
tmp = vlv_dpio_read(dev_priv, phy, VLV_PLL_DW3(ch));
528528
vlv_dpio_put(dev_priv);
529529

530-
clock.m1 = (tmp >> DPIO_M1DIV_SHIFT) & 7;
531-
clock.m2 = tmp & DPIO_M2DIV_MASK;
532-
clock.n = (tmp >> DPIO_N_SHIFT) & 0xf;
533-
clock.p1 = (tmp >> DPIO_P1_SHIFT) & 7;
534-
clock.p2 = (tmp >> DPIO_P2_SHIFT) & 0x1f;
530+
clock.m1 = REG_FIELD_GET(DPIO_M1_DIV_MASK, tmp);
531+
clock.m2 = REG_FIELD_GET(DPIO_M2_DIV_MASK, tmp);
532+
clock.n = REG_FIELD_GET(DPIO_N_DIV_MASK, tmp);
533+
clock.p1 = REG_FIELD_GET(DPIO_P1_DIV_MASK, tmp);
534+
clock.p2 = REG_FIELD_GET(DPIO_P2_DIV_MASK, tmp);
535535

536536
crtc_state->port_clock = vlv_calc_dpll_params(refclk, &clock);
537537
}
@@ -559,13 +559,13 @@ void chv_crtc_clock_get(struct intel_crtc_state *crtc_state)
559559
pll_dw3 = vlv_dpio_read(dev_priv, phy, CHV_PLL_DW3(ch));
560560
vlv_dpio_put(dev_priv);
561561

562-
clock.m1 = (pll_dw1 & 0x7) == DPIO_CHV_M1_DIV_BY_2 ? 2 : 0;
563-
clock.m2 = (pll_dw0 & 0xff) << 22;
562+
clock.m1 = REG_FIELD_GET(DPIO_CHV_M1_DIV_MASK, pll_dw1) == DPIO_CHV_M1_DIV_BY_2 ? 2 : 0;
563+
clock.m2 = REG_FIELD_GET(DPIO_CHV_M2_DIV_MASK, pll_dw0) << 22;
564564
if (pll_dw3 & DPIO_CHV_FRAC_DIV_EN)
565-
clock.m2 |= pll_dw2 & 0x3fffff;
566-
clock.n = (pll_dw1 >> DPIO_CHV_N_DIV_SHIFT) & 0xf;
567-
clock.p1 = (cmn_dw13 >> DPIO_CHV_P1_DIV_SHIFT) & 0x7;
568-
clock.p2 = (cmn_dw13 >> DPIO_CHV_P2_DIV_SHIFT) & 0x1f;
565+
clock.m2 |= REG_FIELD_GET(DPIO_CHV_M2_FRAC_DIV_MASK, pll_dw2);
566+
clock.n = REG_FIELD_GET(DPIO_CHV_N_DIV_MASK, pll_dw1);
567+
clock.p1 = REG_FIELD_GET(DPIO_CHV_P1_DIV_MASK, cmn_dw13);
568+
clock.p2 = REG_FIELD_GET(DPIO_CHV_P2_DIV_MASK, cmn_dw13);
569569

570570
crtc_state->port_clock = chv_calc_dpll_params(refclk, &clock);
571571
}
@@ -1926,19 +1926,19 @@ static void vlv_prepare_pll(const struct intel_crtc_state *crtc_state)
19261926
vlv_dpio_write(dev_priv, phy, VLV_CMN_DW0, 0x610);
19271927

19281928
/* Set idtafcrecal before PLL is enabled */
1929-
tmp = (clock->m1 << DPIO_M1DIV_SHIFT) |
1930-
(clock->m2 & DPIO_M2DIV_MASK) |
1931-
(clock->p1 << DPIO_P1_SHIFT) |
1932-
(clock->p2 << DPIO_P2_SHIFT) |
1933-
(clock->n << DPIO_N_SHIFT) |
1934-
(1 << DPIO_K_SHIFT);
1929+
tmp = DPIO_M1_DIV(clock->m1) |
1930+
DPIO_M2_DIV(clock->m2) |
1931+
DPIO_P1_DIV(clock->p1) |
1932+
DPIO_P2_DIV(clock->p2) |
1933+
DPIO_N_DIV(clock->n) |
1934+
DPIO_K_DIV(1);
19351935

19361936
/*
19371937
* Post divider depends on pixel clock rate, DAC vs digital (and LVDS,
19381938
* but we don't support that).
19391939
* Note: don't use the DAC post divider as it seems unstable.
19401940
*/
1941-
tmp |= (DPIO_POST_DIV_HDMIDP << DPIO_POST_DIV_SHIFT);
1941+
tmp |= DPIO_S1_DIV(DPIO_S1_DIV_HDMIDP);
19421942
vlv_dpio_write(dev_priv, phy, VLV_PLL_DW3(ch), tmp);
19431943

19441944
tmp |= DPIO_ENABLE_CALIBRATION;
@@ -2034,75 +2034,74 @@ static void chv_prepare_pll(const struct intel_crtc_state *crtc_state)
20342034
u32 m2_frac;
20352035

20362036
m2_frac = clock->m2 & 0x3fffff;
2037-
loopfilter = 0;
20382037

20392038
vlv_dpio_get(dev_priv);
20402039

20412040
/* p1 and p2 divider */
20422041
vlv_dpio_write(dev_priv, phy, CHV_CMN_DW13(ch),
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);
2042+
DPIO_CHV_S1_DIV(5) |
2043+
DPIO_CHV_P1_DIV(clock->p1) |
2044+
DPIO_CHV_P2_DIV(clock->p2) |
2045+
DPIO_CHV_K_DIV(1));
20472046

20482047
/* Feedback post-divider - m2 */
20492048
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW0(ch),
2050-
clock->m2 >> 22);
2049+
DPIO_CHV_M2_DIV(clock->m2 >> 22));
20512050

20522051
/* Feedback refclk divider - n and m1 */
20532052
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW1(ch),
2054-
DPIO_CHV_M1_DIV_BY_2 |
2055-
1 << DPIO_CHV_N_DIV_SHIFT);
2053+
DPIO_CHV_M1_DIV(DPIO_CHV_M1_DIV_BY_2) |
2054+
DPIO_CHV_N_DIV(1));
20562055

20572056
/* M2 fraction division */
20582057
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW2(ch),
2059-
m2_frac);
2058+
DPIO_CHV_M2_FRAC_DIV(m2_frac));
20602059

20612060
/* M2 fraction division enable */
20622061
tmp = vlv_dpio_read(dev_priv, phy, CHV_PLL_DW3(ch));
20632062
tmp &= ~(DPIO_CHV_FEEDFWD_GAIN_MASK | DPIO_CHV_FRAC_DIV_EN);
2064-
tmp |= (2 << DPIO_CHV_FEEDFWD_GAIN_SHIFT);
2063+
tmp |= DPIO_CHV_FEEDFWD_GAIN(2);
20652064
if (m2_frac)
20662065
tmp |= DPIO_CHV_FRAC_DIV_EN;
20672066
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW3(ch), tmp);
20682067

20692068
/* Program digital lock detect threshold */
20702069
tmp = vlv_dpio_read(dev_priv, phy, CHV_PLL_DW9(ch));
20712070
tmp &= ~(DPIO_CHV_INT_LOCK_THRESHOLD_MASK |
2072-
DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE);
2073-
tmp |= (0x5 << DPIO_CHV_INT_LOCK_THRESHOLD_SHIFT);
2071+
DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE);
2072+
tmp |= DPIO_CHV_INT_LOCK_THRESHOLD(0x5);
20742073
if (!m2_frac)
20752074
tmp |= DPIO_CHV_INT_LOCK_THRESHOLD_SEL_COARSE;
20762075
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW9(ch), tmp);
20772076

20782077
/* Loop filter */
20792078
if (clock->vco == 5400000) {
2080-
loopfilter |= (0x3 << DPIO_CHV_PROP_COEFF_SHIFT);
2081-
loopfilter |= (0x8 << DPIO_CHV_INT_COEFF_SHIFT);
2082-
loopfilter |= (0x1 << DPIO_CHV_GAIN_CTRL_SHIFT);
2079+
loopfilter = DPIO_CHV_PROP_COEFF(0x3) |
2080+
DPIO_CHV_INT_COEFF(0x8) |
2081+
DPIO_CHV_GAIN_CTRL(0x1);
20832082
tribuf_calcntr = 0x9;
20842083
} else if (clock->vco <= 6200000) {
2085-
loopfilter |= (0x5 << DPIO_CHV_PROP_COEFF_SHIFT);
2086-
loopfilter |= (0xB << DPIO_CHV_INT_COEFF_SHIFT);
2087-
loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
2084+
loopfilter = DPIO_CHV_PROP_COEFF(0x5) |
2085+
DPIO_CHV_INT_COEFF(0xB) |
2086+
DPIO_CHV_GAIN_CTRL(0x3);
20882087
tribuf_calcntr = 0x9;
20892088
} else if (clock->vco <= 6480000) {
2090-
loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT);
2091-
loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT);
2092-
loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
2089+
loopfilter = DPIO_CHV_PROP_COEFF(0x4) |
2090+
DPIO_CHV_INT_COEFF(0x9) |
2091+
DPIO_CHV_GAIN_CTRL(0x3);
20932092
tribuf_calcntr = 0x8;
20942093
} else {
20952094
/* Not supported. Apply the same limits as in the max case */
2096-
loopfilter |= (0x4 << DPIO_CHV_PROP_COEFF_SHIFT);
2097-
loopfilter |= (0x9 << DPIO_CHV_INT_COEFF_SHIFT);
2098-
loopfilter |= (0x3 << DPIO_CHV_GAIN_CTRL_SHIFT);
2095+
loopfilter = DPIO_CHV_PROP_COEFF(0x4) |
2096+
DPIO_CHV_INT_COEFF(0x9) |
2097+
DPIO_CHV_GAIN_CTRL(0x3);
20992098
tribuf_calcntr = 0;
21002099
}
21012100
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW6(ch), loopfilter);
21022101

21032102
tmp = vlv_dpio_read(dev_priv, phy, CHV_PLL_DW8(ch));
21042103
tmp &= ~DPIO_CHV_TDC_TARGET_CNT_MASK;
2105-
tmp |= (tribuf_calcntr << DPIO_CHV_TDC_TARGET_CNT_SHIFT);
2104+
tmp |= DPIO_CHV_TDC_TARGET_CNT(tribuf_calcntr);
21062105
vlv_dpio_write(dev_priv, phy, CHV_PLL_DW8(ch), tmp);
21072106

21082107
/* AFC Recal */

0 commit comments

Comments
 (0)