| /* |
| * 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 |