#
# This file is part of the coreboot project.
#
# Copyright (C) 2011 Advanced Micro Devices, Inc.
#
# 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_AMD_TORPEDO

config BOARD_SPECIFIC_OPTIONS # dummy
        def_bool y
  select ARCH_X86
        select DIMM_DDR3
        select DIMM_UNREGISTERED
  select CPU_AMD_AGESA_FAMILY12
  select NORTHBRIDGE_AMD_AGESA_FAMILY12_ROOT_COMPLEX
  select NORTHBRIDGE_AMD_AGESA_FAMILY12
  select SOUTHBRIDGE_AMD_CIMX_SB900
  select SUPERIO_SMSC_KBC1100
        select HAVE_OPTION_TABLE
        select HAVE_PIRQ_TABLE
        select HAVE_MP_TABLE
        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 BOARD_ROMSIZE_KB_2048
  select ENABLE_APIC_EXT_ID
        select GFXUMA

config MAINBOARD_DIR
        string
        default amd/torpedo

config APIC_ID_OFFSET
        hex
        default 0x0

config MAINBOARD_PART_NUMBER
        string
        default "Torpedo"

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 SB_HT_CHAIN_ON_BUS0
        int
        default 1

config HT_CHAIN_END_UNITID_BASE
        hex
        default 0x1

config HT_CHAIN_UNITID_BASE
        hex
        default 0x0

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 SIO_PORT
        hex
        default 0x2e

config ONBOARD_VGA_IS_PRIMARY
	bool
	default y

config VGA_BIOS
	bool
	default n

#config VGA_BIOS_FILE
#	string "VGA BIOS path and filename"
#	depends on VGA_BIOS
#	default "rom/video/LlanoGenericVbios.bin"

config VGA_BIOS_ID
	string "VGA device PCI IDs"
	depends on VGA_BIOS
	default "1002,9641"

config AHCI_BIOS
	bool
	default n

#config AHCI_BIOS_FILE
#	string "AHCI ROM path and filename"
#	depends on AHCI_BIOS
#	default "rom/ahci/sb900.bin"

config AHCI_BIOS_ID
	string "AHCI device PCI IDs"
	depends on AHCI_BIOS
	default "1022,7801"

config XHC_BIOS
	bool
	default n

#config XHC_BIOS_FILE
#	string "XHC BIOS path and filename"
#	depends on XHC_BIOS
#	default "rom/xhc/Xhc.rom"

config XHC_BIOS_ID
	string "XHC device PCI IDs"
	depends on XHC_BIOS
	default "1022,7812"

config DRIVERS_PS2_KEYBOARD
	bool
	default y

config WARNINGS_ARE_ERRORS
	bool
	default n

config CONSOLE_POST
	bool
	depends on !NO_POST
	default y

config SATA_CONTROLLER_MODE
	hex
	default 0x0
	depends on SOUTHBRIDGE_AMD_CIMX_SB900

config ONBOARD_LAN
	bool
	default y

config ONBOARD_1394
	bool
	default y

config ONBOARD_USB30
	bool
	default n

config ONBOARD_BLUETOOTH
	bool
	default y

config ONBOARD_WEBCAM
	bool
	default y

config ONBOARD_TRAVIS
	bool
	default y

config ONBOARD_LIGHTSENSOR
	bool
	default n

endif # BOARD_AMD_TORPEDO

