1 /* SPDX-License-Identifier: GPL-2.0 2 * 3 * Copyright 2020 HabanaLabs, Ltd. 4 * All Rights Reserved. 5 * 6 */ 7 8 #ifndef GAUDI2_PACKETS_H 9 #define GAUDI2_PACKETS_H 10 11 #include <linux/types.h> 12 13 #define PACKET_HEADER_PACKET_ID_SHIFT 56 14 #define PACKET_HEADER_PACKET_ID_MASK 0x1F00000000000000ull 15 16 enum packet_id { 17 PACKET_WREG_32 = 0x1, 18 PACKET_WREG_BULK = 0x2, 19 PACKET_MSG_LONG = 0x3, 20 PACKET_MSG_SHORT = 0x4, 21 PACKET_CP_DMA = 0x5, 22 PACKET_REPEAT = 0x6, 23 PACKET_MSG_PROT = 0x7, 24 PACKET_FENCE = 0x8, 25 PACKET_LIN_DMA = 0x9, 26 PACKET_NOP = 0xA, 27 PACKET_STOP = 0xB, 28 PACKET_ARB_POINT = 0xC, 29 PACKET_WAIT = 0xD, 30 PACKET_CB_LIST = 0xE, 31 PACKET_LOAD_AND_EXE = 0xF, 32 PACKET_WRITE_ARC_STREAM = 0x10, 33 PACKET_LAST_READ_FROM_ARC = 0x11, 34 PACKET_WREG_64_SHORT = 0x12, 35 PACKET_WREG_64_LONG = 0x13, 36 MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >> 37 PACKET_HEADER_PACKET_ID_SHIFT) + 1 38 }; 39 40 #define GAUDI2_PKT_CTL_OPCODE_SHIFT 24 41 #define GAUDI2_PKT_CTL_OPCODE_MASK 0x1F000000 42 43 #define GAUDI2_PKT_CTL_EB_SHIFT 29 44 #define GAUDI2_PKT_CTL_EB_MASK 0x20000000 45 46 #define GAUDI2_PKT_CTL_RB_SHIFT 30 47 #define GAUDI2_PKT_CTL_RB_MASK 0x40000000 48 49 #define GAUDI2_PKT_CTL_MB_SHIFT 31 50 #define GAUDI2_PKT_CTL_MB_MASK 0x80000000 51 52 /* All packets have, at least, an 8-byte header, which contains 53 * the packet type. The kernel driver uses the packet header for packet 54 * validation and to perform any necessary required preparation before 55 * sending them off to the hardware. 56 */ 57 struct gaudi2_packet { 58 __le64 header; 59 /* The rest of the packet data follows. Use the corresponding 60 * packet_XXX struct to deference the data, based on packet type 61 */ 62 u8 contents[0]; 63 }; 64 65 struct packet_nop { 66 __le32 reserved; 67 __le32 ctl; 68 }; 69 70 struct packet_stop { 71 __le32 reserved; 72 __le32 ctl; 73 }; 74 75 struct packet_wreg32 { 76 __le32 value; 77 __le32 ctl; 78 }; 79 80 struct packet_wreg_bulk { 81 __le32 size64; 82 __le32 ctl; 83 __le64 values[0]; /* data starts here */ 84 }; 85 86 struct packet_msg_long { 87 __le32 value; 88 __le32 ctl; 89 __le64 addr; 90 }; 91 92 #define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT 0 93 #define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK 0x00007FFF 94 95 #define GAUDI2_PKT_SHORT_VAL_SOB_MOD_SHIFT 31 96 #define GAUDI2_PKT_SHORT_VAL_SOB_MOD_MASK 0x80000000 97 98 #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT 0 99 #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_MASK 0x000000FF 100 101 #define GAUDI2_PKT_SHORT_VAL_MON_MASK_SHIFT 8 102 #define GAUDI2_PKT_SHORT_VAL_MON_MASK_MASK 0x0000FF00 103 104 #define GAUDI2_PKT_SHORT_VAL_MON_MODE_SHIFT 16 105 #define GAUDI2_PKT_SHORT_VAL_MON_MODE_MASK 0x00010000 106 107 #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT 17 108 #define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_MASK 0xFFFE0000 109 110 #define GAUDI2_PKT_SHORT_CTL_ADDR_SHIFT 0 111 #define GAUDI2_PKT_SHORT_CTL_ADDR_MASK 0x0000FFFF 112 113 #define GAUDI2_PKT_SHORT_CTL_BASE_SHIFT 22 114 #define GAUDI2_PKT_SHORT_CTL_BASE_MASK 0x00C00000 115 116 struct packet_msg_short { 117 __le32 value; 118 __le32 ctl; 119 }; 120 121 struct packet_msg_prot { 122 __le32 value; 123 __le32 ctl; 124 __le64 addr; 125 }; 126 127 #define GAUDI2_PKT_FENCE_CFG_DEC_VAL_SHIFT 0 128 #define GAUDI2_PKT_FENCE_CFG_DEC_VAL_MASK 0x0000000F 129 130 #define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_SHIFT 16 131 #define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_MASK 0x00FF0000 132 133 #define GAUDI2_PKT_FENCE_CFG_ID_SHIFT 30 134 #define GAUDI2_PKT_FENCE_CFG_ID_MASK 0xC0000000 135 136 #define GAUDI2_PKT_FENCE_CTL_PRED_SHIFT 0 137 #define GAUDI2_PKT_FENCE_CTL_PRED_MASK 0x0000001F 138 139 struct packet_fence { 140 __le32 cfg; 141 __le32 ctl; 142 }; 143 144 #define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_SHIFT 0 145 #define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_MASK 0x00000001 146 147 #define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_SHIFT 1 148 #define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_MASK 0x00000006 149 150 #define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_SHIFT 4 151 #define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000010 152 153 #define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_SHIFT 8 154 #define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_MASK 0x00FFFF00 155 156 struct packet_lin_dma { 157 __le32 tsize; 158 __le32 ctl; 159 __le64 src_addr; 160 __le64 dst_addr; 161 }; 162 163 struct packet_arb_point { 164 __le32 cfg; 165 __le32 ctl; 166 }; 167 168 struct packet_repeat { 169 __le32 cfg; 170 __le32 ctl; 171 }; 172 173 struct packet_wait { 174 __le32 cfg; 175 __le32 ctl; 176 }; 177 178 struct packet_cb_list { 179 __le32 reserved; 180 __le32 ctl; 181 __le64 index_addr; 182 __le64 table_addr; 183 }; 184 185 struct packet_load_and_exe { 186 __le32 cfg; 187 __le32 ctl; 188 __le64 src_addr; 189 }; 190 191 struct packet_cp_dma { 192 __le32 tsize; 193 __le32 ctl; 194 __le64 src_addr; 195 }; 196 197 #endif /* GAUDI2_PACKETS_H */ 198