Change ARM core rate.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello.

I have Davinci DM365 board, but I can't find more suitable
mail-listing to ask my qustion.

I have written Linux kernel module.
Main purpose: change ARM core rate.
Davinci DM365 has two PLL: PLL1 and PLL2.

ARM core can be feed by:
* PLLC1SYSCLK1 - fixed all time, equal to 243000 kHz.
* PLLC2SYSCLK2 - that one I can change.

Lower borde ARM core freq == 121500 kHz (must be > pll1_sysclk4 CFG/DMA bus).
Higher borde ARM core freq == 300000 kHz.

To change ARM core freq I do next steps:
1. switch ARM core to PLLC2SYSCLK2
2. reset & configure PLL2.
3. switch back to PLLC2SYSCLK2.
4. call adjust_jiffies() ( snatch from cpufreq.c)

Now I come to standstill.

I got several working configurations, and several not working.
I can't undestand why some of them works, and some not.

Stable work. Switch between next rates work all times:
272000 (kHz), mul=17, div=2
204000 (kHz), mul=17, div=3
252000 (kHz), mul=21, div=3
201600 (kHz), mul=21, div=4
200000 (kHz), mul=25, div=5
249600 (kHz), mul=26, div=4
259200 (kHz), mul=27, div=4
268800 (kHz), mul=28, div=4
278400 (kHz), mul=29, div=4
232000 (kHz), mul=29, div=5
205714 (kHz), mul=30, div=6
297600 (kHz), mul=31, div=4
248000 (kHz), mul=31, div=5
212571 (kHz), mul=31, div=6
186000 (kHz), mul=31, div=7

Don't work - (completely instantaneously hang system):

144000 (kHz), mul=3, div=0
180000 (kHz), mul=15, div=3
136000 (kHz), mul=17, div=5
126000 (kHz), mul=21, div=7
157714 (kHz), mul=23, div=6
171428 (kHz), mul=25, div=6
133333 (kHz), mul=25, div=8
178285 (kHz), mul=26, div=6
162000 (kHz), mul=27, div=7
174000 (kHz), mul=29, div=7
165333 (kHz), mul=31, div=8
158400 (kHz), mul=33, div=9
296000 (kHz), mul=37, div=5
203076 (kHz), mul=55, div=12
299076 (kHz), mul=81, div=12

Can anybody comment this behaviour?


If frequency == 222 000 kHz than system behave quite unstable.
And give next messages:


Backtrace:
Ðâ<c0074c9c>ÐÑ (add_to_page_cache_lru+0x0/0xac) from Ðâ<c0074dbc>ÐÑ
(grab_cache_page_write_begin+0x74/0x9c)
 r5:c46d4268 r4:c03dc480
Ðâ<c0074d48>ÐÑ (grab_cache_page_write_begin+0x0/0x9c) from
Ðâ<c00f35b8>ÐÑ (ext3_write_begin+0x80/0x240)
Ðâ<c00f3538>ÐÑ (ext3_write_begin+0x0/0x240) from Ðâ<c0073d10>ÐÑ
(generic_file_buffered_write+0xf0/0x258)
Ðâ<c0073c20>ÐÑ (generic_file_buffered_write+0x0/0x258) from
Ðâ<c0075e64>ÐÑ (__generic_file_aio_write+0x4a8/0x4f8)
Ðâ<c00759bc>ÐÑ (__generic_file_aio_write+0x0/0x4f8) from
Ðâ<c0075f28>ÐÑ (generic_file_aio_write+0x74/0xdc)
Ðâ<c0075eb4>ÐÑ (generic_file_aio_write+0x0/0xdc) from Ðâ<c009dc1c>ÐÑ
(do_sync_readv_writev+0x98/0xe4)
Ðâ<c009db84>ÐÑ (do_sync_readv_writev+0x0/0xe4) from Ðâ<c009e2e4>ÐÑ
(do_readv_writev+0xb4/0x190)
Ðâ<c009e230>ÐÑ (do_readv_writev+0x0/0x190) from Ðâ<c009e42c>ÐÑ
(vfs_writev+0x6c/0x7c)
Ðâ<c009e3c0>ÐÑ (vfs_writev+0x0/0x7c) from Ðâ<c009e510>ÐÑ (sys_writev+0x44/0x70)
 r5:00000000 r4:0030063f
Ðâ<c009e4cc>ÐÑ (sys_writev+0x0/0x70) from Ðâ<c0028f60>ÐÑ
(ret_fast_syscall+0x0/0x2c)


Backtrace:
Ðâ<c002c2a4>ÐÑ (dump_backtrace+0x0/0x10c) from Ðâ<c029d478>ÐÑ
(dump_stack+0x18/0x1c)
 r7:00000000 r6:c3446738 r5:00017000 r4:00000000
Ðâ<c029d460>ÐÑ (dump_stack+0x0/0x1c) from Ðâ<c0036c74>ÐÑ
(__schedule_bug+0x54/0x60)
Ðâ<c0036c20>ÐÑ (__schedule_bug+0x0/0x60) from Ðâ<c029d6ec>ÐÑ
(schedule+0x68/0x3c4)
 r4:c34bed4c
Ðâ<c029d684>ÐÑ (schedule+0x0/0x3c4) from Ðâ<c00370b8>ÐÑ
(__cond_resched+0x18/0x24)
Ðâ<c00370a0>ÐÑ (__cond_resched+0x0/0x24) from Ðâ<c029db58>ÐÑ
(_cond_resched+0x30/0x40)
Ðâ<c029db28>ÐÑ (_cond_resched+0x0/0x40) from Ðâ<c008b0ec>ÐÑ
(unmap_vmas+0x5d8/0x6a0)
Ðâ<c008ab14>ÐÑ (unmap_vmas+0x0/0x6a0) from Ðâ<c008dd68>ÐÑ (exit_mmap+0xd4/0x208)
Ðâ<c008dc94>ÐÑ (exit_mmap+0x0/0x208) from Ðâ<c003be60>ÐÑ (mmput+0x40/0xf0)
 r8:00000000 r7:c34bec34 r6:c3442320 r5:00000000 r4:c34bec00
Ðâ<c003be20>ÐÑ (mmput+0x0/0xf0) from Ðâ<c0040144>ÐÑ (exit_mm+0x124/0x130)
 r5:c34bec00 r4:00000000
Ðâ<c0040020>ÐÑ (exit_mm+0x0/0x130) from Ðâ<c0041bec>ÐÑ (do_exit+0x190/0x65c)
 r7:c49c3bd8 r6:c3442320 r5:c3442320 r4:0000000b
Ðâ<c0041a5c>ÐÑ (do_exit+0x0/0x65c) from Ðâ<c002c7e0>ÐÑ (die+0x1c4/0x1f4)
Ðâ<c002c61c>ÐÑ (die+0x0/0x1f4) from Ðâ<c002c858>ÐÑ (bad_mode+0x48/0x70)
Ðâ<c002c810>ÐÑ (bad_mode+0x0/0x70) from Ðâ<c00744f8>ÐÑ (find_get_page+0x30/0xb0)
 r4:c03dc480
BUG: scheduling while atomic: syslogd/1411/0x40000002


Main question is:
Why some frequencies are stable, and other does not?
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux