## Set this to pull in Axone only code (such as P9A/EXP MSS code)
set AXONE

# Allows us to put in workarounds specifically for Axone bringup
set AXONE_BRING_UP

# 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


# Force DJVPD read/write to use EEPROM layer instead of old-style VPD cache
set DJVPD_READ_FROM_HW
set DJVPD_WRITE_TO_HW
unset DJVPD_READ_FROM_PNOR
unset DJVPD_WRITE_TO_PNOR

# Force MEMVPD read/write to EEPROM layer instead of old-style VPD cache
# ( No concept of MEMVPD in Axone so should not matter )
set MEMVPD_READ_FROM_HW
set MEMVPD_WRITE_TO_HW
unset MEMVPD_READ_FROM_PNOR
unset MEMVPD_WRITE_TO_PNOR

# Force MVPD read/write to use EEPROM layer instead of old-style VPD cache
set MVPD_READ_FROM_HW
set MVPD_WRITE_TO_HW
unset MVPD_READ_FROM_PNOR
unset MVPD_WRITE_TO_PNOR

# Other VPD options.
set PVPD_READ_FROM_HW
set PVPD_WRITE_TO_HW
unset PVPD_READ_FROM_PNOR
unset PVPD_WRITE_TO_PNOR
unset CDIMM_FORMAT_FOR_CVPD

#enable EEPROM caching
set SUPPORT_EEPROM_CACHING

# gpio config
set GPIODD
unset PALMETTO_VDDR

# Enable Consecutive SBE Updates
set   SBE_UPDATE_CONSECUTIVE
unset SBE_UPDATE_INDEPENDENT
unset SBE_UPDATE_SEQUENTIAL
unset SBE_UPDATE_SIMULTANEOUS
unset NO_SBE_UPDATES

unset PCIE_HOTPLUG_CONTROLLER

# turn on console output
set CONSOLE
set BMC_AST2500

unset DISABLE_HOSTBOOT_RUNTIME

# Compile in hostboot runtime PRD
set HBRT_PRD

# Compile in hb rt HTMGT : Load/Start OCC
set HTMGT
set START_OCC_DURING_BOOT
unset CONSOLE_OUTPUT_OCC_COMM

#PNOR flags
unset PNOR_TWO_SIDE_SUPPORT

set BMC_BT_LPC_IPMI

# Enable Checkstop Analysis for both
#   Runtime and IPLtime scenarios
set ENABLE_CHECKSTOP_ANALYSIS
set IPLTIME_CHECKSTOP_ANALYSIS

# set for trace debug to console
unset CONSOLE_OUTPUT_TRACE
set CONSOLE_OUTPUT_FFDCDISPLAY

# Terminate Hostboot when errors occur in manufacturing mode
#   (relies on BMC to not trigger reboot)
unset HANG_ON_MFG_SRC_TERM
