On Wed, 2008-01-02 at 13:30 +0100, ext Frantisek Dufka wrote:
> Igor Stoppa wrote:
> > On Mon, 2007-12-31 at 17:37 +0100, ext Frantisek Dufka wrote:
> >> Igor Stoppa wrote:
> >>> Having the audio path open, but no dsp tack loaded (arm audio) sets the
> >>> clock to 400MHz.
> >> Interesting, so, umm, there is way to play audio from ARM side directly? 
> > 
> > Mixing is still happening on DSP.
> >
> 
> I see so DSP is running fully but there is no dynamic task loaded so the 
> multimedia requirements are low and it can run at 400/133, right? 

So what you are seeing is that the "DSP task policy" is active even
though there are no dynamic dsp task loaded?

I guess that you are running with your own kernel, build from
http://repository.maemo.org/pool/chinook/free/source/k/kernel-source-rx-34 ?

As discussed in other threads -- this kernel is not really state of the
art :-(

Please try to see weather applying the attached patch(*) solve your
problem. 


BR, Klaus

* The patch have been extracted from the kernel that shipped in OS2008.

--- a/arch/arm/plat-omap/dsp/task.c	2008-01-03 12:30:53.000000000 +0200
+++ b/arch/arm/plat-omap/dsp/task.c	2007-11-23 22:33:52.000000000 +0200
@@ -260,6 +260,9 @@
 /* Expected to hold state_sem in caller function */
 static void set_taskdev_state(struct taskdev *dev, long state)
 {
+	if (dev->state == state)
+		return;
+
 	pr_debug("omapdsp: devstate: CHANGE %s[%d]:\"%s\"->\"%s\"\n",
 		 dev->name,
 		 (dev->task ? dev->task->tid : -1),
@@ -272,16 +275,18 @@
 	if ((dev->task) && is_dynamic_task(dev->task->tid)) {
 		int temp = num_dynamic_task;
 
-		if (dev->state == TASKDEV_ST_ATTACHED)
+		if (dev->state & TASKDEV_ST_ATTACHED)
 			num_dynamic_task++;
-		else if (dev->last_state == TASKDEV_ST_ATTACHED)
+		else if (dev->last_state & TASKDEV_ST_ATTACHED)
 			num_dynamic_task--;
+		else
+			return;
 
-		BUG_ON((num_dynamic_task < 0) ||
-		       (num_dynamic_task >= TASKDEV_MAX));
+		BUG_ON(num_dynamic_task < 0);
+		BUG_ON(num_static_task + num_dynamic_task >= TASKDEV_MAX);
 
 		/* Change only if there's any dynamic task or not */
-		if (!(temp*num_dynamic_task))
+		if (!(temp * num_dynamic_task))
 			dvfs_op_policy_update(DSP_DYNAMIC_TASK_CHANGED,
 					      num_dynamic_task);
 	}
@@ -559,6 +564,8 @@
 	devheap  = heap;
 	taskheap = heap + devheapsz;
 
+	num_dynamic_task = 0;
+
 	num_static_task = n;
 	for (i = 0; i < n; i++) {
 		struct taskdev *dev  = &devheap[i];
@@ -1320,7 +1327,6 @@
 	struct dsptask *task;
 	size_t len = vma->vm_end - vma->vm_start;
 
-	BUG_ON(!(dev->state & TASKDEV_ST_ATTACHED));
 	task = dev->task;
 	omap_mmu_exmap_unuse(&dsp_mmu, task->map_base, len);
 }
@@ -1955,7 +1961,9 @@
 	dev->fops.write = NULL;
 	dev->wsz = 0;
 
-	pr_info("omapdsp: taskdev %s disabled.\n", dev->name);
+	pr_info("omapdsp: taskdev %s disabled(%d)\n", dev->name,
+		num_dynamic_task);
+
 	dev->task = NULL;
 }
 
@@ -2047,9 +2055,13 @@
 		goto free_out;
 
 	dsp_task_init(task);
-	pr_info("omapdsp: taskdev %s enabled.\n", dev->name);
+
 	set_taskdev_state(dev, TASKDEV_ST_ATTACHED);
+	pr_info("omapdsp: taskdev %s enabled(%d)\n", dev->name,
+		num_dynamic_task);
+
 	wake_up_interruptible_all(&dev->state_wait_q);
+
 	return 0;
 
 free_out:
_______________________________________________
maemo-developers mailing list
maemo-developers@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-developers

Reply via email to