# The BMC MBOX Protocol is used to access PNOR
unset SFC_IS_AST2500
unset SFC_IS_AST2400
set   PNORDD_IS_BMCMBOX
unset PNORDD_IS_SFC
unset 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_TO_PNOR
set DJVPD_READ_FROM_HW
unset DJVPD_WRITE_TO_HW
set DJVPD_READ_FROM_PNOR
set DJVPD_WRITE_TO_PNOR
set MEMVPD_READ_FROM_HW
set MEMVPD_WRITE_TO_HW
set MEMVPD_READ_FROM_PNOR
set MEMVPD_WRITE_TO_PNOR
set PVPD_READ_FROM_HW
set PVPD_WRITE_TO_HW
set PVPD_READ_FROM_PNOR
set PVPD_WRITE_TO_PNOR
unset CDIMM_FORMAT_FOR_CVPD

# gpio config
set GPIODD
unset PALMETTO_VDDR

# Enable SBE updates
unset SBE_UPDATE_INDEPENDENT
unset SBE_UPDATE_SEQUENTIAL
set SBE_UPDATE_SIMULTANEOUS
unset NO_SBE_UPDATES

unset PCIE_HOTPLUG_CONTROLLER

# turn on console output
set CONSOLE
set BMC_AST2500

set DISABLE_HOSTBOOT_RUNTIME

# Compile in hostboot runtime PRD
set HBRT_PRD
set HTMGT
set START_OCC_DURING_BOOT

#PNOR flags
unset PNOR_TWO_SIDE_SUPPORT

set BMC_BT_LPC_IPMI

# Enable Checktop Analysis
unset ENABLE_CHECKSTOP_ANALYSIS
unset IPLTIME_CHECKSTOP_ANALYSIS

# Hostboot will detect hardware changes
unset HOST_HCDB_SUPPORT

# set for trace debug to console
set CONSOLE_OUTPUT_TRACE

unset CONFIG_SECUREBOOT
unset CONFIG_TPMDD
unset CONFIG_TPM_NUVOTON
