Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0
0002  *
0003  * Copyright 2017-2018 HabanaLabs, Ltd.
0004  * All Rights Reserved.
0005  *
0006  */
0007 
0008 #ifndef GOYA_PACKETS_H
0009 #define GOYA_PACKETS_H
0010 
0011 #include <linux/types.h>
0012 
0013 #define PACKET_HEADER_PACKET_ID_SHIFT       56
0014 #define PACKET_HEADER_PACKET_ID_MASK        0x1F00000000000000ull
0015 
0016 enum packet_id {
0017     PACKET_WREG_32 = 0x1,
0018     PACKET_WREG_BULK = 0x2,
0019     PACKET_MSG_LONG = 0x3,
0020     PACKET_MSG_SHORT = 0x4,
0021     PACKET_CP_DMA = 0x5,
0022     PACKET_MSG_PROT = 0x7,
0023     PACKET_FENCE = 0x8,
0024     PACKET_LIN_DMA = 0x9,
0025     PACKET_NOP = 0xA,
0026     PACKET_STOP = 0xB,
0027     MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
0028                 PACKET_HEADER_PACKET_ID_SHIFT) + 1
0029 };
0030 
0031 #define GOYA_PKT_CTL_OPCODE_SHIFT   24
0032 #define GOYA_PKT_CTL_OPCODE_MASK    0x1F000000
0033 
0034 #define GOYA_PKT_CTL_EB_SHIFT       29
0035 #define GOYA_PKT_CTL_EB_MASK        0x20000000
0036 
0037 #define GOYA_PKT_CTL_RB_SHIFT       30
0038 #define GOYA_PKT_CTL_RB_MASK        0x40000000
0039 
0040 #define GOYA_PKT_CTL_MB_SHIFT       31
0041 #define GOYA_PKT_CTL_MB_MASK        0x80000000
0042 
0043 /* All packets have, at least, an 8-byte header, which contains
0044  * the packet type. The kernel driver uses the packet header for packet
0045  * validation and to perform any necessary required preparation before
0046  * sending them off to the hardware.
0047  */
0048 struct goya_packet {
0049     __le64 header;
0050     /* The rest of the packet data follows. Use the corresponding
0051      * packet_XXX struct to deference the data, based on packet type
0052      */
0053     u8 contents[];
0054 };
0055 
0056 struct packet_nop {
0057     __le32 reserved;
0058     __le32 ctl;
0059 };
0060 
0061 struct packet_stop {
0062     __le32 reserved;
0063     __le32 ctl;
0064 };
0065 
0066 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT    0
0067 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK 0x0000FFFF
0068 
0069 struct packet_wreg32 {
0070     __le32 value;
0071     __le32 ctl;
0072 };
0073 
0074 struct packet_wreg_bulk {
0075     __le32 size64;
0076     __le32 ctl;
0077     __le64 values[]; /* data starts here */
0078 };
0079 
0080 struct packet_msg_long {
0081     __le32 value;
0082     __le32 ctl;
0083     __le64 addr;
0084 };
0085 
0086 struct packet_msg_short {
0087     __le32 value;
0088     __le32 ctl;
0089 };
0090 
0091 struct packet_msg_prot {
0092     __le32 value;
0093     __le32 ctl;
0094     __le64 addr;
0095 };
0096 
0097 struct packet_fence {
0098     __le32 cfg;
0099     __le32 ctl;
0100 };
0101 
0102 #define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT       0
0103 #define GOYA_PKT_LIN_DMA_CTL_WO_MASK        0x00000001
0104 
0105 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT   1
0106 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK    0x00000002
0107 
0108 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT   2
0109 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK    0x00000004
0110 
0111 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT   6
0112 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK    0x00000040
0113 
0114 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT  20
0115 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK   0x00700000
0116 
0117 struct packet_lin_dma {
0118     __le32 tsize;
0119     __le32 ctl;
0120     __le64 src_addr;
0121     __le64 dst_addr;
0122 };
0123 
0124 struct packet_cp_dma {
0125     __le32 tsize;
0126     __le32 ctl;
0127     __le64 src_addr;
0128 };
0129 
0130 #endif /* GOYA_PACKETS_H */