Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75104fa4 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/radeon/r5xx-r7xx: don't use radeon_crtc for vblank callback (v2)



This might be called before we've allocated the radeon_crtcs

v2: fix typo in array size

Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 94f768fd
Loading
Loading
Loading
Loading
+12 −4
Original line number Original line Diff line number Diff line
@@ -46,19 +46,27 @@
void rs600_gpu_init(struct radeon_device *rdev);
void rs600_gpu_init(struct radeon_device *rdev);
int rs600_mc_wait_for_idle(struct radeon_device *rdev);
int rs600_mc_wait_for_idle(struct radeon_device *rdev);


static const u32 crtc_offsets[2] =
{
	0,
	AVIVO_D2CRTC_H_TOTAL - AVIVO_D1CRTC_H_TOTAL
};

void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc)
void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc)
{
{
	struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc];
	int i;
	int i;


	if (RREG32(AVIVO_D1CRTC_CONTROL + radeon_crtc->crtc_offset) & AVIVO_CRTC_EN) {
	if (crtc >= rdev->num_crtc)
		return;

	if (RREG32(AVIVO_D1CRTC_CONTROL + crtc_offsets[crtc]) & AVIVO_CRTC_EN) {
		for (i = 0; i < rdev->usec_timeout; i++) {
		for (i = 0; i < rdev->usec_timeout; i++) {
			if (!(RREG32(AVIVO_D1CRTC_STATUS + radeon_crtc->crtc_offset) & AVIVO_D1CRTC_V_BLANK))
			if (!(RREG32(AVIVO_D1CRTC_STATUS + crtc_offsets[crtc]) & AVIVO_D1CRTC_V_BLANK))
				break;
				break;
			udelay(1);
			udelay(1);
		}
		}
		for (i = 0; i < rdev->usec_timeout; i++) {
		for (i = 0; i < rdev->usec_timeout; i++) {
			if (RREG32(AVIVO_D1CRTC_STATUS + radeon_crtc->crtc_offset) & AVIVO_D1CRTC_V_BLANK)
			if (RREG32(AVIVO_D1CRTC_STATUS + crtc_offsets[crtc]) & AVIVO_D1CRTC_V_BLANK)
				break;
				break;
			udelay(1);
			udelay(1);
		}
		}