Subversion Repositories Kolibri OS

Rev

Rev 2330 | Rev 2351 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2330 Rev 2342
Line 34... Line 34...
34
#include "intel_drv.h"
34
#include "intel_drv.h"
35
#include "i915_drm.h"
35
#include "i915_drm.h"
36
#include "i915_drv.h"
36
#include "i915_drv.h"
37
#include "drm_dp_helper.h"
37
#include "drm_dp_helper.h"
Line 38... Line -...
38
 
-
 
-
 
38
 
39
 
39
#define DP_RECEIVER_CAP_SIZE	0xf
40
#define DP_LINK_STATUS_SIZE 6
40
#define DP_LINK_STATUS_SIZE 6
Line 41... Line 41...
41
#define DP_LINK_CHECK_TIMEOUT   (10 * 1000)
41
#define DP_LINK_CHECK_TIMEOUT   (10 * 1000)
Line 51... Line 51...
51
    int force_audio;
51
    int force_audio;
52
    uint32_t color_range;
52
    uint32_t color_range;
53
    int dpms_mode;
53
    int dpms_mode;
54
    uint8_t link_bw;
54
    uint8_t link_bw;
55
    uint8_t lane_count;
55
    uint8_t lane_count;
56
    uint8_t dpcd[8];
56
	uint8_t dpcd[DP_RECEIVER_CAP_SIZE];
57
    struct i2c_adapter adapter;
57
    struct i2c_adapter adapter;
58
    struct i2c_algo_dp_aux_data algo;
58
    struct i2c_algo_dp_aux_data algo;
59
    bool is_pch_edp;
59
    bool is_pch_edp;
60
    uint8_t train_set[4];
60
    uint8_t train_set[4];
-
 
61
	int panel_power_up_delay;
-
 
62
	int panel_power_down_delay;
61
    uint8_t link_status[DP_LINK_STATUS_SIZE];
63
	int panel_power_cycle_delay;
-
 
64
	int backlight_on_delay;
-
 
65
	int backlight_off_delay;
-
 
66
	struct drm_display_mode *panel_fixed_mode;  /* for eDP */
-
 
67
	bool want_panel_vdd;
62
};
68
};
Line 63... Line 69...
63
 
69
 
64
/**
70
/**
65
 * is_edp - is the given port attached to an eDP panel (either CPU or PCH)
71
 * is_edp - is the given port attached to an eDP panel (either CPU or PCH)
Line 84... Line 90...
84
static bool is_pch_edp(struct intel_dp *intel_dp)
90
static bool is_pch_edp(struct intel_dp *intel_dp)
85
{
91
{
86
	return intel_dp->is_pch_edp;
92
	return intel_dp->is_pch_edp;
87
}
93
}
Line -... Line 94...
-
 
94
 
-
 
95
/**
-
 
96
 * is_cpu_edp - is the port on the CPU and attached to an eDP panel?
-
 
97
 * @intel_dp: DP struct
-
 
98
 *
-
 
99
 * Returns true if the given DP struct corresponds to a CPU eDP port.
-
 
100
 */
-
 
101
static bool is_cpu_edp(struct intel_dp *intel_dp)
-
 
102
{
-
 
103
	return is_edp(intel_dp) && !is_pch_edp(intel_dp);
-
 
104
}
88
 
105
 
89
static struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
106
static struct intel_dp *enc_to_intel_dp(struct drm_encoder *encoder)
90
{
107
{
91
	return container_of(encoder, struct intel_dp, base.base);
108
	return container_of(encoder, struct intel_dp, base.base);
Line 134... Line 151...
134
}
151
}
Line 135... Line 152...
135
 
152
 
136
static int
153
static int
137
intel_dp_max_lane_count(struct intel_dp *intel_dp)
154
intel_dp_max_lane_count(struct intel_dp *intel_dp)
138
{
-
 
139
	int max_lane_count = 4;
-
 
140
 
-
 
141
	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11) {
155
{
142
		max_lane_count = intel_dp->dpcd[DP_MAX_LANE_COUNT] & 0x1f;
156
	int max_lane_count = intel_dp->dpcd[DP_MAX_LANE_COUNT] & 0x1f;
143
		switch (max_lane_count) {
157
		switch (max_lane_count) {
144
		case 1: case 2: case 4:
158
		case 1: case 2: case 4:
145
			break;
159
			break;
146
		default:
160
		default:
147
			max_lane_count = 4;
161
			max_lane_count = 4;
148
		}
-
 
149
	}
162
		}
150
	return max_lane_count;
163
	return max_lane_count;
Line 151... Line 164...
151
}
164
}
152
 
165
 
Line 173... Line 186...
173
		return 270000;
186
		return 270000;
174
	else
187
	else
175
		return 162000;
188
		return 162000;
176
}
189
}
Line -... Line 190...
-
 
190
 
-
 
191
/*
-
 
192
 * The units on the numbers in the next two are... bizarre.  Examples will
-
 
193
 * make it clearer; this one parallels an example in the eDP spec.
-
 
194
 *
-
 
195
 * intel_dp_max_data_rate for one lane of 2.7GHz evaluates as:
177
 
196
 *
-
 
197
 *     270000 * 1 * 8 / 10 == 216000
-
 
198
 *
-
 
199
 * The actual data capacity of that configuration is 2.16Gbit/s, so the
-
 
200
 * units are decakilobits.  ->clock in a drm_display_mode is in kilohertz -
-
 
201
 * or equivalently, kilopixels per second - so for 1680x1050R it'd be
-
 
202
 * 119000.  At 18bpp that's 2142000 kilobits per second.
-
 
203
 *
-
 
204
 * Thus the strange-looking division by 10 in intel_dp_link_required, to
-
 
205
 * get the result in decakilobits instead of kilobits.
-
 
206
 */
178
/* I think this is a fiction */
207
 
179
static int
208
static int
180
intel_dp_link_required(struct drm_device *dev, struct intel_dp *intel_dp, int pixel_clock)
209
intel_dp_link_required(struct intel_dp *intel_dp, int pixel_clock, int check_bpp)
181
{
210
{
182
	struct drm_crtc *crtc = intel_dp->base.base.crtc;
211
	struct drm_crtc *crtc = intel_dp->base.base.crtc;
183
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
212
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
Line -... Line 213...
-
 
213
	int bpp = 24;
-
 
214
 
184
	int bpp = 24;
215
	if (check_bpp)
185
 
216
		bpp = check_bpp;
Line 186... Line 217...
186
	if (intel_crtc)
217
	else if (intel_crtc)
187
		bpp = intel_crtc->bpp;
218
		bpp = intel_crtc->bpp;
Line 188... Line 219...
188
 
219
 
189
	return (pixel_clock * bpp + 7) / 8;
220
	return (pixel_clock * bpp + 9) / 10;
190
}
221
}
Line 198... Line 229...
198
static int
229
static int
199
intel_dp_mode_valid(struct drm_connector *connector,
230
intel_dp_mode_valid(struct drm_connector *connector,
200
		    struct drm_display_mode *mode)
231
		    struct drm_display_mode *mode)
201
{
232
{
202
	struct intel_dp *intel_dp = intel_attached_dp(connector);
233
	struct intel_dp *intel_dp = intel_attached_dp(connector);
203
	struct drm_device *dev = connector->dev;
-
 
204
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
205
	int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
234
	int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
206
	int max_lanes = intel_dp_max_lane_count(intel_dp);
235
	int max_lanes = intel_dp_max_lane_count(intel_dp);
-
 
236
	int max_rate, mode_rate;
Line 207... Line 237...
207
 
237
 
208
	if (is_edp(intel_dp) && dev_priv->panel_fixed_mode) {
238
	if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
209
		if (mode->hdisplay > dev_priv->panel_fixed_mode->hdisplay)
239
		if (mode->hdisplay > intel_dp->panel_fixed_mode->hdisplay)
Line 210... Line 240...
210
			return MODE_PANEL;
240
			return MODE_PANEL;
211
 
241
 
212
		if (mode->vdisplay > dev_priv->panel_fixed_mode->vdisplay)
242
		if (mode->vdisplay > intel_dp->panel_fixed_mode->vdisplay)
Line 213... Line 243...
213
			return MODE_PANEL;
243
			return MODE_PANEL;
214
	}
244
	}
-
 
245
 
215
 
246
	mode_rate = intel_dp_link_required(intel_dp, mode->clock, 0);
216
	/* only refuse the mode on non eDP since we have seen some weird eDP panels
247
	max_rate = intel_dp_max_data_rate(max_link_clock, max_lanes);
-
 
248
 
217
	   which are outside spec tolerances but somehow work by magic */
249
	if (mode_rate > max_rate) {
218
	if (!is_edp(intel_dp) &&
250
			mode_rate = intel_dp_link_required(intel_dp,
-
 
251
							   mode->clock, 18);
-
 
252
			if (mode_rate > max_rate)
-
 
253
		return MODE_CLOCK_HIGH;
Line 219... Line 254...
219
	    (intel_dp_link_required(connector->dev, intel_dp, mode->clock)
254
			else
220
	     > intel_dp_max_data_rate(max_link_clock, max_lanes)))
255
				mode->private_flags |= INTEL_MODE_DP_FORCE_6BPC;
Line 221... Line 256...
221
		return MODE_CLOCK_HIGH;
256
	}
Line 277... Line 312...
277
	default:
312
	default:
278
		return 133;
313
		return 133;
279
	}
314
	}
280
}
315
}
Line -... Line 316...
-
 
316
 
-
 
317
static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
-
 
318
{
-
 
319
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
320
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
321
 
-
 
322
	return (I915_READ(PCH_PP_STATUS) & PP_ON) != 0;
-
 
323
}
-
 
324
 
-
 
325
static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
-
 
326
{
-
 
327
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
328
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
329
 
-
 
330
	return (I915_READ(PCH_PP_CONTROL) & EDP_FORCE_VDD) != 0;
-
 
331
}
-
 
332
 
-
 
333
static void
-
 
334
intel_dp_check_edp(struct intel_dp *intel_dp)
-
 
335
{
-
 
336
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
337
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
338
 
-
 
339
	if (!is_edp(intel_dp))
-
 
340
		return;
-
 
341
	if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
-
 
342
		WARN(1, "eDP powered off while attempting aux channel communication.\n");
-
 
343
		DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
-
 
344
			      I915_READ(PCH_PP_STATUS),
-
 
345
			      I915_READ(PCH_PP_CONTROL));
-
 
346
	}
-
 
347
}
281
 
348
 
282
static int
349
static int
283
intel_dp_aux_ch(struct intel_dp *intel_dp,
350
intel_dp_aux_ch(struct intel_dp *intel_dp,
284
		uint8_t *send, int send_bytes,
351
		uint8_t *send, int send_bytes,
285
		uint8_t *recv, int recv_size)
352
		uint8_t *recv, int recv_size)
Line 293... Line 360...
293
	int recv_bytes;
360
	int recv_bytes;
294
	uint32_t status;
361
	uint32_t status;
295
	uint32_t aux_clock_divider;
362
	uint32_t aux_clock_divider;
296
	int try, precharge;
363
	int try, precharge;
Line -... Line 364...
-
 
364
 
297
 
365
	intel_dp_check_edp(intel_dp);
298
	/* The clock divider is based off the hrawclk,
366
	/* The clock divider is based off the hrawclk,
299
	 * and would like to run at 2MHz. So, take the
367
	 * and would like to run at 2MHz. So, take the
300
	 * hrawclk value and divide by 2 and use that
368
	 * hrawclk value and divide by 2 and use that
301
	 *
369
	 *
302
	 * Note that PCH attached eDP panels should use a 125MHz input
370
	 * Note that PCH attached eDP panels should use a 125MHz input
303
	 * clock divider.
371
	 * clock divider.
304
	 */
372
	 */
305
	if (is_edp(intel_dp) && !is_pch_edp(intel_dp)) {
373
	if (is_cpu_edp(intel_dp)) {
306
		if (IS_GEN6(dev))
374
		if (IS_GEN6(dev) || IS_GEN7(dev))
307
			aux_clock_divider = 200; /* SNB eDP input clock at 400Mhz */
375
			aux_clock_divider = 200; /* SNB & IVB eDP input clock at 400Mhz */
308
		else
376
		else
309
			aux_clock_divider = 225; /* eDP input clock at 450Mhz */
377
			aux_clock_divider = 225; /* eDP input clock at 450Mhz */
310
	} else if (HAS_PCH_SPLIT(dev))
378
	} else if (HAS_PCH_SPLIT(dev))
311
		aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */
379
		aux_clock_divider = 62; /* IRL input clock fixed at 125Mhz */
Line 406... Line 474...
406
	int ret;
474
	int ret;
407
	uint8_t	msg[20];
475
	uint8_t	msg[20];
408
	int msg_bytes;
476
	int msg_bytes;
409
	uint8_t	ack;
477
	uint8_t	ack;
Line -... Line 478...
-
 
478
 
410
 
479
	intel_dp_check_edp(intel_dp);
411
	if (send_bytes > 16)
480
	if (send_bytes > 16)
412
		return -1;
481
		return -1;
413
	msg[0] = AUX_NATIVE_WRITE << 4;
482
	msg[0] = AUX_NATIVE_WRITE << 4;
414
	msg[1] = address >> 8;
483
	msg[1] = address >> 8;
Line 448... Line 517...
448
	uint8_t reply[20];
517
	uint8_t reply[20];
449
	int reply_bytes;
518
	int reply_bytes;
450
	uint8_t ack;
519
	uint8_t ack;
451
	int ret;
520
	int ret;
Line -... Line 521...
-
 
521
 
452
 
522
	intel_dp_check_edp(intel_dp);
453
	msg[0] = AUX_NATIVE_READ << 4;
523
	msg[0] = AUX_NATIVE_READ << 4;
454
	msg[1] = address >> 8;
524
	msg[1] = address >> 8;
455
	msg[2] = address & 0xff;
525
	msg[2] = address & 0xff;
Line 491... Line 561...
491
	unsigned retry;
561
	unsigned retry;
492
	int msg_bytes;
562
	int msg_bytes;
493
	int reply_bytes;
563
	int reply_bytes;
494
	int ret;
564
	int ret;
Line -... Line 565...
-
 
565
 
495
 
566
	intel_dp_check_edp(intel_dp);
496
	/* Set up the command byte */
567
	/* Set up the command byte */
497
	if (mode & MODE_I2C_READ)
568
	if (mode & MODE_I2C_READ)
498
		msg[0] = AUX_I2C_READ << 4;
569
		msg[0] = AUX_I2C_READ << 4;
499
	else
570
	else
Line 571... Line 642...
571
 
642
 
572
	DRM_ERROR("too many retries, giving up\n");
643
	DRM_ERROR("too many retries, giving up\n");
573
	return -EREMOTEIO;
644
	return -EREMOTEIO;
Line -... Line 645...
-
 
645
}
-
 
646
 
-
 
647
static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp);
574
}
648
static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync);
575
 
649
 
576
static int
650
static int
577
intel_dp_i2c_init(struct intel_dp *intel_dp,
651
intel_dp_i2c_init(struct intel_dp *intel_dp,
-
 
652
		  struct intel_connector *intel_connector, const char *name)
-
 
653
{
578
		  struct intel_connector *intel_connector, const char *name)
654
	int	ret;
579
{
655
 
580
	DRM_DEBUG_KMS("i2c_init %s\n", name);
656
	DRM_DEBUG_KMS("i2c_init %s\n", name);
581
	intel_dp->algo.running = false;
657
	intel_dp->algo.running = false;
Line 588... Line 664...
588
	strncpy (intel_dp->adapter.name, name, sizeof(intel_dp->adapter.name) - 1);
664
	strncpy(intel_dp->adapter.name, name, sizeof(intel_dp->adapter.name) - 1);
589
	intel_dp->adapter.name[sizeof(intel_dp->adapter.name) - 1] = '\0';
665
	intel_dp->adapter.name[sizeof(intel_dp->adapter.name) - 1] = '\0';
590
	intel_dp->adapter.algo_data = &intel_dp->algo;
666
	intel_dp->adapter.algo_data = &intel_dp->algo;
591
	intel_dp->adapter.dev.parent = &intel_connector->base.kdev;
667
	intel_dp->adapter.dev.parent = &intel_connector->base.kdev;
Line -... Line 668...
-
 
668
 
592
 
669
	ironlake_edp_panel_vdd_on(intel_dp);
-
 
670
	ret = i2c_dp_aux_add_bus(&intel_dp->adapter);
-
 
671
	ironlake_edp_panel_vdd_off(intel_dp, false);
593
	return i2c_dp_aux_add_bus(&intel_dp->adapter);
672
	return ret;
Line 594... Line 673...
594
}
673
}
595
 
674
 
596
static bool
675
static bool
597
intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
676
intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
598
		    struct drm_display_mode *adjusted_mode)
677
		    struct drm_display_mode *adjusted_mode)
599
{
-
 
600
	struct drm_device *dev = encoder->dev;
678
{
601
	struct drm_i915_private *dev_priv = dev->dev_private;
679
	struct drm_device *dev = encoder->dev;
602
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
680
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
603
	int lane_count, clock;
681
	int lane_count, clock;
-
 
682
	int max_lane_count = intel_dp_max_lane_count(intel_dp);
604
	int max_lane_count = intel_dp_max_lane_count(intel_dp);
683
	int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0;
Line 605... Line 684...
605
	int max_clock = intel_dp_max_link_bw(intel_dp) == DP_LINK_BW_2_7 ? 1 : 0;
684
	int bpp = mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 0;
606
	static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };
685
	static int bws[2] = { DP_LINK_BW_1_62, DP_LINK_BW_2_7 };
607
 
686
 
608
	if (is_edp(intel_dp) && dev_priv->panel_fixed_mode) {
687
	if (is_edp(intel_dp) && intel_dp->panel_fixed_mode) {
609
		intel_fixed_panel_mode(dev_priv->panel_fixed_mode, adjusted_mode);
688
		intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode);
610
		intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
689
		intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
611
					mode, adjusted_mode);
690
					mode, adjusted_mode);
612
		/*
691
		/*
613
		 * the mode->clock is used to calculate the Data&Link M/N
692
		 * the mode->clock is used to calculate the Data&Link M/N
614
		 * of the pipe. For the eDP the fixed clock should be used.
693
		 * of the pipe. For the eDP the fixed clock should be used.
Line 615... Line 694...
615
		 */
694
		 */
616
		mode->clock = dev_priv->panel_fixed_mode->clock;
695
		mode->clock = intel_dp->panel_fixed_mode->clock;
617
	}
696
	}
Line 618... Line 697...
618
 
697
 
619
	for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
698
	for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
620
		for (clock = 0; clock <= max_clock; clock++) {
699
		for (clock = 0; clock <= max_clock; clock++) {
621
			int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
700
			int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
622
 
701
 
623
			if (intel_dp_link_required(encoder->dev, intel_dp, mode->clock)
702
			if (intel_dp_link_required(intel_dp, mode->clock, bpp)
Line 632... Line 711...
632
				return true;
711
				return true;
633
			}
712
			}
634
		}
713
		}
635
	}
714
	}
Line 636... Line -...
636
 
-
 
637
	if (is_edp(intel_dp)) {
-
 
638
		/* okay we failed just pick the highest */
-
 
639
		intel_dp->lane_count = max_lane_count;
-
 
640
		intel_dp->link_bw = bws[max_clock];
-
 
641
		adjusted_mode->clock = intel_dp_link_clock(intel_dp->link_bw);
-
 
642
		DRM_DEBUG_KMS("Force picking display port link bw %02x lane "
-
 
643
			      "count %d clock %d\n",
-
 
644
			      intel_dp->link_bw, intel_dp->lane_count,
-
 
645
			      adjusted_mode->clock);
-
 
646
 
-
 
647
		return true;
-
 
648
	}
-
 
649
 
715
 
650
	return false;
716
	return false;
Line 651... Line 717...
651
}
717
}
652
 
718
 
Line 704... Line 770...
704
 
770
 
705
        if (encoder->crtc != crtc)
771
        if (encoder->crtc != crtc)
Line 706... Line 772...
706
            continue;
772
            continue;
707
 
773
 
-
 
774
        intel_dp = enc_to_intel_dp(encoder);
-
 
775
		if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
708
        intel_dp = enc_to_intel_dp(encoder);
776
		    intel_dp->base.type == INTEL_OUTPUT_EDP)
709
        if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT) {
777
		{
710
            lane_count = intel_dp->lane_count;
-
 
711
            break;
-
 
712
        } else if (is_edp(intel_dp)) {
-
 
713
            lane_count = dev_priv->edp.lanes;
778
            lane_count = intel_dp->lane_count;
714
            break;
779
            break;
Line 715... Line 780...
715
        }
780
        }
716
    }
781
    }
Line 738... Line 803...
738
        I915_WRITE(PIPE_DP_LINK_M(pipe), m_n.link_m);
803
        I915_WRITE(PIPE_DP_LINK_M(pipe), m_n.link_m);
739
        I915_WRITE(PIPE_DP_LINK_N(pipe), m_n.link_n);
804
        I915_WRITE(PIPE_DP_LINK_N(pipe), m_n.link_n);
740
    }
805
    }
741
}
806
}
Line -... Line 807...
-
 
807
 
-
 
808
static void ironlake_edp_pll_on(struct drm_encoder *encoder);
-
 
809
static void ironlake_edp_pll_off(struct drm_encoder *encoder);
742
 
810
 
743
static void
811
static void
744
intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
812
intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
745
		  struct drm_display_mode *adjusted_mode)
813
		  struct drm_display_mode *adjusted_mode)
746
{
814
{
-
 
815
	struct drm_device *dev = encoder->dev;
747
	struct drm_device *dev = encoder->dev;
816
	struct drm_i915_private *dev_priv = dev->dev_private;
748
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
817
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
749
	struct drm_crtc *crtc = intel_dp->base.base.crtc;
818
	struct drm_crtc *crtc = intel_dp->base.base.crtc;
Line 750... Line 819...
750
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
819
	struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
751
 
820
 
-
 
821
	/* Turn on the eDP PLL if needed */
-
 
822
	if (is_edp(intel_dp)) {
-
 
823
		if (!is_pch_edp(intel_dp))
-
 
824
			ironlake_edp_pll_on(encoder);
-
 
825
		else
Line -... Line 826...
-
 
826
			ironlake_edp_pll_off(encoder);
752
	intel_dp->DP = DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
827
	}
-
 
828
 
-
 
829
	/*
-
 
830
	 * There are four kinds of DP registers:
-
 
831
	 *
-
 
832
	 * 	IBX PCH
-
 
833
	 * 	SNB CPU
-
 
834
	 *	IVB CPU
753
	intel_dp->DP |= intel_dp->color_range;
835
	 * 	CPT PCH
-
 
836
	 *
-
 
837
	 * IBX PCH and CPU are the same for almost everything,
754
 
838
	 * except that the CPU DP PLL is configured in this
755
	if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
839
	 * register
-
 
840
	 *
-
 
841
	 * CPT PCH is quite different, having many bits moved
Line 756... Line 842...
756
		intel_dp->DP |= DP_SYNC_HS_HIGH;
842
	 * to the TRANS_DP_CTL register instead. That
757
	if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
843
	 * configuration happens (oddly) in ironlake_pch_enable
758
		intel_dp->DP |= DP_SYNC_VS_HIGH;
844
	 */
-
 
845
 
-
 
846
	/* Preserve the BIOS-computed detected bit. This is
-
 
847
	 * supposed to be read-only.
-
 
848
	 */
-
 
849
	intel_dp->DP = I915_READ(intel_dp->output_reg) & DP_DETECTED;
759
 
850
	intel_dp->DP |=  DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
Line 760... Line 851...
760
	if (HAS_PCH_CPT(dev) && !is_edp(intel_dp))
851
 
761
		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
852
	/* Handle DP bits in common between all three register formats */
762
	else
853
 
763
		intel_dp->DP |= DP_LINK_TRAIN_OFF;
854
	intel_dp->DP |= DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
Line 771... Line 862...
771
		break;
862
		break;
772
	case 4:
863
	case 4:
773
		intel_dp->DP |= DP_PORT_WIDTH_4;
864
		intel_dp->DP |= DP_PORT_WIDTH_4;
774
		break;
865
		break;
775
	}
866
	}
776
	if (intel_dp->has_audio)
867
	if (intel_dp->has_audio) {
-
 
868
		DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n",
-
 
869
				 pipe_name(intel_crtc->pipe));
777
		intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
870
		intel_dp->DP |= DP_AUDIO_OUTPUT_ENABLE;
-
 
871
		intel_write_eld(encoder, adjusted_mode);
778
 
872
	}
779
	memset(intel_dp->link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
873
	memset(intel_dp->link_configuration, 0, DP_LINK_CONFIGURATION_SIZE);
780
	intel_dp->link_configuration[0] = intel_dp->link_bw;
874
	intel_dp->link_configuration[0] = intel_dp->link_bw;
781
	intel_dp->link_configuration[1] = intel_dp->lane_count;
875
	intel_dp->link_configuration[1] = intel_dp->lane_count;
782
	intel_dp->link_configuration[8] = DP_SET_ANSI_8B10B;
876
	intel_dp->link_configuration[8] = DP_SET_ANSI_8B10B;
783
 
-
 
784
	/*
877
	/*
785
	 * Check for DPCD version > 1.1 and enhanced framing support
878
	 * Check for DPCD version > 1.1 and enhanced framing support
786
	 */
879
	 */
787
	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
880
	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
788
	    (intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP)) {
881
	    (intel_dp->dpcd[DP_MAX_LANE_COUNT] & DP_ENHANCED_FRAME_CAP)) {
789
		intel_dp->link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
882
		intel_dp->link_configuration[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
790
		intel_dp->DP |= DP_ENHANCED_FRAMING;
-
 
791
	}
883
	}
Line -... Line 884...
-
 
884
 
-
 
885
	/* Split out the IBX/CPU vs CPT settings */
-
 
886
 
-
 
887
	if (is_cpu_edp(intel_dp) && IS_GEN7(dev)) {
-
 
888
		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
-
 
889
			intel_dp->DP |= DP_SYNC_HS_HIGH;
-
 
890
		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
-
 
891
			intel_dp->DP |= DP_SYNC_VS_HIGH;
-
 
892
		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
-
 
893
 
-
 
894
		if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
-
 
895
			intel_dp->DP |= DP_ENHANCED_FRAMING;
-
 
896
 
-
 
897
		intel_dp->DP |= intel_crtc->pipe << 29;
792
 
898
 
-
 
899
		/* don't miss out required setting for eDP */
-
 
900
		intel_dp->DP |= DP_PLL_ENABLE;
-
 
901
		if (adjusted_mode->clock < 200000)
-
 
902
			intel_dp->DP |= DP_PLL_FREQ_160MHZ;
-
 
903
		else
-
 
904
			intel_dp->DP |= DP_PLL_FREQ_270MHZ;
-
 
905
	} else if (!HAS_PCH_CPT(dev) || is_cpu_edp(intel_dp)) {
-
 
906
		intel_dp->DP |= intel_dp->color_range;
-
 
907
 
-
 
908
		if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
-
 
909
			intel_dp->DP |= DP_SYNC_HS_HIGH;
-
 
910
		if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
-
 
911
			intel_dp->DP |= DP_SYNC_VS_HIGH;
-
 
912
		intel_dp->DP |= DP_LINK_TRAIN_OFF;
-
 
913
 
-
 
914
		if (intel_dp->link_configuration[1] & DP_LANE_COUNT_ENHANCED_FRAME_EN)
-
 
915
		intel_dp->DP |= DP_ENHANCED_FRAMING;
793
	/* CPT DP's pipe select is decided in TRANS_DP_CTL */
916
 
794
	if (intel_crtc->pipe == 1 && !HAS_PCH_CPT(dev))
917
		if (intel_crtc->pipe == 1)
Line 795... Line 918...
795
		intel_dp->DP |= DP_PIPEB_SELECT;
918
		intel_dp->DP |= DP_PIPEB_SELECT;
796
 
919
 
797
	if (is_edp(intel_dp) && !is_pch_edp(intel_dp)) {
920
		if (is_cpu_edp(intel_dp)) {
798
		/* don't miss out required setting for eDP */
921
		/* don't miss out required setting for eDP */
799
		intel_dp->DP |= DP_PLL_ENABLE;
922
		intel_dp->DP |= DP_PLL_ENABLE;
800
		if (adjusted_mode->clock < 200000)
923
		if (adjusted_mode->clock < 200000)
801
			intel_dp->DP |= DP_PLL_FREQ_160MHZ;
924
			intel_dp->DP |= DP_PLL_FREQ_160MHZ;
802
		else
925
		else
-
 
926
			intel_dp->DP |= DP_PLL_FREQ_270MHZ;
-
 
927
	}
-
 
928
	} else {
-
 
929
		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
-
 
930
	}
-
 
931
}
-
 
932
 
-
 
933
#define IDLE_ON_MASK		(PP_ON | 0 	  | PP_SEQUENCE_MASK | 0                     | PP_SEQUENCE_STATE_MASK)
-
 
934
#define IDLE_ON_VALUE   	(PP_ON | 0 	  | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_ON_IDLE)
-
 
935
 
-
 
936
#define IDLE_OFF_MASK		(PP_ON | 0        | PP_SEQUENCE_MASK | 0                     | PP_SEQUENCE_STATE_MASK)
-
 
937
#define IDLE_OFF_VALUE		(0     | 0        | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_OFF_IDLE)
-
 
938
 
-
 
939
#define IDLE_CYCLE_MASK		(PP_ON | 0        | PP_SEQUENCE_MASK | PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK)
-
 
940
#define IDLE_CYCLE_VALUE	(0     | 0        | PP_SEQUENCE_NONE | 0                     | PP_SEQUENCE_STATE_OFF_IDLE)
-
 
941
 
-
 
942
static void ironlake_wait_panel_status(struct intel_dp *intel_dp,
-
 
943
				       u32 mask,
-
 
944
				       u32 value)
-
 
945
{
-
 
946
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
947
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
948
 
-
 
949
	DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n",
-
 
950
		      mask, value,
-
 
951
		      I915_READ(PCH_PP_STATUS),
-
 
952
		      I915_READ(PCH_PP_CONTROL));
-
 
953
 
-
 
954
	if (_wait_for((I915_READ(PCH_PP_STATUS) & mask) == value, 5000, 10)) {
-
 
955
		DRM_ERROR("Panel status timeout: status %08x control %08x\n",
-
 
956
			  I915_READ(PCH_PP_STATUS),
-
 
957
			  I915_READ(PCH_PP_CONTROL));
-
 
958
	}
-
 
959
}
-
 
960
 
-
 
961
static void ironlake_wait_panel_on(struct intel_dp *intel_dp)
-
 
962
{
-
 
963
	DRM_DEBUG_KMS("Wait for panel power on\n");
-
 
964
	ironlake_wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE);
-
 
965
}
-
 
966
 
-
 
967
static void ironlake_wait_panel_off(struct intel_dp *intel_dp)
-
 
968
{
-
 
969
	DRM_DEBUG_KMS("Wait for panel power off time\n");
-
 
970
	ironlake_wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE);
-
 
971
}
-
 
972
 
-
 
973
static void ironlake_wait_panel_power_cycle(struct intel_dp *intel_dp)
-
 
974
{
-
 
975
	DRM_DEBUG_KMS("Wait for panel power cycle\n");
-
 
976
	ironlake_wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE);
-
 
977
}
-
 
978
 
-
 
979
 
-
 
980
/* Read the current pp_control value, unlocking the register if it
-
 
981
 * is locked
-
 
982
 */
-
 
983
 
-
 
984
static  u32 ironlake_get_pp_control(struct drm_i915_private *dev_priv)
-
 
985
{
-
 
986
	u32	control = I915_READ(PCH_PP_CONTROL);
-
 
987
 
-
 
988
	control &= ~PANEL_UNLOCK_MASK;
803
			intel_dp->DP |= DP_PLL_FREQ_270MHZ;
989
	control |= PANEL_UNLOCK_REGS;
Line 804... Line 990...
804
	}
990
	return control;
805
}
991
}
806
 
992
 
807
static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
993
static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
808
{
994
{
Line -... Line 995...
-
 
995
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
996
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
997
	u32 pp;
809
	struct drm_device *dev = intel_dp->base.base.dev;
998
 
-
 
999
	if (!is_edp(intel_dp))
810
	struct drm_i915_private *dev_priv = dev->dev_private;
1000
		return;
-
 
1001
	DRM_DEBUG_KMS("Turn eDP VDD on\n");
811
	u32 pp;
1002
 
812
 
1003
	WARN(intel_dp->want_panel_vdd,
813
	/*
1004
	     "eDP VDD already requested on\n");
814
	 * If the panel wasn't on, make sure there's not a currently
1005
 
-
 
1006
	intel_dp->want_panel_vdd = true;
-
 
1007
 
Line -... Line 1008...
-
 
1008
	if (ironlake_edp_have_panel_vdd(intel_dp)) {
-
 
1009
		DRM_DEBUG_KMS("eDP VDD already on\n");
-
 
1010
		return;
815
	 * active PP sequence before enabling AUX VDD.
1011
	}
816
	 */
1012
 
817
	if (!(I915_READ(PCH_PP_STATUS) & PP_ON))
1013
	if (!ironlake_edp_have_panel_power(intel_dp))
818
		msleep(dev_priv->panel_t3);
1014
		ironlake_wait_panel_power_cycle(intel_dp);
-
 
1015
 
-
 
1016
	pp = ironlake_get_pp_control(dev_priv);
-
 
1017
	pp |= EDP_FORCE_VDD;
-
 
1018
	I915_WRITE(PCH_PP_CONTROL, pp);
-
 
1019
	POSTING_READ(PCH_PP_CONTROL);
-
 
1020
	DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
-
 
1021
		      I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
-
 
1022
 
-
 
1023
	/*
-
 
1024
	 * If the panel wasn't on, delay before accessing aux channel
819
 
1025
	 */
Line 820... Line 1026...
820
	pp = I915_READ(PCH_PP_CONTROL);
1026
	if (!ironlake_edp_have_panel_power(intel_dp)) {
821
	pp |= EDP_FORCE_VDD;
1027
		DRM_DEBUG_KMS("eDP was not running\n");
822
	I915_WRITE(PCH_PP_CONTROL, pp);
1028
		msleep(intel_dp->panel_power_up_delay);
823
	POSTING_READ(PCH_PP_CONTROL);
1029
	}
824
}
1030
}
Line -... Line 1031...
-
 
1031
 
825
 
1032
static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp)
826
static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp)
1033
{
827
{
1034
	struct drm_device *dev = intel_dp->base.base.dev;
828
	struct drm_device *dev = intel_dp->base.base.dev;
1035
	struct drm_i915_private *dev_priv = dev->dev_private;
Line 829... Line 1036...
829
	struct drm_i915_private *dev_priv = dev->dev_private;
1036
	u32 pp;
-
 
1037
 
-
 
1038
	if (!intel_dp->want_panel_vdd && ironlake_edp_have_panel_vdd(intel_dp)) {
-
 
1039
		pp = ironlake_get_pp_control(dev_priv);
830
	u32 pp;
1040
	pp &= ~EDP_FORCE_VDD;
-
 
1041
	I915_WRITE(PCH_PP_CONTROL, pp);
-
 
1042
	POSTING_READ(PCH_PP_CONTROL);
-
 
1043
 
-
 
1044
	/* Make sure sequencer is idle before allowing subsequent activity */
-
 
1045
		DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
-
 
1046
			      I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
-
 
1047
 
-
 
1048
		msleep(intel_dp->panel_power_down_delay);
-
 
1049
	}
-
 
1050
}
-
 
1051
 
-
 
1052
 
-
 
1053
static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
-
 
1054
{
-
 
1055
	if (!is_edp(intel_dp))
-
 
1056
		return;
-
 
1057
 
-
 
1058
	DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
-
 
1059
	WARN(!intel_dp->want_panel_vdd, "eDP VDD not forced on");
-
 
1060
 
-
 
1061
	intel_dp->want_panel_vdd = false;
-
 
1062
 
-
 
1063
	if (sync) {
-
 
1064
		ironlake_panel_vdd_off_sync(intel_dp);
-
 
1065
	} else {
831
 
1066
		/*
Line 832... Line -...
832
	pp = I915_READ(PCH_PP_CONTROL);
-
 
833
	pp &= ~EDP_FORCE_VDD;
1067
		 * Queue the timer to fire a long
834
	I915_WRITE(PCH_PP_CONTROL, pp);
1068
		 * time from now (relative to the power down delay)
835
	POSTING_READ(PCH_PP_CONTROL);
1069
		 * to keep the panel power up across a sequence of operations
836
 
1070
		 */
837
	/* Make sure sequencer is idle before allowing subsequent activity */
1071
//       schedule_delayed_work(&intel_dp->panel_vdd_work,
Line 838... Line 1072...
838
	msleep(dev_priv->panel_t12);
1072
//                     msecs_to_jiffies(intel_dp->panel_power_cycle_delay * 5));
839
}
1073
	}
Line 840... Line 1074...
840
 
1074
}
Line -... Line 1075...
-
 
1075
 
-
 
1076
static void ironlake_edp_panel_on(struct intel_dp *intel_dp)
-
 
1077
{
-
 
1078
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
1079
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
1080
	u32 pp;
-
 
1081
 
-
 
1082
	if (!is_edp(intel_dp))
-
 
1083
		return;
841
/* Returns true if the panel was already on when called */
1084
 
842
static bool ironlake_edp_panel_on (struct intel_dp *intel_dp)
1085
	DRM_DEBUG_KMS("Turn eDP power on\n");
843
{
1086
 
844
	struct drm_device *dev = intel_dp->base.base.dev;
1087
	if (ironlake_edp_have_panel_power(intel_dp)) {
-
 
1088
		DRM_DEBUG_KMS("eDP power already on\n");
-
 
1089
		return;
-
 
1090
	}
-
 
1091
 
-
 
1092
	ironlake_wait_panel_power_cycle(intel_dp);
Line 845... Line -...
845
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
846
	u32 pp, idle_on_mask = PP_ON | PP_SEQUENCE_STATE_ON_IDLE;
1093
 
847
 
1094
	pp = ironlake_get_pp_control(dev_priv);
Line 848... Line -...
848
	if (I915_READ(PCH_PP_STATUS) & PP_ON)
-
 
849
		return true;
-
 
850
 
-
 
851
	pp = I915_READ(PCH_PP_CONTROL);
1095
	if (IS_GEN5(dev)) {
Line -... Line 1096...
-
 
1096
	/* ILK workaround: disable reset around power sequence */
852
 
1097
	pp &= ~PANEL_POWER_RESET;
853
	/* ILK workaround: disable reset around power sequence */
1098
	I915_WRITE(PCH_PP_CONTROL, pp);
854
	pp &= ~PANEL_POWER_RESET;
1099
	POSTING_READ(PCH_PP_CONTROL);
855
	I915_WRITE(PCH_PP_CONTROL, pp);
1100
	}
856
	POSTING_READ(PCH_PP_CONTROL);
-
 
857
 
1101
 
Line 858... Line 1102...
858
	pp |= PANEL_UNLOCK_REGS | POWER_TARGET_ON;
1102
	pp |= POWER_TARGET_ON;
859
	I915_WRITE(PCH_PP_CONTROL, pp);
1103
	if (!IS_GEN5(dev))
-
 
1104
		pp |= PANEL_POWER_RESET;
860
	POSTING_READ(PCH_PP_CONTROL);
1105
 
861
 
1106
	I915_WRITE(PCH_PP_CONTROL, pp);
862
	if (wait_for((I915_READ(PCH_PP_STATUS) & idle_on_mask) == idle_on_mask,
-
 
Line 863... Line 1107...
863
		     5000))
1107
	POSTING_READ(PCH_PP_CONTROL);
-
 
1108
 
Line 864... Line -...
864
		DRM_ERROR("panel on wait timed out: 0x%08x\n",
-
 
865
			  I915_READ(PCH_PP_STATUS));
-
 
866
 
1109
	ironlake_wait_panel_on(intel_dp);
867
	pp |= PANEL_POWER_RESET; /* restore panel reset bit */
-
 
Line 868... Line -...
868
	I915_WRITE(PCH_PP_CONTROL, pp);
-
 
869
	POSTING_READ(PCH_PP_CONTROL);
-
 
870
 
-
 
871
	return false;
-
 
872
}
1110
 
873
 
-
 
874
static void ironlake_edp_panel_off (struct drm_device *dev)
-
 
Line 875... Line 1111...
875
{
1111
	if (IS_GEN5(dev)) {
-
 
1112
	pp |= PANEL_POWER_RESET; /* restore panel reset bit */
876
	struct drm_i915_private *dev_priv = dev->dev_private;
1113
	I915_WRITE(PCH_PP_CONTROL, pp);
877
	u32 pp, idle_off_mask = PP_ON | PP_SEQUENCE_MASK |
1114
	POSTING_READ(PCH_PP_CONTROL);
-
 
1115
	}
-
 
1116
}
878
		PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK;
1117
 
Line 879... Line 1118...
879
 
1118
static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
880
	pp = I915_READ(PCH_PP_CONTROL);
1119
{
-
 
1120
	struct drm_device *dev = intel_dp->base.base.dev;
881
 
1121
	struct drm_i915_private *dev_priv = dev->dev_private;
882
	/* ILK workaround: disable reset around power sequence */
1122
	u32 pp;
Line -... Line 1123...
-
 
1123
 
-
 
1124
	if (!is_edp(intel_dp))
-
 
1125
		return;
883
	pp &= ~PANEL_POWER_RESET;
1126
 
884
	I915_WRITE(PCH_PP_CONTROL, pp);
1127
	DRM_DEBUG_KMS("Turn eDP power off\n");
885
	POSTING_READ(PCH_PP_CONTROL);
1128
 
886
 
1129
	WARN(intel_dp->want_panel_vdd, "Cannot turn power off while VDD is on\n");
887
	pp &= ~POWER_TARGET_ON;
1130
 
888
	I915_WRITE(PCH_PP_CONTROL, pp);
1131
	pp = ironlake_get_pp_control(dev_priv);
889
	POSTING_READ(PCH_PP_CONTROL);
1132
	pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
890
 
1133
	I915_WRITE(PCH_PP_CONTROL, pp);
891
	if (wait_for((I915_READ(PCH_PP_STATUS) & idle_off_mask) == 0, 5000))
1134
	POSTING_READ(PCH_PP_CONTROL);
892
		DRM_ERROR("panel off wait timed out: 0x%08x\n",
1135
 
893
			  I915_READ(PCH_PP_STATUS));
1136
	ironlake_wait_panel_off(intel_dp);
-
 
1137
}
894
 
1138
 
Line 895... Line 1139...
895
	pp |= PANEL_POWER_RESET; /* restore panel reset bit */
1139
static void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
896
	I915_WRITE(PCH_PP_CONTROL, pp);
1140
{
-
 
1141
	struct drm_device *dev = intel_dp->base.base.dev;
897
	POSTING_READ(PCH_PP_CONTROL);
1142
	struct drm_i915_private *dev_priv = dev->dev_private;
898
}
1143
	u32 pp;
Line -... Line 1144...
-
 
1144
 
-
 
1145
	if (!is_edp(intel_dp))
-
 
1146
		return;
899
 
1147
 
900
static void ironlake_edp_backlight_on (struct drm_device *dev)
1148
	DRM_DEBUG_KMS("\n");
901
{
1149
	/*
902
	struct drm_i915_private *dev_priv = dev->dev_private;
1150
	 * If we enable the backlight right away following a panel power
-
 
1151
	 * on, we may see slight flicker as the panel syncs with the eDP
-
 
1152
	 * link.  So delay a bit to make sure the image is solid before
903
	u32 pp;
1153
	 * allowing it to appear.
Line 904... Line 1154...
904
 
1154
	 */
905
	DRM_DEBUG_KMS("\n");
1155
	msleep(intel_dp->backlight_on_delay);
906
	/*
1156
	pp = ironlake_get_pp_control(dev_priv);
Line 984... Line 1234...
984
}
1234
}
Line 985... Line 1235...
985
 
1235
 
986
static void intel_dp_prepare(struct drm_encoder *encoder)
1236
static void intel_dp_prepare(struct drm_encoder *encoder)
987
{
1237
{
-
 
1238
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
-
 
1239
 
988
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1240
	ironlake_edp_backlight_off(intel_dp);
Line 989... Line 1241...
989
	struct drm_device *dev = encoder->dev;
1241
	ironlake_edp_panel_off(intel_dp);
-
 
1242
 
990
 
1243
	/* Wake up the sink first */
991
	/* Wake up the sink first */
-
 
992
	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
-
 
993
 
-
 
994
	if (is_edp(intel_dp)) {
-
 
995
		ironlake_edp_backlight_off(dev);
-
 
996
		ironlake_edp_panel_off(dev);
-
 
997
		if (!is_pch_edp(intel_dp))
-
 
998
			ironlake_edp_pll_on(encoder);
-
 
999
		else
-
 
1000
			ironlake_edp_pll_off(encoder);
1244
	ironlake_edp_panel_vdd_on(intel_dp);
-
 
1245
	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
-
 
1246
	intel_dp_link_down(intel_dp);
-
 
1247
	ironlake_edp_panel_vdd_off(intel_dp, false);
-
 
1248
 
-
 
1249
	/* Make sure the panel is off before trying to
1001
	}
1250
	 * change the mode
Line 1002... Line 1251...
1002
	intel_dp_link_down(intel_dp);
1251
	 */
1003
}
1252
}
1004
 
1253
 
1005
static void intel_dp_commit(struct drm_encoder *encoder)
1254
static void intel_dp_commit(struct drm_encoder *encoder)
-
 
1255
{
Line 1006... Line -...
1006
{
-
 
1007
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1256
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1008
	struct drm_device *dev = encoder->dev;
-
 
-
 
1257
	struct drm_device *dev = encoder->dev;
1009
 
1258
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
1010
	if (is_edp(intel_dp))
-
 
1011
		ironlake_edp_panel_vdd_on(intel_dp);
-
 
1012
 
1259
 
1013
	intel_dp_start_link_train(intel_dp);
1260
		ironlake_edp_panel_vdd_on(intel_dp);
1014
 
-
 
1015
	if (is_edp(intel_dp)) {
-
 
1016
		ironlake_edp_panel_on(intel_dp);
1261
	intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
1017
		ironlake_edp_panel_vdd_off(intel_dp);
-
 
1018
	}
-
 
1019
 
1262
	intel_dp_start_link_train(intel_dp);
Line 1020... Line 1263...
1020
	intel_dp_complete_link_train(intel_dp);
1263
		ironlake_edp_panel_on(intel_dp);
-
 
1264
	ironlake_edp_panel_vdd_off(intel_dp, true);
-
 
1265
	intel_dp_complete_link_train(intel_dp);
-
 
1266
	ironlake_edp_backlight_on(intel_dp);
1021
 
1267
 
Line 1022... Line 1268...
1022
	if (is_edp(intel_dp))
1268
	intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
1023
		ironlake_edp_backlight_on(dev);
1269
 
1024
 
1270
	if (HAS_PCH_CPT(dev))
Line 1032... Line 1278...
1032
	struct drm_device *dev = encoder->dev;
1278
	struct drm_device *dev = encoder->dev;
1033
	struct drm_i915_private *dev_priv = dev->dev_private;
1279
	struct drm_i915_private *dev_priv = dev->dev_private;
1034
	uint32_t dp_reg = I915_READ(intel_dp->output_reg);
1280
	uint32_t dp_reg = I915_READ(intel_dp->output_reg);
Line 1035... Line 1281...
1035
 
1281
 
-
 
1282
	if (mode != DRM_MODE_DPMS_ON) {
1036
	if (mode != DRM_MODE_DPMS_ON) {
1283
		ironlake_edp_backlight_off(intel_dp);
-
 
1284
		ironlake_edp_panel_off(intel_dp);
1037
		if (is_edp(intel_dp))
1285
 
1038
			ironlake_edp_backlight_off(dev);
1286
		ironlake_edp_panel_vdd_on(intel_dp);
1039
		intel_dp_sink_dpms(intel_dp, mode);
1287
		intel_dp_sink_dpms(intel_dp, mode);
1040
		intel_dp_link_down(intel_dp);
-
 
1041
		if (is_edp(intel_dp))
1288
		intel_dp_link_down(intel_dp);
-
 
1289
		ironlake_edp_panel_vdd_off(intel_dp, false);
1042
			ironlake_edp_panel_off(dev);
1290
 
1043
		if (is_edp(intel_dp) && !is_pch_edp(intel_dp))
1291
		if (is_cpu_edp(intel_dp))
1044
			ironlake_edp_pll_off(encoder);
1292
			ironlake_edp_pll_off(encoder);
1045
	} else {
1293
	} else {
-
 
1294
		if (is_cpu_edp(intel_dp))
-
 
1295
			ironlake_edp_pll_on(encoder);
1046
		if (is_edp(intel_dp))
1296
 
1047
			ironlake_edp_panel_vdd_on(intel_dp);
1297
			ironlake_edp_panel_vdd_on(intel_dp);
1048
		intel_dp_sink_dpms(intel_dp, mode);
1298
		intel_dp_sink_dpms(intel_dp, mode);
1049
		if (!(dp_reg & DP_PORT_EN)) {
1299
		if (!(dp_reg & DP_PORT_EN)) {
1050
			intel_dp_start_link_train(intel_dp);
-
 
1051
			if (is_edp(intel_dp)) {
1300
			intel_dp_start_link_train(intel_dp);
1052
				ironlake_edp_panel_on(intel_dp);
1301
				ironlake_edp_panel_on(intel_dp);
1053
				ironlake_edp_panel_vdd_off(intel_dp);
-
 
1054
			}
1302
			ironlake_edp_panel_vdd_off(intel_dp, true);
1055
			intel_dp_complete_link_train(intel_dp);
1303
			intel_dp_complete_link_train(intel_dp);
1056
		}
1304
		} else
1057
		if (is_edp(intel_dp))
1305
			ironlake_edp_panel_vdd_off(intel_dp, false);
1058
			ironlake_edp_backlight_on(dev);
1306
		ironlake_edp_backlight_on(intel_dp);
1059
	}
1307
	}
1060
	intel_dp->dpms_mode = mode;
1308
	intel_dp->dpms_mode = mode;
Line 1061... Line 1309...
1061
}
1309
}
Line 1088... Line 1336...
1088
/*
1336
/*
1089
 * Fetch AUX CH registers 0x202 - 0x207 which contain
1337
 * Fetch AUX CH registers 0x202 - 0x207 which contain
1090
 * link status information
1338
 * link status information
1091
 */
1339
 */
1092
static bool
1340
static bool
1093
intel_dp_get_link_status(struct intel_dp *intel_dp)
1341
intel_dp_get_link_status(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
1094
{
1342
{
1095
	return intel_dp_aux_native_read_retry(intel_dp,
1343
	return intel_dp_aux_native_read_retry(intel_dp,
1096
					      DP_LANE0_1_STATUS,
1344
					      DP_LANE0_1_STATUS,
1097
					      intel_dp->link_status,
1345
					      link_status,
1098
					      DP_LINK_STATUS_SIZE);
1346
					      DP_LINK_STATUS_SIZE);
1099
}
1347
}
Line 1100... Line 1348...
1100
 
1348
 
1101
static uint8_t
1349
static uint8_t
Line 1104... Line 1352...
1104
{
1352
{
1105
	return link_status[r - DP_LANE0_1_STATUS];
1353
	return link_status[r - DP_LANE0_1_STATUS];
1106
}
1354
}
Line 1107... Line 1355...
1107
 
1355
 
1108
static uint8_t
1356
static uint8_t
1109
intel_get_adjust_request_voltage(uint8_t link_status[DP_LINK_STATUS_SIZE],
1357
intel_get_adjust_request_voltage(uint8_t adjust_request[2],
1110
				 int lane)
1358
				 int lane)
1111
{
-
 
1112
	int	    i = DP_ADJUST_REQUEST_LANE0_1 + (lane >> 1);
1359
{
1113
	int	    s = ((lane & 1) ?
1360
	int	    s = ((lane & 1) ?
1114
			 DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT :
1361
			 DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT :
1115
			 DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT);
1362
			 DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT);
Line 1116... Line 1363...
1116
	uint8_t l = intel_dp_link_status(link_status, i);
1363
	uint8_t l = adjust_request[lane>>1];
1117
 
1364
 
Line 1118... Line 1365...
1118
	return ((l >> s) & 3) << DP_TRAIN_VOLTAGE_SWING_SHIFT;
1365
	return ((l >> s) & 3) << DP_TRAIN_VOLTAGE_SWING_SHIFT;
1119
}
1366
}
1120
 
1367
 
1121
static uint8_t
1368
static uint8_t
1122
intel_get_adjust_request_pre_emphasis(uint8_t link_status[DP_LINK_STATUS_SIZE],
-
 
1123
				      int lane)
1369
intel_get_adjust_request_pre_emphasis(uint8_t adjust_request[2],
1124
{
1370
				      int lane)
1125
	int	    i = DP_ADJUST_REQUEST_LANE0_1 + (lane >> 1);
1371
{
1126
	int	    s = ((lane & 1) ?
1372
	int	    s = ((lane & 1) ?
Line 1127... Line 1373...
1127
			 DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT :
1373
			 DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT :
1128
			 DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT);
1374
			 DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT);
Line 1146... Line 1392...
1146
 
1392
 
1147
/*
1393
/*
1148
 * These are source-specific values; current Intel hardware supports
1394
 * These are source-specific values; current Intel hardware supports
1149
 * a maximum voltage of 800mV and a maximum pre-emphasis of 6dB
1395
 * a maximum voltage of 800mV and a maximum pre-emphasis of 6dB
1150
 */
-
 
Line 1151... Line 1396...
1151
#define I830_DP_VOLTAGE_MAX	    DP_TRAIN_VOLTAGE_SWING_800
1396
 */
1152
 
1397
 
1153
static uint8_t
1398
static uint8_t
-
 
1399
intel_dp_voltage_max(struct intel_dp *intel_dp)
-
 
1400
{
-
 
1401
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
1402
 
-
 
1403
	if (IS_GEN7(dev) && is_cpu_edp(intel_dp))
-
 
1404
		return DP_TRAIN_VOLTAGE_SWING_800;
-
 
1405
	else if (HAS_PCH_CPT(dev) && !is_cpu_edp(intel_dp))
-
 
1406
		return DP_TRAIN_VOLTAGE_SWING_1200;
-
 
1407
	else
-
 
1408
		return DP_TRAIN_VOLTAGE_SWING_800;
-
 
1409
}
-
 
1410
 
-
 
1411
static uint8_t
-
 
1412
intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
-
 
1413
{
-
 
1414
	struct drm_device *dev = intel_dp->base.base.dev;
-
 
1415
 
-
 
1416
	if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
-
 
1417
		switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
-
 
1418
		case DP_TRAIN_VOLTAGE_SWING_400:
-
 
1419
			return DP_TRAIN_PRE_EMPHASIS_6;
-
 
1420
		case DP_TRAIN_VOLTAGE_SWING_600:
-
 
1421
		case DP_TRAIN_VOLTAGE_SWING_800:
-
 
1422
			return DP_TRAIN_PRE_EMPHASIS_3_5;
-
 
1423
		default:
-
 
1424
			return DP_TRAIN_PRE_EMPHASIS_0;
1154
intel_dp_pre_emphasis_max(uint8_t voltage_swing)
1425
		}
1155
{
1426
	} else {
1156
	switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
1427
	switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
1157
	case DP_TRAIN_VOLTAGE_SWING_400:
1428
	case DP_TRAIN_VOLTAGE_SWING_400:
1158
		return DP_TRAIN_PRE_EMPHASIS_6;
1429
		return DP_TRAIN_PRE_EMPHASIS_6;
Line 1163... Line 1434...
1163
	case DP_TRAIN_VOLTAGE_SWING_1200:
1434
	case DP_TRAIN_VOLTAGE_SWING_1200:
1164
	default:
1435
	default:
1165
		return DP_TRAIN_PRE_EMPHASIS_0;
1436
		return DP_TRAIN_PRE_EMPHASIS_0;
1166
	}
1437
	}
1167
}
1438
	}
-
 
1439
}
Line 1168... Line 1440...
1168
 
1440
 
1169
static void
1441
static void
1170
intel_get_adjust_train(struct intel_dp *intel_dp)
1442
intel_get_adjust_train(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
1171
{
1443
{
1172
	uint8_t v = 0;
1444
	uint8_t v = 0;
1173
	uint8_t p = 0;
1445
	uint8_t p = 0;
-
 
1446
	int lane;
-
 
1447
	uint8_t	*adjust_request = link_status + (DP_ADJUST_REQUEST_LANE0_1 - DP_LANE0_1_STATUS);
-
 
1448
	uint8_t voltage_max;
Line 1174... Line 1449...
1174
	int lane;
1449
	uint8_t preemph_max;
1175
 
1450
 
1176
	for (lane = 0; lane < intel_dp->lane_count; lane++) {
1451
	for (lane = 0; lane < intel_dp->lane_count; lane++) {
Line 1177... Line 1452...
1177
		uint8_t this_v = intel_get_adjust_request_voltage(intel_dp->link_status, lane);
1452
		uint8_t this_v = intel_get_adjust_request_voltage(adjust_request, lane);
1178
		uint8_t this_p = intel_get_adjust_request_pre_emphasis(intel_dp->link_status, lane);
1453
		uint8_t this_p = intel_get_adjust_request_pre_emphasis(adjust_request, lane);
1179
 
1454
 
1180
		if (this_v > v)
1455
		if (this_v > v)
1181
			v = this_v;
1456
			v = this_v;
Line -... Line 1457...
-
 
1457
		if (this_p > p)
1182
		if (this_p > p)
1458
			p = this_p;
1183
			p = this_p;
1459
	}
1184
	}
1460
 
1185
 
1461
	voltage_max = intel_dp_voltage_max(intel_dp);
-
 
1462
	if (v >= voltage_max)
1186
	if (v >= I830_DP_VOLTAGE_MAX)
1463
		v = voltage_max | DP_TRAIN_MAX_SWING_REACHED;
Line 1187... Line 1464...
1187
		v = I830_DP_VOLTAGE_MAX | DP_TRAIN_MAX_SWING_REACHED;
1464
 
1188
 
1465
	preemph_max = intel_dp_pre_emphasis_max(intel_dp, v);
1189
	if (p >= intel_dp_pre_emphasis_max(v))
1466
	if (p >= preemph_max)
Line 1190... Line 1467...
1190
		p = intel_dp_pre_emphasis_max(v) | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;
1467
		p = preemph_max | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;
1191
 
1468
 
1192
	for (lane = 0; lane < 4; lane++)
1469
	for (lane = 0; lane < 4; lane++)
1193
		intel_dp->train_set[lane] = v | p;
1470
		intel_dp->train_set[lane] = v | p;
Line 1194... Line 1471...
1194
}
1471
}
1195
 
1472
 
Line 1257... Line 1534...
1257
			      "0x%x\n", signal_levels);
1534
			      "0x%x\n", signal_levels);
1258
		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1535
		return EDP_LINK_TRAIN_400_600MV_0DB_SNB_B;
1259
	}
1536
	}
1260
}
1537
}
Line -... Line 1538...
-
 
1538
 
-
 
1539
/* Gen7's DP voltage swing and pre-emphasis control */
-
 
1540
static uint32_t
-
 
1541
intel_gen7_edp_signal_levels(uint8_t train_set)
-
 
1542
{
-
 
1543
	int signal_levels = train_set & (DP_TRAIN_VOLTAGE_SWING_MASK |
-
 
1544
					 DP_TRAIN_PRE_EMPHASIS_MASK);
-
 
1545
	switch (signal_levels) {
-
 
1546
	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_0:
-
 
1547
		return EDP_LINK_TRAIN_400MV_0DB_IVB;
-
 
1548
	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_3_5:
-
 
1549
		return EDP_LINK_TRAIN_400MV_3_5DB_IVB;
-
 
1550
	case DP_TRAIN_VOLTAGE_SWING_400 | DP_TRAIN_PRE_EMPHASIS_6:
-
 
1551
		return EDP_LINK_TRAIN_400MV_6DB_IVB;
-
 
1552
 
-
 
1553
	case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_0:
-
 
1554
		return EDP_LINK_TRAIN_600MV_0DB_IVB;
-
 
1555
	case DP_TRAIN_VOLTAGE_SWING_600 | DP_TRAIN_PRE_EMPHASIS_3_5:
-
 
1556
		return EDP_LINK_TRAIN_600MV_3_5DB_IVB;
-
 
1557
 
-
 
1558
	case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_0:
-
 
1559
		return EDP_LINK_TRAIN_800MV_0DB_IVB;
-
 
1560
	case DP_TRAIN_VOLTAGE_SWING_800 | DP_TRAIN_PRE_EMPHASIS_3_5:
-
 
1561
		return EDP_LINK_TRAIN_800MV_3_5DB_IVB;
-
 
1562
 
-
 
1563
	default:
-
 
1564
		DRM_DEBUG_KMS("Unsupported voltage swing/pre-emphasis level:"
-
 
1565
			      "0x%x\n", signal_levels);
-
 
1566
		return EDP_LINK_TRAIN_500MV_0DB_IVB;
-
 
1567
	}
-
 
1568
}
1261
 
1569
 
1262
static uint8_t
1570
static uint8_t
1263
intel_get_lane_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
1571
intel_get_lane_status(uint8_t link_status[DP_LINK_STATUS_SIZE],
1264
		      int lane)
1572
		      int lane)
1265
{
-
 
1266
	int i = DP_LANE0_1_STATUS + (lane >> 1);
1573
{
1267
	int s = (lane & 1) * 4;
1574
	int s = (lane & 1) * 4;
Line 1268... Line 1575...
1268
	uint8_t l = intel_dp_link_status(link_status, i);
1575
	uint8_t l = link_status[lane>>1];
1269
 
1576
 
Line 1270... Line 1577...
1270
	return (l >> s) & 0xf;
1577
	return (l >> s) & 0xf;
Line 1288... Line 1595...
1288
/* Check to see if channel eq is done on all channels */
1595
/* Check to see if channel eq is done on all channels */
1289
#define CHANNEL_EQ_BITS (DP_LANE_CR_DONE|\
1596
#define CHANNEL_EQ_BITS (DP_LANE_CR_DONE|\
1290
			 DP_LANE_CHANNEL_EQ_DONE|\
1597
			 DP_LANE_CHANNEL_EQ_DONE|\
1291
			 DP_LANE_SYMBOL_LOCKED)
1598
			 DP_LANE_SYMBOL_LOCKED)
1292
static bool
1599
static bool
1293
intel_channel_eq_ok(struct intel_dp *intel_dp)
1600
intel_channel_eq_ok(struct intel_dp *intel_dp, uint8_t link_status[DP_LINK_STATUS_SIZE])
1294
{
1601
{
1295
	uint8_t lane_align;
1602
	uint8_t lane_align;
1296
	uint8_t lane_status;
1603
	uint8_t lane_status;
1297
	int lane;
1604
	int lane;
Line 1298... Line 1605...
1298
 
1605
 
1299
	lane_align = intel_dp_link_status(intel_dp->link_status,
1606
	lane_align = intel_dp_link_status(link_status,
1300
					  DP_LANE_ALIGN_STATUS_UPDATED);
1607
					  DP_LANE_ALIGN_STATUS_UPDATED);
1301
	if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0)
1608
	if ((lane_align & DP_INTERLANE_ALIGN_DONE) == 0)
1302
		return false;
1609
		return false;
1303
	for (lane = 0; lane < intel_dp->lane_count; lane++) {
1610
	for (lane = 0; lane < intel_dp->lane_count; lane++) {
1304
		lane_status = intel_get_lane_status(intel_dp->link_status, lane);
1611
		lane_status = intel_get_lane_status(link_status, lane);
1305
		if ((lane_status & CHANNEL_EQ_BITS) != CHANNEL_EQ_BITS)
1612
		if ((lane_status & CHANNEL_EQ_BITS) != CHANNEL_EQ_BITS)
1306
			return false;
1613
			return false;
1307
	}
1614
	}
1308
	return true;
1615
	return true;
Line 1324... Line 1631...
1324
				    DP_TRAINING_PATTERN_SET,
1631
				    DP_TRAINING_PATTERN_SET,
1325
				    dp_train_pat);
1632
				    dp_train_pat);
Line 1326... Line 1633...
1326
 
1633
 
1327
	ret = intel_dp_aux_native_write(intel_dp,
1634
	ret = intel_dp_aux_native_write(intel_dp,
1328
					DP_TRAINING_LANE0_SET,
1635
					DP_TRAINING_LANE0_SET,
-
 
1636
					intel_dp->train_set,
1329
					intel_dp->train_set, 4);
1637
					intel_dp->lane_count);
1330
	if (ret != 4)
1638
	if (ret != intel_dp->lane_count)
Line 1331... Line 1639...
1331
		return false;
1639
		return false;
1332
 
1640
 
Line 1341... Line 1649...
1341
	struct drm_i915_private *dev_priv = dev->dev_private;
1649
	struct drm_i915_private *dev_priv = dev->dev_private;
1342
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
1650
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
1343
	int i;
1651
	int i;
1344
	uint8_t voltage;
1652
	uint8_t voltage;
1345
	bool clock_recovery = false;
1653
	bool clock_recovery = false;
1346
	int tries;
1654
	int voltage_tries, loop_tries;
1347
	u32 reg;
1655
	u32 reg;
1348
	uint32_t DP = intel_dp->DP;
1656
	uint32_t DP = intel_dp->DP;
Line 1349... Line 1657...
1349
 
1657
 
1350
	/*
1658
	/*
Line 1362... Line 1670...
1362
	intel_dp_aux_native_write(intel_dp, DP_LINK_BW_SET,
1670
	intel_dp_aux_native_write(intel_dp, DP_LINK_BW_SET,
1363
				  intel_dp->link_configuration,
1671
				  intel_dp->link_configuration,
1364
				  DP_LINK_CONFIGURATION_SIZE);
1672
				  DP_LINK_CONFIGURATION_SIZE);
Line 1365... Line 1673...
1365
 
1673
 
-
 
1674
	DP |= DP_PORT_EN;
1366
	DP |= DP_PORT_EN;
1675
 
1367
	if (HAS_PCH_CPT(dev) && !is_edp(intel_dp))
1676
	if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
1368
		DP &= ~DP_LINK_TRAIN_MASK_CPT;
1677
		DP &= ~DP_LINK_TRAIN_MASK_CPT;
1369
	else
1678
	else
1370
		DP &= ~DP_LINK_TRAIN_MASK;
1679
		DP &= ~DP_LINK_TRAIN_MASK;
1371
	memset(intel_dp->train_set, 0, 4);
1680
	memset(intel_dp->train_set, 0, 4);
-
 
1681
	voltage = 0xff;
1372
	voltage = 0xff;
1682
	voltage_tries = 0;
1373
	tries = 0;
1683
	loop_tries = 0;
1374
	clock_recovery = false;
1684
	clock_recovery = false;
1375
	for (;;) {
1685
	for (;;) {
-
 
1686
		/* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
1376
		/* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
1687
		uint8_t	    link_status[DP_LINK_STATUS_SIZE];
-
 
1688
		uint32_t    signal_levels;
-
 
1689
 
1377
		uint32_t    signal_levels;
1690
 
-
 
1691
		if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
-
 
1692
			signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
-
 
1693
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
1378
		if (IS_GEN6(dev) && is_edp(intel_dp)) {
1694
		} else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
1379
			signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
1695
			signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
1380
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
1696
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
1381
		} else {
1697
		} else {
-
 
1698
			signal_levels = intel_dp_signal_levels(intel_dp->train_set[0]);
1382
			signal_levels = intel_dp_signal_levels(intel_dp->train_set[0], intel_dp->lane_count);
1699
			DRM_DEBUG_KMS("training pattern 1 signal levels %08x\n", signal_levels);
1383
			DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
1700
			DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
Line 1384... Line 1701...
1384
		}
1701
		}
1385
 
1702
 
1386
		if (HAS_PCH_CPT(dev) && !is_edp(intel_dp))
1703
		if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
1387
			reg = DP | DP_LINK_TRAIN_PAT_1_CPT;
1704
			reg = DP | DP_LINK_TRAIN_PAT_1_CPT;
Line 1388... Line 1705...
1388
		else
1705
		else
Line 1393... Line 1710...
1393
					     DP_LINK_SCRAMBLING_DISABLE))
1710
					     DP_LINK_SCRAMBLING_DISABLE))
1394
			break;
1711
			break;
1395
		/* Set training pattern 1 */
1712
		/* Set training pattern 1 */
Line 1396... Line 1713...
1396
 
1713
 
1397
		udelay(100);
1714
		udelay(100);
-
 
1715
		if (!intel_dp_get_link_status(intel_dp, link_status)) {
1398
		if (!intel_dp_get_link_status(intel_dp))
1716
			DRM_ERROR("failed to get link status\n");
-
 
1717
			break;
Line 1399... Line 1718...
1399
			break;
1718
		}
-
 
1719
 
1400
 
1720
		if (intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
1401
		if (intel_clock_recovery_ok(intel_dp->link_status, intel_dp->lane_count)) {
1721
			DRM_DEBUG_KMS("clock recovery OK\n");
1402
			clock_recovery = true;
1722
			clock_recovery = true;
Line 1403... Line 1723...
1403
			break;
1723
			break;
1404
		}
1724
		}
1405
 
1725
 
1406
		/* Check to see if we've tried the max voltage */
1726
		/* Check to see if we've tried the max voltage */
1407
		for (i = 0; i < intel_dp->lane_count; i++)
1727
		for (i = 0; i < intel_dp->lane_count; i++)
-
 
1728
			if ((intel_dp->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0)
-
 
1729
				break;
-
 
1730
		if (i == intel_dp->lane_count) {
1408
			if ((intel_dp->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0)
1731
			++loop_tries;
-
 
1732
			if (loop_tries == 5) {
-
 
1733
				DRM_DEBUG_KMS("too many full retries, give up\n");
-
 
1734
			break;
-
 
1735
			}
-
 
1736
			memset(intel_dp->train_set, 0, 4);
Line 1409... Line 1737...
1409
				break;
1737
			voltage_tries = 0;
1410
		if (i == intel_dp->lane_count)
1738
			continue;
1411
			break;
1739
		}
1412
 
1740
 
-
 
1741
		/* Check to see if we've tried the same voltage 5 times */
1413
		/* Check to see if we've tried the same voltage 5 times */
1742
		if ((intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) {
-
 
1743
			++voltage_tries;
1414
		if ((intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) {
1744
			if (voltage_tries == 5) {
1415
			++tries;
1745
				DRM_DEBUG_KMS("too many voltage retries, give up\n");
1416
			if (tries == 5)
1746
				break;
Line 1417... Line 1747...
1417
				break;
1747
			}
1418
		} else
1748
		} else
1419
			tries = 0;
1749
			voltage_tries = 0;
Line 1420... Line 1750...
1420
		voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
1750
		voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
1421
 
1751
 
Line 1441... Line 1771...
1441
	cr_tries = 0;
1771
	cr_tries = 0;
1442
	channel_eq = false;
1772
	channel_eq = false;
1443
	for (;;) {
1773
	for (;;) {
1444
		/* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
1774
		/* Use intel_dp->train_set[0] to set the voltage and pre emphasis values */
1445
		uint32_t    signal_levels;
1775
		uint32_t    signal_levels;
-
 
1776
		uint8_t	    link_status[DP_LINK_STATUS_SIZE];
Line 1446... Line 1777...
1446
 
1777
 
1447
		if (cr_tries > 5) {
1778
		if (cr_tries > 5) {
1448
			DRM_ERROR("failed to train DP, aborting\n");
1779
			DRM_ERROR("failed to train DP, aborting\n");
1449
			intel_dp_link_down(intel_dp);
1780
			intel_dp_link_down(intel_dp);
1450
			break;
1781
			break;
Line 1451... Line 1782...
1451
		}
1782
		}
-
 
1783
 
-
 
1784
		if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) {
-
 
1785
			signal_levels = intel_gen7_edp_signal_levels(intel_dp->train_set[0]);
1452
 
1786
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_IVB) | signal_levels;
1453
		if (IS_GEN6(dev) && is_edp(intel_dp)) {
1787
		} else if (IS_GEN6(dev) && is_cpu_edp(intel_dp)) {
1454
			signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
1788
			signal_levels = intel_gen6_edp_signal_levels(intel_dp->train_set[0]);
1455
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
1789
			DP = (DP & ~EDP_LINK_TRAIN_VOL_EMP_MASK_SNB) | signal_levels;
1456
		} else {
1790
		} else {
1457
			signal_levels = intel_dp_signal_levels(intel_dp->train_set[0], intel_dp->lane_count);
1791
			signal_levels = intel_dp_signal_levels(intel_dp->train_set[0]);
Line 1458... Line 1792...
1458
			DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
1792
			DP = (DP & ~(DP_VOLTAGE_MASK|DP_PRE_EMPHASIS_MASK)) | signal_levels;
1459
		}
1793
		}
1460
 
1794
 
1461
		if (HAS_PCH_CPT(dev) && !is_edp(intel_dp))
1795
		if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
Line 1462... Line 1796...
1462
			reg = DP | DP_LINK_TRAIN_PAT_2_CPT;
1796
			reg = DP | DP_LINK_TRAIN_PAT_2_CPT;
Line 1468... Line 1802...
1468
					     DP_TRAINING_PATTERN_2 |
1802
					     DP_TRAINING_PATTERN_2 |
1469
					     DP_LINK_SCRAMBLING_DISABLE))
1803
					     DP_LINK_SCRAMBLING_DISABLE))
1470
			break;
1804
			break;
Line 1471... Line 1805...
1471
 
1805
 
1472
		udelay(400);
1806
		udelay(400);
1473
		if (!intel_dp_get_link_status(intel_dp))
1807
		if (!intel_dp_get_link_status(intel_dp, link_status))
Line 1474... Line 1808...
1474
			break;
1808
			break;
1475
 
1809
 
1476
		/* Make sure clock is still ok */
1810
		/* Make sure clock is still ok */
1477
		if (!intel_clock_recovery_ok(intel_dp->link_status, intel_dp->lane_count)) {
1811
		if (!intel_clock_recovery_ok(link_status, intel_dp->lane_count)) {
1478
			intel_dp_start_link_train(intel_dp);
1812
			intel_dp_start_link_train(intel_dp);
1479
			cr_tries++;
1813
			cr_tries++;
Line 1480... Line 1814...
1480
			continue;
1814
			continue;
1481
		}
1815
		}
1482
 
1816
 
1483
		if (intel_channel_eq_ok(intel_dp)) {
1817
		if (intel_channel_eq_ok(intel_dp, link_status)) {
Line 1484... Line 1818...
1484
			channel_eq = true;
1818
			channel_eq = true;
Line 1493... Line 1827...
1493
			cr_tries++;
1827
			cr_tries++;
1494
			continue;
1828
			continue;
1495
		}
1829
		}
Line 1496... Line 1830...
1496
 
1830
 
1497
		/* Compute new intel_dp->train_set as requested by target */
1831
		/* Compute new intel_dp->train_set as requested by target */
1498
		intel_get_adjust_train(intel_dp);
1832
		intel_get_adjust_train(intel_dp, link_status);
1499
		++tries;
1833
		++tries;
Line 1500... Line 1834...
1500
	}
1834
	}
1501
 
1835
 
1502
	if (HAS_PCH_CPT(dev) && !is_edp(intel_dp))
1836
	if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
1503
		reg = DP | DP_LINK_TRAIN_OFF_CPT;
1837
		reg = DP | DP_LINK_TRAIN_OFF_CPT;
Line 1504... Line 1838...
1504
	else
1838
	else
Line 1527... Line 1861...
1527
		I915_WRITE(intel_dp->output_reg, DP);
1861
		I915_WRITE(intel_dp->output_reg, DP);
1528
		POSTING_READ(intel_dp->output_reg);
1862
		POSTING_READ(intel_dp->output_reg);
1529
		udelay(100);
1863
		udelay(100);
1530
	}
1864
	}
Line 1531... Line 1865...
1531
 
1865
 
1532
	if (HAS_PCH_CPT(dev) && !is_edp(intel_dp)) {
1866
	if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp))) {
1533
		DP &= ~DP_LINK_TRAIN_MASK_CPT;
1867
		DP &= ~DP_LINK_TRAIN_MASK_CPT;
1534
		I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE_CPT);
1868
		I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE_CPT);
1535
	} else {
1869
	} else {
1536
		DP &= ~DP_LINK_TRAIN_MASK;
1870
		DP &= ~DP_LINK_TRAIN_MASK;
1537
		I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE);
1871
		I915_WRITE(intel_dp->output_reg, DP | DP_LINK_TRAIN_PAT_IDLE);
1538
	}
1872
	}
Line 1539... Line 1873...
1539
	POSTING_READ(intel_dp->output_reg);
1873
	POSTING_READ(intel_dp->output_reg);
Line 1540... Line 1874...
1540
 
1874
 
-
 
1875
	msleep(17);
-
 
1876
 
-
 
1877
	if (is_edp(intel_dp)) {
1541
	msleep(17);
1878
		if (HAS_PCH_CPT(dev) && (IS_GEN7(dev) || !is_cpu_edp(intel_dp)))
-
 
1879
			DP |= DP_LINK_TRAIN_OFF_CPT;
Line 1542... Line 1880...
1542
 
1880
		else
1543
	if (is_edp(intel_dp))
1881
		DP |= DP_LINK_TRAIN_OFF;
1544
		DP |= DP_LINK_TRAIN_OFF;
1882
	}
Line 1574... Line 1912...
1574
			msleep(50);
1912
			msleep(50);
1575
		} else
1913
		} else
1576
			intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe);
1914
			intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe);
1577
	}
1915
	}
Line -... Line 1916...
-
 
1916
 
1578
 
1917
	DP &= ~DP_AUDIO_OUTPUT_ENABLE;
1579
	I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
1918
	I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
-
 
1919
	POSTING_READ(intel_dp->output_reg);
1580
	POSTING_READ(intel_dp->output_reg);
1920
	msleep(intel_dp->panel_power_down_delay);
Line 1581... Line 1921...
1581
}
1921
}
1582
 
1922
 
1583
static bool
1923
static bool
Line 1590... Line 1930...
1590
	}
1930
	}
Line 1591... Line 1931...
1591
 
1931
 
1592
	return false;
1932
	return false;
Line -... Line 1933...
-
 
1933
}
-
 
1934
 
-
 
1935
static bool
-
 
1936
intel_dp_get_sink_irq(struct intel_dp *intel_dp, u8 *sink_irq_vector)
-
 
1937
{
-
 
1938
	int ret;
-
 
1939
 
-
 
1940
	ret = intel_dp_aux_native_read_retry(intel_dp,
-
 
1941
					     DP_DEVICE_SERVICE_IRQ_VECTOR,
-
 
1942
					     sink_irq_vector, 1);
-
 
1943
	if (!ret)
-
 
1944
		return false;
-
 
1945
 
-
 
1946
	return true;
-
 
1947
}
-
 
1948
 
-
 
1949
static void
-
 
1950
intel_dp_handle_test_request(struct intel_dp *intel_dp)
-
 
1951
{
-
 
1952
	/* NAK by default */
-
 
1953
	intel_dp_aux_native_write_1(intel_dp, DP_TEST_RESPONSE, DP_TEST_ACK);
1593
}
1954
}
1594
 
1955
 
1595
/*
1956
/*
1596
 * According to DP spec
1957
 * According to DP spec
1597
 * 5.1.2:
1958
 * 5.1.2:
Line 1602... Line 1963...
1602
 */
1963
 */
Line 1603... Line 1964...
1603
 
1964
 
1604
static void
1965
static void
1605
intel_dp_check_link_status(struct intel_dp *intel_dp)
1966
intel_dp_check_link_status(struct intel_dp *intel_dp)
-
 
1967
{
-
 
1968
	u8 sink_irq_vector;
-
 
1969
	u8 link_status[DP_LINK_STATUS_SIZE];
1606
{
1970
 
1607
	if (intel_dp->dpms_mode != DRM_MODE_DPMS_ON)
1971
	if (intel_dp->dpms_mode != DRM_MODE_DPMS_ON)
Line 1608... Line 1972...
1608
		return;
1972
		return;
1609
 
1973
 
Line 1610... Line 1974...
1610
	if (!intel_dp->base.base.crtc)
1974
	if (!intel_dp->base.base.crtc)
1611
		return;
1975
		return;
1612
 
1976
 
1613
	/* Try to read receiver status if the link appears to be up */
1977
	/* Try to read receiver status if the link appears to be up */
1614
	if (!intel_dp_get_link_status(intel_dp)) {
1978
	if (!intel_dp_get_link_status(intel_dp, link_status)) {
Line 1615... Line 1979...
1615
		intel_dp_link_down(intel_dp);
1979
		intel_dp_link_down(intel_dp);
1616
		return;
1980
		return;
1617
	}
1981
	}
1618
 
1982
 
1619
	/* Now read the DPCD to see if it's actually running */
1983
	/* Now read the DPCD to see if it's actually running */
Line -... Line 1984...
-
 
1984
	if (!intel_dp_get_dpcd(intel_dp)) {
-
 
1985
		intel_dp_link_down(intel_dp);
-
 
1986
		return;
-
 
1987
	}
-
 
1988
 
-
 
1989
	/* Try to read the source of the interrupt */
-
 
1990
	if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11 &&
-
 
1991
	    intel_dp_get_sink_irq(intel_dp, &sink_irq_vector)) {
-
 
1992
		/* Clear interrupt source */
-
 
1993
		intel_dp_aux_native_write_1(intel_dp,
-
 
1994
					    DP_DEVICE_SERVICE_IRQ_VECTOR,
-
 
1995
					    sink_irq_vector);
-
 
1996
 
-
 
1997
		if (sink_irq_vector & DP_AUTOMATED_TEST_REQUEST)
1620
	if (!intel_dp_get_dpcd(intel_dp)) {
1998
			intel_dp_handle_test_request(intel_dp);
1621
		intel_dp_link_down(intel_dp);
1999
		if (sink_irq_vector & (DP_CP_IRQ | DP_SINK_SPECIFIC_IRQ))
1622
		return;
2000
			DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
1623
	}
2001
	}
1624
 
2002
 
1625
	if (!intel_channel_eq_ok(intel_dp)) {
2003
	if (!intel_channel_eq_ok(intel_dp, link_status)) {
Line 1681... Line 2059...
1681
		return connector_status_disconnected;
2059
		return connector_status_disconnected;
Line 1682... Line 2060...
1682
 
2060
 
1683
	return intel_dp_detect_dpcd(intel_dp);
2061
	return intel_dp_detect_dpcd(intel_dp);
Line -... Line 2062...
-
 
2062
}
-
 
2063
 
-
 
2064
static struct edid *
-
 
2065
intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
-
 
2066
{
-
 
2067
	struct intel_dp *intel_dp = intel_attached_dp(connector);
-
 
2068
	struct edid	*edid;
-
 
2069
 
-
 
2070
	ironlake_edp_panel_vdd_on(intel_dp);
-
 
2071
	edid = drm_get_edid(connector, adapter);
-
 
2072
	ironlake_edp_panel_vdd_off(intel_dp, false);
-
 
2073
	return edid;
-
 
2074
}
-
 
2075
 
-
 
2076
static int
-
 
2077
intel_dp_get_edid_modes(struct drm_connector *connector, struct i2c_adapter *adapter)
-
 
2078
{
-
 
2079
	struct intel_dp *intel_dp = intel_attached_dp(connector);
-
 
2080
	int	ret;
-
 
2081
 
-
 
2082
	ironlake_edp_panel_vdd_on(intel_dp);
-
 
2083
	ret = intel_ddc_get_modes(connector, adapter);
-
 
2084
	ironlake_edp_panel_vdd_off(intel_dp, false);
-
 
2085
	return ret;
-
 
2086
}
1684
}
2087
 
1685
 
2088
 
1686
/**
2089
/**
1687
 * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect DP connection.
2090
 * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect DP connection.
1688
 *
2091
 *
Line 1734... Line 2137...
1734
	int ret;
2137
	int ret;
Line 1735... Line 2138...
1735
 
2138
 
1736
	/* We should parse the EDID data and find out if it has an audio sink
2139
	/* We should parse the EDID data and find out if it has an audio sink
Line 1737... Line 2140...
1737
	 */
2140
	 */
1738
 
2141
 
1739
	ret = intel_ddc_get_modes(connector, &intel_dp->adapter);
2142
	ret = intel_dp_get_edid_modes(connector, &intel_dp->adapter);
1740
	if (ret) {
2143
	if (ret) {
1741
		if (is_edp(intel_dp) && !dev_priv->panel_fixed_mode) {
2144
		if (is_edp(intel_dp) && !intel_dp->panel_fixed_mode) {
1742
			struct drm_display_mode *newmode;
2145
			struct drm_display_mode *newmode;
1743
			list_for_each_entry(newmode, &connector->probed_modes,
2146
			list_for_each_entry(newmode, &connector->probed_modes,
1744
					    head) {
2147
					    head) {
1745
				if (newmode->type & DRM_MODE_TYPE_PREFERRED) {
2148
				if ((newmode->type & DRM_MODE_TYPE_PREFERRED)) {
1746
					dev_priv->panel_fixed_mode =
2149
					intel_dp->panel_fixed_mode =
1747
						drm_mode_duplicate(dev, newmode);
2150
						drm_mode_duplicate(dev, newmode);
1748
					break;
2151
					break;
1749
				}
2152
				}
1750
			}
-
 
1751
		}
2153
			}
1752
 
2154
		}
Line 1753... Line 2155...
1753
		return ret;
2155
		return ret;
1754
	}
2156
	}
-
 
2157
 
-
 
2158
	/* if eDP has no EDID, try to use fixed panel mode from VBT */
-
 
2159
	if (is_edp(intel_dp)) {
-
 
2160
		/* initialize panel mode from VBT if available for eDP */
-
 
2161
		if (intel_dp->panel_fixed_mode == NULL && dev_priv->lfp_lvds_vbt_mode != NULL) {
-
 
2162
			intel_dp->panel_fixed_mode =
-
 
2163
				drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
-
 
2164
			if (intel_dp->panel_fixed_mode) {
-
 
2165
				intel_dp->panel_fixed_mode->type |=
1755
 
2166
					DRM_MODE_TYPE_PREFERRED;
1756
	/* if eDP has no EDID, try to use fixed panel mode from VBT */
2167
			}
1757
	if (is_edp(intel_dp)) {
2168
		}
1758
		if (dev_priv->panel_fixed_mode != NULL) {
2169
		if (intel_dp->panel_fixed_mode) {
1759
			struct drm_display_mode *mode;
2170
			struct drm_display_mode *mode;
1760
			mode = drm_mode_duplicate(dev, dev_priv->panel_fixed_mode);
2171
			mode = drm_mode_duplicate(dev, intel_dp->panel_fixed_mode);
1761
			drm_mode_probed_add(connector, mode);
2172
			drm_mode_probed_add(connector, mode);
1762
			return 1;
2173
			return 1;
Line 1842... Line 2253...
1842
{
2253
{
1843
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
2254
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
Line 1844... Line 2255...
1844
 
2255
 
1845
//   i2c_del_adapter(&intel_dp->adapter);
2256
//   i2c_del_adapter(&intel_dp->adapter);
-
 
2257
	drm_encoder_cleanup(encoder);
-
 
2258
	if (is_edp(intel_dp)) {
-
 
2259
//		cancel_delayed_work_sync(&intel_dp->panel_vdd_work);
-
 
2260
		ironlake_panel_vdd_off_sync(intel_dp);
1846
	drm_encoder_cleanup(encoder);
2261
	}
1847
	kfree(intel_dp);
2262
	kfree(intel_dp);
Line 1848... Line 2263...
1848
}
2263
}
1849
 
2264
 
Line 1894... Line 2309...
1894
 
2309
 
1895
		if (encoder->crtc != crtc)
2310
		if (encoder->crtc != crtc)
Line 1896... Line 2311...
1896
			continue;
2311
			continue;
1897
 
2312
 
-
 
2313
		intel_dp = enc_to_intel_dp(encoder);
1898
		intel_dp = enc_to_intel_dp(encoder);
2314
		if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT ||
1899
		if (intel_dp->base.type == INTEL_OUTPUT_DISPLAYPORT)
2315
		    intel_dp->base.type == INTEL_OUTPUT_EDP)
Line 1900... Line 2316...
1900
			return intel_dp->output_reg;
2316
			return intel_dp->output_reg;
1901
	}
2317
	}
Line 1978... Line 2394...
1978
	else if (output_reg == DP_C || output_reg == PCH_DP_C)
2394
	else if (output_reg == DP_C || output_reg == PCH_DP_C)
1979
		intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
2395
		intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
1980
	else if (output_reg == DP_D || output_reg == PCH_DP_D)
2396
	else if (output_reg == DP_D || output_reg == PCH_DP_D)
1981
		intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
2397
		intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
Line 1982... Line 2398...
1982
 
2398
 
1983
	if (is_edp(intel_dp))
2399
	if (is_edp(intel_dp)) {
-
 
2400
		intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);
-
 
2401
//		INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
-
 
2402
//				  ironlake_panel_vdd_work);
Line 1984... Line 2403...
1984
		intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT);
2403
	}
1985
 
2404
 
1986
	intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
2405
	intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
Line 1987... Line 2406...
1987
	connector->interlace_allowed = true;
2406
	connector->interlace_allowed = true;
1988
	connector->doublescan_allowed = 0;
2407
	connector->doublescan_allowed = 0;
Line 2017... Line 2436...
2017
				HDMID_HOTPLUG_INT_STATUS;
2436
				HDMID_HOTPLUG_INT_STATUS;
2018
			name = "DPDDC-D";
2437
			name = "DPDDC-D";
2019
			break;
2438
			break;
2020
	}
2439
	}
Line 2021... Line -...
2021
 
-
 
2022
	intel_dp_i2c_init(intel_dp, intel_connector, name);
-
 
2023
 
2440
 
2024
	/* Cache some DPCD data in the eDP case */
2441
	/* Cache some DPCD data in the eDP case */
2025
	if (is_edp(intel_dp)) {
2442
	if (is_edp(intel_dp)) {
-
 
2443
		bool ret;
2026
		bool ret;
2444
		struct edp_power_seq	cur, vbt;
Line 2027... Line 2445...
2027
		u32 pp_on, pp_div;
2445
		u32 pp_on, pp_off, pp_div;
-
 
2446
 
2028
 
2447
		pp_on = I915_READ(PCH_PP_ON_DELAYS);
Line 2029... Line 2448...
2029
		pp_on = I915_READ(PCH_PP_ON_DELAYS);
2448
		pp_off = I915_READ(PCH_PP_OFF_DELAYS);
-
 
2449
		pp_div = I915_READ(PCH_PP_DIVISOR);
-
 
2450
 
-
 
2451
		/* Pull timing values out of registers */
-
 
2452
		cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
-
 
2453
			PANEL_POWER_UP_DELAY_SHIFT;
-
 
2454
 
-
 
2455
		cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
-
 
2456
			PANEL_LIGHT_ON_DELAY_SHIFT;
-
 
2457
 
-
 
2458
		cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
-
 
2459
			PANEL_LIGHT_OFF_DELAY_SHIFT;
-
 
2460
 
-
 
2461
		cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
-
 
2462
			PANEL_POWER_DOWN_DELAY_SHIFT;
-
 
2463
 
-
 
2464
		cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
-
 
2465
			       PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
-
 
2466
 
-
 
2467
		DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
-
 
2468
			      cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
-
 
2469
 
-
 
2470
		vbt = dev_priv->edp.pps;
-
 
2471
 
-
 
2472
		DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
-
 
2473
			      vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
2030
		pp_div = I915_READ(PCH_PP_DIVISOR);
2474
 
-
 
2475
#define get_delay(field)	((max(cur.field, vbt.field) + 9) / 10)
-
 
2476
 
2031
 
2477
		intel_dp->panel_power_up_delay = get_delay(t1_t3);
-
 
2478
		intel_dp->backlight_on_delay = get_delay(t8);
-
 
2479
		intel_dp->backlight_off_delay = get_delay(t9);
-
 
2480
		intel_dp->panel_power_down_delay = get_delay(t10);
-
 
2481
		intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
2032
		/* Get T3 & T12 values (note: VESA not bspec terminology) */
2482
 
-
 
2483
		DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
2033
		dev_priv->panel_t3 = (pp_on & 0x1fff0000) >> 16;
2484
			      intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
-
 
2485
			      intel_dp->panel_power_cycle_delay);
Line 2034... Line 2486...
2034
		dev_priv->panel_t3 /= 10; /* t3 in 100us units */
2486
 
2035
		dev_priv->panel_t12 = pp_div & 0xf;
2487
		DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
2036
		dev_priv->panel_t12 *= 100; /* t12 in 100ms units */
2488
			      intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
-
 
2489
 
2037
 
2490
		ironlake_edp_panel_vdd_on(intel_dp);
2038
		ironlake_edp_panel_vdd_on(intel_dp);
2491
		ret = intel_dp_get_dpcd(intel_dp);
2039
		ret = intel_dp_get_dpcd(intel_dp);
2492
		ironlake_edp_panel_vdd_off(intel_dp, false);
2040
		ironlake_edp_panel_vdd_off(intel_dp);
2493
 
2041
		if (ret) {
2494
		if (ret) {
Line 2050... Line 2503...
2050
			intel_dp_destroy(&intel_connector->base);
2503
			intel_dp_destroy(&intel_connector->base);
2051
			return;
2504
			return;
2052
		}
2505
		}
2053
	}
2506
	}
Line -... Line 2507...
-
 
2507
 
-
 
2508
	intel_dp_i2c_init(intel_dp, intel_connector, name);
2054
 
2509
 
Line 2055... Line 2510...
2055
	intel_encoder->hot_plug = intel_dp_hot_plug;
2510
	intel_encoder->hot_plug = intel_dp_hot_plug;
2056
 
-
 
2057
	if (is_edp(intel_dp)) {
-
 
2058
		/* initialize panel mode from VBT if available for eDP */
-
 
2059
		if (dev_priv->lfp_lvds_vbt_mode) {
-
 
2060
			dev_priv->panel_fixed_mode =
-
 
2061
				drm_mode_duplicate(dev, dev_priv->lfp_lvds_vbt_mode);
-
 
2062
			if (dev_priv->panel_fixed_mode) {
-
 
2063
				dev_priv->panel_fixed_mode->type |=
-
 
2064
					DRM_MODE_TYPE_PREFERRED;
-
 
2065
			}
2511
 
2066
		}
2512
	if (is_edp(intel_dp)) {
2067
		dev_priv->int_edp_connector = connector;
2513
		dev_priv->int_edp_connector = connector;
Line 2068... Line 2514...
2068
		intel_panel_setup_backlight(dev);
2514
		intel_panel_setup_backlight(dev);