@@ -292,12 +292,10 @@ void bxt_dpio_phy_set_signal_levels(struct intel_encoder *encoder,
292292 const struct intel_crtc_state * crtc_state )
293293{
294294 struct drm_i915_private * dev_priv = to_i915 (encoder -> base .dev );
295- int level = intel_ddi_level (encoder , crtc_state , 0 );
296295 const struct intel_ddi_buf_trans * trans ;
297296 enum dpio_channel ch ;
298297 enum dpio_phy phy ;
299- int n_entries ;
300- u32 val ;
298+ int lane , n_entries ;
301299
302300 trans = encoder -> get_buf_trans (encoder , crtc_state , & n_entries );
303301 if (drm_WARN_ON_ONCE (& dev_priv -> drm , !trans ))
@@ -313,26 +311,37 @@ void bxt_dpio_phy_set_signal_levels(struct intel_encoder *encoder,
313311 BXT_PORT_PCS_DW10_GRP (phy , ch ),
314312 TX2_SWING_CALC_INIT | TX1_SWING_CALC_INIT , 0 );
315313
316- bxt_dpio_phy_rmw_grp (dev_priv , BXT_PORT_TX_DW2_LN (phy , ch , 0 ),
317- BXT_PORT_TX_DW2_GRP (phy , ch ),
314+ for (lane = 0 ; lane < crtc_state -> lane_count ; lane ++ ) {
315+ int level = intel_ddi_level (encoder , crtc_state , lane );
316+
317+ intel_de_rmw (dev_priv , BXT_PORT_TX_DW2_LN (phy , ch , lane ),
318318 MARGIN_000_MASK | UNIQ_TRANS_SCALE_MASK ,
319319 MARGIN_000 (trans -> entries [level ].bxt .margin ) |
320320 UNIQ_TRANS_SCALE (trans -> entries [level ].bxt .scale ));
321+ }
322+
323+ for (lane = 0 ; lane < crtc_state -> lane_count ; lane ++ ) {
324+ int level = intel_ddi_level (encoder , crtc_state , lane );
325+ u32 val ;
321326
322- bxt_dpio_phy_rmw_grp (dev_priv , BXT_PORT_TX_DW3_LN (phy , ch , 0 ),
323- BXT_PORT_TX_DW3_GRP (phy , ch ),
327+ intel_de_rmw (dev_priv , BXT_PORT_TX_DW3_LN (phy , ch , lane ),
324328 SCALE_DCOMP_METHOD ,
325329 trans -> entries [level ].bxt .enable ?
326330 SCALE_DCOMP_METHOD : 0 );
327331
328- val = intel_de_read (dev_priv , BXT_PORT_TX_DW3_LN (phy , ch , 0 ));
329- if ((val & UNIQUE_TRANGE_EN_METHOD ) && !(val & SCALE_DCOMP_METHOD ))
330- drm_err (& dev_priv -> drm ,
331- "Disabled scaling while ouniqetrangenmethod was set" );
332+ val = intel_de_read (dev_priv , BXT_PORT_TX_DW3_LN (phy , ch , lane ));
333+ if ((val & UNIQUE_TRANGE_EN_METHOD ) && !(val & SCALE_DCOMP_METHOD ))
334+ drm_err (& dev_priv -> drm ,
335+ "Disabled scaling while ouniqetrangenmethod was set" );
336+ }
337+
338+ for (lane = 0 ; lane < crtc_state -> lane_count ; lane ++ ) {
339+ int level = intel_ddi_level (encoder , crtc_state , lane );
332340
333- bxt_dpio_phy_rmw_grp (dev_priv , BXT_PORT_TX_DW4_LN (phy , ch , 0 ),
334- BXT_PORT_TX_DW4_GRP ( phy , ch ), DE_EMPHASIS_MASK ,
341+ intel_de_rmw (dev_priv , BXT_PORT_TX_DW4_LN (phy , ch , lane ),
342+ DE_EMPHASIS_MASK ,
335343 DE_EMPHASIS (trans -> entries [level ].bxt .deemphasis ));
344+ }
336345
337346 bxt_dpio_phy_rmw_grp (dev_priv , BXT_PORT_PCS_DW10_LN01 (phy , ch ),
338347 BXT_PORT_PCS_DW10_GRP (phy , ch ),
0 commit comments