config BR2_PACKAGE_OPENPOWER_PNOR
        bool "openpower_pnor"
        default y if (BR2_OPENPOWER_PLATFORM)
        select BR2_PACKAGE_HOSTBOOT_P10 if (! (BR2_OPENPOWER_POWER8 || BR2_OPENPOWER_POWER9) )
        select BR2_PACKAGE_HOSTBOOT if BR2_OPENPOWER_POWER9
        select BR2_PACKAGE_HOSTBOOT_P8 if BR2_OPENPOWER_POWER8
        select BR2_PACKAGE_HOSTBOOT_BINARIES
        select BR2_PACKAGE_SKIBOOT
        select BR2_PACKAGE_OPENPOWER_FFS
        select BR2_PACKAGE_OCC_P10 if (! (BR2_OPENPOWER_POWER8 || BR2_OPENPOWER_POWER9 ) )
        select BR2_PACKAGE_OCC if BR2_OPENPOWER_POWER9
        select BR2_PACKAGE_OCC_P8 if BR2_OPENPOWER_POWER8
        select BR2_PACKAGE_CAPP_UCODE
        select BR2_PACKAGE_IMA_CATALOG
        select BR2_PACKAGE_HOST_OPENPOWER_VPNOR
        select BR2_PACKAGE_MACHINE_XML
        select BR2_PACKAGE_HCODE_P10 if (BR2_OPENPOWER_POWER10)
        select BR2_PACKAGE_HCODE if (BR2_OPENPOWER_POWER9)
        help
            Utilites for building a targeting binary image

menu "OpenPOWER PNOR assembly options"

choice
    prompt "Secure Boot key transition type"
    default BR2_OPENPOWER_SECUREBOOT_NO_KEY_TRANSITION

config BR2_OPENPOWER_SECUREBOOT_NO_KEY_TRANSITION
    bool "None"
    help
      Builds a driver that does not transition Secure Boot keys

config BR2_OPENPOWER_SECUREBOOT_KEY_TRANSITION_TO_DEV
    bool "Transition existing keys to development keys"
    help
      Builds a driver that transitions Secure Boot keys to development keys and
      powers off the system.  Only usable when system security has been
      disabled.

config BR2_OPENPOWER_SECUREBOOT_KEY_TRANSITION_TO_PROD
    bool "Transition development keys to production keys"
    help
      Builds a driver that transitions Secure Boot development keys to
      vendor supplied production keys and powers off the system.

endchoice

config BR2_OPENPOWER_SECUREBOOT_SIGN_MODE
        string "Secureboot signing mode"
        default "development"
        help
            Available options [development | production]
            Indicates the signing mode when generating the PNOR image.  Only
            applicable when hostboot is compiled with SECUREBOOT compile flag.
            Default mode is development.

config BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME
        string "Name of Openpower pnor xml layout file"
        help
            String used to define hw specific make config file

config BR2_OPENPOWER_CONFIG_NAME
        string "Name of configuration"
        help
            String used to define configuration name

config BR2_OPENPOWER_PNOR_FILENAME
        string "Name of pnor file to be created"
        help
            String used to define pnor filename to be created

config BR2_OPENPOWER_PNOR_UPDATE_FILENAME
        string "Name of pnor file to be created for updates, if needed"
        help
            String used to define pnor filename to be created for updates, if needed

config BR2_SKIBOOT_LID_NAME
        string "Name of skiboot lid name to be used"
        default "skiboot.lid"
        help
            String used to define skiboot lid filename

config BR2_TARGET_SKIBOOT_XZ
        bool "Compress the skiboot image with XZ"
        select BR2_OPENPOWER_PNOR_XZ_ENABLED
        default y

config BR2_SKIBOOT_LID_XZ_NAME
        string "Name of compressed skiboot lid"
        default "skiboot.lid" if !BR2_TARGET_SKIBOOT_XZ
        default "skiboot.lid.xz" if BR2_TARGET_SKIBOOT_XZ
        help
            String used to define compressed skiboot lid filename

config BR2_HOSTBOOT_BINARY_SBE_FILENAME
        string "Name of sbe hostboot binary"
        help
            String used to define name of sbe hostboot binary file

config BR2_HOSTBOOT_BINARY_SBEC_FILENAME
        string "Name of sbec hostboot binary"
        help
            String used to define name of sbec hostboot binary file

config BR2_HOSTBOOT_BINARY_IONV_FILENAME
        string "Name of IONV binary"
        default "ionv.bin"
        help
            String used to define name of ionv binary file

config BR2_HOSTBOOT_BINARY_WINK_FILENAME
        string "Name of winkle hostboot binary"
        help
            String used to define name of winkle hostboot binary file

config BR2_WOFDATA_FILENAME
        string "Name of wofdata original file"
        default "wof_output"
        help
            String used to define name of wofdata original file

config BR2_WOFDATA_BINARY_FILENAME
        string "Name of wofdata binary file"
        default "wofdata.bin.ecc"
        help
            String used to define name of wofdata binary ecc'd file

config BR2_MEMDDATA_FILENAME
        string "Name of memd original file"
        default "memd_output.dat"
        help
            String used to define name of memd original file

config BR2_MEMDDATA_BINARY_FILENAME
        string "Name of memd binary file"
        default "memd_extra_data.bin.ecc"
        help
            String used to define the name of the memd binary ecc'd file

config BR2_IMA_CATALOG_FILENAME
        string "Name of IMA catalog binary"
        help
            String used to define name of IMA catalog binary file

config BR2_IMA_CATALOG_ECC_FILENAME
        string "Name of IMA catalog binary"
        help
            String used to define name of IMA catalog binary file, ecc protected

config BR2_OPENPOWER_TARGETING_BIN_FILENAME
        string "Name of openpower binary targeting file"
        help
            String used to define name of openpower targeting binary file

config BR2_OPENPOWER_TARGETING_ECC_FILENAME
        string "Name of openpower binary targeting file"
        help
            String used to define name of openpower targeting binary file, ecc protected

config BR2_OCMBFW_FILENAME
        string "Name of the OCMBFW Update original file"
        default "signed_app_fw.mem"
        help
            String used to define name of OCBMFW Update original file (before any processing occurs)

config BR2_OCMBFW_PROCESSED_FILENAME
        string "Name of OCMBFW Update binary processed file"
        default "ocmbfw.bin.ecc"
        help
            String used to define the name of the OCMBFW update binary file after processing, ecc protected

config BR2_OPENPOWER_PNOR_XZ_ENABLED
        bool "Enable xz compression in PNOR payloads"
        default n

config BR2_BUILD_PNOR_SQUASHFS
        bool "Create a virtual PNOR image along with the standard image"
        default n

config BR2_OPENPOWER_MAKE_LIDS
        bool "Create a package of content and signature binaries to be used for lid creation"
        default n

endmenu
