##
## This file is part of the coreboot project.
##
## Copyright 2015 MediaTek 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.
##

config BOARD_GOOGLE_OAK_COMMON
	def_bool n

if BOARD_GOOGLE_OAK_COMMON

config OTHERS_HAVE_TPM1
	bool
	default y
	select MAINBOARD_HAS_I2C_TPM_GENERIC
	select MAINBOARD_HAS_TPM1

config OAK_HAS_TPM2
	bool
	default n
	select MAINBOARD_HAS_I2C_TPM_CR50
	select MAINBOARD_HAS_TPM2

config BOARD_SPECIFIC_OPTIONS
	def_bool y
	select SOC_MEDIATEK_MT8173
	select BOARD_ROMSIZE_KB_4096
	select COMMON_CBFS_SPI_WRAPPER
	select DRIVER_PARADE_PS8640
	select EC_GOOGLE_CHROMEEC
	select EC_GOOGLE_CHROMEEC_SPI
	select MAINBOARD_HAS_NATIVE_VGA_INIT
	select MAINBOARD_FORCE_NATIVE_VGA_INIT
	select HAVE_LINEAR_FRAMEBUFFER
	select MAINBOARD_HAS_CHROMEOS
	select SPI_FLASH

config VBOOT
	select EC_GOOGLE_CHROMEEC_SWITCHES
	select VBOOT_VBNV_FLASH

config MAINBOARD_DIR
	string
	default google/oak

config MAINBOARD_VENDOR
	string
	default "Google"

config EC_GOOGLE_CHROMEEC_SPI_BUS
	hex
	default 0x0

config DRIVER_TPM_I2C_BUS
	hex
	default 0x2

config DRIVER_TPM_I2C_ADDR
	hex
	default 0x20 if !OAK_HAS_TPM2
	default 0x50 if OAK_HAS_TPM2

config BOOT_DEVICE_SPI_FLASH_BUS
	int
	default 9

config EC_GOOGLE_CHROMEEC_BOARDNAME
	string
	default "oak"

config EC_GOOGLE_CHROMEEC_PD_BOARDNAME
	string
	default "oak_pd"

##########################################################
#### Update below when adding a new derivative board. ####
##########################################################
config MAINBOARD_PART_NUMBER
	string
	default "Oak" if BOARD_GOOGLE_OAK
	default "Elm" if BOARD_GOOGLE_ELM
	default "Hana" if BOARD_GOOGLE_HANA

config GBB_HWID
	string
	depends on CHROMEOS
	default "OAK TEST 6858" if BOARD_GOOGLE_OAK
	default "ELM TEST 3839" if BOARD_GOOGLE_ELM
	default "HANA TEST 5855" if BOARD_GOOGLE_HANA

# All Oak-derivatives count their board IDs as 0 being equivalent to Oak rev6.
config BOARD_ID_ADJUSTMENT
	int
	default 0 if BOARD_GOOGLE_OAK
	default 7 if BOARD_GOOGLE_ELM
	default 11 if BOARD_GOOGLE_HANA

endif # BOARD_GOOGLE_OAK
