Path: blob/master/drivers/accel/habanalabs/include/gaudi2/gaudi2_packets.h
26445 views
/* SPDX-License-Identifier: GPL-2.01*2* Copyright 2020 HabanaLabs, Ltd.3* All Rights Reserved.4*5*/67#ifndef GAUDI2_PACKETS_H8#define GAUDI2_PACKETS_H910#include <linux/types.h>1112#define PACKET_HEADER_PACKET_ID_SHIFT 5613#define PACKET_HEADER_PACKET_ID_MASK 0x1F00000000000000ull1415enum packet_id {16PACKET_WREG_32 = 0x1,17PACKET_WREG_BULK = 0x2,18PACKET_MSG_LONG = 0x3,19PACKET_MSG_SHORT = 0x4,20PACKET_CP_DMA = 0x5,21PACKET_REPEAT = 0x6,22PACKET_MSG_PROT = 0x7,23PACKET_FENCE = 0x8,24PACKET_LIN_DMA = 0x9,25PACKET_NOP = 0xA,26PACKET_STOP = 0xB,27PACKET_ARB_POINT = 0xC,28PACKET_WAIT = 0xD,29PACKET_CB_LIST = 0xE,30PACKET_LOAD_AND_EXE = 0xF,31PACKET_WRITE_ARC_STREAM = 0x10,32PACKET_LAST_READ_FROM_ARC = 0x11,33PACKET_WREG_64_SHORT = 0x12,34PACKET_WREG_64_LONG = 0x13,35MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>36PACKET_HEADER_PACKET_ID_SHIFT) + 137};3839#define GAUDI2_PKT_CTL_OPCODE_SHIFT 2440#define GAUDI2_PKT_CTL_OPCODE_MASK 0x1F0000004142#define GAUDI2_PKT_CTL_EB_SHIFT 2943#define GAUDI2_PKT_CTL_EB_MASK 0x200000004445#define GAUDI2_PKT_CTL_RB_SHIFT 3046#define GAUDI2_PKT_CTL_RB_MASK 0x400000004748#define GAUDI2_PKT_CTL_MB_SHIFT 3149#define GAUDI2_PKT_CTL_MB_MASK 0x800000005051/* All packets have, at least, an 8-byte header, which contains52* the packet type. The kernel driver uses the packet header for packet53* validation and to perform any necessary required preparation before54* sending them off to the hardware.55*/56struct gaudi2_packet {57__le64 header;58/* The rest of the packet data follows. Use the corresponding59* packet_XXX struct to deference the data, based on packet type60*/61u8 contents[];62};6364struct packet_nop {65__le32 reserved;66__le32 ctl;67};6869struct packet_stop {70__le32 reserved;71__le32 ctl;72};7374struct packet_wreg32 {75__le32 value;76__le32 ctl;77};7879struct packet_wreg_bulk {80__le32 size64;81__le32 ctl;82__le64 values[]; /* data starts here */83};8485struct packet_msg_long {86__le32 value;87__le32 ctl;88__le64 addr;89};9091#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT 092#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK 0x00007FFF9394#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_SHIFT 3195#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_MASK 0x800000009697#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT 098#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_MASK 0x000000FF99100#define GAUDI2_PKT_SHORT_VAL_MON_MASK_SHIFT 8101#define GAUDI2_PKT_SHORT_VAL_MON_MASK_MASK 0x0000FF00102103#define GAUDI2_PKT_SHORT_VAL_MON_MODE_SHIFT 16104#define GAUDI2_PKT_SHORT_VAL_MON_MODE_MASK 0x00010000105106#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT 17107#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_MASK 0xFFFE0000108109#define GAUDI2_PKT_SHORT_CTL_ADDR_SHIFT 0110#define GAUDI2_PKT_SHORT_CTL_ADDR_MASK 0x0000FFFF111112#define GAUDI2_PKT_SHORT_CTL_BASE_SHIFT 22113#define GAUDI2_PKT_SHORT_CTL_BASE_MASK 0x00C00000114115struct packet_msg_short {116__le32 value;117__le32 ctl;118};119120struct packet_msg_prot {121__le32 value;122__le32 ctl;123__le64 addr;124};125126#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_SHIFT 0127#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_MASK 0x0000000F128129#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_SHIFT 16130#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_MASK 0x00FF0000131132#define GAUDI2_PKT_FENCE_CFG_ID_SHIFT 30133#define GAUDI2_PKT_FENCE_CFG_ID_MASK 0xC0000000134135#define GAUDI2_PKT_FENCE_CTL_PRED_SHIFT 0136#define GAUDI2_PKT_FENCE_CTL_PRED_MASK 0x0000001F137138struct packet_fence {139__le32 cfg;140__le32 ctl;141};142143#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_SHIFT 0144#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_MASK 0x00000001145146#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_SHIFT 1147#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_MASK 0x00000006148149#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_SHIFT 4150#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000010151152#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_SHIFT 8153#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_MASK 0x00FFFF00154155struct packet_lin_dma {156__le32 tsize;157__le32 ctl;158__le64 src_addr;159__le64 dst_addr;160};161162struct packet_arb_point {163__le32 cfg;164__le32 ctl;165};166167struct packet_repeat {168__le32 cfg;169__le32 ctl;170};171172struct packet_wait {173__le32 cfg;174__le32 ctl;175};176177struct packet_cb_list {178__le32 reserved;179__le32 ctl;180__le64 index_addr;181__le64 table_addr;182};183184struct packet_load_and_exe {185__le32 cfg;186__le32 ctl;187__le64 src_addr;188};189190struct packet_cp_dma {191__le32 tsize;192__le32 ctl;193__le64 src_addr;194};195196#endif /* GAUDI2_PACKETS_H */197198199