##
## This file is part of the coreboot project.
##
## Copyright (C) 2008-2009 coresystems GmbH
##
## 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.
##

config SOUTHBRIDGE_AMD_SB600
	bool
	select IOAPIC
	select HAVE_USBDEBUG
	select HAVE_HARD_RESET

if SOUTHBRIDGE_AMD_SB600
config BOOTBLOCK_SOUTHBRIDGE_INIT
	string
	default "southbridge/amd/sb600/bootblock.c"

config EHCI_BAR
	hex
	default 0xfef00000

choice
	prompt "SATA Mode"
	default SATA_MODE_IDE
	help
	  Select the mode in which SATA should be driven. IDE or AHCI.
	  The default is IDE.

	config SATA_MODE_IDE
	bool "IDE"

	config SATA_MODE_AHCI
	bool "AHCI"
endchoice

config SATA_MODE
	int
	default 1 if SATA_MODE_IDE
	default 0 if SATA_MODE_AHCI

config HPET_MIN_TICKS
	hex
	default 0x14

endif
