Subversion Repositories Kolibri OS

Rev

Rev 6938 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6938 Rev 7146
Line 87... Line 87...
87
 
87
 
Line 88... Line 88...
88
	WREG32(NI_DP_MSE_SAT_UPDATE + primary->offset, 1);
88
	WREG32(NI_DP_MSE_SAT_UPDATE + primary->offset, 1);
Line 89... Line 89...
89
 
89
 
-
 
90
	do {
-
 
91
		unsigned value1, value2;
90
	do {
92
		udelay(10);
-
 
93
		temp = RREG32(NI_DP_MSE_SAT_UPDATE + primary->offset);
-
 
94
 
-
 
95
		value1 = temp & NI_DP_MSE_SAT_UPDATE_MASK;
-
 
96
		value2 = temp & NI_DP_MSE_16_MTP_KEEPOUT;
-
 
97
 
-
 
98
		if (!value1 && !value2)
91
		temp = RREG32(NI_DP_MSE_SAT_UPDATE + primary->offset);
99
			break;
Line 92... Line 100...
92
	} while ((temp & 0x1) && retries++ < 10000);
100
	} while (retries++ < 50);
93
 
101
 
Line 94... Line 102...
94
	if (retries == 10000)
102
	if (retries == 10000)
Line 148... Line 156...
148
	mst_conn->enabled_attribs = idx;
156
	mst_conn->enabled_attribs = idx;
149
	return 0;
157
	return 0;
150
}
158
}
151
 
159
 
Line 152... Line 160...
152
static int radeon_dp_mst_set_vcp_size(struct radeon_encoder *mst, uint32_t x, uint32_t y)
160
static int radeon_dp_mst_set_vcp_size(struct radeon_encoder *mst, s64 avg_time_slots_per_mtp)
153
{
161
{
154
	struct drm_device *dev = mst->base.dev;
162
	struct drm_device *dev = mst->base.dev;
155
	struct radeon_device *rdev = dev->dev_private;
163
	struct radeon_device *rdev = dev->dev_private;
156
	struct radeon_encoder_mst *mst_enc = mst->enc_priv;
164
	struct radeon_encoder_mst *mst_enc = mst->enc_priv;
157
	uint32_t val, temp;
165
	uint32_t val, temp;
158
	uint32_t offset = radeon_atom_set_enc_offset(mst_enc->fe);
166
	uint32_t offset = radeon_atom_set_enc_offset(mst_enc->fe);
159
	int retries = 0;
167
	int retries = 0;
-
 
168
	uint32_t x = drm_fixp2int(avg_time_slots_per_mtp);
-
 
169
	uint32_t y = drm_fixp2int_ceil((avg_time_slots_per_mtp - x) << 26);
Line 160... Line 170...
160
 
170
 
Line 161... Line 171...
161
	val = NI_DP_MSE_RATE_X(x) | NI_DP_MSE_RATE_Y(y);
171
	val = NI_DP_MSE_RATE_X(x) | NI_DP_MSE_RATE_Y(y);
Line 162... Line 172...
162
 
172
 
163
	WREG32(NI_DP_MSE_RATE_CNTL + offset, val);
173
	WREG32(NI_DP_MSE_RATE_CNTL + offset, val);
-
 
174
 
164
 
175
	do {
Line 165... Line 176...
165
	do {
176
		temp = RREG32(NI_DP_MSE_RATE_UPDATE + offset);
166
		temp = RREG32(NI_DP_MSE_RATE_UPDATE + offset);
177
		udelay(10);
167
	} while ((temp & 0x1) && (retries++ < 10000));
178
	} while ((temp & 0x1) && (retries++ < 10000));
Line 244... Line 255...
244
	drm_connector_cleanup(connector);
255
	drm_connector_cleanup(connector);
245
	kfree(radeon_connector);
256
	kfree(radeon_connector);
246
}
257
}
247
 
258
 
Line 248... Line -...
248
static int radeon_connector_dpms(struct drm_connector *connector, int mode)
-
 
249
{
-
 
250
	DRM_DEBUG_KMS("\n");
-
 
251
	return 0;
-
 
252
}
-
 
253
 
-
 
254
static const struct drm_connector_funcs radeon_dp_mst_connector_funcs = {
259
static const struct drm_connector_funcs radeon_dp_mst_connector_funcs = {
255
	.dpms = radeon_connector_dpms,
260
	.dpms = drm_helper_connector_dpms,
256
	.detect = radeon_dp_mst_detect,
261
	.detect = radeon_dp_mst_detect,
257
	.fill_modes = drm_helper_probe_single_connector_modes,
262
	.fill_modes = drm_helper_probe_single_connector_modes,
258
	.destroy = radeon_dp_mst_connector_destroy,
263
	.destroy = radeon_dp_mst_connector_destroy,
259
};
264
};
Line 392... Line 397...
392
	struct radeon_connector *radeon_connector;
397
	struct radeon_connector *radeon_connector;
393
	struct drm_crtc *crtc;
398
	struct drm_crtc *crtc;
394
	struct radeon_crtc *radeon_crtc;
399
	struct radeon_crtc *radeon_crtc;
395
	int ret, slots;
400
	int ret, slots;
396
 
401
	s64 fixed_pbn, fixed_pbn_per_slot, avg_time_slots_per_mtp;
397
	if (!ASIC_IS_DCE5(rdev)) {
-
 
-
 
402
	if (!ASIC_IS_DCE5(rdev)) {
398
		DRM_ERROR("got mst dpms on non-DCE5\n");
403
		DRM_ERROR("got mst dpms on non-DCE5\n");
399
		return;
404
		return;
400
	}
405
	}
401
 
406
 
Line 454... Line 459...
454
					  radeon_connector->mst_port->hpd.hpd, true);
459
					  radeon_connector->mst_port->hpd.hpd, true);
455
 
460
 
Line 456... Line 461...
456
		mst_enc->enc_active = true;
461
		mst_enc->enc_active = true;
457
		radeon_dp_mst_update_stream_attribs(radeon_connector->mst_port, primary);
462
		radeon_dp_mst_update_stream_attribs(radeon_connector->mst_port, primary);
-
 
463
 
-
 
464
		fixed_pbn = drm_int2fixp(mst_enc->pbn);
-
 
465
		fixed_pbn_per_slot = drm_int2fixp(radeon_connector->mst_port->mst_mgr.pbn_div);
-
 
466
		avg_time_slots_per_mtp = drm_fixp_div(fixed_pbn, fixed_pbn_per_slot);
458
		radeon_dp_mst_set_vcp_size(radeon_encoder, slots, 0);
467
		radeon_dp_mst_set_vcp_size(radeon_encoder, avg_time_slots_per_mtp);
Line 459... Line 468...
459
 
468
 
460
		atombios_dig_encoder_setup2(&primary->base, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0,
469
		atombios_dig_encoder_setup2(&primary->base, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0,
461
					    mst_enc->fe);
470
					    mst_enc->fe);
Line 508... Line 517...
508
				   struct drm_display_mode *adjusted_mode)
517
				   struct drm_display_mode *adjusted_mode)
509
{
518
{
510
	struct radeon_encoder_mst *mst_enc;
519
	struct radeon_encoder_mst *mst_enc;
511
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
520
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
512
	int bpp = 24;
521
	struct radeon_connector_atom_dig *dig_connector;
-
 
522
	int bpp = 24;
513
 
523
 
Line 514... Line 524...
514
	mst_enc = radeon_encoder->enc_priv;
524
	mst_enc = radeon_encoder->enc_priv;
Line 515... Line 525...
515
 
525
 
Line 521... Line 531...
521
		      mst_enc->connector->devices, mst_enc->primary->base.encoder_type);
531
		      mst_enc->connector->devices, mst_enc->primary->base.encoder_type);
522
 
532
 
Line 523... Line 533...
523
 
533
 
524
	drm_mode_set_crtcinfo(adjusted_mode, 0);
-
 
525
	{
-
 
526
	  struct radeon_connector_atom_dig *dig_connector;
534
	drm_mode_set_crtcinfo(adjusted_mode, 0);
527
	  dig_connector = mst_enc->connector->con_priv;
535
	dig_connector = mst_enc->connector->con_priv;
528
	  dig_connector->dp_lane_count = drm_dp_max_lane_count(dig_connector->dpcd);
536
	dig_connector->dp_lane_count = drm_dp_max_lane_count(dig_connector->dpcd);
529
	  dig_connector->dp_clock = drm_dp_max_link_rate(dig_connector->dpcd);
537
	dig_connector->dp_clock = drm_dp_max_link_rate(dig_connector->dpcd);
530
	  DRM_DEBUG_KMS("dig clock %p %d %d\n", dig_connector,
538
	DRM_DEBUG_KMS("dig clock %p %d %d\n", dig_connector,
531
			dig_connector->dp_lane_count, dig_connector->dp_clock);
-
 
532
	}
539
		      dig_connector->dp_lane_count, dig_connector->dp_clock);
533
	return true;
540
	return true;
Line 534... Line 541...
534
}
541
}
535
 
542