aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-30 11:39:20 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-30 11:39:20 -0400
commitfb7267acfef1de3e49d4e0c80be3cc603e974b3b (patch)
tree555f4c02309c08f3dd0d918aaf0c7c374f1ad70a /arch
parent2d175d438f297bcd75a7b88baf3a304137047af6 (diff)
parent2ea4649b3634b9dbd098d0d8be65304eb2ea3a9c (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6: Blackfin arch: use a less common define name in BF549 Blackfin arch: Add missing definitions for BF561 Blackfin arch: reclaim a few bytes from the end of our init section Blackfin arch: fix libata data struct member from irq_type to irq_flags Blackfin arch: Do not pollute name space used in linux-2.6.x/sound Blackfin arch: Fix bug set correct baud for spi mmc and enable SPI after DMA. Blackfin arch: update board defconfig files according to latest information from ADI datasheet Blackfin arch: ensure that speculative loads of bad pointers don't cause us to do bad things. Blackfin arch: Add missing definitions of BF54x Blackfin arch: Fix random crash issue found by Michael. Blackfin arch: fix bug: tell users if the kernel is recovering from a fault condition Blackfin arch: add support for checking/clearing overruns in generic purpose Timer API Blackfin arch: cleanup arch/blackfin/kernel/traps.c handling code. Blackfin arch: Apply Bluetchnix vendor patch provided by Harald Krapfenbauer Blackfin arch: fix bug BlueTechnix CM-BF537 board config uses wrong IRQ for net2272 driver Blackfin arch: fix bug: kernel prints out error message twice Blackfin arch: add NFC driver support in BF527-EZKIT board Blackfin arch: Added support for HV Sistemas H8606 board
Diffstat (limited to 'arch')
-rw-r--r--arch/blackfin/Kconfig15
-rw-r--r--arch/blackfin/configs/BF527-EZKIT_defconfig2
-rw-r--r--arch/blackfin/configs/BF533-EZKIT_defconfig2
-rw-r--r--arch/blackfin/configs/BF533-STAMP_defconfig2
-rw-r--r--arch/blackfin/configs/BF537-STAMP_defconfig2
-rw-r--r--arch/blackfin/configs/BF548-EZKIT_defconfig279
-rw-r--r--arch/blackfin/configs/BF561-EZKIT_defconfig2
-rw-r--r--arch/blackfin/configs/PNAV-10_defconfig2
-rw-r--r--arch/blackfin/kernel/entry.S6
-rw-r--r--arch/blackfin/kernel/fixed_code.S14
-rw-r--r--arch/blackfin/kernel/gptimers.c47
-rw-r--r--arch/blackfin/kernel/setup.c13
-rw-r--r--arch/blackfin/kernel/traps.c340
-rw-r--r--arch/blackfin/kernel/vmlinux.lds.S11
-rw-r--r--arch/blackfin/mach-bf527/boards/ezkit.c53
-rw-r--r--arch/blackfin/mach-bf533/boards/H8606.c345
-rw-r--r--arch/blackfin/mach-bf533/boards/Makefile1
-rw-r--r--arch/blackfin/mach-bf533/boards/cm_bf533.c42
-rw-r--r--arch/blackfin/mach-bf533/boards/stamp.c4
-rw-r--r--arch/blackfin/mach-bf537/boards/cm_bf537.c4
-rw-r--r--arch/blackfin/mach-bf537/boards/stamp.c6
-rw-r--r--arch/blackfin/mach-common/entry.S2
22 files changed, 972 insertions, 222 deletions
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig
index 7888551ed939..9f9de3e95826 100644
--- a/arch/blackfin/Kconfig
+++ b/arch/blackfin/Kconfig
@@ -295,6 +295,12 @@ config PNAV10
295 help 295 help
296 PNAV 1.0 board Support. 296 PNAV 1.0 board Support.
297 297
298config H8606_HVSISTEMAS
299 bool "HV Sistemas H8606"
300 depends on (BF532)
301 help
302 HV Sistemas H8606 board support.
303
298config GENERIC_BOARD 304config GENERIC_BOARD
299 bool "Custom" 305 bool "Custom"
300 depends on (BF537 || BF536 \ 306 depends on (BF537 || BF536 \
@@ -317,7 +323,8 @@ config MEM_MT48LC64M4A2FB_7E
317config MEM_MT48LC16M16A2TG_75 323config MEM_MT48LC16M16A2TG_75
318 bool 324 bool
319 depends on (BFIN533_EZKIT || BFIN561_EZKIT \ 325 depends on (BFIN533_EZKIT || BFIN561_EZKIT \
320 || BFIN533_BLUETECHNIX_CM || BFIN537_BLUETECHNIX_CM) 326 || BFIN533_BLUETECHNIX_CM || BFIN537_BLUETECHNIX_CM \
327 || H8606_HVSISTEMAS)
321 default y 328 default y
322 329
323config MEM_MT48LC32M8A2_75 330config MEM_MT48LC32M8A2_75
@@ -366,7 +373,7 @@ config CLKIN_HZ
366 int "Crystal Frequency in Hz" 373 int "Crystal Frequency in Hz"
367 default "11059200" if BFIN533_STAMP 374 default "11059200" if BFIN533_STAMP
368 default "27000000" if BFIN533_EZKIT 375 default "27000000" if BFIN533_EZKIT
369 default "25000000" if (BFIN537_STAMP || BFIN527_EZKIT) 376 default "25000000" if (BFIN537_STAMP || BFIN527_EZKIT || H8606_HVSISTEMAS)
370 default "30000000" if BFIN561_EZKIT 377 default "30000000" if BFIN561_EZKIT
371 default "24576000" if PNAV10 378 default "24576000" if PNAV10
372 help 379 help
@@ -404,6 +411,7 @@ config VCO_MULT
404 default "20" if BFIN537_BLUETECHNIX_CM 411 default "20" if BFIN537_BLUETECHNIX_CM
405 default "20" if BFIN561_BLUETECHNIX_CM 412 default "20" if BFIN561_BLUETECHNIX_CM
406 default "20" if BFIN561_EZKIT 413 default "20" if BFIN561_EZKIT
414 default "16" if H8606_HVSISTEMAS
407 help 415 help
408 This controls the frequency of the on-chip PLL. This can be between 1 and 64. 416 This controls the frequency of the on-chip PLL. This can be between 1 and 64.
409 PLL Frequency = (Crystal Frequency) * (this setting) 417 PLL Frequency = (Crystal Frequency) * (this setting)
@@ -440,6 +448,7 @@ config SCLK_DIV
440 default 4 if BFIN537_BLUETECHNIX_CM 448 default 4 if BFIN537_BLUETECHNIX_CM
441 default 4 if BFIN561_BLUETECHNIX_CM 449 default 4 if BFIN561_BLUETECHNIX_CM
442 default 5 if BFIN561_EZKIT 450 default 5 if BFIN561_EZKIT
451 default 3 if H8606_HVSISTEMAS
443 help 452 help
444 This sets the frequency of the system clock (including SDRAM or DDR). 453 This sets the frequency of the system clock (including SDRAM or DDR).
445 This can be between 1 and 15 454 This can be between 1 and 15
@@ -492,11 +501,13 @@ config MEM_SIZE
492 default 64 if BFIN561_EZKIT 501 default 64 if BFIN561_EZKIT
493 default 128 if BFIN533_STAMP 502 default 128 if BFIN533_STAMP
494 default 64 if PNAV10 503 default 64 if PNAV10
504 default 32 if H8606_HVSISTEMAS
495 505
496config MEM_ADD_WIDTH 506config MEM_ADD_WIDTH
497 int "SDRAM Memory Address Width" 507 int "SDRAM Memory Address Width"
498 default 9 if BFIN533_EZKIT 508 default 9 if BFIN533_EZKIT
499 default 9 if BFIN561_EZKIT 509 default 9 if BFIN561_EZKIT
510 default 9 if H8606_HVSISTEMAS
500 default 10 if BFIN527_EZKIT 511 default 10 if BFIN527_EZKIT
501 default 10 if BFIN537_STAMP 512 default 10 if BFIN537_STAMP
502 default 11 if BFIN533_STAMP 513 default 11 if BFIN533_STAMP
diff --git a/arch/blackfin/configs/BF527-EZKIT_defconfig b/arch/blackfin/configs/BF527-EZKIT_defconfig
index df974e785ee2..1f6a93df6b32 100644
--- a/arch/blackfin/configs/BF527-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF527-EZKIT_defconfig
@@ -244,7 +244,7 @@ CONFIG_CLKIN_HZ=25000000
244# CONFIG_BFIN_KERNEL_CLOCK is not set 244# CONFIG_BFIN_KERNEL_CLOCK is not set
245CONFIG_MAX_VCO_HZ=600000000 245CONFIG_MAX_VCO_HZ=600000000
246CONFIG_MIN_VCO_HZ=50000000 246CONFIG_MIN_VCO_HZ=50000000
247CONFIG_MAX_SCLK_HZ=133000000 247CONFIG_MAX_SCLK_HZ=133333333
248CONFIG_MIN_SCLK_HZ=27000000 248CONFIG_MIN_SCLK_HZ=27000000
249 249
250# 250#
diff --git a/arch/blackfin/configs/BF533-EZKIT_defconfig b/arch/blackfin/configs/BF533-EZKIT_defconfig
index 57f58d5cd47a..9e9b420342d1 100644
--- a/arch/blackfin/configs/BF533-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF533-EZKIT_defconfig
@@ -198,7 +198,7 @@ CONFIG_CLKIN_HZ=27000000
198# CONFIG_BFIN_KERNEL_CLOCK is not set 198# CONFIG_BFIN_KERNEL_CLOCK is not set
199CONFIG_MAX_VCO_HZ=750000000 199CONFIG_MAX_VCO_HZ=750000000
200CONFIG_MIN_VCO_HZ=50000000 200CONFIG_MIN_VCO_HZ=50000000
201CONFIG_MAX_SCLK_HZ=133000000 201CONFIG_MAX_SCLK_HZ=133333333
202CONFIG_MIN_SCLK_HZ=27000000 202CONFIG_MIN_SCLK_HZ=27000000
203 203
204# 204#
diff --git a/arch/blackfin/configs/BF533-STAMP_defconfig b/arch/blackfin/configs/BF533-STAMP_defconfig
index 306302baff06..f59ade980109 100644
--- a/arch/blackfin/configs/BF533-STAMP_defconfig
+++ b/arch/blackfin/configs/BF533-STAMP_defconfig
@@ -199,7 +199,7 @@ CONFIG_CLKIN_HZ=11059200
199# CONFIG_BFIN_KERNEL_CLOCK is not set 199# CONFIG_BFIN_KERNEL_CLOCK is not set
200CONFIG_MAX_VCO_HZ=750000000 200CONFIG_MAX_VCO_HZ=750000000
201CONFIG_MIN_VCO_HZ=50000000 201CONFIG_MIN_VCO_HZ=50000000
202CONFIG_MAX_SCLK_HZ=133000000 202CONFIG_MAX_SCLK_HZ=133333333
203CONFIG_MIN_SCLK_HZ=27000000 203CONFIG_MIN_SCLK_HZ=27000000
204 204
205# 205#
diff --git a/arch/blackfin/configs/BF537-STAMP_defconfig b/arch/blackfin/configs/BF537-STAMP_defconfig
index 828b604438eb..07eb63dc25e0 100644
--- a/arch/blackfin/configs/BF537-STAMP_defconfig
+++ b/arch/blackfin/configs/BF537-STAMP_defconfig
@@ -206,7 +206,7 @@ CONFIG_CLKIN_HZ=25000000
206# CONFIG_BFIN_KERNEL_CLOCK is not set 206# CONFIG_BFIN_KERNEL_CLOCK is not set
207CONFIG_MAX_VCO_HZ=600000000 207CONFIG_MAX_VCO_HZ=600000000
208CONFIG_MIN_VCO_HZ=50000000 208CONFIG_MIN_VCO_HZ=50000000
209CONFIG_MAX_SCLK_HZ=133000000 209CONFIG_MAX_SCLK_HZ=133333333
210CONFIG_MIN_SCLK_HZ=27000000 210CONFIG_MIN_SCLK_HZ=27000000
211 211
212# 212#
diff --git a/arch/blackfin/configs/BF548-EZKIT_defconfig b/arch/blackfin/configs/BF548-EZKIT_defconfig
index d8569888a1c8..0dd3d2253dc2 100644
--- a/arch/blackfin/configs/BF548-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF548-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.6 3# Linux kernel version: 2.6.22.10
4# Sat Oct 27 02:34:07 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
@@ -64,7 +65,6 @@ CONFIG_FUTEX=y
64CONFIG_ANON_INODES=y 65CONFIG_ANON_INODES=y
65CONFIG_EPOLL=y 66CONFIG_EPOLL=y
66CONFIG_SIGNALFD=y 67CONFIG_SIGNALFD=y
67CONFIG_TIMERFD=y
68CONFIG_EVENTFD=y 68CONFIG_EVENTFD=y
69CONFIG_VM_EVENT_COUNTERS=y 69CONFIG_VM_EVENT_COUNTERS=y
70CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3 70CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
@@ -117,6 +117,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
117# 117#
118# Processor and Board Settings 118# Processor and Board Settings
119# 119#
120# CONFIG_BF522 is not set
121# CONFIG_BF525 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
122# CONFIG_BF533 is not set 125# CONFIG_BF533 is not set
@@ -129,6 +132,7 @@ CONFIG_PREEMPT_VOLUNTARY=y
129CONFIG_BF549=y 132CONFIG_BF549=y
130# CONFIG_BF561 is not set 133# CONFIG_BF561 is not set
131CONFIG_BF_REV_0_0=y 134CONFIG_BF_REV_0_0=y
135# CONFIG_BF_REV_0_1 is not set
132# CONFIG_BF_REV_0_2 is not set 136# CONFIG_BF_REV_0_2 is not set
133# CONFIG_BF_REV_0_3 is not set 137# CONFIG_BF_REV_0_3 is not set
134# CONFIG_BF_REV_0_4 is not set 138# CONFIG_BF_REV_0_4 is not set
@@ -137,6 +141,7 @@ CONFIG_BF_REV_0_0=y
137# CONFIG_BF_REV_NONE is not set 141# CONFIG_BF_REV_NONE is not set
138CONFIG_BF54x=y 142CONFIG_BF54x=y
139CONFIG_BFIN_SINGLE_CORE=y 143CONFIG_BFIN_SINGLE_CORE=y
144# CONFIG_BFIN527_EZKIT is not set
140# CONFIG_BFIN533_EZKIT is not set 145# CONFIG_BFIN533_EZKIT is not set
141# CONFIG_BFIN533_STAMP is not set 146# CONFIG_BFIN533_STAMP is not set
142# CONFIG_BFIN537_STAMP is not set 147# CONFIG_BFIN537_STAMP is not set
@@ -147,8 +152,23 @@ CONFIG_BFIN548_EZKIT=y
147# CONFIG_BFIN561_EZKIT is not set 152# CONFIG_BFIN561_EZKIT is not set
148# CONFIG_BFIN561_TEPLA is not set 153# CONFIG_BFIN561_TEPLA is not set
149# CONFIG_PNAV10 is not set 154# CONFIG_PNAV10 is not set
155# CONFIG_H8606_HVSISTEMAS is not set
150# CONFIG_GENERIC_BOARD is not set 156# CONFIG_GENERIC_BOARD is not set
151CONFIG_IRQ_PLL_WAKEUP=7 157CONFIG_IRQ_PLL_WAKEUP=7
158CONFIG_IRQ_RTC=8
159CONFIG_IRQ_SPORT0_RX=9
160CONFIG_IRQ_SPORT0_TX=9
161CONFIG_IRQ_SPORT1_RX=9
162CONFIG_IRQ_SPORT1_TX=9
163CONFIG_IRQ_UART0_RX=10
164CONFIG_IRQ_UART0_TX=10
165CONFIG_IRQ_UART1_RX=10
166CONFIG_IRQ_UART1_TX=10
167CONFIG_IRQ_CNT=8
168CONFIG_IRQ_USB_INT0=11
169CONFIG_IRQ_USB_INT1=11
170CONFIG_IRQ_USB_INT2=11
171CONFIG_IRQ_USB_DMA=11
152CONFIG_IRQ_TIMER0=11 172CONFIG_IRQ_TIMER0=11
153CONFIG_IRQ_TIMER1=11 173CONFIG_IRQ_TIMER1=11
154CONFIG_IRQ_TIMER2=11 174CONFIG_IRQ_TIMER2=11
@@ -160,15 +180,6 @@ CONFIG_IRQ_TIMER7=11
160CONFIG_IRQ_TIMER8=11 180CONFIG_IRQ_TIMER8=11
161CONFIG_IRQ_TIMER9=11 181CONFIG_IRQ_TIMER9=11
162CONFIG_IRQ_TIMER10=11 182CONFIG_IRQ_TIMER10=11
163CONFIG_IRQ_RTC=8
164CONFIG_IRQ_SPORT0_RX=9
165CONFIG_IRQ_SPORT0_TX=9
166CONFIG_IRQ_SPORT1_RX=9
167CONFIG_IRQ_SPORT1_TX=9
168CONFIG_IRQ_UART0_RX=10
169CONFIG_IRQ_UART0_TX=10
170CONFIG_IRQ_UART1_RX=10
171CONFIG_IRQ_UART1_TX=10
172 183
173# 184#
174# BF548 Specific Configuration 185# BF548 Specific Configuration
@@ -236,16 +247,11 @@ CONFIG_IRQ_PIXC_IN0=8
236CONFIG_IRQ_PIXC_IN1=8 247CONFIG_IRQ_PIXC_IN1=8
237CONFIG_IRQ_PIXC_OUT=8 248CONFIG_IRQ_PIXC_OUT=8
238CONFIG_IRQ_SDH=8 249CONFIG_IRQ_SDH=8
239CONFIG_IRQ_CNT=8
240CONFIG_IRQ_KEY=8 250CONFIG_IRQ_KEY=8
241CONFIG_IRQ_CAN1_RX=11 251CONFIG_IRQ_CAN1_RX=11
242CONFIG_IRQ_CAN1_TX=11 252CONFIG_IRQ_CAN1_TX=11
243CONFIG_IRQ_SDH_MASK0=11 253CONFIG_IRQ_SDH_MASK0=11
244CONFIG_IRQ_SDH_MASK1=11 254CONFIG_IRQ_SDH_MASK1=11
245CONFIG_IRQ_USB_INT0=11
246CONFIG_IRQ_USB_INT1=11
247CONFIG_IRQ_USB_INT2=11
248CONFIG_IRQ_USB_DMA=11
249CONFIG_IRQ_OTPSEC=11 255CONFIG_IRQ_OTPSEC=11
250CONFIG_IRQ_PINT2=11 256CONFIG_IRQ_PINT2=11
251CONFIG_IRQ_PINT3=11 257CONFIG_IRQ_PINT3=11
@@ -273,9 +279,9 @@ CONFIG_PINT3_ASSIGN=0x02020303
273# 279#
274CONFIG_CLKIN_HZ=25000000 280CONFIG_CLKIN_HZ=25000000
275# CONFIG_BFIN_KERNEL_CLOCK is not set 281# CONFIG_BFIN_KERNEL_CLOCK is not set
276CONFIG_MAX_VCO_HZ=533000000 282CONFIG_MAX_VCO_HZ=533333333
277CONFIG_MIN_VCO_HZ=50000000 283CONFIG_MIN_VCO_HZ=50000000
278CONFIG_MAX_SCLK_HZ=133000000 284CONFIG_MAX_SCLK_HZ=133333333
279CONFIG_MIN_SCLK_HZ=27000000 285CONFIG_MIN_SCLK_HZ=27000000
280 286
281# 287#
@@ -332,9 +338,10 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
332# CONFIG_RESOURCES_64BIT is not set 338# CONFIG_RESOURCES_64BIT is not set
333CONFIG_ZONE_DMA_FLAG=1 339CONFIG_ZONE_DMA_FLAG=1
334CONFIG_LARGE_ALLOCS=y 340CONFIG_LARGE_ALLOCS=y
341# CONFIG_BFIN_GPTIMERS is not set
335CONFIG_BFIN_DMA_5XX=y 342CONFIG_BFIN_DMA_5XX=y
336# CONFIG_DMA_UNCACHED_2M is not set 343CONFIG_DMA_UNCACHED_2M=y
337CONFIG_DMA_UNCACHED_1M=y 344# CONFIG_DMA_UNCACHED_1M is not set
338# CONFIG_DMA_UNCACHED_NONE is not set 345# CONFIG_DMA_UNCACHED_NONE is not set
339 346
340# 347#
@@ -353,7 +360,7 @@ CONFIG_L1_MAX_PIECE=16
353# 360#
354 361
355# 362#
356# EBIU_AMBCTL Global Control 363# EBIU_AMGCTL Global Control
357# 364#
358CONFIG_C_AMCKEN=y 365CONFIG_C_AMCKEN=y
359# CONFIG_C_AMBEN is not set 366# CONFIG_C_AMBEN is not set
@@ -722,7 +729,7 @@ CONFIG_NETDEV_10000=y
722# 729#
723# Input device support 730# Input device support
724# 731#
725CONFIG_INPUT=y 732CONFIG_INPUT=m
726# CONFIG_INPUT_FF_MEMLESS is not set 733# CONFIG_INPUT_FF_MEMLESS is not set
727# CONFIG_INPUT_POLLDEV is not set 734# CONFIG_INPUT_POLLDEV is not set
728 735
@@ -731,18 +738,39 @@ CONFIG_INPUT=y
731# 738#
732# CONFIG_INPUT_MOUSEDEV is not set 739# CONFIG_INPUT_MOUSEDEV is not set
733# CONFIG_INPUT_JOYDEV is not set 740# CONFIG_INPUT_JOYDEV is not set
734# CONFIG_INPUT_TSDEV is not set 741CONFIG_INPUT_TSDEV=m
735# CONFIG_INPUT_EVDEV is not set 742CONFIG_INPUT_TSDEV_SCREEN_X=240
736# CONFIG_INPUT_EVBUG is not set 743CONFIG_INPUT_TSDEV_SCREEN_Y=320
744CONFIG_INPUT_EVDEV=m
745CONFIG_INPUT_EVBUG=m
737 746
738# 747#
739# Input Device Drivers 748# Input Device Drivers
740# 749#
741# CONFIG_INPUT_KEYBOARD is not set 750CONFIG_INPUT_KEYBOARD=y
751# CONFIG_KEYBOARD_ATKBD is not set
752# CONFIG_KEYBOARD_SUNKBD is not set
753# CONFIG_KEYBOARD_LKKBD is not set
754# CONFIG_KEYBOARD_XTKBD is not set
755# CONFIG_KEYBOARD_NEWTON is not set
756# CONFIG_KEYBOARD_STOWAWAY is not set
757# CONFIG_KEYBOARD_GPIO is not set
758CONFIG_KEYBOARD_BFIN=m
742# CONFIG_INPUT_MOUSE is not set 759# CONFIG_INPUT_MOUSE is not set
743# CONFIG_INPUT_JOYSTICK is not set 760# CONFIG_INPUT_JOYSTICK is not set
744# CONFIG_INPUT_TABLET is not set 761# CONFIG_INPUT_TABLET is not set
745# CONFIG_INPUT_TOUCHSCREEN is not set 762CONFIG_INPUT_TOUCHSCREEN=y
763# CONFIG_TOUCHSCREEN_ADS7846 is not set
764CONFIG_TOUCHSCREEN_AD7877=m
765# CONFIG_TOUCHSCREEN_GUNZE is not set
766# CONFIG_TOUCHSCREEN_ELO is not set
767# CONFIG_TOUCHSCREEN_MTOUCH is not set
768# CONFIG_TOUCHSCREEN_MK712 is not set
769# CONFIG_TOUCHSCREEN_PENMOUNT is not set
770# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
771# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
772# CONFIG_TOUCHSCREEN_UCB1400 is not set
773# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
746CONFIG_INPUT_MISC=y 774CONFIG_INPUT_MISC=y
747# CONFIG_INPUT_ATI_REMOTE is not set 775# CONFIG_INPUT_ATI_REMOTE is not set
748# CONFIG_INPUT_ATI_REMOTE2 is not set 776# CONFIG_INPUT_ATI_REMOTE2 is not set
@@ -764,9 +792,9 @@ CONFIG_INPUT_MISC=y
764# 792#
765# CONFIG_AD9960 is not set 793# CONFIG_AD9960 is not set
766# CONFIG_SPI_ADC_BF533 is not set 794# CONFIG_SPI_ADC_BF533 is not set
767# CONFIG_BFIN_PFLAGS is not set 795# CONFIG_BF5xx_PFLAGS is not set
768# CONFIG_BF5xx_PPIFCD is not set 796# CONFIG_BF5xx_PPIFCD is not set
769# CONFIG_BF5xx_TIMERS is not set 797# CONFIG_BFIN_SIMPLE_TIMER is not set
770# CONFIG_BF5xx_PPI is not set 798# CONFIG_BF5xx_PPI is not set
771# CONFIG_BFIN_SPORT is not set 799# CONFIG_BFIN_SPORT is not set
772# CONFIG_BFIN_TIMER_LATENCY is not set 800# CONFIG_BFIN_TIMER_LATENCY is not set
@@ -958,17 +986,92 @@ CONFIG_DAB=y
958# 986#
959# CONFIG_DISPLAY_SUPPORT is not set 987# CONFIG_DISPLAY_SUPPORT is not set
960# CONFIG_VGASTATE is not set 988# CONFIG_VGASTATE is not set
961# CONFIG_FB is not set 989CONFIG_FB=m
990CONFIG_FIRMWARE_EDID=y
991# CONFIG_FB_DDC is not set
992CONFIG_FB_CFB_FILLRECT=m
993CONFIG_FB_CFB_COPYAREA=m
994CONFIG_FB_CFB_IMAGEBLIT=m
995# CONFIG_FB_SYS_FILLRECT is not set
996# CONFIG_FB_SYS_COPYAREA is not set
997# CONFIG_FB_SYS_IMAGEBLIT is not set
998# CONFIG_FB_SYS_FOPS is not set
999CONFIG_FB_DEFERRED_IO=y
1000# CONFIG_FB_SVGALIB is not set
1001# CONFIG_FB_MACMODES is not set
1002# CONFIG_FB_BACKLIGHT is not set
1003# CONFIG_FB_MODE_HELPERS is not set
1004# CONFIG_FB_TILEBLITTING is not set
1005
1006#
1007# Frame buffer hardware drivers
1008#
1009# CONFIG_FB_BFIN_7171 is not set
1010# CONFIG_FB_BFIN_7393 is not set
1011CONFIG_FB_BF54X_LQ043=m
1012# CONFIG_FB_BFIN_T350MCQB is not set
1013# CONFIG_FB_S1D13XXX is not set
1014# CONFIG_FB_VIRTUAL is not set
1015# CONFIG_LOGO is not set
962 1016
963# 1017#
964# Sound 1018# Sound
965# 1019#
966# CONFIG_SOUND is not set 1020CONFIG_SOUND=y
1021
1022#
1023# Advanced Linux Sound Architecture
1024#
1025CONFIG_SND=y
1026CONFIG_SND_TIMER=y
1027CONFIG_SND_PCM=y
1028# CONFIG_SND_SEQUENCER is not set
1029CONFIG_SND_OSSEMUL=y
1030CONFIG_SND_MIXER_OSS=y
1031CONFIG_SND_PCM_OSS=y
1032CONFIG_SND_PCM_OSS_PLUGINS=y
1033# CONFIG_SND_DYNAMIC_MINORS is not set
1034CONFIG_SND_SUPPORT_OLD_API=y
1035CONFIG_SND_VERBOSE_PROCFS=y
1036# CONFIG_SND_VERBOSE_PRINTK is not set
1037# CONFIG_SND_DEBUG is not set
1038
1039#
1040# Generic devices
1041#
1042# CONFIG_SND_DUMMY is not set
1043# CONFIG_SND_MTPAV is not set
1044# CONFIG_SND_SERIAL_U16550 is not set
1045# CONFIG_SND_MPU401 is not set
1046
1047#
1048# ALSA Blackfin devices
1049#
1050# CONFIG_SND_BLACKFIN_AD1836 is not set
1051# CONFIG_SND_BFIN_AD73311 is not set
1052
1053#
1054# System on Chip audio support
1055#
1056CONFIG_SND_SOC_AC97_BUS=y
1057CONFIG_SND_SOC=y
1058CONFIG_SND_BF5XX_SOC=y
1059CONFIG_SND_BF5XX_SOC_AC97=y
1060CONFIG_SND_BF5XX_SOC_BF548_EZKIT=y
1061CONFIG_SND_BF5XX_SPORT_NUM=0
1062# CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set
1063CONFIG_SND_SOC_AD1980=y
1064
1065#
1066# Open Sound System
1067#
1068# CONFIG_SOUND_PRIME is not set
1069CONFIG_AC97_BUS=y
967 1070
968# 1071#
969# HID Devices 1072# HID Devices
970# 1073#
971CONFIG_HID=y 1074CONFIG_HID=m
972# CONFIG_HID_DEBUG is not set 1075# CONFIG_HID_DEBUG is not set
973 1076
974# 1077#
@@ -1101,8 +1204,13 @@ CONFIG_EXT2_FS=y
1101CONFIG_EXT2_FS_XATTR=y 1204CONFIG_EXT2_FS_XATTR=y
1102# CONFIG_EXT2_FS_POSIX_ACL is not set 1205# CONFIG_EXT2_FS_POSIX_ACL is not set
1103# CONFIG_EXT2_FS_SECURITY is not set 1206# CONFIG_EXT2_FS_SECURITY is not set
1104# CONFIG_EXT3_FS is not set 1207CONFIG_EXT3_FS=y
1208CONFIG_EXT3_FS_XATTR=y
1209# CONFIG_EXT3_FS_POSIX_ACL is not set
1210# CONFIG_EXT3_FS_SECURITY is not set
1105# CONFIG_EXT4DEV_FS is not set 1211# CONFIG_EXT4DEV_FS is not set
1212CONFIG_JBD=y
1213# CONFIG_JBD_DEBUG is not set
1106CONFIG_FS_MBCACHE=y 1214CONFIG_FS_MBCACHE=y
1107# CONFIG_REISERFS_FS is not set 1215# CONFIG_REISERFS_FS is not set
1108# CONFIG_JFS_FS is not set 1216# CONFIG_JFS_FS is not set
@@ -1123,15 +1231,22 @@ CONFIG_DNOTIFY=y
1123# 1231#
1124# CD-ROM/DVD Filesystems 1232# CD-ROM/DVD Filesystems
1125# 1233#
1126# CONFIG_ISO9660_FS is not set 1234CONFIG_ISO9660_FS=m
1235CONFIG_JOLIET=y
1236CONFIG_ZISOFS=y
1127# CONFIG_UDF_FS is not set 1237# CONFIG_UDF_FS is not set
1128 1238
1129# 1239#
1130# DOS/FAT/NT Filesystems 1240# DOS/FAT/NT Filesystems
1131# 1241#
1132# CONFIG_MSDOS_FS is not set 1242CONFIG_FAT_FS=m
1133# CONFIG_VFAT_FS is not set 1243CONFIG_MSDOS_FS=m
1134# CONFIG_NTFS_FS is not set 1244CONFIG_VFAT_FS=m
1245CONFIG_FAT_DEFAULT_CODEPAGE=437
1246CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1247CONFIG_NTFS_FS=m
1248# CONFIG_NTFS_DEBUG is not set
1249CONFIG_NTFS_RW=y
1135 1250
1136# 1251#
1137# Pseudo filesystems 1252# Pseudo filesystems
@@ -1183,10 +1298,33 @@ CONFIG_JFFS2_RTIME=y
1183# 1298#
1184# Network File Systems 1299# Network File Systems
1185# 1300#
1186# CONFIG_NFS_FS is not set 1301CONFIG_NFS_FS=m
1187# CONFIG_NFSD is not set 1302CONFIG_NFS_V3=y
1188# CONFIG_SMB_FS is not set 1303# CONFIG_NFS_V3_ACL is not set
1189# CONFIG_CIFS is not set 1304# CONFIG_NFS_V4 is not set
1305# CONFIG_NFS_DIRECTIO is not set
1306CONFIG_NFSD=m
1307CONFIG_NFSD_V3=y
1308# CONFIG_NFSD_V3_ACL is not set
1309# CONFIG_NFSD_V4 is not set
1310CONFIG_NFSD_TCP=y
1311CONFIG_LOCKD=m
1312CONFIG_LOCKD_V4=y
1313CONFIG_EXPORTFS=m
1314CONFIG_NFS_COMMON=y
1315CONFIG_SUNRPC=m
1316# CONFIG_SUNRPC_BIND34 is not set
1317# CONFIG_RPCSEC_GSS_KRB5 is not set
1318# CONFIG_RPCSEC_GSS_SPKM3 is not set
1319CONFIG_SMB_FS=m
1320CONFIG_SMB_NLS_DEFAULT=y
1321CONFIG_SMB_NLS_REMOTE="cp437"
1322CONFIG_CIFS=y
1323# CONFIG_CIFS_STATS is not set
1324# CONFIG_CIFS_WEAK_PW_HASH is not set
1325# CONFIG_CIFS_XATTR is not set
1326# CONFIG_CIFS_DEBUG2 is not set
1327# CONFIG_CIFS_EXPERIMENTAL is not set
1190# CONFIG_NCP_FS is not set 1328# CONFIG_NCP_FS is not set
1191# CONFIG_CODA_FS is not set 1329# CONFIG_CODA_FS is not set
1192# CONFIG_AFS_FS is not set 1330# CONFIG_AFS_FS is not set
@@ -1195,13 +1333,68 @@ CONFIG_JFFS2_RTIME=y
1195# 1333#
1196# Partition Types 1334# Partition Types
1197# 1335#
1198# CONFIG_PARTITION_ADVANCED is not set 1336CONFIG_PARTITION_ADVANCED=y
1337# CONFIG_ACORN_PARTITION is not set
1338# CONFIG_OSF_PARTITION is not set
1339# CONFIG_AMIGA_PARTITION is not set
1340# CONFIG_ATARI_PARTITION is not set
1341# CONFIG_MAC_PARTITION is not set
1199CONFIG_MSDOS_PARTITION=y 1342CONFIG_MSDOS_PARTITION=y
1343# CONFIG_BSD_DISKLABEL is not set
1344# CONFIG_MINIX_SUBPARTITION is not set
1345# CONFIG_SOLARIS_X86_PARTITION is not set
1346# CONFIG_UNIXWARE_DISKLABEL is not set
1347# CONFIG_LDM_PARTITION is not set
1348# CONFIG_SGI_PARTITION is not set
1349# CONFIG_ULTRIX_PARTITION is not set
1350# CONFIG_SUN_PARTITION is not set
1351# CONFIG_KARMA_PARTITION is not set
1352# CONFIG_EFI_PARTITION is not set
1353# CONFIG_SYSV68_PARTITION is not set
1200 1354
1201# 1355#
1202# Native Language Support 1356# Native Language Support
1203# 1357#
1204# CONFIG_NLS is not set 1358CONFIG_NLS=y
1359CONFIG_NLS_DEFAULT="iso8859-1"
1360CONFIG_NLS_CODEPAGE_437=m
1361CONFIG_NLS_CODEPAGE_737=m
1362CONFIG_NLS_CODEPAGE_775=m
1363CONFIG_NLS_CODEPAGE_850=m
1364CONFIG_NLS_CODEPAGE_852=m
1365CONFIG_NLS_CODEPAGE_855=m
1366CONFIG_NLS_CODEPAGE_857=m
1367CONFIG_NLS_CODEPAGE_860=m
1368CONFIG_NLS_CODEPAGE_861=m
1369CONFIG_NLS_CODEPAGE_862=m
1370CONFIG_NLS_CODEPAGE_863=m
1371CONFIG_NLS_CODEPAGE_864=m
1372CONFIG_NLS_CODEPAGE_865=m
1373CONFIG_NLS_CODEPAGE_866=m
1374CONFIG_NLS_CODEPAGE_869=m
1375CONFIG_NLS_CODEPAGE_936=m
1376CONFIG_NLS_CODEPAGE_950=m
1377CONFIG_NLS_CODEPAGE_932=m
1378CONFIG_NLS_CODEPAGE_949=m
1379CONFIG_NLS_CODEPAGE_874=m
1380CONFIG_NLS_ISO8859_8=m
1381CONFIG_NLS_CODEPAGE_1250=m
1382CONFIG_NLS_CODEPAGE_1251=m
1383CONFIG_NLS_ASCII=m
1384CONFIG_NLS_ISO8859_1=m
1385CONFIG_NLS_ISO8859_2=m
1386CONFIG_NLS_ISO8859_3=m
1387CONFIG_NLS_ISO8859_4=m
1388CONFIG_NLS_ISO8859_5=m
1389CONFIG_NLS_ISO8859_6=m
1390CONFIG_NLS_ISO8859_7=m
1391CONFIG_NLS_ISO8859_9=m
1392CONFIG_NLS_ISO8859_13=m
1393CONFIG_NLS_ISO8859_14=m
1394CONFIG_NLS_ISO8859_15=m
1395CONFIG_NLS_KOI8_R=m
1396CONFIG_NLS_KOI8_U=m
1397CONFIG_NLS_UTF8=m
1205 1398
1206# 1399#
1207# Distributed Lock Manager 1400# Distributed Lock Manager
diff --git a/arch/blackfin/configs/BF561-EZKIT_defconfig b/arch/blackfin/configs/BF561-EZKIT_defconfig
index 85e647f87759..277d72dac0f9 100644
--- a/arch/blackfin/configs/BF561-EZKIT_defconfig
+++ b/arch/blackfin/configs/BF561-EZKIT_defconfig
@@ -243,7 +243,7 @@ CONFIG_CLKIN_HZ=30000000
243# CONFIG_BFIN_KERNEL_CLOCK is not set 243# CONFIG_BFIN_KERNEL_CLOCK is not set
244CONFIG_MAX_VCO_HZ=600000000 244CONFIG_MAX_VCO_HZ=600000000
245CONFIG_MIN_VCO_HZ=50000000 245CONFIG_MIN_VCO_HZ=50000000
246CONFIG_MAX_SCLK_HZ=133000000 246CONFIG_MAX_SCLK_HZ=133333333
247CONFIG_MIN_SCLK_HZ=27000000 247CONFIG_MIN_SCLK_HZ=27000000
248 248
249# 249#
diff --git a/arch/blackfin/configs/PNAV-10_defconfig b/arch/blackfin/configs/PNAV-10_defconfig
index 15e36aaf2186..3d403e0b82c2 100644
--- a/arch/blackfin/configs/PNAV-10_defconfig
+++ b/arch/blackfin/configs/PNAV-10_defconfig
@@ -204,7 +204,7 @@ CONFIG_CLKIN_HZ=24576000
204# CONFIG_BFIN_KERNEL_CLOCK is not set 204# CONFIG_BFIN_KERNEL_CLOCK is not set
205CONFIG_MAX_VCO_HZ=600000000 205CONFIG_MAX_VCO_HZ=600000000
206CONFIG_MIN_VCO_HZ=50000000 206CONFIG_MIN_VCO_HZ=50000000
207CONFIG_MAX_SCLK_HZ=133000000 207CONFIG_MAX_SCLK_HZ=133333333
208CONFIG_MIN_SCLK_HZ=27000000 208CONFIG_MIN_SCLK_HZ=27000000
209 209
210# 210#
diff --git a/arch/blackfin/kernel/entry.S b/arch/blackfin/kernel/entry.S
index 65c5ba4260b0..65f4e67a65c4 100644
--- a/arch/blackfin/kernel/entry.S
+++ b/arch/blackfin/kernel/entry.S
@@ -54,9 +54,11 @@ ENTRY(_ret_from_fork)
54 [sp + PT_IPEND] = r0; 54 [sp + PT_IPEND] = r0;
55 /* do a 'fake' RTI by jumping to [RETI] 55 /* do a 'fake' RTI by jumping to [RETI]
56 * to avoid clearing supervisor mode in child 56 * to avoid clearing supervisor mode in child
57 */ 57 */
58 r0 = [sp + PT_PC];
59 [sp + PT_P0] = r0;
60
58 RESTORE_ALL_SYS 61 RESTORE_ALL_SYS
59 p0 = reti;
60 jump (p0); 62 jump (p0);
61ENDPROC(_ret_from_fork) 63ENDPROC(_ret_from_fork)
62 64
diff --git a/arch/blackfin/kernel/fixed_code.S b/arch/blackfin/kernel/fixed_code.S
index d8b1ebc70996..90262691b11a 100644
--- a/arch/blackfin/kernel/fixed_code.S
+++ b/arch/blackfin/kernel/fixed_code.S
@@ -129,4 +129,18 @@ ENTRY(_atomic_xor32)
129 rts; 129 rts;
130ENDPROC (_atomic_ior32) 130ENDPROC (_atomic_ior32)
131 131
132.align 16
133 /*
134 * safe_user_instruction
135 * Four NOPS are enough to allow the pipeline to speculativily load
136 * execute anything it wants. After that, things have gone bad, and
137 * we are stuck - so panic. Since we might be in user space, we can't
138 * call panic, so just cause a unhandled exception, this should cause
139 * a dump of the trace buffer so we can tell were we are, and a reboot
140 */
141ENTRY(_safe_user_instruction)
142 NOP; NOP; NOP; NOP;
143 EXCPT 0x4;
144ENDPROC(_safe_user_instruction)
145
132ENTRY(_fixed_code_end) 146ENTRY(_fixed_code_end)
diff --git a/arch/blackfin/kernel/gptimers.c b/arch/blackfin/kernel/gptimers.c
index cb7ba9bfc79c..5cf4bdb1df3b 100644
--- a/arch/blackfin/kernel/gptimers.c
+++ b/arch/blackfin/kernel/gptimers.c
@@ -20,8 +20,7 @@
20#else 20#else
21# define tassert(expr) \ 21# define tassert(expr) \
22 if (!(expr)) \ 22 if (!(expr)) \
23 printk(KERN_DEBUG "%s:%s:%i: Assertion failed: " #expr "\n", \ 23 printk(KERN_DEBUG "%s:%s:%i: Assertion failed: " #expr "\n", __FILE__, __func__, __LINE__);
24 __FILE__, __func__, __LINE__);
25#endif 24#endif
26 25
27#define BFIN_TIMER_NUM_GROUP (BFIN_TIMER_OCTET(MAX_BLACKFIN_GPTIMERS - 1) + 1) 26#define BFIN_TIMER_NUM_GROUP (BFIN_TIMER_OCTET(MAX_BLACKFIN_GPTIMERS - 1) + 1)
@@ -70,7 +69,7 @@ static volatile GPTIMER_group_regs *const group_regs[BFIN_TIMER_NUM_GROUP] =
70#endif 69#endif
71}; 70};
72 71
73static uint32_t const dis_mask[MAX_BLACKFIN_GPTIMERS] = 72static uint32_t const trun_mask[MAX_BLACKFIN_GPTIMERS] =
74{ 73{
75 TIMER_STATUS_TRUN0, 74 TIMER_STATUS_TRUN0,
76 TIMER_STATUS_TRUN1, 75 TIMER_STATUS_TRUN1,
@@ -90,7 +89,27 @@ static uint32_t const dis_mask[MAX_BLACKFIN_GPTIMERS] =
90#endif 89#endif
91}; 90};
92 91
93static uint32_t const irq_mask[MAX_BLACKFIN_GPTIMERS] = 92static uint32_t const tovf_mask[MAX_BLACKFIN_GPTIMERS] =
93{
94 TIMER_STATUS_TOVF0,
95 TIMER_STATUS_TOVF1,
96 TIMER_STATUS_TOVF2,
97#if (MAX_BLACKFIN_GPTIMERS > 3)
98 TIMER_STATUS_TOVF3,
99 TIMER_STATUS_TOVF4,
100 TIMER_STATUS_TOVF5,
101 TIMER_STATUS_TOVF6,
102 TIMER_STATUS_TOVF7,
103#endif
104#if (MAX_BLACKFIN_GPTIMERS > 8)
105 TIMER_STATUS_TOVF8,
106 TIMER_STATUS_TOVF9,
107 TIMER_STATUS_TOVF10,
108 TIMER_STATUS_TOVF11,
109#endif
110};
111
112static uint32_t const timil_mask[MAX_BLACKFIN_GPTIMERS] =
94{ 113{
95 TIMER_STATUS_TIMIL0, 114 TIMER_STATUS_TIMIL0,
96 TIMER_STATUS_TIMIL1, 115 TIMER_STATUS_TIMIL1,
@@ -165,17 +184,31 @@ EXPORT_SYMBOL(set_gptimer_status);
165uint16_t get_gptimer_intr(int timer_id) 184uint16_t get_gptimer_intr(int timer_id)
166{ 185{
167 tassert(timer_id < MAX_BLACKFIN_GPTIMERS); 186 tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
168 return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & irq_mask[timer_id]) ? 1 : 0; 187 return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & timil_mask[timer_id]) ? 1 : 0;
169} 188}
170EXPORT_SYMBOL(get_gptimer_intr); 189EXPORT_SYMBOL(get_gptimer_intr);
171 190
172void clear_gptimer_intr(int timer_id) 191void clear_gptimer_intr(int timer_id)
173{ 192{
174 tassert(timer_id < MAX_BLACKFIN_GPTIMERS); 193 tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
175 group_regs[BFIN_TIMER_OCTET(timer_id)]->status = irq_mask[timer_id]; 194 group_regs[BFIN_TIMER_OCTET(timer_id)]->status = timil_mask[timer_id];
176} 195}
177EXPORT_SYMBOL(clear_gptimer_intr); 196EXPORT_SYMBOL(clear_gptimer_intr);
178 197
198uint16_t get_gptimer_over(int timer_id)
199{
200 tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
201 return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & tovf_mask[timer_id]) ? 1 : 0;
202}
203EXPORT_SYMBOL(get_gptimer_over);
204
205void clear_gptimer_over(int timer_id)
206{
207 tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
208 group_regs[BFIN_TIMER_OCTET(timer_id)]->status = tovf_mask[timer_id];
209}
210EXPORT_SYMBOL(clear_gptimer_over);
211
179void set_gptimer_config(int timer_id, uint16_t config) 212void set_gptimer_config(int timer_id, uint16_t config)
180{ 213{
181 tassert(timer_id < MAX_BLACKFIN_GPTIMERS); 214 tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
@@ -214,7 +247,7 @@ void disable_gptimers(uint16_t mask)
214 } 247 }
215 for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i) 248 for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i)
216 if (mask & (1 << i)) 249 if (mask & (1 << i))
217 group_regs[BFIN_TIMER_OCTET(i)]->status |= dis_mask[i]; 250 group_regs[BFIN_TIMER_OCTET(i)]->status |= trun_mask[i];
218 SSYNC(); 251 SSYNC();
219} 252}
220EXPORT_SYMBOL(disable_gptimers); 253EXPORT_SYMBOL(disable_gptimers);
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c
index f1b059e5a06c..934234f43839 100644
--- a/arch/blackfin/kernel/setup.c
+++ b/arch/blackfin/kernel/setup.c
@@ -316,6 +316,15 @@ void __init setup_arch(char **cmdline_p)
316 316
317 init_leds(); 317 init_leds();
318 318
319 _bfin_swrst = bfin_read_SWRST();
320
321 if (_bfin_swrst & RESET_DOUBLE)
322 printk(KERN_INFO "Recovering from Double Fault event\n");
323 else if (_bfin_swrst & RESET_WDOG)
324 printk(KERN_INFO "Recovering from Watchdog event\n");
325 else if (_bfin_swrst & RESET_SOFTWARE)
326 printk(KERN_NOTICE "Reset caused by Software reset\n");
327
319 printk(KERN_INFO "Blackfin support (C) 2004-2007 Analog Devices, Inc.\n"); 328 printk(KERN_INFO "Blackfin support (C) 2004-2007 Analog Devices, Inc.\n");
320 if (bfin_compiled_revid() == 0xffff) 329 if (bfin_compiled_revid() == 0xffff)
321 printk(KERN_INFO "Compiled for ADSP-%s Rev any\n", CPU); 330 printk(KERN_INFO "Compiled for ADSP-%s Rev any\n", CPU);
@@ -402,8 +411,6 @@ void __init setup_arch(char **cmdline_p)
402 if (l1_length > L1_DATA_A_LENGTH) 411 if (l1_length > L1_DATA_A_LENGTH)
403 panic("L1 data memory overflow\n"); 412 panic("L1 data memory overflow\n");
404 413
405 _bfin_swrst = bfin_read_SWRST();
406
407 /* Copy atomic sequences to their fixed location, and sanity check that 414 /* Copy atomic sequences to their fixed location, and sanity check that
408 these locations are the ones that we advertise to userspace. */ 415 these locations are the ones that we advertise to userspace. */
409 memcpy((void *)FIXED_CODE_START, &fixed_code_start, 416 memcpy((void *)FIXED_CODE_START, &fixed_code_start,
@@ -424,6 +431,8 @@ void __init setup_arch(char **cmdline_p)
424 != ATOMIC_AND32 - FIXED_CODE_START); 431 != ATOMIC_AND32 - FIXED_CODE_START);
425 BUG_ON((char *)&atomic_xor32 - (char *)&fixed_code_start 432 BUG_ON((char *)&atomic_xor32 - (char *)&fixed_code_start
426 != ATOMIC_XOR32 - FIXED_CODE_START); 433 != ATOMIC_XOR32 - FIXED_CODE_START);
434 BUG_ON((char *)&safe_user_instruction - (char *)&fixed_code_start
435 != SAFE_USER_INSTRUCTION - FIXED_CODE_START);
427 436
428 init_exception_vectors(); 437 init_exception_vectors();
429 bf53x_cache_init(); 438 bf53x_cache_init();
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index afd044e78af6..cfa05436c972 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -37,10 +37,24 @@
37#include <asm/blackfin.h> 37#include <asm/blackfin.h>
38#include <asm/irq_handler.h> 38#include <asm/irq_handler.h>
39#include <asm/trace.h> 39#include <asm/trace.h>
40#include <asm/fixed_code.h>
40 41
41#ifdef CONFIG_KGDB 42#ifdef CONFIG_KGDB
42# include <linux/debugger.h> 43# include <linux/debugger.h>
43# include <linux/kgdb.h> 44# include <linux/kgdb.h>
45
46# define CHK_DEBUGGER_TRAP() \
47 do { \
48 CHK_DEBUGGER(trapnr, sig, info.si_code, fp, ); \
49 } while (0)
50# define CHK_DEBUGGER_TRAP_MAYBE() \
51 do { \
52 if (kgdb_connected) \
53 CHK_DEBUGGER_TRAP(); \
54 } while (0)
55#else
56# define CHK_DEBUGGER_TRAP() do { } while (0)
57# define CHK_DEBUGGER_TRAP_MAYBE() do { } while (0)
44#endif 58#endif
45 59
46/* Initiate the event table handler */ 60/* Initiate the event table handler */
@@ -53,13 +67,13 @@ void __init trap_init(void)
53 67
54int kstack_depth_to_print = 48; 68int kstack_depth_to_print = 48;
55 69
56#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON 70static void decode_address(char *buf, unsigned long address)
57static int printk_address(unsigned long address)
58{ 71{
59 struct vm_list_struct *vml; 72 struct vm_list_struct *vml;
60 struct task_struct *p; 73 struct task_struct *p;
61 struct mm_struct *mm; 74 struct mm_struct *mm;
62 unsigned long offset; 75 unsigned long flags, offset;
76 unsigned int in_exception = bfin_read_IPEND() & 0x10;
63 77
64#ifdef CONFIG_KALLSYMS 78#ifdef CONFIG_KALLSYMS
65 unsigned long symsize; 79 unsigned long symsize;
@@ -75,20 +89,33 @@ static int printk_address(unsigned long address)
75 /* yeah! kernel space! */ 89 /* yeah! kernel space! */
76 if (!modname) 90 if (!modname)
77 modname = delim = ""; 91 modname = delim = "";
78 return printk("<0x%p> { %s%s%s%s + 0x%lx }", 92 sprintf(buf, "<0x%p> { %s%s%s%s + 0x%lx }",
79 (void *)address, delim, modname, delim, symname, 93 (void *)address, delim, modname, delim, symname,
80 (unsigned long)offset); 94 (unsigned long)offset);
95 return;
81 96
82 } 97 }
83#endif 98#endif
84 99
100 /* Problem in fixed code section? */
101 if (address >= FIXED_CODE_START && address < FIXED_CODE_END) {
102 sprintf(buf, "<0x%p> /* Maybe fixed code section */", (void *)address);
103 return;
104 }
105
106 /* Problem somewhere before the kernel start address */
107 if (address < CONFIG_BOOT_LOAD) {
108 sprintf(buf, "<0x%p> /* Maybe null pointer? */", (void *)address);
109 return;
110 }
111
85 /* looks like we're off in user-land, so let's walk all the 112 /* looks like we're off in user-land, so let's walk all the
86 * mappings of all our processes and see if we can't be a whee 113 * mappings of all our processes and see if we can't be a whee
87 * bit more specific 114 * bit more specific
88 */ 115 */
89 write_lock_irq(&tasklist_lock); 116 write_lock_irqsave(&tasklist_lock, flags);
90 for_each_process(p) { 117 for_each_process(p) {
91 mm = get_task_mm(p); 118 mm = (in_exception ? p->mm : get_task_mm(p));
92 if (!mm) 119 if (!mm)
93 continue; 120 continue;
94 121
@@ -117,25 +144,30 @@ static int printk_address(unsigned long address)
117 else 144 else
118 offset = (address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT); 145 offset = (address - vma->vm_start) + (vma->vm_pgoff << PAGE_SHIFT);
119 146
120 write_unlock_irq(&tasklist_lock); 147 sprintf(buf, "<0x%p> [ %s + 0x%lx ]",
121 mmput(mm); 148 (void *)address, name, offset);
122 return printk("<0x%p> [ %s + 0x%lx ]", 149 if (!in_exception)
123 (void *)address, name, offset); 150 mmput(mm);
151 goto done;
124 } 152 }
125 153
126 vml = vml->next; 154 vml = vml->next;
127 } 155 }
128 mmput(mm); 156 if (!in_exception)
157 mmput(mm);
129 } 158 }
130 write_unlock_irq(&tasklist_lock);
131 159
132 /* we were unable to find this address anywhere */ 160 /* we were unable to find this address anywhere */
133 return printk("[<0x%p>]", (void *)address); 161 sprintf(buf, "[<0x%p>]", (void *)address);
162
163done:
164 write_unlock_irqrestore(&tasklist_lock, flags);
134} 165}
135#endif
136 166
137asmlinkage void double_fault_c(struct pt_regs *fp) 167asmlinkage void double_fault_c(struct pt_regs *fp)
138{ 168{
169 console_verbose();
170 oops_in_progress = 1;
139 printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n"); 171 printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n");
140 dump_bfin_regs(fp, (void *)fp->retx); 172 dump_bfin_regs(fp, (void *)fp->retx);
141 panic("Double Fault - unrecoverable event\n"); 173 panic("Double Fault - unrecoverable event\n");
@@ -151,22 +183,29 @@ asmlinkage void trap_c(struct pt_regs *fp)
151 siginfo_t info; 183 siginfo_t info;
152 unsigned long trapnr = fp->seqstat & SEQSTAT_EXCAUSE; 184 unsigned long trapnr = fp->seqstat & SEQSTAT_EXCAUSE;
153 185
186 trace_buffer_save(j);
187
188 /* Important - be very careful dereferncing pointers - will lead to
189 * double faults if the stack has become corrupt
190 */
191
192 /* If the fault was caused by a kernel thread, or interrupt handler
193 * we will kernel panic, so the system reboots.
194 * If KGDB is enabled, don't set this for kernel breakpoints
195 */
196 if ((bfin_read_IPEND() & 0xFFC0)
154#ifdef CONFIG_KGDB 197#ifdef CONFIG_KGDB
155# define CHK_DEBUGGER_TRAP() \ 198 && trapnr != VEC_EXCPT02
156 do { \
157 CHK_DEBUGGER(trapnr, sig, info.si_code, fp, ); \
158 } while (0)
159# define CHK_DEBUGGER_TRAP_MAYBE() \
160 do { \
161 if (kgdb_connected) \
162 CHK_DEBUGGER_TRAP(); \
163 } while (0)
164#else
165# define CHK_DEBUGGER_TRAP() do { } while (0)
166# define CHK_DEBUGGER_TRAP_MAYBE() do { } while (0)
167#endif 199#endif
168 200 ){
169 trace_buffer_save(j); 201 console_verbose();
202 oops_in_progress = 1;
203 } else if (current) {
204 if (current->mm == NULL) {
205 console_verbose();
206 oops_in_progress = 1;
207 }
208 }
170 209
171 /* trap_c() will be called for exceptions. During exceptions 210 /* trap_c() will be called for exceptions. During exceptions
172 * processing, the pc value should be set with retx value. 211 * processing, the pc value should be set with retx value.
@@ -211,7 +250,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
211 case VEC_EXCPT03: 250 case VEC_EXCPT03:
212 info.si_code = SEGV_STACKFLOW; 251 info.si_code = SEGV_STACKFLOW;
213 sig = SIGSEGV; 252 sig = SIGSEGV;
214 printk(KERN_EMERG EXC_0x03); 253 printk(KERN_NOTICE EXC_0x03);
215 CHK_DEBUGGER_TRAP(); 254 CHK_DEBUGGER_TRAP();
216 break; 255 break;
217 /* 0x04 - User Defined, Caught by default */ 256 /* 0x04 - User Defined, Caught by default */
@@ -240,7 +279,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
240 case VEC_OVFLOW: 279 case VEC_OVFLOW:
241 info.si_code = TRAP_TRACEFLOW; 280 info.si_code = TRAP_TRACEFLOW;
242 sig = SIGTRAP; 281 sig = SIGTRAP;
243 printk(KERN_EMERG EXC_0x11); 282 printk(KERN_NOTICE EXC_0x11);
244 CHK_DEBUGGER_TRAP(); 283 CHK_DEBUGGER_TRAP();
245 break; 284 break;
246 /* 0x12 - Reserved, Caught by default */ 285 /* 0x12 - Reserved, Caught by default */
@@ -262,14 +301,14 @@ asmlinkage void trap_c(struct pt_regs *fp)
262 case VEC_UNDEF_I: 301 case VEC_UNDEF_I:
263 info.si_code = ILL_ILLOPC; 302 info.si_code = ILL_ILLOPC;
264 sig = SIGILL; 303 sig = SIGILL;
265 printk(KERN_EMERG EXC_0x21); 304 printk(KERN_NOTICE EXC_0x21);
266 CHK_DEBUGGER_TRAP(); 305 CHK_DEBUGGER_TRAP();
267 break; 306 break;
268 /* 0x22 - Illegal Instruction Combination, handled here */ 307 /* 0x22 - Illegal Instruction Combination, handled here */
269 case VEC_ILGAL_I: 308 case VEC_ILGAL_I:
270 info.si_code = ILL_ILLPARAOP; 309 info.si_code = ILL_ILLPARAOP;
271 sig = SIGILL; 310 sig = SIGILL;
272 printk(KERN_EMERG EXC_0x22); 311 printk(KERN_NOTICE EXC_0x22);
273 CHK_DEBUGGER_TRAP(); 312 CHK_DEBUGGER_TRAP();
274 break; 313 break;
275 /* 0x23 - Data CPLB Protection Violation, 314 /* 0x23 - Data CPLB Protection Violation,
@@ -277,21 +316,21 @@ asmlinkage void trap_c(struct pt_regs *fp)
277 case VEC_CPLB_VL: 316 case VEC_CPLB_VL:
278 info.si_code = ILL_CPLB_VI; 317 info.si_code = ILL_CPLB_VI;
279 sig = SIGILL; 318 sig = SIGILL;
280 printk(KERN_EMERG EXC_0x23); 319 printk(KERN_NOTICE EXC_0x23);
281 CHK_DEBUGGER_TRAP(); 320 CHK_DEBUGGER_TRAP();
282 break; 321 break;
283 /* 0x24 - Data access misaligned, handled here */ 322 /* 0x24 - Data access misaligned, handled here */
284 case VEC_MISALI_D: 323 case VEC_MISALI_D:
285 info.si_code = BUS_ADRALN; 324 info.si_code = BUS_ADRALN;
286 sig = SIGBUS; 325 sig = SIGBUS;
287 printk(KERN_EMERG EXC_0x24); 326 printk(KERN_NOTICE EXC_0x24);
288 CHK_DEBUGGER_TRAP(); 327 CHK_DEBUGGER_TRAP();
289 break; 328 break;
290 /* 0x25 - Unrecoverable Event, handled here */ 329 /* 0x25 - Unrecoverable Event, handled here */
291 case VEC_UNCOV: 330 case VEC_UNCOV:
292 info.si_code = ILL_ILLEXCPT; 331 info.si_code = ILL_ILLEXCPT;
293 sig = SIGILL; 332 sig = SIGILL;
294 printk(KERN_EMERG EXC_0x25); 333 printk(KERN_NOTICE EXC_0x25);
295 CHK_DEBUGGER_TRAP(); 334 CHK_DEBUGGER_TRAP();
296 break; 335 break;
297 /* 0x26 - Data CPLB Miss, normal case is handled in _cplb_hdr, 336 /* 0x26 - Data CPLB Miss, normal case is handled in _cplb_hdr,
@@ -299,7 +338,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
299 case VEC_CPLB_M: 338 case VEC_CPLB_M:
300 info.si_code = BUS_ADRALN; 339 info.si_code = BUS_ADRALN;
301 sig = SIGBUS; 340 sig = SIGBUS;
302 printk(KERN_EMERG EXC_0x26); 341 printk(KERN_NOTICE EXC_0x26);
303 CHK_DEBUGGER_TRAP(); 342 CHK_DEBUGGER_TRAP();
304 break; 343 break;
305 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */ 344 /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */
@@ -307,11 +346,10 @@ asmlinkage void trap_c(struct pt_regs *fp)
307 info.si_code = ILL_CPLB_MULHIT; 346 info.si_code = ILL_CPLB_MULHIT;
308#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO 347#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
309 sig = SIGSEGV; 348 sig = SIGSEGV;
310 printk(KERN_EMERG "\n" 349 printk(KERN_NOTICE "NULL pointer access (probably)\n");
311 KERN_EMERG "NULL pointer access (probably)\n");
312#else 350#else
313 sig = SIGILL; 351 sig = SIGILL;
314 printk(KERN_EMERG EXC_0x27); 352 printk(KERN_NOTICE EXC_0x27);
315#endif 353#endif
316 CHK_DEBUGGER_TRAP(); 354 CHK_DEBUGGER_TRAP();
317 break; 355 break;
@@ -331,7 +369,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
331 case VEC_ISTRU_VL: /* ADSP-BF535 only (MH) */ 369 case VEC_ISTRU_VL: /* ADSP-BF535 only (MH) */
332 info.si_code = BUS_OPFETCH; 370 info.si_code = BUS_OPFETCH;
333 sig = SIGBUS; 371 sig = SIGBUS;
334 printk(KERN_EMERG "BF535: VEC_ISTRU_VL\n"); 372 printk(KERN_NOTICE "BF535: VEC_ISTRU_VL\n");
335 CHK_DEBUGGER_TRAP(); 373 CHK_DEBUGGER_TRAP();
336 break; 374 break;
337#else 375#else
@@ -341,7 +379,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
341 case VEC_MISALI_I: 379 case VEC_MISALI_I:
342 info.si_code = BUS_ADRALN; 380 info.si_code = BUS_ADRALN;
343 sig = SIGBUS; 381 sig = SIGBUS;
344 printk(KERN_EMERG EXC_0x2A); 382 printk(KERN_NOTICE EXC_0x2A);
345 CHK_DEBUGGER_TRAP(); 383 CHK_DEBUGGER_TRAP();
346 break; 384 break;
347 /* 0x2B - Instruction CPLB protection Violation, 385 /* 0x2B - Instruction CPLB protection Violation,
@@ -349,14 +387,14 @@ asmlinkage void trap_c(struct pt_regs *fp)
349 case VEC_CPLB_I_VL: 387 case VEC_CPLB_I_VL:
350 info.si_code = ILL_CPLB_VI; 388 info.si_code = ILL_CPLB_VI;
351 sig = SIGILL; 389 sig = SIGILL;
352 printk(KERN_EMERG EXC_0x2B); 390 printk(KERN_NOTICE EXC_0x2B);
353 CHK_DEBUGGER_TRAP(); 391 CHK_DEBUGGER_TRAP();
354 break; 392 break;
355 /* 0x2C - Instruction CPLB miss, handled in _cplb_hdr */ 393 /* 0x2C - Instruction CPLB miss, handled in _cplb_hdr */
356 case VEC_CPLB_I_M: 394 case VEC_CPLB_I_M:
357 info.si_code = ILL_CPLB_MISS; 395 info.si_code = ILL_CPLB_MISS;
358 sig = SIGBUS; 396 sig = SIGBUS;
359 printk(KERN_EMERG EXC_0x2C); 397 printk(KERN_NOTICE EXC_0x2C);
360 CHK_DEBUGGER_TRAP(); 398 CHK_DEBUGGER_TRAP();
361 break; 399 break;
362 /* 0x2D - Instruction CPLB Multiple Hits, handled here */ 400 /* 0x2D - Instruction CPLB Multiple Hits, handled here */
@@ -364,10 +402,10 @@ asmlinkage void trap_c(struct pt_regs *fp)
364 info.si_code = ILL_CPLB_MULHIT; 402 info.si_code = ILL_CPLB_MULHIT;
365#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO 403#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
366 sig = SIGSEGV; 404 sig = SIGSEGV;
367 printk(KERN_EMERG "\n\nJump to address 0 - 0x0fff\n"); 405 printk(KERN_NOTICE "Jump to address 0 - 0x0fff\n");
368#else 406#else
369 sig = SIGILL; 407 sig = SIGILL;
370 printk(KERN_EMERG EXC_0x2D); 408 printk(KERN_NOTICE EXC_0x2D);
371#endif 409#endif
372 CHK_DEBUGGER_TRAP(); 410 CHK_DEBUGGER_TRAP();
373 break; 411 break;
@@ -375,7 +413,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
375 case VEC_ILL_RES: 413 case VEC_ILL_RES:
376 info.si_code = ILL_PRVOPC; 414 info.si_code = ILL_PRVOPC;
377 sig = SIGILL; 415 sig = SIGILL;
378 printk(KERN_EMERG EXC_0x2E); 416 printk(KERN_NOTICE EXC_0x2E);
379 CHK_DEBUGGER_TRAP(); 417 CHK_DEBUGGER_TRAP();
380 break; 418 break;
381 /* 0x2F - Reserved, Caught by default */ 419 /* 0x2F - Reserved, Caught by default */
@@ -404,38 +442,40 @@ asmlinkage void trap_c(struct pt_regs *fp)
404 break; 442 break;
405 } 443 }
406 444
407 if (sig != 0 && sig != SIGTRAP) { 445 BUG_ON(sig == 0);
446
447 if (sig != SIGTRAP) {
408 unsigned long stack; 448 unsigned long stack;
409 dump_bfin_regs(fp, (void *)fp->retx); 449 dump_bfin_regs(fp, (void *)fp->retx);
410 dump_bfin_trace_buffer(); 450
451 /* Print out the trace buffer if it makes sense */
452#ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
453 if (trapnr == VEC_CPLB_I_M || trapnr == VEC_CPLB_M)
454 printk(KERN_NOTICE "No trace since you do not have "
455 "CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE enabled\n"
456 KERN_NOTICE "\n");
457 else
458#endif
459 dump_bfin_trace_buffer();
411 show_stack(current, &stack); 460 show_stack(current, &stack);
412 if (current->mm == NULL) 461 if (oops_in_progress) {
462#ifndef CONFIG_ACCESS_CHECK
463 printk(KERN_EMERG "Hey - dork - please turn on "
464 "CONFIG_ACCESS_CHECK\n");
465#endif
413 panic("Kernel exception"); 466 panic("Kernel exception");
467 }
468
469 /* Ensure that bad return addresses don't end up in an infinite
470 * loop, due to speculative loads/reads
471 */
472 fp->pc = SAFE_USER_INSTRUCTION;
414 } 473 }
415 info.si_signo = sig; 474 info.si_signo = sig;
416 info.si_errno = 0; 475 info.si_errno = 0;
417 info.si_addr = (void *)fp->pc; 476 info.si_addr = (void *)fp->pc;
418 force_sig_info(sig, &info, current); 477 force_sig_info(sig, &info, current);
419 478
420 /* if the address that we are about to return to is not valid, set it
421 * to a valid address, if we have a current application or panic
422 */
423 if (!(fp->pc <= physical_mem_end
424#if L1_CODE_LENGTH != 0
425 || (fp->pc >= L1_CODE_START &&
426 fp->pc <= (L1_CODE_START + L1_CODE_LENGTH))
427#endif
428 )) {
429 if (current->mm) {
430 fp->pc = current->mm->start_code;
431 } else {
432 printk(KERN_EMERG
433 "I can't return to memory that doesn't exist"
434 " - bad things happen\n");
435 panic("Help - I've fallen and can't get up\n");
436 }
437 }
438
439 trace_buffer_restore(j); 479 trace_buffer_restore(j);
440 return; 480 return;
441} 481}
@@ -448,21 +488,21 @@ void dump_bfin_trace_buffer(void)
448{ 488{
449#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON 489#ifdef CONFIG_DEBUG_BFIN_HWTRACE_ON
450 int tflags, i = 0; 490 int tflags, i = 0;
491 char buf[150];
451#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND 492#ifdef CONFIG_DEBUG_BFIN_HWTRACE_EXPAND
452 int j, index; 493 int j, index;
453#endif 494#endif
454 495
455 trace_buffer_save(tflags); 496 trace_buffer_save(tflags);
456 497
457 printk(KERN_EMERG "Hardware Trace:\n"); 498 printk(KERN_NOTICE "Hardware Trace:\n");
458 499
459 if (likely(bfin_read_TBUFSTAT() & TBUFCNT)) { 500 if (likely(bfin_read_TBUFSTAT() & TBUFCNT)) {
460 for (; bfin_read_TBUFSTAT() & TBUFCNT; i++) { 501 for (; bfin_read_TBUFSTAT() & TBUFCNT; i++) {
461 printk(KERN_EMERG "%4i Target : ", i); 502 decode_address(buf, (unsigned long)bfin_read_TBUF());
462 printk_address((unsigned long)bfin_read_TBUF()); 503 printk(KERN_NOTICE "%4i Target : %s\n", i, buf);
463 printk("\n" KERN_EMERG " Source : "); 504 decode_address(buf, (unsigned long)bfin_read_TBUF());
464 printk_address((unsigned long)bfin_read_TBUF()); 505 printk(KERN_NOTICE " Source : %s\n", buf);
465 printk("\n");
466 } 506 }
467 } 507 }
468 508
@@ -474,17 +514,16 @@ void dump_bfin_trace_buffer(void)
474 514
475 j = (1 << CONFIG_DEBUG_BFIN_HWTRACE_EXPAND_LEN) * 128; 515 j = (1 << CONFIG_DEBUG_BFIN_HWTRACE_EXPAND_LEN) * 128;
476 while (j) { 516 while (j) {
477 printk(KERN_EMERG "%4i Target : ", i); 517 decode_address(buf, software_trace_buff[index]);
478 printk_address(software_trace_buff[index]); 518 printk(KERN_NOTICE "%4i Target : %s\n", i, buf);
479 index -= 1; 519 index -= 1;
480 if (index < 0 ) 520 if (index < 0 )
481 index = EXPAND_LEN; 521 index = EXPAND_LEN;
482 printk("\n" KERN_EMERG " Source : "); 522 decode_address(buf, software_trace_buff[index]);
483 printk_address(software_trace_buff[index]); 523 printk(KERN_NOTICE " Source : %s\n", buf);
484 index -= 1; 524 index -= 1;
485 if (index < 0) 525 if (index < 0)
486 index = EXPAND_LEN; 526 index = EXPAND_LEN;
487 printk("\n");
488 j--; 527 j--;
489 i++; 528 i++;
490 } 529 }
@@ -499,10 +538,7 @@ static void show_trace(struct task_struct *tsk, unsigned long *sp)
499{ 538{
500 unsigned long addr; 539 unsigned long addr;
501 540
502 printk("\nCall Trace:"); 541 printk(KERN_NOTICE "\n" KERN_NOTICE "Call Trace:\n");
503#ifdef CONFIG_KALLSYMS
504 printk("\n");
505#endif
506 542
507 while (!kstack_end(sp)) { 543 while (!kstack_end(sp)) {
508 addr = *sp++; 544 addr = *sp++;
@@ -518,7 +554,7 @@ static void show_trace(struct task_struct *tsk, unsigned long *sp)
518 print_ip_sym(addr); 554 print_ip_sym(addr);
519 } 555 }
520 556
521 printk("\n"); 557 printk(KERN_NOTICE "\n");
522} 558}
523 559
524void show_stack(struct task_struct *task, unsigned long *stack) 560void show_stack(struct task_struct *task, unsigned long *stack)
@@ -540,14 +576,15 @@ void show_stack(struct task_struct *task, unsigned long *stack)
540 addr = (unsigned long)stack; 576 addr = (unsigned long)stack;
541 endstack = (unsigned long *)PAGE_ALIGN(addr); 577 endstack = (unsigned long *)PAGE_ALIGN(addr);
542 578
543 printk(KERN_EMERG "Stack from %08lx:", (unsigned long)stack); 579 printk(KERN_NOTICE "Stack from %08lx:", (unsigned long)stack);
544 for (i = 0; i < kstack_depth_to_print; i++) { 580 for (i = 0; i < kstack_depth_to_print; i++) {
545 if (stack + 1 > endstack) 581 if (stack + 1 > endstack)
546 break; 582 break;
547 if (i % 8 == 0) 583 if (i % 8 == 0)
548 printk("\n" KERN_EMERG " "); 584 printk("\n" KERN_NOTICE " ");
549 printk(" %08lx", *stack++); 585 printk(" %08lx", *stack++);
550 } 586 }
587 printk("\n");
551 588
552 show_trace(task, stack); 589 show_trace(task, stack);
553} 590}
@@ -568,33 +605,34 @@ EXPORT_SYMBOL(dump_stack);
568 605
569void dump_bfin_regs(struct pt_regs *fp, void *retaddr) 606void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
570{ 607{
571 if (current->pid) { 608 char buf [150];
572 printk(KERN_EMERG "\n" KERN_EMERG "CURRENT PROCESS:\n" 609
573 KERN_EMERG "\n"); 610 if (!oops_in_progress) {
574 printk(KERN_EMERG "COMM=%s PID=%d\n", 611 if (current->pid && current->mm) {
575 current->comm, current->pid); 612 printk(KERN_NOTICE "\n" KERN_NOTICE "CURRENT PROCESS:\n");
613 printk(KERN_NOTICE "COMM=%s PID=%d\n",
614 current->comm, current->pid);
615
616 printk(KERN_NOTICE "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n"
617 KERN_NOTICE "BSS = 0x%p-0x%p USER-STACK = 0x%p\n"
618 KERN_NOTICE "\n",
619 (void *)current->mm->start_code,
620 (void *)current->mm->end_code,
621 (void *)current->mm->start_data,
622 (void *)current->mm->end_data,
623 (void *)current->mm->end_data,
624 (void *)current->mm->brk,
625 (void *)current->mm->start_stack);
626 } else {
627 printk (KERN_NOTICE "\n" KERN_NOTICE
628 "No Valid pid - Either things are really messed up,"
629 " or you are in the kernel\n");
630 }
576 } else { 631 } else {
577 printk 632 printk(KERN_NOTICE "Kernel or interrupt exception\n");
578 (KERN_EMERG "\n" KERN_EMERG
579 "No Valid pid - Either things are really messed up,"
580 " or you are in the kernel\n");
581 }
582
583 if (current->mm) {
584 printk(KERN_EMERG "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n"
585 KERN_EMERG "BSS = 0x%p-0x%p USER-STACK = 0x%p\n"
586 KERN_EMERG "\n",
587 (void *)current->mm->start_code,
588 (void *)current->mm->end_code,
589 (void *)current->mm->start_data,
590 (void *)current->mm->end_data,
591 (void *)current->mm->end_data,
592 (void *)current->mm->brk,
593 (void *)current->mm->start_stack);
594 } 633 }
595 634
596 printk(KERN_EMERG "return address: [0x%p]; contents of:", retaddr); 635 if (retaddr >= (void *)FIXED_CODE_START && retaddr < (void *)physical_mem_end
597 if (retaddr != 0 && retaddr <= (void *)physical_mem_end
598#if L1_CODE_LENGTH != 0 636#if L1_CODE_LENGTH != 0
599 /* FIXME: Copy the code out of L1 Instruction SRAM through dma 637 /* FIXME: Copy the code out of L1 Instruction SRAM through dma
600 memcpy. */ 638 memcpy. */
@@ -604,18 +642,20 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
604 ) { 642 ) {
605 int i = ((unsigned int)retaddr & 0xFFFFFFF0) - 32; 643 int i = ((unsigned int)retaddr & 0xFFFFFFF0) - 32;
606 unsigned short x = 0; 644 unsigned short x = 0;
645 printk(KERN_NOTICE "return address: [0x%p]; contents of:", retaddr);
607 for (; i < ((unsigned int)retaddr & 0xFFFFFFF0) + 32; i += 2) { 646 for (; i < ((unsigned int)retaddr & 0xFFFFFFF0) + 32; i += 2) {
608 if (!(i & 0xF)) 647 if (!(i & 0xF))
609 printk("\n" KERN_EMERG "0x%08x: ", i); 648 printk("\n" KERN_NOTICE "0x%08x: ", i);
610 649
611 if (get_user(x, (unsigned short *)i)) 650 if (get_user(x, (unsigned short *)i))
612 break; 651 break;
613#ifndef CONFIG_DEBUG_HWERR 652#ifndef CONFIG_DEBUG_HWERR
614 /* If one of the last few instructions was a STI 653 /* If one of the last few instructions was a STI
615 * it is likely that the error occured awhile ago 654 * it is likely that the error occured awhile ago
616 * and we just noticed 655 * and we just noticed. This only happens in kernel
656 * context, which should mean an oops is happening
617 */ 657 */
618 if (x >= 0x0040 && x <= 0x0047 && i <= 0) 658 if (oops_in_progress && x >= 0x0040 && x <= 0x0047 && i <= 0)
619 panic("\n\nWARNING : You should reconfigure" 659 panic("\n\nWARNING : You should reconfigure"
620 " the kernel to turn on\n" 660 " the kernel to turn on\n"
621 " 'Hardware error interrupt" 661 " 'Hardware error interrupt"
@@ -628,56 +668,60 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
628 else 668 else
629 printk(" %04x ", x); 669 printk(" %04x ", x);
630 } 670 }
631 printk("\n" KERN_EMERG "\n"); 671 printk("\n");
632 } else 672 } else
633 printk(KERN_EMERG 673 printk("\n" KERN_NOTICE
634 "Cannot look at the [PC] for it is" 674 "Cannot look at the [PC] for it is"
635 "in unreadable L1 SRAM - sorry\n"); 675 " in unreadable memory - sorry\n");
676
677 printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n");
678 printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n",
679 (long)fp->seqstat, fp->ipend, fp->syscfg);
636 680
681 decode_address(buf, fp->rete);
682 printk(KERN_NOTICE " RETE: %s\n", buf);
683 decode_address(buf, fp->retn);
684 printk(KERN_NOTICE " RETN: %s\n", buf);
685 decode_address(buf, fp->retx);
686 printk(KERN_NOTICE " RETX: %s\n", buf);
687 decode_address(buf, fp->rets);
688 printk(KERN_NOTICE " RETS: %s\n", buf);
637 689
638 printk(KERN_EMERG 690 if ((long)fp->seqstat & SEQSTAT_EXCAUSE) {
639 "RETE: %08lx RETN: %08lx RETX: %08lx RETS: %08lx\n", 691 decode_address(buf, bfin_read_DCPLB_FAULT_ADDR());
640 fp->rete, fp->retn, fp->retx, fp->rets); 692 printk(KERN_NOTICE "DCPLB_FAULT_ADDR: %s\n", buf);
641 printk(KERN_EMERG "IPEND: %04lx SYSCFG: %04lx\n", 693 decode_address(buf, bfin_read_ICPLB_FAULT_ADDR());
642 fp->ipend, fp->syscfg); 694 printk(KERN_NOTICE "ICPLB_FAULT_ADDR: %s\n", buf);
643 printk(KERN_EMERG "SEQSTAT: %08lx SP: %08lx\n", 695 }
644 (long)fp->seqstat, (long)fp); 696
645 printk(KERN_EMERG "R0: %08lx R1: %08lx R2: %08lx R3: %08lx\n", 697 printk(KERN_NOTICE "\n" KERN_NOTICE "PROCESSOR STATE:\n");
698 printk(KERN_NOTICE " R0 : %08lx R1 : %08lx R2 : %08lx R3 : %08lx\n",
646 fp->r0, fp->r1, fp->r2, fp->r3); 699 fp->r0, fp->r1, fp->r2, fp->r3);
647 printk(KERN_EMERG "R4: %08lx R5: %08lx R6: %08lx R7: %08lx\n", 700 printk(KERN_NOTICE " R4 : %08lx R5 : %08lx R6 : %08lx R7 : %08lx\n",
648 fp->r4, fp->r5, fp->r6, fp->r7); 701 fp->r4, fp->r5, fp->r6, fp->r7);
649 printk(KERN_EMERG "P0: %08lx P1: %08lx P2: %08lx P3: %08lx\n", 702 printk(KERN_NOTICE " P0 : %08lx P1 : %08lx P2 : %08lx P3 : %08lx\n",
650 fp->p0, fp->p1, fp->p2, fp->p3); 703 fp->p0, fp->p1, fp->p2, fp->p3);
651 printk(KERN_EMERG 704 printk(KERN_NOTICE " P4 : %08lx P5 : %08lx FP : %08lx SP : %08lx\n",
652 "P4: %08lx P5: %08lx FP: %08lx\n", 705 fp->p4, fp->p5, fp->fp, (long)fp);
653 fp->p4, fp->p5, fp->fp); 706 printk(KERN_NOTICE " LB0: %08lx LT0: %08lx LC0: %08lx\n",
654 printk(KERN_EMERG
655 "A0.w: %08lx A0.x: %08lx A1.w: %08lx A1.x: %08lx\n",
656 fp->a0w, fp->a0x, fp->a1w, fp->a1x);
657
658 printk(KERN_EMERG "LB0: %08lx LT0: %08lx LC0: %08lx\n",
659 fp->lb0, fp->lt0, fp->lc0); 707 fp->lb0, fp->lt0, fp->lc0);
660 printk(KERN_EMERG "LB1: %08lx LT1: %08lx LC1: %08lx\n", 708 printk(KERN_NOTICE " LB1: %08lx LT1: %08lx LC1: %08lx\n",
661 fp->lb1, fp->lt1, fp->lc1); 709 fp->lb1, fp->lt1, fp->lc1);
662 printk(KERN_EMERG "B0: %08lx L0: %08lx M0: %08lx I0: %08lx\n", 710 printk(KERN_NOTICE " B0 : %08lx L0 : %08lx M0 : %08lx I0 : %08lx\n",
663 fp->b0, fp->l0, fp->m0, fp->i0); 711 fp->b0, fp->l0, fp->m0, fp->i0);
664 printk(KERN_EMERG "B1: %08lx L1: %08lx M1: %08lx I1: %08lx\n", 712 printk(KERN_NOTICE " B1 : %08lx L1 : %08lx M1 : %08lx I1 : %08lx\n",
665 fp->b1, fp->l1, fp->m1, fp->i1); 713 fp->b1, fp->l1, fp->m1, fp->i1);
666 printk(KERN_EMERG "B2: %08lx L2: %08lx M2: %08lx I2: %08lx\n", 714 printk(KERN_NOTICE " B2 : %08lx L2 : %08lx M2 : %08lx I2 : %08lx\n",
667 fp->b2, fp->l2, fp->m2, fp->i2); 715 fp->b2, fp->l2, fp->m2, fp->i2);
668 printk(KERN_EMERG "B3: %08lx L3: %08lx M3: %08lx I3: %08lx\n", 716 printk(KERN_NOTICE " B3 : %08lx L3 : %08lx M3 : %08lx I3 : %08lx\n",
669 fp->b3, fp->l3, fp->m3, fp->i3); 717 fp->b3, fp->l3, fp->m3, fp->i3);
718 printk(KERN_NOTICE "A0.w: %08lx A0.x: %08lx A1.w: %08lx A1.x: %08lx\n",
719 fp->a0w, fp->a0x, fp->a1w, fp->a1x);
670 720
671 printk(KERN_EMERG "\n" KERN_EMERG "USP: %08lx ASTAT: %08lx\n", 721 printk(KERN_NOTICE "USP : %08lx ASTAT: %08lx\n",
672 rdusp(), fp->astat); 722 rdusp(), fp->astat);
673 if ((long)fp->seqstat & SEQSTAT_EXCAUSE) {
674 printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n",
675 (void *)bfin_read_DCPLB_FAULT_ADDR());
676 printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n",
677 (void *)bfin_read_ICPLB_FAULT_ADDR());
678 }
679 723
680 printk("\n\n"); 724 printk(KERN_NOTICE "\n");
681} 725}
682 726
683#ifdef CONFIG_SYS_BFIN_SPINLOCK_L1 727#ifdef CONFIG_SYS_BFIN_SPINLOCK_L1
@@ -752,6 +796,8 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp)
752 break; 796 break;
753 } 797 }
754 798
799 oops_in_progress = 1;
800
755 printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR()); 801 printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR());
756 printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR()); 802 printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR());
757 dump_bfin_regs(fp, (void *)fp->retx); 803 dump_bfin_regs(fp, (void *)fp->retx);
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S
index eec43674a465..9b75bc83c71f 100644
--- a/arch/blackfin/kernel/vmlinux.lds.S
+++ b/arch/blackfin/kernel/vmlinux.lds.S
@@ -172,9 +172,14 @@ SECTIONS
172 __ebss_b_l1 = .; 172 __ebss_b_l1 = .;
173 } 173 }
174 174
175 ___init_end = LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1); 175 /* Force trailing alignment of our init section so that when we
176 176 * free our init memory, we don't leave behind a partial page.
177 .bss LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1) : 177 */
178 . = LOADADDR(.data_b_l1) + SIZEOF(.data_b_l1);
179 . = ALIGN(PAGE_SIZE);
180 ___init_end = .;
181
182 .bss :
178 { 183 {
179 . = ALIGN(4); 184 . = ALIGN(4);
180 ___bss_start = .; 185 ___bss_start = .;
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c
index 3e884f3a8182..bf1bedcc8868 100644
--- a/arch/blackfin/mach-bf527/boards/ezkit.c
+++ b/arch/blackfin/mach-bf527/boards/ezkit.c
@@ -41,9 +41,11 @@
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 <asm/cplb.h>
44#include <asm/dma.h> 45#include <asm/dma.h>
45#include <asm/bfin5xx_spi.h> 46#include <asm/bfin5xx_spi.h>
46#include <asm/reboot.h> 47#include <asm/reboot.h>
48#include <asm/nand.h>
47#include <linux/spi/ad7877.h> 49#include <linux/spi/ad7877.h>
48 50
49/* 51/*
@@ -102,6 +104,53 @@ void __exit bfin_isp1761_exit(void)
102arch_initcall(bfin_isp1761_init); 104arch_initcall(bfin_isp1761_init);
103#endif 105#endif
104 106
107#if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
108static struct mtd_partition partition_info[] = {
109 {
110 .name = "Linux Kernel",
111 .offset = 0,
112 .size = 4 * SIZE_1M,
113 },
114 {
115 .name = "File System",
116 .offset = 4 * SIZE_1M,
117 .size = (256 - 4) * SIZE_1M,
118 },
119};
120
121static struct bf5xx_nand_platform bf5xx_nand_platform = {
122 .page_size = NFC_PG_SIZE_256,
123 .data_width = NFC_NWIDTH_8,
124 .partitions = partition_info,
125 .nr_partitions = ARRAY_SIZE(partition_info),
126 .rd_dly = 3,
127 .wr_dly = 3,
128};
129
130static struct resource bf5xx_nand_resources[] = {
131 {
132 .start = NFC_CTL,
133 .end = NFC_DATA_RD + 2,
134 .flags = IORESOURCE_MEM,
135 },
136 {
137 .start = CH_NFC,
138 .end = CH_NFC,
139 .flags = IORESOURCE_IRQ,
140 },
141};
142
143static struct platform_device bf5xx_nand_device = {
144 .name = "bf5xx-nand",
145 .id = 0,
146 .num_resources = ARRAY_SIZE(bf5xx_nand_resources),
147 .resource = bf5xx_nand_resources,
148 .dev = {
149 .platform_data = &bf5xx_nand_platform,
150 },
151};
152#endif
153
105#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) 154#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
106static struct resource bfin_pcmcia_cf_resources[] = { 155static struct resource bfin_pcmcia_cf_resources[] = {
107 { 156 {
@@ -650,6 +699,10 @@ static struct platform_device bfin_pata_device = {
650#endif 699#endif
651 700
652static struct platform_device *stamp_devices[] __initdata = { 701static struct platform_device *stamp_devices[] __initdata = {
702#if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
703 &bf5xx_nand_device,
704#endif
705
653#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE) 706#if defined(CONFIG_BFIN_CFPCMCIA) || defined(CONFIG_BFIN_CFPCMCIA_MODULE)
654 &bfin_pcmcia_cf_device, 707 &bfin_pcmcia_cf_device,
655#endif 708#endif
diff --git a/arch/blackfin/mach-bf533/boards/H8606.c b/arch/blackfin/mach-bf533/boards/H8606.c
new file mode 100644
index 000000000000..b941550f9568
--- /dev/null
+++ b/arch/blackfin/mach-bf533/boards/H8606.c
@@ -0,0 +1,345 @@
1/*
2 * File: arch/blackfin/mach-bf533/H8606.c
3 * Based on: arch/blackfin/mach-bf533/stamp.c
4 * Author: Javier Herrero <jherrero@hvsistemas.es>
5 *
6 * Created: 2007
7 * Description: Board Info File for the HV Sistemas H8606 board
8 *
9 * Modified:
10 * Copyright 2005 National ICT Australia (NICTA)
11 * Copyright 2004-2006 Analog Devices Inc
12 * Copyright 2007 HV Sistemas S.L.
13 *
14 * Bugs: Enter bugs at http://blackfin.uclinux.org/
15 *
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, see the file COPYING, or write
28 * to the Free Software Foundation, Inc.,
29 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30 */
31
32#include <linux/device.h>
33#include <linux/platform_device.h>
34#include <linux/mtd/mtd.h>
35#include <linux/mtd/partitions.h>
36#include <linux/spi/spi.h>
37#include <linux/spi/flash.h>
38#if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
39#include <linux/usb_isp1362.h>
40#endif
41#include <linux/pata_platform.h>
42#include <linux/irq.h>
43#include <asm/dma.h>
44#include <asm/bfin5xx_spi.h>
45#include <asm/reboot.h>
46
47/*
48 * Name the Board for the /proc/cpuinfo
49 */
50const char bfin_board_name[] = "HV Sistemas H8606";
51
52#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_BFIN_MODULE)
53static struct platform_device rtc_device = {
54 .name = "rtc-bfin",
55 .id = -1,
56};
57#endif
58
59/*
60* Driver needs to know address, irq and flag pin.
61 */
62 #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
63static struct resource dm9000_resources[] = {
64 [0] = {
65 .start = 0x20300000,
66 .end = 0x20300000 + 8,
67 .flags = IORESOURCE_MEM,
68 },
69 [1] = {
70 .start = IRQ_PF10,
71 .end = IRQ_PF10,
72 .flags = (IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE),
73 },
74};
75
76static struct platform_device dm9000_device = {
77 .id = 0,
78 .name = "dm9000",
79 .resource = dm9000_resources,
80 .num_resources = ARRAY_SIZE(dm9000_resources),
81};
82#endif
83
84#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
85static struct resource smc91x_resources[] = {
86 {
87 .name = "smc91x-regs",
88 .start = 0x20300300,
89 .end = 0x20300300 + 16,
90 .flags = IORESOURCE_MEM,
91 }, {
92 .start = IRQ_PROG_INTB,
93 .end = IRQ_PROG_INTB,
94 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
95 }, {
96 /*
97 * denotes the flag pin and is used directly if
98 * CONFIG_IRQCHIP_DEMUX_GPIO is defined.
99 */
100 .start = IRQ_PF7,
101 .end = IRQ_PF7,
102 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
103 },
104};
105
106static struct platform_device smc91x_device = {
107 .name = "smc91x",
108 .id = 0,
109 .num_resources = ARRAY_SIZE(smc91x_resources),
110 .resource = smc91x_resources,
111};
112#endif
113
114#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
115static struct resource net2272_bfin_resources[] = {
116 {
117 .start = 0x20300000,
118 .end = 0x20300000 + 0x100,
119 .flags = IORESOURCE_MEM,
120 }, {
121 .start = IRQ_PF10,
122 .end = IRQ_PF10,
123 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
124 },
125};
126
127static struct platform_device net2272_bfin_device = {
128 .name = "net2272",
129 .id = -1,
130 .num_resources = ARRAY_SIZE(net2272_bfin_resources),
131 .resource = net2272_bfin_resources,
132};
133#endif
134
135#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
136/* all SPI peripherals info goes here */
137
138#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
139static struct mtd_partition bfin_spi_flash_partitions[] = {
140 {
141 .name = "bootloader",
142 .size = 0x00060000,
143 .offset = 0,
144 .mask_flags = MTD_CAP_ROM
145 }, {
146 .name = "kernel",
147 .size = 0x100000,
148 .offset = 0x60000
149 }, {
150 .name = "file system",
151 .size = 0x6a0000,
152 .offset = 0x00160000,
153 }
154};
155
156static struct flash_platform_data bfin_spi_flash_data = {
157 .name = "m25p80",
158 .parts = bfin_spi_flash_partitions,
159 .nr_parts = ARRAY_SIZE(bfin_spi_flash_partitions),
160 .type = "m25p64",
161};
162
163/* SPI flash chip (m25p64) */
164static struct bfin5xx_spi_chip spi_flash_chip_info = {
165 .enable_dma = 0, /* use dma transfer with this chip*/
166 .bits_per_word = 8,
167};
168#endif
169
170#if defined(CONFIG_SPI_ADC_BF533) || defined(CONFIG_SPI_ADC_BF533_MODULE)
171/* SPI ADC chip */
172static struct bfin5xx_spi_chip spi_adc_chip_info = {
173 .ctl_reg = 0x1000,
174 .enable_dma = 1, /* use dma transfer with this chip*/
175 .bits_per_word = 16,
176};
177#endif
178
179#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
180static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
181 .ctl_reg = 0x1000,
182 .enable_dma = 0,
183 .bits_per_word = 16,
184};
185#endif
186
187#if defined(CONFIG_PBX)
188static struct bfin5xx_spi_chip spi_si3xxx_chip_info = {
189 .ctl_reg = 0x1c04,
190 .enable_dma = 0,
191 .bits_per_word = 8,
192 .cs_change_per_word = 1,
193};
194#endif
195
196/* Notice: for blackfin, the speed_hz is the value of register
197 * SPI_BAUD, not the real baudrate */
198static struct spi_board_info bfin_spi_board_info[] __initdata = {
199#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
200 {
201 /* the modalias must be the same as spi device driver name */
202 .modalias = "m25p80", /* Name of spi_driver for this device */
203 /* this value is the baudrate divisor */
204 .max_speed_hz = 50000000, /* actual baudrate is SCLK/(2xspeed_hz) */
205 .bus_num = 0, /* Framework bus number */
206 .chip_select = 2, /* Framework chip select. On STAMP537 it is SPISSEL2*/
207 .platform_data = &bfin_spi_flash_data,
208 .controller_data = &spi_flash_chip_info,
209 .mode = SPI_MODE_3,
210 },
211#endif
212
213#if defined(CONFIG_SPI_ADC_BF533) || defined(CONFIG_SPI_ADC_BF533_MODULE)
214 {
215 .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */
216 .max_speed_hz = 4, /* actual baudrate is SCLK/(2xspeed_hz) */
217 .bus_num = 1, /* Framework bus number */
218 .chip_select = 1, /* Framework chip select. */
219 .platform_data = NULL, /* No spi_driver specific config */
220 .controller_data = &spi_adc_chip_info,
221 },
222#endif
223
224#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
225 {
226 .modalias = "ad1836-spi",
227 .max_speed_hz = 16,
228 .bus_num = 1,
229 .chip_select = CONFIG_SND_BLACKFIN_SPI_PFBIT,
230 .controller_data = &ad1836_spi_chip_info,
231 },
232#endif
233
234#if defined(CONFIG_PBX)
235 {
236 .modalias = "fxs-spi",
237 .max_speed_hz = 4,
238 .bus_num = 1,
239 .chip_select = 3,
240 .controller_data = &spi_si3xxx_chip_info,
241 },
242
243 {
244 .modalias = "fxo-spi",
245 .max_speed_hz = 4,
246 .bus_num = 1,
247 .chip_select = 2,
248 .controller_data = &spi_si3xxx_chip_info,
249 },
250#endif
251};
252
253/* SPI (0) */
254static struct resource bfin_spi0_resource[] = {
255 [0] = {
256 .start = SPI0_REGBASE,
257 .end = SPI0_REGBASE + 0xFF,
258 .flags = IORESOURCE_MEM,
259 },
260 [1] = {
261 .start = CH_SPI,
262 .end = CH_SPI,
263 .flags = IORESOURCE_IRQ,
264 }
265};
266
267
268/* SPI controller data */
269static struct bfin5xx_spi_master bfin_spi0_info = {
270 .num_chipselect = 8,
271 .enable_dma = 1, /* master has the ability to do dma transfer */
272};
273
274static struct platform_device bfin_spi0_device = {
275 .name = "bfin-spi",
276 .id = 0, /* Bus number */
277 .num_resources = ARRAY_SIZE(bfin_spi0_resource),
278 .resource = bfin_spi0_resource,
279 .dev = {
280 .platform_data = &bfin_spi0_info, /* Passed to driver */
281 },
282};
283#endif /* spi master and devices */
284
285#if defined(CONFIG_FB_BF537_LQ035) || defined(CONFIG_FB_BF537_LQ035_MODULE)
286static struct platform_device bfin_fb_device = {
287 .name = "bf537-fb",
288};
289#endif
290
291#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
292static struct resource bfin_uart_resources[] = {
293 {
294 .start = 0xFFC00400,
295 .end = 0xFFC004FF,
296 .flags = IORESOURCE_MEM,
297 },
298};
299
300static struct platform_device bfin_uart_device = {
301 .name = "bfin-uart",
302 .id = 1,
303 .num_resources = ARRAY_SIZE(bfin_uart_resources),
304 .resource = bfin_uart_resources,
305};
306#endif
307
308static struct platform_device *stamp_devices[] __initdata = {
309#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
310 &rtc_device,
311#endif
312
313#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
314 &dm9000_device,
315#endif
316
317#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
318 &smc91x_device,
319#endif
320
321#if defined(CONFIG_USB_NET2272) || defined(CONFIG_USB_NET2272_MODULE)
322 &net2272_bfin_device,
323#endif
324
325#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
326 &bfin_spi0_device,
327#endif
328
329#if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
330 &bfin_uart_device,
331#endif
332};
333
334static int __init H8606_init(void)
335{
336 printk(KERN_INFO "HV Sistemas H8606 board support by http://www.hvsistemas.com\n");
337 printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__);
338 platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
339#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
340 spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
341#endif
342 return 0;
343}
344
345arch_initcall(H8606_init); \ No newline at end of file
diff --git a/arch/blackfin/mach-bf533/boards/Makefile b/arch/blackfin/mach-bf533/boards/Makefile
index 12a631ab389d..2452b456ccbd 100644
--- a/arch/blackfin/mach-bf533/boards/Makefile
+++ b/arch/blackfin/mach-bf533/boards/Makefile
@@ -6,3 +6,4 @@ obj-$(CONFIG_GENERIC_BOARD) += generic_board.o
6obj-$(CONFIG_BFIN533_STAMP) += stamp.o 6obj-$(CONFIG_BFIN533_STAMP) += stamp.o
7obj-$(CONFIG_BFIN533_EZKIT) += ezkit.o 7obj-$(CONFIG_BFIN533_EZKIT) += ezkit.o
8obj-$(CONFIG_BFIN533_BLUETECHNIX_CM) += cm_bf533.o 8obj-$(CONFIG_BFIN533_BLUETECHNIX_CM) += cm_bf533.o
9obj-$(CONFIG_H8606_HVSISTEMAS) += H8606.o
diff --git a/arch/blackfin/mach-bf533/boards/cm_bf533.c b/arch/blackfin/mach-bf533/boards/cm_bf533.c
index 1c5a86adfab7..a863522a4467 100644
--- a/arch/blackfin/mach-bf533/boards/cm_bf533.c
+++ b/arch/blackfin/mach-bf533/boards/cm_bf533.c
@@ -46,7 +46,7 @@ const char bfin_board_name[] = "Bluetechnix CM BF533";
46 46
47#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) 47#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
48/* all SPI peripherals info goes here */ 48/* all SPI peripherals info goes here */
49 49#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
50static struct mtd_partition bfin_spi_flash_partitions[] = { 50static struct mtd_partition bfin_spi_flash_partitions[] = {
51 { 51 {
52 .name = "bootloader", 52 .name = "bootloader",
@@ -76,12 +76,15 @@ static struct bfin5xx_spi_chip spi_flash_chip_info = {
76 .enable_dma = 0, /* use dma transfer with this chip*/ 76 .enable_dma = 0, /* use dma transfer with this chip*/
77 .bits_per_word = 8, 77 .bits_per_word = 8,
78}; 78};
79#endif
79 80
80/* SPI ADC chip */ 81/* SPI ADC chip */
82#if defined(CONFIG_SPI_ADC_BF533) || defined(CONFIG_SPI_ADC_BF533_MODULE)
81static struct bfin5xx_spi_chip spi_adc_chip_info = { 83static struct bfin5xx_spi_chip spi_adc_chip_info = {
82 .enable_dma = 1, /* use dma transfer with this chip*/ 84 .enable_dma = 1, /* use dma transfer with this chip*/
83 .bits_per_word = 16, 85 .bits_per_word = 16,
84}; 86};
87#endif
85 88
86#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) 89#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
87static struct bfin5xx_spi_chip ad1836_spi_chip_info = { 90static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
@@ -90,7 +93,15 @@ static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
90}; 93};
91#endif 94#endif
92 95
96#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
97static struct bfin5xx_spi_chip spi_mmc_chip_info = {
98 .enable_dma = 1,
99 .bits_per_word = 8,
100};
101#endif
102
93static struct spi_board_info bfin_spi_board_info[] __initdata = { 103static struct spi_board_info bfin_spi_board_info[] __initdata = {
104#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
94 { 105 {
95 /* the modalias must be the same as spi device driver name */ 106 /* the modalias must be the same as spi device driver name */
96 .modalias = "m25p80", /* Name of spi_driver for this device */ 107 .modalias = "m25p80", /* Name of spi_driver for this device */
@@ -100,7 +111,11 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
100 .platform_data = &bfin_spi_flash_data, 111 .platform_data = &bfin_spi_flash_data,
101 .controller_data = &spi_flash_chip_info, 112 .controller_data = &spi_flash_chip_info,
102 .mode = SPI_MODE_3, 113 .mode = SPI_MODE_3,
103 }, { 114 },
115#endif
116
117#if defined(CONFIG_SPI_ADC_BF533) || defined(CONFIG_SPI_ADC_BF533_MODULE)
118 {
104 .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */ 119 .modalias = "bfin_spi_adc", /* Name of spi_driver for this device */
105 .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */ 120 .max_speed_hz = 6250000, /* max spi clock (SCK) speed in HZ */
106 .bus_num = 0, /* Framework bus number */ 121 .bus_num = 0, /* Framework bus number */
@@ -108,6 +123,8 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
108 .platform_data = NULL, /* No spi_driver specific config */ 123 .platform_data = NULL, /* No spi_driver specific config */
109 .controller_data = &spi_adc_chip_info, 124 .controller_data = &spi_adc_chip_info,
110 }, 125 },
126#endif
127
111#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE) 128#if defined(CONFIG_SND_BLACKFIN_AD1836) || defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
112 { 129 {
113 .modalias = "ad1836-spi", 130 .modalias = "ad1836-spi",
@@ -117,6 +134,27 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
117 .controller_data = &ad1836_spi_chip_info, 134 .controller_data = &ad1836_spi_chip_info,
118 }, 135 },
119#endif 136#endif
137
138#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
139 {
140 .modalias = "spi_mmc_dummy",
141 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */
142 .bus_num = 0,
143 .chip_select = 0,
144 .platform_data = NULL,
145 .controller_data = &spi_mmc_chip_info,
146 .mode = SPI_MODE_3,
147 },
148 {
149 .modalias = "spi_mmc",
150 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */
151 .bus_num = 0,
152 .chip_select = CONFIG_SPI_MMC_CS_CHAN,
153 .platform_data = NULL,
154 .controller_data = &spi_mmc_chip_info,
155 .mode = SPI_MODE_3,
156 },
157#endif
120}; 158};
121 159
122/* SPI (0) */ 160/* SPI (0) */
diff --git a/arch/blackfin/mach-bf533/boards/stamp.c b/arch/blackfin/mach-bf533/boards/stamp.c
index f84be4eabfd1..62ffa500420f 100644
--- a/arch/blackfin/mach-bf533/boards/stamp.c
+++ b/arch/blackfin/mach-bf533/boards/stamp.c
@@ -218,7 +218,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
218#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) 218#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
219 { 219 {
220 .modalias = "spi_mmc_dummy", 220 .modalias = "spi_mmc_dummy",
221 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ 221 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
222 .bus_num = 0, 222 .bus_num = 0,
223 .chip_select = 0, 223 .chip_select = 0,
224 .platform_data = NULL, 224 .platform_data = NULL,
@@ -227,7 +227,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
227 }, 227 },
228 { 228 {
229 .modalias = "spi_mmc", 229 .modalias = "spi_mmc",
230 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ 230 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
231 .bus_num = 0, 231 .bus_num = 0,
232 .chip_select = CONFIG_SPI_MMC_CS_CHAN, 232 .chip_select = CONFIG_SPI_MMC_CS_CHAN,
233 .platform_data = NULL, 233 .platform_data = NULL,
diff --git a/arch/blackfin/mach-bf537/boards/cm_bf537.c b/arch/blackfin/mach-bf537/boards/cm_bf537.c
index 52e2320307de..2915931045e3 100644
--- a/arch/blackfin/mach-bf537/boards/cm_bf537.c
+++ b/arch/blackfin/mach-bf537/boards/cm_bf537.c
@@ -281,8 +281,8 @@ static struct resource net2272_bfin_resources[] = {
281 .end = 0x20200000 + 0x100, 281 .end = 0x20200000 + 0x100,
282 .flags = IORESOURCE_MEM, 282 .flags = IORESOURCE_MEM,
283 }, { 283 }, {
284 .start = IRQ_PF7, 284 .start = IRQ_PH14,
285 .end = IRQ_PF7, 285 .end = IRQ_PH14,
286 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, 286 .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
287 }, 287 },
288}; 288};
diff --git a/arch/blackfin/mach-bf537/boards/stamp.c b/arch/blackfin/mach-bf537/boards/stamp.c
index cc41f6c2ef4f..5f7b91fbafe8 100644
--- a/arch/blackfin/mach-bf537/boards/stamp.c
+++ b/arch/blackfin/mach-bf537/boards/stamp.c
@@ -450,7 +450,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
450#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE) 450#if defined(CONFIG_SPI_MMC) || defined(CONFIG_SPI_MMC_MODULE)
451 { 451 {
452 .modalias = "spi_mmc_dummy", 452 .modalias = "spi_mmc_dummy",
453 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ 453 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
454 .bus_num = 0, 454 .bus_num = 0,
455 .chip_select = 0, 455 .chip_select = 0,
456 .platform_data = NULL, 456 .platform_data = NULL,
@@ -459,7 +459,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
459 }, 459 },
460 { 460 {
461 .modalias = "spi_mmc", 461 .modalias = "spi_mmc",
462 .max_speed_hz = 25000000, /* max spi clock (SCK) speed in HZ */ 462 .max_speed_hz = 20000000, /* max spi clock (SCK) speed in HZ */
463 .bus_num = 0, 463 .bus_num = 0,
464 .chip_select = CONFIG_SPI_MMC_CS_CHAN, 464 .chip_select = CONFIG_SPI_MMC_CS_CHAN,
465 .platform_data = NULL, 465 .platform_data = NULL,
@@ -612,7 +612,7 @@ static struct platform_device bfin_sport1_uart_device = {
612 612
613static struct pata_platform_info bfin_pata_platform_data = { 613static struct pata_platform_info bfin_pata_platform_data = {
614 .ioport_shift = 1, 614 .ioport_shift = 1,
615 .irq_type = IRQF_TRIGGER_HIGH | IRQF_DISABLED, 615 .irq_flags = IRQF_TRIGGER_HIGH | IRQF_DISABLED,
616}; 616};
617 617
618static struct resource bfin_pata_resources[] = { 618static struct resource bfin_pata_resources[] = {
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S
index e3ad5802868a..1b13fa470977 100644
--- a/arch/blackfin/mach-common/entry.S
+++ b/arch/blackfin/mach-common/entry.S
@@ -917,7 +917,7 @@ ENTRY(_ex_table)
917 .long _ex_soft_bp /* 0x01 - User Defined - Software breakpoint */ 917 .long _ex_soft_bp /* 0x01 - User Defined - Software breakpoint */
918 .long _ex_replaceable /* 0x02 - User Defined */ 918 .long _ex_replaceable /* 0x02 - User Defined */
919 .long _ex_trap_c /* 0x03 - User Defined - userspace stack overflow */ 919 .long _ex_trap_c /* 0x03 - User Defined - userspace stack overflow */
920 .long _ex_replaceable /* 0x04 - User Defined */ 920 .long _ex_trap_c /* 0x04 - User Defined - dump trace buffer */
921 .long _ex_replaceable /* 0x05 - User Defined */ 921 .long _ex_replaceable /* 0x05 - User Defined */
922 .long _ex_replaceable /* 0x06 - User Defined */ 922 .long _ex_replaceable /* 0x06 - User Defined */
923 .long _ex_replaceable /* 0x07 - User Defined */ 923 .long _ex_replaceable /* 0x07 - User Defined */