diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c
index 90f6b8563d2b8fe8cc23a661f49176263eb1f844..c2a0e5a8043421471efb1c04073650c37fdd37cc 100644
--- a/drivers/video/cfbcopyarea.c
+++ b/drivers/video/cfbcopyarea.c
@@ -65,14 +65,14 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 			// Single word
 			if (last)
 				first &= last;
-			FB_WRITEL((*src & first) | (FB_READL(dst) & ~first),
+			FB_WRITEL((FB_READL(src) & first) | (FB_READL(dst) & ~first),
 				  dst);
 		} else {
 			// Multiple destination words
 			// Leading bits
 			if (first) {
 				
-				FB_WRITEL((*src & first) | (FB_READL(dst) & 
+				FB_WRITEL((FB_READL(src) & first) | (FB_READL(dst) & 
 							    ~first), dst);
 				dst++;
 				src++;
@@ -82,21 +82,21 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 			// Main chunk
 			n /= BITS_PER_LONG;
 			while (n >= 8) {
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
-				FB_WRITEL(*src++, dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
 				n -= 8;
 			}
 			while (n--)
-				FB_WRITEL(*src++, dst++);
+				FB_WRITEL(FB_READL(src++), dst++);
 			// Trailing bits
 			if (last)
-				FB_WRITEL((*src & last) | (FB_READL(dst) & 
+				FB_WRITEL((FB_READL(src) & last) | (FB_READL(dst) & 
 							   ~last), dst);
 		}
 	} else {
@@ -111,22 +111,22 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 				first &= last;
 			if (shift > 0) {
 				// Single source word
-				FB_WRITEL(((*src >> right) & first) | 
+				FB_WRITEL(((FB_READL(src) >> right) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			} else if (src_idx+n <= BITS_PER_LONG) {
 				// Single source word
-				FB_WRITEL(((*src << left) & first) | 
+				FB_WRITEL(((FB_READL(src) << left) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			} else {
 				// 2 source words
-				d0 = *src++;
-				d1 = *src;
+				d0 = FB_READL(src++);
+				d1 = FB_READL(src);
 				FB_WRITEL(((d0<<left | d1>>right) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			}
 		} else {
 			// Multiple destination words
-			d0 = *src++;
+			d0 = FB_READL(src++);
 			// Leading bits
 			if (shift > 0) {
 				// Single source word
@@ -136,7 +136,7 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 				n -= BITS_PER_LONG-dst_idx;
 			} else {
 				// 2 source words
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(((d0<<left | d1>>right) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 				d0 = d1;
@@ -148,22 +148,22 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 			m = n % BITS_PER_LONG;
 			n /= BITS_PER_LONG;
 			while (n >= 4) {
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(d0 << left | d1 >> right, dst++);
 				d0 = d1;
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(d0 << left | d1 >> right, dst++);
 				d0 = d1;
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(d0 << left | d1 >> right, dst++);
 				d0 = d1;
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(d0 << left | d1 >> right, dst++);
 				d0 = d1;
 				n -= 4;
 			}
 			while (n--) {
-				d1 = *src++;
+				d1 = FB_READL(src++);
 				FB_WRITEL(d0 << left | d1 >> right, dst++);
 				d0 = d1;
 			}
@@ -177,7 +177,7 @@ static void bitcpy(unsigned long *dst, int dst_idx, const unsigned long *src,
 						  dst);
 				} else {
 					// 2 source words
-					d1 = *src;
+					d1 = FB_READL(src);
 					FB_WRITEL(((d0<<left | d1>>right) & 
 						   last) | (FB_READL(dst) & 
 							    ~last), dst);
@@ -220,13 +220,13 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 			// Single word
 			if (last)
 				first &= last;
-			FB_WRITEL((*src & first) | (FB_READL(dst) & ~first), 
+			FB_WRITEL((FB_READL(src) & first) | (FB_READL(dst) & ~first), 
 				  dst);
 		} else {
 			// Multiple destination words
 			// Leading bits
 			if (first) {
-				FB_WRITEL((*src & first) | (FB_READL(dst) & 
+				FB_WRITEL((FB_READL(src) & first) | (FB_READL(dst) & 
 							    ~first), dst);
 				dst--;
 				src--;
@@ -236,22 +236,22 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 			// Main chunk
 			n /= BITS_PER_LONG;
 			while (n >= 8) {
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
-				FB_WRITEL(*src--, dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
 				n -= 8;
 			}
 			while (n--)
-				FB_WRITEL(*src--, dst--);
+				FB_WRITEL(FB_READL(src--), dst--);
 			
 			// Trailing bits
 			if (last)
-				FB_WRITEL((*src & last) | (FB_READL(dst) & 
+				FB_WRITEL((FB_READL(src) & last) | (FB_READL(dst) & 
 							   ~last), dst);
 		}
 	} else {
@@ -266,22 +266,22 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 				first &= last;
 			if (shift < 0) {
 				// Single source word
-				FB_WRITEL((*src << left & first) | 
+				FB_WRITEL((FB_READL(src) << left & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			} else if (1+(unsigned long)src_idx >= n) {
 				// Single source word
-				FB_WRITEL(((*src >> right) & first) | 
+				FB_WRITEL(((FB_READL(src) >> right) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			} else {
 				// 2 source words
-				d0 = *src--;
-				d1 = *src;
+				d0 = FB_READL(src--);
+				d1 = FB_READL(src);
 				FB_WRITEL(((d0>>right | d1<<left) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 			}
 		} else {
 			// Multiple destination words
-			d0 = *src--;
+			d0 = FB_READL(src--);
 			// Leading bits
 			if (shift < 0) {
 				// Single source word
@@ -291,7 +291,7 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 				n -= dst_idx+1;
 			} else {
 				// 2 source words
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(((d0>>right | d1<<left) & first) | 
 					  (FB_READL(dst) & ~first), dst);
 				d0 = d1;
@@ -303,22 +303,22 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 			m = n % BITS_PER_LONG;
 			n /= BITS_PER_LONG;
 			while (n >= 4) {
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(d0 >> right | d1 << left, dst--);
 				d0 = d1;
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(d0 >> right | d1 << left, dst--);
 				d0 = d1;
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(d0 >> right | d1 << left, dst--);
 				d0 = d1;
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(d0 >> right | d1 << left, dst--);
 				d0 = d1;
 				n -= 4;
 			}
 			while (n--) {
-				d1 = *src--;
+				d1 = FB_READL(src--);
 				FB_WRITEL(d0 >> right | d1 << left, dst--);
 				d0 = d1;
 			}
@@ -332,7 +332,7 @@ static void bitcpy_rev(unsigned long *dst, int dst_idx,
 						  dst);
 				} else {
 					// 2 source words
-					d1 = *src;
+					d1 = FB_READL(src);
 					FB_WRITEL(((d0>>right | d1<<left) & 
 						   last) | (FB_READL(dst) & 
 							    ~last), dst);
@@ -410,8 +410,8 @@ void cfb_copyarea(struct fb_info *p, struct fb_copyarea *area)
 			dst_idx &= (BYTES_PER_LONG-1);
 			src += src_idx >> SHIFT_PER_LONG;
 			src_idx &= (BYTES_PER_LONG-1);
-			bitcpy_rev((unsigned long*)dst, dst_idx, 
-				   (unsigned long *)src, src_idx, 
+			bitcpy_rev(dst, dst_idx,
+				   src, src_idx, 
 				   area->width*p->var.bits_per_pixel);
 		}	
 	} else {
@@ -420,8 +420,8 @@ void cfb_copyarea(struct fb_info *p, struct fb_copyarea *area)
 			dst_idx &= (BYTES_PER_LONG-1);
 			src += src_idx >> SHIFT_PER_LONG;
 			src_idx &= (BYTES_PER_LONG-1);
-			bitcpy((unsigned long*)dst, dst_idx, 
-			       (unsigned long *)src, src_idx, 
+			bitcpy(dst, dst_idx, 
+			       src, src_idx, 
 			       area->width*p->var.bits_per_pixel);
 			dst_idx += next_line*8;
 			src_idx += next_line*8;