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
This commit is contained in:
Oleksandr Tymoshenko 2016-10-01 17:43:02 +00:00
parent 734bfbc5b0
commit 2685a39acf
2 changed files with 4 additions and 0 deletions

View file

@ -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);

View file

@ -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];