113 lines
3.4 KiB
C
113 lines
3.4 KiB
C
|
/*
|
||
|
* Copyright 2020 Broadcom
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#ifndef DMA_IPROC_PAX_V1
|
||
|
#define DMA_IPROC_PAX_V1
|
||
|
|
||
|
#include "dma_iproc_pax.h"
|
||
|
|
||
|
/* Register RM_CONTROL fields */
|
||
|
#define RM_COMM_MSI_INTERRUPT_STATUS_MASK 0x30d0
|
||
|
#define RM_COMM_MSI_INTERRUPT_STATUS_CLEAR 0x30d4
|
||
|
|
||
|
#define RM_COMM_CONTROL_MODE_MASK 0x3
|
||
|
#define RM_COMM_CONTROL_MODE_SHIFT 0
|
||
|
#define RM_COMM_CONTROL_MODE_TOGGLE 0x2
|
||
|
#define RM_COMM_CONTROL_CONFIG_DONE BIT(2)
|
||
|
#define RM_COMM_CONTROL_LINE_INTR_EN_SHIFT 4
|
||
|
#define RM_COMM_CONTROL_LINE_INTR_EN BIT(4)
|
||
|
#define RM_COMM_CONTROL_AE_TIMEOUT_EN_SHIFT 5
|
||
|
#define RM_COMM_CONTROL_AE_TIMEOUT_EN BIT(5)
|
||
|
#define RM_COMM_MSI_DISABLE_VAL 3
|
||
|
|
||
|
#define PAX_DMA_TYPE_DMA_DESC 0x3
|
||
|
#define PAX_DMA_NUM_BD_BUFFS 8
|
||
|
/* DMA desc count: 3 entries per packet */
|
||
|
#define PAX_DMA_RM_DESC_BDCOUNT 3
|
||
|
/* 1 DMA packet desc takes 3 BDs */
|
||
|
#define PAX_DMA_DMA_DESC_SIZE (PAX_DMA_RM_DESC_BDWIDTH * \
|
||
|
PAX_DMA_RM_DESC_BDCOUNT)
|
||
|
/* Max size of transfer in single packet */
|
||
|
#define PAX_DMA_MAX_DMA_SIZE_PER_BD (16 * 1024 * 1024)
|
||
|
|
||
|
/* ascii signature 'V' 'K' */
|
||
|
#define PAX_DMA_WRITE_SYNC_SIGNATURE 0x564B
|
||
|
|
||
|
/* DMA transfers supported from 4 bytes thru 16M, size aligned to 4 bytes */
|
||
|
#define PAX_DMA_MIN_SIZE 4
|
||
|
#define PAX_DMA_MAX_SIZE (16 * 1024 * 1024)
|
||
|
|
||
|
/* Bits 0:1 ignored by PAX DMA, i.e. 4-byte address alignment */
|
||
|
#define PAX_DMA_PCI_ADDR_LS_IGNORE_BITS 2
|
||
|
#define PAX_DMA_PCI_ADDR_ALIGNMT_SHIFT PAX_DMA_PCI_ADDR_LS_IGNORE_BITS
|
||
|
|
||
|
/* s/w payload struct, enough space for 1020 sglist elements */
|
||
|
#define PAX_DMA_PAYLOAD_BUFF_SIZE (32 * 1024)
|
||
|
|
||
|
/*
|
||
|
* 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_PAYLOAD_BUFF_SIZE)
|
||
|
|
||
|
/* RM header desc field */
|
||
|
struct rm_header {
|
||
|
uint64_t opq : 16; /*pkt_id 15:0*/
|
||
|
uint64_t res1 : 20; /*reserved 35:16*/
|
||
|
uint64_t bdcount : 5; /*bdcount 40:36*/
|
||
|
uint64_t prot : 2; /*prot 41:40*/
|
||
|
uint64_t res2 : 13; /*reserved 55:43*/
|
||
|
uint64_t start : 1; /*start pkt :56*/
|
||
|
uint64_t end : 1; /*end pkt :57*/
|
||
|
uint64_t toggle : 1; /*toggle :58*/
|
||
|
uint64_t res3 : 1; /*reserved :59*/
|
||
|
uint64_t type : 4; /*type 63:60*/
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
/* dma desc header field */
|
||
|
struct dma_header_desc {
|
||
|
uint64_t length : 25; /*transfer length in bytes 24:0*/
|
||
|
uint64_t res1: 31; /*reserved 55:25*/
|
||
|
uint64_t opcode : 4; /*opcode 59:56*/
|
||
|
uint64_t res2: 2; /*reserved 61:60*/
|
||
|
uint64_t type : 2; /*type 63:62 set to b'11*/
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
/* dma desc AXI addr field */
|
||
|
struct axi_addr_desc {
|
||
|
uint64_t axi_addr : 48; /*axi_addr[47:0]*/
|
||
|
uint64_t res : 14; /*reserved 48:61*/
|
||
|
uint64_t type : 2; /*63:62 set to b'11*/
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
/* dma desc PCI addr field */
|
||
|
struct pci_addr_desc {
|
||
|
uint64_t pcie_addr : 62; /*pcie_addr[63:2]*/
|
||
|
uint64_t type : 2; /*63:62 set to b'11*/
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
/* DMA descriptor */
|
||
|
struct dma_desc {
|
||
|
struct dma_header_desc hdr;
|
||
|
struct axi_addr_desc axi;
|
||
|
struct pci_addr_desc pci;
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
struct next_ptr_desc {
|
||
|
uint64_t addr : 44; /*Address 43:0*/
|
||
|
uint64_t res1 : 14;/*Reserved*/
|
||
|
uint64_t toggle : 1; /*Toggle Bit:58*/
|
||
|
uint64_t res2 : 1;/*Reserved 59:59*/
|
||
|
uint64_t type : 4;/*descriptor type 63:60*/
|
||
|
} __attribute__ ((__packed__));
|
||
|
|
||
|
#endif
|