@@ -2883,6 +2883,13 @@ static void ironlake_fdi_link_train(struct drm_crtc *crtc)
}
+static const int snb_a_fdi_train_param[] = {
+ FDI_LINK_TRAIN_400MV_0DB_SNB_A,
+ FDI_LINK_TRAIN_400MV_6DB_SNB_A,
+ FDI_LINK_TRAIN_600MV_3_5DB_SNB_A,
+ FDI_LINK_TRAIN_800MV_0DB_SNB_A,
+};
+
static const int snb_b_fdi_train_param[] = {
FDI_LINK_TRAIN_400MV_0DB_SNB_B,
FDI_LINK_TRAIN_400MV_6DB_SNB_B,
@@ -2898,6 +2905,12 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
int pipe = intel_crtc->pipe;
u32 reg, temp, i, retry;
+ const int *train_param;
+
+ if (INTEL_STEPPING(dev) == 0)
+ train_param = snb_a_fdi_train_param;
+ else
+ train_param = snb_b_fdi_train_param;
/* Train 1: umask FDI RX Interrupt symbol_lock and bit_lock bit
for train result */
@@ -2943,7 +2956,7 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
reg = FDI_TX_CTL(pipe);
temp = I915_READ(reg);
temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
- temp |= snb_b_fdi_train_param[i];
+ temp |= train_param[i];
I915_WRITE(reg, temp);
POSTING_READ(reg);
@@ -2996,7 +3009,7 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
reg = FDI_TX_CTL(pipe);
temp = I915_READ(reg);
temp &= ~FDI_LINK_TRAIN_VOL_EMP_MASK;
- temp |= snb_b_fdi_train_param[i];
+ temp |= train_param[i];
I915_WRITE(reg, temp);
POSTING_READ(reg);
More of an example of where to use the stepping macro than anything else. I think these early steppings never went outside of Intel. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> --- drivers/gpu/drm/i915/intel_display.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)