195 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * Copyright 2017-2020 HabanaLabs, Ltd.4 * All Rights Reserved.5 *6 */7 8#ifndef GAUDI_PACKETS_H9#define GAUDI_PACKETS_H10 11#include <linux/types.h>12 13#define PACKET_HEADER_PACKET_ID_SHIFT 5614#define PACKET_HEADER_PACKET_ID_MASK 0x1F00000000000000ull15 16enum 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_LOAD_AND_EXE = 0xF,31 MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>32 PACKET_HEADER_PACKET_ID_SHIFT) + 133};34 35#define GAUDI_PKT_CTL_OPCODE_SHIFT 2436#define GAUDI_PKT_CTL_OPCODE_MASK 0x1F00000037 38#define GAUDI_PKT_CTL_EB_SHIFT 2939#define GAUDI_PKT_CTL_EB_MASK 0x2000000040 41#define GAUDI_PKT_CTL_RB_SHIFT 3042#define GAUDI_PKT_CTL_RB_MASK 0x4000000043 44#define GAUDI_PKT_CTL_MB_SHIFT 3145#define GAUDI_PKT_CTL_MB_MASK 0x8000000046 47/* All packets have, at least, an 8-byte header, which contains48 * the packet type. The kernel driver uses the packet header for packet49 * validation and to perform any necessary required preparation before50 * sending them off to the hardware.51 */52struct gaudi_packet {53 __le64 header;54 /* The rest of the packet data follows. Use the corresponding55 * packet_XXX struct to deference the data, based on packet type56 */57 u8 contents[];58};59 60struct packet_nop {61 __le32 reserved;62 __le32 ctl;63};64 65struct packet_stop {66 __le32 reserved;67 __le32 ctl;68};69 70struct packet_wreg32 {71 __le32 value;72 __le32 ctl;73};74 75struct packet_wreg_bulk {76 __le32 size64;77 __le32 ctl;78 __le64 values[]; /* data starts here */79};80 81#define GAUDI_PKT_LONG_CTL_OP_SHIFT 2082#define GAUDI_PKT_LONG_CTL_OP_MASK 0x0030000083 84struct packet_msg_long {85 __le32 value;86 __le32 ctl;87 __le64 addr;88};89 90#define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT 091#define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK 0x00007FFF92 93#define GAUDI_PKT_SHORT_VAL_SOB_MOD_SHIFT 3194#define GAUDI_PKT_SHORT_VAL_SOB_MOD_MASK 0x8000000095 96#define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT 097#define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_MASK 0x000000FF98 99#define GAUDI_PKT_SHORT_VAL_MON_MASK_SHIFT 8100#define GAUDI_PKT_SHORT_VAL_MON_MASK_MASK 0x0000FF00101 102#define GAUDI_PKT_SHORT_VAL_MON_MODE_SHIFT 16103#define GAUDI_PKT_SHORT_VAL_MON_MODE_MASK 0x00010000104 105#define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT 17106#define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_MASK 0xFFFE0000107 108#define GAUDI_PKT_SHORT_CTL_ADDR_SHIFT 0109#define GAUDI_PKT_SHORT_CTL_ADDR_MASK 0x0000FFFF110 111#define GAUDI_PKT_SHORT_CTL_OP_SHIFT 20112#define GAUDI_PKT_SHORT_CTL_OP_MASK 0x00300000113 114#define GAUDI_PKT_SHORT_CTL_BASE_SHIFT 22115#define GAUDI_PKT_SHORT_CTL_BASE_MASK 0x00C00000116 117struct packet_msg_short {118 __le32 value;119 __le32 ctl;120};121 122struct packet_msg_prot {123 __le32 value;124 __le32 ctl;125 __le64 addr;126};127 128#define GAUDI_PKT_FENCE_CFG_DEC_VAL_SHIFT 0129#define GAUDI_PKT_FENCE_CFG_DEC_VAL_MASK 0x0000000F130 131#define GAUDI_PKT_FENCE_CFG_TARGET_VAL_SHIFT 16132#define GAUDI_PKT_FENCE_CFG_TARGET_VAL_MASK 0x00FF0000133 134#define GAUDI_PKT_FENCE_CFG_ID_SHIFT 30135#define GAUDI_PKT_FENCE_CFG_ID_MASK 0xC0000000136 137#define GAUDI_PKT_FENCE_CTL_PRED_SHIFT 0138#define GAUDI_PKT_FENCE_CTL_PRED_MASK 0x0000001F139 140struct packet_fence {141 __le32 cfg;142 __le32 ctl;143};144 145#define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_SHIFT 0146#define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_MASK 0x00000001147 148#define GAUDI_PKT_LIN_DMA_CTL_LIN_SHIFT 3149#define GAUDI_PKT_LIN_DMA_CTL_LIN_MASK 0x00000008150 151#define GAUDI_PKT_LIN_DMA_CTL_MEMSET_SHIFT 4152#define GAUDI_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000010153 154#define GAUDI_PKT_LIN_DMA_DST_ADDR_SHIFT 0155#define GAUDI_PKT_LIN_DMA_DST_ADDR_MASK 0x00FFFFFFFFFFFFFFull156 157struct packet_lin_dma {158 __le32 tsize;159 __le32 ctl;160 __le64 src_addr;161 __le64 dst_addr;162};163 164struct packet_arb_point {165 __le32 cfg;166 __le32 ctl;167};168 169struct packet_repeat {170 __le32 cfg;171 __le32 ctl;172};173 174struct packet_wait {175 __le32 cfg;176 __le32 ctl;177};178 179#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_SHIFT 0180#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_MASK 0x00000001181 182struct packet_load_and_exe {183 __le32 cfg;184 __le32 ctl;185 __le64 src_addr;186};187 188struct packet_cp_dma {189 __le32 tsize;190 __le32 ctl;191 __le64 src_addr;192};193 194#endif /* GAUDI_PACKETS_H */195