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

Commit 8b7b56f3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
 "Nothing too crazy or exciting:

   - two MAINTAINERS entries that I didn't see the point in delaying.
   - one drm mst fix to stop sending uninitialised data to monitors
   - two amdgpu fixes
   - one radeon mst tiling fix
   - one vmwgfx regression fix
   - one virtio warning fix.

  I have found one locking problem that needs a bit of reorg to fix, but
  I'm not sure it's worth putting in -fixes as I don't think we've seen
  it hit in the real world ever, I just found it using the virtio-gpu
  driver when working on it.  I'll possibly send it next week once I've
  time to discuss with Daniel"

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/virtio: use %llu format string form atomic64_t
  MAINTAINERS: Add myself as maintainer for the gma500 driver
  MAINTAINERS: add a maintainer for the atmel-hlcdc DRM driver
  drm/amdgpu: Keep the pflip interrupts always enabled v7
  drm/amdgpu: adjust default dispclk (v2)
  drm/dp/mst: make mst i2c transfer code more robust.
  drm/radeon: attach tile property to mst connector
  drm/vmwgfx: Fix kernel NULL pointer dereference on older hardware
parents ebb65c81 d549f545
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -3591,6 +3591,13 @@ F: drivers/gpu/drm/i915/
F:	include/drm/i915*
F:	include/uapi/drm/i915*

DRM DRIVERS FOR ATMEL HLCDC
M:	Boris Brezillon <boris.brezillon@free-electrons.com>
L:	dri-devel@lists.freedesktop.org
S:	Supported
F:	drivers/gpu/drm/atmel-hlcdc/
F:	Documentation/devicetree/bindings/drm/atmel/

DRM DRIVERS FOR EXYNOS
M:	Inki Dae <inki.dae@samsung.com>
M:	Joonyoung Shim <jy0922.shim@samsung.com>
@@ -3619,6 +3626,14 @@ S: Maintained
F:	drivers/gpu/drm/imx/
F:	Documentation/devicetree/bindings/drm/imx/

DRM DRIVERS FOR GMA500 (Poulsbo, Moorestown and derivative chipsets)
M:	Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
L:	dri-devel@lists.freedesktop.org
T:	git git://github.com/patjak/drm-gma500
S:	Maintained
F:	drivers/gpu/drm/gma500
F:	include/drm/gma500*

DRM DRIVERS FOR NVIDIA TEGRA
M:	Thierry Reding <thierry.reding@gmail.com>
M:	Terje Bergström <tbergstrom@nvidia.com>
+6 −2
Original line number Diff line number Diff line
@@ -672,8 +672,12 @@ int amdgpu_atombios_get_clock_info(struct amdgpu_device *adev)
		/* disp clock */
		adev->clock.default_dispclk =
			le32_to_cpu(firmware_info->info_21.ulDefaultDispEngineClkFreq);
		if (adev->clock.default_dispclk == 0)
			adev->clock.default_dispclk = 54000; /* 540 Mhz */
		/* set a reasonable default for DP */
		if (adev->clock.default_dispclk < 53900) {
			DRM_INFO("Changing default dispclk from %dMhz to 600Mhz\n",
				 adev->clock.default_dispclk / 100);
			adev->clock.default_dispclk = 60000;
		}
		adev->clock.dp_extclk =
			le16_to_cpu(firmware_info->info_21.usUniphyDPModeExtClkFreq);
		adev->clock.current_dispclk = adev->clock.default_dispclk;
+0 −2
Original line number Diff line number Diff line
@@ -85,8 +85,6 @@ static void amdgpu_flip_work_func(struct work_struct *__work)
	/* We borrow the event spin lock for protecting flip_status */
	spin_lock_irqsave(&crtc->dev->event_lock, flags);

	/* set the proper interrupt */
	amdgpu_irq_get(adev, &adev->pageflip_irq, work->crtc_id);
	/* do the flip (mmio) */
	adev->mode_info.funcs->page_flip(adev, work->crtc_id, work->base);
	/* set the flip status */
+28 −2
Original line number Diff line number Diff line
@@ -255,6 +255,24 @@ static u32 dce_v10_0_vblank_get_counter(struct amdgpu_device *adev, int crtc)
		return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]);
}

static void dce_v10_0_pageflip_interrupt_init(struct amdgpu_device *adev)
{
	unsigned i;

	/* Enable pflip interrupts */
	for (i = 0; i < adev->mode_info.num_crtc; i++)
		amdgpu_irq_get(adev, &adev->pageflip_irq, i);
}

static void dce_v10_0_pageflip_interrupt_fini(struct amdgpu_device *adev)
{
	unsigned i;

	/* Disable pflip interrupts */
	for (i = 0; i < adev->mode_info.num_crtc; i++)
		amdgpu_irq_put(adev, &adev->pageflip_irq, i);
}

/**
 * dce_v10_0_page_flip - pageflip callback.
 *
@@ -2663,9 +2681,10 @@ static void dce_v10_0_crtc_dpms(struct drm_crtc *crtc, int mode)
		dce_v10_0_vga_enable(crtc, true);
		amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE);
		dce_v10_0_vga_enable(crtc, false);
		/* Make sure VBLANK interrupt is still enabled */
		/* Make sure VBLANK and PFLIP interrupts are still enabled */
		type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
		amdgpu_irq_update(adev, &adev->crtc_irq, type);
		amdgpu_irq_update(adev, &adev->pageflip_irq, type);
		drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
		dce_v10_0_crtc_load_lut(crtc);
		break;
@@ -3025,6 +3044,8 @@ static int dce_v10_0_hw_init(void *handle)
		dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
	}

	dce_v10_0_pageflip_interrupt_init(adev);

	return 0;
}

@@ -3039,6 +3060,8 @@ static int dce_v10_0_hw_fini(void *handle)
		dce_v10_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
	}

	dce_v10_0_pageflip_interrupt_fini(adev);

	return 0;
}

@@ -3050,6 +3073,8 @@ static int dce_v10_0_suspend(void *handle)

	dce_v10_0_hpd_fini(adev);

	dce_v10_0_pageflip_interrupt_fini(adev);

	return 0;
}

@@ -3075,6 +3100,8 @@ static int dce_v10_0_resume(void *handle)
	/* initialize hpd */
	dce_v10_0_hpd_init(adev);

	dce_v10_0_pageflip_interrupt_init(adev);

	return 0;
}

@@ -3369,7 +3396,6 @@ static int dce_v10_0_pageflip_irq(struct amdgpu_device *adev,
	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);

	drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
	amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id);
	queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);

	return 0;
+28 −2
Original line number Diff line number Diff line
@@ -233,6 +233,24 @@ static u32 dce_v11_0_vblank_get_counter(struct amdgpu_device *adev, int crtc)
		return RREG32(mmCRTC_STATUS_FRAME_COUNT + crtc_offsets[crtc]);
}

static void dce_v11_0_pageflip_interrupt_init(struct amdgpu_device *adev)
{
	unsigned i;

	/* Enable pflip interrupts */
	for (i = 0; i < adev->mode_info.num_crtc; i++)
		amdgpu_irq_get(adev, &adev->pageflip_irq, i);
}

static void dce_v11_0_pageflip_interrupt_fini(struct amdgpu_device *adev)
{
	unsigned i;

	/* Disable pflip interrupts */
	for (i = 0; i < adev->mode_info.num_crtc; i++)
		amdgpu_irq_put(adev, &adev->pageflip_irq, i);
}

/**
 * dce_v11_0_page_flip - pageflip callback.
 *
@@ -2640,9 +2658,10 @@ static void dce_v11_0_crtc_dpms(struct drm_crtc *crtc, int mode)
		dce_v11_0_vga_enable(crtc, true);
		amdgpu_atombios_crtc_blank(crtc, ATOM_DISABLE);
		dce_v11_0_vga_enable(crtc, false);
		/* Make sure VBLANK interrupt is still enabled */
		/* Make sure VBLANK and PFLIP interrupts are still enabled */
		type = amdgpu_crtc_idx_to_irq_type(adev, amdgpu_crtc->crtc_id);
		amdgpu_irq_update(adev, &adev->crtc_irq, type);
		amdgpu_irq_update(adev, &adev->pageflip_irq, type);
		drm_vblank_post_modeset(dev, amdgpu_crtc->crtc_id);
		dce_v11_0_crtc_load_lut(crtc);
		break;
@@ -3000,6 +3019,8 @@ static int dce_v11_0_hw_init(void *handle)
		dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
	}

	dce_v11_0_pageflip_interrupt_init(adev);

	return 0;
}

@@ -3014,6 +3035,8 @@ static int dce_v11_0_hw_fini(void *handle)
		dce_v11_0_audio_enable(adev, &adev->mode_info.audio.pin[i], false);
	}

	dce_v11_0_pageflip_interrupt_fini(adev);

	return 0;
}

@@ -3025,6 +3048,8 @@ static int dce_v11_0_suspend(void *handle)

	dce_v11_0_hpd_fini(adev);

	dce_v11_0_pageflip_interrupt_fini(adev);

	return 0;
}

@@ -3051,6 +3076,8 @@ static int dce_v11_0_resume(void *handle)
	/* initialize hpd */
	dce_v11_0_hpd_init(adev);

	dce_v11_0_pageflip_interrupt_init(adev);

	return 0;
}

@@ -3345,7 +3372,6 @@ static int dce_v11_0_pageflip_irq(struct amdgpu_device *adev,
	spin_unlock_irqrestore(&adev->ddev->event_lock, flags);

	drm_vblank_put(adev->ddev, amdgpu_crtc->crtc_id);
	amdgpu_irq_put(adev, &adev->pageflip_irq, crtc_id);
	queue_work(amdgpu_crtc->pflip_queue, &works->unpin_work);

	return 0;
Loading