#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#

mainmenu "uClinux/Blackfin (w/o MMU) Kernel Configuration"

config MMU
	bool
	default n

config FPU
	bool
	default n

config RWSEM_GENERIC_SPINLOCK
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool
	default n

config BLACKFIN
	bool
	default y

config ZONE_DMA
	bool
	default y

config BFIN
	bool
	default y

config SEMAPHORE_SLEEPERS
	bool
	default y

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_IRQ_PROBE
        bool
	default y

config GENERIC_TIME
	bool
	default n

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config FORCE_MAX_ZONEORDER
	int
	default "14"

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config IRQCHIP_DEMUX_GPIO
	bool
	depends on (BF53x || BF561 || BF54x)
	default y

source "init/Kconfig"
source "kernel/Kconfig.preempt"

menu "Blackfin Processor Options"

comment "Processor and Board Settings"

choice
	prompt "CPU"
	default BF533

config BF531
	bool "BF531"
	help
	  BF531 Processor Support.

config BF532
	bool "BF532"
	help
	  BF532 Processor Support.

config BF533
	bool "BF533"
	help
	  BF533 Processor Support.

config BF534
	bool "BF534"
	help
	  BF534 Processor Support.

config BF536
	bool "BF536"
	help
	  BF536 Processor Support.

config BF537
	bool "BF537"
	help
	  BF537 Processor Support.

config BF542
	bool "BF542"
	help
	  BF542 Processor Support.

config BF544
	bool "BF544"
	help
	  BF544 Processor Support.

config BF548
	bool "BF548"
	help
	  BF548 Processor Support.

config BF549
	bool "BF549"
	help
	  BF549 Processor Support.

config BF561
	bool "BF561"
	help
	  Not Supported Yet - Work in progress - BF561 Processor Support.

endchoice

choice
	prompt "Silicon Rev"
	default BF_REV_0_2 if BF537
	default BF_REV_0_3 if BF533
	default BF_REV_0_0 if BF549

config BF_REV_0_0
	bool "0.0"
	depends on (BF549)

config BF_REV_0_2
	bool "0.2"
	depends on (BF537 || BF536 || BF534)

config BF_REV_0_3
	bool "0.3"
	depends on (BF561 || BF537 || BF536 || BF534 || BF533 || BF532 || BF531)

config BF_REV_0_4
	bool "0.4"
	depends on (BF561 || BF533 || BF532 || BF531)

config BF_REV_0_5
	bool "0.5"
	depends on (BF561 || BF533 || BF532 || BF531)

config BF_REV_ANY
	bool "any"

config BF_REV_NONE
	bool "none"

endchoice

config BF53x
	bool
	depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537)
	default y

config BF54x
	bool
	depends on (BF542 || BF544 || BF548 || BF549)
	default y

config BFIN_DUAL_CORE
	bool
	depends on (BF561)
	default y

config BFIN_SINGLE_CORE
	bool
	depends on !BFIN_DUAL_CORE
	default y

choice
	prompt "System type"
	default BFIN533_STAMP
	help
	  Do NOT change the board here.  Please use the top level
	  configuration to ensure that all the other settings are
	  correct.

config BFIN533_EZKIT
	bool "BF533-EZKIT"
	depends on (BF533 || BF532 || BF531)
	help
	  BF533-EZKIT-LITE board Support.

config  BFIN533_STAMP
	bool "BF533-STAMP"
	depends on (BF533 || BF532 || BF531)
	help
	  BF533-STAMP board Support.

config BFIN537_STAMP
	bool "BF537-STAMP"
	depends on (BF537 || BF536 || BF534)
	help
	  BF537-STAMP board Support.

config BFIN533_BLUETECHNIX_CM
	bool "Bluetechnix CM-BF533"
	depends on (BF533)
	help
	  CM-BF533 support for EVAL- and DEV-Board.

config BFIN537_BLUETECHNIX_CM
	bool "Bluetechnix CM-BF537"
	depends on (BF537)
	help
	  CM-BF537 support for EVAL- and DEV-Board.

config BFIN548_EZKIT
	bool "BF548-EZKIT"
	depends on (BF548 || BF549)
	  help
	  BFIN548-EZKIT board Support.

config BFIN561_BLUETECHNIX_CM
	bool "Bluetechnix CM-BF561"
	depends on (BF561)
	help
	  CM-BF561 support for EVAL- and DEV-Board.

config BFIN561_EZKIT
	bool "BF561-EZKIT"
	depends on (BF561)
	help
	  BF561-EZKIT-LITE board Support.

config BFIN561_TEPLA
	bool "BF561-TEPLA"
	depends on (BF561)
	help
	 BF561-TEPLA board Support.

config PNAV10
	bool "PNAV 1.0 board"
	depends on (BF537)
	help
	  PNAV 1.0 board Support.

config GENERIC_BOARD
	bool "Custom"
	depends on (BF537 || BF536 \
		|| BF534 || BF561 || BF535 || BF533 || BF532 || BF531)
	help
	  GENERIC or Custom board Support.

endchoice

config MEM_GENERIC_BOARD
	bool
	depends on GENERIC_BOARD
	default y

config MEM_MT48LC64M4A2FB_7E
	bool
	depends on (BFIN533_STAMP)
	default y

config MEM_MT48LC16M16A2TG_75
	bool
	depends on (BFIN533_EZKIT || BFIN561_EZKIT \
		|| BFIN533_BLUETECHNIX_CM || BFIN537_BLUETECHNIX_CM)
	default y

config MEM_MT48LC32M8A2_75
	bool
	depends on (BFIN537_STAMP || PNAV10)
	default y

config MEM_MT48LC8M32B2B5_7
	bool
	depends on (BFIN561_BLUETECHNIX_CM)
	default y

config BFIN_SHARED_FLASH_ENET
	bool
	depends on (BFIN533_STAMP)
	default y

source "arch/blackfin/mach-bf533/Kconfig"
source "arch/blackfin/mach-bf561/Kconfig"
source "arch/blackfin/mach-bf537/Kconfig"
source "arch/blackfin/mach-bf548/Kconfig"

menu "Board customizations"

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyBF0,57600"
	help
	  If you don't have a boot loader capable of passing a command line string
	  to the kernel, you may specify one here. As a minimum, you should specify
	  the memory size and the root device (e.g., mem=8M, root=/dev/nfs).

comment "Board Setup"

config CLKIN_HZ
	int "Crystal Frequency in Hz"
	default "11059200" if BFIN533_STAMP
	default "27000000" if BFIN533_EZKIT
	default "25000000" if BFIN537_STAMP
	default "30000000" if BFIN561_EZKIT
	default "24576000" if PNAV10
	help
	  The frequency of CLKIN crystal oscillator on the board in Hz.

config MEM_SIZE
	int "SDRAM Memory Size in MBytes"
	default  32 if BFIN533_EZKIT
	default  64 if BFIN537_STAMP
	default  64 if BFIN561_EZKIT
	default 128 if BFIN533_STAMP
	default  64 if PNAV10

config MEM_ADD_WIDTH
	int "SDRAM Memory Address Width"
	default  9 if BFIN533_EZKIT
	default  9 if BFIN561_EZKIT
	default 10 if BFIN537_STAMP
	default 11 if BFIN533_STAMP
	default 10 if PNAV10

config ENET_FLASH_PIN
	int "PF port/pin used for flash and ethernet sharing"
	depends on (BFIN533_STAMP)
	default  0
	help
	  PF port/pin used for flash and ethernet sharing to allow other PF
	  pins to be used on other platforms without having to touch common
	  code.
	  For example: PF0 --> 0,PF1 --> 1,PF2 --> 2, etc.

config BOOT_LOAD
	hex "Kernel load address for booting"
	default "0x1000"
	help
	  This option allows you to set the load address of the kernel.
	  This can be useful if you are on a board which has a small amount
	  of memory or you wish to reserve some memory at the beginning of
	  the address space.

	  Note that you generally want to keep this value at or above 4k
	  (0x1000) as this will allow the kernel to capture NULL pointer
	  references.

comment "LED Status Indicators"
	depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM)

config BFIN_ALIVE_LED
	bool "Enable Board Alive"
	depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM)
	default n
	help
	  Blink the LEDs you select when the kernel is running.  Helps detect
	  a hung kernel.

config BFIN_ALIVE_LED_NUM
	int "LED"
	depends on BFIN_ALIVE_LED
	range 1 3 if BFIN533_STAMP
	default "3" if BFIN533_STAMP
	help
	  Select the LED (marked on the board) for you to blink.

config BFIN_IDLE_LED
	bool "Enable System Load/Idle LED"
	depends on (BFIN533_STAMP || BFIN533_BLUETECHNIX_CM)
	default n
	help
	  Blinks the LED you select when to determine kernel load.

config BFIN_IDLE_LED_NUM
	int "LED"
	depends on BFIN_IDLE_LED
	range 1 3 if BFIN533_STAMP
	default "2" if BFIN533_STAMP
	help
	  Select the LED (marked on the board) for you to blink.

#
# Sorry - but you need to put the hex address here -
#

# Flag Data register
config BFIN_ALIVE_LED_PORT
	hex
	default 0xFFC00700 if (BFIN533_STAMP)

# Peripheral Flag Direction Register
config BFIN_ALIVE_LED_DPORT
	hex
	default 0xFFC00730 if (BFIN533_STAMP)

config BFIN_ALIVE_LED_PIN
	hex
	default 0x04 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 1)
	default 0x08 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 2)
	default 0x10 if (BFIN533_STAMP && BFIN_ALIVE_LED_NUM = 3)

config BFIN_IDLE_LED_PORT
	hex
	default 0xFFC00700 if (BFIN533_STAMP)

# Peripheral Flag Direction Register
config BFIN_IDLE_LED_DPORT
	hex
	default 0xFFC00730 if (BFIN533_STAMP)

config BFIN_IDLE_LED_PIN
	hex
	default 0x04 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 1)
	default 0x08 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 2)
	default 0x10 if (BFIN533_STAMP && BFIN_IDLE_LED_NUM = 3)

endmenu


menu "Blackfin Kernel Optimizations"

comment "Timer Tick"

source kernel/Kconfig.hz

comment "Memory Optimizations"

config I_ENTRY_L1
	bool "Locate interrupt entry code in L1 Memory"
	default y
	help
	  If enabled interrupt entry code (STORE/RESTORE CONTEXT) is linked
	  into L1 instruction memory.(less latency)

config EXCPT_IRQ_SYSC_L1
	bool "Locate entire ASM lowlevel excepetion / interrupt - Syscall and CPLB handler code in L1 Memory"
	default y
	help
	  If enabled entire ASM lowlevel exception and interrupt entry code (STORE/RESTORE CONTEXT) is linked
	  into L1 instruction memory.(less latency)

config DO_IRQ_L1
	bool "Locate frequently called do_irq dispatcher function in L1 Memory"
	default y
	help
	  If enabled frequently called do_irq dispatcher function is linked
	  into L1 instruction memory.(less latency)

config CORE_TIMER_IRQ_L1
	bool "Locate frequently called timer_interrupt() function in L1 Memory"
	default y
	help
	  If enabled frequently called timer_interrupt() function is linked
	  into L1 instruction memory.(less latency)

config IDLE_L1
	bool "Locate frequently idle function in L1 Memory"
	default y
	help
	  If enabled frequently called idle function is linked
	  into L1 instruction memory.(less latency)

config SCHEDULE_L1
	bool "Locate kernel schedule function in L1 Memory"
	default y
	help
	  If enabled frequently called kernel schedule is linked
	  into L1 instruction memory.(less latency)

config ARITHMETIC_OPS_L1
	bool "Locate kernel owned arithmetic functions in L1 Memory"
	default y
	help
	  If enabled arithmetic functions are linked
	  into L1 instruction memory.(less latency)

config ACCESS_OK_L1
	bool "Locate access_ok function in L1 Memory"
	default y
	help
	  If enabled access_ok function is linked
	  into L1 instruction memory.(less latency)

config MEMSET_L1
	bool "Locate memset function in L1 Memory"
	default y
	help
	  If enabled memset function is linked
	  into L1 instruction memory.(less latency)

config MEMCPY_L1
	bool "Locate memcpy function in L1 Memory"
	default y
	help
	  If enabled memcpy function is linked
	  into L1 instruction memory.(less latency)

config SYS_BFIN_SPINLOCK_L1
	bool "Locate sys_bfin_spinlock function in L1 Memory"
	default y
	help
	  If enabled sys_bfin_spinlock function is linked
	  into L1 instruction memory.(less latency)

config IP_CHECKSUM_L1
	bool "Locate IP Checksum function in L1 Memory"
	default n
	help
	  If enabled IP Checksum function is linked
	  into L1 instruction memory.(less latency)

config CACHELINE_ALIGNED_L1
	bool "Locate cacheline_aligned data to L1 Data Memory"
	default y if !BF54x
	default n if BF54x
	depends on !BF531
	help
	  If enabled cacheline_anligned data is linked
	  into L1 data memory.(less latency)

config SYSCALL_TAB_L1
	bool "Locate Syscall Table L1 Data Memory"
	default n
	depends on !BF531
	help
	  If enabled the Syscall LUT is linked
	  into L1 data memory.(less latency)

config CPLB_SWITCH_TAB_L1
	bool "Locate CPLB Switch Tables L1 Data Memory"
	default n
	depends on !BF531
	help
	  If enabled the CPLB Switch Tables are linked
	  into L1 data memory.(less latency)

endmenu


choice
	prompt "Kernel executes from"
	help
	  Choose the memory type that the kernel will be running in.

config RAMKERNEL
	bool "RAM"
	help
	  The kernel will be resident in RAM when running.

config ROMKERNEL
	bool "ROM"
	help
	  The kernel will be resident in FLASH/ROM when running.

endchoice

source "mm/Kconfig"

config LARGE_ALLOCS
	bool "Allow allocating large blocks (> 1MB) of memory"
	help
	  Allow the slab memory allocator to keep chains for very large
	  memory sizes - upto 32MB. You may need this if your system has
	  a lot of RAM, and you need to able to allocate very large
	  contiguous chunks. If unsure, say N.

config BFIN_DMA_5XX
	bool "Enable DMA Support"
	depends on (BF533 || BF532 || BF531 || BF537 || BF536 || BF534 || BF561 || BF54x)
	default y
	help
	  DMA driver for BF5xx.

choice
	prompt "Uncached SDRAM region"
	default DMA_UNCACHED_1M
	depends BFIN_DMA_5XX
config DMA_UNCACHED_2M
	bool "Enable 2M DMA region"
config DMA_UNCACHED_1M
	bool "Enable 1M DMA region"
config DMA_UNCACHED_NONE
	bool "Disable DMA region"
endchoice


comment "Cache Support"
config BLKFIN_CACHE
	bool "Enable ICACHE"
config BLKFIN_DCACHE
	bool "Enable DCACHE"
config BLKFIN_DCACHE_BANKA
	bool "Enable only 16k BankA DCACHE - BankB is SRAM"
	depends on BLKFIN_DCACHE && !BF531
	default n
config BLKFIN_CACHE_LOCK
	bool "Enable Cache Locking"

choice
	prompt "Policy"
	depends on BLKFIN_DCACHE
	default BLKFIN_WB
config BLKFIN_WB
	bool "Write back"
	help
	  Write Back Policy:
	    Cached data will be written back to SDRAM only when needed.
	    This can give a nice increase in performance, but beware of
	    broken drivers that do not properly invalidate/flush their
	    cache.

	  Write Through Policy:
	    Cached data will always be written back to SDRAM when the
	    cache is updated.  This is a completely safe setting, but
	    performance is worse than Write Back.

	  If you are unsure of the options and you want to be safe,
	  then go with Write Through.

config BLKFIN_WT
	bool "Write through"
	help
	  Write Back Policy:
	    Cached data will be written back to SDRAM only when needed.
	    This can give a nice increase in performance, but beware of
	    broken drivers that do not properly invalidate/flush their
	    cache.

	  Write Through Policy:
	    Cached data will always be written back to SDRAM when the
	    cache is updated.  This is a completely safe setting, but
	    performance is worse than Write Back.

	  If you are unsure of the options and you want to be safe,
	  then go with Write Through.

endchoice

config L1_MAX_PIECE
	int "Set the max L1 SRAM pieces"
	default 16
	help
	  Set the max memory pieces for the L1 SRAM allocation algorithm.
	  Min value is 16. Max value is 1024.

menu "Clock Settings"


config BFIN_KERNEL_CLOCK
	bool "Re-program Clocks while Kernel boots?"
	default n
	help
	  This option decides if kernel clocks are re-programed from the
	  bootloader settings. If the clocks are not set, the SDRAM settings
	  are also not changed, and the Bootloader does 100% of the hardware
	  configuration.

config VCO_MULT
	int "VCO Multiplier"
	depends on BFIN_KERNEL_CLOCK
	default "22" if BFIN533_EZKIT
	default "45" if BFIN533_STAMP
	default "20" if BFIN537_STAMP
	default "22" if BFIN533_BLUETECHNIX_CM
	default "20" if BFIN537_BLUETECHNIX_CM
	default "20" if BFIN561_BLUETECHNIX_CM
	default "20" if BFIN561_EZKIT

config CCLK_DIV
	int "Core Clock Divider"
	depends on BFIN_KERNEL_CLOCK
	default 1 if BFIN533_EZKIT
	default 1 if BFIN533_STAMP
	default 1 if BFIN537_STAMP
	default 1 if BFIN533_BLUETECHNIX_CM
	default 1 if BFIN537_BLUETECHNIX_CM
	default 1 if BFIN561_BLUETECHNIX_CM
	default 1 if BFIN561_EZKIT

config SCLK_DIV
	int "System Clock Divider"
	depends on BFIN_KERNEL_CLOCK
	default 5 if BFIN533_EZKIT
	default 5 if BFIN533_STAMP
	default 4 if BFIN537_STAMP
	default 5 if BFIN533_BLUETECHNIX_CM
	default 4 if BFIN537_BLUETECHNIX_CM
	default 4 if BFIN561_BLUETECHNIX_CM
	default 5 if BFIN561_EZKIT

config CLKIN_HALF
	bool "Half ClockIn"
	depends on BFIN_KERNEL_CLOCK
	default n

config PLL_BYPASS
	bool "Bypass PLL"
	depends on BFIN_KERNEL_CLOCK
	default n

endmenu

comment "Asynchonous Memory Configuration"

menu "EBIU_AMBCTL Global Control"
config C_AMCKEN
	bool "Enable CLKOUT"
	default y

config C_CDPRIO
	bool "DMA has priority over core for ext. accesses"
	depends on !BF54x
	default n

config C_B0PEN
	depends on BF561
	bool "Bank 0 16 bit packing enable"
	default y

config C_B1PEN
	depends on BF561
	bool "Bank 1 16 bit packing enable"
	default y

config C_B2PEN
	depends on BF561
	bool "Bank 2 16 bit packing enable"
	default y

config C_B3PEN
	depends on BF561
	bool "Bank 3 16 bit packing enable"
	default n

choice
	prompt"Enable Asynchonous Memory Banks"
	default C_AMBEN_ALL

config C_AMBEN
	bool "Disable All Banks"

config C_AMBEN_B0
	bool "Enable Bank 0"

config C_AMBEN_B0_B1
	bool "Enable Bank 0 & 1"

config C_AMBEN_B0_B1_B2
	bool "Enable Bank 0 & 1 & 2"

config C_AMBEN_ALL
	bool "Enable All Banks"
endchoice
endmenu

menu "EBIU_AMBCTL Control"
config BANK_0
	hex "Bank 0"
	default 0x7BB0

config BANK_1
	hex "Bank 1"
	default 0x7BB0

config BANK_2
	hex "Bank 2"
	default 0x7BB0

config BANK_3
	hex "Bank 3"
	default 0x99B3
endmenu

endmenu

#############################################################################
menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"

config PCI
	bool "PCI support"
	help
	  Support for PCI bus.

source "drivers/pci/Kconfig"

config HOTPLUG
	bool "Support for hot-pluggable device"
	  help
	  Say Y here if you want to plug devices into your computer while
	  the system is running, and be able to use them quickly.  In many
	  cases, the devices can likewise be unplugged at any time too.

	  One well known example of this is PCMCIA- or PC-cards, credit-card
	  size devices such as network cards, modems or hard drives which are
	  plugged into slots found on all modern laptop computers.  Another
	  example, used on modern desktops as well as laptops, is USB.

	  Enable HOTPLUG and KMOD, and build a modular kernel.  Get agent
	  software (at <http://linux-hotplug.sourceforge.net/>) and install it.
	  Then your kernel will automatically call out to a user mode "policy
	  agent" (/sbin/hotplug) to load modules and set up software needed
	  to use devices as you hotplug them.

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

menu "Power management options"
source "kernel/power/Kconfig"

choice
	prompt "Select PM Wakeup Event Source"
	default PM_WAKEUP_GPIO_BY_SIC_IWR
	depends on PM
	help
	  If you have a GPIO already configured as input with the corresponding PORTx_MASK
	  bit set - "Specify Wakeup Event by SIC_IWR value"

config PM_WAKEUP_GPIO_BY_SIC_IWR
	bool "Specify Wakeup Event by SIC_IWR value"
config PM_WAKEUP_BY_GPIO
	bool "Cause Wakeup Event by GPIO"
config PM_WAKEUP_GPIO_API
	bool "Configure Wakeup Event by PM GPIO API"

endchoice

config PM_WAKEUP_SIC_IWR
	hex "Wakeup Events (SIC_IWR)"
	depends on PM_WAKEUP_GPIO_BY_SIC_IWR
	default 0x80000000 if (BF537 || BF536 || BF534)
	default 0x100000 if (BF533 || BF532 || BF531)

config PM_WAKEUP_GPIO_NUMBER
	int "Wakeup GPIO number"
	range 0 47
	depends on PM_WAKEUP_BY_GPIO
	default 2 if BFIN537_STAMP

choice
	prompt "GPIO Polarity"
	depends on PM_WAKEUP_BY_GPIO
	default PM_WAKEUP_GPIO_POLAR_H
config  PM_WAKEUP_GPIO_POLAR_H
	bool "Active High"
config  PM_WAKEUP_GPIO_POLAR_L
	bool "Active Low"
config  PM_WAKEUP_GPIO_POLAR_EDGE_F
	bool "Falling EDGE"
config  PM_WAKEUP_GPIO_POLAR_EDGE_R
	bool "Rising EDGE"
config  PM_WAKEUP_GPIO_POLAR_EDGE_B
	bool "Both EDGE"
endchoice

endmenu

if (BF537 || BF533 || BF54x)

menu "CPU Frequency scaling"

source "drivers/cpufreq/Kconfig"

config CPU_FREQ
	bool
	default n
	help
	  If you want to enable this option, you should select the
	  DPMC driver from Character Devices.
endmenu

endif

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/blackfin/oprofile/Kconfig"

menu "Kernel hacking"

source "lib/Kconfig.debug"

config DEBUG_HWERR
	bool "Hardware error interrupt debugging"
	depends on DEBUG_KERNEL
	help
	  When enabled, the hardware error interrupt is never disabled, and
	  will happen immediately when an error condition occurs.  This comes
	  at a slight cost in code size, but is necessary if you are getting
	  hardware error interrupts and need to know where they are coming
	  from.

config DEBUG_ICACHE_CHECK
	bool "Check Instruction cache coherancy"
	depends on DEBUG_KERNEL
	depends on DEBUG_HWERR
	help
	  Say Y here if you are getting wierd unexplained errors. This will
	  ensure that icache is what SDRAM says it should be, by doing a
	  byte wise comparision between SDRAM and instruction cache. This
	  also relocates the irq_panic() function to L1 memory, (which is
	  un-cached).

config DEBUG_KERNEL_START
	bool "Debug Kernel Startup"
	depends on DEBUG_KERNEL
	help
	  Say Y here to put in an mini-execption handler before the kernel
	  replaces the bootloader exception handler. This will stop kernels
	  from dieing at startup with no visible error messages.

config DEBUG_SERIAL_EARLY_INIT
	bool "Initialize serial driver early"
	default n
	depends on SERIAL_BFIN
	help
	  Say Y here if you want to get kernel output early when kernel
	  crashes before the normal console initialization. If this option
	  is enable, console output will always go to the ttyBF0, no matter
	  what kernel boot paramters you set.

config DEBUG_HUNT_FOR_ZERO
	bool "Catch NULL pointer reads/writes"
	default y
	help
	  Say Y here to catch reads/writes to anywhere in the memory range
	  from 0x0000 - 0x0FFF (the first 4k) of memory.  This is useful in
	  catching common programming errors such as NULL pointer dereferences.

	  Misbehaving applications will be killed (generate a SEGV) while the
	  kernel will trigger a panic.

	  Enabling this option will take up an extra entry in CPLB table.
	  Otherwise, there is no extra overhead.

config DEBUG_BFIN_NO_KERN_HWTRACE
	bool "Trace user apps (turn off hwtrace in kernel)"
	default n
	help
	  Some pieces of the kernel contain a lot of flow changes which can
	  quickly fill up the hardware trace buffer.  When debugging crashes,
	  the hardware trace may indicate that the problem lies in kernel
	  space when in reality an application is buggy.

	  Say Y here to disable hardware tracing in some known "jumpy" pieces
	  of code so that the trace buffer will extend further back.

config DUAL_CORE_TEST_MODULE
	tristate "Dual Core Test Module"
	depends on (BF561)
	default n
	help
	  Say Y here to build-in dual core test module for dual core test.

config CPLB_INFO
	bool "Display the CPLB information"
	help
	  Display the CPLB information.

config ACCESS_CHECK
	bool "Check the user pointer address"
	default y
	help
	  Usually the pointer transfer from user space is checked to see if its
	  address is in the kernel space.

	  Say N here to disable that check to improve the performance.

endmenu

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
