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
[email protected]
https://lists.maemo.org/mailman/listinfo/maemo-developers