[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v1 15/47] [media] media: ivtv: use __arch_phys_wc_add()



From: "Luis R. Rodriguez" <mcgrof@xxxxxxxx>

Sadly this driver requires a bit of work in order
to use ioremap_wc() on the range currently used
for MTRR write-combining. We'd need to ensure two
ioremap() calls are done. Annotate this.

Cc: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
Cc: Andy Walls <awalls@xxxxxxxxxxxxxxxx>
Cc: Suresh Siddha <suresh.b.siddha@xxxxxxxxx>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Juergen Gross <jgross@xxxxxxxx>
Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
Cc: Dave Airlie <airlied@xxxxxxxxxx>
Cc: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
Cc: Antonino Daplas <adaplas@xxxxxxxxx>
Cc: Jean-Christophe Plagniol-Villard <plagnioj@xxxxxxxxxxxx>
Cc: Tomi Valkeinen <tomi.valkeinen@xxxxxx>
Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
Cc: Arnd Bergmann <arnd@xxxxxxxx>
Cc: Michael S. Tsirkin <mst@xxxxxxxxxx>
Cc: venkatesh.pallipadi@xxxxxxxxx
Cc: Stefan Bader <stefan.bader@xxxxxxxxxxxxx>
Cc: konrad.wilk@xxxxxxxxxx
Cc: ville.syrjala@xxxxxxxxxxxxxxx
Cc: david.vrabel@xxxxxxxxxx
Cc: jbeulich@xxxxxxxx
Cc: toshi.kani@xxxxxx
Cc: Roger Pau Monnà <roger.pau@xxxxxxxxxx>
Cc: linux-fbdev@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: ivtv-devel@xxxxxxxxxxxxxx
Cc: linux-media@xxxxxxxxxxxxxxx
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Signed-off-by: Luis R. Rodriguez <mcgrof@xxxxxxxx>
---
 drivers/media/pci/ivtv/ivtvfb.c | 51 +++++++++++------------------------------
 1 file changed, 14 insertions(+), 37 deletions(-)

diff --git a/drivers/media/pci/ivtv/ivtvfb.c b/drivers/media/pci/ivtv/ivtvfb.c
index 9ff1230..ceefa6f 100644
--- a/drivers/media/pci/ivtv/ivtvfb.c
+++ b/drivers/media/pci/ivtv/ivtvfb.c
@@ -44,10 +44,6 @@
 #include <linux/ivtvfb.h>
 #include <linux/slab.h>
 
-#ifdef CONFIG_MTRR
-#include <asm/mtrr.h>
-#endif
-
 #include "ivtv-driver.h"
 #include "ivtv-cards.h"
 #include "ivtv-i2c.h"
@@ -155,12 +151,11 @@ struct osd_info {
        /* Buffer size */
        u32 video_buffer_size;
 
-#ifdef CONFIG_MTRR
        /* video_base rounded down as required by hardware MTRRs */
        unsigned long fb_start_aligned_physaddr;
        /* video_base rounded up as required by hardware MTRRs */
        unsigned long fb_end_aligned_physaddr;
-#endif
+       int wc_cookie;
 
        /* Store the buffer offset */
        int set_osd_coords_x;
@@ -1099,6 +1094,8 @@ static int ivtvfb_init_vidmode(struct ivtv *itv)
 static int ivtvfb_init_io(struct ivtv *itv)
 {
        struct osd_info *oi = itv->osd_info;
+       /* Find the largest power of two that maps the whole buffer */
+       int size_shift = 31;
 
        mutex_lock(&itv->serialize_lock);
        if (ivtv_init_on_first_open(itv)) {
@@ -1132,29 +1129,16 @@ static int ivtvfb_init_io(struct ivtv *itv)
                        oi->video_pbase, oi->video_vbase,
                        oi->video_buffer_size / 1024);
 
-#ifdef CONFIG_MTRR
-       {
-               /* Find the largest power of two that maps the whole buffer */
-               int size_shift = 31;
-
-               while (!(oi->video_buffer_size & (1 << size_shift))) {
-                       size_shift--;
-               }
-               size_shift++;
-               oi->fb_start_aligned_physaddr = oi->video_pbase & ~((1 << 
size_shift) - 1);
-               oi->fb_end_aligned_physaddr = oi->video_pbase + 
oi->video_buffer_size;
-               oi->fb_end_aligned_physaddr += (1 << size_shift) - 1;
-               oi->fb_end_aligned_physaddr &= ~((1 << size_shift) - 1);
-               if (mtrr_add(oi->fb_start_aligned_physaddr,
-                       oi->fb_end_aligned_physaddr - 
oi->fb_start_aligned_physaddr,
-                            MTRR_TYPE_WRCOMB, 1) < 0) {
-                       IVTVFB_INFO("disabled mttr\n");
-                       oi->fb_start_aligned_physaddr = 0;
-                       oi->fb_end_aligned_physaddr = 0;
-               }
-       }
-#endif
-
+       while (!(oi->video_buffer_size & (1 << size_shift)))
+               size_shift--;
+       size_shift++;
+       oi->fb_start_aligned_physaddr = oi->video_pbase & ~((1 << size_shift) - 
1);
+       oi->fb_end_aligned_physaddr = oi->video_pbase + oi->video_buffer_size;
+       oi->fb_end_aligned_physaddr += (1 << size_shift) - 1;
+       oi->fb_end_aligned_physaddr &= ~((1 << size_shift) - 1);
+       oi->wc_cookie = __arch_phys_wc_add(oi->fb_start_aligned_physaddr,
+                                          oi->fb_end_aligned_physaddr -
+                                          oi->fb_start_aligned_physaddr);
        /* Blank the entire osd. */
        memset_io(oi->video_vbase, 0, oi->video_buffer_size);
 
@@ -1172,14 +1156,7 @@ static void ivtvfb_release_buffers (struct ivtv *itv)
 
        /* Release pseudo palette */
        kfree(oi->ivtvfb_info.pseudo_palette);
-
-#ifdef CONFIG_MTRR
-       if (oi->fb_end_aligned_physaddr) {
-               mtrr_del(-1, oi->fb_start_aligned_physaddr,
-                       oi->fb_end_aligned_physaddr - 
oi->fb_start_aligned_physaddr);
-       }
-#endif
-
+       arch_phys_wc_del(oi->wc_cookie);
        kfree(oi);
        itv->osd_info = NULL;
 }
-- 
2.3.2.209.gd67f9d5.dirty


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.