From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: Ondrej Zary <linux@rainbow-software.org>
Cc: Paul Mundt <lethal@linux-sh.org>,
Ondrej Zajicek <santiago@crfreenet.org>,
linux-fbdev@vger.kernel.org,
Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] s3fb: fix Virge/VX
Date: Wed, 21 Dec 2011 21:44:02 +0000 [thread overview]
Message-ID: <4EF25322.1000408@gmx.de> (raw)
In-Reply-To: <201112192339.52676.linux@rainbow-software.org>
On 12/19/2011 10:39 PM, Ondrej Zary wrote:
> Add memory size detection for Virge/VX and small delay in mode setting (same
> as in X.org driver) to fix blank screen problem.
>
> Also adjust DTPC position to fix garbled screen in some modes (tested that
> this adjustment does not break other cards - at least Trio32, Trio64V+,
> Trio64V2/DX, Virge, Virge/DX).
>
> Tested on ELSA Winner 2000AVI/3D.
>
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Applied.
Thanks,
Florian Tobias Schandinat
>
> --- linux-3.1-orig/drivers/video/s3fb.c 2011-10-24 09:10:05.000000000 +0200
> +++ linux-3.1/drivers/video/s3fb.c 2011-12-19 23:28:34.000000000 +0100
> @@ -727,7 +727,7 @@
> if (par->chip = CHIP_988_VIRGE_VX) {
> vga_wcrt(par->state.vgabase, 0x50, 0x00);
> vga_wcrt(par->state.vgabase, 0x67, 0x50);
> -
> + msleep(10); /* screen remains blank sometimes without this */
> vga_wcrt(par->state.vgabase, 0x63, (mode <= 2) ? 0x90 : 0x09);
> vga_wcrt(par->state.vgabase, 0x66, 0x90);
> }
> @@ -901,7 +901,8 @@
>
> /* Set Data Transfer Position */
> hsstart = ((info->var.xres + info->var.right_margin) * hmul) / 8;
> - value = clamp((htotal + hsstart + 1) / 2, hsstart + 4, htotal + 1);
> + /* + 2 is needed for Virge/VX, does no harm on other cards */
> + value = clamp((htotal + hsstart + 1) / 2 + 2, hsstart + 4, htotal + 1);
> svga_wcrt_multi(par->state.vgabase, s3_dtpc_regs, value);
>
> memset_io(info->screen_base, 0x00, screen_size);
> @@ -1215,6 +1216,31 @@
> info->screen_size = 2 << 20;
> break;
> }
> + } else if (par->chip = CHIP_988_VIRGE_VX) {
> + switch ((regval & 0x60) >> 5) {
> + case 0: /* 2MB */
> + info->screen_size = 2 << 20;
> + break;
> + case 1: /* 4MB */
> + info->screen_size = 4 << 20;
> + break;
> + case 2: /* 6MB */
> + info->screen_size = 6 << 20;
> + break;
> + case 3: /* 8MB */
> + info->screen_size = 8 << 20;
> + break;
> + }
> + /* off-screen memory */
> + regval = vga_rcrt(par->state.vgabase, 0x37);
> + switch ((regval & 0x60) >> 5) {
> + case 1: /* 4MB */
> + info->screen_size -= 4 << 20;
> + break;
> + case 2: /* 2MB */
> + info->screen_size -= 2 << 20;
> + break;
> + }
> } else
> info->screen_size = s3_memsizes[regval >> 5] << 10;
> info->fix.smem_len = info->screen_size;
>
>
WARNING: multiple messages have this Message-ID (diff)
From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: Ondrej Zary <linux@rainbow-software.org>
Cc: Paul Mundt <lethal@linux-sh.org>,
Ondrej Zajicek <santiago@crfreenet.org>,
linux-fbdev@vger.kernel.org,
Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] s3fb: fix Virge/VX
Date: Wed, 21 Dec 2011 21:44:02 +0000 [thread overview]
Message-ID: <4EF25322.1000408@gmx.de> (raw)
In-Reply-To: <201112192339.52676.linux@rainbow-software.org>
On 12/19/2011 10:39 PM, Ondrej Zary wrote:
> Add memory size detection for Virge/VX and small delay in mode setting (same
> as in X.org driver) to fix blank screen problem.
>
> Also adjust DTPC position to fix garbled screen in some modes (tested that
> this adjustment does not break other cards - at least Trio32, Trio64V+,
> Trio64V2/DX, Virge, Virge/DX).
>
> Tested on ELSA Winner 2000AVI/3D.
>
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Applied.
Thanks,
Florian Tobias Schandinat
>
> --- linux-3.1-orig/drivers/video/s3fb.c 2011-10-24 09:10:05.000000000 +0200
> +++ linux-3.1/drivers/video/s3fb.c 2011-12-19 23:28:34.000000000 +0100
> @@ -727,7 +727,7 @@
> if (par->chip == CHIP_988_VIRGE_VX) {
> vga_wcrt(par->state.vgabase, 0x50, 0x00);
> vga_wcrt(par->state.vgabase, 0x67, 0x50);
> -
> + msleep(10); /* screen remains blank sometimes without this */
> vga_wcrt(par->state.vgabase, 0x63, (mode <= 2) ? 0x90 : 0x09);
> vga_wcrt(par->state.vgabase, 0x66, 0x90);
> }
> @@ -901,7 +901,8 @@
>
> /* Set Data Transfer Position */
> hsstart = ((info->var.xres + info->var.right_margin) * hmul) / 8;
> - value = clamp((htotal + hsstart + 1) / 2, hsstart + 4, htotal + 1);
> + /* + 2 is needed for Virge/VX, does no harm on other cards */
> + value = clamp((htotal + hsstart + 1) / 2 + 2, hsstart + 4, htotal + 1);
> svga_wcrt_multi(par->state.vgabase, s3_dtpc_regs, value);
>
> memset_io(info->screen_base, 0x00, screen_size);
> @@ -1215,6 +1216,31 @@
> info->screen_size = 2 << 20;
> break;
> }
> + } else if (par->chip == CHIP_988_VIRGE_VX) {
> + switch ((regval & 0x60) >> 5) {
> + case 0: /* 2MB */
> + info->screen_size = 2 << 20;
> + break;
> + case 1: /* 4MB */
> + info->screen_size = 4 << 20;
> + break;
> + case 2: /* 6MB */
> + info->screen_size = 6 << 20;
> + break;
> + case 3: /* 8MB */
> + info->screen_size = 8 << 20;
> + break;
> + }
> + /* off-screen memory */
> + regval = vga_rcrt(par->state.vgabase, 0x37);
> + switch ((regval & 0x60) >> 5) {
> + case 1: /* 4MB */
> + info->screen_size -= 4 << 20;
> + break;
> + case 2: /* 2MB */
> + info->screen_size -= 2 << 20;
> + break;
> + }
> } else
> info->screen_size = s3_memsizes[regval >> 5] << 10;
> info->fix.smem_len = info->screen_size;
>
>
next prev parent reply other threads:[~2011-12-21 21:44 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-19 22:39 [PATCH] s3fb: fix Virge/VX Ondrej Zary
2011-12-19 22:39 ` Ondrej Zary
2011-12-21 21:44 ` Florian Tobias Schandinat [this message]
2011-12-21 21:44 ` Florian Tobias Schandinat
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=4EF25322.1000408@gmx.de \
--to=florianschandinat@gmx.de \
--cc=lethal@linux-sh.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rainbow-software.org \
--cc=santiago@crfreenet.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.