# 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.
unset MVPD_READ_FROM_PNOR
set MVPD_READ_FROM_HW
unset DJVPD_READ_FROM_PNOR
set DJVPD_READ_FROM_HW
unset CVPD_READ_FROM_PNOR
set CVPD_READ_FROM_HW
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

set PNOR_IS_32MB

set NO_DMI_EREPAIR
set DISABLE_HOSTBOOT_RUNTIME

# OCC Enablment flags
unset SET_NOMINAL_PSTATE
set HTMGT
set START_OCC_DURING_BOOT

set BMC_BT_LPC_IPMI

# set for trace debug to console
unset CONSOLE_OUTPUT_TRACE
