Thread (33 messages) 33 messages, 2 authors, 2009-05-23

Lifecycle

  1. Posted Harald Welte <HaraldWelte@viatech.com>

[PATCH 12/15] viafb: introduce wrapper for 2D engine registers

From: Harald Welte <hidden>
Date: 2009-05-20 20:49:24
Subsystem: framebuffer layer, the rest · Maintainers: Helge Deller, Linus Torvalds

From: Harald Welte <laforge@gnumonks.org>

This is required as preparation for supporting the new M1 engine of the
VX800/VX855 which has registers at permutated addresses.

Signed-off-by: Harald Welte <redacted>
---
 drivers/video/via/accel.c    |   13 +++++++++----
 drivers/video/via/accel.h    |    1 +
 drivers/video/via/viafbdev.c |   38 +++++++++++++++++---------------------
 3 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c
index 4a1183f..c3af95f 100644
--- a/drivers/video/via/accel.c
+++ b/drivers/video/via/accel.c
@@ -20,6 +20,11 @@
  */
 #include "global.h"
 
+void viafb_2d_writel(u_int32_t val, u_int32_t reg)
+{
+	writel(val, viaparinfo->io_virt + reg);
+}
+
 void viafb_init_accel(void)
 {
 	viaparinfo->fbmem_free -= CURSOR_SIZE;
@@ -213,18 +218,18 @@ void viafb_set_2d_mode(struct fb_info *info)
 		dwGEMode |= VIA_GEM_8bpp;
 		break;
 	}
-	writel(dwGEMode, viaparinfo->io_virt + VIA_REG_GEMODE);
+	viafb_2d_writel(dwGEMode, VIA_REG_GEMODE);
 
 	/* Set source and destination base */
 	base = ((void *)info->screen_base - viafb_FB_MM);
-	writel(base >> 3, viaparinfo->io_virt + VIA_REG_SRCBASE);
-	writel(base >> 3, viaparinfo->io_virt + VIA_REG_DSTBASE);
+	viafb_2d_writel(base >> 3, VIA_REG_SRCBASE);
+	viafb_2d_writel(base >> 3, VIA_REG_DSTBASE);
 
 	/* Set source and destination pitch (128bit aligned) */
 	pitch = (viaparinfo->hres * viaparinfo->bpp >> 3) >> 3;
 	pitch_reg = pitch | (pitch << 16);
 	pitch_reg |= VIA_PITCH_ENABLE;
-	writel(pitch_reg, viaparinfo->io_virt + VIA_REG_PITCH);
+	viafb_2d_writel(pitch_reg, VIA_REG_PITCH);
 }
 
 void viafb_hw_cursor_init(void)
diff --git a/drivers/video/via/accel.h b/drivers/video/via/accel.h
index bef3134..5081ac2 100644
--- a/drivers/video/via/accel.h
+++ b/drivers/video/via/accel.h
@@ -159,6 +159,7 @@
 
 #define MAXLOOP                 0xFFFFFF
 
+void viafb_2d_writel(u_int32_t val, u_int32_t reg);
 void viafb_init_accel(void);
 void viafb_init_2d_engine(void);
 void viafb_set_2d_mode(struct fb_info *info);
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index af8acfe..859827b 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -899,16 +899,14 @@ static void viafb_fillrect(struct fb_info *info,
 	viafb_set_2d_mode(info);
 
 	/* BitBlt Destination Address */
-	writel(((rect->dy << 16) | rect->dx),
-		viaparinfo->io_virt + VIA_REG_DSTPOS);
+	viafb_2d_writel(((rect->dy << 16) | rect->dx), VIA_REG_DSTPOS);
 	/* Dimension: width & height */
-	writel((((rect->height - 1) << 16) | (rect->width - 1)),
-		viaparinfo->io_virt + VIA_REG_DIMENSION);
+	viafb_2d_writel((((rect->height - 1) << 16) | (rect->width - 1)),
+			VIA_REG_DIMENSION);
 	/* Forground color or Destination color */
-	writel(col, viaparinfo->io_virt + VIA_REG_FGCOLOR);
+	viafb_2d_writel(col, VIA_REG_FGCOLOR);
 	/* GE Command */
-	writel((0x01 | 0x2000 | (rop << 24)),
-		viaparinfo->io_virt + VIA_REG_GECMD);
+	viafb_2d_writel((0x01 | 0x2000 | (rop << 24)), VIA_REG_GECMD);
 
 }
 
@@ -943,15 +941,14 @@ static void viafb_copyarea(struct fb_info *info,
 	viafb_set_2d_mode(info);
 
 	/* BitBlt Source Address */
-	writel(((sy << 16) | sx), viaparinfo->io_virt + VIA_REG_SRCPOS);
+	viafb_2d_writel(((sy << 16) | sx), VIA_REG_SRCPOS);
 	/* BitBlt Destination Address */
-	writel(((dy << 16) | dx), viaparinfo->io_virt + VIA_REG_DSTPOS);
+	viafb_2d_writel(((dy << 16) | dx), VIA_REG_DSTPOS);
 	/* Dimension: width & height */
-	writel((((area->height - 1) << 16) | (area->width - 1)),
-		   viaparinfo->io_virt + VIA_REG_DIMENSION);
+	viafb_2d_writel((((area->height - 1) << 16) | (area->width - 1)),
+			VIA_REG_DIMENSION);
 	/* GE Command */
-	writel((0x01 | direction | (0xCC << 24)),
-		viaparinfo->io_virt + VIA_REG_GECMD);
+	viafb_2d_writel((0x01 | direction | (0xCC << 24)), VIA_REG_GECMD);
 
 }
 
@@ -987,19 +984,18 @@ static void viafb_imageblit(struct fb_info *info,
 	viafb_set_2d_mode(info);
 
 	/* BitBlt Source Address */
-	writel(0x0, viaparinfo->io_virt + VIA_REG_SRCPOS);
+	viafb_2d_writel(0x0, VIA_REG_SRCPOS);
 	/* BitBlt Destination Address */
-	writel(((image->dy << 16) | image->dx),
-		viaparinfo->io_virt + VIA_REG_DSTPOS);
+	viafb_2d_writel(((image->dy << 16) | image->dx), VIA_REG_DSTPOS);
 	/* Dimension: width & height */
-	writel((((image->height - 1) << 16) | (image->width - 1)),
-		   viaparinfo->io_virt + VIA_REG_DIMENSION);
+	viafb_2d_writel((((image->height - 1) << 16) | (image->width - 1)),
+			VIA_REG_DIMENSION);
 	/* fb color */
-	writel(fg_col, viaparinfo->io_virt + VIA_REG_FGCOLOR);
+	viafb_2d_writel(fg_col, VIA_REG_FGCOLOR);
 	/* bg color */
-	writel(bg_col, viaparinfo->io_virt + VIA_REG_BGCOLOR);
+	viafb_2d_writel(bg_col, VIA_REG_BGCOLOR);
 	/* GE Command */
-	writel(0xCC020142, viaparinfo->io_virt + VIA_REG_GECMD);
+	viafb_2d_writel(0xCC020142, VIA_REG_GECMD);
 
 	for (i = 0; i < size / 4; i++) {
 		writel(*udata, viaparinfo->io_virt + VIA_MMIO_BLTBASE);
-- 
1.6.2.4


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help