diff options
Diffstat (limited to 'arch/blackfin')
-rw-r--r-- | arch/blackfin/Kconfig | 175 | ||||
-rw-r--r-- | arch/blackfin/mach-bf533/head.S | 1 | ||||
-rw-r--r-- | arch/blackfin/mach-bf537/head.S | 1 | ||||
-rw-r--r-- | arch/blackfin/mach-bf548/head.S | 1 | ||||
-rw-r--r-- | arch/blackfin/mach-bf561/head.S | 1 | ||||
-rw-r--r-- | arch/blackfin/mach-common/Makefile | 2 | ||||
-rw-r--r-- | arch/blackfin/mach-common/arch_checks.c | 55 | ||||
-rw-r--r-- | arch/blackfin/mach-common/dpmc.S | 2 |
8 files changed, 174 insertions, 64 deletions
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 5c1e215c8b6f..9ce675e80260 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -323,7 +323,7 @@ config CMDLINE | |||
323 | to the kernel, you may specify one here. As a minimum, you should specify | 323 | to the kernel, you may specify one here. As a minimum, you should specify |
324 | the memory size and the root device (e.g., mem=8M, root=/dev/nfs). | 324 | the memory size and the root device (e.g., mem=8M, root=/dev/nfs). |
325 | 325 | ||
326 | comment "Board Setup" | 326 | comment "Clock/PLL Setup" |
327 | 327 | ||
328 | config CLKIN_HZ | 328 | config CLKIN_HZ |
329 | int "Crystal Frequency in Hz" | 329 | int "Crystal Frequency in Hz" |
@@ -335,6 +335,118 @@ config CLKIN_HZ | |||
335 | help | 335 | help |
336 | The frequency of CLKIN crystal oscillator on the board in Hz. | 336 | The frequency of CLKIN crystal oscillator on the board in Hz. |
337 | 337 | ||
338 | config BFIN_KERNEL_CLOCK | ||
339 | bool "Re-program Clocks while Kernel boots?" | ||
340 | default n | ||
341 | help | ||
342 | This option decides if kernel clocks are re-programed from the | ||
343 | bootloader settings. If the clocks are not set, the SDRAM settings | ||
344 | are also not changed, and the Bootloader does 100% of the hardware | ||
345 | configuration. | ||
346 | |||
347 | config PLL_BYPASS | ||
348 | bool "Bypass PLL" | ||
349 | depends on BFIN_KERNEL_CLOCK | ||
350 | default n | ||
351 | |||
352 | config CLKIN_HALF | ||
353 | bool "Half Clock In" | ||
354 | depends on BFIN_KERNEL_CLOCK && (! PLL_BYPASS) | ||
355 | default n | ||
356 | help | ||
357 | If this is set the clock will be divided by 2, before it goes to the PLL. | ||
358 | |||
359 | config VCO_MULT | ||
360 | int "VCO Multiplier" | ||
361 | depends on BFIN_KERNEL_CLOCK && (! PLL_BYPASS) | ||
362 | range 1 64 | ||
363 | default "22" if BFIN533_EZKIT | ||
364 | default "45" if BFIN533_STAMP | ||
365 | default "20" if BFIN537_STAMP | ||
366 | default "22" if BFIN533_BLUETECHNIX_CM | ||
367 | default "20" if BFIN537_BLUETECHNIX_CM | ||
368 | default "20" if BFIN561_BLUETECHNIX_CM | ||
369 | default "20" if BFIN561_EZKIT | ||
370 | help | ||
371 | This controls the frequency of the on-chip PLL. This can be between 1 and 64. | ||
372 | PLL Frequency = (Crystal Frequency) * (this setting) | ||
373 | |||
374 | choice | ||
375 | prompt "Core Clock Divider" | ||
376 | depends on BFIN_KERNEL_CLOCK | ||
377 | default CCLK_DIV_1 | ||
378 | help | ||
379 | This sets the frequency of the core. It can be 1, 2, 4 or 8 | ||
380 | Core Frequency = (PLL frequency) / (this setting) | ||
381 | |||
382 | config CCLK_DIV_1 | ||
383 | bool "1" | ||
384 | |||
385 | config CCLK_DIV_2 | ||
386 | bool "2" | ||
387 | |||
388 | config CCLK_DIV_4 | ||
389 | bool "4" | ||
390 | |||
391 | config CCLK_DIV_8 | ||
392 | bool "8" | ||
393 | endchoice | ||
394 | |||
395 | config SCLK_DIV | ||
396 | int "System Clock Divider" | ||
397 | depends on BFIN_KERNEL_CLOCK | ||
398 | range 1 15 | ||
399 | default 5 if BFIN533_EZKIT | ||
400 | default 5 if BFIN533_STAMP | ||
401 | default 4 if BFIN537_STAMP | ||
402 | default 5 if BFIN533_BLUETECHNIX_CM | ||
403 | default 4 if BFIN537_BLUETECHNIX_CM | ||
404 | default 4 if BFIN561_BLUETECHNIX_CM | ||
405 | default 5 if BFIN561_EZKIT | ||
406 | help | ||
407 | This sets the frequency of the system clock (including SDRAM or DDR). | ||
408 | This can be between 1 and 15 | ||
409 | System Clock = (PLL frequency) / (this setting) | ||
410 | |||
411 | # | ||
412 | # Max & Min Speeds for various Chips | ||
413 | # | ||
414 | config MAX_VCO_HZ | ||
415 | int | ||
416 | default 600000000 if BF522 | ||
417 | default 600000000 if BF525 | ||
418 | default 600000000 if BF527 | ||
419 | default 400000000 if BF531 | ||
420 | default 400000000 if BF532 | ||
421 | default 750000000 if BF533 | ||
422 | default 500000000 if BF534 | ||
423 | default 400000000 if BF536 | ||
424 | default 600000000 if BF537 | ||
425 | default 533000000 if BF538 | ||
426 | default 533000000 if BF539 | ||
427 | default 600000000 if BF542 | ||
428 | default 533000000 if BF544 | ||
429 | default 533000000 if BF549 | ||
430 | default 600000000 if BF561 | ||
431 | |||
432 | config MIN_VCO_HZ | ||
433 | int | ||
434 | default 50000000 | ||
435 | |||
436 | config MAX_SCLK_HZ | ||
437 | int | ||
438 | default 133000000 | ||
439 | |||
440 | config MIN_SCLK_HZ | ||
441 | int | ||
442 | default 27000000 | ||
443 | |||
444 | comment "Kernel Timer/Scheduler" | ||
445 | |||
446 | source kernel/Kconfig.hz | ||
447 | |||
448 | comment "Memory Setup" | ||
449 | |||
338 | config MEM_SIZE | 450 | config MEM_SIZE |
339 | int "SDRAM Memory Size in MBytes" | 451 | int "SDRAM Memory Size in MBytes" |
340 | default 32 if BFIN533_EZKIT | 452 | default 32 if BFIN533_EZKIT |
@@ -448,10 +560,6 @@ endmenu | |||
448 | 560 | ||
449 | menu "Blackfin Kernel Optimizations" | 561 | menu "Blackfin Kernel Optimizations" |
450 | 562 | ||
451 | comment "Timer Tick" | ||
452 | |||
453 | source kernel/Kconfig.hz | ||
454 | |||
455 | comment "Memory Optimizations" | 563 | comment "Memory Optimizations" |
456 | 564 | ||
457 | config I_ENTRY_L1 | 565 | config I_ENTRY_L1 |
@@ -672,63 +780,6 @@ config L1_MAX_PIECE | |||
672 | Set the max memory pieces for the L1 SRAM allocation algorithm. | 780 | Set the max memory pieces for the L1 SRAM allocation algorithm. |
673 | Min value is 16. Max value is 1024. | 781 | Min value is 16. Max value is 1024. |
674 | 782 | ||
675 | menu "Clock Settings" | ||
676 | |||
677 | |||
678 | config BFIN_KERNEL_CLOCK | ||
679 | bool "Re-program Clocks while Kernel boots?" | ||
680 | default n | ||
681 | help | ||
682 | This option decides if kernel clocks are re-programed from the | ||
683 | bootloader settings. If the clocks are not set, the SDRAM settings | ||
684 | are also not changed, and the Bootloader does 100% of the hardware | ||
685 | configuration. | ||
686 | |||
687 | config VCO_MULT | ||
688 | int "VCO Multiplier" | ||
689 | depends on BFIN_KERNEL_CLOCK | ||
690 | default "22" if BFIN533_EZKIT | ||
691 | default "45" if BFIN533_STAMP | ||
692 | default "20" if BFIN537_STAMP | ||
693 | default "22" if BFIN533_BLUETECHNIX_CM | ||
694 | default "20" if BFIN537_BLUETECHNIX_CM | ||
695 | default "20" if BFIN561_BLUETECHNIX_CM | ||
696 | default "20" if BFIN561_EZKIT | ||
697 | |||
698 | config CCLK_DIV | ||
699 | int "Core Clock Divider" | ||
700 | depends on BFIN_KERNEL_CLOCK | ||
701 | default 1 if BFIN533_EZKIT | ||
702 | default 1 if BFIN533_STAMP | ||
703 | default 1 if BFIN537_STAMP | ||
704 | default 1 if BFIN533_BLUETECHNIX_CM | ||
705 | default 1 if BFIN537_BLUETECHNIX_CM | ||
706 | default 1 if BFIN561_BLUETECHNIX_CM | ||
707 | default 1 if BFIN561_EZKIT | ||
708 | |||
709 | config SCLK_DIV | ||
710 | int "System Clock Divider" | ||
711 | depends on BFIN_KERNEL_CLOCK | ||
712 | default 5 if BFIN533_EZKIT | ||
713 | default 5 if BFIN533_STAMP | ||
714 | default 4 if BFIN537_STAMP | ||
715 | default 5 if BFIN533_BLUETECHNIX_CM | ||
716 | default 4 if BFIN537_BLUETECHNIX_CM | ||
717 | default 4 if BFIN561_BLUETECHNIX_CM | ||
718 | default 5 if BFIN561_EZKIT | ||
719 | |||
720 | config CLKIN_HALF | ||
721 | bool "Half ClockIn" | ||
722 | depends on BFIN_KERNEL_CLOCK | ||
723 | default n | ||
724 | |||
725 | config PLL_BYPASS | ||
726 | bool "Bypass PLL" | ||
727 | depends on BFIN_KERNEL_CLOCK | ||
728 | default n | ||
729 | |||
730 | endmenu | ||
731 | |||
732 | comment "Asynchonous Memory Configuration" | 783 | comment "Asynchonous Memory Configuration" |
733 | 784 | ||
734 | menu "EBIU_AMBCTL Global Control" | 785 | menu "EBIU_AMBCTL Global Control" |
diff --git a/arch/blackfin/mach-bf533/head.S b/arch/blackfin/mach-bf533/head.S index 69da0e8b7732..9c5378bb8a28 100644 --- a/arch/blackfin/mach-bf533/head.S +++ b/arch/blackfin/mach-bf533/head.S | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/blackfin.h> | 32 | #include <asm/blackfin.h> |
33 | #include <asm/trace.h> | 33 | #include <asm/trace.h> |
34 | #if CONFIG_BFIN_KERNEL_CLOCK | 34 | #if CONFIG_BFIN_KERNEL_CLOCK |
35 | #include <asm/mach-common/clocks.h> | ||
35 | #include <asm/mach/mem_init.h> | 36 | #include <asm/mach/mem_init.h> |
36 | #endif | 37 | #endif |
37 | #if CONFIG_DEBUG_KERNEL_START | 38 | #if CONFIG_DEBUG_KERNEL_START |
diff --git a/arch/blackfin/mach-bf537/head.S b/arch/blackfin/mach-bf537/head.S index b1d4b91b7aed..82ea04705917 100644 --- a/arch/blackfin/mach-bf537/head.S +++ b/arch/blackfin/mach-bf537/head.S | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <asm/trace.h> | 33 | #include <asm/trace.h> |
34 | 34 | ||
35 | #if CONFIG_BFIN_KERNEL_CLOCK | 35 | #if CONFIG_BFIN_KERNEL_CLOCK |
36 | #include <asm/mach-common/clocks.h> | ||
36 | #include <asm/mach/mem_init.h> | 37 | #include <asm/mach/mem_init.h> |
37 | #endif | 38 | #endif |
38 | 39 | ||
diff --git a/arch/blackfin/mach-bf548/head.S b/arch/blackfin/mach-bf548/head.S index 47cd91777a3b..72087c2e6a83 100644 --- a/arch/blackfin/mach-bf548/head.S +++ b/arch/blackfin/mach-bf548/head.S | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <asm/blackfin.h> | 31 | #include <asm/blackfin.h> |
32 | #include <asm/trace.h> | 32 | #include <asm/trace.h> |
33 | #if CONFIG_BFIN_KERNEL_CLOCK | 33 | #if CONFIG_BFIN_KERNEL_CLOCK |
34 | #include <asm/mach-common/clocks.h> | ||
34 | #include <asm/mach/mem_init.h> | 35 | #include <asm/mach/mem_init.h> |
35 | #endif | 36 | #endif |
36 | 37 | ||
diff --git a/arch/blackfin/mach-bf561/head.S b/arch/blackfin/mach-bf561/head.S index 173893429b04..83cd3f9bbf2d 100644 --- a/arch/blackfin/mach-bf561/head.S +++ b/arch/blackfin/mach-bf561/head.S | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <asm/trace.h> | 33 | #include <asm/trace.h> |
34 | 34 | ||
35 | #if CONFIG_BFIN_KERNEL_CLOCK | 35 | #if CONFIG_BFIN_KERNEL_CLOCK |
36 | #include <asm/mach-common/clocks.h> | ||
36 | #include <asm/mach/mem_init.h> | 37 | #include <asm/mach/mem_init.h> |
37 | #endif | 38 | #endif |
38 | 39 | ||
diff --git a/arch/blackfin/mach-common/Makefile b/arch/blackfin/mach-common/Makefile index 0279ede70392..4d7733dfd5de 100644 --- a/arch/blackfin/mach-common/Makefile +++ b/arch/blackfin/mach-common/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | obj-y := \ | 5 | obj-y := \ |
6 | cache.o cacheinit.o cplbhdlr.o cplbmgr.o entry.o \ | 6 | cache.o cacheinit.o cplbhdlr.o cplbmgr.o entry.o \ |
7 | interrupt.o lock.o irqpanic.o | 7 | interrupt.o lock.o irqpanic.o arch_checks.o |
8 | 8 | ||
9 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | 9 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o |
10 | obj-$(CONFIG_BFIN_SINGLE_CORE) += ints-priority-sc.o | 10 | obj-$(CONFIG_BFIN_SINGLE_CORE) += ints-priority-sc.o |
diff --git a/arch/blackfin/mach-common/arch_checks.c b/arch/blackfin/mach-common/arch_checks.c new file mode 100644 index 000000000000..f9160d83b91f --- /dev/null +++ b/arch/blackfin/mach-common/arch_checks.c | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * File: arch/blackfin/mach-common/arch_checks.c | ||
3 | * Based on: | ||
4 | * Author: Robin Getz <rgetz@blackfin.uclinux.org> | ||
5 | * | ||
6 | * Created: 25Jul07 | ||
7 | * Description: Do some checking to make sure things are OK | ||
8 | * | ||
9 | * Modified: | ||
10 | * Copyright 2004-2007 Analog Devices Inc. | ||
11 | * | ||
12 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | ||
15 | * it under the terms of the GNU General Public License as published by | ||
16 | * the Free Software Foundation; either version 2 of the License, or | ||
17 | * (at your option) any later version. | ||
18 | * | ||
19 | * This program is distributed in the hope that it will be useful, | ||
20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
22 | * GNU General Public License for more details. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License | ||
25 | * along with this program; if not, see the file COPYING, or write | ||
26 | * to the Free Software Foundation, Inc., | ||
27 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
28 | */ | ||
29 | |||
30 | #include <asm/mach/anomaly.h> | ||
31 | #include <asm/mach-common/clocks.h> | ||
32 | |||
33 | #ifdef CONFIG_BFIN_KERNEL_CLOCK | ||
34 | |||
35 | # if (CONFIG_VCO_HZ > CONFIG_MAX_VCO_HZ) | ||
36 | # error "VCO selected is more than maximum value. Please change the VCO multipler" | ||
37 | # endif | ||
38 | |||
39 | # if (CONFIG_SCLK_HZ > CONFIG_MAX_SCLK_HZ) | ||
40 | # error "Sclk value selected is more than maximum. Please select a proper value for SCLK multiplier" | ||
41 | # endif | ||
42 | |||
43 | # if (CONFIG_SCLK_HZ < CONFIG_MIN_SCLK_HZ) | ||
44 | # error "Sclk value selected is less than minimum. Please select a proper value for SCLK multiplier" | ||
45 | # endif | ||
46 | |||
47 | # if (ANOMALY_05000273) && (CONFIG_SCLK_HZ * 2 > CONFIG_CCLK_HZ) | ||
48 | # error "ANOMALY 05000273, please make sure CCLK is at least 2x SCLK" | ||
49 | # endif | ||
50 | |||
51 | # if (CONFIG_SCLK_HZ > CONFIG_CCLK_HZ) && (CONFIG_SCLK_HZ != CONFIG_CLKIN_HZ) && (CONFIG_CCLK_HZ != CONFIG_CLKIN_HZ) | ||
52 | # error "Please select sclk less than cclk" | ||
53 | # endif | ||
54 | |||
55 | #endif /* CONFIG_BFIN_KERNEL_CLOCK */ | ||
diff --git a/arch/blackfin/mach-common/dpmc.S b/arch/blackfin/mach-common/dpmc.S index 04194dca0151..39fbc2861107 100644 --- a/arch/blackfin/mach-common/dpmc.S +++ b/arch/blackfin/mach-common/dpmc.S | |||
@@ -300,7 +300,7 @@ ENTRY(_sleep_deeper) | |||
300 | P0.H = hi(PLL_CTL); | 300 | P0.H = hi(PLL_CTL); |
301 | P0.L = lo(PLL_CTL); | 301 | P0.L = lo(PLL_CTL); |
302 | R5 = W[P0](z); | 302 | R5 = W[P0](z); |
303 | R0.L = (MIN_VC/CONFIG_CLKIN_HZ) << 9; | 303 | R0.L = (CONFIG_MIN_VCO_HZ/CONFIG_CLKIN_HZ) << 9; |
304 | W[P0] = R0.l; | 304 | W[P0] = R0.l; |
305 | 305 | ||
306 | SSYNC; | 306 | SSYNC; |