From: Helge Deller <deller@gmx.de>
To: lausgans@gmail.com, linux-parisc@vger.kernel.org
Subject: Re: [PATCH] stifb: Implement hardware accelerated copyarea
Date: Mon, 15 Jun 2015 20:52:13 +0200 [thread overview]
Message-ID: <557F1EDD.3080504@gmx.de> (raw)
In-Reply-To: <679FC99F-317B-4925-A6D8-2F0DB4EC6EBD@gmail.com>
On 15.06.2015 07:50, lausgans@gmail.com wrote:
> This patch adds hardware assisted scrolling. The code is based upon the
> following investigation: https://parisc.wiki.kernel.org/index.php/NGLE#Blitter A
> simple 'time ls -la /usr/bin' test shows 1.6x speed increase over soft copy and
> 2.3x increase over FBINFO_READS_FAST (prefer soft copy over screen redraw) on
> Artist framebuffer.
I haven't tested it yet, but that's very cool!
Thanks!
I wonder if adding a BlockTLB (with PA7100LC CPUs) further increases
speed on Artist graphic cards (e.g. in X11)...?
Helge
> Signed-off-by: Alex Ivanov <lausgans@gmail.com>
>
> diff --git a/drivers/video/fbdev/stifb.c b/drivers/video/fbdev/stifb.c
> index 86621fa..735355b 100644
> --- a/drivers/video/fbdev/stifb.c
> +++ b/drivers/video/fbdev/stifb.c
> @@ -121,6 +121,7 @@ static int __initdata stifb_bpp_pref[MAX_STI_ROMS];
> #define REG_3 0x0004a0
> #define REG_4 0x000600
> #define REG_6 0x000800
> +#define REG_7 0x000804
> #define REG_8 0x000820
> #define REG_9 0x000a04
> #define REG_10 0x018000
> @@ -135,6 +136,8 @@ static int __initdata stifb_bpp_pref[MAX_STI_ROMS];
> #define REG_21 0x200218
> #define REG_22 0x0005a0
> #define REG_23 0x0005c0
> +#define REG_24 0x000808
> +#define REG_25 0x000b00
> #define REG_26 0x200118
> #define REG_27 0x200308
> #define REG_32 0x21003c
> @@ -429,6 +432,9 @@ ARTIST_ENABLE_DISABLE_DISPLAY(struct stifb_info *fb, int enable)
> #define SET_LENXY_START_RECFILL(fb, lenxy) \
> WRITE_WORD(lenxy, fb, REG_9)
>
> +#define SETUP_COPYAREA(fb) \
> + WRITE_BYTE(0, fb, REG_16b1)
> +
> static void
> HYPER_ENABLE_DISABLE_DISPLAY(struct stifb_info *fb, int enable)
> {
> @@ -1004,6 +1010,36 @@ stifb_blank(int blank_mode, struct fb_info *info)
> return 0;
> }
>
> +static void
> +stifb_copyarea(struct fb_info *info, const struct fb_copyarea *area)
> +{
> + struct stifb_info *fb = container_of(info, struct stifb_info, info);
> +
> + SETUP_COPYAREA(fb);
> +
> + SETUP_HW(fb);
> + if (fb->info.var.bits_per_pixel == 32) {
> + WRITE_WORD(0xBBA0A000, fb, REG_10);
> +
> + NGLE_REALLY_SET_IMAGE_PLANEMASK(fb, 0xffffffff);
> + } else {
> + WRITE_WORD(fb->id == S9000_ID_HCRX ? 0x13a02000 : 0x13a01000, fb, REG_10);
> +
> + NGLE_REALLY_SET_IMAGE_PLANEMASK(fb, 0xff);
> + }
> +
> + NGLE_QUICK_SET_IMAGE_BITMAP_OP(fb,
> + IBOvals(RopSrc, MaskAddrOffset(0),
> + BitmapExtent08, StaticReg(1),
> + DataDynamic, MaskOtc, BGx(0), FGx(0)));
> +
> + WRITE_WORD(((area->sx << 16) | area->sy), fb, REG_24);
> + WRITE_WORD(((area->width << 16) | area->height), fb, REG_7);
> + WRITE_WORD(((area->dx << 16) | area->dy), fb, REG_25);
> +
> + SETUP_FB(fb);
> +}
> +
> static void __init
> stifb_init_display(struct stifb_info *fb)
> {
> @@ -1069,7 +1105,7 @@ static struct fb_ops stifb_ops = {
> .fb_setcolreg = stifb_setcolreg,
> .fb_blank = stifb_blank,
> .fb_fillrect = cfb_fillrect,
> - .fb_copyarea = cfb_copyarea,
> + .fb_copyarea = stifb_copyarea,
> .fb_imageblit = cfb_imageblit,
> };
>
> @@ -1258,7 +1294,7 @@ static int __init stifb_init_fb(struct sti_struct *sti, int bpp_pref)
> info->fbops = &stifb_ops;
> info->screen_base = ioremap_nocache(REGION_BASE(fb,1), fix->smem_len);
> info->screen_size = fix->smem_len;
> - info->flags = FBINFO_DEFAULT;
> + info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_COPYAREA;
> info->pseudo_palette = &fb->pseudo_palette;
>
> /* This has to be done !!! */
> --
> To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2015-06-15 18:52 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-15 5:50 [PATCH] stifb: Implement hardware accelerated copyarea lausgans
2015-06-15 18:52 ` Helge Deller [this message]
2015-06-16 12:11 `
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=557F1EDD.3080504@gmx.de \
--to=deller@gmx.de \
--cc=lausgans@gmail.com \
--cc=linux-parisc@vger.kernel.org \
/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