From 2685a39acfd4fa2059529d17b80c17ee1248633e Mon Sep 17 00:00:00 2001 From: Oleksandr Tymoshenko Date: Sat, 1 Oct 2016 17:43:02 +0000 Subject: [PATCH] Provide way for framebuffer driver to request mmap(2) mapping type On ARM if memattr is not overriden mmap(2) maps framebuffer memory as WBWA which means part of changes to content in userland end up in cache and appear on screen gradually as cache lines are evicted. This change adds configurable memattr that hardware fb implementation can set to get the memory mapping type it requires: - Add new flag FB_FLAG_MEMATTR that indicates that framebuffer driver overrides default memattr - Add new field fb_memattr to struct fb_info to specify requested memattr Reviewed by: ray Differential Revision: https://reviews.freebsd.org/D8064 --- sys/dev/fb/fbd.c | 2 ++ sys/sys/fbio.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sys/dev/fb/fbd.c b/sys/dev/fb/fbd.c index b7e45040f65..6110e4afd25 100644 --- a/sys/dev/fb/fbd.c +++ b/sys/dev/fb/fbd.c @@ -178,6 +178,8 @@ fb_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot, *paddr = vtophys((uint8_t *)info->fb_vbase + offset); else *paddr = info->fb_pbase + offset; + if (info->fb_flags & FB_FLAG_MEMATTR) + *memattr = info->fb_memattr; return (0); } return (EINVAL); diff --git a/sys/sys/fbio.h b/sys/sys/fbio.h index 17cd891d398..b0779061fa9 100644 --- a/sys/sys/fbio.h +++ b/sys/sys/fbio.h @@ -142,6 +142,8 @@ struct fb_info { uint32_t fb_flags; #define FB_FLAG_NOMMAP 1 /* mmap unsupported. */ #define FB_FLAG_NOWRITE 2 /* disable writes for the time being */ +#define FB_FLAG_MEMATTR 4 /* override memattr for mmap */ + vm_memattr_t fb_memattr; int fb_stride; int fb_bpp; /* bits per pixel */ uint32_t fb_cmap[16];