xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/altera/altera_msgdmahw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /* Altera TSE SGDMA and MSGDMA Linux driver
3*4882a593Smuzhiyun  * Copyright (C) 2014 Altera Corporation. All rights reserved
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef __ALTERA_MSGDMAHW_H__
7*4882a593Smuzhiyun #define __ALTERA_MSGDMAHW_H__
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun /* mSGDMA extended descriptor format
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun struct msgdma_extended_desc {
12*4882a593Smuzhiyun 	u32 read_addr_lo;	/* data buffer source address low bits */
13*4882a593Smuzhiyun 	u32 write_addr_lo;	/* data buffer destination address low bits */
14*4882a593Smuzhiyun 	u32 len;		/* the number of bytes to transfer
15*4882a593Smuzhiyun 				 * per descriptor
16*4882a593Smuzhiyun 				 */
17*4882a593Smuzhiyun 	u32 burst_seq_num;	/* bit 31:24 write burst
18*4882a593Smuzhiyun 				 * bit 23:16 read burst
19*4882a593Smuzhiyun 				 * bit 15:0  sequence number
20*4882a593Smuzhiyun 				 */
21*4882a593Smuzhiyun 	u32 stride;		/* bit 31:16 write stride
22*4882a593Smuzhiyun 				 * bit 15:0  read stride
23*4882a593Smuzhiyun 				 */
24*4882a593Smuzhiyun 	u32 read_addr_hi;	/* data buffer source address high bits */
25*4882a593Smuzhiyun 	u32 write_addr_hi;	/* data buffer destination address high bits */
26*4882a593Smuzhiyun 	u32 control;		/* characteristics of the transfer */
27*4882a593Smuzhiyun };
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* mSGDMA descriptor control field bit definitions
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_SET_CH(x)	((x) & 0xff)
32*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_GEN_SOP		BIT(8)
33*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_GEN_EOP		BIT(9)
34*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_PARK_READS	BIT(10)
35*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_PARK_WRITES	BIT(11)
36*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_END_ON_EOP	BIT(12)
37*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_END_ON_LEN	BIT(13)
38*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TR_COMP_IRQ	BIT(14)
39*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_EARLY_IRQ	BIT(15)
40*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TR_ERR_IRQ	(0xff << 16)
41*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_EARLY_DONE	BIT(24)
42*4882a593Smuzhiyun /* Writing ‘1’ to the ‘go’ bit commits the entire descriptor into the
43*4882a593Smuzhiyun  * descriptor FIFO(s)
44*4882a593Smuzhiyun  */
45*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_GO		BIT(31)
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /* Tx buffer control flags
48*4882a593Smuzhiyun  */
49*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TX_FIRST	(MSGDMA_DESC_CTL_GEN_SOP |	\
50*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_GO)
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TX_MIDDLE	(MSGDMA_DESC_CTL_GO)
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TX_LAST		(MSGDMA_DESC_CTL_GEN_EOP |	\
55*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_TR_COMP_IRQ |	\
56*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_GO)
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_TX_SINGLE	(MSGDMA_DESC_CTL_GEN_SOP |	\
59*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_GEN_EOP |	\
60*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_TR_COMP_IRQ |	\
61*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_GO)
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #define MSGDMA_DESC_CTL_RX_SINGLE	(MSGDMA_DESC_CTL_END_ON_EOP |	\
64*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_END_ON_LEN |	\
65*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_TR_COMP_IRQ |	\
66*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_EARLY_IRQ |	\
67*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_TR_ERR_IRQ |	\
68*4882a593Smuzhiyun 					 MSGDMA_DESC_CTL_GO)
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /* mSGDMA extended descriptor stride definitions
71*4882a593Smuzhiyun  */
72*4882a593Smuzhiyun #define MSGDMA_DESC_TX_STRIDE		(0x00010001)
73*4882a593Smuzhiyun #define MSGDMA_DESC_RX_STRIDE		(0x00010001)
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* mSGDMA dispatcher control and status register map
76*4882a593Smuzhiyun  */
77*4882a593Smuzhiyun struct msgdma_csr {
78*4882a593Smuzhiyun 	u32 status;		/* Read/Clear */
79*4882a593Smuzhiyun 	u32 control;		/* Read/Write */
80*4882a593Smuzhiyun 	u32 rw_fill_level;	/* bit 31:16 - write fill level
81*4882a593Smuzhiyun 				 * bit 15:0  - read fill level
82*4882a593Smuzhiyun 				 */
83*4882a593Smuzhiyun 	u32 resp_fill_level;	/* bit 15:0 */
84*4882a593Smuzhiyun 	u32 rw_seq_num;		/* bit 31:16 - write sequence number
85*4882a593Smuzhiyun 				 * bit 15:0  - read sequence number
86*4882a593Smuzhiyun 				 */
87*4882a593Smuzhiyun 	u32 pad[3];		/* reserved */
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun /* mSGDMA CSR status register bit definitions
91*4882a593Smuzhiyun  */
92*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_BUSY			BIT(0)
93*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_DESC_BUF_EMPTY		BIT(1)
94*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_DESC_BUF_FULL		BIT(2)
95*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESP_BUF_EMPTY		BIT(3)
96*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESP_BUF_FULL		BIT(4)
97*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED			BIT(5)
98*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESETTING		BIT(6)
99*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED_ON_ERR		BIT(7)
100*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED_ON_EARLY	BIT(8)
101*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_IRQ			BIT(9)
102*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_MASK			0x3FF
103*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_MASK_WITHOUT_IRQ	0x1FF
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_BUSY_GET(v)			GET_BIT_VALUE(v, 0)
106*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_DESC_BUF_EMPTY_GET(v)		GET_BIT_VALUE(v, 1)
107*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_DESC_BUF_FULL_GET(v)		GET_BIT_VALUE(v, 2)
108*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESP_BUF_EMPTY_GET(v)		GET_BIT_VALUE(v, 3)
109*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESP_BUF_FULL_GET(v)		GET_BIT_VALUE(v, 4)
110*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED_GET(v)			GET_BIT_VALUE(v, 5)
111*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_RESETTING_GET(v)		GET_BIT_VALUE(v, 6)
112*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED_ON_ERR_GET(v)		GET_BIT_VALUE(v, 7)
113*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_STOPPED_ON_EARLY_GET(v)		GET_BIT_VALUE(v, 8)
114*4882a593Smuzhiyun #define MSGDMA_CSR_STAT_IRQ_GET(v)			GET_BIT_VALUE(v, 9)
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* mSGDMA CSR control register bit definitions
117*4882a593Smuzhiyun  */
118*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_STOP			BIT(0)
119*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_RESET			BIT(1)
120*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_STOP_ON_ERR		BIT(2)
121*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_STOP_ON_EARLY		BIT(3)
122*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_GLOBAL_INTR		BIT(4)
123*4882a593Smuzhiyun #define MSGDMA_CSR_CTL_STOP_DESCS		BIT(5)
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* mSGDMA CSR fill level bits
126*4882a593Smuzhiyun  */
127*4882a593Smuzhiyun #define MSGDMA_CSR_WR_FILL_LEVEL_GET(v)		(((v) & 0xffff0000) >> 16)
128*4882a593Smuzhiyun #define MSGDMA_CSR_RD_FILL_LEVEL_GET(v)		((v) & 0x0000ffff)
129*4882a593Smuzhiyun #define MSGDMA_CSR_RESP_FILL_LEVEL_GET(v)	((v) & 0x0000ffff)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun /* mSGDMA response register map
132*4882a593Smuzhiyun  */
133*4882a593Smuzhiyun struct msgdma_response {
134*4882a593Smuzhiyun 	u32 bytes_transferred;
135*4882a593Smuzhiyun 	u32 status;
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #define msgdma_respoffs(a) (offsetof(struct msgdma_response, a))
139*4882a593Smuzhiyun #define msgdma_csroffs(a) (offsetof(struct msgdma_csr, a))
140*4882a593Smuzhiyun #define msgdma_descroffs(a) (offsetof(struct msgdma_extended_desc, a))
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun /* mSGDMA response register bit definitions
143*4882a593Smuzhiyun  */
144*4882a593Smuzhiyun #define MSGDMA_RESP_EARLY_TERM	BIT(8)
145*4882a593Smuzhiyun #define MSGDMA_RESP_ERR_MASK	0xFF
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #endif /* __ALTERA_MSGDMA_H__*/
148