407 lines
14 KiB
C
407 lines
14 KiB
C
/**
|
|
* @file kdp2_ipc_cmd.h
|
|
* @brief system/model commands
|
|
* @version 0.1
|
|
* @date 2021-03-22
|
|
*
|
|
* @copyright Copyright (c) 2021 Kneron Inc. All rights reserved.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "kp_struct.h"
|
|
|
|
// below are for usb control trasnfer
|
|
enum
|
|
{
|
|
KDP2_CONTROL_REBOOT = 0xFF, // chip reboot
|
|
KDP2_CONTROL_SHUTDOWN = 0xFE, // chip shut down
|
|
KDP2_CONTROL_FIFOQ_RESET = 0x80, // make fifo queue clean and start-over
|
|
KDP2_CONTROL_FIFOQ_GET_STATUS = 0x81, // make firmware print fifoq status (debug only)
|
|
KDP2_CONTROL_FIFOQ_CONFIGURE = 0x82, // configure FIFO Queue buffer size and queue depth
|
|
KDP2_CONTROL_FIFOQ_ENABLE_DROPPABLE = 0x83, // enable/disable droppable inference image attribute (default : disabled)
|
|
KDP2_CONTROL_DDR_HEAP_BOUNDARY_ADJUST = 0x84, // adjust the boundary address of the ddr heap
|
|
KDP2_CONTROL_REBOOT_SYSTEM = 0x85, // reboot the entire system (KL630 only)
|
|
};
|
|
|
|
// below are for usb bulk command transfer
|
|
enum kdp2_command_id
|
|
{
|
|
KDP2_COMMAND_LOAD_MODEL = 0xA01,
|
|
KDP2_COMMAND_MEMORY_READ = 0xA02,
|
|
KDP2_COMMAND_MEMORY_WRITE = 0xA03,
|
|
KDP2_COMMAND_GET_SYSTEM_INFO = 0xA04,
|
|
KDP2_COMMAND_GET_MODEL_INFO = 0xA05,
|
|
KDP2_COMMAND_LOAD_FIRMWARE = 0xA06,
|
|
KDP2_COMMAND_LOAD_MODEL_FROM_FLASH = 0xA07,
|
|
KDP2_COMMAND_SET_CKEY = 0xA08,
|
|
KDP2_COMMAND_SET_SBT_KEY = 0xA09,
|
|
KDP2_COMMAND_SET_GPIO = 0xA0A,
|
|
KDP2_COMMAND_SET_DBG_CHECKPOINT = 0xA0B,
|
|
KDP2_COMMAND_SET_PROFILE_ENABLE = 0xA0C,
|
|
KDP2_COMMAND_GET_PROFILE_STATISTICS = 0xA0D,
|
|
KDP2_COMMAND_GET_DDR_CONFIG = 0xA0E,
|
|
KDP2_COMMAND_LOAD_NEF = 0xA0F, // not supported
|
|
KDP2_COMMAND_UPDATE_FIRMWARE = 0xA10, // not supported
|
|
KDP2_COMMAND_SWITCH_BOOT_MODE = 0xA11, // not supported
|
|
KDP2_COMMAND_UPDATE_LOADER = 0xA12, // not supported
|
|
KDP2_COMMAND_GET_FIFOQ_CONFIG = 0xA13,
|
|
KDP2_COMMAND_READ_FLASH = 0xA98,
|
|
KDP2_COMMAND_WRITE_FLASH = 0xA99,
|
|
};
|
|
|
|
// below are for firmware serial number
|
|
enum kp_firmware_serial_t
|
|
{
|
|
KP_KDP_FW = 0x01, /**< 00000001 */
|
|
|
|
/* ======================= Kdp2 Legacy ========================== */
|
|
|
|
KP_KDP2_FW = 0x80, /**< 1******* */
|
|
|
|
KP_KDP2_FW_USB_TYPE = 0x80, /**< 1*****00 */
|
|
KP_KDP2_FW_FLASH_TYPE = 0x81, /**< 1*****01 */
|
|
KP_KDP2_FW_JTAG_TYPE = 0x82, /**< 1*****10 */
|
|
KP_KDP2_FW_LOADER = 0x83, /**< 1*****11 */
|
|
KP_KDP2_FW_FIND_TYPE_MASK = 0x83, /**< 10000011 */
|
|
|
|
KP_KDP2_FW_KL720_USB_DFU = 0x101, /**< 000100000001 Special Case */
|
|
KP_KDP2_FW_KL720_LOADER = 0xBA, /**< 10111010 Special Case */
|
|
|
|
KP_KDP2_FW_HOST_MODE = 0x90, /**< 1001**** */
|
|
KP_KDP2_FW_HICO_MODE = 0xA0, /**< 1010**** */
|
|
KP_KDP2_FW_COMPANION_MODE = 0xB0, /**< 1011**** */
|
|
KP_KDP2_FW_FIND_MODE_MASK = 0xF0, /**< 11110000 */
|
|
|
|
/* ============================================================== */
|
|
|
|
KP_KDP2_FW_V2 = 0x400, /**< 01********** */
|
|
|
|
KP_KDP2_FW_USB_TYPE_V2 = 0x400, /**< 01*******000 */
|
|
KP_KDP2_FW_FLASH_TYPE_V2 = 0x401, /**< 01*******001 */
|
|
KP_KDP2_FW_JTAG_TYPE_V2 = 0x402, /**< 01*******010 */
|
|
KP_KDP2_FW_LOADER_V2 = 0x403, /**< 01*******011 */
|
|
KP_KDP2_FW_FIND_TYPE_MASK_V2 = 0x407, /**< 010000000111 */
|
|
|
|
KP_KDP2_FW_HOST_MODE_V2 = 0x410, /**< 01***001**** */
|
|
KP_KDP2_FW_HICO_MODE_V2 = 0x420, /**< 01***010**** */
|
|
KP_KDP2_FW_COMPANION_MODE_V2 = 0x430, /**< 01***011**** */
|
|
KP_KDP2_FW_FIND_MODE_MASK_V2 = 0x470, /**< 010001110000 */
|
|
|
|
KP_KDP2_FW_RTOS_OS_V2 = 0x500, /**< 0101******** */
|
|
KP_KDP2_FW_LINUX_OS_V2 = 0x600, /**< 0110******** */
|
|
KP_KDP2_FW_FIND_OS_MASK_V2 = 0x700, /**< 011100000000 */
|
|
};
|
|
|
|
#define FW_TYPE_SCPU 0x1
|
|
#define FW_TYPE_NCPU 0x2
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_LOAD_FIRMWARE'
|
|
|
|
uint32_t fw_type; // FW_TYPE_SCPU or FW_TYPE_NCPU
|
|
uint32_t fw_start; // FW code start address
|
|
uint32_t fw_size; // should equal to following data trasnfer size
|
|
uint32_t fw_bypass[16]; // 64 bytes for future use, used to bypass control settings while uploading fw
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_upload_firmware_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_LOAD_MODEL'
|
|
|
|
uint32_t model_size;
|
|
uint32_t fw_info_size;
|
|
uint8_t fw_info[];
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_load_model_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_LOAD_NEF'
|
|
|
|
uint32_t nef_size;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_load_nef_t;
|
|
|
|
// KDP2_COMMAND_MEMORY_READ and KDP2_COMMAND_MEMORY_WRITE use the same cmd struct
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_MEMORY_READ' or 'KDP2_COMMAND_MEMORY_WRITE'
|
|
|
|
uint32_t start_address;
|
|
uint32_t length;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_memory_read_write_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_GET_SYSTEM_INFO'
|
|
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_get_system_info_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t return_code; // KP_API_RETURN_CODE
|
|
|
|
kp_system_info_t system_info;
|
|
} __attribute__((aligned(4))) kdp2_ipc_response_get_system_info_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_READ_FLASH'
|
|
|
|
uint32_t flash_offset;
|
|
uint32_t length;
|
|
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_read_flash_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_WRITE_FLASH'
|
|
|
|
uint32_t flash_offset; // 4KB alignment
|
|
uint32_t length;
|
|
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_write_flash_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_GET_MODEL_INFO'
|
|
|
|
uint32_t from_ddr; // 0 = from flash, 1 = from ddr not working when value = 0, fix it if needed
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_get_model_info_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t return_code; // KP_API_RETURN_CODE
|
|
uint32_t fw_info_size;
|
|
uint32_t target_chip; // 1: KL520, 2: KL720 (Ref: kp_model_target_chip_t)
|
|
} __attribute__((aligned(4))) kdp2_ipc_response_get_model_info_fw_info_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t return_code; // KP_API_RETURN_CODE
|
|
uint32_t setup_size;
|
|
} __attribute__((aligned(4))) kdp2_ipc_response_get_model_info_setup_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_UPDATE_FIRMWARE'
|
|
|
|
uint32_t firmware_id; // 1 = scpu, 2 = ncpu
|
|
uint32_t firmware_size;
|
|
uint8_t firmware_content[];
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_update_firmware_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_UPDATE_LOADER'
|
|
|
|
uint32_t loader_size;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_update_loader_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_LOAD_MODEL_FROM_FLASH'
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_load_model_from_flash_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SET_CKEY'
|
|
uint32_t ckey;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_set_ckey_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SET_SBT_KEY'
|
|
uint32_t entry;
|
|
uint32_t key;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_set_sbt_key_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SET_GPIO'
|
|
uint32_t pin;
|
|
uint32_t value;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_set_gpio_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SET_DBG_CHECKPOINT'
|
|
uint32_t checkpoint_flags;
|
|
bool enable;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_set_dbg_checkpoint_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SET_PROFILE_ENABLE'
|
|
bool enable;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_set_profile_enable_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_GET_PROFILE_STATISTICS'
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_get_profile_statics_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_GET_DDR_CONFIG'
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_get_available_ddr_config_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_GET_FIFOQ_CONFIG'
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_get_fifo_queue_config_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t magic_type; // should be 'KDP2_MAGIC_TYPE_COMMAND'
|
|
uint32_t total_size; // size of this data struct
|
|
uint32_t command_id; // should be 'KDP2_COMMAND_SWITCH_BOOT_MODE'
|
|
uint32_t boot_mode;
|
|
} __attribute__((aligned(4))) kdp2_ipc_cmd_switch_boot_mode_t;
|
|
|
|
// below section is for old KDP firmware update, system status and get kn number commands
|
|
//////////////////////////////////////////////////////////////////
|
|
|
|
#define KDP_MSG_HDR_CMD 0xA583
|
|
#define KDP_MSG_HDR_RSP 0x8A35
|
|
|
|
#define KDP_CMD_SYSTEM_STATUS 0x21
|
|
#define KDP_CMD_SYSTEM_STATUS_RESPONSE 0x8021
|
|
#define KDP_CMD_UPDATE_FW 0x22
|
|
#define KDP_CMD_UPDATE_FW_RESPONSE 0x8022
|
|
#define KDP_CMD_UPDATE_MODEL 0x23
|
|
#define KDP_CMD_UPDATE_MODEL_RESPONSE 0x8023
|
|
#define KDP_CMD_GET_KN_NUM 0x25
|
|
#define KDP_CMD_GET_KN_NUM_RESPONSE 0x8025
|
|
|
|
// allowed to connect through passing this value as error_code parameter to kp_connect_devices()
|
|
#define KDP_MAGIC_CONNECTION_PASS 536173391
|
|
|
|
#define KDP_UPDATE_MODULE_SCPU 1
|
|
#define KDP_UPDATE_MODULE_NCPU 2
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t fw_id;
|
|
uint32_t auto_reboot;
|
|
} __attribute__((aligned(4))) kdp_firmware_update_cmd_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t rsp_code;
|
|
uint32_t fw_id;
|
|
} __attribute__((aligned(4))) kdp_firmware_update_response_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t crc;
|
|
} __attribute__((aligned(4))) kdp_get_kn_number_cmd_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t kn_number;
|
|
uint32_t dummy; // Seems not used
|
|
} __attribute__((aligned(4))) kdp_get_kn_number_response_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t crc;
|
|
} __attribute__((aligned(4))) kdp_system_status_cmd_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t sfirmware_id;
|
|
uint32_t sbuild_id;
|
|
uint16_t sys_status;
|
|
uint16_t app_status;
|
|
uint32_t nfirmware_id;
|
|
uint32_t nbuild_id;
|
|
} __attribute__((aligned(4))) kdp_system_status_response_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t fw_info_size;
|
|
uint32_t all_models_size;
|
|
uint32_t auto_reboot;
|
|
} __attribute__((aligned(4))) kdp_model_update_cmd_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t preamble;
|
|
uint16_t ctrl; /* payload_len & ctrl info */
|
|
uint16_t cmd;
|
|
uint16_t msg_len;
|
|
uint32_t rsp_code;
|
|
uint32_t model_id;
|
|
} __attribute__((aligned(4))) kdp_model_update_response_t;
|
|
|
|
//////////////////////////////////////////////////////////////////
|