/* * Copyright 2020 Broadcom * * SPDX-License-Identifier: Apache-2.0 */ #ifndef DMA_IPROC_PAX_V2 #define DMA_IPROC_PAX_V2 #include "dma_iproc_pax.h" #define RING_COMPLETION_INTERRUPT_STAT_MASK 0x088 #define RING_COMPLETION_INTERRUPT_STAT_CLEAR 0x08c #define RING_COMPLETION_INTERRUPT_STAT 0x090 #define RING_DISABLE_MSI_TIMEOUT 0x0a4 /* Register RM_COMM_CONTROL fields */ #define RM_COMM_CONTROL_MODE_MASK 0x3 #define RM_COMM_CONTROL_MODE_SHIFT 0 #define RM_COMM_CONTROL_MODE_DOORBELL 0x0 #define RM_COMM_CONTROL_MODE_TOGGLE 0x2 #define RM_COMM_CONTROL_MODE_ALL_BD_TOGGLE 0x3 #define RM_COMM_CONTROL_CONFIG_DONE BIT(2) #define RM_COMM_CONTROL_LINE_INTR_EN BIT(4) #define RM_COMM_CONTROL_AE_TIMEOUT_EN BIT(5) #define RING_DISABLE_MSI_TIMEOUT_VALUE 1 #define PAX_DMA_TYPE_SRC_DESC 0x2 #define PAX_DMA_TYPE_DST_DESC 0x3 #define PAX_DMA_TYPE_MEGA_SRC_DESC 0x6 #define PAX_DMA_TYPE_MEGA_DST_DESC 0x7 #define PAX_DMA_TYPE_PCIE_DESC 0xB #define PAX_DMA_NUM_BD_BUFFS 9 /* PCIE DESC, either DST or SRC DESC */ #define PAX_DMA_RM_DESC_BDCOUNT 2 /* ascii signature 'V' 'P' */ #define PAX_DMA_WRITE_SYNC_SIGNATURE 0x5650 #define PAX_DMA_PCI_ADDR_MSB8_SHIFT 56 #define PAX_DMA_PCI_ADDR_HI_MSB8(pci) ((pci) >> PAX_DMA_PCI_ADDR_MSB8_SHIFT) #define PAX_DMA_MAX_SZ_PER_BD (512 * 1024) #define PAX_DMA_MEGA_LENGTH_MULTIPLE 16 /* Maximum DMA block count supported per request */ #define RM_V2_MAX_BLOCK_COUNT 1024 #define MAX_BD_COUNT_PER_HEADER 30 /* * Sync payload buffer size is of 4 bytes,4096 Bytes allocated here * to make sure BD memories fall in 4K alignment. */ #define PAX_DMA_RM_SYNC_BUFFER_MISC_SIZE 4096 /* * Per-ring memory, with 8K & 4K alignment * Alignment may not be ensured by allocator * s/w need to allocate extra upto 8K to * ensure aligned memory space. */ #define PAX_DMA_PER_RING_ALLOC_SIZE (PAX_DMA_RM_CMPL_RING_SIZE * 2 + \ PAX_DMA_NUM_BD_BUFFS * \ PAX_DMA_RM_DESC_RING_SIZE + \ PAX_DMA_RM_SYNC_BUFFER_MISC_SIZE) /* RM header desc field */ struct rm_header { uint64_t opq : 16; /*pkt_id 15:0*/ uint64_t bdf : 16; /*reserved 31:16*/ uint64_t res1 : 4; /*res 32:35*/ uint64_t bdcount : 5; /*bdcount 36:40*/ uint64_t prot : 2; /*prot 41:42*/ uint64_t res2 : 1; /*res :43:43*/ uint64_t pcie_addr_msb : 8; /*pcie addr :44:51*/ uint64_t res3 : 4; /*res :52:55*/ uint64_t start : 1; /*S :56*/ uint64_t end : 1; /*E:57*/ uint64_t res4 : 1; /*res:58*/ uint64_t toggle : 1; /*T:59*/ uint64_t type : 4; /*type:60:63*/ } __attribute__ ((__packed__)); /* pcie desc field */ struct pcie_desc { uint64_t pcie_addr_lsb : 56; /* pcie_addr_lsb 0:55*/ uint64_t res1: 3; /*reserved 56:58*/ uint64_t toggle : 1; /*T:59*/ uint64_t type : 4; /*type:60:63*/ } __attribute__ ((__packed__)); /* src/dst desc field */ struct src_dst_desc { uint64_t axi_addr : 44; /*axi_addr[43:0]*/ uint64_t length : 15; /*length[44:58]*/ uint64_t toggle : 1; /*T:59*/ uint64_t type : 4; /*type:60:63*/ } __attribute__ ((__packed__)); struct next_ptr_desc { uint64_t addr : 44; /*Address 43:0*/ uint64_t res1 : 15;/*Reserved*/ uint64_t toggle : 1; /*Toggle Bit:59*/ uint64_t type : 4;/*descriptor type 63:60*/ } __attribute__ ((__packed__)); #endif