- struct exynos_drm_buffer_info buffer_info;
- unsigned int actual_w = pos->crtc_w;
- unsigned int actual_h = pos->crtc_h;
- unsigned int hw_w;
- unsigned int hw_h;
-
- /* update buffer address of framebuffer. */
- exynos_drm_fb_update_buf_off(fb, pos->fb_x, pos->fb_y, &buffer_info);
- overlay->paddr = buffer_info.paddr;
- overlay->vaddr = buffer_info.vaddr;
-
- hw_w = mode->hdisplay - pos->base_x;
- hw_h = mode->vdisplay - pos->base_y;
-
- if (actual_w > hw_w)
- actual_w = hw_w;
- if (actual_h > hw_h)
- actual_h = hw_h;
-
- overlay->offset_x = pos->base_x;
- overlay->offset_y = pos->base_y;
- overlay->width = actual_w;
- overlay->height = actual_h;
+ struct exynos_drm_buf_entry *entry;
+ unsigned int actual_w;
+ unsigned int actual_h;
+
+ entry = exynos_drm_fb_get_buf(fb);
+ if (!entry) {
+ DRM_LOG_KMS("entry is null.\n");
+ return -EFAULT;
+ }
+
+ overlay->paddr = entry->paddr;
+ overlay->vaddr = entry->vaddr;
+
+ DRM_DEBUG_KMS("vaddr = 0x%lx, paddr = 0x%lx\n",
+ (unsigned long)overlay->vaddr,
+ (unsigned long)overlay->paddr);
+
+ actual_w = min((mode->hdisplay - pos->crtc_x), pos->crtc_w);
+ actual_h = min((mode->vdisplay - pos->crtc_y), pos->crtc_h);
+
+ /* set drm framebuffer data. */
+ overlay->fb_x = pos->fb_x;
+ overlay->fb_y = pos->fb_y;
+ overlay->fb_width = fb->width;
+ overlay->fb_height = fb->height;