* [PATCH 2.4] ATI Rage 128 Pro (aty128fb) acceleration fix
@ 2002-12-10 2:54 Marc-Christian Petersen
0 siblings, 0 replies; only message in thread
From: Marc-Christian Petersen @ 2002-12-10 2:54 UTC (permalink / raw)
To: linux-kernel; +Cc: Marcelo Tosatti, Ani Joshi
[-- Attachment #1: Type: text/plain, Size: 361 bytes --]
Hi Marcelo, Hi Ani,
this bug (marc.theaimsgroup.com/?l=linux-fbdev-devel&m=102977461504322&w=2) is
still not fixed in latest -BK 2.4.21.
I had the same errors as mentioned in that email. After that patch applied,
problems are gone and all is working very well.
Patch credits go to Sergey Vlasov.
This fix has been in WOLK for ages.
ciao, Marc
[-- Attachment #2: aty128fb-fix.patch --]
[-- Type: text/x-diff, Size: 6319 bytes --]
--- linux/drivers/video/aty128fb.c.aty128fb_fix Sat Jun 1 14:51:15 2002
+++ linux/drivers/video/aty128fb.c Sun Jun 2 11:11:03 2002
@@ -2599,6 +2599,15 @@
return;
}
+ if (srcx < dstx) {
+ srcx += width - 1;
+ dstx += width - 1;
+ }
+ if (srcy < dsty) {
+ srcy += height - 1;
+ dsty += height - 1;
+ }
+
wait_for_fifo(2, info);
save_dp_datatype = aty_ld_le32(DP_DATATYPE);
save_dp_cntl = aty_ld_le32(DP_CNTL);
@@ -2606,7 +2615,9 @@
wait_for_fifo(6, info);
aty_st_le32(SRC_Y_X, (srcy << 16) | srcx);
aty_st_le32(DP_MIX, ROP3_SRCCOPY | DP_SRC_RECT);
- aty_st_le32(DP_CNTL, DST_X_LEFT_TO_RIGHT | DST_Y_TOP_TO_BOTTOM);
+ aty_st_le32(DP_CNTL,
+ ((srcx >= dstx) ? DST_X_LEFT_TO_RIGHT : 0) |
+ ((srcy >= dsty) ? DST_Y_TOP_TO_BOTTOM : 0));
aty_st_le32(DP_DATATYPE, save_dp_datatype | dstval | SRC_DSTCOLOR);
aty_st_le32(DST_Y_X, (dsty << 16) | dstx);
@@ -2641,6 +2652,18 @@
#ifdef FBCON_HAS_CFB8
+static void fbcon_aty8_clear(struct vc_data *conp, struct display *p,
+ int sy, int sx, int height, int width)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb8_clear(conp, p, sy, sx, height, width);
+}
+
+
static void fbcon_aty8_putc(struct vc_data *conp, struct display *p,
int c, int yy, int xx)
{
@@ -2666,6 +2689,17 @@
}
+static void fbcon_aty8_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb8_revc(p, xx, yy);
+}
+
+
static void fbcon_aty8_clear_margins(struct vc_data *conp,
struct display *p, int bottom_only)
{
@@ -2680,15 +2714,27 @@
static struct display_switch fbcon_aty128_8 = {
setup: fbcon_cfb8_setup,
bmove: fbcon_aty128_bmove,
- clear: fbcon_cfb8_clear,
+ clear: fbcon_aty8_clear,
putc: fbcon_aty8_putc,
putcs: fbcon_aty8_putcs,
- revc: fbcon_cfb8_revc,
+ revc: fbcon_aty8_revc,
clear_margins: fbcon_aty8_clear_margins,
fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
#ifdef FBCON_HAS_CFB16
+static void fbcon_aty16_clear(struct vc_data *conp, struct display *p,
+ int sy, int sx, int height, int width)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb16_clear(conp, p, sy, sx, height, width);
+}
+
+
static void fbcon_aty16_putc(struct vc_data *conp, struct display *p,
int c, int yy, int xx)
{
@@ -2714,6 +2760,17 @@
}
+static void fbcon_aty16_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb16_revc(p, xx, yy);
+}
+
+
static void fbcon_aty16_clear_margins(struct vc_data *conp,
struct display *p, int bottom_only)
{
@@ -2728,15 +2785,27 @@
static struct display_switch fbcon_aty128_16 = {
setup: fbcon_cfb16_setup,
bmove: fbcon_aty128_bmove,
- clear: fbcon_cfb16_clear,
+ clear: fbcon_aty16_clear,
putc: fbcon_aty16_putc,
putcs: fbcon_aty16_putcs,
- revc: fbcon_cfb16_revc,
+ revc: fbcon_aty16_revc,
clear_margins: fbcon_aty16_clear_margins,
fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
#ifdef FBCON_HAS_CFB24
+static void fbcon_aty24_clear(struct vc_data *conp, struct display *p,
+ int sy, int sx, int height, int width)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb24_clear(conp, p, sy, sx, height, width);
+}
+
+
static void fbcon_aty24_putc(struct vc_data *conp, struct display *p,
int c, int yy, int xx)
{
@@ -2762,6 +2831,17 @@
}
+static void fbcon_aty24_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb24_revc(p, xx, yy);
+}
+
+
static void fbcon_aty24_clear_margins(struct vc_data *conp,
struct display *p, int bottom_only)
{
@@ -2776,15 +2856,27 @@
static struct display_switch fbcon_aty128_24 = {
setup: fbcon_cfb24_setup,
bmove: fbcon_aty128_bmove,
- clear: fbcon_cfb24_clear,
+ clear: fbcon_aty24_clear,
putc: fbcon_aty24_putc,
putcs: fbcon_aty24_putcs,
- revc: fbcon_cfb24_revc,
+ revc: fbcon_aty24_revc,
clear_margins: fbcon_aty24_clear_margins,
fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
#endif
#ifdef FBCON_HAS_CFB32
+static void fbcon_aty32_clear(struct vc_data *conp, struct display *p,
+ int sy, int sx, int height, int width)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb32_clear(conp, p, sy, sx, height, width);
+}
+
+
static void fbcon_aty32_putc(struct vc_data *conp, struct display *p,
int c, int yy, int xx)
{
@@ -2810,6 +2902,17 @@
}
+static void fbcon_aty32_revc(struct display *p, int xx, int yy)
+{
+ struct fb_info_aty128 *fb = (struct fb_info_aty128 *)(p->fb_info);
+
+ if (fb->blitter_may_be_busy)
+ wait_for_idle(fb);
+
+ fbcon_cfb32_revc(p, xx, yy);
+}
+
+
static void fbcon_aty32_clear_margins(struct vc_data *conp,
struct display *p, int bottom_only)
{
@@ -2824,10 +2927,10 @@
static struct display_switch fbcon_aty128_32 = {
setup: fbcon_cfb32_setup,
bmove: fbcon_aty128_bmove,
- clear: fbcon_cfb32_clear,
+ clear: fbcon_aty32_clear,
putc: fbcon_aty32_putc,
putcs: fbcon_aty32_putcs,
- revc: fbcon_cfb32_revc,
+ revc: fbcon_aty32_revc,
clear_margins: fbcon_aty32_clear_margins,
fontwidthmask: FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16)
};
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2002-12-10 2:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-12-10 2:54 [PATCH 2.4] ATI Rage 128 Pro (aty128fb) acceleration fix Marc-Christian Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®