video: fbdev: vesafb: only support MTRR_TYPE_WRCOMB
authorLuis R. Rodriguez <[email protected]>
Thu, 4 Jun 2015 16:44:46 +0000 (09:44 -0700)
committerTomi Valkeinen <[email protected]>
Tue, 16 Jun 2015 06:42:11 +0000 (09:42 +0300)
No other video driver uses MTRR types except for MTRR_TYPE_WRCOMB,
the other MTRR types were implemented and supported here but with
no real good reason. The ioremap() APIs are architecture agnostic and
at least on x86 PAT is a new design that extends MTRRs and
can replace it in a much cleaner way, where so long as the
proper ioremap_wc() or variant API is used the right thing will
be done behind the scenes. This is the only driver left using the
other MTRR types -- and since there is no good reason for it now
rip them out.

Cc: Toshi Kani <[email protected]>
Cc: Suresh Siddha <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Juergen Gross <[email protected]>
Cc: Daniel Vetter <[email protected]>
Cc: Andy Lutomirski <[email protected]>
Cc: Dave Airlie <[email protected]>
Cc: Antonino Daplas <[email protected]>
Cc: Jean-Christophe Plagniol-Villard <[email protected]>
Cc: Tomi Valkeinen <[email protected]>
Cc: Rob Clark <[email protected]>
Cc: Jingoo Han <[email protected]>
Cc: Wolfram Sang <[email protected]>
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Luis R. Rodriguez <[email protected]>
Signed-off-by: Tomi Valkeinen <[email protected]>
drivers/video/fbdev/vesafb.c

index d79a0ac49fc7d17449b358174464847cdbc5b4a0..191156bdf63846908c3097c03ef2c7ae977d292d 100644 (file)
@@ -404,60 +404,30 @@ static int vesafb_probe(struct platform_device *dev)
         * region already (FIXME) */
        request_region(0x3c0, 32, "vesafb");
 
+       if (mtrr == 3) {
 #ifdef CONFIG_MTRR
-       if (mtrr) {
                unsigned int temp_size = size_total;
-               unsigned int type = 0;
+               int rc;
 
-               switch (mtrr) {
-               case 1:
-                       type = MTRR_TYPE_UNCACHABLE;
-                       break;
-               case 2:
-                       type = MTRR_TYPE_WRBACK;
-                       break;
-               case 3:
-                       type = MTRR_TYPE_WRCOMB;
-                       break;
-               case 4:
-                       type = MTRR_TYPE_WRTHROUGH;
-                       break;
-               default:
-                       type = 0;
-                       break;
-               }
-
-               if (type) {
-                       int rc;
-
-                       /* Find the largest power-of-two */
-                       temp_size = roundup_pow_of_two(temp_size);
+               /* Find the largest power-of-two */
+               temp_size = roundup_pow_of_two(temp_size);
 
-                       /* Try and find a power of two to add */
-                       do {
-                               rc = mtrr_add(vesafb_fix.smem_start, temp_size,
-                                             type, 1);
-                               temp_size >>= 1;
-                       } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
-               }
-       }
+               /* Try and find a power of two to add */
+               do {
+                       rc = mtrr_add(vesafb_fix.smem_start, temp_size,
+                                     MTRR_TYPE_WRCOMB, 1);
+                       temp_size >>= 1;
+               } while (temp_size >= PAGE_SIZE && rc == -EINVAL);
 #endif
-       
-       switch (mtrr) {
-       case 1: /* uncachable */
-               info->screen_base = ioremap_nocache(vesafb_fix.smem_start, vesafb_fix.smem_len);
-               break;
-       case 2: /* write-back */
-               info->screen_base = ioremap_cache(vesafb_fix.smem_start, vesafb_fix.smem_len);
-               break;
-       case 3: /* write-combining */
                info->screen_base = ioremap_wc(vesafb_fix.smem_start, vesafb_fix.smem_len);
-               break;
-       case 4: /* write-through */
-       default:
+       } else {
+#ifdef CONFIG_MTRR
+               if (mtrr && mtrr != 3)
+                       WARN_ONCE(1, "Only MTRR_TYPE_WRCOMB (3) make sense\n");
+#endif
                info->screen_base = ioremap(vesafb_fix.smem_start, vesafb_fix.smem_len);
-               break;
        }
+
        if (!info->screen_base) {
                printk(KERN_ERR
                       "vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n",