#
# LEON configuration written in linux configuration language
#
# Written by Jiri Gaisler, Gaisler Research
#
# Comments and bug reports to jiri@gaisler.com
#
#

define_bool CONFIG_PERI_LCONF y

mainmenu_name "LEON Processor Configuration"

mainmenu_option next_comment
  comment 'Synthesis '
  choice 'Target technology                           ' \
	"Generic		CONFIG_SYN_GENERIC \
	Atmel-ATC35		CONFIG_SYN_ATC35 \
	Atmel-ATC25		CONFIG_SYN_ATC25 \
	Atmel-ATC18		CONFIG_SYN_ATC18 \
	UMC-FS90 		CONFIG_SYN_FS90 \
	UMC-0.18 		CONFIG_SYN_UMC018 \
	TSMC-0.25		CONFIG_SYN_TSMC025 \
	Actel-Proasic		CONFIG_SYN_PROASIC \
	Actel-Axcel  		CONFIG_SYN_AXCEL \
	Xilinx-Virtex		CONFIG_SYN_VIRTEX \
	Xilinx-Virtex2		CONFIG_SYN_VIRTEX2" Generic
  if [ "$CONFIG_SYN_GENERIC" != "y" ]; then
    bool 'Infer cache and trace buffer RAM' CONFIG_SYN_INFER_RAM
    bool 'Infer register file' CONFIG_SYN_INFER_REGF
    if [ "$CONFIG_SYN_VIRTEX" = "y" -o "$CONFIG_SYN_VIRTEX2" = "y"]; then
      bool 'Infer ROM' CONFIG_SYN_INFER_ROM
    fi
    if [ "$CONFIG_SYN_VIRTEX" != "y" -a "$CONFIG_SYN_AXCEL" != "y" \
         -a "$CONFIG_SYN_VIRTEX2" != "y" -a "$CONFIG_SYN_PROASIC" != "y" ]; then
      bool 'Infer pads' CONFIG_SYN_INFER_PADS
    fi
    if [ "$CONFIG_SYN_AXCEL" != "y" -a "$CONFIG_SYN_PROASIC" != "y" ]; then
      bool 'Infer PCI pads' CONFIG_SYN_INFER_PCI_PADS
    fi
  fi
  bool 'Infer multiplier' CONFIG_SYN_INFER_MULT
  if [ "$CONFIG_SYN_GENERIC" = "y" -o "$CONFIG_SYN_VIRTEX" = "y" \
     -o "$CONFIG_SYN_AXCEL" = "y" -o "$CONFIG_SYN_ATC25" = "y" \
     -o "$CONFIG_SYN_INFER_REGF" = "y" -o "$CONFIG_SYN_VIRTEX2" = "y"]; then
    bool 'Improve register file write timing' CONFIG_SYN_RFTYPE
  fi
  if [ "$CONFIG_SYN_ATC25" = "y" -o "$CONFIG_SYN_VIRTEX" = "y" -o "$CONFIG_SYN_VIRTEX2" = "y"\
       -o "$CONFIG_SYN_ATC18" = "y" -o "$CONFIG_SYN_TSMC025" = "y" ]; then
    if [ "$CONFIG_SYN_INFER_RAM" != "y" ]; then
      bool 'Use dual-port RAM for DSU trace buffer   ' \
	CONFIG_SYN_TRACE_DPRAM $CONFIG_SYN_ATC25 $CONFIG_SYN_ATC18 \
	$CONFIG_SYN_VIRTEX $CONFIG_SYN_TSMC025 $CONFIG_SYN_VIRTEX2
    fi
  fi
endmenu

  mainmenu_option next_comment
    comment 'Clock generation'
    if [ "$CONFIG_SYN_VIRTEX" = "y" -o "$CONFIG_SYN_VIRTEX2" = "y" ]; then
      bool 'Use Virtex CLKDLL for clock generation' CONFIG_CLK_VIRTEX
    fi
    if [ "$CONFIG_SYN_VIRTEX2" = "y" -a "$CONFIG_CLK_VIRTEX" != "y"]; then
      bool 'Use Virtex-II DCM for clock generation' CONFIG_CLK_VIRTEX2
    fi
    if [ "$CONFIG_CLK_VIRTEX" = "y"]; then
      choice ' System clock multiplier (CLKDLL)' \
	"1/2		CONFIG_CLKDLL_1_2 \
	1		CONFIG_CLKDLL_1_1 \
	2		CONFIG_CLKDLL_2_1" 1
    fi
    if [ "$CONFIG_CLK_VIRTEX2" = "y"]; then
      choice ' System clock multiplier (DCM)' \
	"2/3		CONFIG_DCM_2_3 \
	3/4		CONFIG_DCM_3_4 \
	4/5		CONFIG_DCM_4_5 \
	1		CONFIG_DCM_1_1 \
	5/4		CONFIG_DCM_5_4 \
	4/3		CONFIG_DCM_4_3 \
	3/2		CONFIG_DCM_3_2 \
	5/3		CONFIG_DCM_5_3 \
	2		CONFIG_DCM_2_1 \
	3		CONFIG_DCM_3_1 \
	4		CONFIG_DCM_4_1" 1
    fi
    if [ "$CONFIG_SYN_AXCEL" = "y" ]; then
      bool 'Use global clock pad (Actel AX)' CONFIG_AXCEL_HCLKBUF
    fi
    if [ "$CONFIG_SYN_VIRTEX2" = "y" -o "$CONFIG_CLK_VIRTEX" = "y"]; then
      bool 'Enable CLKDLL for PCI clock' CONFIG_PCI_DLL
    fi
    if [ "$CONFIG_PCI_DLL" != "y" ]; then
      bool 'Use PCI clock as system clock' CONFIG_PCI_SYSCLK
    fi
  endmenu

mainmenu_option next_comment
  comment 'Processor            '
  mainmenu_option next_comment
  comment 'Integer unit                                           '
  int 'SPARC register windows' CONFIG_IU_NWINDOWS 8
  bool 'SPARC V8 MUL/DIV instructions' CONFIG_IU_V8MULDIV
  if [ "$CONFIG_IU_V8MULDIV" = "y" ]; then
    choice 'Hardware multiplier latency' \
	"1-cycle		CONFIG_IU_MUL_LATENCY_1 \
	2-cycles		CONFIG_IU_MUL_LATENCY_2 \
	4-cycles		CONFIG_IU_MUL_LATENCY_4 \
	5-cycles		CONFIG_IU_MUL_LATENCY_5 \
	35-cycles		CONFIG_IU_MUL_LATENCY_35" 5-cycles
  fi
  dep_bool 'SPARC V8e SMAC/UMAC instructions     ' CONFIG_IU_MUL_MAC $CONFIG_IU_MUL_LATENCY_4 $CONFIG_IU_V8MULDIV
  int 'Load delay' CONFIG_IU_LDELAY 1
  bool 'Fast jump-address generation   ' CONFIG_IU_FASTJUMP
  bool 'ICC interlock                  ' CONFIG_IU_ICCHOLD
  bool 'Fast instruction decoding      ' CONFIG_IU_FASTDECODE
  if [ "$CONFIG_SYN_TSMC025" = "y" -o "$CONFIG_SYN_UMC018" = "y" \
    -o "$CONFIG_SYN_FS90" = "y" -o "$CONFIG_SYN_PROASIC" = "y" \
    -o "$CONFIG_SYN_ATC18" = "y" \
    -o "$CONFIG_SYN_AXCEL" = "y" -o "$CONFIG_SYN_ATC25" = "y" ]; then
    bool 'Register file power-saving     ' CONFIG_IU_RFPOW
  fi
  int 'Hardware watchpoints' CONFIG_IU_WATCHPOINTS 0
  endmenu
  mainmenu_option next_comment
  comment 'Floating-point unit'
  bool 'Enable FPU                             ' CONFIG_FPU_ENABLE
  if [ "$CONFIG_FPU_ENABLE" = "y" ]; then
    choice 'FPU core' \
	"GRFPU		CONFIG_FPU_GRFPU \
	Meiko		CONFIG_FPU_MEIKO \
	LTH		CONFIG_FPU_LTH" GRFPU
    int 'FSR version ID' CONFIG_FPU_VER 0
  fi
  endmenu
  mainmenu_option next_comment
  comment 'Co-processor'
  bool 'Enable co-processor       ' CONFIG_CP_ENABLE
  if [ "$CONFIG_CP_ENABLE" = "y" ]; then
    string 'Co-processor configuration' CONFIG_CP_CFG "cp_none"
  fi
  endmenu
  mainmenu_option next_comment
  comment 'Cache system              '
  comment 'Instruction cache                              '
  choice 'Associativity (sets)            ' \
	"1		CONFIG_ICACHE_ASSO1 \
	2		CONFIG_ICACHE_ASSO2 \
	3		CONFIG_ICACHE_ASSO3 \
	4		CONFIG_ICACHE_ASSO4" 1
  choice 'Set size (kbytes/set)' \
	"1		CONFIG_ICACHE_SZ1 \
	2		CONFIG_ICACHE_SZ2 \
	4		CONFIG_ICACHE_SZ4 \
	8		CONFIG_ICACHE_SZ8 \
	16		CONFIG_ICACHE_SZ16 \
	32		CONFIG_ICACHE_SZ32 \
	64		CONFIG_ICACHE_SZ64" 2
  choice 'Line size (bytes/line)' \
	"16		CONFIG_ICACHE_LZ16 \
	32		CONFIG_ICACHE_LZ32" 16
  if [ "$CONFIG_ICACHE_ASSO1" != "y" ]; then
    choice 'Replacement alorithm' \
	"Random		CONFIG_ICACHE_ALGORND \
	LRR		CONFIG_ICACHE_ALGOLRR \
	LRU		CONFIG_ICACHE_ALGOLRU" Random
    bool 'Cache locking      ' CONFIG_ICACHE_LOCK
  fi
  comment 'Data cache'
  choice 'Associativity (sets)' \
	"1		CONFIG_DCACHE_ASSO1 \
	2		CONFIG_DCACHE_ASSO2 \
	3		CONFIG_DCACHE_ASSO3 \
	4		CONFIG_DCACHE_ASSO4" 1
  choice 'Set size (kbytes/set)' \
	"1		CONFIG_DCACHE_SZ1 \
	2		CONFIG_DCACHE_SZ2 \
	4		CONFIG_DCACHE_SZ4 \
	8		CONFIG_DCACHE_SZ8 \
	16		CONFIG_DCACHE_SZ16 \
	32		CONFIG_DCACHE_SZ32 \
	64		CONFIG_DCACHE_SZ64" 2
  choice 'Line size (bytes/line)' \
	"16		CONFIG_DCACHE_LZ16 \
	32		CONFIG_DCACHE_LZ32" 16
  if [ "$CONFIG_DCACHE_ASSO1" != "y" ]; then
    choice 'Replacement alorithm' \
	"Random		CONFIG_DCACHE_ALGORND \
	LRR		CONFIG_DCACHE_ALGOLRR \
	LRU		CONFIG_DCACHE_ALGOLRU" Random
    bool 'Cache locking      ' CONFIG_DCACHE_LOCK
  fi
  if [ "$CONFIG_SYN_ATC25" = "y" -o "$CONFIG_SYN_VIRTEX" = "y" -o "$CONFIG_SYN_VIRTEX2" = "y" \
	-o "$CONFIG_SYN_ATC18" = "y" -o "$CONFIG_SYN_TSMC025" = "y" ]; then
    if [ "$CONFIG_SYN_INFER_RAM" != "y" -a "$CONFIG_MMU_ENABLE" != "y" ]; then
      bool 'AHB snooping       ' CONFIG_DCACHE_SNOOP
    fi
  fi
  if [ "$CONFIG_DCACHE_SNOOP" = "y" ]; then
  choice 'Snoop implementation' \
	"Slow		CONFIG_DCACHE_SNOOP_SLOW \
	Fast		CONFIG_DCACHE_SNOOP_FAST" Slow
  fi
  if [ "$CONFIG_DCACHE_ASSO1" != "y" ]; then
      bool 'Fast read-data generation   ' CONFIG_DCACHE_RFAST
  fi
  if [ "$CONFIG_DCACHE_ASSO1" != "y" ]; then
      bool 'Fast write-data generation   ' CONFIG_DCACHE_WFAST
  fi
  if [ "$CONFIG_MMU_ENABLE" != "y" ]; then
    bool 'Enable local data RAM            ' CONFIG_DCACHE_LRAM
  fi
    if [ "$CONFIG_DCACHE_LRAM" = "y" ]; then
      choice 'Local data RAM size (kbytes)' \
	"1		CONFIG_DCACHE_LRAM_SZ1 \
	2		CONFIG_DCACHE_LRAM_SZ2 \
	4		CONFIG_DCACHE_LRAM_SZ4 \
	8		CONFIG_DCACHE_LRAM_SZ8 \
	16		CONFIG_DCACHE_LRAM_SZ16 \
	32		CONFIG_DCACHE_LRAM_SZ32 \
	64		CONFIG_DCACHE_LRAM_SZ64" 2
      hex ' Local RAM start address (8 MSB) ' CONFIG_DCACHE_LRSTART 0x8f
    fi
endmenu
  mainmenu_option next_comment
  comment 'MMU'
  bool 'Enable MMU       ' CONFIG_MMU_ENABLE
  if [ "$CONFIG_MMU_ENABLE" = "y" ]; then
    choice 'MMU type              ' \
	"combined	CONFIG_MMU_COMBINED \
	 split		CONFIG_MMU_SPLIT" combined
    choice 'TLB replacement sheme              ' \
	"LRU      	CONFIG_MMU_REPARRAY \
	 Increment	CONFIG_MMU_REPINCREMENT" increment 
       choice 'Instruction (or combined) TLB entries' \
	"2		CONFIG_MMU_I2 \
	4		CONFIG_MMU_I4 \
	8		CONFIG_MMU_I8 \
	16		CONFIG_MMU_I16 \
	32		CONFIG_MMU_I32" 8
    if [ "$CONFIG_MMU_SPLIT" = "y" ]; then
       choice 'Data TLB entries' \
	"2		CONFIG_MMU_D2 \
	4		CONFIG_MMU_D4 \
	8		CONFIG_MMU_D8 \
	16		CONFIG_MMU_D16 \
	32		CONFIG_MMU_D32" 8
    fi         
    bool 'Enable Diagnostic Access       ' CONFIG_MMU_DIAG
  fi
  endmenu

mainmenu_option next_comment
comment 'Debug support unit          '
bool 'Debug support unit                       ' CONFIG_DSU_ENABLE
  if [ "$CONFIG_DSU_ENABLE" = "y" ]; then
    bool 'Trace buffer' CONFIG_DSU_TRACEBUF
    if [ "$CONFIG_DSU_TRACEBUF" = "y" ]; then
    bool 'Mixed instruction/AHB tracing' CONFIG_DSU_MIXED_TRACE
      choice 'Trace buffer lines' \
	"64		CONFIG_DSU_TRACESZ64 \
	128		CONFIG_DSU_TRACESZ128 \
	256		CONFIG_DSU_TRACESZ256 \
	512		CONFIG_DSU_TRACESZ512 \
	1024		CONFIG_DSU_TRACESZ1024" 128
    fi
  fi
endmenu
endmenu
mainmenu_option next_comment
comment 'AMBA configuration'
  int 'Default AHB master' CONFIG_AHB_DEFMST 0
  bool 'AHB split-transaction support             ' CONFIG_AHB_SPLIT
endmenu

mainmenu_option next_comment
comment 'Memory controller'
bool '8-bit PROM/SRAM bus support    ' CONFIG_MCTRL_8BIT
bool '16-bit PROM/SRAM bus support    ' CONFIG_MCTRL_16BIT
bool 'RAM write protection            ' CONFIG_PERI_WPROT
bool 'Write strobe timing feedback            ' CONFIG_MCTRL_WFB
bool '5th SRAM chip-select  ' CONFIG_MCTRL_5CS
bool 'SDRAM controller       ' CONFIG_MCTRL_SDRAM
  if [ "$CONFIG_MCTRL_SDRAM" = "y" ]; then
    bool 'Inverted SDRAM clock' CONFIG_MCTRL_SDRAM_INVCLK
    bool 'Separate address and data buses' CONFIG_MCTRL_SDRAM_SEPBUS
  fi
endmenu

mainmenu_option next_comment
comment 'Peripherals        '
  bool 'LEON configuration register       ' CONFIG_PERI_LCONF
  bool 'Secondary interrupt controller    ' CONFIG_PERI_IRQ2
  if [ "$CONFIG_PERI_IRQ2" = "y" ]; then
    string 'Sec. interrupt controller configuration       ' CONFIG_PERI_IRQ2_CFG "irq2none"
  fi
  bool 'Watchdog                            ' CONFIG_PERI_WDOG
  bool 'AHB status register       ' CONFIG_PERI_AHBSTAT
  bool 'On-chip AHB RAM                   ' CONFIG_AHBRAM_ENABLE
  if [ "$CONFIG_AHBRAM_ENABLE" = "y" ]; then
      choice 'AHB RAM size (Kbyte)' \
	"1		CONFIG_AHBRAM_SZ1 \
	2		CONFIG_AHBRAM_SZ2 \
	4		CONFIG_AHBRAM_SZ4 \
	8		CONFIG_AHBRAM_SZ8 \
	16		CONFIG_AHBRAM_SZ16 \
	32		CONFIG_AHBRAM_SZ32 \
	64		CONFIG_AHBRAM_SZ64" 4
  fi
mainmenu_option next_comment
comment 'Ethernet interface          '
  bool 'Enable Ethernet interface                 ' CONFIG_ETH_ENABLE
  if [ "$CONFIG_ETH_ENABLE" = "y" ]; then
    int 'TX FIFO depth' CONFIG_ETH_TXFIFO 8
    int 'RX FIFO depth' CONFIG_ETH_RXFIFO 8
    int 'AHB burst length' CONFIG_ETH_BURST 4
  fi
endmenu

mainmenu_option next_comment
comment 'PCI interface          '
  bool 'Enable PCI interface                 ' CONFIG_PCI_ENABLE
  if [ "$CONFIG_PCI_ENABLE" = "y" ]; then
    choice 'PCI core' \
	"Simple-target		CONFIG_PCI_SIMPLE_TARGET" Simple-target
    hex 'PCI vendor ID'   CONFIG_PCI_VENDORID 16E3
    hex 'PCI device ID'   CONFIG_PCI_DEVICEID 0210
    hex 'PCI revision ID'   CONFIG_PCI_REVID 1
    if [ "$CONFIG_PCI_FAST_TARGET" = "y" -o "$CONFIG_PCI_MASTER_TARGET" = "y" ]; then
      choice 'PCI FIFO depth' \
	"8		CONFIG_PCI_FIFO8     \
	16		CONFIG_PCI_FIFO16      \
	32		CONFIG_PCI_FIFO32      \
	64		CONFIG_PCI_FIFO64      \
	128 		CONFIG_PCI_FIFO128" 8
    fi
    if [ "$CONFIG_PCI_TRACE" = "y" ]; then
      choice 'PCI trace buffer depth' \
	"256		CONFIG_PCI_TRACE256     \
	512		CONFIG_PCI_TRACE512      \
	1024		CONFIG_PCI_TRACE1024     \
	2048		CONFIG_PCI_TRACE2048     \
	4096 		CONFIG_PCI_TRACE4096" 256
    fi
    bool 'PCI reset affects complete processor' CONFIG_PCI_RESETALL
    bool 'PCI arbiter                         ' CONFIG_PCI_ARBEN
  fi
endmenu

endmenu

mainmenu_option next_comment
comment 'Boot options'
  choice 'Boot selection            ' \
	"Memory		CONFIG_BOOT_EXTPROM \
	Internal-PROM		CONFIG_BOOT_INTPROM \
	Both		CONFIG_BOOT_MIXPROM" Memory
  if [ "$CONFIG_BOOT_EXTPROM" != "y" ]; then
    int 'RAM read waitstates' CONFIG_BOOT_RWS 0
    int 'RAM write waitstates' CONFIG_BOOT_WWS 0
    int 'System clock frequency' CONFIG_BOOT_SYSCLK 25000000
    int 'UART baud rate' CONFIG_BOOT_BAUDRATE 38400
    bool 'Use external baud rate setting (PIO[7:0])    ' CONFIG_BOOT_EXTBAUD
    int 'Internal boot PROM address bits' CONFIG_BOOT_PROMABITS 11
  fi
endmenu
mainmenu_option next_comment
comment 'VHDL Debugging        '
  bool 'Accelerated UART tracing       ' CONFIG_DEBUG_UART
  bool 'Integer unit register writes       ' CONFIG_DEBUG_IURF
  dep_bool 'Floating-point unit register writes       ' CONFIG_DEBUG_FPURF $CONFIG_FPU_ENABLE
  bool 'Continue on reset trap       ' CONFIG_DEBUG_NOHALT
  bool '32-bit program counters       ' CONFIG_DEBUG_PC32
  if [ "$CONFIG_FT_ENABLE" = "y" ]; then
    if [ "$CONFIG_FT_RF_ENABLE" = "y" ]; then
      bool 'Inject register-file errors    ' CONFIG_DEBUG_RFERR
    fi
    if [ "$CONFIG_FT_CACHEMEM_ENABLE" = "y" ]; then
      bool 'Inject cache memory errors    ' CONFIG_DEBUG_CACHEMEMERR
    fi
  fi
endmenu
