|
|
@@ -79,9 +79,9 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
|
|
|
struct drm_framebuffer *fb)
|
|
|
{
|
|
|
struct fb_info *fbi = helper->fbdev;
|
|
|
- struct drm_device *dev = helper->dev;
|
|
|
struct exynos_drm_gem_buf *buffer;
|
|
|
unsigned int size = fb->width * fb->height * (fb->bits_per_pixel >> 3);
|
|
|
+ unsigned int nr_pages;
|
|
|
unsigned long offset;
|
|
|
|
|
|
drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->depth);
|
|
|
@@ -94,25 +94,14 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
|
|
|
- /* map pages with kernel virtual space. */
|
|
|
+ nr_pages = buffer->size >> PAGE_SHIFT;
|
|
|
+
|
|
|
+ buffer->kvaddr = (void __iomem *) vmap(buffer->pages,
|
|
|
+ nr_pages, VM_MAP,
|
|
|
+ pgprot_writecombine(PAGE_KERNEL));
|
|
|
if (!buffer->kvaddr) {
|
|
|
- if (is_drm_iommu_supported(dev)) {
|
|
|
- unsigned int nr_pages = buffer->size >> PAGE_SHIFT;
|
|
|
-
|
|
|
- buffer->kvaddr = (void __iomem *) vmap(buffer->pages,
|
|
|
- nr_pages, VM_MAP,
|
|
|
- pgprot_writecombine(PAGE_KERNEL));
|
|
|
- } else {
|
|
|
- phys_addr_t dma_addr = buffer->dma_addr;
|
|
|
- if (dma_addr)
|
|
|
- buffer->kvaddr = (void __iomem *)phys_to_virt(dma_addr);
|
|
|
- else
|
|
|
- buffer->kvaddr = (void __iomem *)NULL;
|
|
|
- }
|
|
|
- if (!buffer->kvaddr) {
|
|
|
- DRM_ERROR("failed to map pages to kernel space.\n");
|
|
|
- return -EIO;
|
|
|
- }
|
|
|
+ DRM_ERROR("failed to map pages to kernel space.\n");
|
|
|
+ return -EIO;
|
|
|
}
|
|
|
|
|
|
/* buffer count to framebuffer always is 1 at booting time. */
|
|
|
@@ -313,7 +302,7 @@ static void exynos_drm_fbdev_destroy(struct drm_device *dev,
|
|
|
struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj;
|
|
|
struct drm_framebuffer *fb;
|
|
|
|
|
|
- if (is_drm_iommu_supported(dev) && exynos_gem_obj->buffer->kvaddr)
|
|
|
+ if (exynos_gem_obj->buffer->kvaddr)
|
|
|
vunmap(exynos_gem_obj->buffer->kvaddr);
|
|
|
|
|
|
/* release drm framebuffer and real buffer */
|