/* Copyright (C) 2017 RDA Technologies Limited and/or its affiliates("RDA"). * All rights reserved. * * This software is supplied "AS IS" without any warranties. * RDA assumes no responsibility or liability for the use of the software, * conveys no license or title under any patent, copyright, or mask work * right to the product. RDA reserves the right to make changes in the * software without notification. RDA also make no representation or * warranty that such application will be suitable for the specified use * without further testing or modification. */ #ifndef _BOOT_PLATFORM_H_ #define _BOOT_PLATFORM_H_ #include #include #include #include "boot_config.h" #ifdef __cplusplus extern "C" { #endif typedef enum bootResetMode { BOOT_RESET_NORMAL, ///< normal reset BOOT_RESET_FORCE_DOWNLOAD, ///< reset to force download mode } bootResetMode_t; enum { BOOT_DOWNLOAD_UART1 = 0x01, BOOT_DOWNLOAD_UART2 = 0x02, BOOT_DOWNLOAD_UART3 = 0x03, BOOT_DOWNLOAD_UART4 = 0x04, BOOT_DOWNLOAD_UART5 = 0x05, BOOT_DOWNLOAD_UART6 = 0x06, BOOT_DOWNLOAD_USERIAL = 0x08, BOOT_LOAD_FROM_BOOT2 = 0x10, BOOT_LOAD_FROM_SDCARD = 0x11, }; #define BOOT_DNLD_FROM_UART(mode) ((mode) >= BOOT_DOWNLOAD_UART1 && (mode) <= BOOT_DOWNLOAD_UART6) #define BOOT_DNLD_FROM_USERIAL(mode) ((mode) == BOOT_DOWNLOAD_USERIAL) /** * \brief image entry prototype */ typedef void (*bootJumpFunc_t)(uint32_t param); /** * \brief reset the chip * * \param mode reboot mode */ void bootReset(bootResetMode_t mode); /** * \brief power off the chip */ void bootPowerOff(void); /** * \brief check if the chip is boot from psm * * \return * - true if from psm else false */ bool bootIsFromPsmSleep(void); /** * \brief get poweron cause refer to `osiBootCause` */ int bootPowerOnCause(void); /** * \brief force update current version if secure boot enabled * * If a new version found at startup, * update the new version number into the EFUSE, * then ROM can Do the Anti-Rollback check. * * \return * - true on succeed else false */ bool bootUpdateVersion(void); /** * \brief check if secure boot enabled * * \return * - true if ebable secure boot else false */ bool bootSecureBootEnable(void); /** * \brief if second bootloader enabled, return the offset from the first * bootloader start address in bytes * * \return * - 0 the second bootloader not support * - other the second bootloader start address from the first one. * (first bootloader address + this offset = second bootloader address) */ uint32_t bootSecondOffsetBytes(void); /** * \brief platform init */ void bootPlatformInit(void); /** * \brief Enable the funtion pin reset. */ void bootResetPinEnable(void); /** * \brief jump to image entry * * There are some housekeeping before jump. For 8910, D-cache cleanup * should be called outside. * * \param param jump entry parameter * \param entry jump entry */ void bootJumpImageEntry(unsigned param, bootJumpFunc_t entry); /** * \brief initialize trace * * \param enabled whether trace is enabled */ void bootTraceInit(bool enabled); #ifdef __cplusplus } #endif #endif