diff options
author | Paul Mackerras <paulus@samba.org> | 2008-01-30 19:25:51 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-01-30 19:25:51 -0500 |
commit | bd45ac0c5daae35e7c71138172e63df5cf644cf6 (patch) | |
tree | 5eb5a599bf6a9d7a8a34e802db932aa9e9555de4 /arch/blackfin | |
parent | 4eece4ccf997c0e6d8fdad3d842e37b16b8d705f (diff) | |
parent | 5bdeae46be6dfe9efa44a548bd622af325f4bdb4 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'arch/blackfin')
58 files changed, 2392 insertions, 625 deletions
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 25232ba08119..fc7ca86ac8bf 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -85,11 +85,26 @@ config BF522 | |||
85 | help | 85 | help |
86 | BF522 Processor Support. | 86 | BF522 Processor Support. |
87 | 87 | ||
88 | config BF523 | ||
89 | bool "BF523" | ||
90 | help | ||
91 | BF523 Processor Support. | ||
92 | |||
93 | config BF524 | ||
94 | bool "BF524" | ||
95 | help | ||
96 | BF524 Processor Support. | ||
97 | |||
88 | config BF525 | 98 | config BF525 |
89 | bool "BF525" | 99 | bool "BF525" |
90 | help | 100 | help |
91 | BF525 Processor Support. | 101 | BF525 Processor Support. |
92 | 102 | ||
103 | config BF526 | ||
104 | bool "BF526" | ||
105 | help | ||
106 | BF526 Processor Support. | ||
107 | |||
93 | config BF527 | 108 | config BF527 |
94 | bool "BF527" | 109 | bool "BF527" |
95 | help | 110 | help |
@@ -198,7 +213,7 @@ endchoice | |||
198 | 213 | ||
199 | config BF52x | 214 | config BF52x |
200 | bool | 215 | bool |
201 | depends on (BF522 || BF525 || BF527) | 216 | depends on (BF522 || BF523 || BF524 || BF525 || BF526 || BF527) |
202 | default y | 217 | default y |
203 | 218 | ||
204 | config BF53x | 219 | config BF53x |
@@ -253,11 +268,6 @@ config MEM_MT48LC32M16A2TG_75 | |||
253 | depends on (BFIN527_EZKIT) | 268 | depends on (BFIN527_EZKIT) |
254 | default y | 269 | default y |
255 | 270 | ||
256 | config BFIN_SHARED_FLASH_ENET | ||
257 | bool | ||
258 | depends on (BFIN533_STAMP) | ||
259 | default y | ||
260 | |||
261 | source "arch/blackfin/mach-bf527/Kconfig" | 271 | source "arch/blackfin/mach-bf527/Kconfig" |
262 | source "arch/blackfin/mach-bf533/Kconfig" | 272 | source "arch/blackfin/mach-bf533/Kconfig" |
263 | source "arch/blackfin/mach-bf561/Kconfig" | 273 | source "arch/blackfin/mach-bf561/Kconfig" |
@@ -317,7 +327,7 @@ config VCO_MULT | |||
317 | range 1 64 | 327 | range 1 64 |
318 | default "22" if BFIN533_EZKIT | 328 | default "22" if BFIN533_EZKIT |
319 | default "45" if BFIN533_STAMP | 329 | default "45" if BFIN533_STAMP |
320 | default "20" if (BFIN537_STAMP || BFIN527_EZKIT) | 330 | default "20" if (BFIN537_STAMP || BFIN527_EZKIT || BFIN548_EZKIT) |
321 | default "22" if BFIN533_BLUETECHNIX_CM | 331 | default "22" if BFIN533_BLUETECHNIX_CM |
322 | default "20" if BFIN537_BLUETECHNIX_CM | 332 | default "20" if BFIN537_BLUETECHNIX_CM |
323 | default "20" if BFIN561_BLUETECHNIX_CM | 333 | default "20" if BFIN561_BLUETECHNIX_CM |
@@ -354,7 +364,7 @@ config SCLK_DIV | |||
354 | range 1 15 | 364 | range 1 15 |
355 | default 5 if BFIN533_EZKIT | 365 | default 5 if BFIN533_EZKIT |
356 | default 5 if BFIN533_STAMP | 366 | default 5 if BFIN533_STAMP |
357 | default 4 if (BFIN537_STAMP || BFIN527_EZKIT) | 367 | default 4 if (BFIN537_STAMP || BFIN527_EZKIT || BFIN548_EZKIT) |
358 | default 5 if BFIN533_BLUETECHNIX_CM | 368 | default 5 if BFIN533_BLUETECHNIX_CM |
359 | default 4 if BFIN537_BLUETECHNIX_CM | 369 | default 4 if BFIN537_BLUETECHNIX_CM |
360 | default 4 if BFIN561_BLUETECHNIX_CM | 370 | default 4 if BFIN561_BLUETECHNIX_CM |
@@ -371,7 +381,10 @@ config SCLK_DIV | |||
371 | config MAX_VCO_HZ | 381 | config MAX_VCO_HZ |
372 | int | 382 | int |
373 | default 600000000 if BF522 | 383 | default 600000000 if BF522 |
384 | default 400000000 if BF523 | ||
385 | default 400000000 if BF524 | ||
374 | default 600000000 if BF525 | 386 | default 600000000 if BF525 |
387 | default 400000000 if BF526 | ||
375 | default 600000000 if BF527 | 388 | default 600000000 if BF527 |
376 | default 400000000 if BF531 | 389 | default 400000000 if BF531 |
377 | default 400000000 if BF532 | 390 | default 400000000 if BF532 |
@@ -383,6 +396,8 @@ config MAX_VCO_HZ | |||
383 | default 533333333 if BF539 | 396 | default 533333333 if BF539 |
384 | default 600000000 if BF542 | 397 | default 600000000 if BF542 |
385 | default 533333333 if BF544 | 398 | default 533333333 if BF544 |
399 | default 600000000 if BF547 | ||
400 | default 600000000 if BF548 | ||
386 | default 533333333 if BF549 | 401 | default 533333333 if BF549 |
387 | default 600000000 if BF561 | 402 | default 600000000 if BF561 |
388 | 403 | ||
@@ -409,6 +424,7 @@ config MEM_SIZE | |||
409 | default 32 if BFIN533_EZKIT | 424 | default 32 if BFIN533_EZKIT |
410 | default 64 if BFIN527_EZKIT | 425 | default 64 if BFIN527_EZKIT |
411 | default 64 if BFIN537_STAMP | 426 | default 64 if BFIN537_STAMP |
427 | default 64 if BFIN548_EZKIT | ||
412 | default 64 if BFIN561_EZKIT | 428 | default 64 if BFIN561_EZKIT |
413 | default 128 if BFIN533_STAMP | 429 | default 128 if BFIN533_STAMP |
414 | default 64 if PNAV10 | 430 | default 64 if PNAV10 |
@@ -416,6 +432,7 @@ config MEM_SIZE | |||
416 | 432 | ||
417 | config MEM_ADD_WIDTH | 433 | config MEM_ADD_WIDTH |
418 | int "SDRAM Memory Address Width" | 434 | int "SDRAM Memory Address Width" |
435 | depends on (!BF54x) | ||
419 | default 9 if BFIN533_EZKIT | 436 | default 9 if BFIN533_EZKIT |
420 | default 9 if BFIN561_EZKIT | 437 | default 9 if BFIN561_EZKIT |
421 | default 9 if H8606_HVSISTEMAS | 438 | default 9 if H8606_HVSISTEMAS |
@@ -424,6 +441,19 @@ config MEM_ADD_WIDTH | |||
424 | default 11 if BFIN533_STAMP | 441 | default 11 if BFIN533_STAMP |
425 | default 10 if PNAV10 | 442 | default 10 if PNAV10 |
426 | 443 | ||
444 | |||
445 | choice | ||
446 | prompt "DDR SDRAM Chip Type" | ||
447 | depends on BFIN548_EZKIT | ||
448 | default MEM_MT46V32M16_5B | ||
449 | |||
450 | config MEM_MT46V32M16_6T | ||
451 | bool "MT46V32M16_6T" | ||
452 | |||
453 | config MEM_MT46V32M16_5B | ||
454 | bool "MT46V32M16_5B" | ||
455 | endchoice | ||
456 | |||
427 | config ENET_FLASH_PIN | 457 | config ENET_FLASH_PIN |
428 | int "PF port/pin used for flash and ethernet sharing" | 458 | int "PF port/pin used for flash and ethernet sharing" |
429 | depends on (BFIN533_STAMP) | 459 | depends on (BFIN533_STAMP) |
@@ -448,40 +478,6 @@ config BOOT_LOAD | |||
448 | memory region is used to capture NULL pointer references as well | 478 | memory region is used to capture NULL pointer references as well |
449 | as some core kernel functions. | 479 | as some core kernel functions. |
450 | 480 | ||
451 | comment "LED Status Indicators" | ||
452 | depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM) | ||
453 | |||
454 | config BFIN_ALIVE_LED | ||
455 | bool "Enable Board Alive" | ||
456 | depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM) | ||
457 | default n | ||
458 | help | ||
459 | Blink the LEDs you select when the kernel is running. Helps detect | ||
460 | a hung kernel. | ||
461 | |||
462 | config BFIN_ALIVE_LED_NUM | ||
463 | int "LED" | ||
464 | depends on BFIN_ALIVE_LED | ||
465 | range 1 3 if BFIN533_STAMP | ||
466 | default "3" if BFIN533_STAMP | ||
467 | help | ||
468 | Select the LED (marked on the board) for you to blink. | ||
469 | |||
470 | config BFIN_IDLE_LED | ||
471 | bool "Enable System Load/Idle LED" | ||
472 | depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM) | ||
473 | default n | ||
474 | help | ||
475 | Blinks the LED you select when to determine kernel load. | ||
476 | |||
477 | config BFIN_IDLE_LED_NUM | ||
478 | int "LED" | ||
479 | depends on BFIN_IDLE_LED | ||
480 | range 1 3 if BFIN533_STAMP | ||
481 | default "2" if BFIN533_STAMP | ||
482 | help | ||
483 | Select the LED (marked on the board) for you to blink. | ||
484 | |||
485 | choice | 481 | choice |
486 | prompt "Blackfin Exception Scratch Register" | 482 | prompt "Blackfin Exception Scratch Register" |
487 | default BFIN_SCRATCH_REG_RETN | 483 | default BFIN_SCRATCH_REG_RETN |
@@ -528,41 +524,6 @@ config BFIN_SCRATCH_REG_CYCLES | |||
528 | 524 | ||
529 | endchoice | 525 | endchoice |
530 | 526 | ||
531 | # | ||
532 | # Sorry - but you need to put the hex address here - | ||
533 | # | ||
534 | |||
535 | # Flag Data register | ||
536 | config BFIN_ALIVE_LED_PORT | ||
537 | hex | ||
538 | default 0xFFC00700 if (BFIN533_STAMP) | ||
539 | |||
540 | # Peripheral Flag Direction Register | ||
541 | config BFIN_ALIVE_LED_DPORT | ||
542 | hex | ||
543 | default 0xFFC00730 if (BFIN533_STAMP) | ||
544 | |||
545 | config BFIN_ALIVE_LED_PIN | ||
546 | hex | ||
547 | default 0x04 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 1) | ||
548 | default 0x08 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 2) | ||
549 | default 0x10 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 3) | ||
550 | |||
551 | config BFIN_IDLE_LED_PORT | ||
552 | hex | ||
553 | default 0xFFC00700 if (BFIN533_STAMP) | ||
554 | |||
555 | # Peripheral Flag Direction Register | ||
556 | config BFIN_IDLE_LED_DPORT | ||
557 | hex | ||
558 | default 0xFFC00730 if (BFIN533_STAMP) | ||
559 | |||
560 | config BFIN_IDLE_LED_PIN | ||
561 | hex | ||
562 | default 0x04 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 1) | ||
563 | default 0x08 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 2) | ||
564 | default 0x10 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 3) | ||
565 | |||
566 | endmenu | 527 | endmenu |
567 | 528 | ||
568 | 529 | ||
@@ -799,6 +760,15 @@ config L1_MAX_PIECE | |||
799 | Set the max memory pieces for the L1 SRAM allocation algorithm. | 760 | Set the max memory pieces for the L1 SRAM allocation algorithm. |
800 | Min value is 16. Max value is 1024. | 761 | Min value is 16. Max value is 1024. |
801 | 762 | ||
763 | |||
764 | config MPU | ||
765 | bool "Enable the memory protection unit (EXPERIMENTAL)" | ||
766 | default n | ||
767 | help | ||
768 | Use the processor's MPU to protect applications from accessing | ||
769 | memory they do not own. This comes at a performance penalty | ||
770 | and is recommended only for debugging. | ||
771 | |||
802 | comment "Asynchonous Memory Configuration" | 772 | comment "Asynchonous Memory Configuration" |
803 | 773 | ||
804 | menu "EBIU_AMGCTL Global Control" | 774 | menu "EBIU_AMGCTL Global Control" |
@@ -808,7 +778,6 @@ config C_AMCKEN | |||
808 | 778 | ||
809 | config C_CDPRIO | 779 | config C_CDPRIO |
810 | bool "DMA has priority over core for ext. accesses" | 780 | bool "DMA has priority over core for ext. accesses" |
811 | depends on !BF54x | ||
812 | default n | 781 | default n |
813 | 782 | ||
814 | config C_B0PEN | 783 | config C_B0PEN |
@@ -949,8 +918,10 @@ endchoice | |||
949 | config PM_WAKEUP_SIC_IWR | 918 | config PM_WAKEUP_SIC_IWR |
950 | hex "Wakeup Events (SIC_IWR)" | 919 | hex "Wakeup Events (SIC_IWR)" |
951 | depends on PM_WAKEUP_GPIO_BY_SIC_IWR | 920 | depends on PM_WAKEUP_GPIO_BY_SIC_IWR |
952 | default 0x80000000 if (BF537 || BF536 || BF534) | 921 | default 0x8 if (BF537 || BF536 || BF534) |
953 | default 0x100000 if (BF533 || BF532 || BF531) | 922 | default 0x80 if (BF533 || BF532 || BF531) |
923 | default 0x80 if (BF54x) | ||
924 | default 0x80 if (BF52x) | ||
954 | 925 | ||
955 | config PM_WAKEUP_GPIO_NUMBER | 926 | config PM_WAKEUP_GPIO_NUMBER |
956 | int "Wakeup GPIO number" | 927 | int "Wakeup GPIO number" |
diff --git a/arch/blackfin/Makefile b/arch/blackfin/Makefile index c47e000f8324..0edc402fef54 100644 --- a/arch/blackfin/Makefile +++ b/arch/blackfin/Makefile | |||
@@ -21,7 +21,10 @@ KBUILD_DEFCONFIG := BF537-STAMP_defconfig | |||
21 | 21 | ||
22 | # setup the machine name and the machine dependent settings | 22 | # setup the machine name and the machine dependent settings |
23 | machine-$(CONFIG_BF522) := bf527 | 23 | machine-$(CONFIG_BF522) := bf527 |
24 | machine-$(CONFIG_BF523) := bf527 | ||
25 | machine-$(CONFIG_BF524) := bf527 | ||
24 | machine-$(CONFIG_BF525) := bf527 | 26 | machine-$(CONFIG_BF525) := bf527 |
27 | machine-$(CONFIG_BF526) := bf527 | ||
25 | machine-$(CONFIG_BF527) := bf527 | 28 | machine-$(CONFIG_BF527) := bf527 |
26 | machine-$(CONFIG_BF531) := bf533 | 29 | machine-$(CONFIG_BF531) := bf533 |
27 | machine-$(CONFIG_BF532) := bf533 | 30 | machine-$(CONFIG_BF532) := bf533 |
@@ -39,7 +42,10 @@ MACHINE := $(machine-y) | |||
39 | export MACHINE | 42 | export MACHINE |
40 | 43 | ||
41 | cpu-$(CONFIG_BF522) := bf522 | 44 | cpu-$(CONFIG_BF522) := bf522 |
45 | cpu-$(CONFIG_BF523) := bf523 | ||
46 | cpu-$(CONFIG_BF524) := bf524 | ||
42 | cpu-$(CONFIG_BF525) := bf525 | 47 | cpu-$(CONFIG_BF525) := bf525 |
48 | cpu-$(CONFIG_BF526) := bf526 | ||
43 | cpu-$(CONFIG_BF527) := bf527 | 49 | cpu-$(CONFIG_BF527) := bf527 |
44 | cpu-$(CONFIG_BF531) := bf531 | 50 | cpu-$(CONFIG_BF531) := bf531 |
45 | cpu-$(CONFIG_BF532) := bf532 | 51 | cpu-$(CONFIG_BF532) := bf532 |
@@ -76,6 +82,12 @@ core-y += arch/$(ARCH)/mach-$(MACHINE)/ | |||
76 | core-y += arch/$(ARCH)/mach-$(MACHINE)/boards/ | 82 | core-y += arch/$(ARCH)/mach-$(MACHINE)/boards/ |
77 | endif | 83 | endif |
78 | 84 | ||
85 | ifeq ($(CONFIG_MPU),y) | ||
86 | core-y += arch/$(ARCH)/kernel/cplb-mpu/ | ||
87 | else | ||
88 | core-y += arch/$(ARCH)/kernel/cplb-nompu/ | ||
89 | endif | ||
90 | |||
79 | libs-y += arch/$(ARCH)/lib/ | 91 | libs-y += arch/$(ARCH)/lib/ |
80 | 92 | ||
81 | drivers-$(CONFIG_OPROFILE) += arch/$(ARCH)/oprofile/ | 93 | drivers-$(CONFIG_OPROFILE) += arch/$(ARCH)/oprofile/ |
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig index fa6eb4e00fae..d59ee1530bd4 100644 --- a/arch/blackfin/configs/BF527-EZKIT_defconfig +++ b/arch/blackfin/configs/BF527-EZKIT_defconfig | |||
@@ -1,6 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.14 |
4 | # Thu Nov 29 17:32:47 2007 | ||
4 | # | 5 | # |
5 | # CONFIG_MMU is not set | 6 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 7 | # CONFIG_FPU is not set |
@@ -153,8 +154,8 @@ CONFIG_BFIN527_EZKIT=y | |||
153 | CONFIG_BF527_SPORT0_PORTG=y | 154 | CONFIG_BF527_SPORT0_PORTG=y |
154 | CONFIG_BF527_SPORT0_TSCLK_PG10=y | 155 | CONFIG_BF527_SPORT0_TSCLK_PG10=y |
155 | # CONFIG_BF527_SPORT0_TSCLK_PG14 is not set | 156 | # CONFIG_BF527_SPORT0_TSCLK_PG14 is not set |
156 | # CONFIG_BF527_UART1_PORTF is not set | 157 | CONFIG_BF527_UART1_PORTF=y |
157 | CONFIG_BF527_UART1_PORTG=y | 158 | # CONFIG_BF527_UART1_PORTG is not set |
158 | # CONFIG_BF527_NAND_D_PORTF is not set | 159 | # CONFIG_BF527_NAND_D_PORTF is not set |
159 | CONFIG_BF527_NAND_D_PORTH=y | 160 | CONFIG_BF527_NAND_D_PORTH=y |
160 | 161 | ||
@@ -232,7 +233,7 @@ CONFIG_CLKIN_HZ=25000000 | |||
232 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 233 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
233 | CONFIG_MAX_VCO_HZ=600000000 | 234 | CONFIG_MAX_VCO_HZ=600000000 |
234 | CONFIG_MIN_VCO_HZ=50000000 | 235 | CONFIG_MIN_VCO_HZ=50000000 |
235 | CONFIG_MAX_SCLK_HZ=133000000 | 236 | CONFIG_MAX_SCLK_HZ=133333333 |
236 | CONFIG_MIN_SCLK_HZ=27000000 | 237 | CONFIG_MIN_SCLK_HZ=27000000 |
237 | 238 | ||
238 | # | 239 | # |
@@ -626,8 +627,8 @@ CONFIG_BFIN_MAC_RMII=y | |||
626 | # CONFIG_SMSC911X is not set | 627 | # CONFIG_SMSC911X is not set |
627 | # CONFIG_DM9000 is not set | 628 | # CONFIG_DM9000 is not set |
628 | CONFIG_NETDEV_1000=y | 629 | CONFIG_NETDEV_1000=y |
629 | CONFIG_NETDEV_10000=y | ||
630 | # CONFIG_AX88180 is not set | 630 | # CONFIG_AX88180 is not set |
631 | CONFIG_NETDEV_10000=y | ||
631 | 632 | ||
632 | # | 633 | # |
633 | # Wireless LAN | 634 | # Wireless LAN |
@@ -1183,7 +1184,7 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
1183 | # | 1184 | # |
1184 | # CONFIG_PRINTK_TIME is not set | 1185 | # CONFIG_PRINTK_TIME is not set |
1185 | CONFIG_ENABLE_MUST_CHECK=y | 1186 | CONFIG_ENABLE_MUST_CHECK=y |
1186 | CONFIG_MAGIC_SYSRQ=y | 1187 | # CONFIG_MAGIC_SYSRQ is not set |
1187 | # CONFIG_UNUSED_SYMBOLS is not set | 1188 | # CONFIG_UNUSED_SYMBOLS is not set |
1188 | CONFIG_DEBUG_FS=y | 1189 | CONFIG_DEBUG_FS=y |
1189 | # CONFIG_HEADERS_CHECK is not set | 1190 | # CONFIG_HEADERS_CHECK is not set |
@@ -1208,7 +1209,7 @@ CONFIG_ACCESS_CHECK=y | |||
1208 | # CONFIG_KEYS is not set | 1209 | # CONFIG_KEYS is not set |
1209 | CONFIG_SECURITY=y | 1210 | CONFIG_SECURITY=y |
1210 | # CONFIG_SECURITY_NETWORK is not set | 1211 | # CONFIG_SECURITY_NETWORK is not set |
1211 | CONFIG_SECURITY_CAPABILITIES=y | 1212 | CONFIG_SECURITY_CAPABILITIES=m |
1212 | 1213 | ||
1213 | # | 1214 | # |
1214 | # Cryptographic options | 1215 | # Cryptographic options |
@@ -1219,7 +1220,7 @@ CONFIG_SECURITY_CAPABILITIES=y | |||
1219 | # Library routines | 1220 | # Library routines |
1220 | # | 1221 | # |
1221 | CONFIG_BITREVERSE=y | 1222 | CONFIG_BITREVERSE=y |
1222 | # CONFIG_CRC_CCITT is not set | 1223 | CONFIG_CRC_CCITT=m |
1223 | # CONFIG_CRC16 is not set | 1224 | # CONFIG_CRC16 is not set |
1224 | # CONFIG_CRC_ITU_T is not set | 1225 | # CONFIG_CRC_ITU_T is not set |
1225 | CONFIG_CRC32=y | 1226 | CONFIG_CRC32=y |
diff --git a/arch/blackfin/configs/BF533-EZKIT_defconfig b/arch/blackfin/configs/BF533-EZKIT_defconfig index 4fdb49362ba3..811711f59a25 100644 --- a/arch/blackfin/configs/BF533-EZKIT_defconfig +++ b/arch/blackfin/configs/BF533-EZKIT_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.16 |
4 | # | 4 | # |
5 | # CONFIG_MMU is not set | 5 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 6 | # CONFIG_FPU is not set |
@@ -115,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
115 | # Processor and Board Settings | 115 | # Processor and Board Settings |
116 | # | 116 | # |
117 | # CONFIG_BF522 is not set | 117 | # CONFIG_BF522 is not set |
118 | # CONFIG_BF523 is not set | ||
119 | # CONFIG_BF524 is not set | ||
118 | # CONFIG_BF525 is not set | 120 | # CONFIG_BF525 is not set |
121 | # CONFIG_BF526 is not set | ||
119 | # CONFIG_BF527 is not set | 122 | # CONFIG_BF527 is not set |
120 | # CONFIG_BF531 is not set | 123 | # CONFIG_BF531 is not set |
121 | # CONFIG_BF532 is not set | 124 | # CONFIG_BF532 is not set |
@@ -194,7 +197,7 @@ CONFIG_CLKIN_HZ=27000000 | |||
194 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 197 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
195 | CONFIG_MAX_VCO_HZ=750000000 | 198 | CONFIG_MAX_VCO_HZ=750000000 |
196 | CONFIG_MIN_VCO_HZ=50000000 | 199 | CONFIG_MIN_VCO_HZ=50000000 |
197 | CONFIG_MAX_SCLK_HZ=133000000 | 200 | CONFIG_MAX_SCLK_HZ=133333333 |
198 | CONFIG_MIN_SCLK_HZ=27000000 | 201 | CONFIG_MIN_SCLK_HZ=27000000 |
199 | 202 | ||
200 | # | 203 | # |
@@ -267,6 +270,7 @@ CONFIG_BFIN_DCACHE=y | |||
267 | # CONFIG_BFIN_WB is not set | 270 | # CONFIG_BFIN_WB is not set |
268 | CONFIG_BFIN_WT=y | 271 | CONFIG_BFIN_WT=y |
269 | CONFIG_L1_MAX_PIECE=16 | 272 | CONFIG_L1_MAX_PIECE=16 |
273 | # CONFIG_MPU is not set | ||
270 | 274 | ||
271 | # | 275 | # |
272 | # Asynchonous Memory Configuration | 276 | # Asynchonous Memory Configuration |
@@ -321,7 +325,7 @@ CONFIG_PM=y | |||
321 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y | 325 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y |
322 | # CONFIG_PM_WAKEUP_BY_GPIO is not set | 326 | # CONFIG_PM_WAKEUP_BY_GPIO is not set |
323 | # CONFIG_PM_WAKEUP_GPIO_API is not set | 327 | # CONFIG_PM_WAKEUP_GPIO_API is not set |
324 | CONFIG_PM_WAKEUP_SIC_IWR=0x100000 | 328 | CONFIG_PM_WAKEUP_SIC_IWR=0x80 |
325 | 329 | ||
326 | # | 330 | # |
327 | # CPU Frequency scaling | 331 | # CPU Frequency scaling |
@@ -510,7 +514,6 @@ CONFIG_MTD_CFI_I2=y | |||
510 | # CONFIG_MTD_CFI_INTELEXT is not set | 514 | # CONFIG_MTD_CFI_INTELEXT is not set |
511 | # CONFIG_MTD_CFI_AMDSTD is not set | 515 | # CONFIG_MTD_CFI_AMDSTD is not set |
512 | # CONFIG_MTD_CFI_STAA is not set | 516 | # CONFIG_MTD_CFI_STAA is not set |
513 | CONFIG_MTD_MW320D=m | ||
514 | CONFIG_MTD_RAM=y | 517 | CONFIG_MTD_RAM=y |
515 | CONFIG_MTD_ROM=m | 518 | CONFIG_MTD_ROM=m |
516 | # CONFIG_MTD_ABSENT is not set | 519 | # CONFIG_MTD_ABSENT is not set |
@@ -520,9 +523,6 @@ CONFIG_MTD_ROM=m | |||
520 | # | 523 | # |
521 | CONFIG_MTD_COMPLEX_MAPPINGS=y | 524 | CONFIG_MTD_COMPLEX_MAPPINGS=y |
522 | # CONFIG_MTD_PHYSMAP is not set | 525 | # CONFIG_MTD_PHYSMAP is not set |
523 | CONFIG_MTD_BF5xx=m | ||
524 | CONFIG_BFIN_FLASH_SIZE=0x400000 | ||
525 | CONFIG_EBIU_FLASH_BASE=0x20000000 | ||
526 | # CONFIG_MTD_UCLINUX is not set | 526 | # CONFIG_MTD_UCLINUX is not set |
527 | # CONFIG_MTD_PLATRAM is not set | 527 | # CONFIG_MTD_PLATRAM is not set |
528 | 528 | ||
@@ -610,8 +610,8 @@ CONFIG_SMC91X=y | |||
610 | # CONFIG_SMSC911X is not set | 610 | # CONFIG_SMSC911X is not set |
611 | # CONFIG_DM9000 is not set | 611 | # CONFIG_DM9000 is not set |
612 | CONFIG_NETDEV_1000=y | 612 | CONFIG_NETDEV_1000=y |
613 | CONFIG_NETDEV_10000=y | ||
614 | # CONFIG_AX88180 is not set | 613 | # CONFIG_AX88180 is not set |
614 | CONFIG_NETDEV_10000=y | ||
615 | 615 | ||
616 | # | 616 | # |
617 | # Wireless LAN | 617 | # Wireless LAN |
@@ -680,7 +680,6 @@ CONFIG_INPUT_EVDEV=m | |||
680 | CONFIG_BFIN_SPORT=y | 680 | CONFIG_BFIN_SPORT=y |
681 | # CONFIG_BFIN_TIMER_LATENCY is not set | 681 | # CONFIG_BFIN_TIMER_LATENCY is not set |
682 | # CONFIG_AD5304 is not set | 682 | # CONFIG_AD5304 is not set |
683 | # CONFIG_BF5xx_FBDMA is not set | ||
684 | # CONFIG_VT is not set | 683 | # CONFIG_VT is not set |
685 | # CONFIG_SERIAL_NONSTANDARD is not set | 684 | # CONFIG_SERIAL_NONSTANDARD is not set |
686 | 685 | ||
diff --git a/arch/blackfin/configs/BF533-STAMP_defconfig b/arch/blackfin/configs/BF533-STAMP_defconfig index b04e8e533e9a..9b7123cf27a3 100644 --- a/arch/blackfin/configs/BF533-STAMP_defconfig +++ b/arch/blackfin/configs/BF533-STAMP_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.16 |
4 | # | 4 | # |
5 | # CONFIG_MMU is not set | 5 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 6 | # CONFIG_FPU is not set |
@@ -115,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
115 | # Processor and Board Settings | 115 | # Processor and Board Settings |
116 | # | 116 | # |
117 | # CONFIG_BF522 is not set | 117 | # CONFIG_BF522 is not set |
118 | # CONFIG_BF523 is not set | ||
119 | # CONFIG_BF524 is not set | ||
118 | # CONFIG_BF525 is not set | 120 | # CONFIG_BF525 is not set |
121 | # CONFIG_BF526 is not set | ||
119 | # CONFIG_BF527 is not set | 122 | # CONFIG_BF527 is not set |
120 | # CONFIG_BF531 is not set | 123 | # CONFIG_BF531 is not set |
121 | # CONFIG_BF532 is not set | 124 | # CONFIG_BF532 is not set |
@@ -140,7 +143,6 @@ CONFIG_BF_REV_0_3=y | |||
140 | CONFIG_BF53x=y | 143 | CONFIG_BF53x=y |
141 | CONFIG_BFIN_SINGLE_CORE=y | 144 | CONFIG_BFIN_SINGLE_CORE=y |
142 | CONFIG_MEM_MT48LC64M4A2FB_7E=y | 145 | CONFIG_MEM_MT48LC64M4A2FB_7E=y |
143 | CONFIG_BFIN_SHARED_FLASH_ENET=y | ||
144 | # CONFIG_BFIN533_EZKIT is not set | 146 | # CONFIG_BFIN533_EZKIT is not set |
145 | CONFIG_BFIN533_STAMP=y | 147 | CONFIG_BFIN533_STAMP=y |
146 | # CONFIG_BFIN533_BLUETECHNIX_CM is not set | 148 | # CONFIG_BFIN533_BLUETECHNIX_CM is not set |
@@ -195,7 +197,7 @@ CONFIG_CLKIN_HZ=11059200 | |||
195 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 197 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
196 | CONFIG_MAX_VCO_HZ=750000000 | 198 | CONFIG_MAX_VCO_HZ=750000000 |
197 | CONFIG_MIN_VCO_HZ=50000000 | 199 | CONFIG_MIN_VCO_HZ=50000000 |
198 | CONFIG_MAX_SCLK_HZ=133000000 | 200 | CONFIG_MAX_SCLK_HZ=133333333 |
199 | CONFIG_MIN_SCLK_HZ=27000000 | 201 | CONFIG_MIN_SCLK_HZ=27000000 |
200 | 202 | ||
201 | # | 203 | # |
@@ -215,18 +217,10 @@ CONFIG_MEM_ADD_WIDTH=11 | |||
215 | CONFIG_ENET_FLASH_PIN=0 | 217 | CONFIG_ENET_FLASH_PIN=0 |
216 | CONFIG_BOOT_LOAD=0x1000 | 218 | CONFIG_BOOT_LOAD=0x1000 |
217 | 219 | ||
218 | # | 220 | |
219 | # LED Status Indicators | ||
220 | # | ||
221 | # CONFIG_BFIN_ALIVE_LED is not set | ||
222 | # CONFIG_BFIN_IDLE_LED is not set | ||
223 | CONFIG_BFIN_SCRATCH_REG_RETN=y | 221 | CONFIG_BFIN_SCRATCH_REG_RETN=y |
224 | # CONFIG_BFIN_SCRATCH_REG_RETE is not set | 222 | # CONFIG_BFIN_SCRATCH_REG_RETE is not set |
225 | # CONFIG_BFIN_SCRATCH_REG_CYCLES is not set | 223 | # CONFIG_BFIN_SCRATCH_REG_CYCLES is not set |
226 | CONFIG_BFIN_ALIVE_LED_PORT=0xFFC00700 | ||
227 | CONFIG_BFIN_ALIVE_LED_DPORT=0xFFC00730 | ||
228 | CONFIG_BFIN_IDLE_LED_PORT=0xFFC00700 | ||
229 | CONFIG_BFIN_IDLE_LED_DPORT=0xFFC00730 | ||
230 | 224 | ||
231 | # | 225 | # |
232 | # Blackfin Kernel Optimizations | 226 | # Blackfin Kernel Optimizations |
@@ -279,6 +273,7 @@ CONFIG_BFIN_DCACHE=y | |||
279 | # CONFIG_BFIN_WB is not set | 273 | # CONFIG_BFIN_WB is not set |
280 | CONFIG_BFIN_WT=y | 274 | CONFIG_BFIN_WT=y |
281 | CONFIG_L1_MAX_PIECE=16 | 275 | CONFIG_L1_MAX_PIECE=16 |
276 | # CONFIG_MPU is not set | ||
282 | 277 | ||
283 | # | 278 | # |
284 | # Asynchonous Memory Configuration | 279 | # Asynchonous Memory Configuration |
@@ -333,7 +328,7 @@ CONFIG_PM=y | |||
333 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y | 328 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y |
334 | # CONFIG_PM_WAKEUP_BY_GPIO is not set | 329 | # CONFIG_PM_WAKEUP_BY_GPIO is not set |
335 | # CONFIG_PM_WAKEUP_GPIO_API is not set | 330 | # CONFIG_PM_WAKEUP_GPIO_API is not set |
336 | CONFIG_PM_WAKEUP_SIC_IWR=0x100000 | 331 | CONFIG_PM_WAKEUP_SIC_IWR=0x80 |
337 | 332 | ||
338 | # | 333 | # |
339 | # CPU Frequency scaling | 334 | # CPU Frequency scaling |
@@ -522,7 +517,6 @@ CONFIG_MTD_CFI_I2=y | |||
522 | # CONFIG_MTD_CFI_INTELEXT is not set | 517 | # CONFIG_MTD_CFI_INTELEXT is not set |
523 | # CONFIG_MTD_CFI_AMDSTD is not set | 518 | # CONFIG_MTD_CFI_AMDSTD is not set |
524 | # CONFIG_MTD_CFI_STAA is not set | 519 | # CONFIG_MTD_CFI_STAA is not set |
525 | CONFIG_MTD_MW320D=m | ||
526 | CONFIG_MTD_RAM=y | 520 | CONFIG_MTD_RAM=y |
527 | CONFIG_MTD_ROM=m | 521 | CONFIG_MTD_ROM=m |
528 | # CONFIG_MTD_ABSENT is not set | 522 | # CONFIG_MTD_ABSENT is not set |
@@ -532,17 +526,6 @@ CONFIG_MTD_ROM=m | |||
532 | # | 526 | # |
533 | CONFIG_MTD_COMPLEX_MAPPINGS=y | 527 | CONFIG_MTD_COMPLEX_MAPPINGS=y |
534 | # CONFIG_MTD_PHYSMAP is not set | 528 | # CONFIG_MTD_PHYSMAP is not set |
535 | CONFIG_MTD_BF5xx=m | ||
536 | CONFIG_BFIN_FLASH_SIZE=0x400000 | ||
537 | CONFIG_EBIU_FLASH_BASE=0x20000000 | ||
538 | |||
539 | # | ||
540 | # FLASH_EBIU_AMBCTL Control | ||
541 | # | ||
542 | CONFIG_BFIN_FLASH_BANK_0=0x7BB0 | ||
543 | CONFIG_BFIN_FLASH_BANK_1=0x7BB0 | ||
544 | CONFIG_BFIN_FLASH_BANK_2=0x7BB0 | ||
545 | CONFIG_BFIN_FLASH_BANK_3=0x7BB0 | ||
546 | # CONFIG_MTD_UCLINUX is not set | 529 | # CONFIG_MTD_UCLINUX is not set |
547 | # CONFIG_MTD_PLATRAM is not set | 530 | # CONFIG_MTD_PLATRAM is not set |
548 | 531 | ||
@@ -630,8 +613,8 @@ CONFIG_SMC91X=y | |||
630 | # CONFIG_SMSC911X is not set | 613 | # CONFIG_SMSC911X is not set |
631 | # CONFIG_DM9000 is not set | 614 | # CONFIG_DM9000 is not set |
632 | CONFIG_NETDEV_1000=y | 615 | CONFIG_NETDEV_1000=y |
633 | CONFIG_NETDEV_10000=y | ||
634 | # CONFIG_AX88180 is not set | 616 | # CONFIG_AX88180 is not set |
617 | CONFIG_NETDEV_10000=y | ||
635 | 618 | ||
636 | # | 619 | # |
637 | # Wireless LAN | 620 | # Wireless LAN |
@@ -687,7 +670,6 @@ CONFIG_INPUT_MISC=y | |||
687 | # CONFIG_INPUT_POWERMATE is not set | 670 | # CONFIG_INPUT_POWERMATE is not set |
688 | # CONFIG_INPUT_YEALINK is not set | 671 | # CONFIG_INPUT_YEALINK is not set |
689 | # CONFIG_INPUT_UINPUT is not set | 672 | # CONFIG_INPUT_UINPUT is not set |
690 | # CONFIG_BF53X_PFBUTTONS is not set | ||
691 | CONFIG_TWI_KEYPAD=m | 673 | CONFIG_TWI_KEYPAD=m |
692 | CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=39 | 674 | CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=39 |
693 | 675 | ||
@@ -711,8 +693,6 @@ CONFIG_BFIN_SPORT=y | |||
711 | CONFIG_TWI_LCD=m | 693 | CONFIG_TWI_LCD=m |
712 | CONFIG_TWI_LCD_SLAVE_ADDR=34 | 694 | CONFIG_TWI_LCD_SLAVE_ADDR=34 |
713 | # CONFIG_AD5304 is not set | 695 | # CONFIG_AD5304 is not set |
714 | # CONFIG_BF5xx_TEA5764 is not set | ||
715 | # CONFIG_BF5xx_FBDMA is not set | ||
716 | # CONFIG_VT is not set | 696 | # CONFIG_VT is not set |
717 | # CONFIG_SERIAL_NONSTANDARD is not set | 697 | # CONFIG_SERIAL_NONSTANDARD is not set |
718 | 698 | ||
@@ -778,7 +758,6 @@ CONFIG_I2C_ALGOBIT=m | |||
778 | # | 758 | # |
779 | # I2C Hardware Bus support | 759 | # I2C Hardware Bus support |
780 | # | 760 | # |
781 | # CONFIG_I2C_BLACKFIN_GPIO is not set | ||
782 | # CONFIG_I2C_GPIO is not set | 761 | # CONFIG_I2C_GPIO is not set |
783 | # CONFIG_I2C_OCORES is not set | 762 | # CONFIG_I2C_OCORES is not set |
784 | # CONFIG_I2C_PARPORT_LIGHT is not set | 763 | # CONFIG_I2C_PARPORT_LIGHT is not set |
diff --git a/arch/blackfin/configs/BF537-STAMP_defconfig b/arch/blackfin/configs/BF537-STAMP_defconfig index f812b66318b9..b37ccc681e7a 100644 --- a/arch/blackfin/configs/BF537-STAMP_defconfig +++ b/arch/blackfin/configs/BF537-STAMP_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.16 |
4 | # | 4 | # |
5 | # CONFIG_MMU is not set | 5 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 6 | # CONFIG_FPU is not set |
@@ -115,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
115 | # Processor and Board Settings | 115 | # Processor and Board Settings |
116 | # | 116 | # |
117 | # CONFIG_BF522 is not set | 117 | # CONFIG_BF522 is not set |
118 | # CONFIG_BF523 is not set | ||
119 | # CONFIG_BF524 is not set | ||
118 | # CONFIG_BF525 is not set | 120 | # CONFIG_BF525 is not set |
121 | # CONFIG_BF526 is not set | ||
119 | # CONFIG_BF527 is not set | 122 | # CONFIG_BF527 is not set |
120 | # CONFIG_BF531 is not set | 123 | # CONFIG_BF531 is not set |
121 | # CONFIG_BF532 is not set | 124 | # CONFIG_BF532 is not set |
@@ -170,6 +173,7 @@ CONFIG_IRQ_WATCH=13 | |||
170 | CONFIG_BFIN537_STAMP=y | 173 | CONFIG_BFIN537_STAMP=y |
171 | # CONFIG_BFIN537_BLUETECHNIX_CM is not set | 174 | # CONFIG_BFIN537_BLUETECHNIX_CM is not set |
172 | # CONFIG_PNAV10 is not set | 175 | # CONFIG_PNAV10 is not set |
176 | # CONFIG_CAMSIG_MINOTAUR is not set | ||
173 | # CONFIG_GENERIC_BF537_BOARD is not set | 177 | # CONFIG_GENERIC_BF537_BOARD is not set |
174 | 178 | ||
175 | # | 179 | # |
@@ -201,7 +205,7 @@ CONFIG_CLKIN_HZ=25000000 | |||
201 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 205 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
202 | CONFIG_MAX_VCO_HZ=600000000 | 206 | CONFIG_MAX_VCO_HZ=600000000 |
203 | CONFIG_MIN_VCO_HZ=50000000 | 207 | CONFIG_MIN_VCO_HZ=50000000 |
204 | CONFIG_MAX_SCLK_HZ=133000000 | 208 | CONFIG_MAX_SCLK_HZ=133333333 |
205 | CONFIG_MIN_SCLK_HZ=27000000 | 209 | CONFIG_MIN_SCLK_HZ=27000000 |
206 | 210 | ||
207 | # | 211 | # |
@@ -274,6 +278,7 @@ CONFIG_BFIN_DCACHE=y | |||
274 | # CONFIG_BFIN_WB is not set | 278 | # CONFIG_BFIN_WB is not set |
275 | CONFIG_BFIN_WT=y | 279 | CONFIG_BFIN_WT=y |
276 | CONFIG_L1_MAX_PIECE=16 | 280 | CONFIG_L1_MAX_PIECE=16 |
281 | # CONFIG_MPU is not set | ||
277 | 282 | ||
278 | # | 283 | # |
279 | # Asynchonous Memory Configuration | 284 | # Asynchonous Memory Configuration |
@@ -328,7 +333,7 @@ CONFIG_PM=y | |||
328 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y | 333 | CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y |
329 | # CONFIG_PM_WAKEUP_BY_GPIO is not set | 334 | # CONFIG_PM_WAKEUP_BY_GPIO is not set |
330 | # CONFIG_PM_WAKEUP_GPIO_API is not set | 335 | # CONFIG_PM_WAKEUP_GPIO_API is not set |
331 | CONFIG_PM_WAKEUP_SIC_IWR=0x80000000 | 336 | CONFIG_PM_WAKEUP_SIC_IWR=0x8 |
332 | 337 | ||
333 | # | 338 | # |
334 | # CPU Frequency scaling | 339 | # CPU Frequency scaling |
@@ -483,7 +488,7 @@ CONFIG_MTD=y | |||
483 | # CONFIG_MTD_CONCAT is not set | 488 | # CONFIG_MTD_CONCAT is not set |
484 | CONFIG_MTD_PARTITIONS=y | 489 | CONFIG_MTD_PARTITIONS=y |
485 | # CONFIG_MTD_REDBOOT_PARTS is not set | 490 | # CONFIG_MTD_REDBOOT_PARTS is not set |
486 | # CONFIG_MTD_CMDLINE_PARTS is not set | 491 | CONFIG_MTD_CMDLINE_PARTS=y |
487 | 492 | ||
488 | # | 493 | # |
489 | # User Modules And Translation Layers | 494 | # User Modules And Translation Layers |
@@ -500,8 +505,8 @@ CONFIG_MTD_BLOCK=y | |||
500 | # | 505 | # |
501 | # RAM/ROM/Flash chip drivers | 506 | # RAM/ROM/Flash chip drivers |
502 | # | 507 | # |
503 | # CONFIG_MTD_CFI is not set | 508 | CONFIG_MTD_CFI=m |
504 | CONFIG_MTD_JEDECPROBE=m | 509 | # CONFIG_MTD_JEDECPROBE is not set |
505 | CONFIG_MTD_GEN_PROBE=m | 510 | CONFIG_MTD_GEN_PROBE=m |
506 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | 511 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set |
507 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | 512 | CONFIG_MTD_MAP_BANK_WIDTH_1=y |
@@ -515,9 +520,9 @@ CONFIG_MTD_CFI_I2=y | |||
515 | # CONFIG_MTD_CFI_I4 is not set | 520 | # CONFIG_MTD_CFI_I4 is not set |
516 | # CONFIG_MTD_CFI_I8 is not set | 521 | # CONFIG_MTD_CFI_I8 is not set |
517 | # CONFIG_MTD_CFI_INTELEXT is not set | 522 | # CONFIG_MTD_CFI_INTELEXT is not set |
518 | # CONFIG_MTD_CFI_AMDSTD is not set | 523 | CONFIG_MTD_CFI_AMDSTD=m |
519 | # CONFIG_MTD_CFI_STAA is not set | 524 | # CONFIG_MTD_CFI_STAA is not set |
520 | CONFIG_MTD_MW320D=m | 525 | CONFIG_MTD_CFI_UTIL=m |
521 | CONFIG_MTD_RAM=y | 526 | CONFIG_MTD_RAM=y |
522 | CONFIG_MTD_ROM=m | 527 | CONFIG_MTD_ROM=m |
523 | # CONFIG_MTD_ABSENT is not set | 528 | # CONFIG_MTD_ABSENT is not set |
@@ -525,11 +530,11 @@ CONFIG_MTD_ROM=m | |||
525 | # | 530 | # |
526 | # Mapping drivers for chip access | 531 | # Mapping drivers for chip access |
527 | # | 532 | # |
528 | CONFIG_MTD_COMPLEX_MAPPINGS=y | 533 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set |
529 | # CONFIG_MTD_PHYSMAP is not set | 534 | CONFIG_MTD_PHYSMAP=m |
530 | CONFIG_MTD_BF5xx=m | 535 | CONFIG_MTD_PHYSMAP_START=0x20000000 |
531 | CONFIG_BFIN_FLASH_SIZE=0x400000 | 536 | CONFIG_MTD_PHYSMAP_LEN=0x0 |
532 | CONFIG_EBIU_FLASH_BASE=0x20000000 | 537 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 |
533 | # CONFIG_MTD_UCLINUX is not set | 538 | # CONFIG_MTD_UCLINUX is not set |
534 | # CONFIG_MTD_PLATRAM is not set | 539 | # CONFIG_MTD_PLATRAM is not set |
535 | 540 | ||
@@ -647,8 +652,8 @@ CONFIG_BFIN_RX_DESC_NUM=20 | |||
647 | # CONFIG_SMSC911X is not set | 652 | # CONFIG_SMSC911X is not set |
648 | # CONFIG_DM9000 is not set | 653 | # CONFIG_DM9000 is not set |
649 | CONFIG_NETDEV_1000=y | 654 | CONFIG_NETDEV_1000=y |
650 | CONFIG_NETDEV_10000=y | ||
651 | # CONFIG_AX88180 is not set | 655 | # CONFIG_AX88180 is not set |
656 | CONFIG_NETDEV_10000=y | ||
652 | 657 | ||
653 | # | 658 | # |
654 | # Wireless LAN | 659 | # Wireless LAN |
@@ -704,7 +709,6 @@ CONFIG_INPUT_MISC=y | |||
704 | # CONFIG_INPUT_POWERMATE is not set | 709 | # CONFIG_INPUT_POWERMATE is not set |
705 | # CONFIG_INPUT_YEALINK is not set | 710 | # CONFIG_INPUT_YEALINK is not set |
706 | # CONFIG_INPUT_UINPUT is not set | 711 | # CONFIG_INPUT_UINPUT is not set |
707 | # CONFIG_BF53X_PFBUTTONS is not set | ||
708 | CONFIG_TWI_KEYPAD=m | 712 | CONFIG_TWI_KEYPAD=m |
709 | CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=72 | 713 | CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=72 |
710 | 714 | ||
@@ -728,8 +732,6 @@ CONFIG_BFIN_SPORT=y | |||
728 | CONFIG_TWI_LCD=m | 732 | CONFIG_TWI_LCD=m |
729 | CONFIG_TWI_LCD_SLAVE_ADDR=34 | 733 | CONFIG_TWI_LCD_SLAVE_ADDR=34 |
730 | # CONFIG_AD5304 is not set | 734 | # CONFIG_AD5304 is not set |
731 | # CONFIG_BF5xx_TEA5764 is not set | ||
732 | # CONFIG_BF5xx_FBDMA is not set | ||
733 | # CONFIG_VT is not set | 735 | # CONFIG_VT is not set |
734 | # CONFIG_SERIAL_NONSTANDARD is not set | 736 | # CONFIG_SERIAL_NONSTANDARD is not set |
735 | 737 | ||
@@ -802,7 +804,6 @@ CONFIG_I2C_CHARDEV=m | |||
802 | # | 804 | # |
803 | # I2C Hardware Bus support | 805 | # I2C Hardware Bus support |
804 | # | 806 | # |
805 | # CONFIG_I2C_BLACKFIN_GPIO is not set | ||
806 | CONFIG_I2C_BLACKFIN_TWI=m | 807 | CONFIG_I2C_BLACKFIN_TWI=m |
807 | CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50 | 808 | CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50 |
808 | # CONFIG_I2C_GPIO is not set | 809 | # CONFIG_I2C_GPIO is not set |
@@ -957,6 +958,7 @@ CONFIG_LQ035_SLAVE_ADDR=0x58 | |||
957 | # CONFIG_FB_BFIN_LANDSCAPE is not set | 958 | # CONFIG_FB_BFIN_LANDSCAPE is not set |
958 | # CONFIG_FB_BFIN_BGR is not set | 959 | # CONFIG_FB_BFIN_BGR is not set |
959 | # CONFIG_FB_BFIN_T350MCQB is not set | 960 | # CONFIG_FB_BFIN_T350MCQB is not set |
961 | # CONFIG_FB_HITACHI_TX09 is not set | ||
960 | # CONFIG_FB_S1D13XXX is not set | 962 | # CONFIG_FB_S1D13XXX is not set |
961 | # CONFIG_FB_VIRTUAL is not set | 963 | # CONFIG_FB_VIRTUAL is not set |
962 | # CONFIG_LOGO is not set | 964 | # CONFIG_LOGO is not set |
@@ -1008,12 +1010,22 @@ CONFIG_SND_BFIN_AD73311_SE=4 | |||
1008 | # | 1010 | # |
1009 | # System on Chip audio support | 1011 | # System on Chip audio support |
1010 | # | 1012 | # |
1011 | # CONFIG_SND_SOC is not set | 1013 | CONFIG_SND_SOC_AC97_BUS=y |
1014 | CONFIG_SND_SOC=m | ||
1015 | CONFIG_SND_BF5XX_SOC=m | ||
1016 | CONFIG_SND_BF5XX_SOC_AC97=m | ||
1017 | # CONFIG_SND_BF5XX_SOC_WM8750 is not set | ||
1018 | # CONFIG_SND_BF5XX_SOC_WM8731 is not set | ||
1019 | CONFIG_SND_BF5XX_SOC_BF5xx=m | ||
1020 | CONFIG_SND_BF5XX_SPORT_NUM=0 | ||
1021 | # CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set | ||
1022 | CONFIG_SND_SOC_AD1980=m | ||
1012 | 1023 | ||
1013 | # | 1024 | # |
1014 | # Open Sound System | 1025 | # Open Sound System |
1015 | # | 1026 | # |
1016 | # CONFIG_SOUND_PRIME is not set | 1027 | # CONFIG_SOUND_PRIME is not set |
1028 | CONFIG_AC97_BUS=m | ||
1017 | 1029 | ||
1018 | # | 1030 | # |
1019 | # HID Devices | 1031 | # HID Devices |
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig index 48367cc9fe35..fd702161ef59 100644 --- a/arch/blackfin/configs/BF548-EZKIT_defconfig +++ b/arch/blackfin/configs/BF548-EZKIT_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.16 |
4 | # | 4 | # |
5 | # CONFIG_MMU is not set | 5 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 6 | # CONFIG_FPU is not set |
@@ -115,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
115 | # Processor and Board Settings | 115 | # Processor and Board Settings |
116 | # | 116 | # |
117 | # CONFIG_BF522 is not set | 117 | # CONFIG_BF522 is not set |
118 | # CONFIG_BF523 is not set | ||
119 | # CONFIG_BF524 is not set | ||
118 | # CONFIG_BF525 is not set | 120 | # CONFIG_BF525 is not set |
121 | # CONFIG_BF526 is not set | ||
119 | # CONFIG_BF527 is not set | 122 | # CONFIG_BF527 is not set |
120 | # CONFIG_BF531 is not set | 123 | # CONFIG_BF531 is not set |
121 | # CONFIG_BF532 is not set | 124 | # CONFIG_BF532 is not set |
@@ -126,8 +129,8 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
126 | # CONFIG_BF542 is not set | 129 | # CONFIG_BF542 is not set |
127 | # CONFIG_BF544 is not set | 130 | # CONFIG_BF544 is not set |
128 | # CONFIG_BF547 is not set | 131 | # CONFIG_BF547 is not set |
129 | # CONFIG_BF548 is not set | 132 | CONFIG_BF548=y |
130 | CONFIG_BF549=y | 133 | # CONFIG_BF549 is not set |
131 | # CONFIG_BF561 is not set | 134 | # CONFIG_BF561 is not set |
132 | CONFIG_BF_REV_0_0=y | 135 | CONFIG_BF_REV_0_0=y |
133 | # CONFIG_BF_REV_0_1 is not set | 136 | # CONFIG_BF_REV_0_1 is not set |
@@ -265,9 +268,9 @@ CONFIG_PINT3_ASSIGN=0x02020303 | |||
265 | # | 268 | # |
266 | CONFIG_CLKIN_HZ=25000000 | 269 | CONFIG_CLKIN_HZ=25000000 |
267 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 270 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
268 | CONFIG_MAX_VCO_HZ=533000000 | 271 | CONFIG_MAX_VCO_HZ=600000000 |
269 | CONFIG_MIN_VCO_HZ=50000000 | 272 | CONFIG_MIN_VCO_HZ=50000000 |
270 | CONFIG_MAX_SCLK_HZ=133000000 | 273 | CONFIG_MAX_SCLK_HZ=133333333 |
271 | CONFIG_MIN_SCLK_HZ=27000000 | 274 | CONFIG_MIN_SCLK_HZ=27000000 |
272 | 275 | ||
273 | # | 276 | # |
@@ -283,7 +286,8 @@ CONFIG_HZ=250 | |||
283 | # Memory Setup | 286 | # Memory Setup |
284 | # | 287 | # |
285 | CONFIG_MEM_SIZE=64 | 288 | CONFIG_MEM_SIZE=64 |
286 | CONFIG_MEM_ADD_WIDTH=10 | 289 | # CONFIG_MEM_MT46V32M16_6T is not set |
290 | CONFIG_MEM_MT46V32M16_5B=y | ||
287 | CONFIG_BOOT_LOAD=0x1000 | 291 | CONFIG_BOOT_LOAD=0x1000 |
288 | CONFIG_BFIN_SCRATCH_REG_RETN=y | 292 | CONFIG_BFIN_SCRATCH_REG_RETN=y |
289 | # CONFIG_BFIN_SCRATCH_REG_RETE is not set | 293 | # CONFIG_BFIN_SCRATCH_REG_RETE is not set |
@@ -340,6 +344,7 @@ CONFIG_BFIN_DCACHE=y | |||
340 | # CONFIG_BFIN_WB is not set | 344 | # CONFIG_BFIN_WB is not set |
341 | CONFIG_BFIN_WT=y | 345 | CONFIG_BFIN_WT=y |
342 | CONFIG_L1_MAX_PIECE=16 | 346 | CONFIG_L1_MAX_PIECE=16 |
347 | # CONFIG_MPU is not set | ||
343 | 348 | ||
344 | # | 349 | # |
345 | # Asynchonous Memory Configuration | 350 | # Asynchonous Memory Configuration |
@@ -349,6 +354,7 @@ CONFIG_L1_MAX_PIECE=16 | |||
349 | # EBIU_AMGCTL Global Control | 354 | # EBIU_AMGCTL Global Control |
350 | # | 355 | # |
351 | CONFIG_C_AMCKEN=y | 356 | CONFIG_C_AMCKEN=y |
357 | # CONFIG_C_CDPRIO is not set | ||
352 | # CONFIG_C_AMBEN is not set | 358 | # CONFIG_C_AMBEN is not set |
353 | # CONFIG_C_AMBEN_B0 is not set | 359 | # CONFIG_C_AMBEN_B0 is not set |
354 | # CONFIG_C_AMBEN_B0_B1 is not set | 360 | # CONFIG_C_AMBEN_B0_B1 is not set |
@@ -362,9 +368,9 @@ CONFIG_BANK_0=0x7BB0 | |||
362 | CONFIG_BANK_1=0x5554 | 368 | CONFIG_BANK_1=0x5554 |
363 | CONFIG_BANK_2=0x7BB0 | 369 | CONFIG_BANK_2=0x7BB0 |
364 | CONFIG_BANK_3=0x99B3 | 370 | CONFIG_BANK_3=0x99B3 |
365 | CONFIG_EBUI_MBSCTLVAL=0x0 | 371 | CONFIG_EBIU_MBSCTLVAL=0x0 |
366 | CONFIG_EBUI_MODEVAL=0x1 | 372 | CONFIG_EBIU_MODEVAL=0x1 |
367 | CONFIG_EBUI_FCTLVAL=0x6 | 373 | CONFIG_EBIU_FCTLVAL=0x6 |
368 | 374 | ||
369 | # | 375 | # |
370 | # Bus options (PCI, PCMCIA, EISA, MCA, ISA) | 376 | # Bus options (PCI, PCMCIA, EISA, MCA, ISA) |
@@ -537,7 +543,6 @@ CONFIG_MTD_CFI_I2=y | |||
537 | CONFIG_MTD_CFI_INTELEXT=y | 543 | CONFIG_MTD_CFI_INTELEXT=y |
538 | # CONFIG_MTD_CFI_AMDSTD is not set | 544 | # CONFIG_MTD_CFI_AMDSTD is not set |
539 | # CONFIG_MTD_CFI_STAA is not set | 545 | # CONFIG_MTD_CFI_STAA is not set |
540 | # CONFIG_MTD_MW320D is not set | ||
541 | CONFIG_MTD_CFI_UTIL=y | 546 | CONFIG_MTD_CFI_UTIL=y |
542 | CONFIG_MTD_RAM=y | 547 | CONFIG_MTD_RAM=y |
543 | # CONFIG_MTD_ROM is not set | 548 | # CONFIG_MTD_ROM is not set |
@@ -549,9 +554,8 @@ CONFIG_MTD_RAM=y | |||
549 | CONFIG_MTD_COMPLEX_MAPPINGS=y | 554 | CONFIG_MTD_COMPLEX_MAPPINGS=y |
550 | CONFIG_MTD_PHYSMAP=y | 555 | CONFIG_MTD_PHYSMAP=y |
551 | CONFIG_MTD_PHYSMAP_START=0x20000000 | 556 | CONFIG_MTD_PHYSMAP_START=0x20000000 |
552 | CONFIG_MTD_PHYSMAP_LEN=0x400000 | 557 | CONFIG_MTD_PHYSMAP_LEN=0 |
553 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | 558 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 |
554 | # CONFIG_MTD_BF5xx is not set | ||
555 | # CONFIG_MTD_UCLINUX is not set | 559 | # CONFIG_MTD_UCLINUX is not set |
556 | # CONFIG_MTD_PLATRAM is not set | 560 | # CONFIG_MTD_PLATRAM is not set |
557 | 561 | ||
@@ -690,8 +694,8 @@ CONFIG_MII=y | |||
690 | CONFIG_SMSC911X=y | 694 | CONFIG_SMSC911X=y |
691 | # CONFIG_DM9000 is not set | 695 | # CONFIG_DM9000 is not set |
692 | CONFIG_NETDEV_1000=y | 696 | CONFIG_NETDEV_1000=y |
693 | CONFIG_NETDEV_10000=y | ||
694 | # CONFIG_AX88180 is not set | 697 | # CONFIG_AX88180 is not set |
698 | CONFIG_NETDEV_10000=y | ||
695 | 699 | ||
696 | # | 700 | # |
697 | # Wireless LAN | 701 | # Wireless LAN |
@@ -719,7 +723,7 @@ CONFIG_NETDEV_10000=y | |||
719 | # | 723 | # |
720 | # Input device support | 724 | # Input device support |
721 | # | 725 | # |
722 | CONFIG_INPUT=m | 726 | CONFIG_INPUT=y |
723 | # CONFIG_INPUT_FF_MEMLESS is not set | 727 | # CONFIG_INPUT_FF_MEMLESS is not set |
724 | # CONFIG_INPUT_POLLDEV is not set | 728 | # CONFIG_INPUT_POLLDEV is not set |
725 | 729 | ||
@@ -745,7 +749,8 @@ CONFIG_INPUT_KEYBOARD=y | |||
745 | # CONFIG_KEYBOARD_NEWTON is not set | 749 | # CONFIG_KEYBOARD_NEWTON is not set |
746 | # CONFIG_KEYBOARD_STOWAWAY is not set | 750 | # CONFIG_KEYBOARD_STOWAWAY is not set |
747 | # CONFIG_KEYBOARD_GPIO is not set | 751 | # CONFIG_KEYBOARD_GPIO is not set |
748 | CONFIG_KEYBOARD_BFIN=m | 752 | CONFIG_KEYBOARD_BFIN=y |
753 | # CONFIG_KEYBOARD_OPENCORES is not set | ||
749 | # CONFIG_INPUT_MOUSE is not set | 754 | # CONFIG_INPUT_MOUSE is not set |
750 | # CONFIG_INPUT_JOYSTICK is not set | 755 | # CONFIG_INPUT_JOYSTICK is not set |
751 | # CONFIG_INPUT_TABLET is not set | 756 | # CONFIG_INPUT_TABLET is not set |
@@ -768,7 +773,6 @@ CONFIG_INPUT_MISC=y | |||
768 | # CONFIG_INPUT_POWERMATE is not set | 773 | # CONFIG_INPUT_POWERMATE is not set |
769 | # CONFIG_INPUT_YEALINK is not set | 774 | # CONFIG_INPUT_YEALINK is not set |
770 | # CONFIG_INPUT_UINPUT is not set | 775 | # CONFIG_INPUT_UINPUT is not set |
771 | # CONFIG_BF53X_PFBUTTONS is not set | ||
772 | # CONFIG_TWI_KEYPAD is not set | 776 | # CONFIG_TWI_KEYPAD is not set |
773 | 777 | ||
774 | # | 778 | # |
@@ -786,13 +790,16 @@ CONFIG_INPUT_MISC=y | |||
786 | # CONFIG_BF5xx_PPIFCD is not set | 790 | # CONFIG_BF5xx_PPIFCD is not set |
787 | # CONFIG_BFIN_SIMPLE_TIMER is not set | 791 | # CONFIG_BFIN_SIMPLE_TIMER is not set |
788 | # CONFIG_BF5xx_PPI is not set | 792 | # CONFIG_BF5xx_PPI is not set |
793 | CONFIG_BFIN_OTP=y | ||
794 | # CONFIG_BFIN_OTP_WRITE_ENABLE is not set | ||
789 | # CONFIG_BFIN_SPORT is not set | 795 | # CONFIG_BFIN_SPORT is not set |
790 | # CONFIG_BFIN_TIMER_LATENCY is not set | 796 | # CONFIG_BFIN_TIMER_LATENCY is not set |
791 | # CONFIG_TWI_LCD is not set | 797 | # CONFIG_TWI_LCD is not set |
792 | # CONFIG_AD5304 is not set | 798 | # CONFIG_AD5304 is not set |
793 | # CONFIG_BF5xx_TEA5764 is not set | 799 | CONFIG_VT=y |
794 | # CONFIG_BF5xx_FBDMA is not set | 800 | CONFIG_VT_CONSOLE=y |
795 | # CONFIG_VT is not set | 801 | CONFIG_HW_CONSOLE=y |
802 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
796 | # CONFIG_SERIAL_NONSTANDARD is not set | 803 | # CONFIG_SERIAL_NONSTANDARD is not set |
797 | 804 | ||
798 | # | 805 | # |
@@ -858,7 +865,6 @@ CONFIG_I2C_CHARDEV=y | |||
858 | # | 865 | # |
859 | # I2C Hardware Bus support | 866 | # I2C Hardware Bus support |
860 | # | 867 | # |
861 | # CONFIG_I2C_BLACKFIN_GPIO is not set | ||
862 | CONFIG_I2C_BLACKFIN_TWI=y | 868 | CONFIG_I2C_BLACKFIN_TWI=y |
863 | CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50 | 869 | CONFIG_I2C_BLACKFIN_TWI_CLK_KHZ=50 |
864 | # CONFIG_I2C_GPIO is not set | 870 | # CONFIG_I2C_GPIO is not set |
@@ -976,12 +982,12 @@ CONFIG_DAB=y | |||
976 | # | 982 | # |
977 | # CONFIG_DISPLAY_SUPPORT is not set | 983 | # CONFIG_DISPLAY_SUPPORT is not set |
978 | # CONFIG_VGASTATE is not set | 984 | # CONFIG_VGASTATE is not set |
979 | CONFIG_FB=m | 985 | CONFIG_FB=y |
980 | CONFIG_FIRMWARE_EDID=y | 986 | CONFIG_FIRMWARE_EDID=y |
981 | # CONFIG_FB_DDC is not set | 987 | # CONFIG_FB_DDC is not set |
982 | CONFIG_FB_CFB_FILLRECT=m | 988 | CONFIG_FB_CFB_FILLRECT=y |
983 | CONFIG_FB_CFB_COPYAREA=m | 989 | CONFIG_FB_CFB_COPYAREA=y |
984 | CONFIG_FB_CFB_IMAGEBLIT=m | 990 | CONFIG_FB_CFB_IMAGEBLIT=y |
985 | # CONFIG_FB_SYS_FILLRECT is not set | 991 | # CONFIG_FB_SYS_FILLRECT is not set |
986 | # CONFIG_FB_SYS_COPYAREA is not set | 992 | # CONFIG_FB_SYS_COPYAREA is not set |
987 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 993 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
@@ -998,11 +1004,34 @@ CONFIG_FB_DEFERRED_IO=y | |||
998 | # | 1004 | # |
999 | # CONFIG_FB_BFIN_7171 is not set | 1005 | # CONFIG_FB_BFIN_7171 is not set |
1000 | # CONFIG_FB_BFIN_7393 is not set | 1006 | # CONFIG_FB_BFIN_7393 is not set |
1001 | CONFIG_FB_BF54X_LQ043=m | 1007 | CONFIG_FB_BF54X_LQ043=y |
1002 | # CONFIG_FB_BFIN_T350MCQB is not set | 1008 | # CONFIG_FB_BFIN_T350MCQB is not set |
1003 | # CONFIG_FB_S1D13XXX is not set | 1009 | # CONFIG_FB_S1D13XXX is not set |
1004 | # CONFIG_FB_VIRTUAL is not set | 1010 | # CONFIG_FB_VIRTUAL is not set |
1005 | # CONFIG_LOGO is not set | 1011 | |
1012 | # | ||
1013 | # Console display driver support | ||
1014 | # | ||
1015 | CONFIG_DUMMY_CONSOLE=y | ||
1016 | CONFIG_FRAMEBUFFER_CONSOLE=y | ||
1017 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | ||
1018 | CONFIG_FONTS=y | ||
1019 | # CONFIG_FONT_8x8 is not set | ||
1020 | # CONFIG_FONT_8x16 is not set | ||
1021 | CONFIG_FONT_6x11=y | ||
1022 | # CONFIG_FONT_7x14 is not set | ||
1023 | # CONFIG_FONT_PEARL_8x8 is not set | ||
1024 | # CONFIG_FONT_ACORN_8x8 is not set | ||
1025 | # CONFIG_FONT_MINI_4x6 is not set | ||
1026 | # CONFIG_FONT_SUN8x16 is not set | ||
1027 | # CONFIG_FONT_SUN12x22 is not set | ||
1028 | # CONFIG_FONT_10x18 is not set | ||
1029 | CONFIG_LOGO=y | ||
1030 | # CONFIG_LOGO_LINUX_MONO is not set | ||
1031 | # CONFIG_LOGO_LINUX_VGA16 is not set | ||
1032 | # CONFIG_LOGO_LINUX_CLUT224 is not set | ||
1033 | # CONFIG_LOGO_BLACKFIN_VGA16 is not set | ||
1034 | CONFIG_LOGO_BLACKFIN_CLUT224=y | ||
1006 | 1035 | ||
1007 | # | 1036 | # |
1008 | # Sound | 1037 | # Sound |
@@ -1051,7 +1080,8 @@ CONFIG_SND_BF5XX_SOC_BF548_EZKIT=y | |||
1051 | # CONFIG_SND_BF5XX_SOC_WM8750 is not set | 1080 | # CONFIG_SND_BF5XX_SOC_WM8750 is not set |
1052 | # CONFIG_SND_BF5XX_SOC_WM8731 is not set | 1081 | # CONFIG_SND_BF5XX_SOC_WM8731 is not set |
1053 | CONFIG_SND_BF5XX_SPORT_NUM=0 | 1082 | CONFIG_SND_BF5XX_SPORT_NUM=0 |
1054 | # CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set | 1083 | CONFIG_SND_BF5XX_HAVE_COLD_RESET=y |
1084 | CONFIG_SND_BF5XX_RESET_GPIO_NUM=19 | ||
1055 | CONFIG_SND_SOC_AD1980=y | 1085 | CONFIG_SND_SOC_AD1980=y |
1056 | 1086 | ||
1057 | # | 1087 | # |
@@ -1403,7 +1433,7 @@ CONFIG_NLS_UTF8=m | |||
1403 | # | 1433 | # |
1404 | # CONFIG_PRINTK_TIME is not set | 1434 | # CONFIG_PRINTK_TIME is not set |
1405 | CONFIG_ENABLE_MUST_CHECK=y | 1435 | CONFIG_ENABLE_MUST_CHECK=y |
1406 | CONFIG_MAGIC_SYSRQ=y | 1436 | # CONFIG_MAGIC_SYSRQ is not set |
1407 | # CONFIG_UNUSED_SYMBOLS is not set | 1437 | # CONFIG_UNUSED_SYMBOLS is not set |
1408 | CONFIG_DEBUG_FS=y | 1438 | CONFIG_DEBUG_FS=y |
1409 | # CONFIG_HEADERS_CHECK is not set | 1439 | # CONFIG_HEADERS_CHECK is not set |
@@ -1428,7 +1458,7 @@ CONFIG_ACCESS_CHECK=y | |||
1428 | # CONFIG_KEYS is not set | 1458 | # CONFIG_KEYS is not set |
1429 | CONFIG_SECURITY=y | 1459 | CONFIG_SECURITY=y |
1430 | # CONFIG_SECURITY_NETWORK is not set | 1460 | # CONFIG_SECURITY_NETWORK is not set |
1431 | CONFIG_SECURITY_CAPABILITIES=y | 1461 | CONFIG_SECURITY_CAPABILITIES=m |
1432 | 1462 | ||
1433 | # | 1463 | # |
1434 | # Cryptographic options | 1464 | # Cryptographic options |
@@ -1439,7 +1469,7 @@ CONFIG_SECURITY_CAPABILITIES=y | |||
1439 | # Library routines | 1469 | # Library routines |
1440 | # | 1470 | # |
1441 | CONFIG_BITREVERSE=y | 1471 | CONFIG_BITREVERSE=y |
1442 | # CONFIG_CRC_CCITT is not set | 1472 | CONFIG_CRC_CCITT=m |
1443 | # CONFIG_CRC16 is not set | 1473 | # CONFIG_CRC16 is not set |
1444 | # CONFIG_CRC_ITU_T is not set | 1474 | # CONFIG_CRC_ITU_T is not set |
1445 | CONFIG_CRC32=y | 1475 | CONFIG_CRC32=y |
diff --git a/arch/blackfin/configs/BF561-EZKIT_defconfig b/arch/blackfin/configs/BF561-EZKIT_defconfig index e9f100b45eb1..8546994939fb 100644 --- a/arch/blackfin/configs/BF561-EZKIT_defconfig +++ b/arch/blackfin/configs/BF561-EZKIT_defconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.22.12 | 3 | # Linux kernel version: 2.6.22.16 |
4 | # | 4 | # |
5 | # CONFIG_MMU is not set | 5 | # CONFIG_MMU is not set |
6 | # CONFIG_FPU is not set | 6 | # CONFIG_FPU is not set |
@@ -115,7 +115,10 @@ CONFIG_PREEMPT_VOLUNTARY=y | |||
115 | # Processor and Board Settings | 115 | # Processor and Board Settings |
116 | # | 116 | # |
117 | # CONFIG_BF522 is not set | 117 | # CONFIG_BF522 is not set |
118 | # CONFIG_BF523 is not set | ||
119 | # CONFIG_BF524 is not set | ||
118 | # CONFIG_BF525 is not set | 120 | # CONFIG_BF525 is not set |
121 | # CONFIG_BF526 is not set | ||
119 | # CONFIG_BF527 is not set | 122 | # CONFIG_BF527 is not set |
120 | # CONFIG_BF531 is not set | 123 | # CONFIG_BF531 is not set |
121 | # CONFIG_BF532 is not set | 124 | # CONFIG_BF532 is not set |
@@ -238,7 +241,7 @@ CONFIG_CLKIN_HZ=30000000 | |||
238 | # CONFIG_BFIN_KERNEL_CLOCK is not set | 241 | # CONFIG_BFIN_KERNEL_CLOCK is not set |
239 | CONFIG_MAX_VCO_HZ=600000000 | 242 | CONFIG_MAX_VCO_HZ=600000000 |
240 | CONFIG_MIN_VCO_HZ=50000000 | 243 | CONFIG_MIN_VCO_HZ=50000000 |
241 | CONFIG_MAX_SCLK_HZ=133000000 | 244 | CONFIG_MAX_SCLK_HZ=133333333 |
242 | CONFIG_MIN_SCLK_HZ=27000000 | 245 | CONFIG_MIN_SCLK_HZ=27000000 |
243 | 246 | ||
244 | # | 247 | # |
@@ -311,6 +314,7 @@ CONFIG_BFIN_DCACHE=y | |||
311 | # CONFIG_BFIN_WB is not set | 314 | # CONFIG_BFIN_WB is not set |
312 | CONFIG_BFIN_WT=y | 315 | CONFIG_BFIN_WT=y |
313 | CONFIG_L1_MAX_PIECE=16 | 316 | CONFIG_L1_MAX_PIECE=16 |
317 | # CONFIG_MPU is not set | ||
314 | 318 | ||
315 | # | 319 | # |
316 | # Asynchonous Memory Configuration | 320 | # Asynchonous Memory Configuration |
@@ -512,7 +516,7 @@ CONFIG_MTD=y | |||
512 | # CONFIG_MTD_CONCAT is not set | 516 | # CONFIG_MTD_CONCAT is not set |
513 | CONFIG_MTD_PARTITIONS=y | 517 | CONFIG_MTD_PARTITIONS=y |
514 | # CONFIG_MTD_REDBOOT_PARTS is not set | 518 | # CONFIG_MTD_REDBOOT_PARTS is not set |
515 | # CONFIG_MTD_CMDLINE_PARTS is not set | 519 | CONFIG_MTD_CMDLINE_PARTS=y |
516 | 520 | ||
517 | # | 521 | # |
518 | # User Modules And Translation Layers | 522 | # User Modules And Translation Layers |
@@ -529,8 +533,8 @@ CONFIG_MTD_BLOCK=y | |||
529 | # | 533 | # |
530 | # RAM/ROM/Flash chip drivers | 534 | # RAM/ROM/Flash chip drivers |
531 | # | 535 | # |
532 | # CONFIG_MTD_CFI is not set | 536 | CONFIG_MTD_CFI=m |
533 | CONFIG_MTD_JEDECPROBE=m | 537 | # CONFIG_MTD_JEDECPROBE is not set |
534 | CONFIG_MTD_GEN_PROBE=m | 538 | CONFIG_MTD_GEN_PROBE=m |
535 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | 539 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set |
536 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | 540 | CONFIG_MTD_MAP_BANK_WIDTH_1=y |
@@ -544,9 +548,9 @@ CONFIG_MTD_CFI_I2=y | |||
544 | # CONFIG_MTD_CFI_I4 is not set | 548 | # CONFIG_MTD_CFI_I4 is not set |
545 | # CONFIG_MTD_CFI_I8 is not set | 549 | # CONFIG_MTD_CFI_I8 is not set |
546 | # CONFIG_MTD_CFI_INTELEXT is not set | 550 | # CONFIG_MTD_CFI_INTELEXT is not set |
547 | # CONFIG_MTD_CFI_AMDSTD is not set | 551 | CONFIG_MTD_CFI_AMDSTD=m |
548 | # CONFIG_MTD_CFI_STAA is not set | 552 | # CONFIG_MTD_CFI_STAA is not set |
549 | CONFIG_MTD_MW320D=m | 553 | CONFIG_MTD_CFI_UTIL=m |
550 | CONFIG_MTD_RAM=y | 554 | CONFIG_MTD_RAM=y |
551 | CONFIG_MTD_ROM=m | 555 | CONFIG_MTD_ROM=m |
552 | # CONFIG_MTD_ABSENT is not set | 556 | # CONFIG_MTD_ABSENT is not set |
@@ -554,12 +558,11 @@ CONFIG_MTD_ROM=m | |||
554 | # | 558 | # |
555 | # Mapping drivers for chip access | 559 | # Mapping drivers for chip access |
556 | # | 560 | # |
557 | CONFIG_MTD_COMPLEX_MAPPINGS=y | 561 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set |
558 | # CONFIG_MTD_PHYSMAP is not set | 562 | CONFIG_MTD_PHYSMAP=m |
559 | # CONFIG_MTD_EZKIT561 is not set | 563 | CONFIG_MTD_PHYSMAP_START=0x20000000 |
560 | CONFIG_MTD_BF5xx=m | 564 | CONFIG_MTD_PHYSMAP_LEN=0x0 |
561 | CONFIG_BFIN_FLASH_SIZE=0x0400000 | 565 | CONFIG_MTD_PHYSMAP_BANKWIDTH=2 |
562 | CONFIG_EBIU_FLASH_BASE=0x20000000 | ||
563 | # CONFIG_MTD_UCLINUX is not set | 566 | # CONFIG_MTD_UCLINUX is not set |
564 | # CONFIG_MTD_PLATRAM is not set | 567 | # CONFIG_MTD_PLATRAM is not set |
565 | 568 | ||
@@ -647,8 +650,8 @@ CONFIG_SMC91X=y | |||
647 | # CONFIG_SMSC911X is not set | 650 | # CONFIG_SMSC911X is not set |
648 | # CONFIG_DM9000 is not set | 651 | # CONFIG_DM9000 is not set |
649 | CONFIG_NETDEV_1000=y | 652 | CONFIG_NETDEV_1000=y |
650 | CONFIG_NETDEV_10000=y | ||
651 | # CONFIG_AX88180 is not set | 653 | # CONFIG_AX88180 is not set |
654 | CONFIG_NETDEV_10000=y | ||
652 | 655 | ||
653 | # | 656 | # |
654 | # Wireless LAN | 657 | # Wireless LAN |
@@ -717,7 +720,6 @@ CONFIG_INPUT_EVDEV=m | |||
717 | # CONFIG_BFIN_SPORT is not set | 720 | # CONFIG_BFIN_SPORT is not set |
718 | # CONFIG_BFIN_TIMER_LATENCY is not set | 721 | # CONFIG_BFIN_TIMER_LATENCY is not set |
719 | # CONFIG_AD5304 is not set | 722 | # CONFIG_AD5304 is not set |
720 | # CONFIG_BF5xx_FBDMA is not set | ||
721 | # CONFIG_VT is not set | 723 | # CONFIG_VT is not set |
722 | # CONFIG_SERIAL_NONSTANDARD is not set | 724 | # CONFIG_SERIAL_NONSTANDARD is not set |
723 | 725 | ||
diff --git a/arch/blackfin/kernel/Makefile b/arch/blackfin/kernel/Makefile index 8a4cfb293b27..318b9b692a48 100644 --- a/arch/blackfin/kernel/Makefile +++ b/arch/blackfin/kernel/Makefile | |||
@@ -7,7 +7,7 @@ extra-y := init_task.o vmlinux.lds | |||
7 | obj-y := \ | 7 | obj-y := \ |
8 | entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ | 8 | entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ |
9 | sys_bfin.o time.o traps.o irqchip.o dma-mapping.o flat.o \ | 9 | sys_bfin.o time.o traps.o irqchip.o dma-mapping.o flat.o \ |
10 | fixed_code.o cplbinit.o cacheinit.o reboot.o bfin_gpio.o | 10 | fixed_code.o reboot.o bfin_gpio.o |
11 | 11 | ||
12 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o | 12 | obj-$(CONFIG_BFIN_GPTIMERS) += gptimers.o |
13 | obj-$(CONFIG_MODULES) += module.o | 13 | obj-$(CONFIG_MODULES) += module.o |
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c index b54446055a43..fa9debe8d5f4 100644 --- a/arch/blackfin/kernel/bfin_dma_5xx.c +++ b/arch/blackfin/kernel/bfin_dma_5xx.c | |||
@@ -339,13 +339,13 @@ EXPORT_SYMBOL(set_dma_config); | |||
339 | 339 | ||
340 | unsigned short | 340 | unsigned short |
341 | set_bfin_dma_config(char direction, char flow_mode, | 341 | set_bfin_dma_config(char direction, char flow_mode, |
342 | char intr_mode, char dma_mode, char width) | 342 | char intr_mode, char dma_mode, char width, char syncmode) |
343 | { | 343 | { |
344 | unsigned short config; | 344 | unsigned short config; |
345 | 345 | ||
346 | config = | 346 | config = |
347 | ((direction << 1) | (width << 2) | (dma_mode << 4) | | 347 | ((direction << 1) | (width << 2) | (dma_mode << 4) | |
348 | (intr_mode << 6) | (flow_mode << 12) | RESTART); | 348 | (intr_mode << 6) | (flow_mode << 12) | (syncmode << 5)); |
349 | return config; | 349 | return config; |
350 | } | 350 | } |
351 | EXPORT_SYMBOL(set_bfin_dma_config); | 351 | EXPORT_SYMBOL(set_bfin_dma_config); |
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c index ce85d4bf34ca..6bbe0a2fccb8 100644 --- a/arch/blackfin/kernel/bfin_gpio.c +++ b/arch/blackfin/kernel/bfin_gpio.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * Description: GPIO Abstraction Layer | 7 | * Description: GPIO Abstraction Layer |
8 | * | 8 | * |
9 | * Modified: | 9 | * Modified: |
10 | * Copyright 2007 Analog Devices Inc. | 10 | * Copyright 2008 Analog Devices Inc. |
11 | * | 11 | * |
12 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 12 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
13 | * | 13 | * |
@@ -83,6 +83,7 @@ | |||
83 | #include <linux/delay.h> | 83 | #include <linux/delay.h> |
84 | #include <linux/module.h> | 84 | #include <linux/module.h> |
85 | #include <linux/err.h> | 85 | #include <linux/err.h> |
86 | #include <linux/proc_fs.h> | ||
86 | #include <asm/blackfin.h> | 87 | #include <asm/blackfin.h> |
87 | #include <asm/gpio.h> | 88 | #include <asm/gpio.h> |
88 | #include <asm/portmux.h> | 89 | #include <asm/portmux.h> |
@@ -136,7 +137,6 @@ static unsigned short *port_fer[gpio_bank(MAX_BLACKFIN_GPIOS)] = { | |||
136 | (unsigned short *) PORTG_FER, | 137 | (unsigned short *) PORTG_FER, |
137 | (unsigned short *) PORTH_FER, | 138 | (unsigned short *) PORTH_FER, |
138 | }; | 139 | }; |
139 | |||
140 | #endif | 140 | #endif |
141 | 141 | ||
142 | #ifdef BF527_FAMILY | 142 | #ifdef BF527_FAMILY |
@@ -178,15 +178,13 @@ static struct gpio_port_t *gpio_array[gpio_bank(MAX_BLACKFIN_GPIOS)] = { | |||
178 | #endif | 178 | #endif |
179 | 179 | ||
180 | static unsigned short reserved_gpio_map[gpio_bank(MAX_BLACKFIN_GPIOS)]; | 180 | static unsigned short reserved_gpio_map[gpio_bank(MAX_BLACKFIN_GPIOS)]; |
181 | static unsigned short reserved_peri_map[gpio_bank(MAX_BLACKFIN_GPIOS + 16)]; | 181 | static unsigned short reserved_peri_map[gpio_bank(MAX_RESOURCES)]; |
182 | 182 | ||
183 | #define MAX_RESOURCES 256 | ||
184 | #define RESOURCE_LABEL_SIZE 16 | 183 | #define RESOURCE_LABEL_SIZE 16 |
185 | 184 | ||
186 | struct str_ident { | 185 | static struct str_ident { |
187 | char name[RESOURCE_LABEL_SIZE]; | 186 | char name[RESOURCE_LABEL_SIZE]; |
188 | } *str_ident; | 187 | } str_ident[MAX_RESOURCES]; |
189 | |||
190 | 188 | ||
191 | #ifdef CONFIG_PM | 189 | #ifdef CONFIG_PM |
192 | static unsigned short wakeup_map[gpio_bank(MAX_BLACKFIN_GPIOS)]; | 190 | static unsigned short wakeup_map[gpio_bank(MAX_BLACKFIN_GPIOS)]; |
@@ -212,7 +210,7 @@ static unsigned int sic_iwr_irqs[gpio_bank(MAX_BLACKFIN_GPIOS)] = {IRQ_PROG0_INT | |||
212 | #endif /* CONFIG_PM */ | 210 | #endif /* CONFIG_PM */ |
213 | 211 | ||
214 | #if defined(BF548_FAMILY) | 212 | #if defined(BF548_FAMILY) |
215 | inline int check_gpio(unsigned short gpio) | 213 | inline int check_gpio(unsigned gpio) |
216 | { | 214 | { |
217 | if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15 | 215 | if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15 |
218 | || gpio == GPIO_PH14 || gpio == GPIO_PH15 | 216 | || gpio == GPIO_PH14 || gpio == GPIO_PH15 |
@@ -222,7 +220,7 @@ inline int check_gpio(unsigned short gpio) | |||
222 | return 0; | 220 | return 0; |
223 | } | 221 | } |
224 | #else | 222 | #else |
225 | inline int check_gpio(unsigned short gpio) | 223 | inline int check_gpio(unsigned gpio) |
226 | { | 224 | { |
227 | if (gpio >= MAX_BLACKFIN_GPIOS) | 225 | if (gpio >= MAX_BLACKFIN_GPIOS) |
228 | return -EINVAL; | 226 | return -EINVAL; |
@@ -230,9 +228,13 @@ inline int check_gpio(unsigned short gpio) | |||
230 | } | 228 | } |
231 | #endif | 229 | #endif |
232 | 230 | ||
233 | static void set_label(unsigned short ident, const char *label) | 231 | void gpio_error(unsigned gpio) |
234 | { | 232 | { |
233 | printk(KERN_ERR "bfin-gpio: GPIO %d wasn't requested!\n", gpio); | ||
234 | } | ||
235 | 235 | ||
236 | static void set_label(unsigned short ident, const char *label) | ||
237 | { | ||
236 | if (label && str_ident) { | 238 | if (label && str_ident) { |
237 | strncpy(str_ident[ident].name, label, | 239 | strncpy(str_ident[ident].name, label, |
238 | RESOURCE_LABEL_SIZE); | 240 | RESOURCE_LABEL_SIZE); |
@@ -250,6 +252,11 @@ static char *get_label(unsigned short ident) | |||
250 | 252 | ||
251 | static int cmp_label(unsigned short ident, const char *label) | 253 | static int cmp_label(unsigned short ident, const char *label) |
252 | { | 254 | { |
255 | if (label == NULL) { | ||
256 | dump_stack(); | ||
257 | printk(KERN_ERR "Please provide none-null label\n"); | ||
258 | } | ||
259 | |||
253 | if (label && str_ident) | 260 | if (label && str_ident) |
254 | return strncmp(str_ident[ident].name, | 261 | return strncmp(str_ident[ident].name, |
255 | label, strlen(label)); | 262 | label, strlen(label)); |
@@ -258,7 +265,7 @@ static int cmp_label(unsigned short ident, const char *label) | |||
258 | } | 265 | } |
259 | 266 | ||
260 | #if defined(BF527_FAMILY) || defined(BF537_FAMILY) | 267 | #if defined(BF527_FAMILY) || defined(BF537_FAMILY) |
261 | static void port_setup(unsigned short gpio, unsigned short usage) | 268 | static void port_setup(unsigned gpio, unsigned short usage) |
262 | { | 269 | { |
263 | if (!check_gpio(gpio)) { | 270 | if (!check_gpio(gpio)) { |
264 | if (usage == GPIO_USAGE) | 271 | if (usage == GPIO_USAGE) |
@@ -269,7 +276,7 @@ static void port_setup(unsigned short gpio, unsigned short usage) | |||
269 | } | 276 | } |
270 | } | 277 | } |
271 | #elif defined(BF548_FAMILY) | 278 | #elif defined(BF548_FAMILY) |
272 | static void port_setup(unsigned short gpio, unsigned short usage) | 279 | static void port_setup(unsigned gpio, unsigned short usage) |
273 | { | 280 | { |
274 | if (usage == GPIO_USAGE) | 281 | if (usage == GPIO_USAGE) |
275 | gpio_array[gpio_bank(gpio)]->port_fer &= ~gpio_bit(gpio); | 282 | gpio_array[gpio_bank(gpio)]->port_fer &= ~gpio_bit(gpio); |
@@ -390,7 +397,7 @@ inline void portmux_setup(unsigned short portno, unsigned short function) | |||
390 | #endif | 397 | #endif |
391 | 398 | ||
392 | #ifndef BF548_FAMILY | 399 | #ifndef BF548_FAMILY |
393 | static void default_gpio(unsigned short gpio) | 400 | static void default_gpio(unsigned gpio) |
394 | { | 401 | { |
395 | unsigned short bank, bitmask; | 402 | unsigned short bank, bitmask; |
396 | unsigned long flags; | 403 | unsigned long flags; |
@@ -410,7 +417,6 @@ static void default_gpio(unsigned short gpio) | |||
410 | gpio_bankb[bank]->edge &= ~bitmask; | 417 | gpio_bankb[bank]->edge &= ~bitmask; |
411 | AWA_DUMMY_READ(edge); | 418 | AWA_DUMMY_READ(edge); |
412 | local_irq_restore(flags); | 419 | local_irq_restore(flags); |
413 | |||
414 | } | 420 | } |
415 | #else | 421 | #else |
416 | # define default_gpio(...) do { } while (0) | 422 | # define default_gpio(...) do { } while (0) |
@@ -418,12 +424,6 @@ static void default_gpio(unsigned short gpio) | |||
418 | 424 | ||
419 | static int __init bfin_gpio_init(void) | 425 | static int __init bfin_gpio_init(void) |
420 | { | 426 | { |
421 | str_ident = kcalloc(MAX_RESOURCES, | ||
422 | sizeof(struct str_ident), GFP_KERNEL); | ||
423 | if (str_ident == NULL) | ||
424 | return -ENOMEM; | ||
425 | |||
426 | memset(str_ident, 0, MAX_RESOURCES * sizeof(struct str_ident)); | ||
427 | 427 | ||
428 | printk(KERN_INFO "Blackfin GPIO Controller\n"); | 428 | printk(KERN_INFO "Blackfin GPIO Controller\n"); |
429 | 429 | ||
@@ -454,10 +454,9 @@ arch_initcall(bfin_gpio_init); | |||
454 | /* Set a specific bit */ | 454 | /* Set a specific bit */ |
455 | 455 | ||
456 | #define SET_GPIO(name) \ | 456 | #define SET_GPIO(name) \ |
457 | void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \ | 457 | void set_gpio_ ## name(unsigned gpio, unsigned short arg) \ |
458 | { \ | 458 | { \ |
459 | unsigned long flags; \ | 459 | unsigned long flags; \ |
460 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); \ | ||
461 | local_irq_save(flags); \ | 460 | local_irq_save(flags); \ |
462 | if (arg) \ | 461 | if (arg) \ |
463 | gpio_bankb[gpio_bank(gpio)]->name |= gpio_bit(gpio); \ | 462 | gpio_bankb[gpio_bank(gpio)]->name |= gpio_bit(gpio); \ |
@@ -477,10 +476,9 @@ SET_GPIO(both) | |||
477 | 476 | ||
478 | #if ANOMALY_05000311 || ANOMALY_05000323 | 477 | #if ANOMALY_05000311 || ANOMALY_05000323 |
479 | #define SET_GPIO_SC(name) \ | 478 | #define SET_GPIO_SC(name) \ |
480 | void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \ | 479 | void set_gpio_ ## name(unsigned gpio, unsigned short arg) \ |
481 | { \ | 480 | { \ |
482 | unsigned long flags; \ | 481 | unsigned long flags; \ |
483 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); \ | ||
484 | local_irq_save(flags); \ | 482 | local_irq_save(flags); \ |
485 | if (arg) \ | 483 | if (arg) \ |
486 | gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \ | 484 | gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \ |
@@ -492,9 +490,8 @@ void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \ | |||
492 | EXPORT_SYMBOL(set_gpio_ ## name); | 490 | EXPORT_SYMBOL(set_gpio_ ## name); |
493 | #else | 491 | #else |
494 | #define SET_GPIO_SC(name) \ | 492 | #define SET_GPIO_SC(name) \ |
495 | void set_gpio_ ## name(unsigned short gpio, unsigned short arg) \ | 493 | void set_gpio_ ## name(unsigned gpio, unsigned short arg) \ |
496 | { \ | 494 | { \ |
497 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); \ | ||
498 | if (arg) \ | 495 | if (arg) \ |
499 | gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \ | 496 | gpio_bankb[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \ |
500 | else \ | 497 | else \ |
@@ -508,19 +505,17 @@ SET_GPIO_SC(maskb) | |||
508 | SET_GPIO_SC(data) | 505 | SET_GPIO_SC(data) |
509 | 506 | ||
510 | #if ANOMALY_05000311 || ANOMALY_05000323 | 507 | #if ANOMALY_05000311 || ANOMALY_05000323 |
511 | void set_gpio_toggle(unsigned short gpio) | 508 | void set_gpio_toggle(unsigned gpio) |
512 | { | 509 | { |
513 | unsigned long flags; | 510 | unsigned long flags; |
514 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | ||
515 | local_irq_save(flags); | 511 | local_irq_save(flags); |
516 | gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio); | 512 | gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio); |
517 | AWA_DUMMY_READ(toggle); | 513 | AWA_DUMMY_READ(toggle); |
518 | local_irq_restore(flags); | 514 | local_irq_restore(flags); |
519 | } | 515 | } |
520 | #else | 516 | #else |
521 | void set_gpio_toggle(unsigned short gpio) | 517 | void set_gpio_toggle(unsigned gpio) |
522 | { | 518 | { |
523 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | ||
524 | gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio); | 519 | gpio_bankb[gpio_bank(gpio)]->toggle = gpio_bit(gpio); |
525 | } | 520 | } |
526 | #endif | 521 | #endif |
@@ -531,7 +526,7 @@ EXPORT_SYMBOL(set_gpio_toggle); | |||
531 | 526 | ||
532 | #if ANOMALY_05000311 || ANOMALY_05000323 | 527 | #if ANOMALY_05000311 || ANOMALY_05000323 |
533 | #define SET_GPIO_P(name) \ | 528 | #define SET_GPIO_P(name) \ |
534 | void set_gpiop_ ## name(unsigned short gpio, unsigned short arg) \ | 529 | void set_gpiop_ ## name(unsigned gpio, unsigned short arg) \ |
535 | { \ | 530 | { \ |
536 | unsigned long flags; \ | 531 | unsigned long flags; \ |
537 | local_irq_save(flags); \ | 532 | local_irq_save(flags); \ |
@@ -542,7 +537,7 @@ void set_gpiop_ ## name(unsigned short gpio, unsigned short arg) \ | |||
542 | EXPORT_SYMBOL(set_gpiop_ ## name); | 537 | EXPORT_SYMBOL(set_gpiop_ ## name); |
543 | #else | 538 | #else |
544 | #define SET_GPIO_P(name) \ | 539 | #define SET_GPIO_P(name) \ |
545 | void set_gpiop_ ## name(unsigned short gpio, unsigned short arg) \ | 540 | void set_gpiop_ ## name(unsigned gpio, unsigned short arg) \ |
546 | { \ | 541 | { \ |
547 | gpio_bankb[gpio_bank(gpio)]->name = arg; \ | 542 | gpio_bankb[gpio_bank(gpio)]->name = arg; \ |
548 | } \ | 543 | } \ |
@@ -558,11 +553,10 @@ SET_GPIO_P(both) | |||
558 | SET_GPIO_P(maska) | 553 | SET_GPIO_P(maska) |
559 | SET_GPIO_P(maskb) | 554 | SET_GPIO_P(maskb) |
560 | 555 | ||
561 | |||
562 | /* Get a specific bit */ | 556 | /* Get a specific bit */ |
563 | #if ANOMALY_05000311 || ANOMALY_05000323 | 557 | #if ANOMALY_05000311 || ANOMALY_05000323 |
564 | #define GET_GPIO(name) \ | 558 | #define GET_GPIO(name) \ |
565 | unsigned short get_gpio_ ## name(unsigned short gpio) \ | 559 | unsigned short get_gpio_ ## name(unsigned gpio) \ |
566 | { \ | 560 | { \ |
567 | unsigned long flags; \ | 561 | unsigned long flags; \ |
568 | unsigned short ret; \ | 562 | unsigned short ret; \ |
@@ -575,7 +569,7 @@ unsigned short get_gpio_ ## name(unsigned short gpio) \ | |||
575 | EXPORT_SYMBOL(get_gpio_ ## name); | 569 | EXPORT_SYMBOL(get_gpio_ ## name); |
576 | #else | 570 | #else |
577 | #define GET_GPIO(name) \ | 571 | #define GET_GPIO(name) \ |
578 | unsigned short get_gpio_ ## name(unsigned short gpio) \ | 572 | unsigned short get_gpio_ ## name(unsigned gpio) \ |
579 | { \ | 573 | { \ |
580 | return (0x01 & (gpio_bankb[gpio_bank(gpio)]->name >> gpio_sub_n(gpio))); \ | 574 | return (0x01 & (gpio_bankb[gpio_bank(gpio)]->name >> gpio_sub_n(gpio))); \ |
581 | } \ | 575 | } \ |
@@ -595,7 +589,7 @@ GET_GPIO(maskb) | |||
595 | 589 | ||
596 | #if ANOMALY_05000311 || ANOMALY_05000323 | 590 | #if ANOMALY_05000311 || ANOMALY_05000323 |
597 | #define GET_GPIO_P(name) \ | 591 | #define GET_GPIO_P(name) \ |
598 | unsigned short get_gpiop_ ## name(unsigned short gpio) \ | 592 | unsigned short get_gpiop_ ## name(unsigned gpio) \ |
599 | { \ | 593 | { \ |
600 | unsigned long flags; \ | 594 | unsigned long flags; \ |
601 | unsigned short ret; \ | 595 | unsigned short ret; \ |
@@ -608,7 +602,7 @@ unsigned short get_gpiop_ ## name(unsigned short gpio) \ | |||
608 | EXPORT_SYMBOL(get_gpiop_ ## name); | 602 | EXPORT_SYMBOL(get_gpiop_ ## name); |
609 | #else | 603 | #else |
610 | #define GET_GPIO_P(name) \ | 604 | #define GET_GPIO_P(name) \ |
611 | unsigned short get_gpiop_ ## name(unsigned short gpio) \ | 605 | unsigned short get_gpiop_ ## name(unsigned gpio) \ |
612 | { \ | 606 | { \ |
613 | return (gpio_bankb[gpio_bank(gpio)]->name);\ | 607 | return (gpio_bankb[gpio_bank(gpio)]->name);\ |
614 | } \ | 608 | } \ |
@@ -645,7 +639,7 @@ GET_GPIO_P(maskb) | |||
645 | ************************************************************* | 639 | ************************************************************* |
646 | * MODIFICATION HISTORY : | 640 | * MODIFICATION HISTORY : |
647 | **************************************************************/ | 641 | **************************************************************/ |
648 | int gpio_pm_wakeup_request(unsigned short gpio, unsigned char type) | 642 | int gpio_pm_wakeup_request(unsigned gpio, unsigned char type) |
649 | { | 643 | { |
650 | unsigned long flags; | 644 | unsigned long flags; |
651 | 645 | ||
@@ -653,7 +647,6 @@ int gpio_pm_wakeup_request(unsigned short gpio, unsigned char type) | |||
653 | return -EINVAL; | 647 | return -EINVAL; |
654 | 648 | ||
655 | local_irq_save(flags); | 649 | local_irq_save(flags); |
656 | |||
657 | wakeup_map[gpio_bank(gpio)] |= gpio_bit(gpio); | 650 | wakeup_map[gpio_bank(gpio)] |= gpio_bit(gpio); |
658 | wakeup_flags_map[gpio] = type; | 651 | wakeup_flags_map[gpio] = type; |
659 | local_irq_restore(flags); | 652 | local_irq_restore(flags); |
@@ -662,7 +655,7 @@ int gpio_pm_wakeup_request(unsigned short gpio, unsigned char type) | |||
662 | } | 655 | } |
663 | EXPORT_SYMBOL(gpio_pm_wakeup_request); | 656 | EXPORT_SYMBOL(gpio_pm_wakeup_request); |
664 | 657 | ||
665 | void gpio_pm_wakeup_free(unsigned short gpio) | 658 | void gpio_pm_wakeup_free(unsigned gpio) |
666 | { | 659 | { |
667 | unsigned long flags; | 660 | unsigned long flags; |
668 | 661 | ||
@@ -677,7 +670,7 @@ void gpio_pm_wakeup_free(unsigned short gpio) | |||
677 | } | 670 | } |
678 | EXPORT_SYMBOL(gpio_pm_wakeup_free); | 671 | EXPORT_SYMBOL(gpio_pm_wakeup_free); |
679 | 672 | ||
680 | static int bfin_gpio_wakeup_type(unsigned short gpio, unsigned char type) | 673 | static int bfin_gpio_wakeup_type(unsigned gpio, unsigned char type) |
681 | { | 674 | { |
682 | port_setup(gpio, GPIO_USAGE); | 675 | port_setup(gpio, GPIO_USAGE); |
683 | set_gpio_dir(gpio, 0); | 676 | set_gpio_dir(gpio, 0); |
@@ -784,6 +777,14 @@ void gpio_pm_restore(void) | |||
784 | } | 777 | } |
785 | 778 | ||
786 | #endif | 779 | #endif |
780 | #else /* BF548_FAMILY */ | ||
781 | |||
782 | unsigned short get_gpio_dir(unsigned gpio) | ||
783 | { | ||
784 | return (0x01 & (gpio_array[gpio_bank(gpio)]->port_dir_clear >> gpio_sub_n(gpio))); | ||
785 | } | ||
786 | EXPORT_SYMBOL(get_gpio_dir); | ||
787 | |||
787 | #endif /* BF548_FAMILY */ | 788 | #endif /* BF548_FAMILY */ |
788 | 789 | ||
789 | /*********************************************************** | 790 | /*********************************************************** |
@@ -1028,7 +1029,7 @@ EXPORT_SYMBOL(peripheral_free_list); | |||
1028 | * MODIFICATION HISTORY : | 1029 | * MODIFICATION HISTORY : |
1029 | **************************************************************/ | 1030 | **************************************************************/ |
1030 | 1031 | ||
1031 | int gpio_request(unsigned short gpio, const char *label) | 1032 | int gpio_request(unsigned gpio, const char *label) |
1032 | { | 1033 | { |
1033 | unsigned long flags; | 1034 | unsigned long flags; |
1034 | 1035 | ||
@@ -1075,7 +1076,7 @@ int gpio_request(unsigned short gpio, const char *label) | |||
1075 | } | 1076 | } |
1076 | EXPORT_SYMBOL(gpio_request); | 1077 | EXPORT_SYMBOL(gpio_request); |
1077 | 1078 | ||
1078 | void gpio_free(unsigned short gpio) | 1079 | void gpio_free(unsigned gpio) |
1079 | { | 1080 | { |
1080 | unsigned long flags; | 1081 | unsigned long flags; |
1081 | 1082 | ||
@@ -1085,7 +1086,7 @@ void gpio_free(unsigned short gpio) | |||
1085 | local_irq_save(flags); | 1086 | local_irq_save(flags); |
1086 | 1087 | ||
1087 | if (unlikely(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)))) { | 1088 | if (unlikely(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio)))) { |
1088 | printk(KERN_ERR "bfin-gpio: GPIO %d wasn't reserved!\n", gpio); | 1089 | gpio_error(gpio); |
1089 | dump_stack(); | 1090 | dump_stack(); |
1090 | local_irq_restore(flags); | 1091 | local_irq_restore(flags); |
1091 | return; | 1092 | return; |
@@ -1101,44 +1102,55 @@ void gpio_free(unsigned short gpio) | |||
1101 | } | 1102 | } |
1102 | EXPORT_SYMBOL(gpio_free); | 1103 | EXPORT_SYMBOL(gpio_free); |
1103 | 1104 | ||
1105 | |||
1104 | #ifdef BF548_FAMILY | 1106 | #ifdef BF548_FAMILY |
1105 | void gpio_direction_input(unsigned short gpio) | 1107 | int gpio_direction_input(unsigned gpio) |
1106 | { | 1108 | { |
1107 | unsigned long flags; | 1109 | unsigned long flags; |
1108 | 1110 | ||
1109 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | 1111 | if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { |
1112 | gpio_error(gpio); | ||
1113 | return -EINVAL; | ||
1114 | } | ||
1110 | 1115 | ||
1111 | local_irq_save(flags); | 1116 | local_irq_save(flags); |
1112 | gpio_array[gpio_bank(gpio)]->port_dir_clear = gpio_bit(gpio); | 1117 | gpio_array[gpio_bank(gpio)]->port_dir_clear = gpio_bit(gpio); |
1113 | gpio_array[gpio_bank(gpio)]->port_inen |= gpio_bit(gpio); | 1118 | gpio_array[gpio_bank(gpio)]->port_inen |= gpio_bit(gpio); |
1114 | local_irq_restore(flags); | 1119 | local_irq_restore(flags); |
1120 | |||
1121 | return 0; | ||
1115 | } | 1122 | } |
1116 | EXPORT_SYMBOL(gpio_direction_input); | 1123 | EXPORT_SYMBOL(gpio_direction_input); |
1117 | 1124 | ||
1118 | void gpio_direction_output(unsigned short gpio) | 1125 | int gpio_direction_output(unsigned gpio, int value) |
1119 | { | 1126 | { |
1120 | unsigned long flags; | 1127 | unsigned long flags; |
1121 | 1128 | ||
1122 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | 1129 | if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { |
1130 | gpio_error(gpio); | ||
1131 | return -EINVAL; | ||
1132 | } | ||
1123 | 1133 | ||
1124 | local_irq_save(flags); | 1134 | local_irq_save(flags); |
1125 | gpio_array[gpio_bank(gpio)]->port_inen &= ~gpio_bit(gpio); | 1135 | gpio_array[gpio_bank(gpio)]->port_inen &= ~gpio_bit(gpio); |
1136 | gpio_set_value(gpio, value); | ||
1126 | gpio_array[gpio_bank(gpio)]->port_dir_set = gpio_bit(gpio); | 1137 | gpio_array[gpio_bank(gpio)]->port_dir_set = gpio_bit(gpio); |
1127 | local_irq_restore(flags); | 1138 | local_irq_restore(flags); |
1139 | |||
1140 | return 0; | ||
1128 | } | 1141 | } |
1129 | EXPORT_SYMBOL(gpio_direction_output); | 1142 | EXPORT_SYMBOL(gpio_direction_output); |
1130 | 1143 | ||
1131 | void gpio_set_value(unsigned short gpio, unsigned short arg) | 1144 | void gpio_set_value(unsigned gpio, int arg) |
1132 | { | 1145 | { |
1133 | if (arg) | 1146 | if (arg) |
1134 | gpio_array[gpio_bank(gpio)]->port_set = gpio_bit(gpio); | 1147 | gpio_array[gpio_bank(gpio)]->port_set = gpio_bit(gpio); |
1135 | else | 1148 | else |
1136 | gpio_array[gpio_bank(gpio)]->port_clear = gpio_bit(gpio); | 1149 | gpio_array[gpio_bank(gpio)]->port_clear = gpio_bit(gpio); |
1137 | |||
1138 | } | 1150 | } |
1139 | EXPORT_SYMBOL(gpio_set_value); | 1151 | EXPORT_SYMBOL(gpio_set_value); |
1140 | 1152 | ||
1141 | unsigned short gpio_get_value(unsigned short gpio) | 1153 | int gpio_get_value(unsigned gpio) |
1142 | { | 1154 | { |
1143 | return (1 & (gpio_array[gpio_bank(gpio)]->port_data >> gpio_sub_n(gpio))); | 1155 | return (1 & (gpio_array[gpio_bank(gpio)]->port_data >> gpio_sub_n(gpio))); |
1144 | } | 1156 | } |
@@ -1146,31 +1158,47 @@ EXPORT_SYMBOL(gpio_get_value); | |||
1146 | 1158 | ||
1147 | #else | 1159 | #else |
1148 | 1160 | ||
1149 | void gpio_direction_input(unsigned short gpio) | 1161 | int gpio_direction_input(unsigned gpio) |
1150 | { | 1162 | { |
1151 | unsigned long flags; | 1163 | unsigned long flags; |
1152 | 1164 | ||
1153 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | 1165 | if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { |
1166 | gpio_error(gpio); | ||
1167 | return -EINVAL; | ||
1168 | } | ||
1154 | 1169 | ||
1155 | local_irq_save(flags); | 1170 | local_irq_save(flags); |
1156 | gpio_bankb[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio); | 1171 | gpio_bankb[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio); |
1157 | gpio_bankb[gpio_bank(gpio)]->inen |= gpio_bit(gpio); | 1172 | gpio_bankb[gpio_bank(gpio)]->inen |= gpio_bit(gpio); |
1158 | AWA_DUMMY_READ(inen); | 1173 | AWA_DUMMY_READ(inen); |
1159 | local_irq_restore(flags); | 1174 | local_irq_restore(flags); |
1175 | |||
1176 | return 0; | ||
1160 | } | 1177 | } |
1161 | EXPORT_SYMBOL(gpio_direction_input); | 1178 | EXPORT_SYMBOL(gpio_direction_input); |
1162 | 1179 | ||
1163 | void gpio_direction_output(unsigned short gpio) | 1180 | int gpio_direction_output(unsigned gpio, int value) |
1164 | { | 1181 | { |
1165 | unsigned long flags; | 1182 | unsigned long flags; |
1166 | 1183 | ||
1167 | BUG_ON(!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))); | 1184 | if (!(reserved_gpio_map[gpio_bank(gpio)] & gpio_bit(gpio))) { |
1185 | gpio_error(gpio); | ||
1186 | return -EINVAL; | ||
1187 | } | ||
1168 | 1188 | ||
1169 | local_irq_save(flags); | 1189 | local_irq_save(flags); |
1170 | gpio_bankb[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio); | 1190 | gpio_bankb[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio); |
1191 | |||
1192 | if (value) | ||
1193 | gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio); | ||
1194 | else | ||
1195 | gpio_bankb[gpio_bank(gpio)]->data_clear = gpio_bit(gpio); | ||
1196 | |||
1171 | gpio_bankb[gpio_bank(gpio)]->dir |= gpio_bit(gpio); | 1197 | gpio_bankb[gpio_bank(gpio)]->dir |= gpio_bit(gpio); |
1172 | AWA_DUMMY_READ(dir); | 1198 | AWA_DUMMY_READ(dir); |
1173 | local_irq_restore(flags); | 1199 | local_irq_restore(flags); |
1200 | |||
1201 | return 0; | ||
1174 | } | 1202 | } |
1175 | EXPORT_SYMBOL(gpio_direction_output); | 1203 | EXPORT_SYMBOL(gpio_direction_output); |
1176 | 1204 | ||
@@ -1190,7 +1218,40 @@ void bfin_gpio_reset_spi0_ssel1(void) | |||
1190 | 1218 | ||
1191 | port_setup(gpio, GPIO_USAGE); | 1219 | port_setup(gpio, GPIO_USAGE); |
1192 | gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio); | 1220 | gpio_bankb[gpio_bank(gpio)]->data_set = gpio_bit(gpio); |
1221 | AWA_DUMMY_READ(data_set); | ||
1193 | udelay(1); | 1222 | udelay(1); |
1194 | } | 1223 | } |
1195 | 1224 | ||
1196 | #endif /*BF548_FAMILY */ | 1225 | #endif /*BF548_FAMILY */ |
1226 | |||
1227 | #if defined(CONFIG_PROC_FS) | ||
1228 | static int gpio_proc_read(char *buf, char **start, off_t offset, | ||
1229 | int len, int *unused_i, void *unused_v) | ||
1230 | { | ||
1231 | int c, outlen = 0; | ||
1232 | |||
1233 | for (c = 0; c < MAX_RESOURCES; c++) { | ||
1234 | if (!check_gpio(c) && (reserved_gpio_map[gpio_bank(c)] & gpio_bit(c))) | ||
1235 | len = sprintf(buf, "GPIO_%d: %s \t\tGPIO %s\n", c, | ||
1236 | get_label(c), get_gpio_dir(c) ? "OUTPUT" : "INPUT"); | ||
1237 | else if (reserved_peri_map[gpio_bank(c)] & gpio_bit(c)) | ||
1238 | len = sprintf(buf, "GPIO_%d: %s \t\tPeripheral\n", c, get_label(c)); | ||
1239 | else | ||
1240 | continue; | ||
1241 | buf += len; | ||
1242 | outlen += len; | ||
1243 | } | ||
1244 | return outlen; | ||
1245 | } | ||
1246 | |||
1247 | static __init int gpio_register_proc(void) | ||
1248 | { | ||
1249 | struct proc_dir_entry *proc_gpio; | ||
1250 | |||
1251 | proc_gpio = create_proc_entry("gpio", S_IRUGO, NULL); | ||
1252 | if (proc_gpio) | ||
1253 | proc_gpio->read_proc = gpio_proc_read; | ||
1254 | return proc_gpio != NULL; | ||
1255 | } | ||
1256 | __initcall(gpio_register_proc); | ||
1257 | #endif | ||
diff --git a/arch/blackfin/kernel/cplb-mpu/Makefile b/arch/blackfin/kernel/cplb-mpu/Makefile new file mode 100644 index 000000000000..286b69357f97 --- /dev/null +++ b/arch/blackfin/kernel/cplb-mpu/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # | ||
2 | # arch/blackfin/kernel/cplb-nompu/Makefile | ||
3 | # | ||
4 | |||
5 | obj-y := cplbinit.o cacheinit.o cplbmgr.o | ||
6 | |||
7 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | ||
8 | |||
diff --git a/arch/blackfin/kernel/cplb-mpu/cacheinit.c b/arch/blackfin/kernel/cplb-mpu/cacheinit.c new file mode 100644 index 000000000000..9eecfa403187 --- /dev/null +++ b/arch/blackfin/kernel/cplb-mpu/cacheinit.c | |||
@@ -0,0 +1,62 @@ | |||
1 | /* | ||
2 | * Copyright 2004-2007 Analog Devices Inc. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, see the file COPYING, or write | ||
16 | * to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/cpu.h> | ||
21 | |||
22 | #include <asm/cacheflush.h> | ||
23 | #include <asm/blackfin.h> | ||
24 | #include <asm/cplb.h> | ||
25 | #include <asm/cplbinit.h> | ||
26 | |||
27 | #if defined(CONFIG_BFIN_ICACHE) | ||
28 | void bfin_icache_init(void) | ||
29 | { | ||
30 | unsigned long ctrl; | ||
31 | int i; | ||
32 | |||
33 | SSYNC(); | ||
34 | for (i = 0; i < MAX_CPLBS; i++) { | ||
35 | bfin_write32(ICPLB_ADDR0 + i * 4, icplb_tbl[i].addr); | ||
36 | bfin_write32(ICPLB_DATA0 + i * 4, icplb_tbl[i].data); | ||
37 | } | ||
38 | ctrl = bfin_read_IMEM_CONTROL(); | ||
39 | ctrl |= IMC | ENICPLB; | ||
40 | bfin_write_IMEM_CONTROL(ctrl); | ||
41 | SSYNC(); | ||
42 | } | ||
43 | #endif | ||
44 | |||
45 | #if defined(CONFIG_BFIN_DCACHE) | ||
46 | void bfin_dcache_init(void) | ||
47 | { | ||
48 | unsigned long ctrl; | ||
49 | int i; | ||
50 | |||
51 | SSYNC(); | ||
52 | for (i = 0; i < MAX_CPLBS; i++) { | ||
53 | bfin_write32(DCPLB_ADDR0 + i * 4, dcplb_tbl[i].addr); | ||
54 | bfin_write32(DCPLB_DATA0 + i * 4, dcplb_tbl[i].data); | ||
55 | } | ||
56 | |||
57 | ctrl = bfin_read_DMEM_CONTROL(); | ||
58 | ctrl |= DMEM_CNTR; | ||
59 | bfin_write_DMEM_CONTROL(ctrl); | ||
60 | SSYNC(); | ||
61 | } | ||
62 | #endif | ||
diff --git a/arch/blackfin/kernel/cplb-mpu/cplbinfo.c b/arch/blackfin/kernel/cplb-mpu/cplbinfo.c new file mode 100644 index 000000000000..bd072299f7f2 --- /dev/null +++ b/arch/blackfin/kernel/cplb-mpu/cplbinfo.c | |||
@@ -0,0 +1,144 @@ | |||
1 | /* | ||
2 | * File: arch/blackfin/mach-common/cplbinfo.c | ||
3 | * Based on: | ||
4 | * Author: Sonic Zhang <sonic.zhang@analog.com> | ||
5 | * | ||
6 | * Created: Jan. 2005 | ||
7 | * Description: Display CPLB status | ||
8 | * | ||
9 | * Modified: | ||
10 | * Copyright 2004-2006 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 <linux/module.h> | ||
31 | #include <linux/kernel.h> | ||
32 | #include <linux/init.h> | ||
33 | #include <linux/proc_fs.h> | ||
34 | #include <linux/uaccess.h> | ||
35 | |||
36 | #include <asm/current.h> | ||
37 | #include <asm/system.h> | ||
38 | #include <asm/cplb.h> | ||
39 | #include <asm/cplbinit.h> | ||
40 | #include <asm/blackfin.h> | ||
41 | |||
42 | #define CPLB_I 1 | ||
43 | #define CPLB_D 2 | ||
44 | |||
45 | #define SYNC_SYS SSYNC() | ||
46 | #define SYNC_CORE CSYNC() | ||
47 | |||
48 | #define CPLB_BIT_PAGESIZE 0x30000 | ||
49 | |||
50 | static char page_size_string_table[][4] = { "1K", "4K", "1M", "4M" }; | ||
51 | |||
52 | static char *cplb_print_entry(char *buf, struct cplb_entry *tbl, int switched) | ||
53 | { | ||
54 | int i; | ||
55 | buf += sprintf(buf, "Index\tAddress\t\tData\tSize\tU/RD\tU/WR\tS/WR\tSwitch\n"); | ||
56 | for (i = 0; i < MAX_CPLBS; i++) { | ||
57 | unsigned long data = tbl[i].data; | ||
58 | unsigned long addr = tbl[i].addr; | ||
59 | if (!(data & CPLB_VALID)) | ||
60 | continue; | ||
61 | |||
62 | buf += | ||
63 | sprintf(buf, | ||
64 | "%d\t0x%08lx\t%06lx\t%s\t%c\t%c\t%c\t%c\n", | ||
65 | i, addr, data, | ||
66 | page_size_string_table[(data & 0x30000) >> 16], | ||
67 | (data & CPLB_USER_RD) ? 'Y' : 'N', | ||
68 | (data & CPLB_USER_WR) ? 'Y' : 'N', | ||
69 | (data & CPLB_SUPV_WR) ? 'Y' : 'N', | ||
70 | i < switched ? 'N' : 'Y'); | ||
71 | } | ||
72 | buf += sprintf(buf, "\n"); | ||
73 | |||
74 | return buf; | ||
75 | } | ||
76 | |||
77 | int cplbinfo_proc_output(char *buf) | ||
78 | { | ||
79 | char *p; | ||
80 | |||
81 | p = buf; | ||
82 | |||
83 | p += sprintf(p, "------------------ CPLB Information ------------------\n\n"); | ||
84 | |||
85 | if (bfin_read_IMEM_CONTROL() & ENICPLB) { | ||
86 | p += sprintf(p, "Instruction CPLB entry:\n"); | ||
87 | p = cplb_print_entry(p, icplb_tbl, first_switched_icplb); | ||
88 | } else | ||
89 | p += sprintf(p, "Instruction CPLB is disabled.\n\n"); | ||
90 | |||
91 | if (1 || bfin_read_DMEM_CONTROL() & ENDCPLB) { | ||
92 | p += sprintf(p, "Data CPLB entry:\n"); | ||
93 | p = cplb_print_entry(p, dcplb_tbl, first_switched_dcplb); | ||
94 | } else | ||
95 | p += sprintf(p, "Data CPLB is disabled.\n"); | ||
96 | |||
97 | p += sprintf(p, "ICPLB miss: %d\nICPLB supervisor miss: %d\n", | ||
98 | nr_icplb_miss, nr_icplb_supv_miss); | ||
99 | p += sprintf(p, "DCPLB miss: %d\nDCPLB protection fault:%d\n", | ||
100 | nr_dcplb_miss, nr_dcplb_prot); | ||
101 | p += sprintf(p, "CPLB flushes: %d\n", | ||
102 | nr_cplb_flush); | ||
103 | |||
104 | return p - buf; | ||
105 | } | ||
106 | |||
107 | static int cplbinfo_read_proc(char *page, char **start, off_t off, | ||
108 | int count, int *eof, void *data) | ||
109 | { | ||
110 | int len; | ||
111 | |||
112 | len = cplbinfo_proc_output(page); | ||
113 | if (len <= off + count) | ||
114 | *eof = 1; | ||
115 | *start = page + off; | ||
116 | len -= off; | ||
117 | if (len > count) | ||
118 | len = count; | ||
119 | if (len < 0) | ||
120 | len = 0; | ||
121 | return len; | ||
122 | } | ||
123 | |||
124 | static int __init cplbinfo_init(void) | ||
125 | { | ||
126 | struct proc_dir_entry *entry; | ||
127 | |||
128 | entry = create_proc_entry("cplbinfo", 0, NULL); | ||
129 | if (!entry) | ||
130 | return -ENOMEM; | ||
131 | |||
132 | entry->read_proc = cplbinfo_read_proc; | ||
133 | entry->data = NULL; | ||
134 | |||
135 | return 0; | ||
136 | } | ||
137 | |||
138 | static void __exit cplbinfo_exit(void) | ||
139 | { | ||
140 | remove_proc_entry("cplbinfo", NULL); | ||
141 | } | ||
142 | |||
143 | module_init(cplbinfo_init); | ||
144 | module_exit(cplbinfo_exit); | ||
diff --git a/arch/blackfin/kernel/cplb-mpu/cplbinit.c b/arch/blackfin/kernel/cplb-mpu/cplbinit.c new file mode 100644 index 000000000000..e2e2b5079f5b --- /dev/null +++ b/arch/blackfin/kernel/cplb-mpu/cplbinit.c | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * Blackfin CPLB initialization | ||
3 | * | ||
4 | * Copyright 2004-2007 Analog Devices Inc. | ||
5 | * | ||
6 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, see the file COPYING, or write | ||
20 | * to the Free Software Foundation, Inc., | ||
21 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
22 | */ | ||
23 | #include <linux/module.h> | ||
24 | |||
25 | #include <asm/blackfin.h> | ||
26 | #include <asm/cplb.h> | ||
27 | #include <asm/cplbinit.h> | ||
28 | |||
29 | struct cplb_entry icplb_tbl[MAX_CPLBS]; | ||
30 | struct cplb_entry dcplb_tbl[MAX_CPLBS]; | ||
31 | |||
32 | int first_switched_icplb, first_switched_dcplb; | ||
33 | int first_mask_dcplb; | ||
34 | |||
35 | void __init generate_cpl_tables(void) | ||
36 | { | ||
37 | int i_d, i_i; | ||
38 | unsigned long addr; | ||
39 | unsigned long d_data, i_data; | ||
40 | unsigned long d_cache = 0, i_cache = 0; | ||
41 | |||
42 | #ifdef CONFIG_BFIN_ICACHE | ||
43 | i_cache = CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | ||
44 | #endif | ||
45 | |||
46 | #ifdef CONFIG_BFIN_DCACHE | ||
47 | d_cache = CPLB_L1_CHBL; | ||
48 | #ifdef CONFIG_BLKFIN_WT | ||
49 | d_cache |= CPLB_L1_AOW | CPLB_WT; | ||
50 | #endif | ||
51 | #endif | ||
52 | i_d = i_i = 0; | ||
53 | |||
54 | /* Set up the zero page. */ | ||
55 | dcplb_tbl[i_d].addr = 0; | ||
56 | dcplb_tbl[i_d++].data = SDRAM_OOPS | PAGE_SIZE_1KB; | ||
57 | |||
58 | #if 0 | ||
59 | icplb_tbl[i_i].addr = 0; | ||
60 | icplb_tbl[i_i++].data = i_cache | CPLB_USER_RD | PAGE_SIZE_4KB; | ||
61 | #endif | ||
62 | |||
63 | /* Cover kernel memory with 4M pages. */ | ||
64 | addr = 0; | ||
65 | d_data = d_cache | CPLB_SUPV_WR | CPLB_VALID | PAGE_SIZE_4MB | CPLB_DIRTY; | ||
66 | i_data = i_cache | CPLB_VALID | CPLB_PORTPRIO | PAGE_SIZE_4MB; | ||
67 | |||
68 | for (; addr < memory_start; addr += 4 * 1024 * 1024) { | ||
69 | dcplb_tbl[i_d].addr = addr; | ||
70 | dcplb_tbl[i_d++].data = d_data; | ||
71 | icplb_tbl[i_i].addr = addr; | ||
72 | icplb_tbl[i_i++].data = i_data | (addr == 0 ? CPLB_USER_RD : 0); | ||
73 | } | ||
74 | |||
75 | /* Cover L1 memory. One 4M area for code and data each is enough. */ | ||
76 | #if L1_DATA_A_LENGTH > 0 || L1_DATA_B_LENGTH > 0 | ||
77 | dcplb_tbl[i_d].addr = L1_DATA_A_START; | ||
78 | dcplb_tbl[i_d++].data = L1_DMEMORY | PAGE_SIZE_4MB; | ||
79 | #endif | ||
80 | icplb_tbl[i_i].addr = L1_CODE_START; | ||
81 | icplb_tbl[i_i++].data = L1_IMEMORY | PAGE_SIZE_4MB; | ||
82 | |||
83 | first_mask_dcplb = i_d; | ||
84 | first_switched_dcplb = i_d + (1 << page_mask_order); | ||
85 | first_switched_icplb = i_i; | ||
86 | |||
87 | while (i_d < MAX_CPLBS) | ||
88 | dcplb_tbl[i_d++].data = 0; | ||
89 | while (i_i < MAX_CPLBS) | ||
90 | icplb_tbl[i_i++].data = 0; | ||
91 | } | ||
diff --git a/arch/blackfin/kernel/cplb-mpu/cplbmgr.c b/arch/blackfin/kernel/cplb-mpu/cplbmgr.c new file mode 100644 index 000000000000..c426a22f9907 --- /dev/null +++ b/arch/blackfin/kernel/cplb-mpu/cplbmgr.c | |||
@@ -0,0 +1,338 @@ | |||
1 | /* | ||
2 | * Blackfin CPLB exception handling. | ||
3 | * Copyright 2004-2007 Analog Devices Inc. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, see the file COPYING, or write | ||
17 | * to the Free Software Foundation, Inc., | ||
18 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
19 | */ | ||
20 | #include <linux/module.h> | ||
21 | #include <linux/mm.h> | ||
22 | |||
23 | #include <asm/blackfin.h> | ||
24 | #include <asm/cplbinit.h> | ||
25 | #include <asm/mmu_context.h> | ||
26 | |||
27 | #ifdef CONFIG_BFIN_ICACHE | ||
28 | |||
29 | #define FAULT_RW (1 << 16) | ||
30 | #define FAULT_USERSUPV (1 << 17) | ||
31 | |||
32 | int page_mask_nelts; | ||
33 | int page_mask_order; | ||
34 | unsigned long *current_rwx_mask; | ||
35 | |||
36 | int nr_dcplb_miss, nr_icplb_miss, nr_icplb_supv_miss, nr_dcplb_prot; | ||
37 | int nr_cplb_flush; | ||
38 | |||
39 | static inline void disable_dcplb(void) | ||
40 | { | ||
41 | unsigned long ctrl; | ||
42 | SSYNC(); | ||
43 | ctrl = bfin_read_DMEM_CONTROL(); | ||
44 | ctrl &= ~ENDCPLB; | ||
45 | bfin_write_DMEM_CONTROL(ctrl); | ||
46 | SSYNC(); | ||
47 | } | ||
48 | |||
49 | static inline void enable_dcplb(void) | ||
50 | { | ||
51 | unsigned long ctrl; | ||
52 | SSYNC(); | ||
53 | ctrl = bfin_read_DMEM_CONTROL(); | ||
54 | ctrl |= ENDCPLB; | ||
55 | bfin_write_DMEM_CONTROL(ctrl); | ||
56 | SSYNC(); | ||
57 | } | ||
58 | |||
59 | static inline void disable_icplb(void) | ||
60 | { | ||
61 | unsigned long ctrl; | ||
62 | SSYNC(); | ||
63 | ctrl = bfin_read_IMEM_CONTROL(); | ||
64 | ctrl &= ~ENICPLB; | ||
65 | bfin_write_IMEM_CONTROL(ctrl); | ||
66 | SSYNC(); | ||
67 | } | ||
68 | |||
69 | static inline void enable_icplb(void) | ||
70 | { | ||
71 | unsigned long ctrl; | ||
72 | SSYNC(); | ||
73 | ctrl = bfin_read_IMEM_CONTROL(); | ||
74 | ctrl |= ENICPLB; | ||
75 | bfin_write_IMEM_CONTROL(ctrl); | ||
76 | SSYNC(); | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * Given the contents of the status register, return the index of the | ||
81 | * CPLB that caused the fault. | ||
82 | */ | ||
83 | static inline int faulting_cplb_index(int status) | ||
84 | { | ||
85 | int signbits = __builtin_bfin_norm_fr1x32(status & 0xFFFF); | ||
86 | return 30 - signbits; | ||
87 | } | ||
88 | |||
89 | /* | ||
90 | * Given the contents of the status register and the DCPLB_DATA contents, | ||
91 | * return true if a write access should be permitted. | ||
92 | */ | ||
93 | static inline int write_permitted(int status, unsigned long data) | ||
94 | { | ||
95 | if (status & FAULT_USERSUPV) | ||
96 | return !!(data & CPLB_SUPV_WR); | ||
97 | else | ||
98 | return !!(data & CPLB_USER_WR); | ||
99 | } | ||
100 | |||
101 | /* Counters to implement round-robin replacement. */ | ||
102 | static int icplb_rr_index, dcplb_rr_index; | ||
103 | |||
104 | /* | ||
105 | * Find an ICPLB entry to be evicted and return its index. | ||
106 | */ | ||
107 | static int evict_one_icplb(void) | ||
108 | { | ||
109 | int i; | ||
110 | for (i = first_switched_icplb; i < MAX_CPLBS; i++) | ||
111 | if ((icplb_tbl[i].data & CPLB_VALID) == 0) | ||
112 | return i; | ||
113 | i = first_switched_icplb + icplb_rr_index; | ||
114 | if (i >= MAX_CPLBS) { | ||
115 | i -= MAX_CPLBS - first_switched_icplb; | ||
116 | icplb_rr_index -= MAX_CPLBS - first_switched_icplb; | ||
117 | } | ||
118 | icplb_rr_index++; | ||
119 | return i; | ||
120 | } | ||
121 | |||
122 | static int evict_one_dcplb(void) | ||
123 | { | ||
124 | int i; | ||
125 | for (i = first_switched_dcplb; i < MAX_CPLBS; i++) | ||
126 | if ((dcplb_tbl[i].data & CPLB_VALID) == 0) | ||
127 | return i; | ||
128 | i = first_switched_dcplb + dcplb_rr_index; | ||
129 | if (i >= MAX_CPLBS) { | ||
130 | i -= MAX_CPLBS - first_switched_dcplb; | ||
131 | dcplb_rr_index -= MAX_CPLBS - first_switched_dcplb; | ||
132 | } | ||
133 | dcplb_rr_index++; | ||
134 | return i; | ||
135 | } | ||
136 | |||
137 | static noinline int dcplb_miss(void) | ||
138 | { | ||
139 | unsigned long addr = bfin_read_DCPLB_FAULT_ADDR(); | ||
140 | int status = bfin_read_DCPLB_STATUS(); | ||
141 | unsigned long *mask; | ||
142 | int idx; | ||
143 | unsigned long d_data; | ||
144 | |||
145 | nr_dcplb_miss++; | ||
146 | if (addr >= _ramend) | ||
147 | return CPLB_PROT_VIOL; | ||
148 | |||
149 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; | ||
150 | #ifdef CONFIG_BFIN_DCACHE | ||
151 | d_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | ||
152 | #ifdef CONFIG_BLKFIN_WT | ||
153 | d_data |= CPLB_L1_AOW | CPLB_WT; | ||
154 | #endif | ||
155 | #endif | ||
156 | mask = current_rwx_mask; | ||
157 | if (mask) { | ||
158 | int page = addr >> PAGE_SHIFT; | ||
159 | int offs = page >> 5; | ||
160 | int bit = 1 << (page & 31); | ||
161 | |||
162 | if (mask[offs] & bit) | ||
163 | d_data |= CPLB_USER_RD; | ||
164 | |||
165 | mask += page_mask_nelts; | ||
166 | if (mask[offs] & bit) | ||
167 | d_data |= CPLB_USER_WR; | ||
168 | } | ||
169 | |||
170 | idx = evict_one_dcplb(); | ||
171 | |||
172 | addr &= PAGE_MASK; | ||
173 | dcplb_tbl[idx].addr = addr; | ||
174 | dcplb_tbl[idx].data = d_data; | ||
175 | |||
176 | disable_dcplb(); | ||
177 | bfin_write32(DCPLB_DATA0 + idx * 4, d_data); | ||
178 | bfin_write32(DCPLB_ADDR0 + idx * 4, addr); | ||
179 | enable_dcplb(); | ||
180 | |||
181 | return 0; | ||
182 | } | ||
183 | |||
184 | static noinline int icplb_miss(void) | ||
185 | { | ||
186 | unsigned long addr = bfin_read_ICPLB_FAULT_ADDR(); | ||
187 | int status = bfin_read_ICPLB_STATUS(); | ||
188 | int idx; | ||
189 | unsigned long i_data; | ||
190 | |||
191 | nr_icplb_miss++; | ||
192 | if (status & FAULT_USERSUPV) | ||
193 | nr_icplb_supv_miss++; | ||
194 | |||
195 | if (addr >= _ramend) | ||
196 | return CPLB_PROT_VIOL; | ||
197 | |||
198 | /* | ||
199 | * First, try to find a CPLB that matches this address. If we | ||
200 | * find one, then the fact that we're in the miss handler means | ||
201 | * that the instruction crosses a page boundary. | ||
202 | */ | ||
203 | for (idx = first_switched_icplb; idx < MAX_CPLBS; idx++) { | ||
204 | if (icplb_tbl[idx].data & CPLB_VALID) { | ||
205 | unsigned long this_addr = icplb_tbl[idx].addr; | ||
206 | if (this_addr <= addr && this_addr + PAGE_SIZE > addr) { | ||
207 | addr += PAGE_SIZE; | ||
208 | break; | ||
209 | } | ||
210 | } | ||
211 | } | ||
212 | |||
213 | i_data = CPLB_VALID | CPLB_PORTPRIO | PAGE_SIZE_4KB; | ||
214 | #ifdef CONFIG_BFIN_ICACHE | ||
215 | i_data |= CPLB_L1_CHBL | ANOMALY_05000158_WORKAROUND; | ||
216 | #endif | ||
217 | |||
218 | /* | ||
219 | * Two cases to distinguish - a supervisor access must necessarily | ||
220 | * be for a module page; we grant it unconditionally (could do better | ||
221 | * here in the future). Otherwise, check the x bitmap of the current | ||
222 | * process. | ||
223 | */ | ||
224 | if (!(status & FAULT_USERSUPV)) { | ||
225 | unsigned long *mask = current_rwx_mask; | ||
226 | |||
227 | if (mask) { | ||
228 | int page = addr >> PAGE_SHIFT; | ||
229 | int offs = page >> 5; | ||
230 | int bit = 1 << (page & 31); | ||
231 | |||
232 | mask += 2 * page_mask_nelts; | ||
233 | if (mask[offs] & bit) | ||
234 | i_data |= CPLB_USER_RD; | ||
235 | } | ||
236 | } | ||
237 | |||
238 | idx = evict_one_icplb(); | ||
239 | addr &= PAGE_MASK; | ||
240 | icplb_tbl[idx].addr = addr; | ||
241 | icplb_tbl[idx].data = i_data; | ||
242 | |||
243 | disable_icplb(); | ||
244 | bfin_write32(ICPLB_DATA0 + idx * 4, i_data); | ||
245 | bfin_write32(ICPLB_ADDR0 + idx * 4, addr); | ||
246 | enable_icplb(); | ||
247 | |||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | static noinline int dcplb_protection_fault(void) | ||
252 | { | ||
253 | unsigned long addr = bfin_read_DCPLB_FAULT_ADDR(); | ||
254 | int status = bfin_read_DCPLB_STATUS(); | ||
255 | |||
256 | nr_dcplb_prot++; | ||
257 | |||
258 | if (status & FAULT_RW) { | ||
259 | int idx = faulting_cplb_index(status); | ||
260 | unsigned long data = dcplb_tbl[idx].data; | ||
261 | if (!(data & CPLB_WT) && !(data & CPLB_DIRTY) && | ||
262 | write_permitted(status, data)) { | ||
263 | data |= CPLB_DIRTY; | ||
264 | dcplb_tbl[idx].data = data; | ||
265 | bfin_write32(DCPLB_DATA0 + idx * 4, data); | ||
266 | return 0; | ||
267 | } | ||
268 | } | ||
269 | return CPLB_PROT_VIOL; | ||
270 | } | ||
271 | |||
272 | int cplb_hdr(int seqstat, struct pt_regs *regs) | ||
273 | { | ||
274 | int cause = seqstat & 0x3f; | ||
275 | switch (cause) { | ||
276 | case 0x23: | ||
277 | return dcplb_protection_fault(); | ||
278 | case 0x2C: | ||
279 | return icplb_miss(); | ||
280 | case 0x26: | ||
281 | return dcplb_miss(); | ||
282 | default: | ||
283 | return 1; | ||
284 | panic_cplb_error(seqstat, regs); | ||
285 | } | ||
286 | } | ||
287 | |||
288 | void flush_switched_cplbs(void) | ||
289 | { | ||
290 | int i; | ||
291 | |||
292 | nr_cplb_flush++; | ||
293 | |||
294 | disable_icplb(); | ||
295 | for (i = first_switched_icplb; i < MAX_CPLBS; i++) { | ||
296 | icplb_tbl[i].data = 0; | ||
297 | bfin_write32(ICPLB_DATA0 + i * 4, 0); | ||
298 | } | ||
299 | enable_icplb(); | ||
300 | |||
301 | disable_dcplb(); | ||
302 | for (i = first_mask_dcplb; i < MAX_CPLBS; i++) { | ||
303 | dcplb_tbl[i].data = 0; | ||
304 | bfin_write32(DCPLB_DATA0 + i * 4, 0); | ||
305 | } | ||
306 | enable_dcplb(); | ||
307 | } | ||
308 | |||
309 | void set_mask_dcplbs(unsigned long *masks) | ||
310 | { | ||
311 | int i; | ||
312 | unsigned long addr = (unsigned long)masks; | ||
313 | unsigned long d_data; | ||
314 | current_rwx_mask = masks; | ||
315 | |||
316 | if (!masks) | ||
317 | return; | ||
318 | |||
319 | d_data = CPLB_SUPV_WR | CPLB_VALID | CPLB_DIRTY | PAGE_SIZE_4KB; | ||
320 | #ifdef CONFIG_BFIN_DCACHE | ||
321 | d_data |= CPLB_L1_CHBL; | ||
322 | #ifdef CONFIG_BLKFIN_WT | ||
323 | d_data |= CPLB_L1_AOW | CPLB_WT; | ||
324 | #endif | ||
325 | #endif | ||
326 | |||
327 | disable_dcplb(); | ||
328 | for (i = first_mask_dcplb; i < first_switched_dcplb; i++) { | ||
329 | dcplb_tbl[i].addr = addr; | ||
330 | dcplb_tbl[i].data = d_data; | ||
331 | bfin_write32(DCPLB_DATA0 + i * 4, d_data); | ||
332 | bfin_write32(DCPLB_ADDR0 + i * 4, addr); | ||
333 | addr += PAGE_SIZE; | ||
334 | } | ||
335 | enable_dcplb(); | ||
336 | } | ||
337 | |||
338 | #endif | ||
diff --git a/arch/blackfin/kernel/cplb-nompu/Makefile b/arch/blackfin/kernel/cplb-nompu/Makefile new file mode 100644 index 000000000000..d36ea9b5382e --- /dev/null +++ b/arch/blackfin/kernel/cplb-nompu/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # | ||
2 | # arch/blackfin/kernel/cplb-nompu/Makefile | ||
3 | # | ||
4 | |||
5 | obj-y := cplbinit.o cacheinit.o cplbhdlr.o cplbmgr.o | ||
6 | |||
7 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | ||
8 | |||
diff --git a/arch/blackfin/kernel/cacheinit.c b/arch/blackfin/kernel/cplb-nompu/cacheinit.c index 62cbba7364b0..8a18399f6072 100644 --- a/arch/blackfin/kernel/cacheinit.c +++ b/arch/blackfin/kernel/cplb-nompu/cacheinit.c | |||
@@ -42,6 +42,7 @@ void bfin_icache_init(void) | |||
42 | ctrl = bfin_read_IMEM_CONTROL(); | 42 | ctrl = bfin_read_IMEM_CONTROL(); |
43 | ctrl |= IMC | ENICPLB; | 43 | ctrl |= IMC | ENICPLB; |
44 | bfin_write_IMEM_CONTROL(ctrl); | 44 | bfin_write_IMEM_CONTROL(ctrl); |
45 | SSYNC(); | ||
45 | } | 46 | } |
46 | #endif | 47 | #endif |
47 | 48 | ||
@@ -63,5 +64,6 @@ void bfin_dcache_init(void) | |||
63 | ctrl = bfin_read_DMEM_CONTROL(); | 64 | ctrl = bfin_read_DMEM_CONTROL(); |
64 | ctrl |= DMEM_CNTR; | 65 | ctrl |= DMEM_CNTR; |
65 | bfin_write_DMEM_CONTROL(ctrl); | 66 | bfin_write_DMEM_CONTROL(ctrl); |
67 | SSYNC(); | ||
66 | } | 68 | } |
67 | #endif | 69 | #endif |
diff --git a/arch/blackfin/mach-common/cplbhdlr.S b/arch/blackfin/kernel/cplb-nompu/cplbhdlr.S index 2788532de72b..2788532de72b 100644 --- a/arch/blackfin/mach-common/cplbhdlr.S +++ b/arch/blackfin/kernel/cplb-nompu/cplbhdlr.S | |||
diff --git a/arch/blackfin/mach-common/cplbinfo.c b/arch/blackfin/kernel/cplb-nompu/cplbinfo.c index a4f0b428a34d..a4f0b428a34d 100644 --- a/arch/blackfin/mach-common/cplbinfo.c +++ b/arch/blackfin/kernel/cplb-nompu/cplbinfo.c | |||
diff --git a/arch/blackfin/kernel/cplbinit.c b/arch/blackfin/kernel/cplb-nompu/cplbinit.c index 6320bc45fbba..6320bc45fbba 100644 --- a/arch/blackfin/kernel/cplbinit.c +++ b/arch/blackfin/kernel/cplb-nompu/cplbinit.c | |||
diff --git a/arch/blackfin/mach-common/cplbmgr.S b/arch/blackfin/kernel/cplb-nompu/cplbmgr.S index 6f909cbfac7b..f5cf3accef37 100644 --- a/arch/blackfin/mach-common/cplbmgr.S +++ b/arch/blackfin/kernel/cplb-nompu/cplbmgr.S | |||
@@ -75,6 +75,15 @@ ENTRY(_cplb_mgr) | |||
75 | * from the configuration table. | 75 | * from the configuration table. |
76 | */ | 76 | */ |
77 | 77 | ||
78 | /* A multi-word instruction can cross a page boundary. This means the | ||
79 | * first part of the instruction can be in a valid page, but the | ||
80 | * second part is not, and hence generates the instruction miss. | ||
81 | * However, the fault address is for the start of the instruction, | ||
82 | * not the part that's in the bad page. Therefore, we have to check | ||
83 | * whether the fault address applies to a page that is already present | ||
84 | * in the table. | ||
85 | */ | ||
86 | |||
78 | P4.L = LO(ICPLB_FAULT_ADDR); | 87 | P4.L = LO(ICPLB_FAULT_ADDR); |
79 | P4.H = HI(ICPLB_FAULT_ADDR); | 88 | P4.H = HI(ICPLB_FAULT_ADDR); |
80 | 89 | ||
@@ -87,7 +96,7 @@ ENTRY(_cplb_mgr) | |||
87 | R4 = [P4]; /* Get faulting address*/ | 96 | R4 = [P4]; /* Get faulting address*/ |
88 | R6 = 64; /* Advance past the fault address, which*/ | 97 | R6 = 64; /* Advance past the fault address, which*/ |
89 | R6 = R6 + R4; /* we'll use if we find a match*/ | 98 | R6 = R6 + R4; /* we'll use if we find a match*/ |
90 | R3 = ((16 << 8) | 2); /* Extract mask, bits 16 and 17.*/ | 99 | R3 = ((16 << 8) | 2); /* Extract mask, two bits at posn 16 */ |
91 | 100 | ||
92 | R5 = 0; | 101 | R5 = 0; |
93 | .Lisearch: | 102 | .Lisearch: |
@@ -125,7 +134,9 @@ ENTRY(_cplb_mgr) | |||
125 | P4.L = LO(IMEM_CONTROL); | 134 | P4.L = LO(IMEM_CONTROL); |
126 | P4.H = HI(IMEM_CONTROL); | 135 | P4.H = HI(IMEM_CONTROL); |
127 | 136 | ||
128 | /* disable cplbs */ | 137 | /* Turn off CPLBs while we work, necessary according to HRM before |
138 | * modifying CPLB descriptors | ||
139 | */ | ||
129 | R5 = [P4]; /* Control Register*/ | 140 | R5 = [P4]; /* Control Register*/ |
130 | BITCLR(R5,ENICPLB_P); | 141 | BITCLR(R5,ENICPLB_P); |
131 | CLI R1; | 142 | CLI R1; |
@@ -179,7 +190,14 @@ ENTRY(_cplb_mgr) | |||
179 | [P0 - 4] = R0; | 190 | [P0 - 4] = R0; |
180 | R0 = [P0 - 0x100]; | 191 | R0 = [P0 - 0x100]; |
181 | [P0-0x104] = R0; | 192 | [P0-0x104] = R0; |
182 | .Lie_move:P0+=4; | 193 | .Lie_move: |
194 | P0+=4; | ||
195 | |||
196 | /* Clear ICPLB_DATA15, in case we don't find a replacement | ||
197 | * otherwise, we would have a duplicate entry, and will crash | ||
198 | */ | ||
199 | R0 = 0; | ||
200 | [P0 - 4] = R0; | ||
183 | 201 | ||
184 | /* We've made space in the ICPLB table, so that ICPLB15 | 202 | /* We've made space in the ICPLB table, so that ICPLB15 |
185 | * is now free to be overwritten. Next, we have to determine | 203 | * is now free to be overwritten. Next, we have to determine |
@@ -504,14 +522,23 @@ ENTRY(_cplb_mgr) | |||
504 | R0 = [P0++]; /* move data */ | 522 | R0 = [P0++]; /* move data */ |
505 | [P0 - 8] = R0; | 523 | [P0 - 8] = R0; |
506 | R0 = [P0-0x104] /* move address */ | 524 | R0 = [P0-0x104] /* move address */ |
507 | .Lde_move: [P0-0x108] = R0; | 525 | .Lde_move: |
526 | [P0-0x108] = R0; | ||
527 | |||
528 | .Lde_moved: | ||
529 | NOP; | ||
530 | |||
531 | /* Clear DCPLB_DATA15, in case we don't find a replacement | ||
532 | * otherwise, we would have a duplicate entry, and will crash | ||
533 | */ | ||
534 | R0 = 0; | ||
535 | [P0 - 0x4] = R0; | ||
508 | 536 | ||
509 | /* We've now made space in DCPLB15 for the new CPLB to be | 537 | /* We've now made space in DCPLB15 for the new CPLB to be |
510 | * installed. The next stage is to locate a CPLB in the | 538 | * installed. The next stage is to locate a CPLB in the |
511 | * config table that covers the faulting address. | 539 | * config table that covers the faulting address. |
512 | */ | 540 | */ |
513 | 541 | ||
514 | .Lde_moved:NOP; | ||
515 | R0 = I0; /* Our faulting address */ | 542 | R0 = I0; /* Our faulting address */ |
516 | 543 | ||
517 | P2.L = _dpdt_table; | 544 | P2.L = _dpdt_table; |
diff --git a/arch/blackfin/kernel/early_printk.c b/arch/blackfin/kernel/early_printk.c index 724f4a5a1d46..60f67f90fe35 100644 --- a/arch/blackfin/kernel/early_printk.c +++ b/arch/blackfin/kernel/early_printk.c | |||
@@ -187,7 +187,7 @@ asmlinkage void __init init_early_exception_vectors(void) | |||
187 | bfin_write_EVT15(early_trap); | 187 | bfin_write_EVT15(early_trap); |
188 | CSYNC(); | 188 | CSYNC(); |
189 | 189 | ||
190 | /* Set all the return from interupt, exception, NMI to a known place | 190 | /* Set all the return from interrupt, exception, NMI to a known place |
191 | * so if we do a RETI, RETX or RETN by mistake - we go somewhere known | 191 | * so if we do a RETI, RETX or RETN by mistake - we go somewhere known |
192 | * Note - don't change RETS - we are in a subroutine, or | 192 | * Note - don't change RETS - we are in a subroutine, or |
193 | * RETE - since it might screw up if emulator is attached | 193 | * RETE - since it might screw up if emulator is attached |
@@ -205,7 +205,7 @@ asmlinkage void __init early_trap_c(struct pt_regs *fp, void *retaddr) | |||
205 | if (likely(early_console == NULL)) | 205 | if (likely(early_console == NULL)) |
206 | setup_early_printk(DEFAULT_EARLY_PORT); | 206 | setup_early_printk(DEFAULT_EARLY_PORT); |
207 | 207 | ||
208 | dump_bfin_mem((void *)fp->retx); | 208 | dump_bfin_mem(fp); |
209 | show_regs(fp); | 209 | show_regs(fp); |
210 | dump_bfin_trace_buffer(); | 210 | dump_bfin_trace_buffer(); |
211 | 211 | ||
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index 5bf15125f0d6..023dc80af187 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
@@ -39,9 +39,6 @@ | |||
39 | #include <asm/blackfin.h> | 39 | #include <asm/blackfin.h> |
40 | #include <asm/fixed_code.h> | 40 | #include <asm/fixed_code.h> |
41 | 41 | ||
42 | #define LED_ON 0 | ||
43 | #define LED_OFF 1 | ||
44 | |||
45 | asmlinkage void ret_from_fork(void); | 42 | asmlinkage void ret_from_fork(void); |
46 | 43 | ||
47 | /* Points to the SDRAM backup memory for the stack that is currently in | 44 | /* Points to the SDRAM backup memory for the stack that is currently in |
@@ -70,32 +67,6 @@ void (*pm_power_off)(void) = NULL; | |||
70 | EXPORT_SYMBOL(pm_power_off); | 67 | EXPORT_SYMBOL(pm_power_off); |
71 | 68 | ||
72 | /* | 69 | /* |
73 | * We are using a different LED from the one used to indicate timer interrupt. | ||
74 | */ | ||
75 | #if defined(CONFIG_BFIN_IDLE_LED) | ||
76 | static inline void leds_switch(int flag) | ||
77 | { | ||
78 | unsigned short tmp = 0; | ||
79 | |||
80 | tmp = bfin_read_CONFIG_BFIN_IDLE_LED_PORT(); | ||
81 | SSYNC(); | ||
82 | |||
83 | if (flag == LED_ON) | ||
84 | tmp &= ~CONFIG_BFIN_IDLE_LED_PIN; /* light on */ | ||
85 | else | ||
86 | tmp |= CONFIG_BFIN_IDLE_LED_PIN; /* light off */ | ||
87 | |||
88 | bfin_write_CONFIG_BFIN_IDLE_LED_PORT(tmp); | ||
89 | SSYNC(); | ||
90 | |||
91 | } | ||
92 | #else | ||
93 | static inline void leds_switch(int flag) | ||
94 | { | ||
95 | } | ||
96 | #endif | ||
97 | |||
98 | /* | ||
99 | * The idle loop on BFIN | 70 | * The idle loop on BFIN |
100 | */ | 71 | */ |
101 | #ifdef CONFIG_IDLE_L1 | 72 | #ifdef CONFIG_IDLE_L1 |
@@ -106,12 +77,10 @@ void cpu_idle(void)__attribute__((l1_text)); | |||
106 | void default_idle(void) | 77 | void default_idle(void) |
107 | { | 78 | { |
108 | while (!need_resched()) { | 79 | while (!need_resched()) { |
109 | leds_switch(LED_OFF); | ||
110 | local_irq_disable(); | 80 | local_irq_disable(); |
111 | if (likely(!need_resched())) | 81 | if (likely(!need_resched())) |
112 | idle_with_irq_disabled(); | 82 | idle_with_irq_disabled(); |
113 | local_irq_enable(); | 83 | local_irq_enable(); |
114 | leds_switch(LED_ON); | ||
115 | } | 84 | } |
116 | } | 85 | } |
117 | 86 | ||
@@ -327,6 +296,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
327 | } | 296 | } |
328 | 297 | ||
329 | #if defined(CONFIG_ACCESS_CHECK) | 298 | #if defined(CONFIG_ACCESS_CHECK) |
299 | /* Return 1 if access to memory range is OK, 0 otherwise */ | ||
330 | int _access_ok(unsigned long addr, unsigned long size) | 300 | int _access_ok(unsigned long addr, unsigned long size) |
331 | { | 301 | { |
332 | if (size == 0) | 302 | if (size == 0) |
diff --git a/arch/blackfin/kernel/reboot.c b/arch/blackfin/kernel/reboot.c index ae28aac6fec1..483f93dfc1b5 100644 --- a/arch/blackfin/kernel/reboot.c +++ b/arch/blackfin/kernel/reboot.c | |||
@@ -19,6 +19,11 @@ | |||
19 | #define SYSCR_VAL 0x10 | 19 | #define SYSCR_VAL 0x10 |
20 | #endif | 20 | #endif |
21 | 21 | ||
22 | /* | ||
23 | * Delay min 5 SCLK cycles using worst case CCLK/SCLK ratio (15) | ||
24 | */ | ||
25 | #define SWRST_DELAY (5 * 15) | ||
26 | |||
22 | /* A system soft reset makes external memory unusable | 27 | /* A system soft reset makes external memory unusable |
23 | * so force this function into L1. | 28 | * so force this function into L1. |
24 | */ | 29 | */ |
@@ -34,7 +39,13 @@ void bfin_reset(void) | |||
34 | while (1) { | 39 | while (1) { |
35 | /* initiate system soft reset with magic 0x7 */ | 40 | /* initiate system soft reset with magic 0x7 */ |
36 | bfin_write_SWRST(0x7); | 41 | bfin_write_SWRST(0x7); |
37 | asm("ssync;"); | 42 | |
43 | /* Wait for System reset to actually reset, needs to be 5 SCLKs, */ | ||
44 | /* Assume CCLK / SCLK ratio is worst case (15), and use 5*15 */ | ||
45 | |||
46 | asm("LSETUP(.Lfoo,.Lfoo) LC0 = %0\n .Lfoo: NOP;\n" | ||
47 | : : "a" (SWRST_DELAY) : "LC0", "LT0", "LB0"); | ||
48 | |||
38 | /* clear system soft reset */ | 49 | /* clear system soft reset */ |
39 | bfin_write_SWRST(0); | 50 | bfin_write_SWRST(0); |
40 | asm("ssync;"); | 51 | asm("ssync;"); |
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index d2822010b7ce..462cae893757 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
@@ -238,7 +238,13 @@ void __init setup_arch(char **cmdline_p) | |||
238 | memory_end = _ramend - DMA_UNCACHED_REGION; | 238 | memory_end = _ramend - DMA_UNCACHED_REGION; |
239 | 239 | ||
240 | _ramstart = (unsigned long)__bss_stop; | 240 | _ramstart = (unsigned long)__bss_stop; |
241 | _rambase = (unsigned long)_stext; | ||
242 | #ifdef CONFIG_MPU | ||
243 | /* Round up to multiple of 4MB. */ | ||
244 | memory_start = (_ramstart + 0x3fffff) & ~0x3fffff; | ||
245 | #else | ||
241 | memory_start = PAGE_ALIGN(_ramstart); | 246 | memory_start = PAGE_ALIGN(_ramstart); |
247 | #endif | ||
242 | 248 | ||
243 | #if defined(CONFIG_MTD_UCLINUX) | 249 | #if defined(CONFIG_MTD_UCLINUX) |
244 | /* generic memory mapped MTD driver */ | 250 | /* generic memory mapped MTD driver */ |
@@ -307,6 +313,11 @@ void __init setup_arch(char **cmdline_p) | |||
307 | printk(KERN_NOTICE "Warning: limiting memory to %liMB due to hardware anomaly 05000263\n", memory_end >> 20); | 313 | printk(KERN_NOTICE "Warning: limiting memory to %liMB due to hardware anomaly 05000263\n", memory_end >> 20); |
308 | #endif /* ANOMALY_05000263 */ | 314 | #endif /* ANOMALY_05000263 */ |
309 | 315 | ||
316 | #ifdef CONFIG_MPU | ||
317 | page_mask_nelts = ((_ramend >> PAGE_SHIFT) + 31) / 32; | ||
318 | page_mask_order = get_order(3 * page_mask_nelts * sizeof(long)); | ||
319 | #endif | ||
320 | |||
310 | #if !defined(CONFIG_MTD_UCLINUX) | 321 | #if !defined(CONFIG_MTD_UCLINUX) |
311 | memory_end -= SIZE_4K; /*In case there is no valid CPLB behind memory_end make sure we don't get to close*/ | 322 | memory_end -= SIZE_4K; /*In case there is no valid CPLB behind memory_end make sure we don't get to close*/ |
312 | #endif | 323 | #endif |
@@ -315,8 +326,6 @@ void __init setup_arch(char **cmdline_p) | |||
315 | init_mm.end_data = (unsigned long)_edata; | 326 | init_mm.end_data = (unsigned long)_edata; |
316 | init_mm.brk = (unsigned long)0; | 327 | init_mm.brk = (unsigned long)0; |
317 | 328 | ||
318 | init_leds(); | ||
319 | |||
320 | _bfin_swrst = bfin_read_SWRST(); | 329 | _bfin_swrst = bfin_read_SWRST(); |
321 | 330 | ||
322 | if (_bfin_swrst & RESET_DOUBLE) | 331 | if (_bfin_swrst & RESET_DOUBLE) |
diff --git a/arch/blackfin/kernel/time.c b/arch/blackfin/kernel/time.c index beef057bd1dc..5bd64e341df3 100644 --- a/arch/blackfin/kernel/time.c +++ b/arch/blackfin/kernel/time.c | |||
@@ -42,75 +42,6 @@ | |||
42 | static void time_sched_init(irqreturn_t(*timer_routine) | 42 | static void time_sched_init(irqreturn_t(*timer_routine) |
43 | (int, void *)); | 43 | (int, void *)); |
44 | static unsigned long gettimeoffset(void); | 44 | static unsigned long gettimeoffset(void); |
45 | static inline void do_leds(void); | ||
46 | |||
47 | #if (defined(CONFIG_BFIN_ALIVE_LED) || defined(CONFIG_BFIN_IDLE_LED)) | ||
48 | void __init init_leds(void) | ||
49 | { | ||
50 | unsigned int tmp = 0; | ||
51 | |||
52 | #if defined(CONFIG_BFIN_ALIVE_LED) | ||
53 | /* config pins as output. */ | ||
54 | tmp = bfin_read_CONFIG_BFIN_ALIVE_LED_DPORT(); | ||
55 | SSYNC(); | ||
56 | bfin_write_CONFIG_BFIN_ALIVE_LED_DPORT(tmp | CONFIG_BFIN_ALIVE_LED_PIN); | ||
57 | SSYNC(); | ||
58 | |||
59 | /* First set led be off */ | ||
60 | tmp = bfin_read_CONFIG_BFIN_ALIVE_LED_PORT(); | ||
61 | SSYNC(); | ||
62 | bfin_write_CONFIG_BFIN_ALIVE_LED_PORT(tmp | CONFIG_BFIN_ALIVE_LED_PIN); /* light off */ | ||
63 | SSYNC(); | ||
64 | #endif | ||
65 | |||
66 | #if defined(CONFIG_BFIN_IDLE_LED) | ||
67 | /* config pins as output. */ | ||
68 | tmp = bfin_read_CONFIG_BFIN_IDLE_LED_DPORT(); | ||
69 | SSYNC(); | ||
70 | bfin_write_CONFIG_BFIN_IDLE_LED_DPORT(tmp | CONFIG_BFIN_IDLE_LED_PIN); | ||
71 | SSYNC(); | ||
72 | |||
73 | /* First set led be off */ | ||
74 | tmp = bfin_read_CONFIG_BFIN_IDLE_LED_PORT(); | ||
75 | SSYNC(); | ||
76 | bfin_write_CONFIG_BFIN_IDLE_LED_PORT(tmp | CONFIG_BFIN_IDLE_LED_PIN); /* light off */ | ||
77 | SSYNC(); | ||
78 | #endif | ||
79 | } | ||
80 | #else | ||
81 | void __init init_leds(void) | ||
82 | { | ||
83 | } | ||
84 | #endif | ||
85 | |||
86 | #if defined(CONFIG_BFIN_ALIVE_LED) | ||
87 | static inline void do_leds(void) | ||
88 | { | ||
89 | static unsigned int count = 50; | ||
90 | static int flag; | ||
91 | unsigned short tmp = 0; | ||
92 | |||
93 | if (--count == 0) { | ||
94 | count = 50; | ||
95 | flag = ~flag; | ||
96 | } | ||
97 | tmp = bfin_read_CONFIG_BFIN_ALIVE_LED_PORT(); | ||
98 | SSYNC(); | ||
99 | |||
100 | if (flag) | ||
101 | tmp &= ~CONFIG_BFIN_ALIVE_LED_PIN; /* light on */ | ||
102 | else | ||
103 | tmp |= CONFIG_BFIN_ALIVE_LED_PIN; /* light off */ | ||
104 | |||
105 | bfin_write_CONFIG_BFIN_ALIVE_LED_PORT(tmp); | ||
106 | SSYNC(); | ||
107 | |||
108 | } | ||
109 | #else | ||
110 | static inline void do_leds(void) | ||
111 | { | ||
112 | } | ||
113 | #endif | ||
114 | 45 | ||
115 | static struct irqaction bfin_timer_irq = { | 46 | static struct irqaction bfin_timer_irq = { |
116 | .name = "BFIN Timer Tick", | 47 | .name = "BFIN Timer Tick", |
@@ -205,7 +136,6 @@ irqreturn_t timer_interrupt(int irq, void *dummy) | |||
205 | write_seqlock(&xtime_lock); | 136 | write_seqlock(&xtime_lock); |
206 | 137 | ||
207 | do_timer(1); | 138 | do_timer(1); |
208 | do_leds(); | ||
209 | 139 | ||
210 | #ifndef CONFIG_SMP | 140 | #ifndef CONFIG_SMP |
211 | update_process_times(user_mode(get_irq_regs())); | 141 | update_process_times(user_mode(get_irq_regs())); |
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 21a55ef19cbd..66b5f3e3ae2a 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -36,8 +36,10 @@ | |||
36 | #include <asm/cacheflush.h> | 36 | #include <asm/cacheflush.h> |
37 | #include <asm/blackfin.h> | 37 | #include <asm/blackfin.h> |
38 | #include <asm/irq_handler.h> | 38 | #include <asm/irq_handler.h> |
39 | #include <linux/irq.h> | ||
39 | #include <asm/trace.h> | 40 | #include <asm/trace.h> |
40 | #include <asm/fixed_code.h> | 41 | #include <asm/fixed_code.h> |
42 | #include <asm/dma.h> | ||
41 | 43 | ||
42 | #ifdef CONFIG_KGDB | 44 | #ifdef CONFIG_KGDB |
43 | # include <linux/debugger.h> | 45 | # include <linux/debugger.h> |
@@ -170,7 +172,7 @@ asmlinkage void double_fault_c(struct pt_regs *fp) | |||
170 | oops_in_progress = 1; | 172 | oops_in_progress = 1; |
171 | printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); | 173 | printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); |
172 | dump_bfin_process(fp); | 174 | dump_bfin_process(fp); |
173 | dump_bfin_mem((void *)fp->retx); | 175 | dump_bfin_mem(fp); |
174 | show_regs(fp); | 176 | show_regs(fp); |
175 | panic("Double Fault - unrecoverable event\n"); | 177 | panic("Double Fault - unrecoverable event\n"); |
176 | 178 | ||
@@ -195,9 +197,13 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
195 | * we will kernel panic, so the system reboots. | 197 | * we will kernel panic, so the system reboots. |
196 | * If KGDB is enabled, don't set this for kernel breakpoints | 198 | * If KGDB is enabled, don't set this for kernel breakpoints |
197 | */ | 199 | */ |
198 | if ((bfin_read_IPEND() & 0xFFC0) | 200 | |
201 | /* TODO: check to see if we are in some sort of deferred HWERR | ||
202 | * that we should be able to recover from, not kernel panic | ||
203 | */ | ||
204 | if ((bfin_read_IPEND() & 0xFFC0) && (trapnr != VEC_STEP) | ||
199 | #ifdef CONFIG_KGDB | 205 | #ifdef CONFIG_KGDB |
200 | && trapnr != VEC_EXCPT02 | 206 | && (trapnr != VEC_EXCPT02) |
201 | #endif | 207 | #endif |
202 | ){ | 208 | ){ |
203 | console_verbose(); | 209 | console_verbose(); |
@@ -433,6 +439,36 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
433 | /* 0x3D - Reserved, Caught by default */ | 439 | /* 0x3D - Reserved, Caught by default */ |
434 | /* 0x3E - Reserved, Caught by default */ | 440 | /* 0x3E - Reserved, Caught by default */ |
435 | /* 0x3F - Reserved, Caught by default */ | 441 | /* 0x3F - Reserved, Caught by default */ |
442 | case VEC_HWERR: | ||
443 | info.si_code = BUS_ADRALN; | ||
444 | sig = SIGBUS; | ||
445 | switch (fp->seqstat & SEQSTAT_HWERRCAUSE) { | ||
446 | /* System MMR Error */ | ||
447 | case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR): | ||
448 | info.si_code = BUS_ADRALN; | ||
449 | sig = SIGBUS; | ||
450 | printk(KERN_NOTICE HWC_x2(KERN_NOTICE)); | ||
451 | break; | ||
452 | /* External Memory Addressing Error */ | ||
453 | case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR): | ||
454 | info.si_code = BUS_ADRERR; | ||
455 | sig = SIGBUS; | ||
456 | printk(KERN_NOTICE HWC_x3(KERN_NOTICE)); | ||
457 | break; | ||
458 | /* Performance Monitor Overflow */ | ||
459 | case (SEQSTAT_HWERRCAUSE_PERF_FLOW): | ||
460 | printk(KERN_NOTICE HWC_x12(KERN_NOTICE)); | ||
461 | break; | ||
462 | /* RAISE 5 instruction */ | ||
463 | case (SEQSTAT_HWERRCAUSE_RAISE_5): | ||
464 | printk(KERN_NOTICE HWC_x18(KERN_NOTICE)); | ||
465 | break; | ||
466 | default: /* Reserved */ | ||
467 | printk(KERN_NOTICE HWC_default(KERN_NOTICE)); | ||
468 | break; | ||
469 | } | ||
470 | CHK_DEBUGGER_TRAP(); | ||
471 | break; | ||
436 | default: | 472 | default: |
437 | info.si_code = TRAP_ILLTRAP; | 473 | info.si_code = TRAP_ILLTRAP; |
438 | sig = SIGTRAP; | 474 | sig = SIGTRAP; |
@@ -447,7 +483,7 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
447 | if (sig != SIGTRAP) { | 483 | if (sig != SIGTRAP) { |
448 | unsigned long stack; | 484 | unsigned long stack; |
449 | dump_bfin_process(fp); | 485 | dump_bfin_process(fp); |
450 | dump_bfin_mem((void *)fp->retx); | 486 | dump_bfin_mem(fp); |
451 | show_regs(fp); | 487 | show_regs(fp); |
452 | 488 | ||
453 | /* Print out the trace buffer if it makes sense */ | 489 | /* Print out the trace buffer if it makes sense */ |
@@ -461,6 +497,7 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
461 | dump_bfin_trace_buffer(); | 497 | dump_bfin_trace_buffer(); |
462 | show_stack(current, &stack); | 498 | show_stack(current, &stack); |
463 | if (oops_in_progress) { | 499 | if (oops_in_progress) { |
500 | print_modules(); | ||
464 | #ifndef CONFIG_ACCESS_CHECK | 501 | #ifndef CONFIG_ACCESS_CHECK |
465 | printk(KERN_EMERG "Please turn on " | 502 | printk(KERN_EMERG "Please turn on " |
466 | "CONFIG_ACCESS_CHECK\n"); | 503 | "CONFIG_ACCESS_CHECK\n"); |
@@ -474,13 +511,6 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
474 | info.si_addr = (void *)fp->pc; | 511 | info.si_addr = (void *)fp->pc; |
475 | force_sig_info(sig, &info, current); | 512 | force_sig_info(sig, &info, current); |
476 | 513 | ||
477 | /* Ensure that bad return addresses don't end up in an infinite | ||
478 | * loop, due to speculative loads/reads. This needs to be done after | ||
479 | * the signal has been sent. | ||
480 | */ | ||
481 | if (trapnr == VEC_CPLB_I_M && sig != SIGTRAP) | ||
482 | fp->pc = SAFE_USER_INSTRUCTION; | ||
483 | |||
484 | trace_buffer_restore(j); | 514 | trace_buffer_restore(j); |
485 | return; | 515 | return; |
486 | } | 516 | } |
@@ -616,8 +646,10 @@ void dump_bfin_process(struct pt_regs *fp) | |||
616 | if (oops_in_progress) | 646 | if (oops_in_progress) |
617 | printk(KERN_EMERG "Kernel OOPS in progress\n"); | 647 | printk(KERN_EMERG "Kernel OOPS in progress\n"); |
618 | 648 | ||
619 | if (context & 0x0020) | 649 | if (context & 0x0020 && (fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR) |
620 | printk(KERN_NOTICE "Deferred excecption or HW Error context\n"); | 650 | printk(KERN_NOTICE "HW Error context\n"); |
651 | else if (context & 0x0020) | ||
652 | printk(KERN_NOTICE "Defered Exception context\n"); | ||
621 | else if (context & 0x3FC0) | 653 | else if (context & 0x3FC0) |
622 | printk(KERN_NOTICE "Interrupt context\n"); | 654 | printk(KERN_NOTICE "Interrupt context\n"); |
623 | else if (context & 0x4000) | 655 | else if (context & 0x4000) |
@@ -645,59 +677,124 @@ void dump_bfin_process(struct pt_regs *fp) | |||
645 | "No Valid process in current context\n"); | 677 | "No Valid process in current context\n"); |
646 | } | 678 | } |
647 | 679 | ||
648 | void dump_bfin_mem(void *retaddr) | 680 | void dump_bfin_mem(struct pt_regs *fp) |
649 | { | 681 | { |
682 | unsigned short *addr, *erraddr, val = 0, err = 0; | ||
683 | char sti = 0, buf[6]; | ||
650 | 684 | ||
651 | if (retaddr >= (void *)FIXED_CODE_START && retaddr < (void *)physical_mem_end | 685 | if (unlikely((fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR)) |
652 | #if L1_CODE_LENGTH != 0 | 686 | erraddr = (void *)fp->pc; |
653 | /* FIXME: Copy the code out of L1 Instruction SRAM through dma | 687 | else |
654 | memcpy. */ | 688 | erraddr = (void *)fp->retx; |
655 | && !(retaddr >= (void *)L1_CODE_START | 689 | |
656 | && retaddr < (void *)(L1_CODE_START + L1_CODE_LENGTH)) | 690 | printk(KERN_NOTICE "return address: [0x%p]; contents of:", erraddr); |
657 | #endif | 691 | |
658 | ) { | 692 | for (addr = (unsigned short *)((unsigned long)erraddr & ~0xF) - 0x10; |
659 | int i = ((unsigned int)retaddr & 0xFFFFFFF0) - 32; | 693 | addr < (unsigned short *)((unsigned long)erraddr & ~0xF) + 0x10; |
660 | unsigned short x = 0; | 694 | addr++) { |
661 | printk(KERN_NOTICE "return address: [0x%p]; contents of:", retaddr); | 695 | if (!((unsigned long)addr & 0xF)) |
662 | for (; i < ((unsigned int)retaddr & 0xFFFFFFF0) + 32; i += 2) { | 696 | printk("\n" KERN_NOTICE "0x%p: ", addr); |
663 | if (!(i & 0xF)) | 697 | |
664 | printk("\n" KERN_NOTICE "0x%08x: ", i); | 698 | if (get_user(val, addr)) { |
665 | 699 | if (addr >= (unsigned short *)L1_CODE_START && | |
666 | if (get_user(x, (unsigned short *)i)) | 700 | addr < (unsigned short *)(L1_CODE_START + L1_CODE_LENGTH)) { |
667 | break; | 701 | dma_memcpy(&val, addr, sizeof(val)); |
702 | sprintf(buf, "%04x", val); | ||
703 | } else if (addr >= (unsigned short *)FIXED_CODE_START && | ||
704 | addr <= (unsigned short *)memory_start) { | ||
705 | val = bfin_read16(addr); | ||
706 | sprintf(buf, "%04x", val); | ||
707 | } else { | ||
708 | val = 0; | ||
709 | sprintf(buf, "????"); | ||
710 | } | ||
711 | } else | ||
712 | sprintf(buf, "%04x", val); | ||
713 | |||
714 | if (addr == erraddr) { | ||
715 | printk("[%s]", buf); | ||
716 | err = val; | ||
717 | } else | ||
718 | printk(" %s ", buf); | ||
719 | |||
720 | /* Do any previous instructions turn on interrupts? */ | ||
721 | if (addr <= erraddr && /* in the past */ | ||
722 | ((val >= 0x0040 && val <= 0x0047) || /* STI instruction */ | ||
723 | val == 0x017b)) /* [SP++] = RETI */ | ||
724 | sti = 1; | ||
725 | } | ||
726 | |||
727 | printk("\n"); | ||
728 | |||
729 | /* Hardware error interrupts can be deferred */ | ||
730 | if (unlikely(sti && (fp->seqstat & SEQSTAT_EXCAUSE) == VEC_HWERR && | ||
731 | oops_in_progress)){ | ||
732 | printk(KERN_NOTICE "Looks like this was a deferred error - sorry\n"); | ||
668 | #ifndef CONFIG_DEBUG_HWERR | 733 | #ifndef CONFIG_DEBUG_HWERR |
669 | /* If one of the last few instructions was a STI | 734 | printk(KERN_NOTICE "The remaining message may be meaningless\n" |
670 | * it is likely that the error occured awhile ago | 735 | KERN_NOTICE "You should enable CONFIG_DEBUG_HWERR to get a" |
671 | * and we just noticed. This only happens in kernel | 736 | " better idea where it came from\n"); |
672 | * context, which should mean an oops is happening | 737 | #else |
673 | */ | 738 | /* If we are handling only one peripheral interrupt |
674 | if (oops_in_progress && x >= 0x0040 && x <= 0x0047 && i <= 0) | 739 | * and current mm and pid are valid, and the last error |
675 | panic("\n\nWARNING : You should reconfigure" | 740 | * was in that user space process's text area |
676 | " the kernel to turn on\n" | 741 | * print it out - because that is where the problem exists |
677 | " 'Hardware error interrupt" | 742 | */ |
678 | " debugging'\n" | 743 | if ((!(((fp)->ipend & ~0x30) & (((fp)->ipend & ~0x30) - 1))) && |
679 | " The rest of this error" | 744 | (current->pid && current->mm)) { |
680 | " is meanless\n"); | 745 | /* And the last RETI points to the current userspace context */ |
681 | #endif | 746 | if ((fp + 1)->pc >= current->mm->start_code && |
682 | if (i == (unsigned int)retaddr) | 747 | (fp + 1)->pc <= current->mm->end_code) { |
683 | printk("[%04x]", x); | 748 | printk(KERN_NOTICE "It might be better to look around here : \n"); |
684 | else | 749 | printk(KERN_NOTICE "-------------------------------------------\n"); |
685 | printk(" %04x ", x); | 750 | show_regs(fp + 1); |
751 | printk(KERN_NOTICE "-------------------------------------------\n"); | ||
752 | } | ||
686 | } | 753 | } |
687 | printk("\n"); | 754 | #endif |
688 | } else | 755 | } |
689 | printk("\n" KERN_NOTICE | ||
690 | "Cannot look at the [PC] <%p> for it is" | ||
691 | " in unreadable memory - sorry\n", retaddr); | ||
692 | } | 756 | } |
693 | 757 | ||
694 | void show_regs(struct pt_regs *fp) | 758 | void show_regs(struct pt_regs *fp) |
695 | { | 759 | { |
696 | char buf [150]; | 760 | char buf [150]; |
761 | struct irqaction *action; | ||
762 | unsigned int i; | ||
763 | unsigned long flags; | ||
697 | 764 | ||
698 | printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n"); | 765 | printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\t\t%s\n", print_tainted()); |
699 | printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", | 766 | printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", |
700 | (long)fp->seqstat, fp->ipend, fp->syscfg); | 767 | (long)fp->seqstat, fp->ipend, fp->syscfg); |
768 | printk(KERN_NOTICE " HWERRCAUSE: 0x%lx\n", | ||
769 | (fp->seqstat & SEQSTAT_HWERRCAUSE) >> 14); | ||
770 | printk(KERN_NOTICE " EXCAUSE : 0x%lx\n", | ||
771 | fp->seqstat & SEQSTAT_EXCAUSE); | ||
772 | for (i = 6; i <= 15 ; i++) { | ||
773 | if (fp->ipend & (1 << i)) { | ||
774 | decode_address(buf, bfin_read32(EVT0 + 4*i)); | ||
775 | printk(KERN_NOTICE " physical IVG%i asserted : %s\n", i, buf); | ||
776 | } | ||
777 | } | ||
778 | |||
779 | /* if no interrupts are going off, don't print this out */ | ||
780 | if (fp->ipend & ~0x3F) { | ||
781 | for (i = 0; i < (NR_IRQS - 1); i++) { | ||
782 | spin_lock_irqsave(&irq_desc[i].lock, flags); | ||
783 | action = irq_desc[i].action; | ||
784 | if (!action) | ||
785 | goto unlock; | ||
786 | |||
787 | decode_address(buf, (unsigned int)action->handler); | ||
788 | printk(KERN_NOTICE " logical irq %3d mapped : %s", i, buf); | ||
789 | for (action = action->next; action; action = action->next) { | ||
790 | decode_address(buf, (unsigned int)action->handler); | ||
791 | printk(", %s", buf); | ||
792 | } | ||
793 | printk("\n"); | ||
794 | unlock: | ||
795 | spin_unlock_irqrestore(&irq_desc[i].lock, flags); | ||
796 | } | ||
797 | } | ||
701 | 798 | ||
702 | decode_address(buf, fp->rete); | 799 | decode_address(buf, fp->rete); |
703 | printk(KERN_NOTICE " RETE: %s\n", buf); | 800 | printk(KERN_NOTICE " RETE: %s\n", buf); |
@@ -708,9 +805,10 @@ void show_regs(struct pt_regs *fp) | |||
708 | decode_address(buf, fp->rets); | 805 | decode_address(buf, fp->rets); |
709 | printk(KERN_NOTICE " RETS: %s\n", buf); | 806 | printk(KERN_NOTICE " RETS: %s\n", buf); |
710 | decode_address(buf, fp->pc); | 807 | decode_address(buf, fp->pc); |
711 | printk(KERN_NOTICE " PC: %s\n", buf); | 808 | printk(KERN_NOTICE " PC : %s\n", buf); |
712 | 809 | ||
713 | if ((long)fp->seqstat & SEQSTAT_EXCAUSE) { | 810 | if (((long)fp->seqstat & SEQSTAT_EXCAUSE) && |
811 | (((long)fp->seqstat & SEQSTAT_EXCAUSE) != VEC_HWERR)) { | ||
714 | decode_address(buf, bfin_read_DCPLB_FAULT_ADDR()); | 812 | decode_address(buf, bfin_read_DCPLB_FAULT_ADDR()); |
715 | printk(KERN_NOTICE "DCPLB_FAULT_ADDR: %s\n", buf); | 813 | printk(KERN_NOTICE "DCPLB_FAULT_ADDR: %s\n", buf); |
716 | decode_address(buf, bfin_read_ICPLB_FAULT_ADDR()); | 814 | decode_address(buf, bfin_read_ICPLB_FAULT_ADDR()); |
@@ -824,7 +922,7 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp) | |||
824 | printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR()); | 922 | printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR()); |
825 | printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR()); | 923 | printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR()); |
826 | dump_bfin_process(fp); | 924 | dump_bfin_process(fp); |
827 | dump_bfin_mem((void *)fp->retx); | 925 | dump_bfin_mem(fp); |
828 | show_regs(fp); | 926 | show_regs(fp); |
829 | dump_stack(); | 927 | dump_stack(); |
830 | panic("Unrecoverable event\n"); | 928 | panic("Unrecoverable event\n"); |
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S index 9b75bc83c71f..858722421b40 100644 --- a/arch/blackfin/kernel/vmlinux.lds.S +++ b/arch/blackfin/kernel/vmlinux.lds.S | |||
@@ -91,13 +91,13 @@ SECTIONS | |||
91 | { | 91 | { |
92 | . = ALIGN(PAGE_SIZE); | 92 | . = ALIGN(PAGE_SIZE); |
93 | __sinittext = .; | 93 | __sinittext = .; |
94 | *(.init.text) | 94 | INIT_TEXT |
95 | __einittext = .; | 95 | __einittext = .; |
96 | } | 96 | } |
97 | .init.data : | 97 | .init.data : |
98 | { | 98 | { |
99 | . = ALIGN(16); | 99 | . = ALIGN(16); |
100 | *(.init.data) | 100 | INIT_DATA |
101 | } | 101 | } |
102 | .init.setup : | 102 | .init.setup : |
103 | { | 103 | { |
@@ -198,8 +198,8 @@ SECTIONS | |||
198 | 198 | ||
199 | /DISCARD/ : | 199 | /DISCARD/ : |
200 | { | 200 | { |
201 | *(.exit.text) | 201 | EXIT_TEXT |
202 | *(.exit.data) | 202 | EXIT_DATA |
203 | *(.exitcall.exit) | 203 | *(.exitcall.exit) |
204 | } | 204 | } |
205 | } | 205 | } |
diff --git a/arch/blackfin/lib/memcpy.S b/arch/blackfin/lib/memcpy.S index 2e6336492b4b..e654a18a0754 100644 --- a/arch/blackfin/lib/memcpy.S +++ b/arch/blackfin/lib/memcpy.S | |||
@@ -70,8 +70,8 @@ ENTRY(_memcpy) | |||
70 | /* Check for aligned data.*/ | 70 | /* Check for aligned data.*/ |
71 | 71 | ||
72 | R3 = R1 | R0; | 72 | R3 = R1 | R0; |
73 | R0 = 0x3; | 73 | R1 = 0x3; |
74 | R3 = R3 & R0; | 74 | R3 = R3 & R1; |
75 | CC = R3; /* low bits set on either address? */ | 75 | CC = R3; /* low bits set on either address? */ |
76 | IF CC JUMP .Lnot_aligned; | 76 | IF CC JUMP .Lnot_aligned; |
77 | 77 | ||
@@ -83,7 +83,6 @@ ENTRY(_memcpy) | |||
83 | /* less than eight bytes... */ | 83 | /* less than eight bytes... */ |
84 | P2 = R2; | 84 | P2 = R2; |
85 | LSETUP(.Lthree_start, .Lthree_end) LC0=P2; | 85 | LSETUP(.Lthree_start, .Lthree_end) LC0=P2; |
86 | R0 = R1; /* setup src address for return */ | ||
87 | .Lthree_start: | 86 | .Lthree_start: |
88 | R3 = B[P1++] (X); | 87 | R3 = B[P1++] (X); |
89 | .Lthree_end: | 88 | .Lthree_end: |
@@ -95,7 +94,6 @@ ENTRY(_memcpy) | |||
95 | /* There's at least eight bytes to copy. */ | 94 | /* There's at least eight bytes to copy. */ |
96 | P2 += -1; /* because we unroll one iteration */ | 95 | P2 += -1; /* because we unroll one iteration */ |
97 | LSETUP(.Lword_loops, .Lword_loope) LC0=P2; | 96 | LSETUP(.Lword_loops, .Lword_loope) LC0=P2; |
98 | R0 = R1; | ||
99 | I1 = P1; | 97 | I1 = P1; |
100 | R3 = [I1++]; | 98 | R3 = [I1++]; |
101 | #if ANOMALY_05000202 | 99 | #if ANOMALY_05000202 |
@@ -120,7 +118,6 @@ ENTRY(_memcpy) | |||
120 | .Lnot_aligned: | 118 | .Lnot_aligned: |
121 | /* From here, we're copying byte-by-byte. */ | 119 | /* From here, we're copying byte-by-byte. */ |
122 | LSETUP (.Lbyte_start, .Lbyte_end) LC0=P2; | 120 | LSETUP (.Lbyte_start, .Lbyte_end) LC0=P2; |
123 | R0 = R1; /* Save src address for return */ | ||
124 | .Lbyte_start: | 121 | .Lbyte_start: |
125 | R1 = B[P1++] (X); | 122 | R1 = B[P1++] (X); |
126 | .Lbyte_end: | 123 | .Lbyte_end: |
@@ -135,7 +132,6 @@ ENTRY(_memcpy) | |||
135 | * Don't bother to work out alignment for | 132 | * Don't bother to work out alignment for |
136 | * the reverse case. | 133 | * the reverse case. |
137 | */ | 134 | */ |
138 | R0 = R1; /* save src for later. */ | ||
139 | P0 = P0 + P2; | 135 | P0 = P0 + P2; |
140 | P0 += -1; | 136 | P0 += -1; |
141 | P1 = P1 + P2; | 137 | P1 = P1 + P2; |
diff --git a/arch/blackfin/mach-bf527/Kconfig b/arch/blackfin/mach-bf527/Kconfig index 5c736837d4bf..3cde4beeb214 100644 --- a/arch/blackfin/mach-bf527/Kconfig +++ b/arch/blackfin/mach-bf527/Kconfig | |||
@@ -43,7 +43,7 @@ endchoice | |||
43 | 43 | ||
44 | choice | 44 | choice |
45 | prompt "UART1" | 45 | prompt "UART1" |
46 | default BF527_UART1_PORTG | 46 | default BF527_UART1_PORTF |
47 | help | 47 | help |
48 | Select PORT used for UART1. See Hardware Reference Manual | 48 | Select PORT used for UART1. See Hardware Reference Manual |
49 | 49 | ||
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index 003e2ac654d8..f8c411a24af7 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * | 8 | * |
9 | * Modified: | 9 | * Modified: |
10 | * Copyright 2005 National ICT Australia (NICTA) | 10 | * Copyright 2005 National ICT Australia (NICTA) |
11 | * Copyright 2004-2007 Analog Devices Inc. | 11 | * Copyright 2004-2008 Analog Devices Inc. |
12 | * | 12 | * |
13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
14 | * | 14 | * |
@@ -41,6 +41,7 @@ | |||
41 | #include <linux/irq.h> | 41 | #include <linux/irq.h> |
42 | #include <linux/interrupt.h> | 42 | #include <linux/interrupt.h> |
43 | #include <linux/usb/sl811.h> | 43 | #include <linux/usb/sl811.h> |
44 | #include <linux/usb/musb.h> | ||
44 | #include <asm/cplb.h> | 45 | #include <asm/cplb.h> |
45 | #include <asm/dma.h> | 46 | #include <asm/dma.h> |
46 | #include <asm/bfin5xx_spi.h> | 47 | #include <asm/bfin5xx_spi.h> |
@@ -105,6 +106,69 @@ void __exit bfin_isp1761_exit(void) | |||
105 | arch_initcall(bfin_isp1761_init); | 106 | arch_initcall(bfin_isp1761_init); |
106 | #endif | 107 | #endif |
107 | 108 | ||
109 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) | ||
110 | static struct resource musb_resources[] = { | ||
111 | [0] = { | ||
112 | .start = 0xffc03800, | ||
113 | .end = 0xffc03cff, | ||
114 | .flags = IORESOURCE_MEM, | ||
115 | }, | ||
116 | [1] = { /* general IRQ */ | ||
117 | .start = IRQ_USB_INT0, | ||
118 | .end = IRQ_USB_INT0, | ||
119 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
120 | }, | ||
121 | [2] = { /* DMA IRQ */ | ||
122 | .start = IRQ_USB_DMA, | ||
123 | .end = IRQ_USB_DMA, | ||
124 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
125 | }, | ||
126 | }; | ||
127 | |||
128 | static struct musb_hdrc_platform_data musb_plat = { | ||
129 | #if defined(CONFIG_USB_MUSB_OTG) | ||
130 | .mode = MUSB_OTG, | ||
131 | #elif defined(CONFIG_USB_MUSB_HDRC_HCD) | ||
132 | .mode = MUSB_HOST, | ||
133 | #elif defined(CONFIG_USB_GADGET_MUSB_HDRC) | ||
134 | .mode = MUSB_PERIPHERAL, | ||
135 | #endif | ||
136 | .multipoint = 0, | ||
137 | }; | ||
138 | |||
139 | static u64 musb_dmamask = ~(u32)0; | ||
140 | |||
141 | static struct platform_device musb_device = { | ||
142 | .name = "musb_hdrc", | ||
143 | .id = 0, | ||
144 | .dev = { | ||
145 | .dma_mask = &musb_dmamask, | ||
146 | .coherent_dma_mask = 0xffffffff, | ||
147 | .platform_data = &musb_plat, | ||
148 | }, | ||
149 | .num_resources = ARRAY_SIZE(musb_resources), | ||
150 | .resource = musb_resources, | ||
151 | }; | ||
152 | #endif | ||
153 | |||
154 | #if defined(CONFIG_FB_BFIN_T350MCQB) || defined(CONFIG_FB_BFIN_T350MCQB_MODULE) | ||
155 | |||
156 | static struct resource bf52x_t350mcqb_resources[] = { | ||
157 | { | ||
158 | .start = IRQ_PPI_ERROR, | ||
159 | .end = IRQ_PPI_ERROR, | ||
160 | .flags = IORESOURCE_IRQ, | ||
161 | }, | ||
162 | }; | ||
163 | |||
164 | static struct platform_device bf52x_t350mcqb_device = { | ||
165 | .name = "bfin-t350mcqb", | ||
166 | .id = -1, | ||
167 | .num_resources = ARRAY_SIZE(bf52x_t350mcqb_resources), | ||
168 | .resource = bf52x_t350mcqb_resources, | ||
169 | }; | ||
170 | #endif | ||
171 | |||
108 | #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE) | 172 | #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE) |
109 | static struct mtd_partition partition_info[] = { | 173 | static struct mtd_partition partition_info[] = { |
110 | { | 174 | { |
@@ -253,12 +317,7 @@ static struct resource sl811_hcd_resources[] = { | |||
253 | void sl811_port_power(struct device *dev, int is_on) | 317 | void sl811_port_power(struct device *dev, int is_on) |
254 | { | 318 | { |
255 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); | 319 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); |
256 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS); | 320 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on); |
257 | |||
258 | if (is_on) | ||
259 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 1); | ||
260 | else | ||
261 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 0); | ||
262 | } | 321 | } |
263 | #endif | 322 | #endif |
264 | 323 | ||
@@ -718,6 +777,28 @@ static struct platform_device bfin_pata_device = { | |||
718 | }; | 777 | }; |
719 | #endif | 778 | #endif |
720 | 779 | ||
780 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
781 | #include <linux/input.h> | ||
782 | #include <linux/gpio_keys.h> | ||
783 | |||
784 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
785 | {BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"}, | ||
786 | {BTN_1, GPIO_PG13, 1, "gpio-keys: BTN1"}, | ||
787 | }; | ||
788 | |||
789 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
790 | .buttons = bfin_gpio_keys_table, | ||
791 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
792 | }; | ||
793 | |||
794 | static struct platform_device bfin_device_gpiokeys = { | ||
795 | .name = "gpio-keys", | ||
796 | .dev = { | ||
797 | .platform_data = &bfin_gpio_keys_data, | ||
798 | }, | ||
799 | }; | ||
800 | #endif | ||
801 | |||
721 | static struct platform_device *stamp_devices[] __initdata = { | 802 | static struct platform_device *stamp_devices[] __initdata = { |
722 | #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE) | 803 | #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE) |
723 | &bf5xx_nand_device, | 804 | &bf5xx_nand_device, |
@@ -739,6 +820,10 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
739 | &isp1362_hcd_device, | 820 | &isp1362_hcd_device, |
740 | #endif | 821 | #endif |
741 | 822 | ||
823 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) | ||
824 | &musb_device, | ||
825 | #endif | ||
826 | |||
742 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 827 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
743 | &smc91x_device, | 828 | &smc91x_device, |
744 | #endif | 829 | #endif |
@@ -763,6 +848,10 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
763 | &bfin_fb_device, | 848 | &bfin_fb_device, |
764 | #endif | 849 | #endif |
765 | 850 | ||
851 | #if defined(CONFIG_FB_BFIN_T350MCQB) || defined(CONFIG_FB_BFIN_T350MCQB_MODULE) | ||
852 | &bf52x_t350mcqb_device, | ||
853 | #endif | ||
854 | |||
766 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) | 855 | #if defined(CONFIG_FB_BFIN_7393) || defined(CONFIG_FB_BFIN_7393_MODULE) |
767 | &bfin_fb_adv7393_device, | 856 | &bfin_fb_adv7393_device, |
768 | #endif | 857 | #endif |
@@ -783,6 +872,10 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
783 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | 872 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) |
784 | &bfin_pata_device, | 873 | &bfin_pata_device, |
785 | #endif | 874 | #endif |
875 | |||
876 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
877 | &bfin_device_gpiokeys, | ||
878 | #endif | ||
786 | }; | 879 | }; |
787 | 880 | ||
788 | static int __init stamp_init(void) | 881 | static int __init stamp_init(void) |
diff --git a/arch/blackfin/mach-bf533/boards/H8606.c b/arch/blackfin/mach-bf533/boards/H8606.c index 6bcf4047f89c..a72c7a620fa1 100644 --- a/arch/blackfin/mach-bf533/boards/H8606.c +++ b/arch/blackfin/mach-bf533/boards/H8606.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #endif | 40 | #endif |
41 | #include <linux/pata_platform.h> | 41 | #include <linux/pata_platform.h> |
42 | #include <linux/irq.h> | 42 | #include <linux/irq.h> |
43 | |||
43 | #include <asm/dma.h> | 44 | #include <asm/dma.h> |
44 | #include <asm/bfin5xx_spi.h> | 45 | #include <asm/bfin5xx_spi.h> |
45 | #include <asm/reboot.h> | 46 | #include <asm/reboot.h> |
@@ -303,7 +304,77 @@ static struct platform_device bfin_uart_device = { | |||
303 | }; | 304 | }; |
304 | #endif | 305 | #endif |
305 | 306 | ||
306 | static struct platform_device *stamp_devices[] __initdata = { | 307 | #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) |
308 | |||
309 | #include <linux/serial_8250.h> | ||
310 | #include <linux/serial.h> | ||
311 | |||
312 | /* | ||
313 | * Configuration for two 16550 UARTS in FPGA at addresses 0x20200000 and 0x202000010. | ||
314 | * running at half system clock, both with interrupt output or-ed to PF8. Change to | ||
315 | * suit different FPGA configuration, or to suit real 16550 UARTS connected to the bus | ||
316 | */ | ||
317 | |||
318 | static struct plat_serial8250_port serial8250_platform_data [] = { | ||
319 | { | ||
320 | .membase = 0x20200000, | ||
321 | .mapbase = 0x20200000, | ||
322 | .irq = IRQ_PF8, | ||
323 | .flags = UPF_BOOT_AUTOCONF | UART_CONFIG_TYPE, | ||
324 | .iotype = UPIO_MEM, | ||
325 | .regshift = 1, | ||
326 | .uartclk = 66666667, | ||
327 | }, { | ||
328 | .membase = 0x20200010, | ||
329 | .mapbase = 0x20200010, | ||
330 | .irq = IRQ_PF8, | ||
331 | .flags = UPF_BOOT_AUTOCONF | UART_CONFIG_TYPE, | ||
332 | .iotype = UPIO_MEM, | ||
333 | .regshift = 1, | ||
334 | .uartclk = 66666667, | ||
335 | }, { | ||
336 | } | ||
337 | }; | ||
338 | |||
339 | static struct platform_device serial8250_device = { | ||
340 | .id = PLAT8250_DEV_PLATFORM, | ||
341 | .name = "serial8250", | ||
342 | .dev = { | ||
343 | .platform_data = serial8250_platform_data, | ||
344 | }, | ||
345 | }; | ||
346 | |||
347 | #endif | ||
348 | |||
349 | #if defined(CONFIG_KEYBOARD_OPENCORES) || defined(CONFIG_KEYBOARD_OPENCORES_MODULE) | ||
350 | |||
351 | /* | ||
352 | * Configuration for one OpenCores keyboard controller in FPGA at address 0x20200030, | ||
353 | * interrupt output wired to PF9. Change to suit different FPGA configuration | ||
354 | */ | ||
355 | |||
356 | static struct resource opencores_kbd_resources[] = { | ||
357 | [0] = { | ||
358 | .start = 0x20200030, | ||
359 | .end = 0x20300030 + 2, | ||
360 | .flags = IORESOURCE_MEM, | ||
361 | }, | ||
362 | [1] = { | ||
363 | .start = IRQ_PF9, | ||
364 | .end = IRQ_PF9, | ||
365 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, | ||
366 | }, | ||
367 | }; | ||
368 | |||
369 | static struct platform_device opencores_kbd_device = { | ||
370 | .id = -1, | ||
371 | .name = "opencores-kbd", | ||
372 | .resource = opencores_kbd_resources, | ||
373 | .num_resources = ARRAY_SIZE(opencores_kbd_resources), | ||
374 | }; | ||
375 | #endif | ||
376 | |||
377 | static struct platform_device *h8606_devices[] __initdata = { | ||
307 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | 378 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) |
308 | &rtc_device, | 379 | &rtc_device, |
309 | #endif | 380 | #endif |
@@ -327,13 +398,21 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
327 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | 398 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) |
328 | &bfin_uart_device, | 399 | &bfin_uart_device, |
329 | #endif | 400 | #endif |
401 | |||
402 | #if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) | ||
403 | &serial8250_device, | ||
404 | #endif | ||
405 | |||
406 | #if defined(CONFIG_KEYBOARD_OPENCORES) || defined(CONFIG_KEYBOARD_OPENCORES_MODULE) | ||
407 | &opencores_kbd_device, | ||
408 | #endif | ||
330 | }; | 409 | }; |
331 | 410 | ||
332 | static int __init H8606_init(void) | 411 | static int __init H8606_init(void) |
333 | { | 412 | { |
334 | printk(KERN_INFO "HV Sistemas H8606 board support by http://www.hvsistemas.com\n"); | 413 | printk(KERN_INFO "HV Sistemas H8606 board support by http://www.hvsistemas.com\n"); |
335 | printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); | 414 | printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); |
336 | platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices)); | 415 | platform_add_devices(h8606_devices, ARRAY_SIZE(h8606_devices)); |
337 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 416 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
338 | spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); | 417 | spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); |
339 | #endif | 418 | #endif |
diff --git a/arch/blackfin/mach-bf533/boards/ezkit.c b/arch/blackfin/mach-bf533/boards/ezkit.c index be852034a68b..c37dd45c8803 100644 --- a/arch/blackfin/mach-bf533/boards/ezkit.c +++ b/arch/blackfin/mach-bf533/boards/ezkit.c | |||
@@ -256,6 +256,50 @@ static struct platform_device bfin_pata_device = { | |||
256 | }; | 256 | }; |
257 | #endif | 257 | #endif |
258 | 258 | ||
259 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
260 | #include <linux/input.h> | ||
261 | #include <linux/gpio_keys.h> | ||
262 | |||
263 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
264 | {BTN_0, GPIO_PF7, 1, "gpio-keys: BTN0"}, | ||
265 | {BTN_1, GPIO_PF8, 1, "gpio-keys: BTN1"}, | ||
266 | {BTN_2, GPIO_PF9, 1, "gpio-keys: BTN2"}, | ||
267 | {BTN_3, GPIO_PF10, 1, "gpio-keys: BTN3"}, | ||
268 | }; | ||
269 | |||
270 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
271 | .buttons = bfin_gpio_keys_table, | ||
272 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
273 | }; | ||
274 | |||
275 | static struct platform_device bfin_device_gpiokeys = { | ||
276 | .name = "gpio-keys", | ||
277 | .dev = { | ||
278 | .platform_data = &bfin_gpio_keys_data, | ||
279 | }, | ||
280 | }; | ||
281 | #endif | ||
282 | |||
283 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
284 | #include <linux/i2c-gpio.h> | ||
285 | |||
286 | static struct i2c_gpio_platform_data i2c_gpio_data = { | ||
287 | .sda_pin = 1, | ||
288 | .scl_pin = 0, | ||
289 | .sda_is_open_drain = 0, | ||
290 | .scl_is_open_drain = 0, | ||
291 | .udelay = 40, | ||
292 | }; | ||
293 | |||
294 | static struct platform_device i2c_gpio_device = { | ||
295 | .name = "i2c-gpio", | ||
296 | .id = 0, | ||
297 | .dev = { | ||
298 | .platform_data = &i2c_gpio_data, | ||
299 | }, | ||
300 | }; | ||
301 | #endif | ||
302 | |||
259 | static struct platform_device *ezkit_devices[] __initdata = { | 303 | static struct platform_device *ezkit_devices[] __initdata = { |
260 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 304 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
261 | &smc91x_device, | 305 | &smc91x_device, |
@@ -280,6 +324,14 @@ static struct platform_device *ezkit_devices[] __initdata = { | |||
280 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | 324 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) |
281 | &bfin_pata_device, | 325 | &bfin_pata_device, |
282 | #endif | 326 | #endif |
327 | |||
328 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
329 | &bfin_device_gpiokeys, | ||
330 | #endif | ||
331 | |||
332 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
333 | &i2c_gpio_device, | ||
334 | #endif | ||
283 | }; | 335 | }; |
284 | 336 | ||
285 | static int __init ezkit_init(void) | 337 | static int __init ezkit_init(void) |
diff --git a/arch/blackfin/mach-bf533/boards/stamp.c b/arch/blackfin/mach-bf533/boards/stamp.c index 8fde8d832850..ac52b040b336 100644 --- a/arch/blackfin/mach-bf533/boards/stamp.c +++ b/arch/blackfin/mach-bf533/boards/stamp.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/platform_device.h> | 32 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 33 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 34 | #include <linux/mtd/partitions.h> |
35 | #include <linux/mtd/physmap.h> | ||
35 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
36 | #include <linux/spi/flash.h> | 37 | #include <linux/spi/flash.h> |
37 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | 38 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) |
@@ -108,6 +109,50 @@ static struct platform_device net2272_bfin_device = { | |||
108 | }; | 109 | }; |
109 | #endif | 110 | #endif |
110 | 111 | ||
112 | static struct mtd_partition stamp_partitions[] = { | ||
113 | { | ||
114 | .name = "Bootloader", | ||
115 | .size = 0x20000, | ||
116 | .offset = 0, | ||
117 | }, { | ||
118 | .name = "Kernel", | ||
119 | .size = 0xE0000, | ||
120 | .offset = MTDPART_OFS_APPEND, | ||
121 | }, { | ||
122 | .name = "RootFS", | ||
123 | .size = MTDPART_SIZ_FULL, | ||
124 | .offset = MTDPART_OFS_APPEND, | ||
125 | } | ||
126 | }; | ||
127 | |||
128 | static struct physmap_flash_data stamp_flash_data = { | ||
129 | .width = 2, | ||
130 | .parts = stamp_partitions, | ||
131 | .nr_parts = ARRAY_SIZE(stamp_partitions), | ||
132 | }; | ||
133 | |||
134 | static struct resource stamp_flash_resource[] = { | ||
135 | { | ||
136 | .name = "cfi_probe", | ||
137 | .start = 0x20000000, | ||
138 | .end = 0x203fffff, | ||
139 | .flags = IORESOURCE_MEM, | ||
140 | }, { | ||
141 | .start = CONFIG_ENET_FLASH_PIN, | ||
142 | .flags = IORESOURCE_IRQ, | ||
143 | } | ||
144 | }; | ||
145 | |||
146 | static struct platform_device stamp_flash_device = { | ||
147 | .name = "BF5xx-Flash", | ||
148 | .id = 0, | ||
149 | .dev = { | ||
150 | .platform_data = &stamp_flash_data, | ||
151 | }, | ||
152 | .num_resources = ARRAY_SIZE(stamp_flash_resource), | ||
153 | .resource = stamp_flash_resource, | ||
154 | }; | ||
155 | |||
111 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 156 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
112 | /* all SPI peripherals info goes here */ | 157 | /* all SPI peripherals info goes here */ |
113 | 158 | ||
@@ -373,6 +418,49 @@ static struct platform_device bfin_pata_device = { | |||
373 | }; | 418 | }; |
374 | #endif | 419 | #endif |
375 | 420 | ||
421 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
422 | #include <linux/input.h> | ||
423 | #include <linux/gpio_keys.h> | ||
424 | |||
425 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
426 | {BTN_0, GPIO_PF5, 1, "gpio-keys: BTN0"}, | ||
427 | {BTN_1, GPIO_PF6, 1, "gpio-keys: BTN1"}, | ||
428 | {BTN_2, GPIO_PF8, 1, "gpio-keys: BTN2"}, | ||
429 | }; | ||
430 | |||
431 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
432 | .buttons = bfin_gpio_keys_table, | ||
433 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
434 | }; | ||
435 | |||
436 | static struct platform_device bfin_device_gpiokeys = { | ||
437 | .name = "gpio-keys", | ||
438 | .dev = { | ||
439 | .platform_data = &bfin_gpio_keys_data, | ||
440 | }, | ||
441 | }; | ||
442 | #endif | ||
443 | |||
444 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
445 | #include <linux/i2c-gpio.h> | ||
446 | |||
447 | static struct i2c_gpio_platform_data i2c_gpio_data = { | ||
448 | .sda_pin = 2, | ||
449 | .scl_pin = 3, | ||
450 | .sda_is_open_drain = 0, | ||
451 | .scl_is_open_drain = 0, | ||
452 | .udelay = 40, | ||
453 | }; | ||
454 | |||
455 | static struct platform_device i2c_gpio_device = { | ||
456 | .name = "i2c-gpio", | ||
457 | .id = 0, | ||
458 | .dev = { | ||
459 | .platform_data = &i2c_gpio_data, | ||
460 | }, | ||
461 | }; | ||
462 | #endif | ||
463 | |||
376 | static struct platform_device *stamp_devices[] __initdata = { | 464 | static struct platform_device *stamp_devices[] __initdata = { |
377 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | 465 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) |
378 | &rtc_device, | 466 | &rtc_device, |
@@ -406,6 +494,15 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
406 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | 494 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) |
407 | &bfin_pata_device, | 495 | &bfin_pata_device, |
408 | #endif | 496 | #endif |
497 | |||
498 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
499 | &bfin_device_gpiokeys, | ||
500 | #endif | ||
501 | |||
502 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
503 | &i2c_gpio_device, | ||
504 | #endif | ||
505 | &stamp_flash_device, | ||
409 | }; | 506 | }; |
410 | 507 | ||
411 | static int __init stamp_init(void) | 508 | static int __init stamp_init(void) |
@@ -418,12 +515,10 @@ static int __init stamp_init(void) | |||
418 | return ret; | 515 | return ret; |
419 | 516 | ||
420 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 517 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
421 | # if defined(CONFIG_BFIN_SHARED_FLASH_ENET) | ||
422 | /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */ | 518 | /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */ |
423 | bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (1 << CONFIG_ENET_FLASH_PIN)); | 519 | bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (1 << CONFIG_ENET_FLASH_PIN)); |
424 | bfin_write_FIO_FLAG_S(1 << CONFIG_ENET_FLASH_PIN); | 520 | bfin_write_FIO_FLAG_S(1 << CONFIG_ENET_FLASH_PIN); |
425 | SSYNC(); | 521 | SSYNC(); |
426 | # endif | ||
427 | #endif | 522 | #endif |
428 | 523 | ||
429 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 524 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
@@ -440,10 +535,8 @@ arch_initcall(stamp_init); | |||
440 | 535 | ||
441 | void native_machine_restart(char *cmd) | 536 | void native_machine_restart(char *cmd) |
442 | { | 537 | { |
443 | #if defined(CONFIG_BFIN_SHARED_FLASH_ENET) | 538 | #define BIT_TO_SET (1 << CONFIG_ENET_FLASH_PIN) |
444 | # define BIT_TO_SET (1 << CONFIG_ENET_FLASH_PIN) | ||
445 | bfin_write_FIO_INEN(~BIT_TO_SET); | 539 | bfin_write_FIO_INEN(~BIT_TO_SET); |
446 | bfin_write_FIO_DIR(BIT_TO_SET); | 540 | bfin_write_FIO_DIR(BIT_TO_SET); |
447 | bfin_write_FIO_FLAG_C(BIT_TO_SET); | 541 | bfin_write_FIO_FLAG_C(BIT_TO_SET); |
448 | #endif | ||
449 | } | 542 | } |
diff --git a/arch/blackfin/mach-bf537/boards/Kconfig b/arch/blackfin/mach-bf537/boards/Kconfig index 96a15196e416..7e789dbef036 100644 --- a/arch/blackfin/mach-bf537/boards/Kconfig +++ b/arch/blackfin/mach-bf537/boards/Kconfig | |||
@@ -21,6 +21,12 @@ config PNAV10 | |||
21 | help | 21 | help |
22 | PNAV board support. | 22 | PNAV board support. |
23 | 23 | ||
24 | config CAMSIG_MINOTAUR | ||
25 | bool "Cambridge Signal Processing LTD Minotaur" | ||
26 | depends on (BF537) | ||
27 | help | ||
28 | Board supply package for CSP Minotaur | ||
29 | |||
24 | config GENERIC_BF537_BOARD | 30 | config GENERIC_BF537_BOARD |
25 | bool "Generic" | 31 | bool "Generic" |
26 | help | 32 | help |
diff --git a/arch/blackfin/mach-bf537/boards/Makefile b/arch/blackfin/mach-bf537/boards/Makefile index 94a85174283a..87e450f29e37 100644 --- a/arch/blackfin/mach-bf537/boards/Makefile +++ b/arch/blackfin/mach-bf537/boards/Makefile | |||
@@ -6,3 +6,4 @@ obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o | |||
6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o led.o | 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o led.o |
7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o | 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o |
8 | obj-$(CONFIG_PNAV10) += pnav10.o | 8 | obj-$(CONFIG_PNAV10) += pnav10.o |
9 | obj-$(CONFIG_CAMSIG_MINOTAUR) += minotaur.o | ||
diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537.c b/arch/blackfin/mach-bf537/boards/cm_bf537.c index c0fb06dbc42e..8703b67d5ec6 100644 --- a/arch/blackfin/mach-bf537/boards/cm_bf537.c +++ b/arch/blackfin/mach-bf537/boards/cm_bf537.c | |||
@@ -29,6 +29,7 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/device.h> | 31 | #include <linux/device.h> |
32 | #include <linux/etherdevice.h> | ||
32 | #include <linux/platform_device.h> | 33 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 34 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 35 | #include <linux/mtd/partitions.h> |
@@ -216,6 +217,12 @@ static struct platform_device rtc_device = { | |||
216 | }; | 217 | }; |
217 | #endif | 218 | #endif |
218 | 219 | ||
220 | #if defined(CONFIG_FB_HITACHI_TX09) || defined(CONFIG_FB_HITACHI_TX09_MODULE) | ||
221 | static struct platform_device hitachi_fb_device = { | ||
222 | .name = "hitachi-tx09", | ||
223 | }; | ||
224 | #endif | ||
225 | |||
219 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 226 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
220 | static struct resource smc91x_resources[] = { | 227 | static struct resource smc91x_resources[] = { |
221 | { | 228 | { |
@@ -374,6 +381,10 @@ static struct platform_device bfin_pata_device = { | |||
374 | #endif | 381 | #endif |
375 | 382 | ||
376 | static struct platform_device *cm_bf537_devices[] __initdata = { | 383 | static struct platform_device *cm_bf537_devices[] __initdata = { |
384 | #if defined(CONFIG_FB_HITACHI_TX09) || defined(CONFIG_FB_HITACHI_TX09_MODULE) | ||
385 | &hitachi_fb_device, | ||
386 | #endif | ||
387 | |||
377 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | 388 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) |
378 | &rtc_device, | 389 | &rtc_device, |
379 | #endif | 390 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/generic_board.c b/arch/blackfin/mach-bf537/boards/generic_board.c index 09f4bfbd2350..3e52f3f5bd58 100644 --- a/arch/blackfin/mach-bf537/boards/generic_board.c +++ b/arch/blackfin/mach-bf537/boards/generic_board.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * | 8 | * |
9 | * Modified: | 9 | * Modified: |
10 | * Copyright 2005 National ICT Australia (NICTA) | 10 | * Copyright 2005 National ICT Australia (NICTA) |
11 | * Copyright 2004-2007 Analog Devices Inc. | 11 | * Copyright 2004-2008 Analog Devices Inc. |
12 | * | 12 | * |
13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
14 | * | 14 | * |
@@ -29,6 +29,7 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/device.h> | 31 | #include <linux/device.h> |
32 | #include <linux/etherdevice.h> | ||
32 | #include <linux/platform_device.h> | 33 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 34 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 35 | #include <linux/mtd/partitions.h> |
@@ -204,12 +205,8 @@ static struct resource sl811_hcd_resources[] = { | |||
204 | void sl811_port_power(struct device *dev, int is_on) | 205 | void sl811_port_power(struct device *dev, int is_on) |
205 | { | 206 | { |
206 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); | 207 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); |
207 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS); | 208 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on); |
208 | 209 | ||
209 | if (is_on) | ||
210 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 1); | ||
211 | else | ||
212 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 0); | ||
213 | } | 210 | } |
214 | #endif | 211 | #endif |
215 | 212 | ||
@@ -733,9 +730,11 @@ void native_machine_restart(char *cmd) | |||
733 | bfin_gpio_reset_spi0_ssel1(); | 730 | bfin_gpio_reset_spi0_ssel1(); |
734 | } | 731 | } |
735 | 732 | ||
733 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
736 | void bfin_get_ether_addr(char *addr) | 734 | void bfin_get_ether_addr(char *addr) |
737 | { | 735 | { |
738 | random_ether_addr(addr); | 736 | random_ether_addr(addr); |
739 | printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__); | 737 | printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__); |
740 | } | 738 | } |
741 | EXPORT_SYMBOL(bfin_get_ether_addr); | 739 | EXPORT_SYMBOL(bfin_get_ether_addr); |
740 | #endif | ||
diff --git a/arch/blackfin/mach-bf537/boards/minotaur.c b/arch/blackfin/mach-bf537/boards/minotaur.c new file mode 100644 index 000000000000..b8bbba85af53 --- /dev/null +++ b/arch/blackfin/mach-bf537/boards/minotaur.c | |||
@@ -0,0 +1,317 @@ | |||
1 | /* | ||
2 | */ | ||
3 | |||
4 | #include <linux/device.h> | ||
5 | #include <linux/platform_device.h> | ||
6 | #include <linux/mtd/mtd.h> | ||
7 | #include <linux/mtd/partitions.h> | ||
8 | #include <linux/spi/spi.h> | ||
9 | #include <linux/spi/flash.h> | ||
10 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | ||
11 | #include <linux/usb_isp1362.h> | ||
12 | #endif | ||
13 | #include <linux/pata_platform.h> | ||
14 | #include <linux/irq.h> | ||
15 | #include <linux/interrupt.h> | ||
16 | #include <linux/usb_sl811.h> | ||
17 | #include <asm/dma.h> | ||
18 | #include <asm/bfin5xx_spi.h> | ||
19 | #include <asm/reboot.h> | ||
20 | #include <linux/spi/ad7877.h> | ||
21 | |||
22 | /* | ||
23 | * Name the Board for the /proc/cpuinfo | ||
24 | */ | ||
25 | char *bfin_board_name = "CamSig Minotaur BF537"; | ||
26 | |||
27 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | ||
28 | static struct resource bfin_pcmcia_cf_resources[] = { | ||
29 | { | ||
30 | .start = 0x20310000, /* IO PORT */ | ||
31 | .end = 0x20312000, | ||
32 | .flags = IORESOURCE_MEM, | ||
33 | }, { | ||
34 | .start = 0x20311000, /* Attribute Memory */ | ||
35 | .end = 0x20311FFF, | ||
36 | .flags = IORESOURCE_MEM, | ||
37 | }, { | ||
38 | .start = IRQ_PF4, | ||
39 | .end = IRQ_PF4, | ||
40 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, | ||
41 | }, { | ||
42 | .start = IRQ_PF6, /* Card Detect PF6 */ | ||
43 | .end = IRQ_PF6, | ||
44 | .flags = IORESOURCE_IRQ, | ||
45 | }, | ||
46 | }; | ||
47 | |||
48 | static struct platform_device bfin_pcmcia_cf_device = { | ||
49 | .name = "bfin_cf_pcmcia", | ||
50 | .id = -1, | ||
51 | .num_resources = ARRAY_SIZE(bfin_pcmcia_cf_resources), | ||
52 | .resource = bfin_pcmcia_cf_resources, | ||
53 | }; | ||
54 | #endif | ||
55 | |||
56 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
57 | static struct platform_device rtc_device = { | ||
58 | .name = "rtc-bfin", | ||
59 | .id = -1, | ||
60 | }; | ||
61 | #endif | ||
62 | |||
63 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
64 | static struct platform_device bfin_mac_device = { | ||
65 | .name = "bfin_mac", | ||
66 | }; | ||
67 | #endif | ||
68 | |||
69 | #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE) | ||
70 | static struct resource net2272_bfin_resources[] = { | ||
71 | { | ||
72 | .start = 0x20300000, | ||
73 | .end = 0x20300000 + 0x100, | ||
74 | .flags = IORESOURCE_MEM, | ||
75 | }, { | ||
76 | .start = IRQ_PF7, | ||
77 | .end = IRQ_PF7, | ||
78 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, | ||
79 | }, | ||
80 | }; | ||
81 | |||
82 | static struct platform_device net2272_bfin_device = { | ||
83 | .name = "net2272", | ||
84 | .id = -1, | ||
85 | .num_resources = ARRAY_SIZE(net2272_bfin_resources), | ||
86 | .resource = net2272_bfin_resources, | ||
87 | }; | ||
88 | #endif | ||
89 | |||
90 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
91 | /* all SPI peripherals info goes here */ | ||
92 | |||
93 | #if defined(CONFIG_MTD_M25P80) \ | ||
94 | || defined(CONFIG_MTD_M25P80_MODULE) | ||
95 | |||
96 | /* Partition sizes */ | ||
97 | #define FLASH_SIZE 0x00400000 | ||
98 | #define PSIZE_UBOOT 0x00030000 | ||
99 | #define PSIZE_INITRAMFS 0x00240000 | ||
100 | |||
101 | static struct mtd_partition bfin_spi_flash_partitions[] = { | ||
102 | { | ||
103 | .name = "uboot", | ||
104 | .size = PSIZE_UBOOT, | ||
105 | .offset = 0x000000, | ||
106 | .mask_flags = MTD_CAP_ROM | ||
107 | }, { | ||
108 | .name = "initramfs", | ||
109 | .size = PSIZE_INITRAMFS, | ||
110 | .offset = PSIZE_UBOOT | ||
111 | }, { | ||
112 | .name = "opt", | ||
113 | .size = FLASH_SIZE - (PSIZE_UBOOT + PSIZE_INITRAMFS), | ||
114 | .offset = PSIZE_UBOOT + PSIZE_INITRAMFS, | ||
115 | } | ||
116 | }; | ||
117 | |||
118 | static struct flash_platform_data bfin_spi_flash_data = { | ||
119 | .name = "m25p80", | ||
120 | .parts = bfin_spi_flash_partitions, | ||
121 | .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions), | ||
122 | .type = "m25p64", | ||
123 | }; | ||
124 | |||
125 | /* SPI flash chip (m25p64) */ | ||
126 | static struct bfin5xx_spi_chip spi_flash_chip_info = { | ||
127 | .enable_dma = 0, /* use dma transfer with this chip*/ | ||
128 | .bits_per_word = 8, | ||
129 | }; | ||
130 | #endif | ||
131 | |||
132 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | ||
133 | static struct bfin5xx_spi_chip spi_mmc_chip_info = { | ||
134 | .enable_dma = 1, | ||
135 | .bits_per_word = 8, | ||
136 | }; | ||
137 | #endif | ||
138 | |||
139 | static struct spi_board_info bfin_spi_board_info[] __initdata = { | ||
140 | #if defined(CONFIG_MTD_M25P80) \ | ||
141 | || defined(CONFIG_MTD_M25P80_MODULE) | ||
142 | { | ||
143 | /* the modalias must be the same as spi device driver name */ | ||
144 | .modalias = "m25p80", /* Name of spi_driver for this device */ | ||
145 | .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ | ||
146 | .bus_num = 0, /* Framework bus number */ | ||
147 | .chip_select = 1, /* Framework chip select. On STAMP537 it is SPISSEL1*/ | ||
148 | .platform_data = &bfin_spi_flash_data, | ||
149 | .controller_data = &spi_flash_chip_info, | ||
150 | .mode = SPI_MODE_3, | ||
151 | }, | ||
152 | #endif | ||
153 | |||
154 | #if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) | ||
155 | { | ||
156 | .modalias = "spi_mmc_dummy", | ||
157 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ | ||
158 | .bus_num = 0, | ||
159 | .chip_select = 0, | ||
160 | .platform_data = NULL, | ||
161 | .controller_data = &spi_mmc_chip_info, | ||
162 | .mode = SPI_MODE_3, | ||
163 | }, | ||
164 | { | ||
165 | .modalias = "spi_mmc", | ||
166 | .max_speed_hz = 5000000, /* max spi clock (SCK) speed in HZ */ | ||
167 | .bus_num = 0, | ||
168 | .chip_select = CONFIG_SPI_MMC_CS_CHAN, | ||
169 | .platform_data = NULL, | ||
170 | .controller_data = &spi_mmc_chip_info, | ||
171 | .mode = SPI_MODE_3, | ||
172 | }, | ||
173 | #endif | ||
174 | }; | ||
175 | |||
176 | /* SPI controller data */ | ||
177 | static struct bfin5xx_spi_master bfin_spi0_info = { | ||
178 | .num_chipselect = 8, | ||
179 | .enable_dma = 1, /* master has the ability to do dma transfer */ | ||
180 | }; | ||
181 | |||
182 | /* SPI (0) */ | ||
183 | static struct resource bfin_spi0_resource[] = { | ||
184 | [0] = { | ||
185 | .start = SPI0_REGBASE, | ||
186 | .end = SPI0_REGBASE + 0xFF, | ||
187 | .flags = IORESOURCE_MEM, | ||
188 | }, | ||
189 | [1] = { | ||
190 | .start = CH_SPI, | ||
191 | .end = CH_SPI, | ||
192 | .flags = IORESOURCE_IRQ, | ||
193 | }, | ||
194 | }; | ||
195 | |||
196 | static struct platform_device bfin_spi0_device = { | ||
197 | .name = "bfin-spi", | ||
198 | .id = 0, /* Bus number */ | ||
199 | .num_resources = ARRAY_SIZE(bfin_spi0_resource), | ||
200 | .resource = bfin_spi0_resource, | ||
201 | .dev = { | ||
202 | .platform_data = &bfin_spi0_info, /* Passed to driver */ | ||
203 | }, | ||
204 | }; | ||
205 | #endif /* spi master and devices */ | ||
206 | |||
207 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | ||
208 | static struct resource bfin_uart_resources[] = { | ||
209 | { | ||
210 | .start = 0xFFC00400, | ||
211 | .end = 0xFFC004FF, | ||
212 | .flags = IORESOURCE_MEM, | ||
213 | }, { | ||
214 | .start = 0xFFC02000, | ||
215 | .end = 0xFFC020FF, | ||
216 | .flags = IORESOURCE_MEM, | ||
217 | }, | ||
218 | }; | ||
219 | |||
220 | static struct platform_device bfin_uart_device = { | ||
221 | .name = "bfin-uart", | ||
222 | .id = 1, | ||
223 | .num_resources = ARRAY_SIZE(bfin_uart_resources), | ||
224 | .resource = bfin_uart_resources, | ||
225 | }; | ||
226 | #endif | ||
227 | |||
228 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) | ||
229 | static struct resource bfin_twi0_resource[] = { | ||
230 | [0] = { | ||
231 | .start = TWI0_REGBASE, | ||
232 | .end = TWI0_REGBASE + 0xFF, | ||
233 | .flags = IORESOURCE_MEM, | ||
234 | }, | ||
235 | [1] = { | ||
236 | .start = IRQ_TWI, | ||
237 | .end = IRQ_TWI, | ||
238 | .flags = IORESOURCE_IRQ, | ||
239 | }, | ||
240 | }; | ||
241 | |||
242 | static struct platform_device i2c_bfin_twi_device = { | ||
243 | .name = "i2c-bfin-twi", | ||
244 | .id = 0, | ||
245 | .num_resources = ARRAY_SIZE(bfin_twi0_resource), | ||
246 | .resource = bfin_twi0_resource, | ||
247 | }; | ||
248 | #endif | ||
249 | |||
250 | #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE) | ||
251 | static struct platform_device bfin_sport0_uart_device = { | ||
252 | .name = "bfin-sport-uart", | ||
253 | .id = 0, | ||
254 | }; | ||
255 | |||
256 | static struct platform_device bfin_sport1_uart_device = { | ||
257 | .name = "bfin-sport-uart", | ||
258 | .id = 1, | ||
259 | }; | ||
260 | #endif | ||
261 | |||
262 | static struct platform_device *minotaur_devices[] __initdata = { | ||
263 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | ||
264 | &bfin_pcmcia_cf_device, | ||
265 | #endif | ||
266 | |||
267 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | ||
268 | &rtc_device, | ||
269 | #endif | ||
270 | |||
271 | #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE) | ||
272 | &bfin_mac_device, | ||
273 | #endif | ||
274 | |||
275 | #if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE) | ||
276 | &net2272_bfin_device, | ||
277 | #endif | ||
278 | |||
279 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
280 | &bfin_spi0_device, | ||
281 | #endif | ||
282 | |||
283 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | ||
284 | &bfin_uart_device, | ||
285 | #endif | ||
286 | |||
287 | #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE) | ||
288 | &i2c_bfin_twi_device, | ||
289 | #endif | ||
290 | |||
291 | #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE) | ||
292 | &bfin_sport0_uart_device, | ||
293 | &bfin_sport1_uart_device, | ||
294 | #endif | ||
295 | |||
296 | }; | ||
297 | |||
298 | static int __init minotaur_init(void) | ||
299 | { | ||
300 | printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); | ||
301 | platform_add_devices(minotaur_devices, ARRAY_SIZE(minotaur_devices)); | ||
302 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | ||
303 | spi_register_board_info(bfin_spi_board_info, | ||
304 | ARRAY_SIZE(bfin_spi_board_info)); | ||
305 | #endif | ||
306 | |||
307 | return 0; | ||
308 | } | ||
309 | |||
310 | arch_initcall(minotaur_init); | ||
311 | |||
312 | void native_machine_restart(char *cmd) | ||
313 | { | ||
314 | /* workaround reboot hang when booting from SPI */ | ||
315 | if ((bfin_read_SYSCR() & 0x7) == 0x3) | ||
316 | bfin_gpio_reset_spi0_ssel1(); | ||
317 | } | ||
diff --git a/arch/blackfin/mach-bf537/boards/pnav10.c b/arch/blackfin/mach-bf537/boards/pnav10.c index fd5f4a6f08e4..509a8a236fd0 100644 --- a/arch/blackfin/mach-bf537/boards/pnav10.c +++ b/arch/blackfin/mach-bf537/boards/pnav10.c | |||
@@ -8,7 +8,7 @@ | |||
8 | * | 8 | * |
9 | * Modified: | 9 | * Modified: |
10 | * Copyright 2005 National ICT Australia (NICTA) | 10 | * Copyright 2005 National ICT Australia (NICTA) |
11 | * Copyright 2004-2006 Analog Devices Inc. | 11 | * Copyright 2004-2008 Analog Devices Inc. |
12 | * | 12 | * |
13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 13 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
14 | * | 14 | * |
@@ -29,6 +29,7 @@ | |||
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/device.h> | 31 | #include <linux/device.h> |
32 | #include <linux/etherdevice.h> | ||
32 | #include <linux/platform_device.h> | 33 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 34 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 35 | #include <linux/mtd/partitions.h> |
@@ -133,12 +134,8 @@ static struct resource sl811_hcd_resources[] = { | |||
133 | void sl811_port_power(struct device *dev, int is_on) | 134 | void sl811_port_power(struct device *dev, int is_on) |
134 | { | 135 | { |
135 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); | 136 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); |
136 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS); | 137 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on); |
137 | 138 | ||
138 | if (is_on) | ||
139 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 1); | ||
140 | else | ||
141 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 0); | ||
142 | } | 139 | } |
143 | #endif | 140 | #endif |
144 | 141 | ||
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c index 07b0dc273d2f..772541548b76 100644 --- a/arch/blackfin/mach-bf537/boards/stamp.c +++ b/arch/blackfin/mach-bf537/boards/stamp.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/platform_device.h> | 32 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 33 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 34 | #include <linux/mtd/partitions.h> |
35 | #include <linux/mtd/physmap.h> | ||
35 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
36 | #include <linux/spi/flash.h> | 37 | #include <linux/spi/flash.h> |
37 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) | 38 | #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE) |
@@ -103,6 +104,30 @@ void __exit bfin_isp1761_exit(void) | |||
103 | arch_initcall(bfin_isp1761_init); | 104 | arch_initcall(bfin_isp1761_init); |
104 | #endif | 105 | #endif |
105 | 106 | ||
107 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
108 | #include <linux/input.h> | ||
109 | #include <linux/gpio_keys.h> | ||
110 | |||
111 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
112 | {BTN_0, GPIO_PF2, 1, "gpio-keys: BTN0"}, | ||
113 | {BTN_1, GPIO_PF3, 1, "gpio-keys: BTN1"}, | ||
114 | {BTN_2, GPIO_PF4, 1, "gpio-keys: BTN2"}, | ||
115 | {BTN_3, GPIO_PF5, 1, "gpio-keys: BTN3"}, | ||
116 | }; | ||
117 | |||
118 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
119 | .buttons = bfin_gpio_keys_table, | ||
120 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
121 | }; | ||
122 | |||
123 | static struct platform_device bfin_device_gpiokeys = { | ||
124 | .name = "gpio-keys", | ||
125 | .dev = { | ||
126 | .platform_data = &bfin_gpio_keys_data, | ||
127 | }, | ||
128 | }; | ||
129 | #endif | ||
130 | |||
106 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) | 131 | #if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) |
107 | static struct resource bfin_pcmcia_cf_resources[] = { | 132 | static struct resource bfin_pcmcia_cf_resources[] = { |
108 | { | 133 | { |
@@ -226,12 +251,7 @@ static struct resource sl811_hcd_resources[] = { | |||
226 | void sl811_port_power(struct device *dev, int is_on) | 251 | void sl811_port_power(struct device *dev, int is_on) |
227 | { | 252 | { |
228 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); | 253 | gpio_request(CONFIG_USB_SL811_BFIN_GPIO_VBUS, "usb:SL811_VBUS"); |
229 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS); | 254 | gpio_direction_output(CONFIG_USB_SL811_BFIN_GPIO_VBUS, is_on); |
230 | |||
231 | if (is_on) | ||
232 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 1); | ||
233 | else | ||
234 | gpio_set_value(CONFIG_USB_SL811_BFIN_GPIO_VBUS, 0); | ||
235 | } | 255 | } |
236 | #endif | 256 | #endif |
237 | 257 | ||
@@ -320,6 +340,49 @@ static struct platform_device net2272_bfin_device = { | |||
320 | }; | 340 | }; |
321 | #endif | 341 | #endif |
322 | 342 | ||
343 | static struct mtd_partition stamp_partitions[] = { | ||
344 | { | ||
345 | .name = "Bootloader", | ||
346 | .size = 0x20000, | ||
347 | .offset = 0, | ||
348 | }, { | ||
349 | .name = "Kernel", | ||
350 | .size = 0xE0000, | ||
351 | .offset = MTDPART_OFS_APPEND, | ||
352 | }, { | ||
353 | .name = "RootFS", | ||
354 | .size = 0x400000 - 0x20000 - 0xE0000 - 0x10000, | ||
355 | .offset = MTDPART_OFS_APPEND, | ||
356 | }, { | ||
357 | .name = "MAC Address", | ||
358 | .size = MTDPART_SIZ_FULL, | ||
359 | .offset = 0x3F0000, | ||
360 | .mask_flags = MTD_WRITEABLE, | ||
361 | } | ||
362 | }; | ||
363 | |||
364 | static struct physmap_flash_data stamp_flash_data = { | ||
365 | .width = 2, | ||
366 | .parts = stamp_partitions, | ||
367 | .nr_parts = ARRAY_SIZE(stamp_partitions), | ||
368 | }; | ||
369 | |||
370 | static struct resource stamp_flash_resource = { | ||
371 | .start = 0x20000000, | ||
372 | .end = 0x203fffff, | ||
373 | .flags = IORESOURCE_MEM, | ||
374 | }; | ||
375 | |||
376 | static struct platform_device stamp_flash_device = { | ||
377 | .name = "physmap-flash", | ||
378 | .id = 0, | ||
379 | .dev = { | ||
380 | .platform_data = &stamp_flash_data, | ||
381 | }, | ||
382 | .num_resources = 1, | ||
383 | .resource = &stamp_flash_resource, | ||
384 | }; | ||
385 | |||
323 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 386 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
324 | /* all SPI peripherals info goes here */ | 387 | /* all SPI peripherals info goes here */ |
325 | 388 | ||
@@ -738,6 +801,11 @@ static struct platform_device *stamp_devices[] __initdata = { | |||
738 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | 801 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) |
739 | &bfin_pata_device, | 802 | &bfin_pata_device, |
740 | #endif | 803 | #endif |
804 | |||
805 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
806 | &bfin_device_gpiokeys, | ||
807 | #endif | ||
808 | &stamp_flash_device, | ||
741 | }; | 809 | }; |
742 | 810 | ||
743 | static int __init stamp_init(void) | 811 | static int __init stamp_init(void) |
diff --git a/arch/blackfin/mach-bf548/Kconfig b/arch/blackfin/mach-bf548/Kconfig index d8bd3b49f150..1bfcd8f646ab 100644 --- a/arch/blackfin/mach-bf548/Kconfig +++ b/arch/blackfin/mach-bf548/Kconfig | |||
@@ -7,7 +7,7 @@ menu "BF548 Specific Configuration" | |||
7 | config DEB_DMA_URGENT | 7 | config DEB_DMA_URGENT |
8 | bool "DMA has priority over core for ext. accesses" | 8 | bool "DMA has priority over core for ext. accesses" |
9 | depends on BF54x | 9 | depends on BF54x |
10 | default n | 10 | default y |
11 | help | 11 | help |
12 | Treat any DEB1, DEB2 and DEB3 request as Urgent | 12 | Treat any DEB1, DEB2 and DEB3 request as Urgent |
13 | 13 | ||
diff --git a/arch/blackfin/mach-bf548/boards/ezkit.c b/arch/blackfin/mach-bf548/boards/ezkit.c index d37d6653c4bc..14860f04d1bd 100644 --- a/arch/blackfin/mach-bf548/boards/ezkit.c +++ b/arch/blackfin/mach-bf548/boards/ezkit.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/platform_device.h> | 32 | #include <linux/platform_device.h> |
33 | #include <linux/mtd/mtd.h> | 33 | #include <linux/mtd/mtd.h> |
34 | #include <linux/mtd/partitions.h> | 34 | #include <linux/mtd/partitions.h> |
35 | #include <linux/mtd/physmap.h> | ||
35 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
36 | #include <linux/spi/flash.h> | 37 | #include <linux/spi/flash.h> |
37 | #include <linux/irq.h> | 38 | #include <linux/irq.h> |
@@ -206,23 +207,6 @@ static struct platform_device smsc911x_device = { | |||
206 | }; | 207 | }; |
207 | #endif | 208 | #endif |
208 | 209 | ||
209 | #if defined(CONFIG_USB_BF54x_HCD) || defined(CONFIG_USB_BF54x_HCD_MODULE) | ||
210 | static struct resource bf54x_hcd_resources[] = { | ||
211 | { | ||
212 | .start = 0xFFC03C00, | ||
213 | .end = 0xFFC040FF, | ||
214 | .flags = IORESOURCE_MEM, | ||
215 | }, | ||
216 | }; | ||
217 | |||
218 | static struct platform_device bf54x_hcd = { | ||
219 | .name = "bf54x-hcd", | ||
220 | .id = 0, | ||
221 | .num_resources = ARRAY_SIZE(bf54x_hcd_resources), | ||
222 | .resource = bf54x_hcd_resources, | ||
223 | }; | ||
224 | #endif | ||
225 | |||
226 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) | 210 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) |
227 | static struct resource musb_resources[] = { | 211 | static struct resource musb_resources[] = { |
228 | [0] = { | 212 | [0] = { |
@@ -243,14 +227,14 @@ static struct resource musb_resources[] = { | |||
243 | }; | 227 | }; |
244 | 228 | ||
245 | static struct musb_hdrc_platform_data musb_plat = { | 229 | static struct musb_hdrc_platform_data musb_plat = { |
246 | #ifdef CONFIG_USB_MUSB_OTG | 230 | #if defined(CONFIG_USB_MUSB_OTG) |
247 | .mode = MUSB_OTG, | 231 | .mode = MUSB_OTG, |
248 | #elif CONFIG_USB_MUSB_HDRC_HCD | 232 | #elif defined(CONFIG_USB_MUSB_HDRC_HCD) |
249 | .mode = MUSB_HOST, | 233 | .mode = MUSB_HOST, |
250 | #elif CONFIG_USB_GADGET_MUSB_HDRC | 234 | #elif defined(CONFIG_USB_GADGET_MUSB_HDRC) |
251 | .mode = MUSB_PERIPHERAL, | 235 | .mode = MUSB_PERIPHERAL, |
252 | #endif | 236 | #endif |
253 | .multipoint = 1, | 237 | .multipoint = 0, |
254 | }; | 238 | }; |
255 | 239 | ||
256 | static u64 musb_dmamask = ~(u32)0; | 240 | static u64 musb_dmamask = ~(u32)0; |
@@ -344,6 +328,44 @@ static struct platform_device bf54x_sdh_device = { | |||
344 | }; | 328 | }; |
345 | #endif | 329 | #endif |
346 | 330 | ||
331 | static struct mtd_partition ezkit_partitions[] = { | ||
332 | { | ||
333 | .name = "Bootloader", | ||
334 | .size = 0x20000, | ||
335 | .offset = 0, | ||
336 | }, { | ||
337 | .name = "Kernel", | ||
338 | .size = 0xE0000, | ||
339 | .offset = MTDPART_OFS_APPEND, | ||
340 | }, { | ||
341 | .name = "RootFS", | ||
342 | .size = MTDPART_SIZ_FULL, | ||
343 | .offset = MTDPART_OFS_APPEND, | ||
344 | } | ||
345 | }; | ||
346 | |||
347 | static struct physmap_flash_data ezkit_flash_data = { | ||
348 | .width = 2, | ||
349 | .parts = ezkit_partitions, | ||
350 | .nr_parts = ARRAY_SIZE(ezkit_partitions), | ||
351 | }; | ||
352 | |||
353 | static struct resource ezkit_flash_resource = { | ||
354 | .start = 0x20000000, | ||
355 | .end = 0x20ffffff, | ||
356 | .flags = IORESOURCE_MEM, | ||
357 | }; | ||
358 | |||
359 | static struct platform_device ezkit_flash_device = { | ||
360 | .name = "physmap-flash", | ||
361 | .id = 0, | ||
362 | .dev = { | ||
363 | .platform_data = &ezkit_flash_data, | ||
364 | }, | ||
365 | .num_resources = 1, | ||
366 | .resource = &ezkit_flash_resource, | ||
367 | }; | ||
368 | |||
347 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 369 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
348 | /* all SPI peripherals info goes here */ | 370 | /* all SPI peripherals info goes here */ |
349 | #if defined(CONFIG_MTD_M25P80) \ | 371 | #if defined(CONFIG_MTD_M25P80) \ |
@@ -531,6 +553,29 @@ static struct platform_device i2c_bfin_twi1_device = { | |||
531 | #endif | 553 | #endif |
532 | #endif | 554 | #endif |
533 | 555 | ||
556 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
557 | #include <linux/gpio_keys.h> | ||
558 | |||
559 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
560 | {BTN_0, GPIO_PB8, 1, "gpio-keys: BTN0"}, | ||
561 | {BTN_1, GPIO_PB9, 1, "gpio-keys: BTN1"}, | ||
562 | {BTN_2, GPIO_PB10, 1, "gpio-keys: BTN2"}, | ||
563 | {BTN_3, GPIO_PB11, 1, "gpio-keys: BTN3"}, | ||
564 | }; | ||
565 | |||
566 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
567 | .buttons = bfin_gpio_keys_table, | ||
568 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
569 | }; | ||
570 | |||
571 | static struct platform_device bfin_device_gpiokeys = { | ||
572 | .name = "gpio-keys", | ||
573 | .dev = { | ||
574 | .platform_data = &bfin_gpio_keys_data, | ||
575 | }, | ||
576 | }; | ||
577 | #endif | ||
578 | |||
534 | static struct platform_device *ezkit_devices[] __initdata = { | 579 | static struct platform_device *ezkit_devices[] __initdata = { |
535 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) | 580 | #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE) |
536 | &rtc_device, | 581 | &rtc_device, |
@@ -548,10 +593,6 @@ static struct platform_device *ezkit_devices[] __initdata = { | |||
548 | &smsc911x_device, | 593 | &smsc911x_device, |
549 | #endif | 594 | #endif |
550 | 595 | ||
551 | #if defined(CONFIG_USB_BF54x_HCD) || defined(CONFIG_USB_BF54x_HCD_MODULE) | ||
552 | &bf54x_hcd, | ||
553 | #endif | ||
554 | |||
555 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) | 596 | #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE) |
556 | &musb_device, | 597 | &musb_device, |
557 | #endif | 598 | #endif |
@@ -583,6 +624,11 @@ static struct platform_device *ezkit_devices[] __initdata = { | |||
583 | &i2c_bfin_twi1_device, | 624 | &i2c_bfin_twi1_device, |
584 | #endif | 625 | #endif |
585 | #endif | 626 | #endif |
627 | |||
628 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
629 | &bfin_device_gpiokeys, | ||
630 | #endif | ||
631 | &ezkit_flash_device, | ||
586 | }; | 632 | }; |
587 | 633 | ||
588 | static int __init stamp_init(void) | 634 | static int __init stamp_init(void) |
diff --git a/arch/blackfin/mach-bf548/head.S b/arch/blackfin/mach-bf548/head.S index 74b34c7f3629..74fe258421a5 100644 --- a/arch/blackfin/mach-bf548/head.S +++ b/arch/blackfin/mach-bf548/head.S | |||
@@ -298,8 +298,8 @@ ENTRY(_start_dma_code) | |||
298 | w[p0] = r0.l; | 298 | w[p0] = r0.l; |
299 | ssync; | 299 | ssync; |
300 | 300 | ||
301 | p0.h = hi(SIC_IWR); | 301 | p0.h = hi(SIC_IWR0); |
302 | p0.l = lo(SIC_IWR); | 302 | p0.l = lo(SIC_IWR0); |
303 | r0.l = 0x1; | 303 | r0.l = 0x1; |
304 | r0.h = 0x0; | 304 | r0.h = 0x0; |
305 | [p0] = r0; | 305 | [p0] = r0; |
@@ -324,12 +324,25 @@ ENTRY(_start_dma_code) | |||
324 | w[p0] = r0.l; | 324 | w[p0] = r0.l; |
325 | ssync; | 325 | ssync; |
326 | 326 | ||
327 | #if defined(CONFIG_BF54x) | ||
328 | P2.H = hi(EBIU_RSTCTL); | ||
329 | P2.L = lo(EBIU_RSTCTL); | ||
330 | R0 = [P2]; | ||
331 | BITSET (R0, 3); | ||
332 | #else | ||
327 | P2.H = hi(EBIU_SDGCTL); | 333 | P2.H = hi(EBIU_SDGCTL); |
328 | P2.L = lo(EBIU_SDGCTL); | 334 | P2.L = lo(EBIU_SDGCTL); |
329 | R0 = [P2]; | 335 | R0 = [P2]; |
330 | BITSET (R0, 24); | 336 | BITSET (R0, 24); |
337 | #endif | ||
331 | [P2] = R0; | 338 | [P2] = R0; |
332 | SSYNC; | 339 | SSYNC; |
340 | #if defined(CONFIG_BF54x) | ||
341 | .LSRR_MODE: | ||
342 | R0 = [P2]; | ||
343 | CC = BITTST(R0, 4); | ||
344 | if !CC JUMP .LSRR_MODE; | ||
345 | #endif | ||
333 | 346 | ||
334 | r0 = CONFIG_VCO_MULT & 63; /* Load the VCO multiplier */ | 347 | r0 = CONFIG_VCO_MULT & 63; /* Load the VCO multiplier */ |
335 | r0 = r0 << 9; /* Shift it over, */ | 348 | r0 = r0 << 9; /* Shift it over, */ |
@@ -361,6 +374,39 @@ ENTRY(_start_dma_code) | |||
361 | w[p0] = r0.l; | 374 | w[p0] = r0.l; |
362 | ssync; | 375 | ssync; |
363 | 376 | ||
377 | #if defined(CONFIG_BF54x) | ||
378 | P2.H = hi(EBIU_RSTCTL); | ||
379 | P2.L = lo(EBIU_RSTCTL); | ||
380 | R0 = [P2]; | ||
381 | CC = BITTST(R0, 0); | ||
382 | if CC jump .Lskipddrrst; | ||
383 | BITSET (R0, 0); | ||
384 | .Lskipddrrst: | ||
385 | BITCLR (R0, 3); | ||
386 | [P2] = R0; | ||
387 | SSYNC; | ||
388 | |||
389 | p0.l = lo(EBIU_DDRCTL0); | ||
390 | p0.h = hi(EBIU_DDRCTL0); | ||
391 | r0.l = lo(mem_DDRCTL0); | ||
392 | r0.h = hi(mem_DDRCTL0); | ||
393 | [p0] = r0; | ||
394 | ssync; | ||
395 | |||
396 | p0.l = lo(EBIU_DDRCTL1); | ||
397 | p0.h = hi(EBIU_DDRCTL1); | ||
398 | r0.l = lo(mem_DDRCTL1); | ||
399 | r0.h = hi(mem_DDRCTL1); | ||
400 | [p0] = r0; | ||
401 | ssync; | ||
402 | |||
403 | p0.l = lo(EBIU_DDRCTL2); | ||
404 | p0.h = hi(EBIU_DDRCTL2); | ||
405 | r0.l = lo(mem_DDRCTL2); | ||
406 | r0.h = hi(mem_DDRCTL2); | ||
407 | [p0] = r0; | ||
408 | ssync; | ||
409 | #else | ||
364 | p0.l = lo(EBIU_SDRRC); | 410 | p0.l = lo(EBIU_SDRRC); |
365 | p0.h = hi(EBIU_SDRRC); | 411 | p0.h = hi(EBIU_SDRRC); |
366 | r0 = mem_SDRRC; | 412 | r0 = mem_SDRRC; |
@@ -394,9 +440,10 @@ ENTRY(_start_dma_code) | |||
394 | R1 = R1 | R0; | 440 | R1 = R1 | R0; |
395 | [P2] = R1; | 441 | [P2] = R1; |
396 | SSYNC; | 442 | SSYNC; |
443 | #endif | ||
397 | 444 | ||
398 | p0.h = hi(SIC_IWR); | 445 | p0.h = hi(SIC_IWR0); |
399 | p0.l = lo(SIC_IWR); | 446 | p0.l = lo(SIC_IWR0); |
400 | r0.l = lo(IWR_ENABLE_ALL); | 447 | r0.l = lo(IWR_ENABLE_ALL); |
401 | r0.h = hi(IWR_ENABLE_ALL); | 448 | r0.h = hi(IWR_ENABLE_ALL); |
402 | [p0] = r0; | 449 | [p0] = r0; |
diff --git a/arch/blackfin/mach-bf548/ints-priority.c b/arch/blackfin/mach-bf548/ints-priority.c index cb0ebac53c79..2665653cee37 100644 --- a/arch/blackfin/mach-bf548/ints-priority.c +++ b/arch/blackfin/mach-bf548/ints-priority.c | |||
@@ -4,7 +4,7 @@ | |||
4 | * Author: Michael Hennerich | 4 | * Author: Michael Hennerich |
5 | * | 5 | * |
6 | * Created: | 6 | * Created: |
7 | * Description: Set up the interupt priorities | 7 | * Description: Set up the interrupt priorities |
8 | * | 8 | * |
9 | * Modified: | 9 | * Modified: |
10 | * Copyright 2004-2006 Analog Devices Inc. | 10 | * Copyright 2004-2006 Analog Devices Inc. |
@@ -58,7 +58,7 @@ void program_IAR(void) | |||
58 | ((CONFIG_IRQ_PINT1 - 7) << IRQ_PINT1_POS) | | 58 | ((CONFIG_IRQ_PINT1 - 7) << IRQ_PINT1_POS) | |
59 | ((CONFIG_IRQ_MDMAS0 - 7) << IRQ_MDMAS0_POS) | | 59 | ((CONFIG_IRQ_MDMAS0 - 7) << IRQ_MDMAS0_POS) | |
60 | ((CONFIG_IRQ_MDMAS1 - 7) << IRQ_MDMAS1_POS) | | 60 | ((CONFIG_IRQ_MDMAS1 - 7) << IRQ_MDMAS1_POS) | |
61 | ((CONFIG_IRQ_WATCHDOG - 7) << IRQ_WATCHDOG_POS)); | 61 | ((CONFIG_IRQ_WATCHDOG - 7) << IRQ_WATCH_POS)); |
62 | 62 | ||
63 | bfin_write_SIC_IAR3(((CONFIG_IRQ_DMAC1_ERR - 7) << IRQ_DMAC1_ERR_POS) | | 63 | bfin_write_SIC_IAR3(((CONFIG_IRQ_DMAC1_ERR - 7) << IRQ_DMAC1_ERR_POS) | |
64 | ((CONFIG_IRQ_SPORT2_ERR - 7) << IRQ_SPORT2_ERR_POS) | | 64 | ((CONFIG_IRQ_SPORT2_ERR - 7) << IRQ_SPORT2_ERR_POS) | |
diff --git a/arch/blackfin/mach-bf561/boards/cm_bf561.c b/arch/blackfin/mach-bf561/boards/cm_bf561.c index c19cd29b948a..3a79a9061bdc 100644 --- a/arch/blackfin/mach-bf561/boards/cm_bf561.c +++ b/arch/blackfin/mach-bf561/boards/cm_bf561.c | |||
@@ -198,6 +198,13 @@ static struct platform_device bfin_spi0_device = { | |||
198 | #endif /* spi master and devices */ | 198 | #endif /* spi master and devices */ |
199 | 199 | ||
200 | 200 | ||
201 | #if defined(CONFIG_FB_HITACHI_TX09) || defined(CONFIG_FB_HITACHI_TX09_MODULE) | ||
202 | static struct platform_device hitachi_fb_device = { | ||
203 | .name = "hitachi-tx09", | ||
204 | }; | ||
205 | #endif | ||
206 | |||
207 | |||
201 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 208 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
202 | 209 | ||
203 | static struct resource smc91x_resources[] = { | 210 | static struct resource smc91x_resources[] = { |
@@ -315,6 +322,10 @@ static struct platform_device bfin_pata_device = { | |||
315 | 322 | ||
316 | static struct platform_device *cm_bf561_devices[] __initdata = { | 323 | static struct platform_device *cm_bf561_devices[] __initdata = { |
317 | 324 | ||
325 | #if defined(CONFIG_FB_HITACHI_TX09) || defined(CONFIG_FB_HITACHI_TX09_MODULE) | ||
326 | &hitachi_fb_device, | ||
327 | #endif | ||
328 | |||
318 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | 329 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) |
319 | &bfin_uart_device, | 330 | &bfin_uart_device, |
320 | #endif | 331 | #endif |
diff --git a/arch/blackfin/mach-bf561/boards/ezkit.c b/arch/blackfin/mach-bf561/boards/ezkit.c index 4ff8f6e7a11f..7601c3be1b5c 100644 --- a/arch/blackfin/mach-bf561/boards/ezkit.c +++ b/arch/blackfin/mach-bf561/boards/ezkit.c | |||
@@ -29,6 +29,9 @@ | |||
29 | 29 | ||
30 | #include <linux/device.h> | 30 | #include <linux/device.h> |
31 | #include <linux/platform_device.h> | 31 | #include <linux/platform_device.h> |
32 | #include <linux/mtd/mtd.h> | ||
33 | #include <linux/mtd/partitions.h> | ||
34 | #include <linux/mtd/physmap.h> | ||
32 | #include <linux/spi/spi.h> | 35 | #include <linux/spi/spi.h> |
33 | #include <linux/irq.h> | 36 | #include <linux/irq.h> |
34 | #include <linux/interrupt.h> | 37 | #include <linux/interrupt.h> |
@@ -155,6 +158,44 @@ static struct platform_device bfin_uart_device = { | |||
155 | }; | 158 | }; |
156 | #endif | 159 | #endif |
157 | 160 | ||
161 | static struct mtd_partition ezkit_partitions[] = { | ||
162 | { | ||
163 | .name = "Bootloader", | ||
164 | .size = 0x20000, | ||
165 | .offset = 0, | ||
166 | }, { | ||
167 | .name = "Kernel", | ||
168 | .size = 0xE0000, | ||
169 | .offset = MTDPART_OFS_APPEND, | ||
170 | }, { | ||
171 | .name = "RootFS", | ||
172 | .size = MTDPART_SIZ_FULL, | ||
173 | .offset = MTDPART_OFS_APPEND, | ||
174 | } | ||
175 | }; | ||
176 | |||
177 | static struct physmap_flash_data ezkit_flash_data = { | ||
178 | .width = 2, | ||
179 | .parts = ezkit_partitions, | ||
180 | .nr_parts = ARRAY_SIZE(ezkit_partitions), | ||
181 | }; | ||
182 | |||
183 | static struct resource ezkit_flash_resource = { | ||
184 | .start = 0x20000000, | ||
185 | .end = 0x207fffff, | ||
186 | .flags = IORESOURCE_MEM, | ||
187 | }; | ||
188 | |||
189 | static struct platform_device ezkit_flash_device = { | ||
190 | .name = "physmap-flash", | ||
191 | .id = 0, | ||
192 | .dev = { | ||
193 | .platform_data = &ezkit_flash_data, | ||
194 | }, | ||
195 | .num_resources = 1, | ||
196 | .resource = &ezkit_flash_resource, | ||
197 | }; | ||
198 | |||
158 | #ifdef CONFIG_SPI_BFIN | 199 | #ifdef CONFIG_SPI_BFIN |
159 | #if defined(CONFIG_SND_BLACKFIN_AD1836) \ | 200 | #if defined(CONFIG_SND_BLACKFIN_AD1836) \ |
160 | || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) | 201 | || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) |
@@ -246,6 +287,50 @@ static struct platform_device bfin_pata_device = { | |||
246 | }; | 287 | }; |
247 | #endif | 288 | #endif |
248 | 289 | ||
290 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
291 | #include <linux/input.h> | ||
292 | #include <linux/gpio_keys.h> | ||
293 | |||
294 | static struct gpio_keys_button bfin_gpio_keys_table[] = { | ||
295 | {BTN_0, GPIO_PF5, 1, "gpio-keys: BTN0"}, | ||
296 | {BTN_1, GPIO_PF6, 1, "gpio-keys: BTN1"}, | ||
297 | {BTN_2, GPIO_PF7, 1, "gpio-keys: BTN2"}, | ||
298 | {BTN_3, GPIO_PF8, 1, "gpio-keys: BTN3"}, | ||
299 | }; | ||
300 | |||
301 | static struct gpio_keys_platform_data bfin_gpio_keys_data = { | ||
302 | .buttons = bfin_gpio_keys_table, | ||
303 | .nbuttons = ARRAY_SIZE(bfin_gpio_keys_table), | ||
304 | }; | ||
305 | |||
306 | static struct platform_device bfin_device_gpiokeys = { | ||
307 | .name = "gpio-keys", | ||
308 | .dev = { | ||
309 | .platform_data = &bfin_gpio_keys_data, | ||
310 | }, | ||
311 | }; | ||
312 | #endif | ||
313 | |||
314 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
315 | #include <linux/i2c-gpio.h> | ||
316 | |||
317 | static struct i2c_gpio_platform_data i2c_gpio_data = { | ||
318 | .sda_pin = 1, | ||
319 | .scl_pin = 0, | ||
320 | .sda_is_open_drain = 0, | ||
321 | .scl_is_open_drain = 0, | ||
322 | .udelay = 40, | ||
323 | }; | ||
324 | |||
325 | static struct platform_device i2c_gpio_device = { | ||
326 | .name = "i2c-gpio", | ||
327 | .id = 0, | ||
328 | .dev = { | ||
329 | .platform_data = &i2c_gpio_data, | ||
330 | }, | ||
331 | }; | ||
332 | #endif | ||
333 | |||
249 | static struct platform_device *ezkit_devices[] __initdata = { | 334 | static struct platform_device *ezkit_devices[] __initdata = { |
250 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) | 335 | #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) |
251 | &smc91x_device, | 336 | &smc91x_device, |
@@ -258,12 +343,23 @@ static struct platform_device *ezkit_devices[] __initdata = { | |||
258 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 343 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
259 | &bfin_spi0_device, | 344 | &bfin_spi0_device, |
260 | #endif | 345 | #endif |
346 | |||
261 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) | 347 | #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE) |
262 | &bfin_uart_device, | 348 | &bfin_uart_device, |
263 | #endif | 349 | #endif |
350 | |||
264 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) | 351 | #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) |
265 | &bfin_pata_device, | 352 | &bfin_pata_device, |
266 | #endif | 353 | #endif |
354 | |||
355 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
356 | &bfin_device_gpiokeys, | ||
357 | #endif | ||
358 | |||
359 | #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE) | ||
360 | &i2c_gpio_device, | ||
361 | #endif | ||
362 | &ezkit_flash_device, | ||
267 | }; | 363 | }; |
268 | 364 | ||
269 | static int __init ezkit_init(void) | 365 | static int __init ezkit_init(void) |
diff --git a/arch/blackfin/mach-bf561/coreb.c b/arch/blackfin/mach-bf561/coreb.c index 5d1d21b4c2a7..1b44e9e6dc3b 100644 --- a/arch/blackfin/mach-bf561/coreb.c +++ b/arch/blackfin/mach-bf561/coreb.c | |||
@@ -33,7 +33,9 @@ | |||
33 | #include <linux/ioport.h> | 33 | #include <linux/ioport.h> |
34 | #include <linux/module.h> | 34 | #include <linux/module.h> |
35 | #include <linux/uaccess.h> | 35 | #include <linux/uaccess.h> |
36 | #include <linux/fs.h> | ||
36 | #include <asm/dma.h> | 37 | #include <asm/dma.h> |
38 | #include <asm/cacheflush.h> | ||
37 | 39 | ||
38 | #define MODULE_VER "v0.1" | 40 | #define MODULE_VER "v0.1" |
39 | 41 | ||
@@ -90,11 +92,12 @@ static ssize_t coreb_write(struct file *file, const char *buf, size_t count, | |||
90 | 92 | ||
91 | coreb_dma_done = 0; | 93 | coreb_dma_done = 0; |
92 | 94 | ||
95 | flush_dcache_range((unsigned long)buf, (unsigned long)(buf+len)); | ||
93 | /* Source Channel */ | 96 | /* Source Channel */ |
94 | set_dma_start_addr(CH_MEM_STREAM2_SRC, (unsigned long)buf); | 97 | set_dma_start_addr(CH_MEM_STREAM2_SRC, (unsigned long)buf); |
95 | set_dma_x_count(CH_MEM_STREAM2_SRC, len); | 98 | set_dma_x_count(CH_MEM_STREAM2_SRC, len); |
96 | set_dma_x_modify(CH_MEM_STREAM2_SRC, sizeof(char)); | 99 | set_dma_x_modify(CH_MEM_STREAM2_SRC, sizeof(char)); |
97 | set_dma_config(CH_MEM_STREAM2_SRC, RESTART); | 100 | set_dma_config(CH_MEM_STREAM2_SRC, 0); |
98 | /* Destination Channel */ | 101 | /* Destination Channel */ |
99 | set_dma_start_addr(CH_MEM_STREAM2_DEST, coreb_base + p); | 102 | set_dma_start_addr(CH_MEM_STREAM2_DEST, coreb_base + p); |
100 | set_dma_x_count(CH_MEM_STREAM2_DEST, len); | 103 | set_dma_x_count(CH_MEM_STREAM2_DEST, len); |
@@ -135,11 +138,12 @@ static ssize_t coreb_read(struct file *file, char *buf, size_t count, | |||
135 | 138 | ||
136 | coreb_dma_done = 0; | 139 | coreb_dma_done = 0; |
137 | 140 | ||
141 | invalidate_dcache_range((unsigned long)buf, (unsigned long)(buf+len)); | ||
138 | /* Source Channel */ | 142 | /* Source Channel */ |
139 | set_dma_start_addr(CH_MEM_STREAM2_SRC, coreb_base + p); | 143 | set_dma_start_addr(CH_MEM_STREAM2_SRC, coreb_base + p); |
140 | set_dma_x_count(CH_MEM_STREAM2_SRC, len); | 144 | set_dma_x_count(CH_MEM_STREAM2_SRC, len); |
141 | set_dma_x_modify(CH_MEM_STREAM2_SRC, sizeof(char)); | 145 | set_dma_x_modify(CH_MEM_STREAM2_SRC, sizeof(char)); |
142 | set_dma_config(CH_MEM_STREAM2_SRC, RESTART); | 146 | set_dma_config(CH_MEM_STREAM2_SRC, 0); |
143 | /* Destination Channel */ | 147 | /* Destination Channel */ |
144 | set_dma_start_addr(CH_MEM_STREAM2_DEST, (unsigned long)buf); | 148 | set_dma_start_addr(CH_MEM_STREAM2_DEST, (unsigned long)buf); |
145 | set_dma_x_count(CH_MEM_STREAM2_DEST, len); | 149 | set_dma_x_count(CH_MEM_STREAM2_DEST, len); |
@@ -266,7 +270,7 @@ static int coreb_ioctl(struct inode *inode, struct file *file, | |||
266 | coreb_status |= COREB_IS_RUNNING; | 270 | coreb_status |= COREB_IS_RUNNING; |
267 | bfin_write_SICA_SYSCR(bfin_read_SICA_SYSCR() & ~0x0020); | 271 | bfin_write_SICA_SYSCR(bfin_read_SICA_SYSCR() & ~0x0020); |
268 | SSYNC(); | 272 | SSYNC(); |
269 | spin_lock_irq(&coreb_lock); | 273 | spin_unlock_irq(&coreb_lock); |
270 | break; | 274 | break; |
271 | #if defined(CONFIG_BF561_COREB_RESET) | 275 | #if defined(CONFIG_BF561_COREB_RESET) |
272 | case CMD_COREB_STOP: | 276 | case CMD_COREB_STOP: |
@@ -275,7 +279,7 @@ static int coreb_ioctl(struct inode *inode, struct file *file, | |||
275 | bfin_write_SICA_SYSCR(bfin_read_SICA_SYSCR() | 0x0020); | 279 | bfin_write_SICA_SYSCR(bfin_read_SICA_SYSCR() | 0x0020); |
276 | bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | 0x0080); | 280 | bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | 0x0080); |
277 | coreb_status &= ~COREB_IS_RUNNING; | 281 | coreb_status &= ~COREB_IS_RUNNING; |
278 | spin_lock_irq(&coreb_lock); | 282 | spin_unlock_irq(&coreb_lock); |
279 | break; | 283 | break; |
280 | case CMD_COREB_RESET: | 284 | case CMD_COREB_RESET: |
281 | printk(KERN_INFO "Resetting Core B\n"); | 285 | printk(KERN_INFO "Resetting Core B\n"); |
diff --git a/arch/blackfin/mach-common/Makefile b/arch/blackfin/mach-common/Makefile index 4d7733dfd5de..8636d4284bdb 100644 --- a/arch/blackfin/mach-common/Makefile +++ b/arch/blackfin/mach-common/Makefile | |||
@@ -3,10 +3,9 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y := \ | 5 | obj-y := \ |
6 | cache.o cacheinit.o cplbhdlr.o cplbmgr.o entry.o \ | 6 | cache.o cacheinit.o entry.o \ |
7 | interrupt.o lock.o irqpanic.o arch_checks.o | 7 | interrupt.o lock.o irqpanic.o arch_checks.o |
8 | 8 | ||
9 | obj-$(CONFIG_CPLB_INFO) += cplbinfo.o | ||
10 | obj-$(CONFIG_BFIN_SINGLE_CORE) += ints-priority-sc.o | 9 | obj-$(CONFIG_BFIN_SINGLE_CORE) += ints-priority-sc.o |
11 | obj-$(CONFIG_BFIN_DUAL_CORE) += ints-priority-dc.o | 10 | obj-$(CONFIG_BFIN_DUAL_CORE) += ints-priority-dc.o |
12 | obj-$(CONFIG_PM) += pm.o dpmc.o | 11 | obj-$(CONFIG_PM) += pm.o dpmc.o |
diff --git a/arch/blackfin/mach-common/dpmc.S b/arch/blackfin/mach-common/dpmc.S index 39fbc2861107..b82c096e1980 100644 --- a/arch/blackfin/mach-common/dpmc.S +++ b/arch/blackfin/mach-common/dpmc.S | |||
@@ -38,6 +38,9 @@ ENTRY(_unmask_wdog_wakeup_evt) | |||
38 | #if defined(CONFIG_BF561) | 38 | #if defined(CONFIG_BF561) |
39 | P0.H = hi(SICA_IWR1); | 39 | P0.H = hi(SICA_IWR1); |
40 | P0.L = lo(SICA_IWR1); | 40 | P0.L = lo(SICA_IWR1); |
41 | #elif defined(CONFIG_BF54x) || defined(CONFIG_BF52x) | ||
42 | P0.h = HI(SIC_IWR0); | ||
43 | P0.l = LO(SIC_IWR0); | ||
41 | #else | 44 | #else |
42 | P0.h = HI(SIC_IWR); | 45 | P0.h = HI(SIC_IWR); |
43 | P0.l = LO(SIC_IWR); | 46 | P0.l = LO(SIC_IWR); |
@@ -172,7 +175,7 @@ ENTRY(_sleep_mode) | |||
172 | call _set_sic_iwr; | 175 | call _set_sic_iwr; |
173 | 176 | ||
174 | R0 = 0xFFFF (Z); | 177 | R0 = 0xFFFF (Z); |
175 | call _set_rtc_istat | 178 | call _set_rtc_istat; |
176 | 179 | ||
177 | P0.H = hi(PLL_CTL); | 180 | P0.H = hi(PLL_CTL); |
178 | P0.L = lo(PLL_CTL); | 181 | P0.L = lo(PLL_CTL); |
@@ -210,7 +213,7 @@ ENTRY(_hibernate_mode) | |||
210 | call _set_sic_iwr; | 213 | call _set_sic_iwr; |
211 | 214 | ||
212 | R0 = 0xFFFF (Z); | 215 | R0 = 0xFFFF (Z); |
213 | call _set_rtc_istat | 216 | call _set_rtc_istat; |
214 | 217 | ||
215 | P0.H = hi(VR_CTL); | 218 | P0.H = hi(VR_CTL); |
216 | P0.L = lo(VR_CTL); | 219 | P0.L = lo(VR_CTL); |
@@ -236,7 +239,7 @@ ENTRY(_deep_sleep) | |||
236 | 239 | ||
237 | call _set_sic_iwr; | 240 | call _set_sic_iwr; |
238 | 241 | ||
239 | call _set_sdram_srfs; | 242 | call _set_dram_srfs; |
240 | 243 | ||
241 | /* Clear all the interrupts,bits sticky */ | 244 | /* Clear all the interrupts,bits sticky */ |
242 | R0 = 0xFFFF (Z); | 245 | R0 = 0xFFFF (Z); |
@@ -253,7 +256,7 @@ ENTRY(_deep_sleep) | |||
253 | SSYNC; | 256 | SSYNC; |
254 | IDLE; | 257 | IDLE; |
255 | 258 | ||
256 | call _unset_sdram_srfs; | 259 | call _unset_dram_srfs; |
257 | 260 | ||
258 | call _test_pll_locked; | 261 | call _test_pll_locked; |
259 | 262 | ||
@@ -285,23 +288,22 @@ ENTRY(_sleep_deeper) | |||
285 | P3 = R0; | 288 | P3 = R0; |
286 | R0 = IWR_ENABLE(0); | 289 | R0 = IWR_ENABLE(0); |
287 | call _set_sic_iwr; | 290 | call _set_sic_iwr; |
288 | call _set_sdram_srfs; | 291 | call _set_dram_srfs; /* Set SDRAM Self Refresh */ |
289 | 292 | ||
290 | /* Clear all the interrupts,bits sticky */ | 293 | /* Clear all the interrupts,bits sticky */ |
291 | R0 = 0xFFFF (Z); | 294 | R0 = 0xFFFF (Z); |
292 | call _set_rtc_istat | 295 | call _set_rtc_istat; |
293 | |||
294 | P0.H = hi(PLL_DIV); | 296 | P0.H = hi(PLL_DIV); |
295 | P0.L = lo(PLL_DIV); | 297 | P0.L = lo(PLL_DIV); |
296 | R6 = W[P0](z); | 298 | R6 = W[P0](z); |
297 | R0.L = 0xF; | 299 | R0.L = 0xF; |
298 | W[P0] = R0.l; | 300 | W[P0] = R0.l; /* Set Max VCO to SCLK divider */ |
299 | 301 | ||
300 | P0.H = hi(PLL_CTL); | 302 | P0.H = hi(PLL_CTL); |
301 | P0.L = lo(PLL_CTL); | 303 | P0.L = lo(PLL_CTL); |
302 | R5 = W[P0](z); | 304 | R5 = W[P0](z); |
303 | R0.L = (CONFIG_MIN_VCO_HZ/CONFIG_CLKIN_HZ) << 9; | 305 | R0.L = (CONFIG_MIN_VCO_HZ/CONFIG_CLKIN_HZ) << 9; |
304 | W[P0] = R0.l; | 306 | W[P0] = R0.l; /* Set Min CLKIN to VCO multiplier */ |
305 | 307 | ||
306 | SSYNC; | 308 | SSYNC; |
307 | IDLE; | 309 | IDLE; |
@@ -317,29 +319,28 @@ ENTRY(_sleep_deeper) | |||
317 | R1 = R1|R2; | 319 | R1 = R1|R2; |
318 | 320 | ||
319 | R2 = DEPOSIT(R7, R1); | 321 | R2 = DEPOSIT(R7, R1); |
320 | W[P0] = R2; | 322 | W[P0] = R2; /* Set Min Core Voltage */ |
321 | 323 | ||
322 | SSYNC; | 324 | SSYNC; |
323 | IDLE; | 325 | IDLE; |
324 | 326 | ||
325 | call _test_pll_locked; | 327 | call _test_pll_locked; |
326 | 328 | ||
329 | R0 = P3; | ||
330 | call _set_sic_iwr; /* Set Awake from IDLE */ | ||
331 | |||
327 | P0.H = hi(PLL_CTL); | 332 | P0.H = hi(PLL_CTL); |
328 | P0.L = lo(PLL_CTL); | 333 | P0.L = lo(PLL_CTL); |
329 | R0 = W[P0](z); | 334 | R0 = W[P0](z); |
330 | BITSET (R0, 3); | 335 | BITSET (R0, 3); |
331 | W[P0] = R0.L; | 336 | W[P0] = R0.L; /* Turn CCLK OFF */ |
332 | |||
333 | R0 = P3; | ||
334 | call _set_sic_iwr; | ||
335 | |||
336 | SSYNC; | 337 | SSYNC; |
337 | IDLE; | 338 | IDLE; |
338 | 339 | ||
339 | call _test_pll_locked; | 340 | call _test_pll_locked; |
340 | 341 | ||
341 | R0 = IWR_ENABLE(0); | 342 | R0 = IWR_ENABLE(0); |
342 | call _set_sic_iwr; | 343 | call _set_sic_iwr; /* Set Awake from IDLE PLL */ |
343 | 344 | ||
344 | P0.H = hi(VR_CTL); | 345 | P0.H = hi(VR_CTL); |
345 | P0.L = lo(VR_CTL); | 346 | P0.L = lo(VR_CTL); |
@@ -352,15 +353,15 @@ ENTRY(_sleep_deeper) | |||
352 | 353 | ||
353 | P0.H = hi(PLL_DIV); | 354 | P0.H = hi(PLL_DIV); |
354 | P0.L = lo(PLL_DIV); | 355 | P0.L = lo(PLL_DIV); |
355 | W[P0]= R6; | 356 | W[P0]= R6; /* Restore CCLK and SCLK divider */ |
356 | 357 | ||
357 | P0.H = hi(PLL_CTL); | 358 | P0.H = hi(PLL_CTL); |
358 | P0.L = lo(PLL_CTL); | 359 | P0.L = lo(PLL_CTL); |
359 | w[p0] = R5; | 360 | w[p0] = R5; /* Restore VCO multiplier */ |
360 | IDLE; | 361 | IDLE; |
361 | call _test_pll_locked; | 362 | call _test_pll_locked; |
362 | 363 | ||
363 | call _unset_sdram_srfs; | 364 | call _unset_dram_srfs; /* SDRAM Self Refresh Off */ |
364 | 365 | ||
365 | STI R4; | 366 | STI R4; |
366 | 367 | ||
@@ -368,25 +369,47 @@ ENTRY(_sleep_deeper) | |||
368 | ( R7:0, P5:0 ) = [SP++]; | 369 | ( R7:0, P5:0 ) = [SP++]; |
369 | RTS; | 370 | RTS; |
370 | 371 | ||
371 | ENTRY(_set_sdram_srfs) | 372 | ENTRY(_set_dram_srfs) |
372 | /* set the sdram to self refresh mode */ | 373 | /* set the dram to self refresh mode */ |
374 | #if defined(CONFIG_BF54x) | ||
375 | P0.H = hi(EBIU_RSTCTL); | ||
376 | P0.L = lo(EBIU_RSTCTL); | ||
377 | R2 = [P0]; | ||
378 | R3.H = hi(SRREQ); | ||
379 | R3.L = lo(SRREQ); | ||
380 | #else | ||
373 | P0.H = hi(EBIU_SDGCTL); | 381 | P0.H = hi(EBIU_SDGCTL); |
374 | P0.L = lo(EBIU_SDGCTL); | 382 | P0.L = lo(EBIU_SDGCTL); |
375 | R2 = [P0]; | 383 | R2 = [P0]; |
376 | R3.H = hi(SRFS); | 384 | R3.H = hi(SRFS); |
377 | R3.L = lo(SRFS); | 385 | R3.L = lo(SRFS); |
386 | #endif | ||
378 | R2 = R2|R3; | 387 | R2 = R2|R3; |
379 | [P0] = R2; | 388 | [P0] = R2; |
380 | ssync; | 389 | ssync; |
390 | #if defined(CONFIG_BF54x) | ||
391 | .LSRR_MODE: | ||
392 | R2 = [P0]; | ||
393 | CC = BITTST(R2, 4); | ||
394 | if !CC JUMP .LSRR_MODE; | ||
395 | #endif | ||
381 | RTS; | 396 | RTS; |
382 | 397 | ||
383 | ENTRY(_unset_sdram_srfs) | 398 | ENTRY(_unset_dram_srfs) |
384 | /* set the sdram out of self refresh mode */ | 399 | /* set the dram out of self refresh mode */ |
400 | #if defined(CONFIG_BF54x) | ||
401 | P0.H = hi(EBIU_RSTCTL); | ||
402 | P0.L = lo(EBIU_RSTCTL); | ||
403 | R2 = [P0]; | ||
404 | R3.H = hi(SRREQ); | ||
405 | R3.L = lo(SRREQ); | ||
406 | #else | ||
385 | P0.H = hi(EBIU_SDGCTL); | 407 | P0.H = hi(EBIU_SDGCTL); |
386 | P0.L = lo(EBIU_SDGCTL); | 408 | P0.L = lo(EBIU_SDGCTL); |
387 | R2 = [P0]; | 409 | R2 = [P0]; |
388 | R3.H = hi(SRFS); | 410 | R3.H = hi(SRFS); |
389 | R3.L = lo(SRFS); | 411 | R3.L = lo(SRFS); |
412 | #endif | ||
390 | R3 = ~R3; | 413 | R3 = ~R3; |
391 | R2 = R2&R3; | 414 | R2 = R2&R3; |
392 | [P0] = R2; | 415 | [P0] = R2; |
@@ -394,8 +417,13 @@ ENTRY(_unset_sdram_srfs) | |||
394 | RTS; | 417 | RTS; |
395 | 418 | ||
396 | ENTRY(_set_sic_iwr) | 419 | ENTRY(_set_sic_iwr) |
420 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) | ||
421 | P0.H = hi(SIC_IWR0); | ||
422 | P0.L = lo(SIC_IWR0); | ||
423 | #else | ||
397 | P0.H = hi(SIC_IWR); | 424 | P0.H = hi(SIC_IWR); |
398 | P0.L = lo(SIC_IWR); | 425 | P0.L = lo(SIC_IWR); |
426 | #endif | ||
399 | [P0] = R0; | 427 | [P0] = R0; |
400 | SSYNC; | 428 | SSYNC; |
401 | RTS; | 429 | RTS; |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index dc9d3ee2e691..56ff51bc8c21 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -95,6 +95,9 @@ ENTRY(_ex_workaround_261) | |||
95 | R6 = 0x26; /* Data CPLB Miss */ | 95 | R6 = 0x26; /* Data CPLB Miss */ |
96 | cc = R6 == R7; | 96 | cc = R6 == R7; |
97 | if cc jump _ex_dcplb_miss (BP); | 97 | if cc jump _ex_dcplb_miss (BP); |
98 | R6 = 0x23; /* Data CPLB Miss */ | ||
99 | cc = R6 == R7; | ||
100 | if cc jump _ex_dcplb_viol (BP); | ||
98 | /* Handle 0x23 Data CPLB Protection Violation | 101 | /* Handle 0x23 Data CPLB Protection Violation |
99 | * and Data CPLB Multiple Hits - Linux Trap Zero | 102 | * and Data CPLB Multiple Hits - Linux Trap Zero |
100 | */ | 103 | */ |
@@ -102,17 +105,33 @@ ENTRY(_ex_workaround_261) | |||
102 | ENDPROC(_ex_workaround_261) | 105 | ENDPROC(_ex_workaround_261) |
103 | 106 | ||
104 | #else | 107 | #else |
108 | #ifdef CONFIG_MPU | ||
109 | #define _ex_dviol _ex_dcplb_viol | ||
110 | #else | ||
105 | #define _ex_dviol _ex_trap_c | 111 | #define _ex_dviol _ex_trap_c |
112 | #endif | ||
106 | #define _ex_dmiss _ex_dcplb_miss | 113 | #define _ex_dmiss _ex_dcplb_miss |
107 | #define _ex_dmult _ex_trap_c | 114 | #define _ex_dmult _ex_trap_c |
108 | #endif | 115 | #endif |
109 | 116 | ||
117 | |||
118 | ENTRY(_ex_dcplb_viol) | ||
110 | ENTRY(_ex_dcplb_miss) | 119 | ENTRY(_ex_dcplb_miss) |
111 | ENTRY(_ex_icplb_miss) | 120 | ENTRY(_ex_icplb_miss) |
112 | (R7:6,P5:4) = [sp++]; | 121 | (R7:6,P5:4) = [sp++]; |
113 | ASTAT = [sp++]; | 122 | ASTAT = [sp++]; |
114 | SAVE_ALL_SYS | 123 | SAVE_ALL_SYS |
124 | #ifdef CONFIG_MPU | ||
125 | R0 = SEQSTAT; | ||
126 | R1 = SP; | ||
127 | sp += -12; | ||
128 | call _cplb_hdr; | ||
129 | sp += 12; | ||
130 | CC = R0 == 0; | ||
131 | IF !CC JUMP _handle_bad_cplb; | ||
132 | #else | ||
115 | call __cplb_hdr; | 133 | call __cplb_hdr; |
134 | #endif | ||
116 | DEBUG_START_HWTRACE(p5, r7) | 135 | DEBUG_START_HWTRACE(p5, r7) |
117 | RESTORE_ALL_SYS | 136 | RESTORE_ALL_SYS |
118 | SP = EX_SCRATCH_REG; | 137 | SP = EX_SCRATCH_REG; |
@@ -329,7 +348,7 @@ ENTRY(_exception_to_level5) | |||
329 | R7 = R7 + R6; | 348 | R7 = R7 + R6; |
330 | P5 = R7; | 349 | P5 = R7; |
331 | R1 = [P5]; | 350 | R1 = [P5]; |
332 | [SP + 8] = r1; | 351 | [SP + PT_SEQSTAT] = r1; |
333 | 352 | ||
334 | r0 = sp; /* stack frame pt_regs pointer argument ==> r0 */ | 353 | r0 = sp; /* stack frame pt_regs pointer argument ==> r0 */ |
335 | SP += -12; | 354 | SP += -12; |
@@ -633,9 +652,7 @@ ENTRY(_ret_from_exception) | |||
633 | [sp + PT_IPEND] = r0; | 652 | [sp + PT_IPEND] = r0; |
634 | 653 | ||
635 | 1: | 654 | 1: |
636 | r1 = 0x37(Z); | 655 | r2 = LO(~0x37) (Z); |
637 | r2 = ~r1; | ||
638 | r2.h = 0; | ||
639 | r0 = r2 & r0; | 656 | r0 = r2 & r0; |
640 | cc = r0 == 0; | 657 | cc = r0 == 0; |
641 | if !cc jump 4f; /* if not return to user mode, get out */ | 658 | if !cc jump 4f; /* if not return to user mode, get out */ |
@@ -1364,6 +1381,7 @@ ENTRY(_sys_call_table) | |||
1364 | .long _sys_set_robust_list | 1381 | .long _sys_set_robust_list |
1365 | .long _sys_get_robust_list /* 355 */ | 1382 | .long _sys_get_robust_list /* 355 */ |
1366 | .long _sys_fallocate | 1383 | .long _sys_fallocate |
1384 | .long _sys_semtimedop | ||
1367 | .rept NR_syscalls-(.-_sys_call_table)/4 | 1385 | .rept NR_syscalls-(.-_sys_call_table)/4 |
1368 | .long _sys_ni_syscall | 1386 | .long _sys_ni_syscall |
1369 | .endr | 1387 | .endr |
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index 4de376418a18..7f752c87fe46 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
@@ -34,9 +34,13 @@ | |||
34 | #include <asm/entry.h> | 34 | #include <asm/entry.h> |
35 | #include <asm/asm-offsets.h> | 35 | #include <asm/asm-offsets.h> |
36 | #include <asm/trace.h> | 36 | #include <asm/trace.h> |
37 | #include <asm/traps.h> | ||
38 | #include <asm/thread_info.h> | ||
37 | 39 | ||
38 | #include <asm/mach-common/context.S> | 40 | #include <asm/mach-common/context.S> |
39 | 41 | ||
42 | .extern _ret_from_exception | ||
43 | |||
40 | #ifdef CONFIG_I_ENTRY_L1 | 44 | #ifdef CONFIG_I_ENTRY_L1 |
41 | .section .l1.text | 45 | .section .l1.text |
42 | #else | 46 | #else |
@@ -117,8 +121,8 @@ __common_int_entry: | |||
117 | 121 | ||
118 | #if ANOMALY_05000283 || ANOMALY_05000315 | 122 | #if ANOMALY_05000283 || ANOMALY_05000315 |
119 | cc = r7 == r7; | 123 | cc = r7 == r7; |
120 | p5.h = 0xffc0; | 124 | p5.h = HI(CHIPID); |
121 | p5.l = 0x0014; | 125 | p5.l = LO(CHIPID); |
122 | if cc jump 1f; | 126 | if cc jump 1f; |
123 | r7.l = W[p5]; | 127 | r7.l = W[p5]; |
124 | 1: | 128 | 1: |
@@ -134,26 +138,22 @@ __common_int_entry: | |||
134 | 138 | ||
135 | /* interrupt routine for ivhw - 5 */ | 139 | /* interrupt routine for ivhw - 5 */ |
136 | ENTRY(_evt_ivhw) | 140 | ENTRY(_evt_ivhw) |
137 | SAVE_CONTEXT | 141 | SAVE_ALL_SYS |
138 | #ifdef CONFIG_FRAME_POINTER | 142 | #ifdef CONFIG_FRAME_POINTER |
139 | fp = 0; | 143 | fp = 0; |
140 | #endif | 144 | #endif |
145 | |||
141 | #if ANOMALY_05000283 | 146 | #if ANOMALY_05000283 |
142 | cc = r7 == r7; | 147 | cc = r7 == r7; |
143 | p5.h = 0xffc0; | 148 | p5.h = HI(CHIPID); |
144 | p5.l = 0x0014; | 149 | p5.l = LO(CHIPID); |
145 | if cc jump 1f; | 150 | if cc jump 1f; |
146 | r7.l = W[p5]; | 151 | r7.l = W[p5]; |
147 | 1: | 152 | 1: |
148 | #endif | 153 | #endif |
149 | 154 | ||
150 | trace_buffer_stop(p0, r0); | ||
151 | |||
152 | r0 = IRQ_HWERR; | ||
153 | r1 = sp; | ||
154 | |||
155 | #ifdef CONFIG_HARDWARE_PM | 155 | #ifdef CONFIG_HARDWARE_PM |
156 | r7 = SEQSTAT; | 156 | r7 = [sp + PT_SEQSTAT]; |
157 | r7 = r7 >>> 0xe; | 157 | r7 = r7 >>> 0xe; |
158 | r6 = 0x1F; | 158 | r6 = 0x1F; |
159 | r7 = r7 & r6; | 159 | r7 = r7 & r6; |
@@ -161,11 +161,29 @@ ENTRY(_evt_ivhw) | |||
161 | cc = r7 == r5; | 161 | cc = r7 == r5; |
162 | if cc jump .Lcall_do_ovf; /* deal with performance counter overflow */ | 162 | if cc jump .Lcall_do_ovf; /* deal with performance counter overflow */ |
163 | #endif | 163 | #endif |
164 | 164 | # We are going to dump something out, so make sure we print IPEND properly | |
165 | p2.l = lo(IPEND); | ||
166 | p2.h = hi(IPEND); | ||
167 | r0 = [p2]; | ||
168 | [sp + PT_IPEND] = r0; | ||
169 | |||
170 | /* set the EXCAUSE to HWERR for trap_c */ | ||
171 | r0 = [sp + PT_SEQSTAT]; | ||
172 | R1.L = LO(VEC_HWERR); | ||
173 | R1.H = HI(VEC_HWERR); | ||
174 | R0 = R0 | R1; | ||
175 | [sp + PT_SEQSTAT] = R0; | ||
176 | |||
177 | r0 = sp; /* stack frame pt_regs pointer argument ==> r0 */ | ||
165 | SP += -12; | 178 | SP += -12; |
166 | call _irq_panic; | 179 | call _trap_c; |
167 | SP += 12; | 180 | SP += 12; |
181 | |||
182 | call _ret_from_exception; | ||
183 | .Lcommon_restore_all_sys: | ||
184 | RESTORE_ALL_SYS | ||
168 | rti; | 185 | rti; |
186 | |||
169 | #ifdef CONFIG_HARDWARE_PM | 187 | #ifdef CONFIG_HARDWARE_PM |
170 | .Lcall_do_ovf: | 188 | .Lcall_do_ovf: |
171 | 189 | ||
@@ -173,9 +191,11 @@ ENTRY(_evt_ivhw) | |||
173 | call _pm_overflow; | 191 | call _pm_overflow; |
174 | SP += 12; | 192 | SP += 12; |
175 | 193 | ||
176 | jump .Lcommon_restore_context; | 194 | jump .Lcommon_restore_all_sys; |
177 | #endif | 195 | #endif |
178 | 196 | ||
197 | ENDPROC(_evt_ivhw) | ||
198 | |||
179 | /* Interrupt routine for evt2 (NMI). | 199 | /* Interrupt routine for evt2 (NMI). |
180 | * We don't actually use this, so just return. | 200 | * We don't actually use this, so just return. |
181 | * For inner circle type details, please see: | 201 | * For inner circle type details, please see: |
diff --git a/arch/blackfin/mach-common/ints-priority-dc.c b/arch/blackfin/mach-common/ints-priority-dc.c index 4882f0e801a9..8d18d6b163bb 100644 --- a/arch/blackfin/mach-common/ints-priority-dc.c +++ b/arch/blackfin/mach-common/ints-priority-dc.c | |||
@@ -222,11 +222,12 @@ static void bf561_gpio_unmask_irq(unsigned int irq) | |||
222 | static unsigned int bf561_gpio_irq_startup(unsigned int irq) | 222 | static unsigned int bf561_gpio_irq_startup(unsigned int irq) |
223 | { | 223 | { |
224 | unsigned int ret; | 224 | unsigned int ret; |
225 | char buf[8]; | ||
225 | u16 gpionr = irq - IRQ_PF0; | 226 | u16 gpionr = irq - IRQ_PF0; |
226 | 227 | ||
227 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 228 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
228 | 229 | snprintf(buf, sizeof buf, "IRQ %d", irq); | |
229 | ret = gpio_request(gpionr, "IRQ"); | 230 | ret = gpio_request(gpionr, buf); |
230 | if (ret) | 231 | if (ret) |
231 | return ret; | 232 | return ret; |
232 | 233 | ||
@@ -250,6 +251,7 @@ static int bf561_gpio_irq_type(unsigned int irq, unsigned int type) | |||
250 | { | 251 | { |
251 | 252 | ||
252 | unsigned int ret; | 253 | unsigned int ret; |
254 | char buf[8]; | ||
253 | u16 gpionr = irq - IRQ_PF0; | 255 | u16 gpionr = irq - IRQ_PF0; |
254 | 256 | ||
255 | 257 | ||
@@ -265,8 +267,8 @@ static int bf561_gpio_irq_type(unsigned int irq, unsigned int type) | |||
265 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { | 267 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { |
266 | 268 | ||
267 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 269 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
268 | 270 | snprintf(buf, sizeof buf, "IRQ %d", irq); | |
269 | ret = gpio_request(gpionr, "IRQ"); | 271 | ret = gpio_request(gpionr, buf); |
270 | if (ret) | 272 | if (ret) |
271 | return ret; | 273 | return ret; |
272 | 274 | ||
diff --git a/arch/blackfin/mach-common/ints-priority-sc.c b/arch/blackfin/mach-common/ints-priority-sc.c index 147f0731087a..dec42acb5de0 100644 --- a/arch/blackfin/mach-common/ints-priority-sc.c +++ b/arch/blackfin/mach-common/ints-priority-sc.c | |||
@@ -313,6 +313,7 @@ static void bfin_demux_error_irq(unsigned int int_err_irq, | |||
313 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; | 313 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; |
314 | static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)]; | 314 | static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)]; |
315 | 315 | ||
316 | |||
316 | static void bfin_gpio_ack_irq(unsigned int irq) | 317 | static void bfin_gpio_ack_irq(unsigned int irq) |
317 | { | 318 | { |
318 | u16 gpionr = irq - IRQ_PF0; | 319 | u16 gpionr = irq - IRQ_PF0; |
@@ -352,9 +353,11 @@ static unsigned int bfin_gpio_irq_startup(unsigned int irq) | |||
352 | { | 353 | { |
353 | unsigned int ret; | 354 | unsigned int ret; |
354 | u16 gpionr = irq - IRQ_PF0; | 355 | u16 gpionr = irq - IRQ_PF0; |
356 | char buf[8]; | ||
355 | 357 | ||
356 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 358 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
357 | ret = gpio_request(gpionr, "IRQ"); | 359 | snprintf(buf, sizeof buf, "IRQ %d", irq); |
360 | ret = gpio_request(gpionr, buf); | ||
358 | if (ret) | 361 | if (ret) |
359 | return ret; | 362 | return ret; |
360 | } | 363 | } |
@@ -376,6 +379,7 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
376 | { | 379 | { |
377 | 380 | ||
378 | unsigned int ret; | 381 | unsigned int ret; |
382 | char buf[8]; | ||
379 | u16 gpionr = irq - IRQ_PF0; | 383 | u16 gpionr = irq - IRQ_PF0; |
380 | 384 | ||
381 | if (type == IRQ_TYPE_PROBE) { | 385 | if (type == IRQ_TYPE_PROBE) { |
@@ -388,7 +392,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
388 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING | | 392 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING | |
389 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { | 393 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { |
390 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 394 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
391 | ret = gpio_request(gpionr, "IRQ"); | 395 | snprintf(buf, sizeof buf, "IRQ %d", irq); |
396 | ret = gpio_request(gpionr, buf); | ||
392 | if (ret) | 397 | if (ret) |
393 | return ret; | 398 | return ret; |
394 | } | 399 | } |
@@ -478,6 +483,10 @@ static void bfin_demux_gpio_irq(unsigned int intb_irq, | |||
478 | static unsigned char irq2pint_lut[NR_PINTS]; | 483 | static unsigned char irq2pint_lut[NR_PINTS]; |
479 | static unsigned char pint2irq_lut[NR_PINT_SYS_IRQS * NR_PINT_BITS]; | 484 | static unsigned char pint2irq_lut[NR_PINT_SYS_IRQS * NR_PINT_BITS]; |
480 | 485 | ||
486 | static unsigned int gpio_both_edge_triggered[NR_PINT_SYS_IRQS]; | ||
487 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; | ||
488 | |||
489 | |||
481 | struct pin_int_t { | 490 | struct pin_int_t { |
482 | unsigned int mask_set; | 491 | unsigned int mask_set; |
483 | unsigned int mask_clear; | 492 | unsigned int mask_clear; |
@@ -544,13 +553,20 @@ void init_pint_lut(void) | |||
544 | 553 | ||
545 | } | 554 | } |
546 | 555 | ||
547 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; | ||
548 | |||
549 | static void bfin_gpio_ack_irq(unsigned int irq) | 556 | static void bfin_gpio_ack_irq(unsigned int irq) |
550 | { | 557 | { |
551 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; | 558 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; |
559 | u32 pintbit = PINT_BIT(pint_val); | ||
560 | u8 bank = PINT_2_BANK(pint_val); | ||
561 | |||
562 | if (unlikely(gpio_both_edge_triggered[bank] & pintbit)) { | ||
563 | if (pint[bank]->invert_set & pintbit) | ||
564 | pint[bank]->invert_clear = pintbit; | ||
565 | else | ||
566 | pint[bank]->invert_set = pintbit; | ||
567 | } | ||
568 | pint[bank]->request = pintbit; | ||
552 | 569 | ||
553 | pint[PINT_2_BANK(pint_val)]->request = PINT_BIT(pint_val); | ||
554 | SSYNC(); | 570 | SSYNC(); |
555 | } | 571 | } |
556 | 572 | ||
@@ -560,6 +576,13 @@ static void bfin_gpio_mask_ack_irq(unsigned int irq) | |||
560 | u32 pintbit = PINT_BIT(pint_val); | 576 | u32 pintbit = PINT_BIT(pint_val); |
561 | u8 bank = PINT_2_BANK(pint_val); | 577 | u8 bank = PINT_2_BANK(pint_val); |
562 | 578 | ||
579 | if (unlikely(gpio_both_edge_triggered[bank] & pintbit)) { | ||
580 | if (pint[bank]->invert_set & pintbit) | ||
581 | pint[bank]->invert_clear = pintbit; | ||
582 | else | ||
583 | pint[bank]->invert_set = pintbit; | ||
584 | } | ||
585 | |||
563 | pint[bank]->request = pintbit; | 586 | pint[bank]->request = pintbit; |
564 | pint[bank]->mask_clear = pintbit; | 587 | pint[bank]->mask_clear = pintbit; |
565 | SSYNC(); | 588 | SSYNC(); |
@@ -587,7 +610,8 @@ static void bfin_gpio_unmask_irq(unsigned int irq) | |||
587 | static unsigned int bfin_gpio_irq_startup(unsigned int irq) | 610 | static unsigned int bfin_gpio_irq_startup(unsigned int irq) |
588 | { | 611 | { |
589 | unsigned int ret; | 612 | unsigned int ret; |
590 | u16 gpionr = irq - IRQ_PA0; | 613 | char buf[8]; |
614 | u16 gpionr = irq_to_gpio(irq); | ||
591 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; | 615 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; |
592 | 616 | ||
593 | if (pint_val == IRQ_NOT_AVAIL) { | 617 | if (pint_val == IRQ_NOT_AVAIL) { |
@@ -598,7 +622,8 @@ static unsigned int bfin_gpio_irq_startup(unsigned int irq) | |||
598 | } | 622 | } |
599 | 623 | ||
600 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 624 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
601 | ret = gpio_request(gpionr, "IRQ"); | 625 | snprintf(buf, sizeof buf, "IRQ %d", irq); |
626 | ret = gpio_request(gpionr, buf); | ||
602 | if (ret) | 627 | if (ret) |
603 | return ret; | 628 | return ret; |
604 | } | 629 | } |
@@ -611,16 +636,19 @@ static unsigned int bfin_gpio_irq_startup(unsigned int irq) | |||
611 | 636 | ||
612 | static void bfin_gpio_irq_shutdown(unsigned int irq) | 637 | static void bfin_gpio_irq_shutdown(unsigned int irq) |
613 | { | 638 | { |
639 | u16 gpionr = irq_to_gpio(irq); | ||
640 | |||
614 | bfin_gpio_mask_irq(irq); | 641 | bfin_gpio_mask_irq(irq); |
615 | gpio_free(irq - IRQ_PA0); | 642 | gpio_free(gpionr); |
616 | gpio_enabled[gpio_bank(irq - IRQ_PA0)] &= ~gpio_bit(irq - IRQ_PA0); | 643 | gpio_enabled[gpio_bank(gpionr)] &= ~gpio_bit(gpionr); |
617 | } | 644 | } |
618 | 645 | ||
619 | static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | 646 | static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) |
620 | { | 647 | { |
621 | 648 | ||
622 | unsigned int ret; | 649 | unsigned int ret; |
623 | u16 gpionr = irq - IRQ_PA0; | 650 | char buf[8]; |
651 | u16 gpionr = irq_to_gpio(irq); | ||
624 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; | 652 | u8 pint_val = irq2pint_lut[irq - SYS_IRQS]; |
625 | u32 pintbit = PINT_BIT(pint_val); | 653 | u32 pintbit = PINT_BIT(pint_val); |
626 | u8 bank = PINT_2_BANK(pint_val); | 654 | u8 bank = PINT_2_BANK(pint_val); |
@@ -638,7 +666,8 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
638 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING | | 666 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING | |
639 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { | 667 | IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) { |
640 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { | 668 | if (!(gpio_enabled[gpio_bank(gpionr)] & gpio_bit(gpionr))) { |
641 | ret = gpio_request(gpionr, "IRQ"); | 669 | snprintf(buf, sizeof buf, "IRQ %d", irq); |
670 | ret = gpio_request(gpionr, buf); | ||
642 | if (ret) | 671 | if (ret) |
643 | return ret; | 672 | return ret; |
644 | } | 673 | } |
@@ -651,28 +680,33 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
651 | 680 | ||
652 | gpio_direction_input(gpionr); | 681 | gpio_direction_input(gpionr); |
653 | 682 | ||
654 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { | ||
655 | pint[bank]->edge_set = pintbit; | ||
656 | } else { | ||
657 | pint[bank]->edge_clear = pintbit; | ||
658 | } | ||
659 | |||
660 | if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW))) | 683 | if ((type & (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW))) |
661 | pint[bank]->invert_set = pintbit; /* low or falling edge denoted by one */ | 684 | pint[bank]->invert_set = pintbit; /* low or falling edge denoted by one */ |
662 | else | 685 | else |
663 | pint[bank]->invert_set = pintbit; /* high or rising edge denoted by zero */ | 686 | pint[bank]->invert_clear = pintbit; /* high or rising edge denoted by zero */ |
664 | 687 | ||
665 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) | 688 | if ((type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) |
666 | pint[bank]->invert_set = pintbit; | 689 | == (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
667 | else | ||
668 | pint[bank]->invert_set = pintbit; | ||
669 | 690 | ||
670 | SSYNC(); | 691 | gpio_both_edge_triggered[bank] |= pintbit; |
671 | 692 | ||
672 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) | 693 | if (gpio_get_value(gpionr)) |
694 | pint[bank]->invert_set = pintbit; | ||
695 | else | ||
696 | pint[bank]->invert_clear = pintbit; | ||
697 | } else { | ||
698 | gpio_both_edge_triggered[bank] &= ~pintbit; | ||
699 | } | ||
700 | |||
701 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { | ||
702 | pint[bank]->edge_set = pintbit; | ||
673 | set_irq_handler(irq, handle_edge_irq); | 703 | set_irq_handler(irq, handle_edge_irq); |
674 | else | 704 | } else { |
705 | pint[bank]->edge_clear = pintbit; | ||
675 | set_irq_handler(irq, handle_level_irq); | 706 | set_irq_handler(irq, handle_level_irq); |
707 | } | ||
708 | |||
709 | SSYNC(); | ||
676 | 710 | ||
677 | return 0; | 711 | return 0; |
678 | } | 712 | } |
diff --git a/arch/blackfin/mach-common/irqpanic.c b/arch/blackfin/mach-common/irqpanic.c index b22959b197e5..606ded9ff4e1 100644 --- a/arch/blackfin/mach-common/irqpanic.c +++ b/arch/blackfin/mach-common/irqpanic.c | |||
@@ -46,9 +46,6 @@ void irq_panic(int reason, struct pt_regs *regs) __attribute__ ((l1_text)); | |||
46 | */ | 46 | */ |
47 | asmlinkage void irq_panic(int reason, struct pt_regs *regs) | 47 | asmlinkage void irq_panic(int reason, struct pt_regs *regs) |
48 | { | 48 | { |
49 | int sig = 0; | ||
50 | siginfo_t info; | ||
51 | |||
52 | #ifdef CONFIG_DEBUG_ICACHE_CHECK | 49 | #ifdef CONFIG_DEBUG_ICACHE_CHECK |
53 | unsigned int cmd, tag, ca, cache_hi, cache_lo, *pa; | 50 | unsigned int cmd, tag, ca, cache_hi, cache_lo, *pa; |
54 | unsigned short i, j, die; | 51 | unsigned short i, j, die; |
@@ -136,53 +133,6 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs) | |||
136 | } | 133 | } |
137 | #endif | 134 | #endif |
138 | 135 | ||
139 | printk(KERN_EMERG "\n"); | ||
140 | printk(KERN_EMERG "Exception: IRQ 0x%x entered\n", reason); | ||
141 | printk(KERN_EMERG " code=[0x%08lx], stack frame=0x%08lx, " | ||
142 | " bad PC=0x%08lx\n", | ||
143 | (unsigned long)regs->seqstat, | ||
144 | (unsigned long)regs, | ||
145 | (unsigned long)regs->pc); | ||
146 | if (reason == 0x5) { | ||
147 | printk(KERN_EMERG "----------- HARDWARE ERROR -----------\n"); | ||
148 | |||
149 | /* There is only need to check for Hardware Errors, since other | ||
150 | * EXCEPTIONS are handled in TRAPS.c (MH) | ||
151 | */ | ||
152 | switch (regs->seqstat & SEQSTAT_HWERRCAUSE) { | ||
153 | case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR): /* System MMR Error */ | ||
154 | info.si_code = BUS_ADRALN; | ||
155 | sig = SIGBUS; | ||
156 | printk(KERN_EMERG HWC_x2(KERN_EMERG)); | ||
157 | break; | ||
158 | case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR): /* External Memory Addressing Error */ | ||
159 | info.si_code = BUS_ADRERR; | ||
160 | sig = SIGBUS; | ||
161 | printk(KERN_EMERG HWC_x3(KERN_EMERG)); | ||
162 | break; | ||
163 | case (SEQSTAT_HWERRCAUSE_PERF_FLOW): /* Performance Monitor Overflow */ | ||
164 | printk(KERN_EMERG HWC_x12(KERN_EMERG)); | ||
165 | break; | ||
166 | case (SEQSTAT_HWERRCAUSE_RAISE_5): /* RAISE 5 instruction */ | ||
167 | printk(KERN_EMERG HWC_x18(KERN_EMERG)); | ||
168 | break; | ||
169 | default: /* Reserved */ | ||
170 | printk(KERN_EMERG HWC_default(KERN_EMERG)); | ||
171 | break; | ||
172 | } | ||
173 | } | ||
174 | |||
175 | regs->ipend = bfin_read_IPEND(); | ||
176 | dump_bfin_process(regs); | ||
177 | dump_bfin_mem((void *)regs->pc); | ||
178 | show_regs(regs); | ||
179 | if (0 == (info.si_signo = sig) || 0 == user_mode(regs)) /* in kernelspace */ | ||
180 | panic("Unhandled IRQ or exceptions!\n"); | ||
181 | else { /* in userspace */ | ||
182 | info.si_errno = 0; | ||
183 | info.si_addr = (void *)regs->pc; | ||
184 | force_sig_info(sig, &info, current); | ||
185 | } | ||
186 | } | 136 | } |
187 | 137 | ||
188 | #ifdef CONFIG_HARDWARE_PM | 138 | #ifdef CONFIG_HARDWARE_PM |
diff --git a/arch/blackfin/mach-common/pm.c b/arch/blackfin/mach-common/pm.c index dac51fb06f22..81930f7d06f1 100644 --- a/arch/blackfin/mach-common/pm.c +++ b/arch/blackfin/mach-common/pm.c | |||
@@ -77,7 +77,15 @@ void bfin_pm_suspend_standby_enter(void) | |||
77 | 77 | ||
78 | gpio_pm_restore(); | 78 | gpio_pm_restore(); |
79 | 79 | ||
80 | #if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) | ||
81 | bfin_write_SIC_IWR0(IWR_ENABLE_ALL); | ||
82 | bfin_write_SIC_IWR1(IWR_ENABLE_ALL); | ||
83 | # ifdef CONFIG_BF54x | ||
84 | bfin_write_SIC_IWR2(IWR_ENABLE_ALL); | ||
85 | # endif | ||
86 | #else | ||
80 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); | 87 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); |
88 | #endif | ||
81 | 89 | ||
82 | local_irq_restore(flags); | 90 | local_irq_restore(flags); |
83 | } | 91 | } |
@@ -85,7 +93,15 @@ void bfin_pm_suspend_standby_enter(void) | |||
85 | 93 | ||
86 | #if defined(CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR) | 94 | #if defined(CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR) |
87 | sleep_deeper(CONFIG_PM_WAKEUP_SIC_IWR); | 95 | sleep_deeper(CONFIG_PM_WAKEUP_SIC_IWR); |
96 | # if defined(CONFIG_BF54x) || defined(CONFIG_BF52x) | ||
97 | bfin_write_SIC_IWR0(IWR_ENABLE_ALL); | ||
98 | bfin_write_SIC_IWR1(IWR_ENABLE_ALL); | ||
99 | # ifdef CONFIG_BF54x | ||
100 | bfin_write_SIC_IWR2(IWR_ENABLE_ALL); | ||
101 | # endif | ||
102 | # else | ||
88 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); | 103 | bfin_write_SIC_IWR(IWR_ENABLE_ALL); |
104 | # endif | ||
89 | #endif /* CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR */ | 105 | #endif /* CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR */ |
90 | } | 106 | } |
91 | 107 | ||
diff --git a/arch/blackfin/mm/init.c b/arch/blackfin/mm/init.c index e97ea8fc8dc4..eb1a12ac9e33 100644 --- a/arch/blackfin/mm/init.c +++ b/arch/blackfin/mm/init.c | |||
@@ -128,8 +128,8 @@ void __init paging_init(void) | |||
128 | void __init mem_init(void) | 128 | void __init mem_init(void) |
129 | { | 129 | { |
130 | unsigned int codek = 0, datak = 0, initk = 0; | 130 | unsigned int codek = 0, datak = 0, initk = 0; |
131 | unsigned int reservedpages = 0, freepages = 0; | ||
131 | unsigned long tmp; | 132 | unsigned long tmp; |
132 | unsigned int len = _ramend - _rambase; | ||
133 | unsigned long start_mem = memory_start; | 133 | unsigned long start_mem = memory_start; |
134 | unsigned long end_mem = memory_end; | 134 | unsigned long end_mem = memory_end; |
135 | 135 | ||
@@ -138,19 +138,36 @@ void __init mem_init(void) | |||
138 | 138 | ||
139 | start_mem = PAGE_ALIGN(start_mem); | 139 | start_mem = PAGE_ALIGN(start_mem); |
140 | max_mapnr = num_physpages = MAP_NR(high_memory); | 140 | max_mapnr = num_physpages = MAP_NR(high_memory); |
141 | printk(KERN_INFO "Physical pages: %lx\n", num_physpages); | 141 | printk(KERN_INFO "Kernel managed physical pages: %lu\n", |
142 | num_physpages); | ||
142 | 143 | ||
143 | /* This will put all memory onto the freelists. */ | 144 | /* This will put all memory onto the freelists. */ |
144 | totalram_pages = free_all_bootmem(); | 145 | totalram_pages = free_all_bootmem(); |
145 | 146 | ||
147 | reservedpages = 0; | ||
148 | for (tmp = 0; tmp < max_mapnr; tmp++) | ||
149 | if (PageReserved(pfn_to_page(tmp))) | ||
150 | reservedpages++; | ||
151 | freepages = max_mapnr - reservedpages; | ||
152 | |||
153 | /* do not count in kernel image between _rambase and _ramstart */ | ||
154 | reservedpages -= (_ramstart - _rambase) >> PAGE_SHIFT; | ||
155 | #if (defined(CONFIG_BFIN_ICACHE) && ANOMALY_05000263) | ||
156 | reservedpages += (_ramend - memory_end - DMA_UNCACHED_REGION) >> | ||
157 | PAGE_SHIFT; | ||
158 | #endif | ||
159 | |||
146 | codek = (_etext - _stext) >> 10; | 160 | codek = (_etext - _stext) >> 10; |
147 | datak = (__bss_stop - __bss_start) >> 10; | ||
148 | initk = (__init_end - __init_begin) >> 10; | 161 | initk = (__init_end - __init_begin) >> 10; |
162 | datak = ((_ramstart - _rambase) >> 10) - codek - initk; | ||
149 | 163 | ||
150 | tmp = nr_free_pages() << PAGE_SHIFT; | ||
151 | printk(KERN_INFO | 164 | printk(KERN_INFO |
152 | "Memory available: %luk/%uk RAM, (%uk init code, %uk kernel code, %uk data, %uk dma)\n", | 165 | "Memory available: %luk/%luk RAM, " |
153 | tmp >> 10, len >> 10, initk, codek, datak, DMA_UNCACHED_REGION >> 10); | 166 | "(%uk init code, %uk kernel code, " |
167 | "%uk data, %uk dma, %uk reserved)\n", | ||
168 | (unsigned long) freepages << (PAGE_SHIFT-10), _ramend >> 10, | ||
169 | initk, codek, datak, DMA_UNCACHED_REGION >> 10, | ||
170 | (reservedpages << (PAGE_SHIFT-10))); | ||
154 | 171 | ||
155 | /* Initialize the blackfin L1 Memory. */ | 172 | /* Initialize the blackfin L1 Memory. */ |
156 | l1sram_init(); | 173 | l1sram_init(); |
@@ -184,13 +201,15 @@ static __init void free_init_pages(const char *what, unsigned long begin, unsign | |||
184 | #ifdef CONFIG_BLK_DEV_INITRD | 201 | #ifdef CONFIG_BLK_DEV_INITRD |
185 | void __init free_initrd_mem(unsigned long start, unsigned long end) | 202 | void __init free_initrd_mem(unsigned long start, unsigned long end) |
186 | { | 203 | { |
204 | #ifndef CONFIG_MPU | ||
187 | free_init_pages("initrd memory", start, end); | 205 | free_init_pages("initrd memory", start, end); |
206 | #endif | ||
188 | } | 207 | } |
189 | #endif | 208 | #endif |
190 | 209 | ||
191 | void __init free_initmem(void) | 210 | void __init free_initmem(void) |
192 | { | 211 | { |
193 | #ifdef CONFIG_RAMKERNEL | 212 | #if defined CONFIG_RAMKERNEL && !defined CONFIG_MPU |
194 | free_init_pages("unused kernel memory", | 213 | free_init_pages("unused kernel memory", |
195 | (unsigned long)(&__init_begin), | 214 | (unsigned long)(&__init_begin), |
196 | (unsigned long)(&__init_end)); | 215 | (unsigned long)(&__init_end)); |