#
# This file is part of the coreboot project.
#
# Copyright (C) 2012 Advanced Micro Devices, Inc.
# Copyright (C) 2012 Rudolf Marek <r.marek@assembler.cz>
#
# 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; version 2 of the License.
#
# 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#

if BOARD_ASUS_F2A85_M

config BOARD_SPECIFIC_OPTIONS # dummy
	def_bool y
	select ARCH_X86
	select CPU_AMD_AGESA_FAMILY15_TN
	select NORTHBRIDGE_AMD_AGESA_FAMILY15_TN_ROOT_COMPLEX
	select NORTHBRIDGE_AMD_AGESA_FAMILY15_TN
	select SOUTHBRIDGE_AMD_AGESA_HUDSON
	select HAVE_OPTION_TABLE
	select HAVE_PIRQ_TABLE
	select HAVE_MP_TABLE
	select HAVE_ACPI_RESUME
	select HAVE_HARD_RESET
	select SB_HT_CHAIN_UNITID_OFFSET_ONLY
	select LIFT_BSP_APIC_ID
	select SERIAL_CPU_INIT
	select AMDMCT
	select HAVE_ACPI_TABLES
	select SUPERIO_ITE_IT8712F
	select BOARD_ROMSIZE_KB_8192
	select GFXUMA
	select UDELAY_LAPIC

choice
	prompt "DDR3 memory voltage"
	default BOARD_ASUS_F2A85_M_DDR3_VOLT_150

config BOARD_ASUS_F2A85_M_DDR3_VOLT_135
	bool "1.35V"
	help
	  Set DRR3 memory voltage to 1.35V
config BOARD_ASUS_F2A85_M_DDR3_VOLT_150
	bool "1.50V"
	help
	  Set DRR3 memory voltage to 1.50V
config BOARD_ASUS_F2A85_M_DDR3_VOLT_165
	bool "1.65V"
	help
	  Set DRR3 memory voltage to 1.65V
endchoice

config BOARD_ASUS_F2A85_M_DDR3_VOLT_VAL
	hex
	default 0x9e if BOARD_ASUS_F2A85_M_DDR3_VOLT_135
	default 0x0 if BOARD_ASUS_F2A85_M_DDR3_VOLT_150
	default 0x1e if BOARD_ASUS_F2A85_M_DDR3_VOLT_165

config MAINBOARD_DIR
	string
	default asus/f2a85-m

config APIC_ID_OFFSET
	hex
	default 0x0

config MAINBOARD_PART_NUMBER
	string
	default "F2A85-M"

config HW_MEM_HOLE_SIZEK
	hex
	default 0x200000

config MAX_CPUS
	int
	default 4

config MAX_PHYSICAL_CPUS
	int
	default 1

config HW_MEM_HOLE_SIZE_AUTO_INC
	bool
	default n

config MEM_TRAIN_SEQ
	int
	default 2

config IRQ_SLOT_COUNT
	int
	default 11

config RAMTOP
	hex
	default 0x1000000

config HEAP_SIZE
	hex
	default 0xc0000

config STACK_SIZE
	hex
	default 0x10000

config RAMBASE
	hex
	default 0x200000

config ONBOARD_VGA_IS_PRIMARY
	bool
	default y

config VGA_BIOS_ID
	string
	default "1002,9993"

config HUDSON_LEGACY_FREE
	bool
	default y

endif # BOARD_ASUS_F2A85_M
