#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
#   vineetg: Oct 4th 2007 : Added Config Options for 800/SMP
#

mainmenu "Linux Kernel Configuration"

# CONFIG common to all ARC cores (700+800) under this
#    config option instead of existing ARCH_ARC700
# Need corresponding change in include/asm-arc/linkage.h

config ARCH_ARC
    bool
    default y
    select HAVE_OPROFILE
    select NO_IOPORT
    select HAVE_KPROBES
    select HAVE_KRETPROBES

# vineetg: Mar 31st 2010
# hack: to enable oprofile w/o TRACE_IRQFLAGS
# Normally this is selected automatically by build system
# But is dependent on IRQTRACING when don't have yet.
# So for now we force it: When IRQTRACING implemented, take it off
    select TRACING_SUPPORT


config RWSEM_GENERIC_SPINLOCK
        def_bool y

config UID16
        bool
        default y

# This definition is temporarily lying here

config SPLIT_PTLOCK_CPUS
        int
        default 4096


config FLATMEM
        bool
        default y

# Reminder: We need to restructure the menuconfig
#            and get lots of options in.

config LOG_BUF_SHIFT
        int
        default 14

# Sameer: Hardcoding this variable as y for a while
#         This is the variable to be used to to switch
#         between linux and uclinux

config MMU
        bool
        default y

config NO_IOPORT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
        bool
        default y

config GENERIC_TIME
        bool
        default y

config GENERIC_GPIO
        bool
	default y
	
config GENERIC_FIND_FIRST_BIT
        bool
        default y

config GENERIC_FIND_NEXT_BIT
        bool
        default y

config GENERIC_HWEIGHT
        bool
        default y

config BINFMT_ELF
        bool
        default y

config STACKTRACE_SUPPORT
	def_bool y
    select STACKTRACE

config SCHED_OMIT_FRAME_POINTER
        bool
        default y

config HAVE_LATENCYTOP_SUPPORT
	bool
	default y

# CONFIG common to all ARC cores (700+800) under this 
#    config option instead of existing ARCH_ARC700
# Need corresponding change in include/asm-arc/linkage.h
config ARCH_ARC
    bool
    default y
    select HAVE_OPROFILE
    select NO_IOPORT

# end of temporary definitions section

config VMALLOC_SIZE
        int
        default "256" #"VMALLOC_SIZE(in MB)"

# To support saving core dump in case of LHost, MuC or AuC crash
config QTN_SOC_CORE_DUMP
	bool
	default y
	select ZLIB_DEFLATE

source "init/Kconfig"

source "kernel/Kconfig.freezer"

menu "Processor Type and features"

choice
        prompt "ARC Processor"
        default ARCH_ARC700

config ARCH_ARC700
        bool "ARC700"
        help
          Support for ARC700 core processors.

config ARCH_ARC800
        bool "ARC800"
        help
          Support for ARC800 core processors.

endchoice

config SMP
        bool "Symmetric Multi-Processing (Incomplete)"
    default y
    depends on ARCH_ARC800
        help
          This enables support for systems with more than one CPU. If you have
          a system with only one CPU, like most personal computers, say N. If
          you have a system with more than one CPU, say Y.

          If you say N here, the kernel will run on single and multiprocessor
          machines, but will use only one CPU of a multiprocessor machine. If
          you say Y here, the kernel will run on many, but not all, single
          processor machines. On a single processor machine, the kernel will
          run faster if you say N here.

          See also the <file:Documentation/smp.txt>,
          <file:Documentation/i386/IO-APIC.txt>,
          <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
          <http://www.linuxdoc.org/docs.html#howto>.

          If you don't know what to do here, say N.

config NR_CPUS
        int "Maximum number of CPUs (2-32)"
        range 2 32
        depends on SMP
        default "2"


menu "ARC CPU Core Configuration"

menuconfig ARC700_CACHE
    bool "Enable Cache Support"
    default y

config ARC700_USE_ICACHE
        bool "Use Instruction Cache"
        default y
        depends on ARC700_CACHE

config ARC700_USE_DCACHE
        bool "Use Data Cache"
        default y
        depends on ARC700_CACHE

config ARC700_CACHE_PAGES
        bool "Per Page Cache Control"
#        default y if ARC700_USE_ICACHE || ARC700_USE_DCACHE
        depends on ARC700_CACHE && (ARC700_USE_ICACHE || ARC700_USE_DCACHE)
        help
        This can be used to over-ride the global I/D Cache Enable on a
        per-page basis (but only for pages accessed via MMU such as
        Kernel Virtual address or User Virtual Address)
        TLB entries have a per-page Cache Enable Bit.
        Note that Global I/D ENABLE + Per Page DISABLE works but corollary
        Global DISABLE + Per Page ENABLE won't work

config ARCH_ARC_ICCM
		bool "Use ICCM"
        help
		Single Cycle RAMS to store Fast Path Code
        default n

config ARCH_ARC_DCCM
		bool "Use DCCM"
        help
        Single Cycle RAMS to store Fast Path Data
        default n

choice
        prompt "ARC700 MMU Version"
        default ARC_MMU_V3 if ARC700_V_4_10
        default ARC_MMU_V2 if !ARC700_V_4_10

config ARC_MMU_V1
        bool "MMU v1"
        help
            Orig ARC700 MMU

config ARC_MMU_V2
        bool "MMU v2"
        help
            Fixed the deficiency of v1 - possible thrashing in memcpy sceanrio
            when 2 D-TLB and 1 I-TLB entries index into same 2way set.

config ARC_MMU_V3
        bool "MMU v3"
# enable this later on, otherwise we are bound to use news insn with v3
#        depends on ARC700_V_4_10
        help
            Introduced with ARC700 4.10: New Features
            Variable Page size (1k-16k), var JTLB size 128 x (2 or 4)
            Shared Address Spaces (SASID)

endchoice


config ARC_MMU_SASID
        bool "shared TLB entries for library code segments"
        default y
        depends on ARC_MMU_V3
        select MMAP_CODE_CMN_VADDR
        help
        Enable MMU support for code TLB entries, sharable across processes.
        So instead of a per-process TLB entry per page of library code, a
        single TLB entry is used across all proceeses, mapping this lib.
        This is difft from glabal TLB entries as it is subscription based
        This will reduce pressure on TLB immensely.

choice
        prompt "MMU Page Size"
        default ARC_PAGE_SIZE_8K

config ARC_PAGE_SIZE_8K
        bool "8KB"
        help
            Choose between 8k vs 16k

config ARC_PAGE_SIZE_16K
        bool "16KB"
        depends on ARC_MMU_V3

config ARC_PAGE_SIZE_4K
        bool "4KB"
        depends on ARC_MMU_V3

endchoice

config ARCH_ARC_LV2_INTR
        bool "Enable two levels of Interrupts high(2)low(1)"
        default n
        select TIMER_LV2

config ARCH_ARC_FPU
        bool "Enable FPU state persistence across context switch"
        default N
        help
        Double Precision Floating Point unit had dedictaed regs which
        need to be saved/restored across context-switch.
        Note that ARC FPU is overly simplistic, unlike say x86, which has
        hardware pieces to allow software to conditionally save/restore,
        based on actual usage of FPU by a task. Thus our implemn does
        this for all tasks in system.

menuconfig ARC700_V_4_10
        bool "Build kernel for ARC700 v 4.10 - Summer 2011"
        default n
        help
        This rel of ARC700 provides a bunch of new feature:
        -MMU-v3: Variable Pg Sz, bigger J-TLB, Shared Address Spaces
        -Caches: New Prog Model, Region Flush
        -Insns: endian swap, load-locked/store-conditional, time-stamp-ctr

config ARC_HAS_LLSC
        bool "llock/scond insns for faster atomic ops"
        default y
        depends on ARC700_V_4_10

config ARC_HAS_SWAPE
        bool "single cycle endian-swap insn"
        default y
        depends on ARC700_V_4_10

config ARC_HAS_RTSC
        bool "64-bit read-only time-stamp counter"
        default y
        depends on ARC700_V_4_10

endmenu   #CPU Core config

menu "Board Configuration"

config LINUX_LINK_BASE
        hex "Linux Link Address"
        default "0x80000000"
        help
            ARC700 divides the 32 bit phy address space into two equal halves
            -Lower 2G (0 - 0x7FFF_FFFF ) is user virtual, translated by MMU
            -Upper 2G (0x8000_0000 onwards) is untranslated, for kernel
            Typically Linux kernel is linked at the start of untransalted addr,
            hence the default value of 0x8zs.
            However some customers have peripherals mapped at this addr, so
            Linux needs to be scooted a bit.
            If you don't know what the above means, leave this setting alone.

config SDRAM_SIZE
        hex "SD RAM Size"
        default "0x10000000"
        help
            Implies the amount of SDRAM/DRAM Linux is going to claim/own.
            The actual memory itself could be larger than this number. But for
            all software purposes, this is the amt of memory.

endmenu   #Board config

menu "ARC Pheripheral Support"

config ARC_AHB_PCI_BRIDGE
    bool "Host PCI Bridge on AA4 Board"
    default n
    depends on PCI
    help
    To Enable a PCI device to work on AA4 Ref Board a AHB to PCI Host Bridge
    is needed.

config NO_DMA
    bool
    default n


config ARC_IDE
	tristate "Enable ARC IDE"
    select HAVE_IDE
    select IDE
    select BLK_DEV_IDE
    select BLK_DEV_IDEDISK
	default y

config ARC_BLK_DEV_IDEDMA
        bool "ARC IDE DMA support"
        default y
        select BLK_DEV_IDEDMA
        depends on ARC_IDE

config ARC_SERIAL
        bool "ARC UART driver support"
        select SERIAL_CORE
        default y

config ARC_SERIAL_NR_PORTS
    int 'Number of ports'
    range 1 3
    default 1
    depends on ARC_SERIAL

config ARC_SERIAL_BAUD
        int "Baud rate"
        default "115200"
        depends on ARC_SERIAL

config ARC_SERIAL_CONSOLE
        bool
        select SERIAL_CORE_CONSOLE
        depends on !ARC_PGU_CONSOLE && ARC_SERIAL
        default y

config SERIAL_LV2
        bool "Configure serial interrupt on level 2"
        default n
        depends on ARC_SERIAL && TIMER_LV2

config TIMER_LV2
        bool "Configure Timer0 interrupt on level 2"
        default n
        depends on ARCH_ARC_LV2_INTR

config ARC_PS2
        bool "ARC PS/2 support"
        default n
	depends on SERIO
        help
        ARC FPGA Peripherals PS/2 support. Driver currently works only
        on AA4 board.

config ARC_PS2_DEBUG
        bool "ARC PS/2 driver debugging"
        default n
	depends on ARC_PS2
        help
	Turn on statistic collection and various debug messages to
	simplify debugging.

config ARCTANGENT_EMAC
        tristate "ARCTangent EMAC support"
        select NET
        select INET
        select NETDEVICES
        select NET_ETHERNET
        default n

config EMAC_LV2
        bool "Configure EMAC interrupt on level 2"
        default n
        depends on ARCTANGENT_EMAC && TIMER_LV2

config EMAC_NAPI
        bool "Use NAPI ?"
        default n
        depends on ARCTANGENT_EMAC

config XILINX_TEMAC
        tristate "Use AA5 Xilinx TEMAC ?"
        default n
        select NET
        select INET
        select NETDEVICES
        select NET_ETHERNET

config ISS_MAC
        tristate "Use xISS/ISS ENET simulation ?"
        default n
        select NET
        select IET
        select NETDEVICES
        select NET_ETHERNET

config ARCPGU
        tristate "Use ARC Pixel Graphics Unit"
        select FB
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT

config VFB_SIM
        bool "Use ISS/xISS framebuffer"
        select FB
        select FB_CFB_FILLRECT
        select FB_CFB_COPYAREA
        select FB_CFB_IMAGEBLIT
        select FB_SYS_FOPS
config VFB_SIM_BASE
        hex "Base address of Frame Buffer in Pysical memory"
        default "0x88000000"
        depends on VFB_SIM

config VFB_SIM_SIZE
        hex "Size of memory buffer"
        default "0x400000"
        depends on VFB_SIM

config VFB_SIM_XRES
        int "X-Resolution"
        default "640"
        depends on VFB_SIM

config VFB_SIM_YRES
        int "Y-Resolution"
        default "480"
        depends on VFB_SIM

config VFB_SIM_BPP
        int "Bits per pixel"
        default "16"
        depends on VFB_SIM

config FORCE_MAX_ZONEORDER
        int
        depends on ARCPGU || PGU_SIM
        default "13"

config ARCPGU_YUVBUFS
    int 'Number of YUV Buffers'
    default 18
    depends on ARCPGU || PGU_SIM

config ARCPGU_RGBBUFS
    int 'Number of RGB Buffers'
    default 2
    depends on ARCPGU || PGU_SIM

config ARCPGU_DISPTYPE
    int 'Display selector (0 - VGA, 1 - QVGA)'
    default 0
    depends on ARCPGU || PGU_SIM

config ARCPGU_XRES
    int 'Default YUV X resolution'
    default 640
    depends on ARCPGU || PGU_SIM

config ARCPGU_YRES
    int 'Default YUV Y resolution'
    default 480
    depends on ARCPGU || PGU_SIM

config ARCPGU_VCLK
    bool 'PLL-driven pixel clock'
    default 0
    depends on ARCPGU || PGU_SIM

config ARC_PGU_CONSOLE
    bool 'Console on the ARC PGU'
    depends on ARCPGU || PGU_SIM
    select FRAMEBUFFER_CONSOLE
    select FONTS
    select FONT_8x8
    select FONT_8x16
    select LOGO
    select LOGO_LINUX_MONO
    select LOGO_LINUX_VGA16
    select LOGO_LINUX_CLUT224
    select BACKLIGHT_LCD_SUPPORT

config ARCVSYNC
    bool
    depends on ARC_PGU_CONSOLE
    default y

config SOUND_ARC_AC97
        tristate "Enable AC97 interface"
        select SOUND
        select SOUND_PRIME

config ARC_7XX_GPIO
        bool "ARC 7XX GPIO support"
        select ARCH_REQUIRE_GPIOLIB
	select GENERIC_GPIO
	default y
        help
          Say Y here if you're going to use arc gpio.

menu "Bus options (PCI etc.)"

config PCI
	bool "PCI support"
	default n
	help
	  If you have PCI, say Y, otherwise N.

source "drivers/pci/Kconfig"
source "drivers/pci/hotplug/Kconfig"
source "drivers/pcmcia/Kconfig"

endmenu     # Bus options

endmenu     # Peripherals


config ARCH_ARC_CURR_IN_REG
        bool "Dedicate Register r25 for current_task pointer"
        default N
        help
          This reserved Register R25 to point to Current Task in
          kernel mode. This saves memory access for each such access

config ARC_TLS_REG_EMUL
        bool "Emulate a TLS register using a dedicated user vaddr"
        default N
        help
            ARC ABI lacks defining a dedicated TLS register to hold
            pointer to TLS Data area.
            So we emulate the TLS register using a TLS Virtual addr

config ARC_MISALIGNED_ACCESS
        bool "Support unaligned memory access"
        default N
        help
          This enables misaligned 16 & 32 bit memory access exception handler
          to recover from misaligned memory access in both user and kernel space.

config ARCH_ARC_SPACE_RND
        bool "Address Space Randomisation (mmap/SP)"
        default N
        help
          This feature enables Address space randomisation for mmap and SP
          Note that it could lead to some performance degradation especially
          for shared libraries so use it only if needed

config MMAP_CODE_CMN_VADDR
        bool "mmap shared lib code at same vaddr across proceses"
        default y
        select GENERIC_ALLOCATOR
        help
        This feature forces kernel to map a particular shared lib's code
        at same vaddr across processes using a dedicated
        mmap-shared-code-virtual-address-space. Any lib's code page frames
        are already shared using page-cache; same vaddr ensures a single
        v:p mapping, preventing virtual aliases in ARC VIPT I-Caches.
        This boosts performance because each alias occupies a cache-line
        of own hence needs to be fetched per instance as opposed to just
        once.
        It is _must_ for enabling hardware SASID feature, where a single
        shared TLB entry for shared code can be used across processes.

config HZ
    int "Timer Frequency"
    default 100

config GENERIC_CLOCKEVENTS
    bool "Generic clock events"
    default y

config ARC_STACK_NONEXEC
    bool "Make stack non-executable"
    default n
    help
    By default the stack and heap areas of processes have execute permissions switched on.
    You may choose to disable execute on the default data permissions switching this option on
    see include/asm/page.h

source "kernel/time/Kconfig"

config ARCH_ARC_HLINK
        bool "Support for Metaware debugger assisted Host access"
        default n
        help
        This options allows a Linux userland apps to directly access
        host file system (open/creat/read/write etc) with help from
        Metaware Debugger. This can come in handy for Linux-host communication
        when there is no real usable peripheral such as EMAC.


menuconfig ARC_DBG
    bool "ARC debugging"
    default y

config ARC_STACK_UNWIND
    bool "Enable DWARF specific kernel stack unwind"
    depends on ARC_DBG
    default y
    help
    Compiles the kernel with DWARF unwind information and can be used
    to get stack backtraces.

    If you say Y here the resulting kernel image will be slightly larger
    but not slower, and it will give very useful debugging information.
    If you don't debug the kernel, you can say N, but we may not be able
    to solve problems without frame unwind information

config ARC_TLB_PARANOIA
    bool "Paranoia Checks in Low Level TLB Handlers"
    depends on ARC_DBG
    default n

config ARC_DBG_EVENT_TIMELINE
    bool "Low level event capture"
    depends on ARC_DBG
    default n
    help
    Capture low level events: IRQ/Trap/Exception

config ARC_TLB_PROFILE
    bool "Profile TLB Misses"
    default n
    select DEBUG_FS
    depends on ARC_DBG
    help
    Counts number of I and D TLB Misses and exports them via Debugfs
    The counters can be cleared via Debugfs as well

config ARC_UBOOT_CMDLINE
    bool "Support U-boot kernel command line passing"
    default n
    help
    If you are using U-boot (www.denx.de) and wish to pass the kernel
    command line from the U-boot environment to the Linux kernel then
    switch this option on.
    U-boot will pass the command_line variable at the beginning of the
    .bss section.  The kernel copies this variable into the correct place
    during it's boot.

    If you are unsure "N" is a good choice.

config ARC_PROFILING
    bool "Support ARC Hardware Profiling"
    default n
    help
    If you have the ARC hardware support built into your hardware and
    wish to use the "task mode" profiling support then switch this on.
    This will enable an architecture specific context switch hook that
    will enable / disable the hardware counting while not running the specific
    process you are interested in.

    If you are unsure "N" is a good choice.

source "kernel/Kconfig.preempt"

endmenu

source "mm/Kconfig"


source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

source "arch/arc/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

source "drivers/ruby/Kconfig"

source "drivers/topaz/Kconfig"

