#
# (C) Copyright 2007 Michal Simek
#
# Michal SIMEK <monstr@monstr.eu>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#

# Definitions for MICROBLAZE0
comment "Definitions for MICROBLAZE0"

config KERNEL_BASE_ADDR
	hex "Physical address where Linux Kernel is"
	default "0x90000000"
	help
	  BASE Address for kernel

config XILINX_MICROBLAZE0_FAMILY
	string "Targeted FPGA family"
	default "virtex5"

config XILINX_MICROBLAZE0_USE_MSR_INSTR
	int "USE_MSR_INSTR range (0:1)"
	default 0

config XILINX_MICROBLAZE0_USE_PCMP_INSTR
	int "USE_PCMP_INSTR range (0:1)"
	default 0

config XILINX_MICROBLAZE0_USE_BARREL
	int "USE_BARREL range (0:1)"
	default 0

config XILINX_MICROBLAZE0_USE_DIV
	int "USE_DIV range (0:1)"
	default 0

config XILINX_MICROBLAZE0_USE_HW_MUL
	int "USE_HW_MUL values (0=NONE, 1=MUL32, 2=MUL64)"
	default 0

config XILINX_MICROBLAZE0_USE_FPU
	int "USE_FPU values (0=NONE, 1=BASIC, 2=EXTENDED)"
	default 0

config XILINX_MICROBLAZE0_HW_VER
	string "Core version number"
	default 7.10.d
