linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
To: Linux Frame Buffer Device Development
	<linux-fbdev-devel@lists.sourceforge.net>
Cc: James Simmons <jsimmons@infradead.org>,
	Paul Mackerras <paulus@samba.org>,
	Linux/PPC Development <linuxppc-dev@ozlabs.org>
Subject: Re: [Linux-fbdev-devel] [PATCH 0/10] ps3av/fb drivers for 2.6.21
Date: Wed, 7 Feb 2007 17:51:12 +0100 (CET)	[thread overview]
Message-ID: <Pine.LNX.4.62.0702071743040.29060@pademelon.sonytel.be> (raw)
In-Reply-To: <Pine.LNX.4.62.0702070859050.31772@pademelon.sonytel.be>

On Wed, 7 Feb 2007, Geert Uytterhoeven wrote:
> On Wed, 7 Feb 2007, Benjamin Herrenschmidt wrote:
> > > ps3av: Use a kernel thread to handle the actual video mode setting, as this
> > > involves some quite big delays.
> > 
> > The ps3 fbdev already has it's own kernel thread no ? Why use a second
> > one ? We could just have the ps3av code keep the delays but be called by
> > a thread ?
> 
> That's another possibility.  And since the screen is blanked during mode
> change, there's no need to refresh it, and I may even get rid of the call to
> ps3fb_flip_ctl() in ps3av.
> 
> I'll look into it...

Below's a new patch (take 3).

But it doesn't work well: after each mode change, the old contents of the
screen are visible for a (noticable) fraction of a second.
Ps3fbd doesn't refresh the screen contents until ps3av_set_video_mode()
returns, which is longer than my display needs to sync to the new video mode
(this was actually the reason behind the msleep() calls).

I also could not get rid of the calls to ps3fb_flip_ctl() in ps3av, as screen
updates have to be disabled while sending other AV packets, too.

So I prefer the previous solution, using a new ps3av kernel thread.
Unless anyone has a better solution, of course :-)
----

--- ps3-linux-2.6.20.orig/drivers/video/ps3fb.c
+++ ps3-linux-2.6.20/drivers/video/ps3fb.c
@@ -138,6 +138,7 @@ struct ps3fb_priv {
 	u32 num_frames;		/* num of frame buffers */
 	atomic_t ext_flip;	/* on/off flip with vsync */
 	atomic_t f_count;	/* fb_open count */
+	atomic_t change_mode;	/* tell ps3fb to change the video mode */
 	int is_blanked;
 };
 static struct ps3fb_priv ps3fb;
@@ -294,7 +295,7 @@ static const struct fb_videomode ps3fb_m
 #define VP_OFF(i)	(WIDTH(i) * Y_OFF(i) * BPP + X_OFF(i) * BPP)
 #define FB_OFF(i)	(GPU_OFFSET - VP_OFF(i) % GPU_OFFSET)
 
-static int ps3fb_mode = 0;
+static int ps3fb_mode;
 module_param(ps3fb_mode, bool, 0);
 
 static char *mode_option __initdata = NULL;
@@ -542,7 +543,6 @@ static int ps3fb_set_par(struct fb_info 
 	unsigned int mode;
 	int i;
 	unsigned long offset;
-	static int first = 1;
 
 	DPRINTK("xres:%d xv:%d yres:%d yv:%d clock:%d\n",
 		info->var.xres, info->var.xres_virtual,
@@ -565,10 +565,10 @@ static int ps3fb_set_par(struct fb_info 
 	/* Keep the special bits we cannot set using fb_var_screeninfo */
 	ps3fb_mode = (ps3fb_mode & ~PS3AV_MODE_MASK) | mode;
 
-	if (ps3av_set_video_mode(ps3fb_mode, first))
-		return -EINVAL;
+	/* Wake up ps3fbd to do the actual mode change */
+	atomic_inc(&ps3fb.change_mode);
+	up(&ps3fb.sem);
 
-	first = 0;
 	return 0;
 }
 
@@ -805,9 +805,17 @@ static int ps3fb_ioctl(struct fb_info *i
 
 static int ps3fbd(void *arg)
 {
+	int first = 1;
+
 	daemonize("ps3fbd");
 	for (;;) {
 		down(&ps3fb.sem);
+		if (atomic_dec_if_positive(&ps3fb.change_mode) >= 0) {
+			if (ps3av_set_video_mode(ps3fb_mode, first))
+				printk(KERN_ERR
+				       "ps3fbd: ps3av_set_video_mode failed\n");
+			first = 0;
+		}
 		if (atomic_read(&ps3fb.ext_flip) == 0)
 			ps3fb_sync(0);	/* single buffer */
 	}

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- Sony Network and Software Technology Center Europe (NSCE)
Geert.Uytterhoeven@sonycom.com ------- The Corporate Village, Da Vincilaan 7-D1
Voice +32-2-7008453 Fax +32-2-7008622 ---------------- B-1935 Zaventem, Belgium

  reply	other threads:[~2007-02-07 16:51 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-30 16:57 [PATCH 0/10] ps3av/fb drivers for 2.6.21 Geert Uytterhoeven
2007-01-30 16:59 ` [PATCH 1/10] ps3: Add shutdown to virtual uart port driver framework Geert Uytterhoeven
2007-01-30 20:28   ` Geoff Levand
2007-01-30 17:00 ` [PATCH 2/10] ps3: AV Settings Driver Library Geert Uytterhoeven
2007-01-31 16:34   ` Geoff Levand
2007-01-30 17:00 ` fbdev modedb: allow refresh rates for named video modes Geert Uytterhoeven
2007-01-30 17:01 ` [PATCH 4/10] fbdev modedb: make more pointer parameters const Geert Uytterhoeven
2007-01-30 17:01 ` [PATCH 5/10] fb_videomode_to_var: reset virtual screen parameters Geert Uytterhoeven
2007-01-30 17:02 ` [PATCH 6/10] ps3: Preallocate bootmem memory for ps3fb Geert Uytterhoeven
2007-01-30 17:02 ` [PATCH 7/10] ps3: Virtual Frame Buffer Driver Geert Uytterhoeven
2007-01-30 17:02 ` [PATCH 8/10] ps3: disable display flipping during mode changes Geert Uytterhoeven
2007-01-30 17:03 ` [PATCH 9/10] ps3: cleanup ps3fb before clearing HPTE Geert Uytterhoeven
2007-01-30 17:03 ` [PATCH 10/10] ps3: ps3av/fb defconfig updates Geert Uytterhoeven
2007-01-30 17:06 ` [PATCH 3/10] fbdev modedb: allow refresh rates for named video modes Geert Uytterhoeven
2007-02-05 15:33 ` [PATCH 0/10] ps3av/fb drivers for 2.6.21 Geert Uytterhoeven
2007-02-06 15:01   ` Geert Uytterhoeven
2007-02-06 20:49     ` Benjamin Herrenschmidt
2007-02-07  8:01       ` Geert Uytterhoeven
2007-02-07 16:51         ` Geert Uytterhoeven [this message]
2007-02-07 21:07           ` [Linux-fbdev-devel] " Benjamin Herrenschmidt
2007-02-08  8:13             ` Geert Uytterhoeven

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=Pine.LNX.4.62.0702071743040.29060@pademelon.sonytel.be \
    --to=geert.uytterhoeven@sonycom.com \
    --cc=jsimmons@infradead.org \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.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;
as well as URLs for NNTP newsgroup(s).