On Tue, Dec 16, 2014 at 11:15 AM, Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > Hi, > > 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, implementing drm_clflush_*() for ARM, has also been > tested by Rob. The long-term plan is to make architectures expose an API > to flush pages, but for now drm_clflush_*() provides exactly what we > need. > > 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. > > I'm hoping to get reviews on this, especially the drm/irq and drm/cache > patches, quickly so that I can send a pull request to Dave, hopefully to > get this included, given the size, in v3.19-rc1 still. > Hi Thierry, Have you made a determination on "drm/tegra: Select root window for event dispatch"? The bug it fixes makes concurrent flips and overlay updates impossible. Sean > Thierry > > Thierry Reding (8): > 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/cache: Implement drm_clflush_*() for ARM > drm/tegra: gem: Flush buffer objects upon allocation > drm/tegra: gem: Use the proper size for GEM objects > > drivers/gpu/drm/drm_cache.c | 45 ++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/drm_irq.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/tegra/dc.c | 24 ++++++++++-------- > drivers/gpu/drm/tegra/drm.c | 16 +++++++----- > drivers/gpu/drm/tegra/gem.c | 16 ++++++------ > include/drm/drmP.h | 4 +++ > 6 files changed, 142 insertions(+), 23 deletions(-) > > -- > 2.1.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel