Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0
0002  *
0003  * Copyright 2017-2020 HabanaLabs, Ltd.
0004  * All Rights Reserved.
0005  *
0006  */
0007 
0008 #ifndef GAUDI_PACKETS_H
0009 #define GAUDI_PACKETS_H
0010 
0011 #include <linux/types.h>
0012 
0013 #define PACKET_HEADER_PACKET_ID_SHIFT       56
0014 #define PACKET_HEADER_PACKET_ID_MASK        0x1F00000000000000ull
0015 
0016 enum packet_id {
0017     PACKET_WREG_32 = 0x1,
0018     PACKET_WREG_BULK = 0x2,
0019     PACKET_MSG_LONG = 0x3,
0020     PACKET_MSG_SHORT = 0x4,
0021     PACKET_CP_DMA = 0x5,
0022     PACKET_REPEAT = 0x6,
0023     PACKET_MSG_PROT = 0x7,
0024     PACKET_FENCE = 0x8,
0025     PACKET_LIN_DMA = 0x9,
0026     PACKET_NOP = 0xA,
0027     PACKET_STOP = 0xB,
0028     PACKET_ARB_POINT = 0xC,
0029     PACKET_WAIT = 0xD,
0030     PACKET_LOAD_AND_EXE = 0xF,
0031     MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
0032                 PACKET_HEADER_PACKET_ID_SHIFT) + 1
0033 };
0034 
0035 #define GAUDI_PKT_CTL_OPCODE_SHIFT  24
0036 #define GAUDI_PKT_CTL_OPCODE_MASK   0x1F000000
0037 
0038 #define GAUDI_PKT_CTL_EB_SHIFT      29
0039 #define GAUDI_PKT_CTL_EB_MASK       0x20000000
0040 
0041 #define GAUDI_PKT_CTL_RB_SHIFT      30
0042 #define GAUDI_PKT_CTL_RB_MASK       0x40000000
0043 
0044 #define GAUDI_PKT_CTL_MB_SHIFT      31
0045 #define GAUDI_PKT_CTL_MB_MASK       0x80000000
0046 
0047 /* All packets have, at least, an 8-byte header, which contains
0048  * the packet type. The kernel driver uses the packet header for packet
0049  * validation and to perform any necessary required preparation before
0050  * sending them off to the hardware.
0051  */
0052 struct gaudi_packet {
0053     __le64 header;
0054     /* The rest of the packet data follows. Use the corresponding
0055      * packet_XXX struct to deference the data, based on packet type
0056      */
0057     u8 contents[];
0058 };
0059 
0060 struct packet_nop {
0061     __le32 reserved;
0062     __le32 ctl;
0063 };
0064 
0065 struct packet_stop {
0066     __le32 reserved;
0067     __le32 ctl;
0068 };
0069 
0070 struct packet_wreg32 {
0071     __le32 value;
0072     __le32 ctl;
0073 };
0074 
0075 struct packet_wreg_bulk {
0076     __le32 size64;
0077     __le32 ctl;
0078     __le64 values[]; /* data starts here */
0079 };
0080 
0081 #define GAUDI_PKT_LONG_CTL_OP_SHIFT     20
0082 #define GAUDI_PKT_LONG_CTL_OP_MASK      0x00300000
0083 
0084 struct packet_msg_long {
0085     __le32 value;
0086     __le32 ctl;
0087     __le64 addr;
0088 };
0089 
0090 #define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT  0
0091 #define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK   0x00007FFF
0092 
0093 #define GAUDI_PKT_SHORT_VAL_SOB_MOD_SHIFT   31
0094 #define GAUDI_PKT_SHORT_VAL_SOB_MOD_MASK    0x80000000
0095 
0096 #define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT  0
0097 #define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_MASK   0x000000FF
0098 
0099 #define GAUDI_PKT_SHORT_VAL_MON_MASK_SHIFT  8
0100 #define GAUDI_PKT_SHORT_VAL_MON_MASK_MASK   0x0000FF00
0101 
0102 #define GAUDI_PKT_SHORT_VAL_MON_MODE_SHIFT  16
0103 #define GAUDI_PKT_SHORT_VAL_MON_MODE_MASK   0x00010000
0104 
0105 #define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT  17
0106 #define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_MASK   0xFFFE0000
0107 
0108 #define GAUDI_PKT_SHORT_CTL_ADDR_SHIFT      0
0109 #define GAUDI_PKT_SHORT_CTL_ADDR_MASK       0x0000FFFF
0110 
0111 #define GAUDI_PKT_SHORT_CTL_OP_SHIFT        20
0112 #define GAUDI_PKT_SHORT_CTL_OP_MASK     0x00300000
0113 
0114 #define GAUDI_PKT_SHORT_CTL_BASE_SHIFT      22
0115 #define GAUDI_PKT_SHORT_CTL_BASE_MASK       0x00C00000
0116 
0117 struct packet_msg_short {
0118     __le32 value;
0119     __le32 ctl;
0120 };
0121 
0122 struct packet_msg_prot {
0123     __le32 value;
0124     __le32 ctl;
0125     __le64 addr;
0126 };
0127 
0128 #define GAUDI_PKT_FENCE_CFG_DEC_VAL_SHIFT   0
0129 #define GAUDI_PKT_FENCE_CFG_DEC_VAL_MASK    0x0000000F
0130 
0131 #define GAUDI_PKT_FENCE_CFG_TARGET_VAL_SHIFT    16
0132 #define GAUDI_PKT_FENCE_CFG_TARGET_VAL_MASK 0x00FF0000
0133 
0134 #define GAUDI_PKT_FENCE_CFG_ID_SHIFT        30
0135 #define GAUDI_PKT_FENCE_CFG_ID_MASK     0xC0000000
0136 
0137 #define GAUDI_PKT_FENCE_CTL_PRED_SHIFT      0
0138 #define GAUDI_PKT_FENCE_CTL_PRED_MASK       0x0000001F
0139 
0140 struct packet_fence {
0141     __le32 cfg;
0142     __le32 ctl;
0143 };
0144 
0145 #define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_SHIFT   0
0146 #define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_MASK    0x00000001
0147 
0148 #define GAUDI_PKT_LIN_DMA_CTL_LIN_SHIFT     3
0149 #define GAUDI_PKT_LIN_DMA_CTL_LIN_MASK      0x00000008
0150 
0151 #define GAUDI_PKT_LIN_DMA_CTL_MEMSET_SHIFT  4
0152 #define GAUDI_PKT_LIN_DMA_CTL_MEMSET_MASK   0x00000010
0153 
0154 #define GAUDI_PKT_LIN_DMA_DST_ADDR_SHIFT    0
0155 #define GAUDI_PKT_LIN_DMA_DST_ADDR_MASK     0x00FFFFFFFFFFFFFFull
0156 
0157 struct packet_lin_dma {
0158     __le32 tsize;
0159     __le32 ctl;
0160     __le64 src_addr;
0161     __le64 dst_addr;
0162 };
0163 
0164 struct packet_arb_point {
0165     __le32 cfg;
0166     __le32 ctl;
0167 };
0168 
0169 struct packet_repeat {
0170     __le32 cfg;
0171     __le32 ctl;
0172 };
0173 
0174 struct packet_wait {
0175     __le32 cfg;
0176     __le32 ctl;
0177 };
0178 
0179 #define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_SHIFT    0
0180 #define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_MASK 0x00000001
0181 
0182 struct packet_load_and_exe {
0183     __le32 cfg;
0184     __le32 ctl;
0185     __le64 src_addr;
0186 };
0187 
0188 struct packet_cp_dma {
0189     __le32 tsize;
0190     __le32 ctl;
0191     __le64 src_addr;
0192 };
0193 
0194 #endif /* GAUDI_PACKETS_H */