LCOV - code coverage report
Current view: top level - legacy/ascend910/pub_inc/aicpu - aicpu_hccl_sqcq.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 18 18
Test Date: 2026-08-18 17:47:01 Functions: 100.0 % 2 2

            Line data    Source code
       1              : /**
       2              :  * Copyright (c) 2025 Huawei Technologies Co., Ltd.
       3              :  * This program is free software, you can redistribute it and/or modify it under the terms and conditions of
       4              :  * CANN Open Software License Agreement Version 2.0 (the "License").
       5              :  * Please refer to the License for details. You may not use this file except in compliance with the License.
       6              :  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
       7              :  * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
       8              :  * See LICENSE in the root of the software repository for the full text of the License.
       9              :  */
      10              : 
      11              : #ifndef __AICPU_HCCL_SQCQ_H__
      12              : #define __AICPU_HCCL_SQCQ_H__
      13              : 
      14              : #include <memory>
      15              : #include <vector>
      16              : #include "ascend_hal.h"
      17              : #include "log.h"
      18              : #include "rt_external.h"
      19              : #include "acl/acl_rt.h"
      20              : #include "driver/ascend_hal_define.h"
      21              : 
      22              : namespace dfx {
      23              : enum class CqeStatus : int64_t {
      24              :     kDefault = 0,
      25              :     kCqeException,
      26              :     kCqeTimeOut,
      27              :     kCqeInnerError,
      28              :     kCqeUnknown,
      29              : };
      30              : 
      31              : const uint64_t kCreditTimeInvalid = 255U;
      32              : const uint64_t kCreditTimeDefault = 240U; // 240对应到rts的credit字段就代表960s, 硬件同步时间
      33              : const uint64_t kTimeOutTimeInvalid = 0U;
      34              : const uint64_t kKfcTimeOut = 960U;       // 960s
      35              : const uint64_t kSqFullWaitTimeOut = 60U; // 60s, rtsq full等待时间要大于超时代答时间
      36              : const uint64_t kPrintSqInterval = 30U;   // 算子执行阶段打印sqe状态的间隔,单位s
      37              : 
      38              : struct DfxTimeOutConfig {
      39              :     uint64_t sqeTimeOutTimeOut; // 软件同步
      40              :     uint64_t sqeCreditTimeOut;  // 硬件同步
      41              :     bool useCredit;             // 是否使用硬件同步
      42              :     uint64_t sqeWaitTimeOut;    // kfc自己的超时
      43              :     uint64_t sqFullWaitTimeOut; // sq满的时候等待的超时
      44          542 :     std::string ToString() const
      45              :     {
      46          542 :         std::stringstream ss;
      47          542 :         ss << "sqeTimeOutTimeOut: " << sqeTimeOutTimeOut << " s";
      48          542 :         ss << " sqeCreditTimeOut: " << sqeCreditTimeOut << " s";
      49          542 :         ss << " useCredit: " << useCredit;
      50          542 :         ss << " sqeWaitTimeOut: " << sqeWaitTimeOut << " s";
      51          542 :         ss << " sqFullWaitTimeOut: " << sqFullWaitTimeOut << " s";
      52         1084 :         return ss.str();
      53          542 :     }
      54              : };
      55              : 
      56              : struct CqeQueryInput {
      57              :     uint32_t devId;
      58              :     uint16_t streamId;
      59              :     uint32_t sqId;
      60              :     uint32_t cqId;
      61              :     uint32_t type;
      62              :     uint8_t* cqeAddr;
      63           12 :     std::string ToString() const
      64              :     {
      65           12 :         std::stringstream ss;
      66           12 :         ss << "devId: " << devId;
      67           12 :         ss << " streamId: " << streamId;
      68           12 :         ss << " sqId: " << sqId;
      69           12 :         ss << " cqId: " << cqId;
      70           12 :         ss << " type: " << type;
      71           24 :         return ss.str();
      72           12 :     }
      73              : };
      74              : } // namespace dfx
      75              : namespace ts {
      76              : enum ts_app_abort_status {
      77              :     APP_ABORT_TERMINATE_FAIL = 0x0U,
      78              :     APP_ABORT_INIT,
      79              :     APP_ABORT_KILL_FINISH,
      80              :     APP_ABORT_TERMINATE_FINISH,
      81              :     APP_ABORT_STATUS_INVALID,
      82              : };
      83              : }
      84              : using rtError_t = int32_t;
      85              : constexpr int32_t RT_ERROR_FEATURE_NOT_SUPPORT = 0x0711000d;
      86              : 
      87              : constexpr uint32_t UINT32_BIT_NUM = 32U;
      88              : constexpr uint32_t MASK_32_BIT = 0xFFFFFFFFU;
      89              : constexpr uint32_t MASK_17_BIT = 0x0001FFFFU;
      90              : 
      91              : constexpr uint16_t RT_TASK_TYPE_FLIP = 98;
      92              : constexpr uint8_t RT_STARS_NEVER_TIMEOUT_KERNEL_CREDIT = dfx::kCreditTimeInvalid;
      93              : constexpr uint8_t RT_STARS_DEFAULT_KERNEL_CREDIT = RT_STARS_NEVER_TIMEOUT_KERNEL_CREDIT - 1U;
      94              : constexpr uint8_t RT_STARS_EXIST_ERROR = 0x3FU;
      95              : constexpr uint8_t RT_STARS_EXIST_WARNING = 0x40U;
      96              : constexpr uint16_t RT_SYNC_TASK_FLAG = 0x8000U;
      97              : constexpr u64 RT_GET_HEAD_CYCLE_NUM = 100000000U;
      98              : constexpr uint8_t RT_STARS_AICPU_MODEL_KERNEL_CREDIT = 18U;
      99              : constexpr uint8_t RT_STARS_AICPU_DEFAULT_TIMEOUT = 28U;
     100              : constexpr uint8_t RT_STARS_TASK_KERNEL_CREDIT_SCALE_UINT8 = 4U;
     101              : 
     102              : constexpr u64 RT_CHIP_ADDR_OFFSET = 0x80000000000ULL;
     103              : constexpr u64 RT_DIE_ADDR_OFFSET = 0x10000000000ULL;
     104              : 
     105              : constexpr u64 RT_STARS_PCIE_BASE_ADDR = 0x400004008000ULL;
     106              : constexpr u64 RT_PCIE_LOCAL_DEV_OFFSET = 36ULL;
     107              : constexpr u64 RT_PCIE_REMOTE_DEV_OFFSET = 32ULL;
     108              : 
     109              : constexpr u64 STARS_NOTIFY_BASE_ADDR = 0x100000ULL;
     110              : constexpr u64 STARS_NOTIFY_OFFSET = 0x4ULL;
     111              : constexpr uint32_t STARS_NOTIFY_NUM_OF_SINGLE_TABLE = 512U;
     112              : constexpr u64 STARS_NOTIFY_TABLE_OFFSET = 0x10000ULL;
     113              : 
     114              : constexpr u64 RT_STARS_BASE_ADDR = 0x06a0000000ULL;
     115              : constexpr u64 STARS_EVENT_BASE_ADDR = 0x200000ULL;
     116              : constexpr u64 STARS_EVENT_OFFSET = 0x4ULL;
     117              : constexpr uint32_t STARS_EVENT_NUM_OF_SINGLE_TABLE = 4096U;
     118              : constexpr u64 STARS_EVENT_TABLE_OFFSET = 0x10000ULL;
     119              : 
     120              : constexpr u32 RT_SDMA_COMPERR = 0x9; // A3 sdma error类型为0x9时,表示写拷贝发生超时代答,或者数据搬移时地址译码错误
     121              : constexpr u32 RT_SDMA_COMPDATAERR = 0xa; // A3 sdma error类型为0xa时,表示读拷贝发生超时代答,或者读HBM返回ERROR
     122              : constexpr u32 RT_SDMA_DATAERR = 0x8;                 // A3 sdma error类型为0x8时,表示读HBM返回ERROR
     123              : constexpr uint16_t TS_ERROR_RETRY_CONSTRAINT = 1000; // 重执行失败,约束是算子不一致或者inplace算子不支持
     124              : constexpr uint16_t TS_ERROR_AICPU_SDMA = 1001; // AICPU算子失败,sqe类型为SDMA是,上报给aicpu的框架错误码
     125              : 
     126              : constexpr u32 AC_SQE_REV_MAX_CNT = 32U; // 910B平台下调用halCqReportRecv接口最大能够接收的个数
     127              : constexpr uint32_t MAX_REPORT_CNT = 256U;
     128              : 
     129              : enum SqeType : uint8_t {
     130              :     SQE_TYPE_DEFAULT = 0,
     131              :     NOTIFY_SQE,
     132              :     WRITE_VALUE_SQE,
     133              :     EVENT_SQE,
     134              :     MEMCPY_ASYNC_SQE,
     135              :     CCORE_WAIT_START_SQE,
     136              :     CCORE_WRITE_VALUE_SQE,
     137              :     NOTIFY_SQE_V2,
     138              :     WRITE_VALUE_SQE_V2,
     139              :     EVENT_SQE_V2,
     140              :     MEMCPY_ASYNC_SQE_V2,
     141              :     RDMA_DB_SEND_SQE,
     142              :     FLIP_PLACEHOLDER_SQE,
     143              :     MEMCPY_ASYNC_SQE_V3,
     144              :     CACHE_MEMCPY_PLACEHOLDER_SQE,
     145              :     CACHE_NOTIFY_PLACEHOLDER_SQE,
     146              :     CACHE_WRITE_VALUE_PLACEHOLDER_SQE,
     147              :     CACHE_MEMCPY_RECORD_PLACEHOLDER_SQE
     148              : };
     149              : 
     150              : constexpr aclDataType DT_MAP_TABLE[HCCL_DATA_TYPE_RESERVED + 1] = {
     151              :     ACL_INT8,         /* HCCL_DATA_TYPE_INT8 = 0 */
     152              :     ACL_INT16,        /* HCCL_DATA_TYPE_INT16 = 1 */
     153              :     ACL_INT32,        /* HCCL_DATA_TYPE_INT32 = 2 */
     154              :     ACL_FLOAT16,      /* HCCL_DATA_TYPE_FP16 = 3 */
     155              :     ACL_FLOAT,        /* HCCL_DATA_TYPE_FP32 = 4 */
     156              :     ACL_DT_UNDEFINED, /* HCCL_DATA_TYPE_INT64 = 5 */
     157              :     ACL_DT_UNDEFINED, /* HCCL_DATA_TYPE_UINT64 = 6 */
     158              :     ACL_UINT8,        /* HCCL_DATA_TYPE_UINT8 = 7 */
     159              :     ACL_UINT16,       /* HCCL_DATA_TYPE_UINT16 = 8 */
     160              :     ACL_UINT32,       /* HCCL_DATA_TYPE_UINT32 = 9 */
     161              :     ACL_DT_UNDEFINED, /* HCCL_DATA_TYPE_FP64 = 10 */
     162              :     ACL_BF16,         /* HCCL_DATA_TYPE_BFP16 = 11 */
     163              :     ACL_DT_UNDEFINED  /* HCCL_DATA_TYPE_RESERVED */
     164              : };
     165              : 
     166              : constexpr aclrtReduceKind ACL_RT_MEMCPY_INVALID = static_cast<aclrtReduceKind>(-1);
     167              : 
     168              : constexpr aclrtReduceKind RK_MAP_TABLE[HCCL_REDUCE_RESERVED + 1] = {
     169              :     ACL_RT_MEMCPY_SDMA_AUTOMATIC_SUM, /* HCCL_REDUCE_SUM = 0 */
     170              :     ACL_RT_MEMCPY_INVALID,            /* HCCL_REDUCE_PROD = 1 */
     171              :     ACL_RT_MEMCPY_SDMA_AUTOMATIC_MAX, /* HCCL_REDUCE_MAX = 2 */
     172              :     ACL_RT_MEMCPY_SDMA_AUTOMATIC_MIN, /* HCCL_REDUCE_MIN = 3 */
     173              :     ACL_RT_MEMCPY_INVALID,            /* HCCL_REDUCE_RESERVED = 4 */
     174              : };
     175              : 
     176              : enum aicpuNotifySqeType { NOTIFY_RECORD = 0, NOTIFY_WAIT = 1 };
     177              : 
     178              : enum rtStarsWriteValueSubType {
     179              :     RT_STARS_WRITE_VALUE_SUB_TYPE_DEFAULT = 0,
     180              :     RT_STARS_WRITE_VALUE_SUB_TYPE_EVENT_RESET = 1,
     181              :     RT_STARS_WRITE_VALUE_SUB_TYPE_RDMA_DB_SEND = 2,
     182              :     RT_STARS_WRITE_VALUE_SUB_TYPE_NOTIFY_RECORD_IPC_NO_PCIE = 3,
     183              :     RT_STARS_WRITE_VALUE_SUB_TYPE_NOTIFY_RECORD_IPC_PCIE = 4,
     184              :     RT_STARS_WRITE_VALUE_SUB_TYPE_MAX,
     185              : };
     186              : 
     187              : enum rtStarsSqeType {
     188              :     RT_STARS_SQE_TYPE_FFTS = 0,          // FFTS
     189              :     RT_STARS_SQE_TYPE_AICPU = 1,         // AICPU
     190              :     RT_STARS_SQE_TYPE_PLACE_HOLDER = 3,  // PLACE_HOLDER
     191              :     RT_STARS_SQE_TYPE_EVENT_RECORD = 4,  // EVENT_RECORD
     192              :     RT_STARS_SQE_TYPE_EVENT_WAIT = 5,    // EVENT_WAIT
     193              :     RT_STARS_SQE_TYPE_NOTIFY_RECORD = 6, // NOTIFY_RECORD
     194              :     RT_STARS_SQE_TYPE_NOTIFY_WAIT = 7,   // NOTIFY_WAIT
     195              :     RT_STARS_SQE_TYPE_WRITE_VALUE = 8,   // for EVENT_RESET task
     196              :     RT_STARS_SQE_TYPE_SDMA = 11,         // SDMA
     197              :     RT_STARS_SQE_TYPE_VPC = 12,          // VPC
     198              :     RT_STARS_SQE_TYPE_JPEGE = 13,        // JPEGE
     199              :     RT_STARS_SQE_TYPE_JPEGD = 14,        // JPEGD
     200              :     RT_STARS_SQE_TYPE_DSA = 15,
     201              :     RT_STARS_SQE_TYPE_ROCCE = 16,    // RoCCE
     202              :     RT_STARS_SQE_TYPE_PCIE_DMA = 17, // PCIE_DMA
     203              :     RT_STARS_SQE_TYPE_RESV = 18,     // reserve
     204              :     RT_STARS_SQE_TYPE_CDQM = 19,     // CDQM
     205              :     RT_STARS_SQE_TYPE_COND = 20,     // condition
     206              :     RT_STARS_SQE_TYPE_END = 21,
     207              :     RT_STARS_SQE_TYPE_INVALID = 63,   // STARS_SQE_TYPE_INVALID
     208              :     RT_STARS_SQE_TYPE_VIR_TYPE = 0xFF // DVPP virtual SQE TYPE
     209              : };
     210              : 
     211              : /* stars send interrupt direction */
     212              : enum rtStarsSqeIntDirType {
     213              :     RT_STARS_SQE_INT_DIR_NO = 0,         // send no interrupt
     214              :     RT_STARS_SQE_INT_DIR_TO_TSCPU = 1,   // to tscpu
     215              :     RT_STARS_SQE_INT_DIR_TO_CTRLCPU = 2, // to ctrlcpu
     216              :     RT_STARS_SQE_INT_DIR_TO_HOST = 3,    // to host
     217              :     RT_STARS_SQE_INT_DIR_END = 4
     218              : };
     219              : 
     220              : enum rtStarsMemcpyAsyncOperationKind {
     221              :     RT_STARS_MEMCPY_ASYNC_OP_KIND_CPY = 0x00,
     222              :     RT_STARS_MEMCPY_ASYNC_OP_KIND_ADD = 0x01,
     223              :     RT_STARS_MEMCPY_ASYNC_OP_KIND_MAX = 0x02,
     224              :     RT_STARS_MEMCPY_ASYNC_OP_KIND_MIN = 0x03,
     225              :     RT_STARS_MEMCPY_ASYNC_OP_KIND_EQUAL = 0x04
     226              : };
     227              : 
     228              : enum rtStarsMemcpyAsyncDataType {
     229              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT8 = 0x00,
     230              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT16 = 0x10,
     231              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_INT32 = 0x20,
     232              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_UINT8 = 0x30,
     233              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_UINT16 = 0x40,
     234              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_UINT32 = 0x50,
     235              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_FP16 = 0x60,
     236              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_FP32 = 0x70,
     237              :     RT_STARS_MEMCPY_ASYNC_DATA_TYPE_BFP16 = 0x80,
     238              :     RT_STARS_MEMCPY_ASYNC_OP_RESERVED = 0xf0
     239              : };
     240              : 
     241              : enum rtStarsWriteValueSizeType {
     242              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_8BIT = 0,
     243              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_16BIT = 1,
     244              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_32BIT = 2,
     245              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_64BIT = 3,
     246              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_128BIT = 4,
     247              :     RT_STARS_WRITE_VALUE_SIZE_TYPE_256BIT = 5
     248              : };
     249              : 
     250              : enum rtStarsCondIsaRegister_t {
     251              :     RT_STARS_COND_ISA_REGISTER_R0 = 0, // R0 is always zero, can't be destination register
     252              :     RT_STARS_COND_ISA_REGISTER_R1 = 1,
     253              :     RT_STARS_COND_ISA_REGISTER_R2 = 2,
     254              :     RT_STARS_COND_ISA_REGISTER_R3 = 3,
     255              :     RT_STARS_COND_ISA_REGISTER_R4 = 4,
     256              :     RT_STARS_COND_ISA_REGISTER_R5 = 5
     257              : };
     258              : 
     259              : // enum for isa op LOAD func3
     260              : enum rtStarsCondIsaLoadFunc3_t { RT_STARS_COND_ISA_LOAD_FUNC3_LDR = 0B011 };
     261              : 
     262              : // enum for isa op LWI func3
     263              : enum rtStarsCondIsaLwiFunc3_t { RT_STARS_COND_ISA_LWI_FUNC3_LHWI = 0B000, RT_STARS_COND_ISA_LWI_FUNC3_LLWI = 0B001 };
     264              : 
     265              : // enum for isa op Branch func3
     266              : enum rtStarsCondIsaBranchFunc3_t {
     267              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BEQ = 0B000,
     268              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BNE = 0B001,
     269              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BLT = 0B100,
     270              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BGE = 0B101,
     271              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BLTU = 0B110,
     272              :     RT_STARS_COND_ISA_BRANCH_FUNC3_BGEU = 0B111
     273              : };
     274              : 
     275              : enum rtStarsCondIsaOpCode_t {
     276              :     RT_STARS_COND_ISA_OP_CODE_OP_IMM = 0B0010011,                     // Integer Register-immd Instructions
     277              :     RT_STARS_COND_ISA_OP_CODE_NOP = RT_STARS_COND_ISA_OP_CODE_OP_IMM, // NOP is using OP_IMM ADDI R0,R0,0
     278              :     RT_STARS_COND_ISA_OP_CODE_OP = 0B0110011,                         // Integer Register-Register Operations
     279              :     RT_STARS_COND_ISA_OP_CODE_LWI = 0B1011011,                        // load immd
     280              :     RT_STARS_COND_ISA_OP_CODE_BRANCH = 0B1100011,                     // Conditional stream-jump
     281              :     RT_STARS_COND_ISA_OP_CODE_LOOP = 0B1111011,                       // LOOP
     282              :     RT_STARS_COND_ISA_OP_CODE_STREAM = 0B0101011,                     // STREAM
     283              :     RT_STARS_COND_ISA_OP_CODE_LOAD_IMM = 0B0000111,                   // LOAD immd
     284              :     RT_STARS_COND_ISA_OP_CODE_LOAD = 0B0000011,                       // Load
     285              :     RT_STARS_COND_ISA_OP_CODE_STORE = 0B0100111,                      // Store
     286              :     RT_STARS_COND_ISA_OP_CODE_FUNC_CALL = 0B1101011,                  // FUNC_CALL
     287              :     RT_STARS_COND_ISA_OP_CODE_SYSTEM = 0B1110011                      // CSR
     288              : };
     289              : 
     290              : // enum for isa op Op Imm func3
     291              : enum rtStarsCondIsaOpImmFunc3_t {
     292              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_ADDI = 0B000,
     293              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_NOP = RT_STARS_COND_ISA_OP_IMM_FUNC3_ADDI, // NOP is using OP_IMM ADDI R0,R0,0
     294              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_SLLI = 0B001,
     295              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_SLTI = 0B010,
     296              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_SLTIU = 0B011,
     297              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_XORI = 0B100,
     298              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_SRLI = 0B101,
     299              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_ORI = 0B110,
     300              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_ANDI = 0B111,
     301              :     RT_STARS_COND_ISA_OP_IMM_FUNC3_SRAI = 0B101 // diff with SRLI by func7
     302              : };
     303              : 
     304              : // enum for isa op store func3
     305              : enum rtStarsCondIsaStoreFunc3_t {
     306              :     RT_STARS_COND_ISA_STORE_FUNC3_SB = 0B000,
     307              :     RT_STARS_COND_ISA_STORE_FUNC3_SH = 0B001,
     308              :     RT_STARS_COND_ISA_STORE_FUNC3_SW = 0B010,
     309              :     RT_STARS_COND_ISA_STORE_FUNC3_SD = 0B011,
     310              : };
     311              : 
     312              : #define TOPOLOGY_HCCS 0
     313              : #define TOPOLOGY_PIX 1
     314              : #define TOPOLOGY_PIB 2
     315              : #define TOPOLOGY_PHB 3
     316              : #define TOPOLOGY_SYS 4
     317              : 
     318              : #pragma pack(push)
     319              : #pragma pack(1)
     320              : 
     321              : struct rtStarsWriteValueSqe_t {
     322              :     rtStarsSqeHeader_t header;
     323              : 
     324              :     uint32_t res3;
     325              : 
     326              :     uint32_t res4 : 16;
     327              :     uint32_t kernel_credit : 8;
     328              :     uint32_t res5 : 8;
     329              : 
     330              :     uint32_t write_addr_low;
     331              : 
     332              :     uint32_t write_addr_high : 17;
     333              :     uint32_t res6 : 3;
     334              :     uint32_t awsize : 3;
     335              :     uint32_t snoop : 1;
     336              :     uint32_t awcache : 4;
     337              :     uint32_t awprot : 3;
     338              :     uint32_t va : 1; // 1 /* 1: virtual address; 0: phy addr */
     339              : 
     340              :     uint32_t res7; // eventId for event reset task
     341              :     uint32_t sub_type;
     342              : 
     343              :     uint32_t write_value_part0;
     344              :     uint32_t write_value_part1;
     345              :     uint32_t rdmaWrLenth; // rdmaWr len
     346              :     uint32_t rdmaType;    // notify / payload
     347              :     uint32_t write_value_part4;
     348              :     uint32_t write_value_part5;
     349              :     uint32_t write_value_part6;
     350              :     uint32_t write_value_part7;
     351              : };
     352              : 
     353              : struct rtStarsEventSqe_t {
     354              :     rtStarsSqeHeader_t header;
     355              :     uint16_t eventId;
     356              :     uint16_t res2;
     357              : 
     358              :     uint16_t res3;
     359              :     uint8_t kernel_credit;
     360              :     uint8_t res4;
     361              :     uint32_t exe_result;
     362              :     uint32_t timeout;
     363              :     uint32_t res5[10];
     364              : };
     365              : 
     366              : struct rtStarsMemcpyAsyncSqe_t {
     367              :     rtStarsSqeHeader_t header;
     368              : 
     369              :     uint32_t res3;
     370              :     /* *******12 bytes********* */
     371              : 
     372              :     uint16_t res4;
     373              :     uint8_t kernel_credit;
     374              :     uint8_t ptr_mode : 1;
     375              :     uint8_t res5 : 7;
     376              :     /* *******16 bytes********* */
     377              : 
     378              :     uint32_t opcode : 8;
     379              :     uint32_t ie2 : 1;
     380              :     uint32_t sssv : 1;
     381              :     uint32_t dssv : 1;
     382              :     uint32_t sns : 1;
     383              :     uint32_t dns : 1;
     384              :     uint32_t qos : 4;
     385              :     uint32_t sro : 1;
     386              :     uint32_t dro : 1;
     387              :     uint32_t partid : 8;
     388              :     uint32_t mpam : 1;
     389              :     uint32_t res6 : 4;
     390              :     /* *******20 bytes********* */
     391              : 
     392              :     uint16_t src_streamid;
     393              :     uint16_t src_sub_streamid;
     394              :     uint16_t dst_streamid;
     395              :     uint16_t dst_sub_streamid;
     396              :     /* *******28 bytes********* */
     397              : 
     398              :     uint32_t length;
     399              :     uint32_t src_addr_low;
     400              :     uint32_t src_addr_high;
     401              :     uint32_t dst_addr_low;
     402              :     uint32_t dst_addr_high;
     403              : 
     404              :     uint8_t linkType;
     405              :     uint8_t resvered[3];
     406              :     uint32_t reslast[3];
     407              : };
     408              : 
     409              : struct rtFlipTaskTag_t {
     410              :     uint16_t flipNumReport;
     411              :     uint8_t reserved[46];
     412              : };
     413              : 
     414              : // 用于alltoallv算子小数据量下展开时cache中的cache-memcpy placeholder (for zero-len memcpy SQE)
     415              : struct rtCacheMemcpyTaskTag_t {
     416              :     // 注意: 不需要维护length, 因为每次cache hit时, length会根据send/recv info动态计算得到
     417              : 
     418              :     // 第一次展开时保留src/dst addr, cache miss后处理时, 用于UpdateRefreshAddrInfoForAlltoallv
     419              :     // 后续cache hit时只需要保留hccl buffer内的src/dst addr
     420              :     // 如果是user memory内的src/dst addr, 则根据send/recv info动态计算得到, 不需要在placeholder中维护
     421              :     uint32_t src_addr_low;
     422              :     uint32_t src_addr_high;
     423              :     uint32_t dst_addr_low;
     424              :     uint32_t dst_addr_high;
     425              : 
     426              :     // 始终需要维护
     427              :     // LocalCopy/PrepareIntraData: linkType使用默认参数LINK_ONCHIP
     428              :     // RemoteCopy: linkType使用srcRank-localRank之间的LINK对应的linkType
     429              :     uint8_t kernel_credit;
     430              :     uint8_t linkType;
     431              :     uint32_t qos;
     432              : 
     433              :     uint8_t reserved[26];
     434              : };
     435              : 
     436              : struct rtCacheNotifyTaskTag_t {
     437              :     uint8_t is_wait; // NotifyWait or NotifyRecord
     438              :     // Only for NotifyWait
     439              :     uint8_t kernel_credit;
     440              :     uint32_t timeout;
     441              :     // Shared by NotifyWait and NotifyRecord
     442              :     uint32_t notify_id;
     443              :     uint8_t reserved[38];
     444              : };
     445              : 
     446              : struct rtCacheWriteValueTaskTag_t {
     447              :     // For WriteValueRecord
     448              :     uint32_t write_addr_low;
     449              :     uint32_t write_addr_high;
     450              :     uint8_t reserved[40];
     451              : };
     452              : 
     453              : struct rtCacheMemcpyRecordTaskTag_t {
     454              :     // 20 bytes
     455              :     uint32_t length;
     456              :     uint32_t src_addr_low;
     457              :     uint32_t src_addr_high;
     458              :     uint32_t dst_addr_low;
     459              :     uint32_t dst_addr_high;
     460              : 
     461              :     // 4 bytes
     462              :     uint32_t opcode : 8;
     463              :     uint32_t partid : 8;
     464              :     uint32_t res : 16;
     465              : 
     466              :     // 2 bytes
     467              :     uint8_t kernel_credit;
     468              :     uint8_t linkType;
     469              : 
     470              :     // 4 bytes
     471              :     uint32_t qos;
     472              : 
     473              :     uint8_t reserved[18];
     474              : };
     475              : 
     476              : struct rtStarsPlaceHolderSqe_t {
     477              :     rtStarsSqeHeader_t header;
     478              : 
     479              :     uint32_t res1;
     480              :     uint16_t res2;
     481              :     uint8_t kernel_credit;
     482              :     uint8_t res3;
     483              : 
     484              :     /* The struct in the union must be 48 bytes */
     485              :     union {
     486              :         rtFlipTaskTag_t flip_task_info;
     487              :         rtCacheMemcpyTaskTag_t cache_memcpy_task_info;
     488              :         rtCacheNotifyTaskTag_t cache_notify_task_info;
     489              :         rtCacheWriteValueTaskTag_t cache_write_value_task_info;
     490              :         rtCacheMemcpyRecordTaskTag_t cache_memcpy_record_task_info;
     491              :         uint32_t resv[12];
     492              :     } u;
     493              : };
     494              : 
     495              : struct rtStarsCondOpLHWI_t {
     496              :     uint32_t opCode : 7;
     497              :     uint32_t rd : 3;
     498              :     uint32_t reserved0 : 2; // reserved
     499              :     uint32_t func3 : 3;
     500              :     uint32_t reserved1 : 2; // reserved
     501              :     uint32_t immd : 15;
     502              : };
     503              : 
     504              : // LWI LLWI: RT_STARS_COND_ISA_OP_CODE_LWI
     505              : struct rtStarsCondOpLLWI_t {
     506              :     uint32_t opCode : 7;
     507              :     uint32_t rd : 3;
     508              :     uint32_t reserved0 : 2; // reserved
     509              :     uint32_t func3 : 3;
     510              :     uint32_t immdHigh : 17;
     511              :     uint32_t immdLow : 32;
     512              : };
     513              : 
     514              : // Branch: RT_STARS_COND_ISA_OP_CODE_BRANCH
     515              : struct rtStarsCondOpBranch_t {
     516              :     uint32_t opCode : 7;
     517              :     uint32_t jumpInstrOffset : 4;
     518              :     uint32_t rsvd : 1;
     519              :     uint32_t func3 : 3;
     520              :     uint32_t rs1 : 3;
     521              :     uint32_t rsvd1 : 2;
     522              :     uint32_t rs2 : 3;
     523              :     uint32_t rsvd2 : 2;
     524              :     uint32_t rsvd3 : 7;
     525              : };
     526              : 
     527              : struct rtStarsCondOpLoad_t {
     528              :     uint32_t opCode : 7;
     529              :     uint32_t rd : 3;
     530              :     uint32_t reserved0 : 2;
     531              :     uint32_t func3 : 3;
     532              :     uint32_t rs1 : 3;
     533              :     uint32_t reserved1 : 2;
     534              :     uint32_t immd : 12;
     535              : };
     536              : 
     537              : // enum for isa op load imm func3
     538              : enum rtStarsCondIsaLoadImmFunc3_t {
     539              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LB = 0B000,
     540              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LH = 0B001,
     541              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LW = 0B010,
     542              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LD = 0B011,
     543              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LBU = 0B100,
     544              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LHU = 0B101,
     545              :     RT_STARS_COND_ISA_LOAD_IMM_FUNC3_LWU = 0B110
     546              : };
     547              : 
     548              : struct rtStarsCondOpLoadImm_t {
     549              :     uint32_t opCode : 7;
     550              :     uint32_t rd : 3;
     551              :     uint32_t reserved : 2;
     552              :     uint32_t func3 : 3;
     553              :     uint32_t immdAddrHigh : 17;
     554              :     uint32_t immdAddrLow;
     555              : };
     556              : 
     557              : struct rtStarsCondOpImm_t {
     558              :     uint32_t opCode : 7;
     559              :     uint32_t rd : 3;
     560              :     uint32_t reserved0 : 2; // reserved
     561              :     uint32_t func3 : 3;
     562              :     uint32_t rs1 : 3;
     563              :     uint32_t reserved1 : 2; // reserved
     564              :     uint32_t immd : 12;
     565              : };
     566              : 
     567              : // store register data to ddr, RT_STARS_COND_ISA_OP_CODE_STORE
     568              : struct rtStarsCondOpStore_t {
     569              :     uint32_t opCode : 7;
     570              :     uint32_t immdLow : 5;
     571              :     uint32_t func3 : 3;
     572              :     uint32_t rs1 : 3;
     573              :     uint32_t reserved1 : 2;
     574              :     uint32_t rs2 : 3;
     575              :     uint32_t reserved2 : 2;
     576              :     uint32_t immdHigh : 7;
     577              : };
     578              : 
     579              : // nop is using op-imm ADDI
     580              : using rtStarsCondOpNop_t = rtStarsCondOpImm_t;
     581              : struct rtStarsCondOpClear_t {
     582              :     rtStarsCondOpLLWI_t llwi1;
     583              :     rtStarsCondOpLHWI_t lhwi1; // load wait address as the immediate to R1
     584              :     rtStarsCondOpStore_t sw;   // the last turn clear write_value
     585              :     rtStarsCondOpNop_t nop[3];
     586              : };
     587              : struct rtStarsCcoreWaitStartSqe_t {
     588              :     rtStarsSqeHeader_t sqeHeader;
     589              : 
     590              :     uint32_t reserved0;
     591              :     uint16_t reserved1;
     592              :     uint8_t kernel_credit;
     593              :     uint8_t reserved2 : 7;
     594              :     uint8_t csc : 1;
     595              : 
     596              :     rtStarsCondOpLoadImm_t ldrImm1; // load current turn as the immediate to R3
     597              :     rtStarsCondOpLoadImm_t ldrImm2; // load wait value, to R2
     598              :     rtStarsCondOpBranch_t beq;      // if waitvalue == 0, goto read R2
     599              :     union {
     600              :         rtStarsCondOpClear_t clear;
     601              :         rtStarsCondOpNop_t nop[7];
     602              :     };
     603              : };
     604              : 
     605              : struct rtStarsCcoreWriteValueSqe_t {
     606              :     rtStarsSqeHeader_t sqeHeader;
     607              : 
     608              :     uint32_t reserved0;
     609              :     uint16_t reserved1;
     610              :     uint8_t kernel_credit;
     611              :     uint8_t reserved2 : 7;
     612              :     uint8_t csc : 1;
     613              : 
     614              :     rtStarsCondOpLoadImm_t ldrImm;
     615              :     rtStarsCondOpLLWI_t llwi1;
     616              :     rtStarsCondOpLHWI_t lhwi1;
     617              :     rtStarsCondOpStore_t sw;
     618              :     rtStarsCondOpNop_t nop[6];
     619              : };
     620              : struct rtLogicCqReport_t {
     621              :     volatile uint16_t streamId;
     622              :     volatile uint16_t taskId;
     623              :     volatile uint32_t errorCode; // cqe acc_status/sq_sw_status
     624              :     volatile uint8_t errorType;  // bit0 ~ bit5 cqe stars_defined_err_code, bit 6 cqe warning bit
     625              :     volatile uint8_t sqeType;
     626              :     volatile uint16_t sqId;
     627              :     volatile uint16_t sqHead;
     628              :     volatile uint16_t matchFlag : 1;
     629              :     volatile uint16_t dropFlag : 1;
     630              :     volatile uint16_t errorBit : 1;
     631              :     volatile uint16_t accError : 1;
     632              :     volatile uint16_t reserved0 : 12;
     633              :     union {
     634              :         volatile uint64_t timeStamp;
     635              :         volatile uint16_t sqeIndex;
     636              :     } u1;
     637              :     /* Union description:
     638              :      * Internal: enque_timestamp temporarily used as dfx
     639              :      * External: reserved1
     640              :      */
     641              :     union {
     642              :         volatile uint64_t enqueTimeStamp;
     643              :         volatile uint64_t reserved1;
     644              :     } u2;
     645              : };
     646              : 
     647              : const std::vector<std::string> StarsCqeErrorDesc
     648              :     = {"task exception",          "task trap",          "task timeout", "sqe error",
     649              :        "resource conflict error", "sq sw status error", "warning"};
     650              : #pragma pack(pop)
     651              : 
     652              : inline void
     653              : AddOneWriteValueRecordSqe(uint16_t streamId, uint16_t taskId, u64 notifyWRAddr, rtStarsWriteValueSqe_t* const sqe)
     654              : {
     655              :     sqe->header.type = RT_STARS_SQE_TYPE_WRITE_VALUE;
     656              :     sqe->header.rtStreamId = streamId;
     657              :     sqe->header.taskId = taskId;
     658              :     sqe->kernel_credit = RT_STARS_DEFAULT_KERNEL_CREDIT;
     659              :     sqe->awsize = RT_STARS_WRITE_VALUE_SIZE_TYPE_32BIT;
     660              :     sqe->write_value_part0 = 1U;
     661              :     sqe->sub_type = RT_STARS_WRITE_VALUE_SUB_TYPE_NOTIFY_RECORD_IPC_NO_PCIE;
     662              :     sqe->write_addr_low = static_cast<uint32_t>(notifyWRAddr & MASK_32_BIT);
     663              :     sqe->write_addr_high = static_cast<uint32_t>((notifyWRAddr >> UINT32_BIT_NUM) & MASK_17_BIT);
     664              :     HCCL_DEBUG("[SQE] write value: writePtr=0x%lx, streamId=%u, taskId=%u.", notifyWRAddr, streamId, taskId);
     665              : }
     666              : 
     667              : inline void AddOneEventRecordSqe(uint16_t streamId, int32_t eventId, uint16_t taskId, rtStarsEventSqe_t* const ev_sqe)
     668              : {
     669              :     ev_sqe->header.type = RT_STARS_SQE_TYPE_EVENT_RECORD;
     670              :     ev_sqe->header.wrCqe = 1U; // 1: set wrCqe
     671              :     ev_sqe->kernel_credit = RT_STARS_DEFAULT_KERNEL_CREDIT;
     672              : 
     673              :     // eventRecordTaskInfo->waitCqflag  是否为同步task
     674              :     if (false) {
     675              :         streamId |= RT_SYNC_TASK_FLAG;
     676              :     }
     677              : 
     678              :     ev_sqe->header.rtStreamId = streamId;
     679              :     ev_sqe->eventId = static_cast<uint16_t>(eventId);
     680              :     ev_sqe->header.taskId = taskId;
     681              :     HCCL_DEBUG("[SQE] event record: eventId=%d, streamId=%u, taskId=%u.", eventId, streamId, taskId);
     682              : }
     683              : 
     684              : inline void AddOneEventWaitSqe(uint16_t streamId, int32_t eventId, uint16_t taskId, rtStarsEventSqe_t* const ev_sqe)
     685              : {
     686              :     ev_sqe->header.type = RT_STARS_SQE_TYPE_EVENT_WAIT;
     687              :     ev_sqe->kernel_credit = RT_STARS_NEVER_TIMEOUT_KERNEL_CREDIT;
     688              : 
     689              :     ev_sqe->header.rtStreamId = streamId;
     690              :     ev_sqe->eventId = eventId;
     691              :     ev_sqe->header.taskId = taskId;
     692              :     HCCL_DEBUG("[SQE] event wait: eventId=%d, streamId=%u, taskId=%u", eventId, streamId, taskId);
     693              : }
     694              : 
     695              : extern void AddOneWaitStartSqe(
     696              :     uint16_t streamId, uint16_t taskId, u64 waitAddr, u64 curTurnCntAddr, bool last,
     697              :     rtStarsCcoreWaitStartSqe_t* const sqe, uint8_t* sqeType);
     698              : extern void AddOneWriteValueStartSqe(
     699              :     uint16_t streamId, uint16_t taskId, u64 writeAddr, u64 valueAddr, rtStarsCcoreWriteValueSqe_t* const sqe,
     700              :     uint8_t* sqeType);
     701              : 
     702              : extern HcclResult QuerySqStatus(uint32_t devId, uint32_t sqId, uint32_t& sqHead, uint32_t& sqTail);
     703              : extern HcclResult QuerySqStatusByType(uint32_t devId, uint32_t sqId, drvSqCqPropType_t type, uint32_t& outVal);
     704              : extern HcclResult ConfigSqStatusByType(uint32_t devId, uint32_t sqId, drvSqCqPropType_t type, uint32_t value);
     705              : extern HcclResult QuerySqBaseAddr(uint32_t devId, uint32_t sqId, u64& outVal);
     706              : using CqeStatus = dfx::CqeStatus;
     707              : using CqeQueryInput = dfx::CqeQueryInput;
     708              : extern CqeStatus CqReportRecv(const CqeQueryInput& cqeQueryInput, rtLogicCqReport_t& cqeException);
     709              : extern void PrintTaskException(const rtLogicCqReport_t& reportOfOne);
     710              : extern HcclResult StreamsKill(const uint32_t devId);
     711              : extern HcclResult DeviceQuery(const uint32_t devId, const uint32_t step, const uint32_t timeout);
     712              : namespace hccl_plf {
     713              : HcclResult SendTaskExceptionByMBox(
     714              :     const u32 localDeviceId, const u32 notifyId, const u32 tsId, const s32 userStreamId, const u32 cqeErrCode);
     715              : }
     716              : #endif // __AICPU_HCCL_SQCQ_H__
        

Generated by: LCOV version 2.0-1