# The Serial Flash Controller is the AST2400 BMC.
set   SFC_IS_AST2400
set   BMC_DOES_SFC_INIT
unset SFC_IS_IBM_DPSS
set   ALLOW_MICRON_PNOR
set   ALLOW_MACRONIX_PNOR

# VPD options.
set MVPD_READ_FROM_HW
unset MVPD_READ_FROM_PNOR
set DJVPD_READ_FROM_HW
unset DJVPD_READ_FROM_PNOR
set CVPD_READ_FROM_HW
#set CVPD_WRITE_TO_HW
unset CVPD_READ_FROM_PNOR
set SKIP_RESTRICT_EX_UNITS

# gpio config
set GPIODD
set PALMETTO_VDDR

# to disable sbe updates
set NO_SBE_UPDATES

# Enable SBE updates
#set SBE_UPDATE_INDEPENDENT

unset PCIE_HOTPLUG_CONTROLLER

# turn on console output
set CONSOLE
set CONSOLE_AST2400

# Enable Kingston dimm voltage workaround
set KINGSTON_1_35_VOLT

set NO_DMI_EREPAIR
set DISABLE_HOSTBOOT_RUNTIME

# OCC Enablment flags
unset SET_NOMINAL_PSTATE
set HTMGT
set START_OCC_DURING_BOOT

#PNOR flags
set PNOR_TWO_SIDE_SUPPORT

set BMC_BT_LPC_IPMI

# set for trace debug to console
unset CONSOLE_OUTPUT_TRACE
