131 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * Copyright 2017-2018 HabanaLabs, Ltd.4 * All Rights Reserved.5 *6 */7 8#ifndef GOYA_PACKETS_H9#define GOYA_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_MSG_PROT = 0x7,23 PACKET_FENCE = 0x8,24 PACKET_LIN_DMA = 0x9,25 PACKET_NOP = 0xA,26 PACKET_STOP = 0xB,27 MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>28 PACKET_HEADER_PACKET_ID_SHIFT) + 129};30 31#define GOYA_PKT_CTL_OPCODE_SHIFT 2432#define GOYA_PKT_CTL_OPCODE_MASK 0x1F00000033 34#define GOYA_PKT_CTL_EB_SHIFT 2935#define GOYA_PKT_CTL_EB_MASK 0x2000000036 37#define GOYA_PKT_CTL_RB_SHIFT 3038#define GOYA_PKT_CTL_RB_MASK 0x4000000039 40#define GOYA_PKT_CTL_MB_SHIFT 3141#define GOYA_PKT_CTL_MB_MASK 0x8000000042 43/* All packets have, at least, an 8-byte header, which contains44 * the packet type. The kernel driver uses the packet header for packet45 * validation and to perform any necessary required preparation before46 * sending them off to the hardware.47 */48struct goya_packet {49 __le64 header;50 /* The rest of the packet data follows. Use the corresponding51 * packet_XXX struct to deference the data, based on packet type52 */53 u8 contents[];54};55 56struct packet_nop {57 __le32 reserved;58 __le32 ctl;59};60 61struct packet_stop {62 __le32 reserved;63 __le32 ctl;64};65 66#define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT 067#define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK 0x0000FFFF68 69struct packet_wreg32 {70 __le32 value;71 __le32 ctl;72};73 74struct packet_wreg_bulk {75 __le32 size64;76 __le32 ctl;77 __le64 values[]; /* data starts here */78};79 80struct packet_msg_long {81 __le32 value;82 __le32 ctl;83 __le64 addr;84};85 86struct packet_msg_short {87 __le32 value;88 __le32 ctl;89};90 91struct packet_msg_prot {92 __le32 value;93 __le32 ctl;94 __le64 addr;95};96 97struct packet_fence {98 __le32 cfg;99 __le32 ctl;100};101 102#define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT 0103#define GOYA_PKT_LIN_DMA_CTL_WO_MASK 0x00000001104 105#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT 1106#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK 0x00000002107 108#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT 2109#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK 0x00000004110 111#define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT 6112#define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000040113 114#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT 20115#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK 0x00700000116 117struct packet_lin_dma {118 __le32 tsize;119 __le32 ctl;120 __le64 src_addr;121 __le64 dst_addr;122};123 124struct packet_cp_dma {125 __le32 tsize;126 __le32 ctl;127 __le64 src_addr;128};129 130#endif /* GOYA_PACKETS_H */131