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