[GIT PULL] drm/tegra: Fixes for v3.19-rc1

Thierry Reding thierry.reding at gmail.com
Wed Dec 17 06:07:11 PST 2014


The following changes since commit 4e0cd68115620bc3236ff4e58e4c073948629b41:

  drm: sti: fix module compilation issue (2014-12-15 17:07:57 +1000)

are available in the git repository at:

  git://people.freedesktop.org/~tagr/linux tags/drm/tegra/for-3.19-rc1-fixes

for you to fetch changes up to 93396d0f9c027654eb09151d2e22fe78a39feedb:

  drm/tegra: dc: Select root window for event dispatch (2014-12-17 14:27:39 +0100)

Thanks,
Thierry

----------------------------------------------------------------
drm/tegra: Fixes for v3.19-rc1

This is a set of fixes for two regressions and one bug in the IOMMU
mapping code. It turns out that all of these issues turn up primarily
on Tegra30 hardware. The IOMMU mapping bug only manifests on buffers
that aren't multiples of the page size. I happened to be testing HDMI
with 1080p while writing the code and framebuffers for that happen to
fit exactly within 2025 pages of 4 KiB each.

One of the regressions is caused by the IOMMU code allocating pages from
shmem which can have associated cache lines. If the pages aren't flushed
then these cache lines may be flushed later on and cause framebuffer
corruption. I'm not sure why I didn't see this before. Perhaps the board
that I was using had enough RAM so that the pages shmem would hand out
had a better chance of being unused. Or maybe I didn't look too closely.
The fix for this is to fake up an SG table so that it can be passed to
the DMA API. Ideally this would use drm_clflush_*(), but implementing
that for ARM causes DRM to fail to build as a module since some of the
low-level cache maintenance functions aren't exported. Hopefully we can
get a suitable API exported on ARM for the next release.

The second regression is caused by a mismatch between the hardware pipe
number and the CRTC's DRM index. These were used inconsistently, which
could cause one code location to call drm_vblank_get() with a different
pipe than the corresponding drm_vblank_put(), thereby causing the
reference count to become unbalanced. Alexandre also reported a possible
race condition related to this, which this series also fixes.

----------------------------------------------------------------
Sean Paul (1):
      drm/tegra: dc: Select root window for event dispatch

Thierry Reding (7):
      drm/irq: Add drm_crtc_send_vblank_event()
      drm/irq: Add drm_crtc_handle_vblank()
      drm/irq: Add drm_crtc_vblank_count()
      drm/tegra: dc: Consistently use the same pipe
      drm/tegra: dc: Fix a potential race on page-flip completion
      drm/tegra: gem: Flush buffer objects upon allocation
      drm/tegra: gem: Use the proper size for GEM objects

 drivers/gpu/drm/drm_irq.c   | 60 +++++++++++++++++++++++++++++++++++++++++++++
 drivers/gpu/drm/tegra/dc.c  | 48 +++++++++++++++++++++++++++---------
 drivers/gpu/drm/tegra/drm.c | 16 +++++++-----
 drivers/gpu/drm/tegra/gem.c | 52 ++++++++++++++++++++++++++++++---------
 include/drm/drmP.h          |  4 +++
 5 files changed, 150 insertions(+), 30 deletions(-)


More information about the dri-devel mailing list