Re: [PATCH v3 05/17] video: fbdev: matrox: use arch_phys_wc_add() and ioremap_wc()

From: Julia Lawall
Date: Thu Apr 23 2015 - 04:20:28 EST


> @ mtrr_found @
> expression index, base, size;
> @@
>
> -index = mtrr_add(base, size, MTRR_TYPE_WRCOMB, 1);
> +index = arch_phys_wc_add(base, size);
>
> @ mtrr_rm depends on mtrr_found @
> expression mtrr_found.index, mtrr_found.base, mtrr_found.size;
> @@
>
> -mtrr_del(index, base, size);
> +arch_phys_wc_del(index);
>
> @ mtrr_rm_zero_arg depends on mtrr_found @
> expression mtrr_found.index;
> @@
>
> -mtrr_del(index, 0, 0);
> +arch_phys_wc_del(index);
>
> @ mtrr_rm_fb_info depends on mtrr_found @
> struct fb_info *info;

Is this specific to the fb_info type?

julia


> expression mtrr_found.index;
> @@
>
> -mtrr_del(index, info->fix.smem_start, info->fix.smem_len);
> +arch_phys_wc_del(index);
>
> @ ioremap_replace_nocache depends on mtrr_found @
> struct fb_info *info;
> expression base, size;
> @@
>
> -info->screen_base = ioremap_nocache(base, size);
> +info->screen_base = ioremap_wc(base, size);
>
> @ ioremap_replace_default depends on mtrr_found @
> struct fb_info *info;
> expression base, size;
> @@
>
> -info->screen_base = ioremap(base, size);
> +info->screen_base = ioremap_wc(base, size);
>
> Generated-by: Coccinelle SmPL
>
> Cc: Jean-Christophe Plagniol-Villard <plagnioj@xxxxxxxxxxxx>
> Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx>
> Cc: Rob Clark <robdclark@xxxxxxxxx>
> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
> Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> Cc: Julia Lawall <Julia.Lawall@xxxxxxx>
> Cc: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> Cc: Suresh Siddha <sbsiddha@xxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Juergen Gross <jgross@xxxxxxxx>
> Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
> Cc: Dave Airlie <airlied@xxxxxxxxxx>
> Cc: Antonino Daplas <adaplas@xxxxxxxxx>
> Cc: linux-fbdev@xxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxx>
> ---
> drivers/video/fbdev/matrox/matroxfb_base.c | 36 +++++++++++-------------------
> drivers/video/fbdev/matrox/matroxfb_base.h | 27 +---------------------
> 2 files changed, 14 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/video/fbdev/matrox/matroxfb_base.c b/drivers/video/fbdev/matrox/matroxfb_base.c
> index 62539ca..2f70365 100644
> --- a/drivers/video/fbdev/matrox/matroxfb_base.c
> +++ b/drivers/video/fbdev/matrox/matroxfb_base.c
> @@ -370,12 +370,9 @@ static void matroxfb_remove(struct matrox_fb_info *minfo, int dummy)
> matroxfb_unregister_device(minfo);
> unregister_framebuffer(&minfo->fbcon);
> matroxfb_g450_shutdown(minfo);
> -#ifdef CONFIG_MTRR
> - if (minfo->mtrr.vram_valid)
> - mtrr_del(minfo->mtrr.vram, minfo->video.base, minfo->video.len);
> -#endif
> - mga_iounmap(minfo->mmio.vbase);
> - mga_iounmap(minfo->video.vbase);
> + arch_phys_wc_del(minfo->wc_cookie);
> + iounmap(minfo->mmio.vbase.vaddr);
> + iounmap(minfo->video.vbase.vaddr);
> release_mem_region(minfo->video.base, minfo->video.len_maximum);
> release_mem_region(minfo->mmio.base, 16384);
> kfree(minfo);
> @@ -1256,9 +1253,7 @@ static int nobios; /* "matroxfb:nobios" */
> static int noinit = 1; /* "matroxfb:init" */
> static int inverse; /* "matroxfb:inverse" */
> static int sgram; /* "matroxfb:sgram" */
> -#ifdef CONFIG_MTRR
> static int mtrr = 1; /* "matroxfb:nomtrr" */
> -#endif
> static int grayscale; /* "matroxfb:grayscale" */
> static int dev = -1; /* "matroxfb:dev:xxxxx" */
> static unsigned int vesa = ~0; /* "matroxfb:vesa:xxxxx" */
> @@ -1717,14 +1712,17 @@ static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
> if (mem && (mem < memsize))
> memsize = mem;
> err = -ENOMEM;
> - if (mga_ioremap(ctrlptr_phys, 16384, MGA_IOREMAP_MMIO, &minfo->mmio.vbase)) {
> +
> + minfo->mmio.vbase.vaddr = ioremap_nocache(ctrlptr_phys, 16384);
> + if (!minfo->mmio.vbase.vaddr) {
> printk(KERN_ERR "matroxfb: cannot ioremap(%lX, 16384), matroxfb disabled\n", ctrlptr_phys);
> goto failVideoMR;
> }
> minfo->mmio.base = ctrlptr_phys;
> minfo->mmio.len = 16384;
> minfo->video.base = video_base_phys;
> - if (mga_ioremap(video_base_phys, memsize, MGA_IOREMAP_FB, &minfo->video.vbase)) {
> + minfo->video.vbase.vaddr = ioremap_wc(video_base_phys, memsize);
> + if (!minfo->video.vbase.vaddr) {
> printk(KERN_ERR "matroxfb: cannot ioremap(%lX, %d), matroxfb disabled\n",
> video_base_phys, memsize);
> goto failCtrlIO;
> @@ -1772,13 +1770,9 @@ static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
> minfo->video.len_usable = minfo->video.len;
> if (minfo->video.len_usable > b->base->maxdisplayable)
> minfo->video.len_usable = b->base->maxdisplayable;
> -#ifdef CONFIG_MTRR
> - if (mtrr) {
> - minfo->mtrr.vram = mtrr_add(video_base_phys, minfo->video.len, MTRR_TYPE_WRCOMB, 1);
> - minfo->mtrr.vram_valid = 1;
> - printk(KERN_INFO "matroxfb: MTRR's turned on\n");
> - }
> -#endif /* CONFIG_MTRR */
> + if (mtrr)
> + minfo->wc_cookie = arch_phys_wc_add(video_base_phys,
> + minfo->video.len);
>
> if (!minfo->devflags.novga)
> request_region(0x3C0, 32, "matrox");
> @@ -1947,9 +1941,9 @@ static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
> return 0;
> failVideoIO:;
> matroxfb_g450_shutdown(minfo);
> - mga_iounmap(minfo->video.vbase);
> + iounmap(minfo->video.vbase.vaddr);
> failCtrlIO:;
> - mga_iounmap(minfo->mmio.vbase);
> + iounmap(minfo->mmio.vbase.vaddr);
> failVideoMR:;
> release_mem_region(video_base_phys, minfo->video.len_maximum);
> failCtrlMR:;
> @@ -2443,10 +2437,8 @@ static int __init matroxfb_setup(char *options) {
> nobios = !value;
> else if (!strcmp(this_opt, "init"))
> noinit = !value;
> -#ifdef CONFIG_MTRR
> else if (!strcmp(this_opt, "mtrr"))
> mtrr = value;
> -#endif
> else if (!strcmp(this_opt, "inv24"))
> inv24 = value;
> else if (!strcmp(this_opt, "cross4MB"))
> @@ -2515,10 +2507,8 @@ module_param(noinit, int, 0);
> MODULE_PARM_DESC(noinit, "Disables W/SG/SD-RAM and bus interface initialization (0 or 1=do not initialize) (default=0)");
> module_param(memtype, int, 0);
> MODULE_PARM_DESC(memtype, "Memory type for G200/G400 (see Documentation/fb/matroxfb.txt for explanation) (default=3 for G200, 0 for G400)");
> -#ifdef CONFIG_MTRR
> module_param(mtrr, int, 0);
> MODULE_PARM_DESC(mtrr, "This speeds up video memory accesses (0=disabled or 1) (default=1)");
> -#endif
> module_param(sgram, int, 0);
> MODULE_PARM_DESC(sgram, "Indicates that G100/G200/G400 has SGRAM memory (0=SDRAM, 1=SGRAM) (default=0)");
> module_param(inv24, int, 0);
> diff --git a/drivers/video/fbdev/matrox/matroxfb_base.h b/drivers/video/fbdev/matrox/matroxfb_base.h
> index 89a8a89a..09b02cd 100644
> --- a/drivers/video/fbdev/matrox/matroxfb_base.h
> +++ b/drivers/video/fbdev/matrox/matroxfb_base.h
> @@ -44,9 +44,6 @@
>
> #include <asm/io.h>
> #include <asm/unaligned.h>
> -#ifdef CONFIG_MTRR
> -#include <asm/mtrr.h>
> -#endif
>
> #if defined(CONFIG_PPC_PMAC)
> #include <asm/prom.h>
> @@ -187,23 +184,6 @@ static inline void __iomem* vaddr_va(vaddr_t va) {
> return va.vaddr;
> }
>
> -#define MGA_IOREMAP_NORMAL 0
> -#define MGA_IOREMAP_NOCACHE 1
> -
> -#define MGA_IOREMAP_FB MGA_IOREMAP_NOCACHE
> -#define MGA_IOREMAP_MMIO MGA_IOREMAP_NOCACHE
> -static inline int mga_ioremap(unsigned long phys, unsigned long size, int flags, vaddr_t* virt) {
> - if (flags & MGA_IOREMAP_NOCACHE)
> - virt->vaddr = ioremap_nocache(phys, size);
> - else
> - virt->vaddr = ioremap(phys, size);
> - return (virt->vaddr == NULL); /* 0, !0... 0, error_code in future */
> -}
> -
> -static inline void mga_iounmap(vaddr_t va) {
> - iounmap(va.vaddr);
> -}
> -
> struct my_timming {
> unsigned int pixclock;
> int mnp;
> @@ -449,12 +429,7 @@ struct matrox_fb_info {
> int plnwt;
> int srcorg;
> } capable;
> -#ifdef CONFIG_MTRR
> - struct {
> - int vram;
> - int vram_valid;
> - } mtrr;
> -#endif
> + int wc_cookie;
> struct {
> int precise_width;
> int mga_24bpp_fix;
> --
> 2.3.2.209.gd67f9d5.dirty
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/