# The HIOMAP protocol is used to access PNOR
unset SFC_IS_AST2500
unset SFC_IS_AST2400
set   PNORDD_IS_IPMI
unset PNORDD_IS_SFC
unset ALLOW_MICRON_PNOR
unset ALLOW_MACRONIX_PNOR

# VPD options - Enable EECACHE
set MVPD_READ_FROM_HW
set MVPD_WRITE_TO_HW
unset MVPD_READ_FROM_PNOR
unset MVPD_WRITE_TO_PNOR

set DJVPD_READ_FROM_HW
set DJVPD_WRITE_TO_HW
unset DJVPD_READ_FROM_PNOR
unset DJVPD_WRITE_TO_PNOR

set MEMVPD_READ_FROM_HW
set MEMVPD_WRITE_TO_HW
unset MEMVPD_READ_FROM_PNOR
unset MEMVPD_WRITE_TO_PNOR

# PLDM will be read via PLDM which is not supported yet
#set PVPD_READ_FROM_HW
#set PVPD_WRITE_TO_HW
#unset PVPD_READ_FROM_PNOR
#unset PVPD_WRITE_TO_PNOR

# gpio config
set GPIODD
unset PALMETTO_VDDR

# Disable SBE updates until it is supported
# TODO: Re-enable SBE Updates when supported
unset SBE_UPDATE_CONSECUTIVE
unset SBE_UPDATE_INDEPENDENT
unset SBE_UPDATE_SEQUENTIAL
unset SBE_UPDATE_SIMULTANEOUS
set NO_SBE_UPDATES

#unset PCIE_HOTPLUG_CONTROLLER

# RTC TODO 246459
# Console doesn't currently work for Rainier SIMICS
# so circle back to re-enable it once initial bringup
# is complete
## turn on console output
#set CONSOLE
unset CONSOLE

set BMC_AST2500

#set DISABLE_HOSTBOOT_RUNTIME

# Compile in hostboot runtime PRD
#unset HBRT_PRD

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

# PNOR flags
unset PNOR_TWO_SIDE_SUPPORT

set BMC_BT_LPC_IPMI

# AXONE configs must be set until those flags are reworked in Hostboot
set AXONE
set AXONE_BRINGUP
set SUPPORT_EEPROM_CACHING

# Disable checkstop analysis for IPL and runtime scenarios
unset IPLTIME_CHECKSTOP_ANALYSIS
unset ENABLE_CHECKSTOP_ANALYSIS

# RTC TODO 246459
# Console doesn't currently work for Rainier SIMICS
# so circle back to re-enable it once initial bringup
# is complete
## set for trace debug to console
#set CONSOLE_OUTPUT_TRACE
unset CONSOLE_OUTPUT_TRACE

# RTC TODO 246459
# Console doesn't currently work for Rainier SIMICS
# so circle back to re-enable it once initial bringup
# is complete
## Output FFDC to console
#set CONSOLE_OUTPUT_FFDCDISPLAY
unset CONSOLE_OUTPUT_FFDCDISPLAY

# RTC TODO 246459
# Remove once we have better console FFDC and are
# through initial bringup
set PRINT_SYSTEM_INFO

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

set ENABLE_HDAT_IN_HOSTBOOT

# Until MCTP/PLDM file access available, load PHyp via the BOOTKERNEL partition
set LOAD_PHYP_FROM_BOOTKERNEL

# Perform presence detect using EECACHE until all parts of Rainier config are supported in simics
set EECACHE_PRESENCE_DETECT
