From: Marc-Christian Petersen <m.c.p@wolk-project.de>
To: linux-kernel@vger.kernel.org
Cc: Marcelo Tosatti <marcelo@conectiva.com.br>,
Ani Joshi <ajoshi@shell.unixbox.com>
Subject: [PATCH 2.4] ATI Rage 128 Pro (aty128fb) acceleration fix
Date: Tue, 10 Dec 2002 03:54:11 +0100 [thread overview]
Message-ID: <200212100346.58670.m.c.p@wolk-project.de> (raw)
[-- 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)
};
reply other threads:[~2002-12-10 2:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200212100346.58670.m.c.p@wolk-project.de \
--to=m.c.p@wolk-project.de \
--cc=ajoshi@shell.unixbox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo@conectiva.com.br \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®