##
## This file is part of the coreboot project.
##
## Copyright (C) 2007-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.
##
## 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 NORTHBRIDGE_AMD_GX2
	bool
	select GEODE_VSA

choice
	prompt "Framebuffer size"
	default GX2_VIDEO_MB_8MB
	depends on NORTHBRIDGE_AMD_GX2

config GX2_VIDEO_MB_4MB
	bool "4MB"
config GX2_VIDEO_MB_8MB
	bool "8MB"
config GX2_VIDEO_MB_16MB
	bool "16MB"
config GX2_VIDEO_MB_32MB
	bool "32MB"
config GX2_VIDEO_MB_64MB
	bool "64MB"
config GX2_VIDEO_MB_128MB
	bool "128MB"
config GX2_VIDEO_MB_256MB
	bool "256MB"
config GX2_VIDEO_MB_CMOS
	bool "Use CMOS option"

endchoice

config VIDEO_MB
	int
	default 4 if GX2_VIDEO_MB_4MB
	default 8 if GX2_VIDEO_MB_8MB
	default 16 if GX2_VIDEO_MB_16MB
	default 32 if GX2_VIDEO_MB_32MB
	default 64 if GX2_VIDEO_MB_64MB
	default 128 if GX2_VIDEO_MB_128MB
	default 256 if GX2_VIDEO_MB_256MB
	default -1  if GX2_VIDEO_MB_CMOS
	depends on NORTHBRIDGE_AMD_GX2

# The GX2_PROCESSOR_MHZ options let you chose the correct GX2 processor
# speed in the mainboard's Kconfig file.
config GX2_PROCESSOR_MHZ_300
	bool
config GX2_PROCESSOR_MHZ_366
	bool
config GX2_PROCESSOR_MHZ_400
	bool

# Map the config names to an integer (MHz).
config GX2_PROCESSOR_MHZ
	int
	default 300 if GX2_PROCESSOR_MHZ_300
	default 366 if GX2_PROCESSOR_MHZ_366
	default 400 if GX2_PROCESSOR_MHZ_400

