* [PATCH] Radeon 2D Acceleration for 2.6
@ 2004-01-20 14:44 random
2004-01-20 21:40 ` Benjamin Herrenschmidt
2004-01-20 22:47 ` Benjamin Herrenschmidt
0 siblings, 2 replies; 7+ messages in thread
From: random @ 2004-01-20 14:44 UTC (permalink / raw)
To: linux-fbdev-devel; +Cc: benh
[-- Attachment #1: Type: TEXT/PLAIN, Size: 683 bytes --]
Included are copyarea() and fillrect() for Radeon. It is based on BenH's
new driver in drivers/video/aty, and it works on my PowerBook.
Please test.
To make this work, I've had to tell radeonfb.c to expect to always run
accelerated. It was checking if the FB_ACCELF_TEXT bit was set in the var
passed in to enable acceleration, and it never was; consequently, it
never "ran accelerated" meaning it never called radeon_engine_init() and
such.
Also, this is my first experience with BitKeeper, so let me know if I've
screwed something up there (and anywhere else for that matter).
-David Eger
(ps, i'm not on linux-fbdev-devel so if you reply,
please forward a copy to me)
[-- Attachment #2: Type: TEXT/PLAIN, Size: 7202 bytes --]
# User: eger
# Host: rosencrantz.pok.ibm.com
# Root: /usr/src/linux-2.6-benh-work
# Patch vers: 1.3
# Patch type: REGULAR
== ChangeSet ==
torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864
benh@kernel.crashing.org|ChangeSet|20040109135753|20972
D 1.1319 04/01/20 15:07:51+01:00 eger@rosencrantz.pok.ibm.com +3 -0
B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864
C
c Added 2D-acceleration support for radeonfb with copyarea() and fillrect()
K 22174
P ChangeSet
------------------------------------------------
0a0
> patch@athlon.transmeta.com|drivers/video/radeon.h|20020205201335|45853|de7a7433ce71623f eger@rosencrantz.pok.ibm.com|include/video/radeon.h|20040120140412|50553
> torvalds@athlon.transmeta.com|BitKeeper/etc/ignore|20020205173056|17751|fa71c5ed300a3cfc eger@rosencrantz.pok.ibm.com|BitKeeper/etc/ignore|20040120140412|57764
> benh@kernel.crashing.org|drivers/video/aty/radeon_base.c|20030907210758|08926|7b0faecdfcf8e4ae eger@rosencrantz.pok.ibm.com|drivers/video/aty/radeon_base.c|20040120140412|53176
== drivers/video/aty/radeon_base.c ==
benh@kernel.crashing.org|drivers/video/aty/radeon_base.c|20030907210758|08926|7b0faecdfcf8e4ae
benh@kernel.crashing.org|drivers/video/aty/radeon_base.c|20040104002346|65106
D 1.23 04/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +123 -24
B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864
C
c Added 2D-acceleration support for radeonfb with copyarea() and fillrect()
K 53176
O -rw-rw-r--
P drivers/video/aty/radeon_base.c
------------------------------------------------
I853 1
\
I859 1
OUTREG(DEFAULT_SC_TOP_LEFT, 0);
D897 1
I897 1
int accel = 1;
D1528 1
I1528 1
int accel = 1;
I1805 92
/* ------------ Accelerated Functions --------------------- */
/* the accelerated functions here are patterned after the
* "ACCEL_MMIO" ifdef branches in XFree86 --dte */
void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
const struct fb_fillrect *region)
{
radeon_fifo_wait(4);
OUTREG(DP_GUI_MASTER_CNTL,
rinfo->dp_gui_master_cntl /* contains, like GMC_DST_32BPP */
| GMC_BRUSH_SOLID_COLOR
| ROP3_P);
OUTREG(DP_BRUSH_FRGD_CLR, region->color);
OUTREG(DP_WRITE_MSK, 0xffffffff);
OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
\
radeon_fifo_wait(2);
OUTREG(DST_Y_X, (region->dy << 16) | region->dx);
OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height);
radeon_engine_idle ();
}
\
void radeonfb_fillrect(struct fb_info *info,
const struct fb_fillrect *region)
{
struct radeonfb_info *rinfo = (struct radeonfb_info *)info;
struct fb_fillrect modded;
int vxres, vyres;
vxres = info->var.xres;
vyres = info->var.yres;
\
memcpy(&modded, region, sizeof(struct fb_fillrect));
\
if(!modded.width || !modded.height ||
modded.dx >= vxres || modded.dy >= vyres)
return;
if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx;
if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
\
radeonfb_prim_fillrect(rinfo, &modded);
}
\
void radeonfb_prim_copyarea(struct radeonfb_info *rinfo,
const struct fb_copyarea *area)
{
radeon_fifo_wait(3);
OUTREG(DP_GUI_MASTER_CNTL,
rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */
| GMC_SRC_DSTCOLOR
| ROP3_S
| DP_SRC_RECT );
OUTREG(DP_WRITE_MSK, 0xffffffff);
OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
\
radeon_fifo_wait(3);
OUTREG(SRC_Y_X, (area->sy << 16) | area->sx);
OUTREG(DST_Y_X, (area->dy << 16) | area->dx);
OUTREG(DST_HEIGHT_WIDTH, (area->height << 16) | area->width);
radeon_engine_idle ();
}
\
\
void radeonfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
{
struct radeonfb_info *rinfo = (struct radeonfb_info *)info;
struct fb_copyarea modded;
u32 vxres, vyres;
modded.sx = area->sx;
modded.sy = area->sy;
modded.dx = area->dx;
modded.dy = area->dy;
modded.width = area->width;
modded.height = area->height;
vxres = info->var.xres;
vyres = info->var.yres;
\
if(!modded.width || !modded.height ||
modded.sx >= vxres || modded.sy >= vyres ||
modded.dx >= vxres || modded.dy >= vyres)
return;
if(modded.sx + modded.width > vxres) modded.width = vxres - modded.sx;
if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx;
if(modded.sy + modded.height > vyres) modded.height = vyres - modded.sy;
if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
radeonfb_prim_copyarea(rinfo, &modded);
}
\
D1809 8
I1816 7
.owner = THIS_MODULE,
.fb_check_var = radeonfb_check_var,
.fb_set_par = radeonfb_set_par,
.fb_setcolreg = radeonfb_setcolreg,
.fb_pan_display = radeonfb_pan_display,
.fb_blank = radeonfb_blank,
.fb_ioctl = radeonfb_ioctl,
D1819 3
I1821 12
.fb_imageblit = cfb_imageblit,
.fb_cursor = soft_cursor,
};
\
static struct fb_ops radeonfb_noaccel_ops = {
.owner = THIS_MODULE,
.fb_check_var = radeonfb_check_var,
.fb_set_par = radeonfb_set_par,
.fb_setcolreg = radeonfb_setcolreg,
.fb_pan_display = radeonfb_pan_display,
.fb_blank = radeonfb_blank,
.fb_ioctl = radeonfb_ioctl,
D1825 1
D1840 1
D1856 8
I1863 2
if (noaccel) {
info->fix.accel = FB_ACCEL_NONE;
D1865 1
I1865 3
info->fbops = &radeonfb_noaccel_ops;
} else {
info->fix.accel = FB_ACCEL_ATI_RADEON;
I1866 3
info->fbops = &radeonfb_ops;
}
fb_alloc_cmap(&info->cmap, 256, 0);
== include/video/radeon.h ==
patch@athlon.transmeta.com|drivers/video/radeon.h|20020205201335|45853|de7a7433ce71623f
benh@kernel.crashing.org|include/video/radeon.h|20031009155225|47316
D 1.18 04/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +1 -0
B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864
C
c New constant from XFree86 headers: DEFAULT_SC_TOP_LEFT
K 50553
O -rw-rw-r--
P include/video/radeon.h
------------------------------------------------
I367 1
#define DEFAULT_SC_TOP_LEFT 0x16EC
== BitKeeper/etc/ignore ==
torvalds@athlon.transmeta.com|BitKeeper/etc/ignore|20020205173056|17751|fa71c5ed300a3cfc
benh@kernel.crashing.org|BitKeeper/etc/ignore|20031014072735|36220
D 1.64 04/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +7 -0
B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864
C
c Added arch/ppc/boot/openfirmware/coffboot arch/ppc/boot/openfirmware/note arch/ppc/boot/prep/zImage arch/ppc/boot/prep/zImage.bin drivers/video/logo/logo_linux_mono.c drivers/video/logo/logo_linux_vga16.c include/asm-ppc/offsets.h to the ignore list
K 57764
O -rw-rw-r--
P BitKeeper/etc/ignore
------------------------------------------------
I284 7
arch/ppc/boot/openfirmware/coffboot
arch/ppc/boot/openfirmware/note
arch/ppc/boot/prep/zImage
arch/ppc/boot/prep/zImage.bin
drivers/video/logo/logo_linux_mono.c
drivers/video/logo/logo_linux_vga16.c
include/asm-ppc/offsets.h
# Patch checksum=36be6db7
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-20 14:44 [PATCH] Radeon 2D Acceleration for 2.6 random
@ 2004-01-20 21:40 ` Benjamin Herrenschmidt
2004-01-20 22:47 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2004-01-20 21:40 UTC (permalink / raw)
To: random; +Cc: Linux Fbdev development list
On Wed, 2004-01-21 at 01:44, random wrote:
> Included are copyarea() and fillrect() for Radeon. It is based on BenH's
> new driver in drivers/video/aty, and it works on my PowerBook.
> Please test.
>
> To make this work, I've had to tell radeonfb.c to expect to always run
> accelerated. It was checking if the FB_ACCELF_TEXT bit was set in the var
> passed in to enable acceleration, and it never was; consequently, it
> never "ran accelerated" meaning it never called radeon_engine_init() and
> such.
>
> Also, this is my first experience with BitKeeper, so let me know if I've
> screwed something up there (and anywhere else for that matter).
Excellent ! I planned to work on that after the big merge. I'll
review the patch this week and send it to James myself if it's
ok. Regarding FB_ACCEL_TEST, I suppose it could be the initial
mode set by radeonfb missing it, I'll check what's up, I don't
want to force it from userland requested modes at this point.
Ben.
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-20 14:44 [PATCH] Radeon 2D Acceleration for 2.6 random
2004-01-20 21:40 ` Benjamin Herrenschmidt
@ 2004-01-20 22:47 ` Benjamin Herrenschmidt
2004-01-20 23:09 ` random
1 sibling, 1 reply; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2004-01-20 22:47 UTC (permalink / raw)
To: random; +Cc: Linux Fbdev development list
Can you re-export the cset as a patch in unified diff form please ?
(bk export -tpatch -du)
Ben.
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-20 22:47 ` Benjamin Herrenschmidt
@ 2004-01-20 23:09 ` random
2004-01-21 11:10 ` Benjamin Herrenschmidt
2004-01-23 1:22 ` Michel Dänzer
0 siblings, 2 replies; 7+ messages in thread
From: random @ 2004-01-20 23:09 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Linux Fbdev development list
Ben asks:
> Can you re-export the cset as a patch in unified diff form please ?
>
> (bk export -tpatch -du)
Now that I know the shortcut ;-)
-David
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/01/20 15:07:51+01:00 eger@rosencrantz.pok.ibm.com
# Added 2D-acceleration support for radeonfb with copyarea() and fillrect()
#
# include/video/radeon.h
# 2004/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +1 -0
# New constant from XFree86 headers: DEFAULT_SC_TOP_LEFT
#
# drivers/video/aty/radeon_base.c
# 2004/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +123 -24
# Added 2D-acceleration support for radeonfb with copyarea() and fillrect()
#
# BitKeeper/etc/ignore
# 2004/01/20 15:04:12+01:00 eger@rosencrantz.pok.ibm.com +7 -0
# Added arch/ppc/boot/openfirmware/coffboot arch/ppc/boot/openfirmware/note arch/ppc/boot/prep/zImage arch/ppc/boot/prep/zImage.bin drivers/video/logo/logo_linux_mono.c drivers/video/logo/logo_linux_vga16.c include/asm-ppc/offsets.h to the ignore list
#
diff -Nru a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c
--- a/drivers/video/aty/radeon_base.c Wed Jan 21 00:07:29 2004
+++ b/drivers/video/aty/radeon_base.c Wed Jan 21 00:07:29 2004
@@ -851,12 +851,14 @@
OUTREG(SRC_PITCH_OFFSET, (rinfo->pitch << 0x16) | (rinfo->fb_local_base >> 10));
radeon_fifo_wait (1);
+
#if defined(__BIG_ENDIAN)
OUTREGP(DP_DATATYPE, HOST_BIG_ENDIAN_EN, ~HOST_BIG_ENDIAN_EN);
#else
OUTREGP(DP_DATATYPE, 0, ~HOST_BIG_ENDIAN_EN);
#endif
radeon_fifo_wait (1);
+ OUTREG(DEFAULT_SC_TOP_LEFT, 0);
OUTREG(DEFAULT_SC_BOTTOM_RIGHT, (DEFAULT_SC_RIGHT_MAX |
DEFAULT_SC_BOTTOM_MAX));
@@ -894,7 +896,7 @@
struct radeonfb_info *rinfo = (struct radeonfb_info *) info->par;
struct fb_var_screeninfo v;
int nom, den;
- int accel = (var->accel_flags & FB_ACCELF_TEXT) != 0;
+ int accel = 1;
unsigned int pitch;
if (noaccel)
@@ -1525,7 +1527,7 @@
int hsync_start, hsync_fudge, bytpp, hsync_wid, vsync_wid;
int primary_mon = PRIMARY_MONITOR(rinfo);
int depth = var_to_depth(mode);
- int accel = (mode->accel_flags & FB_ACCELF_TEXT) != 0;
+ int accel = 1;
hSyncStart = mode->xres + mode->right_margin;
hSyncEnd = hSyncStart + mode->hsync_len;
@@ -1803,26 +1805,125 @@
return 0;
}
+/* ------------ Accelerated Functions --------------------- */
+/* the accelerated functions here are patterned after the
+ * "ACCEL_MMIO" ifdef branches in XFree86 --dte */
+void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
+ const struct fb_fillrect *region)
+{
+ radeon_fifo_wait(4);
+
+ OUTREG(DP_GUI_MASTER_CNTL,
+ rinfo->dp_gui_master_cntl /* contains, like GMC_DST_32BPP */
+ | GMC_BRUSH_SOLID_COLOR
+ | ROP3_P);
+ OUTREG(DP_BRUSH_FRGD_CLR, region->color);
+ OUTREG(DP_WRITE_MSK, 0xffffffff);
+ OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
+
+ radeon_fifo_wait(2);
+ OUTREG(DST_Y_X, (region->dy << 16) | region->dx);
+ OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height);
+ radeon_engine_idle ();
+}
+
+void radeonfb_fillrect(struct fb_info *info,
+ const struct fb_fillrect *region)
+{
+ struct radeonfb_info *rinfo = (struct radeonfb_info *)info;
+ struct fb_fillrect modded;
+ int vxres, vyres;
+
+ vxres = info->var.xres;
+ vyres = info->var.yres;
+
+ memcpy(&modded, region, sizeof(struct fb_fillrect));
+
+ if(!modded.width || !modded.height ||
+ modded.dx >= vxres || modded.dy >= vyres)
+ return;
+
+ if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx;
+ if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
+
+ radeonfb_prim_fillrect(rinfo, &modded);
+}
+
+void radeonfb_prim_copyarea(struct radeonfb_info *rinfo,
+ const struct fb_copyarea *area)
+{
+ radeon_fifo_wait(3);
+ OUTREG(DP_GUI_MASTER_CNTL,
+ rinfo->dp_gui_master_cntl /* i.e. GMC_DST_32BPP */
+ | GMC_SRC_DSTCOLOR
+ | ROP3_S
+ | DP_SRC_RECT );
+ OUTREG(DP_WRITE_MSK, 0xffffffff);
+ OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
+
+ radeon_fifo_wait(3);
+ OUTREG(SRC_Y_X, (area->sy << 16) | area->sx);
+ OUTREG(DST_Y_X, (area->dy << 16) | area->dx);
+ OUTREG(DST_HEIGHT_WIDTH, (area->height << 16) | area->width);
+ radeon_engine_idle ();
+}
+
+
+void radeonfb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
+{
+ struct radeonfb_info *rinfo = (struct radeonfb_info *)info;
+ struct fb_copyarea modded;
+ u32 vxres, vyres;
+ modded.sx = area->sx;
+ modded.sy = area->sy;
+ modded.dx = area->dx;
+ modded.dy = area->dy;
+ modded.width = area->width;
+ modded.height = area->height;
+
+ vxres = info->var.xres;
+ vyres = info->var.yres;
+
+ if(!modded.width || !modded.height ||
+ modded.sx >= vxres || modded.sy >= vyres ||
+ modded.dx >= vxres || modded.dy >= vyres)
+ return;
+
+ if(modded.sx + modded.width > vxres) modded.width = vxres - modded.sx;
+ if(modded.dx + modded.width > vxres) modded.width = vxres - modded.dx;
+ if(modded.sy + modded.height > vyres) modded.height = vyres - modded.sy;
+ if(modded.dy + modded.height > vyres) modded.height = vyres - modded.dy;
+
+ radeonfb_prim_copyarea(rinfo, &modded);
+}
+
static struct fb_ops radeonfb_ops = {
- .owner = THIS_MODULE,
- .fb_check_var = radeonfb_check_var,
- .fb_set_par = radeonfb_set_par,
- .fb_setcolreg = radeonfb_setcolreg,
- .fb_pan_display = radeonfb_pan_display,
- .fb_blank = radeonfb_blank,
- .fb_ioctl = radeonfb_ioctl,
-#if 0
+ .owner = THIS_MODULE,
+ .fb_check_var = radeonfb_check_var,
+ .fb_set_par = radeonfb_set_par,
+ .fb_setcolreg = radeonfb_setcolreg,
+ .fb_pan_display = radeonfb_pan_display,
+ .fb_blank = radeonfb_blank,
+ .fb_ioctl = radeonfb_ioctl,
.fb_fillrect = radeonfb_fillrect,
.fb_copyarea = radeonfb_copyarea,
- .fb_imageblit = radeonfb_imageblit,
- .fb_rasterimg = radeonfb_rasterimg,
-#else
+ .fb_imageblit = cfb_imageblit,
+ .fb_cursor = soft_cursor,
+};
+
+static struct fb_ops radeonfb_noaccel_ops = {
+ .owner = THIS_MODULE,
+ .fb_check_var = radeonfb_check_var,
+ .fb_set_par = radeonfb_set_par,
+ .fb_setcolreg = radeonfb_setcolreg,
+ .fb_pan_display = radeonfb_pan_display,
+ .fb_blank = radeonfb_blank,
+ .fb_ioctl = radeonfb_ioctl,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
-#endif
.fb_cursor = soft_cursor,
};
@@ -1837,7 +1938,6 @@
info->par = rinfo;
info->pseudo_palette = rinfo->pseudo_palette;
info->flags = FBINFO_FLAG_DEFAULT;
- info->fbops = &radeonfb_ops;
info->display_fg = NULL;
info->screen_base = (char *)rinfo->fb_base;
@@ -1853,17 +1953,16 @@
info->fix.type_aux = 0;
info->fix.mmio_start = rinfo->mmio_base_phys;
info->fix.mmio_len = RADEON_REGSIZE;
- if (noaccel)
- info->fix.accel = FB_ACCEL_NONE;
- else
- info->fix.accel = FB_ACCEL_ATI_RADEON;
-
- fb_alloc_cmap(&info->cmap, 256, 0);
-
- if (noaccel)
+ if (noaccel) {
+ info->fix.accel = FB_ACCEL_NONE;
info->var.accel_flags &= ~FB_ACCELF_TEXT;
- else
+ info->fbops = &radeonfb_noaccel_ops;
+ } else {
+ info->fix.accel = FB_ACCEL_ATI_RADEON;
info->var.accel_flags |= FB_ACCELF_TEXT;
+ info->fbops = &radeonfb_ops;
+ }
+ fb_alloc_cmap(&info->cmap, 256, 0);
return 0;
}
diff -Nru a/include/video/radeon.h b/include/video/radeon.h
--- a/include/video/radeon.h Wed Jan 21 00:07:29 2004
+++ b/include/video/radeon.h Wed Jan 21 00:07:29 2004
@@ -365,6 +365,7 @@
#define DSTCACHE_CTLSTAT 0x1714
#define DEFAULT_PITCH_OFFSET 0x16E0
#define DEFAULT_SC_BOTTOM_RIGHT 0x16E8
+#define DEFAULT_SC_TOP_LEFT 0x16EC
#define SRC_PITCH_OFFSET 0x1428
#define DST_PITCH_OFFSET 0x142C
#define DP_GUI_MASTER_CNTL 0x146C
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-20 23:09 ` random
@ 2004-01-21 11:10 ` Benjamin Herrenschmidt
2004-01-23 1:22 ` Michel Dänzer
1 sibling, 0 replies; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2004-01-21 11:10 UTC (permalink / raw)
To: random; +Cc: Linux Fbdev development list
On Wed, 2004-01-21 at 10:09, random wrote:
> Ben asks:
> > Can you re-export the cset as a patch in unified diff form please ?
> >
> > (bk export -tpatch -du)
>
> Now that I know the shortcut ;-)
Ok, it appears to work (though the gain isn't terrific, we probably
need imageblt for that). I reworked it and merged in my tree.
I tried to debug the lack of accel and it appears there is some more
deep breakage with fbcon in this regard. I gave up for now and made
accel unconditional (except for noaccel at boot).
Ben.
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-20 23:09 ` random
2004-01-21 11:10 ` Benjamin Herrenschmidt
@ 2004-01-23 1:22 ` Michel Dänzer
2004-01-23 2:19 ` Benjamin Herrenschmidt
1 sibling, 1 reply; 7+ messages in thread
From: Michel Dänzer @ 2004-01-23 1:22 UTC (permalink / raw)
To: random; +Cc: Benjamin Herrenschmidt, Linux Fbdev development list
On Wed, 2004-01-21 at 00:09, random wrote:
>
> +void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
> + const struct fb_fillrect *region)
> +{
> + radeon_fifo_wait(4);
> +
> + OUTREG(DP_GUI_MASTER_CNTL,
> + rinfo->dp_gui_master_cntl /* contains, like GMC_DST_32BPP */
> + | GMC_BRUSH_SOLID_COLOR
> + | ROP3_P);
> + OUTREG(DP_BRUSH_FRGD_CLR, region->color);
> + OUTREG(DP_WRITE_MSK, 0xffffffff);
You could probably take this out of the acceleration functions, you
don't seem to need a different write mask?
> + OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
> +
> + radeon_fifo_wait(2);
> + OUTREG(DST_Y_X, (region->dy << 16) | region->dx);
> + OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height);
> + radeon_engine_idle ();
Why idle the engine in every acceleration function? Doesn't the API
provide a way to only do it when necessary?
PS: You lost my last reply to your private mails to your temporary
address scheme.
--
Earthling Michel Dänzer | Debian (powerpc), X and DRI developer
Libre software enthusiast | http://svcs.affero.net/rm.php?r=daenzer
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: Re: [PATCH] Radeon 2D Acceleration for 2.6
2004-01-23 1:22 ` Michel Dänzer
@ 2004-01-23 2:19 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2004-01-23 2:19 UTC (permalink / raw)
To: Michel Dänzer; +Cc: random, Linux Fbdev development list
On Fri, 2004-01-23 at 12:22, Michel Dänzer wrote:
> On Wed, 2004-01-21 at 00:09, random wrote:
> >
> > +void radeonfb_prim_fillrect(struct radeonfb_info *rinfo,
> > + const struct fb_fillrect *region)
> > +{
> > + radeon_fifo_wait(4);
> > +
> > + OUTREG(DP_GUI_MASTER_CNTL,
> > + rinfo->dp_gui_master_cntl /* contains, like GMC_DST_32BPP */
> > + | GMC_BRUSH_SOLID_COLOR
> > + | ROP3_P);
> > + OUTREG(DP_BRUSH_FRGD_CLR, region->color);
> > + OUTREG(DP_WRITE_MSK, 0xffffffff);
>
> You could probably take this out of the acceleration functions, you
> don't seem to need a different write mask?
Yes, we could factor this one out
> > + OUTREG(DP_CNTL, (DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM));
> > +
> > + radeon_fifo_wait(2);
> > + OUTREG(DST_Y_X, (region->dy << 16) | region->dx);
> > + OUTREG(DST_WIDTH_HEIGHT, (region->width << 16) | region->height);
> > + radeon_engine_idle ();
>
> Why idle the engine in every acceleration function? Doesn't the API
> provide a way to only do it when necessary?
I don't do it in the patch I commited to my tree :) There is an fb_sync
callback that you use for that.
> PS: You lost my last reply to your private mails to your temporary
> address scheme.
And you'll lose mines too, please get rid of this shit and get a real
address :)
Ben.
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2004-01-23 2:21 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-20 14:44 [PATCH] Radeon 2D Acceleration for 2.6 random
2004-01-20 21:40 ` Benjamin Herrenschmidt
2004-01-20 22:47 ` Benjamin Herrenschmidt
2004-01-20 23:09 ` random
2004-01-21 11:10 ` Benjamin Herrenschmidt
2004-01-23 1:22 ` Michel Dänzer
2004-01-23 2:19 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).