brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · a812f85 Raw
198 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * Copyright 2020 HabanaLabs, Ltd.4 * All Rights Reserved.5 *6 */7 8#ifndef GAUDI2_PACKETS_H9#define GAUDI2_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_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) + 138};39 40#define GAUDI2_PKT_CTL_OPCODE_SHIFT	2441#define GAUDI2_PKT_CTL_OPCODE_MASK	0x1F00000042 43#define GAUDI2_PKT_CTL_EB_SHIFT		2944#define GAUDI2_PKT_CTL_EB_MASK		0x2000000045 46#define GAUDI2_PKT_CTL_RB_SHIFT		3047#define GAUDI2_PKT_CTL_RB_MASK		0x4000000048 49#define GAUDI2_PKT_CTL_MB_SHIFT		3150#define GAUDI2_PKT_CTL_MB_MASK		0x8000000051 52/* All packets have, at least, an 8-byte header, which contains53 * the packet type. The kernel driver uses the packet header for packet54 * validation and to perform any necessary required preparation before55 * sending them off to the hardware.56 */57struct gaudi2_packet {58	__le64 header;59	/* The rest of the packet data follows. Use the corresponding60	 * packet_XXX struct to deference the data, based on packet type61	 */62	u8 contents[];63};64 65struct packet_nop {66	__le32 reserved;67	__le32 ctl;68};69 70struct packet_stop {71	__le32 reserved;72	__le32 ctl;73};74 75struct packet_wreg32 {76	__le32 value;77	__le32 ctl;78};79 80struct packet_wreg_bulk {81	__le32 size64;82	__le32 ctl;83	__le64 values[]; /* data starts here */84};85 86struct packet_msg_long {87	__le32 value;88	__le32 ctl;89	__le64 addr;90};91 92#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT	093#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK	0x00007FFF94 95#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_SHIFT	3196#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_MASK	0x8000000097 98#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT	099#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_MASK	0x000000FF100 101#define GAUDI2_PKT_SHORT_VAL_MON_MASK_SHIFT	8102#define GAUDI2_PKT_SHORT_VAL_MON_MASK_MASK	0x0000FF00103 104#define GAUDI2_PKT_SHORT_VAL_MON_MODE_SHIFT	16105#define GAUDI2_PKT_SHORT_VAL_MON_MODE_MASK	0x00010000106 107#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT	17108#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_MASK	0xFFFE0000109 110#define GAUDI2_PKT_SHORT_CTL_ADDR_SHIFT		0111#define GAUDI2_PKT_SHORT_CTL_ADDR_MASK		0x0000FFFF112 113#define GAUDI2_PKT_SHORT_CTL_BASE_SHIFT		22114#define GAUDI2_PKT_SHORT_CTL_BASE_MASK		0x00C00000115 116struct packet_msg_short {117	__le32 value;118	__le32 ctl;119};120 121struct packet_msg_prot {122	__le32 value;123	__le32 ctl;124	__le64 addr;125};126 127#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_SHIFT	0128#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_MASK	0x0000000F129 130#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_SHIFT	16131#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_MASK	0x00FF0000132 133#define GAUDI2_PKT_FENCE_CFG_ID_SHIFT		30134#define GAUDI2_PKT_FENCE_CFG_ID_MASK		0xC0000000135 136#define GAUDI2_PKT_FENCE_CTL_PRED_SHIFT		0137#define GAUDI2_PKT_FENCE_CTL_PRED_MASK		0x0000001F138 139struct packet_fence {140	__le32 cfg;141	__le32 ctl;142};143 144#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_SHIFT	0145#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_MASK	0x00000001146 147#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_SHIFT	1148#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_MASK	0x00000006149 150#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_SHIFT	4151#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000010152 153#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_SHIFT	8154#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_MASK	0x00FFFF00155 156struct packet_lin_dma {157	__le32 tsize;158	__le32 ctl;159	__le64 src_addr;160	__le64 dst_addr;161};162 163struct packet_arb_point {164	__le32 cfg;165	__le32 ctl;166};167 168struct packet_repeat {169	__le32 cfg;170	__le32 ctl;171};172 173struct packet_wait {174	__le32 cfg;175	__le32 ctl;176};177 178struct packet_cb_list {179	__le32 reserved;180	__le32 ctl;181	__le64 index_addr;182	__le64 table_addr;183};184 185struct packet_load_and_exe {186	__le32 cfg;187	__le32 ctl;188	__le64 src_addr;189};190 191struct packet_cp_dma {192	__le32 tsize;193	__le32 ctl;194	__le64 src_addr;195};196 197#endif /* GAUDI2_PACKETS_H */198