# 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
set MVPD_WRITE_TO_HW
set MVPD_READ_FROM_PNOR
set MVPD_WRITE_FROM_PNOR
set DJVPD_READ_FROM_HW
set DJVPD_WRITE_TO_HW
set DJVPD_READ_FROM_PNOR
set DJVPD_WRITE_TO_PNOR
set CVPD_READ_FROM_HW
set CVPD_WRITE_TO_HW
set CVPD_READ_FROM_PNOR
set CVPD_WRITE_TO_PNOR
set SKIP_RESTRICT_EX_UNITS
unset CDIMM_FORMAT_FOR_CVPD

# 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
unset DISABLE_HOSTBOOT_RUNTIME

# Compile in hostboot runtime PRD
set HBRT_PRD

# 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
