blob: 4f66a3cce5246b635c20ebf8051b477b440d8971 [file] [log] [blame]
Aaron Williams1fd14ee2022-04-07 09:11:03 +02001/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2018-2022 Marvell International Ltd.
4 */
5
6#ifndef __CVMX_CONFIG_H__
7#define __CVMX_CONFIG_H__
8
9/************************* Config Specific Defines ************************/
10#define CVMX_LLM_NUM_PORTS 1
11
12/**< PKO queues per port for interface 0 (ports 0-15) */
13#define CVMX_PKO_QUEUES_PER_PORT_INTERFACE0 1
14
15/**< PKO queues per port for interface 1 (ports 16-31) */
16#define CVMX_PKO_QUEUES_PER_PORT_INTERFACE1 1
17
18/**< PKO queues per port for interface 4 (AGL) */
19#define CVMX_PKO_QUEUES_PER_PORT_INTERFACE4 1
20
21/**< Limit on the number of PKO ports enabled for interface 0 */
22#define CVMX_PKO_MAX_PORTS_INTERFACE0 CVMX_HELPER_PKO_MAX_PORTS_INTERFACE0
23
24/**< Limit on the number of PKO ports enabled for interface 1 */
25#define CVMX_PKO_MAX_PORTS_INTERFACE1 CVMX_HELPER_PKO_MAX_PORTS_INTERFACE1
26
27/**< PKO queues per port for PCI (ports 32-35) */
28#define CVMX_PKO_QUEUES_PER_PORT_PCI 1
29
30/**< PKO queues per port for Loop devices (ports 36-39) */
31#define CVMX_PKO_QUEUES_PER_PORT_LOOP 1
32
33/**< PKO queues per port for SRIO0 devices (ports 40-41) */
34#define CVMX_PKO_QUEUES_PER_PORT_SRIO0 1
35
36/**< PKO queues per port for SRIO1 devices (ports 42-43) */
37#define CVMX_PKO_QUEUES_PER_PORT_SRIO1 1
38
39/************************* FPA allocation *********************************/
40/* Pool sizes in bytes, must be multiple of a cache line */
41#define CVMX_FPA_POOL_0_SIZE (16 * CVMX_CACHE_LINE_SIZE)
42#define CVMX_FPA_POOL_1_SIZE (1 * CVMX_CACHE_LINE_SIZE)
43#define CVMX_FPA_POOL_2_SIZE (8 * CVMX_CACHE_LINE_SIZE)
44#define CVMX_FPA_POOL_3_SIZE (2 * CVMX_CACHE_LINE_SIZE)
45#define CVMX_FPA_POOL_4_SIZE (0 * CVMX_CACHE_LINE_SIZE)
46#define CVMX_FPA_POOL_5_SIZE (0 * CVMX_CACHE_LINE_SIZE)
47#define CVMX_FPA_POOL_6_SIZE (8 * CVMX_CACHE_LINE_SIZE)
48#define CVMX_FPA_POOL_7_SIZE (0 * CVMX_CACHE_LINE_SIZE)
49
50/* Pools in use */
51/**< Packet buffers */
52#define CVMX_FPA_PACKET_POOL (0)
53#ifndef CVMX_FPA_PACKET_POOL_SIZE
54#define CVMX_FPA_PACKET_POOL_SIZE CVMX_FPA_POOL_0_SIZE
55#endif
56
57/**< Work queue entries */
58#define CVMX_FPA_WQE_POOL (1)
59#define CVMX_FPA_WQE_POOL_SIZE CVMX_FPA_POOL_1_SIZE
60
61/**< PKO queue command buffers */
62#define CVMX_FPA_OUTPUT_BUFFER_POOL (2)
63#define CVMX_FPA_OUTPUT_BUFFER_POOL_SIZE CVMX_FPA_POOL_2_SIZE
64
65/**< BCH queue command buffers */
66#define CVMX_FPA_BCH_POOL (6)
67#define CVMX_FPA_BCH_POOL_SIZE CVMX_FPA_POOL6_SIZE
68
69/************************* FAU allocation ********************************/
70/* The fetch and add registers are allocated here. They are arranged
71 * in order of descending size so that all alignment constraints are
72 * automatically met.
73 * The enums are linked so that the following enum continues allocating
74 * where the previous one left off, so the numbering within each
75 * enum always starts with zero. The macros take care of the address
76 * increment size, so the values entered always increase by 1.
77 * FAU registers are accessed with byte addresses.
78 */
79
80#define CVMX_FAU_REG_64_ADDR(x) (((x) << 3) + CVMX_FAU_REG_64_START)
81typedef enum {
82 CVMX_FAU_REG_64_START = 0,
83 /**< FAU registers for the position in PKO command buffers */
84 CVMX_FAU_REG_OQ_ADDR_INDEX = CVMX_FAU_REG_64_ADDR(0),
85 /* Array of 36 */
86 CVMX_FAU_REG_64_END = CVMX_FAU_REG_64_ADDR(36),
87} cvmx_fau_reg_64_t;
88
89#define CVMX_FAU_REG_32_ADDR(x) (((x) << 2) + CVMX_FAU_REG_32_START)
90typedef enum {
91 CVMX_FAU_REG_32_START = CVMX_FAU_REG_64_END,
92 CVMX_FAU_REG_32_END = CVMX_FAU_REG_32_ADDR(0),
93} cvmx_fau_reg_32_t;
94
95#define CVMX_FAU_REG_16_ADDR(x) (((x) << 1) + CVMX_FAU_REG_16_START)
96typedef enum {
97 CVMX_FAU_REG_16_START = CVMX_FAU_REG_32_END,
98 CVMX_FAU_REG_16_END = CVMX_FAU_REG_16_ADDR(0),
99} cvmx_fau_reg_16_t;
100
101#define CVMX_FAU_REG_8_ADDR(x) ((x) + CVMX_FAU_REG_8_START)
102typedef enum {
103 CVMX_FAU_REG_8_START = CVMX_FAU_REG_16_END,
104 CVMX_FAU_REG_8_END = CVMX_FAU_REG_8_ADDR(0),
105} cvmx_fau_reg_8_t;
106
107/* The name CVMX_FAU_REG_AVAIL_BASE is provided to indicate the first available
108 * FAU address that is not allocated in cvmx-config.h. This is 64 bit aligned.
109 */
110#define CVMX_FAU_REG_AVAIL_BASE ((CVMX_FAU_REG_8_END + 0x7) & (~0x7ULL))
111#define CVMX_FAU_REG_END (2048)
112
113/********************** scratch memory allocation *************************/
114/* Scratchpad memory allocation. Note that these are byte memory addresses.
115 * Some uses of scratchpad (IOBDMA for example) require the use of 8-byte
116 * aligned addresses, so proper alignment needs to be taken into account.
117 */
118
119/**< Pre allocation for PKO queue command buffers */
120#define CVMX_SCR_OQ_BUF_PRE_ALLOC (0)
121
122/**< Generic scratch iobdma area */
123#define CVMX_SCR_SCRATCH (8)
124
125/**< First location available after cvmx-config.h allocated region. */
126#define CVMX_SCR_REG_AVAIL_BASE (16)
127
128#endif /* __CVMX_CONFIG_H__ */