109 lines
3.1 KiB
C
109 lines
3.1 KiB
C
/*
|
|
* 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
|