Commit da6eb399 authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

drm/omapdrm: Use GEM mmap for fbdev emulation



The fbdev emulation currently uses fbdev's default mmap code, which
has been written for I/O memory. Provide an mmap that uses GEM's mmap
infrastructure.

Utilize fine-grained fbdev macros to initialize struct fb_ops. The
macros set the read/write and the draw callbacks for DMA memory. Set
the fb_mmap callback to omapdrm's new mmap helper. Also select the
correct Kconfig token for fbdev's DMA helpers. Note that the DMA
helpers are the same as for system memory.

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230707083422.18691-10-tzimmermann@suse.de
parent 413b7574
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ config DRM_OMAP
	depends on DRM && OF
	depends on ARCH_OMAP2PLUS
	select DRM_KMS_HELPER
	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
	select FB_DMA_HELPERS if DRM_FBDEV_EMULATION
	select VIDEOMODE_HELPERS
	select HDMI
	default n
+13 −2
Original line number Diff line number Diff line
@@ -76,6 +76,15 @@ static int omap_fbdev_pan_display(struct fb_var_screeninfo *var,
	return drm_fb_helper_pan_display(var, fbi);
}

static int omap_fbdev_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
{
	struct drm_fb_helper *helper = info->par;
	struct drm_framebuffer *fb = helper->fb;
	struct drm_gem_object *bo = drm_gem_fb_get_obj(fb, 0);

	return drm_gem_mmap_obj(bo, omap_gem_mmap_size(bo), vma);
}

static void omap_fbdev_fb_destroy(struct fb_info *info)
{
	struct drm_fb_helper *helper = info->par;
@@ -97,13 +106,15 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)

static const struct fb_ops omap_fb_ops = {
	.owner = THIS_MODULE,
	FB_DEFAULT_SYS_OPS,
	__FB_DEFAULT_DMA_OPS_RDWR,
	.fb_check_var	= drm_fb_helper_check_var,
	.fb_set_par	= drm_fb_helper_set_par,
	.fb_setcmap	= drm_fb_helper_setcmap,
	.fb_blank	= drm_fb_helper_blank,
	.fb_pan_display = omap_fbdev_pan_display,
	__FB_DEFAULT_DMA_OPS_DRAW,
	.fb_ioctl	= drm_fb_helper_ioctl,
	.fb_mmap	= omap_fbdev_fb_mmap,
	.fb_destroy	= omap_fbdev_fb_destroy,
};