Commit 052ddf7b authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

fbdev: Replace fb_pgprotect() with pgprot_framebuffer()



Rename the fbdev mmap helper fb_pgprotect() to pgprot_framebuffer().
The helper sets VMA page-access flags for framebuffers in device I/O
memory.

Also clean up the helper's parameters and return value. Instead of
the VMA instance, pass the individial parameters separately: existing
page-access flags, the VMAs start and end addresses and the offset
in the underlying device memory rsp file. Return the new page-access
flags. These changes align pgprot_framebuffer() with other pgprot_()
functions.

v4:
	* fix commit message (Christophe)
v3:
	* rename fb_pgprotect() to pgprot_framebuffer() (Arnd)

Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> # m68k
Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230922080636.26762-3-tzimmermann@suse.de
parent c205a67d
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -8,17 +8,16 @@

#include <asm/page.h>

struct file;

static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
				unsigned long off)
static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
					  unsigned long vm_start, unsigned long vm_end,
					  unsigned long offset)
{
	if (efi_range_is_wc(vma->vm_start, vma->vm_end - vma->vm_start))
		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
	if (efi_range_is_wc(vm_start, vm_end - vm_start))
		return pgprot_writecombine(prot);
	else
		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
		return pgprot_noncached(prot);
}
#define fb_pgprotect fb_pgprotect
#define pgprot_framebuffer pgprot_framebuffer

static inline void fb_memcpy_fromio(void *to, const volatile void __iomem *from, size_t n)
{
+10 −9
Original line number Diff line number Diff line
@@ -5,26 +5,27 @@
#include <asm/page.h>
#include <asm/setup.h>

struct file;

static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
				unsigned long off)
static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
					  unsigned long vm_start, unsigned long vm_end,
					  unsigned long offset)
{
#ifdef CONFIG_MMU
#ifdef CONFIG_SUN3
	pgprot_val(vma->vm_page_prot) |= SUN3_PAGE_NOCACHE;
	pgprot_val(prot) |= SUN3_PAGE_NOCACHE;
#else
	if (CPU_IS_020_OR_030)
		pgprot_val(vma->vm_page_prot) |= _PAGE_NOCACHE030;
		pgprot_val(prot) |= _PAGE_NOCACHE030;
	if (CPU_IS_040_OR_060) {
		pgprot_val(vma->vm_page_prot) &= _CACHEMASK040;
		pgprot_val(prot) &= _CACHEMASK040;
		/* Use no-cache mode, serialized */
		pgprot_val(vma->vm_page_prot) |= _PAGE_NOCACHE_S;
		pgprot_val(prot) |= _PAGE_NOCACHE_S;
	}
#endif /* CONFIG_SUN3 */
#endif /* CONFIG_MMU */

	return prot;
}
#define fb_pgprotect fb_pgprotect
#define pgprot_framebuffer pgprot_framebuffer

#include <asm-generic/fb.h>

+5 −6
Original line number Diff line number Diff line
@@ -3,14 +3,13 @@

#include <asm/page.h>

struct file;

static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
				unsigned long off)
static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
					  unsigned long vm_start, unsigned long vm_end,
					  unsigned long offset)
{
	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
	return pgprot_noncached(prot);
}
#define fb_pgprotect fb_pgprotect
#define pgprot_framebuffer pgprot_framebuffer

/*
 * MIPS doesn't define __raw_ I/O macros, so the helpers
+5 −8
Original line number Diff line number Diff line
@@ -2,23 +2,20 @@
#ifndef _ASM_FB_H_
#define _ASM_FB_H_

#include <linux/fs.h>

#include <asm/page.h>

static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
				unsigned long off)
static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
					  unsigned long vm_start, unsigned long vm_end,
					  unsigned long offset)
{
	/*
	 * PowerPC's implementation of phys_mem_access_prot() does
	 * not use the file argument. Set it to NULL in preparation
	 * of later updates to the interface.
	 */
	vma->vm_page_prot = phys_mem_access_prot(NULL, PHYS_PFN(off),
						 vma->vm_end - vma->vm_start,
						 vma->vm_page_prot);
	return phys_mem_access_prot(NULL, PHYS_PFN(offset), vm_end - vm_start, prot);
}
#define fb_pgprotect fb_pgprotect
#define pgprot_framebuffer pgprot_framebuffer

#include <asm-generic/fb.h>

+9 −6
Original line number Diff line number Diff line
@@ -4,15 +4,18 @@

#include <linux/io.h>

#include <asm/page.h>

struct fb_info;
struct file;
struct vm_area_struct;

#ifdef CONFIG_SPARC32
static inline void fb_pgprotect(struct file *file, struct vm_area_struct *vma,
				unsigned long off)
{ }
#define fb_pgprotect fb_pgprotect
static inline pgprot_t pgprot_framebuffer(pgprot_t prot,
					  unsigned long vm_start, unsigned long vm_end,
					  unsigned long offset)
{
	return prot;
}
#define pgprot_framebuffer pgprot_framebuffer
#endif

int fb_is_primary_device(struct fb_info *info);
Loading