linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] cg6: accelerated copyarea
@ 2007-08-01 23:17 Krzysztof Helt
  2007-08-02  4:44 ` David Miller
  0 siblings, 1 reply; 2+ messages in thread
From: Krzysztof Helt @ 2007-08-01 23:17 UTC (permalink / raw)
  To: Linux-fbdev-devel; +Cc: David Miller

From: Krzysztof Helt <krzysztof.h1@wp.pl>

This patch adds accelerated copyarea and sets READS_FAST flag.
This doubles scrolling speed on SparcStation20 85MHz.

It also fixes a comment in cg6_fillrect function.

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>

---
This patch requires both cg6-cleanup and cg6-fbmem-size-fix patches
to apply cleanly.

--- linux-2.6.23smp/drivers/video/cg6.c	2007-08-02 00:32:01.000000000 +0200
+++ linux-2.6.23/drivers/video/cg6.c	2007-08-02 00:38:11.000000000 +0200
@@ -37,6 +37,7 @@ static void cg6_fillrect(struct fb_info 
 static int cg6_sync(struct fb_info *);
 static int cg6_mmap(struct fb_info *, struct vm_area_struct *);
 static int cg6_ioctl(struct fb_info *, unsigned int, unsigned long);
+static void cg6_copyarea(struct fb_info *info, const struct fb_copyarea *area);
 
 /*
  *  Frame buffer operations
@@ -47,7 +48,7 @@ static struct fb_ops cg6_ops = {
 	.fb_setcolreg		= cg6_setcolreg,
 	.fb_blank		= cg6_blank,
 	.fb_fillrect		= cg6_fillrect,
-	.fb_copyarea		= cfb_copyarea,
+	.fb_copyarea		= cg6_copyarea,
 	.fb_imageblit		= cg6_imageblit,
 	.fb_sync		= cg6_sync,
 	.fb_mmap		= cg6_mmap,
@@ -292,10 +293,12 @@ static void cg6_fillrect(struct fb_info 
 	unsigned long flags;
 	s32 val;
 
-	/* XXX doesn't handle ROP_XOR */
+	/* CG6 doesn't handle ROP_XOR */
 
 	spin_lock_irqsave(&par->lock, flags);
+
 	cg6_sync(info);
+
 	sbus_writel(rect->color, &fbc->fg);
 	sbus_writel(~(u32)0, &fbc->pixelm);
 	sbus_writel(0xea80ff00, &fbc->alu);
@@ -313,6 +316,48 @@ static void cg6_fillrect(struct fb_info 
 }
 
 /**
+ *	cg6_copyarea - Copies one area of the screen to another area.
+ *
+ *	@info: frame buffer structure that represents a single frame buffer
+ *	@area: Structure providing the data to copy the framebuffer contents
+ *		from one region to another.
+ *
+ *	This drawing operation copies a rectangular area from one area of the
+ *	screen to another area.
+ */
+static void cg6_copyarea(struct fb_info *info, const struct fb_copyarea *area)
+{
+	struct cg6_par *par = (struct cg6_par *)info->par;
+	struct cg6_fbc __iomem *fbc = par->fbc;
+	unsigned long flags;
+	int i;
+
+	spin_lock_irqsave(&par->lock, flags);
+
+	cg6_sync(info);
+
+	sbus_writel(0xff, &fbc->fg);
+	sbus_writel(0x00, &fbc->bg);
+	sbus_writel(~0, &fbc->pixelm);
+	sbus_writel(0xe880cccc, &fbc->alu);
+	sbus_writel(0, &fbc->s);
+	sbus_writel(0, &fbc->clip);
+
+	sbus_writel(area->sy, &fbc->y0);
+	sbus_writel(area->sx, &fbc->x0);
+	sbus_writel(area->sy + area->height - 1, &fbc->y1);
+	sbus_writel(area->sx + area->width - 1, &fbc->x1);
+	sbus_writel(area->dy, &fbc->y2);
+	sbus_writel(area->dx, &fbc->x2);
+	sbus_writel(area->dy + area->height - 1, &fbc->y3);
+	sbus_writel(area->dx + area->width - 1, &fbc->x3);
+	do {
+		i = sbus_readl(&fbc->blit);
+	} while (i < 0 && (i & 0x20000000));
+	spin_unlock_irqrestore(&par->lock, flags);
+}
+
+/**
  *	cg6_imageblit -	Copies a image from system memory to the screen.
  *
  *	@info: frame buffer structure that represents a single frame buffer
@@ -708,7 +753,8 @@ static int __devinit cg6_probe(struct of
 				sizeof(u32), "cgsix fhc");
 
 	info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_IMAGEBLIT |
-			FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT;
+			FBINFO_HWACCEL_COPYAREA | FBINFO_HWACCEL_FILLRECT |
+			FBINFO_READS_FAST;
 	info->fbops = &cg6_ops;
 
 	info->screen_base = of_ioremap(&op->resource[0], CG6_RAM_OFFSET,

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] cg6: accelerated copyarea
  2007-08-01 23:17 [PATCH] cg6: accelerated copyarea Krzysztof Helt
@ 2007-08-02  4:44 ` David Miller
  0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2007-08-02  4:44 UTC (permalink / raw)
  To: krzysztof.h1; +Cc: linux-fbdev-devel

From: Krzysztof Helt <krzysztof.h1@wp.pl>
Date: Thu, 2 Aug 2007 01:17:35 +0200

> This patch requires both cg6-cleanup and cg6-fbmem-size-fix patches
> to apply cleanly.

It doesn't apply cleanly.

> +/**
>   *	cg6_imageblit -	Copies a image from system memory to the screen.
>   *
>   *	@info: frame buffer structure that represents a single frame buffer

That's not what the comment baove cg6_imageblit() looks like
with all the patches applied, instead it looks like:

/**
 *      cg6_imageblit - REQUIRED function. Can use generic routines if
 *                      non acclerated hardware and packed pixel based.
 *                      Copies a image from system memory to the screen. 
 *
 *      @info: frame buffer structure that represents a single frame buffer
 *      @image: structure defining the image.
 */

Perhaps we are speaking of two different cg6-cleanup patches.

In any event, I'll add this patch in by hand.

Please just submit SBUS framebuffer driver fixes directly to me since
I'm constantly fixing errors in these drivers on my own as well and
it's easier for me to resolve the conflicts.

Thanks.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2007-08-02  4:44 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-01 23:17 [PATCH] cg6: accelerated copyarea Krzysztof Helt
2007-08-02  4:44 ` David Miller

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).