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

config CPU_AMD_AGESA_FAMILY15
	bool
	select PCI_IO_CFG_EXT
	select X86_AMD_FIXED_MTRRS

config CPU_ADDR_BITS
	int
	default 48
	depends on CPU_AMD_AGESA_FAMILY15

if CPU_AMD_AGESA_FAMILY15

config CPU_AMD_SOCKET_G34
	bool
	default n
	help
	  AMD G34 Socket

config CPU_AMD_SOCKET_C32
	bool
	default n
	help
	  AMD C32 Socket

config CPU_AMD_SOCKET_AM3R2
	bool
	default n
	help
	  AMD AM3r2 Socket

config EXT_RT_TBL_SUPPORT
	bool
	default n

config EXT_CONF_SUPPORT
	bool
	default n

config CBB
	hex
	default 0x0

config CDB
	hex
	default 0x18

config XIP_ROM_SIZE
	hex
	default 0x80000

config HAVE_INIT_TIMER
	bool
	default y

config REDIRECT_IDS_HDT_CONSOLE_TO_SERIAL
        bool "Redirect AGESA IDS_HDT_CONSOLE to serial console"
        default n
        help
          This Option allows you to redirect the AMD AGESA IDS_HDT_CONSOLE debug information to the serial console.

          Warning: Only enable this option when debuging or tracing AMD AGESA code.

endif #CPU_AMD_AGESA_FAMILY15
