1 /* i2c_dw_registers.h - array access for I2C Design Ware registers */
2 
3 /*
4  * Copyright (c) 2015 Intel Corporation
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  */
8 #ifndef ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_
9 #define ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /*  IC_CON bits */
16 union ic_con_register {
17 	uint32_t                raw;
18 	struct {
19 		uint32_t         master_mode : 1 __packed;
20 		uint32_t         speed : 2 __packed;
21 		uint32_t         addr_slave_10bit : 1 __packed;
22 		uint32_t         addr_master_10bit : 1 __packed;
23 		uint32_t         restart_en : 1 __packed;
24 		uint32_t         slave_disable : 1 __packed;
25 		uint32_t         stop_det : 1 __packed;
26 		uint32_t         tx_empty_ctl : 1 __packed;
27 		uint32_t         rx_fifo_full : 1 __packed;
28 	} bits;
29 };
30 
31 /* IC_DATA_CMD bits */
32 #define IC_DATA_CMD_DAT_MASK		0xFF
33 #define IC_DATA_CMD_CMD			BIT(8)
34 #define IC_DATA_CMD_STOP		BIT(9)
35 #define IC_DATA_CMD_RESTART		BIT(10)
36 
37 /* DesignWare Interrupt bits positions */
38 #define DW_INTR_STAT_RX_UNDER		BIT(0)
39 #define DW_INTR_STAT_RX_OVER		BIT(1)
40 #define DW_INTR_STAT_RX_FULL		BIT(2)
41 #define DW_INTR_STAT_TX_OVER		BIT(3)
42 #define DW_INTR_STAT_TX_EMPTY		BIT(4)
43 #define DW_INTR_STAT_RD_REQ			BIT(5)
44 #define DW_INTR_STAT_TX_ABRT		BIT(6)
45 #define DW_INTR_STAT_RX_DONE		BIT(7)
46 #define DW_INTR_STAT_ACTIVITY		BIT(8)
47 #define DW_INTR_STAT_STOP_DET		BIT(9)
48 #define DW_INTR_STAT_START_DET		BIT(10)
49 #define DW_INTR_STAT_GEN_CALL		BIT(11)
50 #define DW_INTR_STAT_RESTART_DET	BIT(12)
51 #define DW_INTR_STAT_MST_ON_HOLD	BIT(13)
52 
53 #define DW_INTR_MASK_RX_UNDER		BIT(0)
54 #define DW_INTR_MASK_RX_OVER		BIT(1)
55 #define DW_INTR_MASK_RX_FULL		BIT(2)
56 #define DW_INTR_MASK_TX_OVER		BIT(3)
57 #define DW_INTR_MASK_TX_EMPTY		BIT(4)
58 #define DW_INTR_MASK_RD_REQ			BIT(5)
59 #define DW_INTR_MASK_TX_ABRT		BIT(6)
60 #define DW_INTR_MASK_RX_DONE		BIT(7)
61 #define DW_INTR_MASK_ACTIVITY		BIT(8)
62 #define DW_INTR_MASK_STOP_DET		BIT(9)
63 #define DW_INTR_MASK_START_DET		BIT(10)
64 #define DW_INTR_MASK_GEN_CALL		BIT(11)
65 #define DW_INTR_MASK_RESTART_DET	BIT(12)
66 #define DW_INTR_MASK_MST_ON_HOLD	BIT(13)
67 #define DW_INTR_MASK_RESET		0x000008ff
68 
69 union ic_interrupt_register {
70 	uint32_t			raw;
71 	struct {
72 		uint32_t	rx_under : 1 __packed;
73 		uint32_t	rx_over : 1 __packed;
74 		uint32_t	rx_full : 1 __packed;
75 		uint32_t	tx_over : 1 __packed;
76 		uint32_t	tx_empty : 1 __packed;
77 		uint32_t	rd_req : 1 __packed;
78 		uint32_t	tx_abrt : 1 __packed;
79 		uint32_t	rx_done : 1 __packed;
80 		uint32_t	activity : 1 __packed;
81 		uint32_t	stop_det : 1 __packed;
82 		uint32_t	start_det : 1 __packed;
83 		uint32_t	gen_call : 1 __packed;
84 		uint32_t	restart_det : 1 __packed;
85 		uint32_t	mst_on_hold : 1 __packed;
86 		uint32_t	reserved : 2 __packed;
87 	} bits;
88 };
89 
90 /* IC_TAR */
91 union ic_tar_register {
92 	uint32_t		raw;
93 	struct {
94 		uint32_t	ic_tar : 10 __packed;
95 		uint32_t	gc_or_start : 1 __packed;
96 		uint32_t	special : 1 __packed;
97 		uint32_t	ic_10bitaddr_master : 1 __packed;
98 		uint32_t	reserved : 3 __packed;
99 	} bits;
100 };
101 
102 /* IC_COMP_PARAM_1 */
103 union ic_comp_param_1_register {
104 	uint32_t		raw;
105 	struct {
106 		uint32_t	apb_data_width : 2 __packed;
107 		uint32_t	max_speed_mode : 2 __packed;
108 		uint32_t	hc_count_values : 1 __packed;
109 		uint32_t	intr_io : 1 __packed;
110 		uint32_t	has_dma : 1 __packed;
111 		uint32_t	add_encoded_params : 1 __packed;
112 		uint32_t	rx_buffer_depth : 8 __packed;
113 		uint32_t	tx_buffer_depth : 8 __packed;
114 		uint32_t	reserved : 7 __packed;
115 	} bits;
116 };
117 
118 #define DW_IC_REG_CON				(0x00)
119 #define DW_IC_REG_TAR				(0x04)
120 #define DW_IC_REG_SAR				(0x08)
121 #define DW_IC_REG_DATA_CMD			(0x10)
122 #define DW_IC_REG_SS_SCL_HCNT		(0x14)
123 #define DW_IC_REG_SS_SCL_LCNT		(0x18)
124 #define DW_IC_REG_FS_SCL_HCNT		(0x1C)
125 #define DW_IC_REG_FS_SCL_LCNT		(0x20)
126 #define DW_IC_REG_HS_SCL_HCNT		(0x24)
127 #define DW_IC_REG_HS_SCL_LCNT		(0x28)
128 #define DW_IC_REG_INTR_STAT			(0x2C)
129 #define DW_IC_REG_INTR_MASK			(0x30)
130 #define DW_IC_REG_RX_TL				(0x38)
131 #define DW_IC_REG_TX_TL				(0x3C)
132 #define DW_IC_REG_CLR_INTR			(0x40)
133 #define DW_IC_REG_CLR_RX_UNDER		(0x44)
134 #define DW_IC_REG_CLR_RX_OVER		(0x48)
135 #define DW_IC_REG_CLR_TX_OVER		(0x4c)
136 #define DW_IC_REG_CLR_RD_REQ		(0x50)
137 #define DW_IC_REG_CLR_TX_ABRT		(0x54)
138 #define DW_IC_REG_CLR_RX_DONE		(0x58)
139 #define DW_IC_REG_CLR_ACTIVITY		(0x5c)
140 #define DW_IC_REG_CLR_STOP_DET		(0x60)
141 #define DW_IC_REG_CLR_START_DET		(0x64)
142 #define DW_IC_REG_CLR_GEN_CALL		(0x68)
143 #define DW_IC_REG_ENABLE			(0x6C)
144 #define DW_IC_REG_STATUS			(0x70)
145 #define DW_IC_REG_TXFLR				(0x74)
146 #define DW_IC_REG_RXFLR				(0x78)
147 #define DW_IC_REG_DMA_CR                        (0x88)
148 #define DW_IC_REG_TDLR                          (0x8C)
149 #define DW_IC_REG_RDLR                          (0x90)
150 #define DW_IC_REG_FS_SPKLEN			(0xA0)
151 #define DW_IC_REG_HS_SPKLEN			(0xA4)
152 #define DW_IC_REG_COMP_PARAM_1		(0xF4)
153 #define DW_IC_REG_COMP_TYPE			(0xFC)
154 
155 #define IDMA_REG_INTR_STS               0xAE8
156 #define IDMA_TX_RX_CHAN_MASK            0x3
157 
158 /* CON Bit */
159 #define DW_IC_CON_MASTER_MODE_BIT		(0)
160 
161 /* DMA control bits */
162 #define DW_IC_DMA_RX_ENABLE                    BIT(0)
163 #define DW_IC_DMA_TX_ENABLE                    BIT(1)
164 #define DW_IC_DMA_ENABLE                       (BIT(0) | BIT(1))
165 
166 DEFINE_TEST_BIT_OP(con_master_mode, DW_IC_REG_CON, DW_IC_CON_MASTER_MODE_BIT)
167 DEFINE_MM_REG_WRITE(con, DW_IC_REG_CON, 32)
168 DEFINE_MM_REG_READ(con, DW_IC_REG_CON, 32)
169 
170 DEFINE_MM_REG_WRITE(cmd_data, DW_IC_REG_DATA_CMD, 32)
171 DEFINE_MM_REG_READ(cmd_data, DW_IC_REG_DATA_CMD, 32)
172 
173 DEFINE_MM_REG_WRITE(ss_scl_hcnt, DW_IC_REG_SS_SCL_HCNT, 32)
174 DEFINE_MM_REG_WRITE(ss_scl_lcnt, DW_IC_REG_SS_SCL_LCNT, 32)
175 
176 DEFINE_MM_REG_WRITE(fs_scl_hcnt, DW_IC_REG_FS_SCL_HCNT, 32)
177 DEFINE_MM_REG_WRITE(fs_scl_lcnt, DW_IC_REG_FS_SCL_LCNT, 32)
178 
179 DEFINE_MM_REG_WRITE(hs_scl_hcnt, DW_IC_REG_HS_SCL_HCNT, 32)
180 DEFINE_MM_REG_WRITE(hs_scl_lcnt, DW_IC_REG_HS_SCL_LCNT, 32)
181 
182 
183 
184 DEFINE_MM_REG_READ(intr_stat, DW_IC_REG_INTR_STAT, 32)
185 #define DW_IC_INTR_STAT_TX_ABRT_BIT		(6)
186 DEFINE_TEST_BIT_OP(intr_stat_tx_abrt, DW_IC_REG_INTR_STAT, DW_IC_INTR_STAT_TX_ABRT_BIT)
187 
188 DEFINE_MM_REG_WRITE(intr_mask, DW_IC_REG_INTR_MASK, 32)
189 #define DW_IC_INTR_MASK_TX_EMPTY_BIT		(4)
190 DEFINE_CLEAR_BIT_OP(intr_mask_tx_empty, DW_IC_REG_INTR_MASK, DW_IC_INTR_MASK_TX_EMPTY_BIT)
191 DEFINE_SET_BIT_OP(intr_mask_tx_empty, DW_IC_REG_INTR_MASK, DW_IC_INTR_MASK_TX_EMPTY_BIT)
192 
193 DEFINE_MM_REG_WRITE(rx_tl, DW_IC_REG_RX_TL, 32)
194 DEFINE_MM_REG_WRITE(tx_tl, DW_IC_REG_TX_TL, 32)
195 
196 DEFINE_MM_REG_READ(clr_intr, DW_IC_REG_CLR_INTR, 32)
197 DEFINE_MM_REG_READ(clr_stop_det, DW_IC_REG_CLR_STOP_DET, 32)
198 DEFINE_MM_REG_READ(clr_start_det, DW_IC_REG_CLR_START_DET, 32)
199 DEFINE_MM_REG_READ(clr_gen_call, DW_IC_REG_CLR_GEN_CALL, 32)
200 DEFINE_MM_REG_READ(clr_tx_abrt, DW_IC_REG_CLR_TX_ABRT, 32)
201 DEFINE_MM_REG_READ(clr_rx_under, DW_IC_REG_CLR_RX_UNDER, 32)
202 DEFINE_MM_REG_READ(clr_rx_over, DW_IC_REG_CLR_RX_OVER, 32)
203 DEFINE_MM_REG_READ(clr_tx_over, DW_IC_REG_CLR_TX_OVER, 32)
204 DEFINE_MM_REG_READ(clr_rx_done, DW_IC_REG_CLR_RX_DONE, 32)
205 DEFINE_MM_REG_READ(clr_rd_req, DW_IC_REG_CLR_RD_REQ, 32)
206 DEFINE_MM_REG_READ(clr_activity, DW_IC_REG_CLR_ACTIVITY, 32)
207 
208 #define DW_IC_ENABLE_EN_BIT		(0)
209 DEFINE_CLEAR_BIT_OP(enable_en, DW_IC_REG_ENABLE, DW_IC_ENABLE_EN_BIT)
210 DEFINE_SET_BIT_OP(enable_en, DW_IC_REG_ENABLE, DW_IC_ENABLE_EN_BIT)
211 
212 
213 #define DW_IC_STATUS_ACTIVITY_BIT	(0)
214 #define DW_IC_STATUS_TFNT_BIT	(1)
215 #define DW_IC_STATUS_RFNE_BIT	(3)
216 DEFINE_TEST_BIT_OP(status_activity, DW_IC_REG_STATUS, DW_IC_STATUS_ACTIVITY_BIT)
217 DEFINE_TEST_BIT_OP(status_tfnt, DW_IC_REG_STATUS, DW_IC_STATUS_TFNT_BIT)
218 DEFINE_TEST_BIT_OP(status_rfne, DW_IC_REG_STATUS, DW_IC_STATUS_RFNE_BIT)
219 
220 DEFINE_MM_REG_READ(txflr, DW_IC_REG_TXFLR, 32)
221 DEFINE_MM_REG_READ(rxflr, DW_IC_REG_RXFLR, 32)
222 
223 DEFINE_MM_REG_READ(dma_cr, DW_IC_REG_DMA_CR, 32)
224 DEFINE_MM_REG_WRITE(dma_cr, DW_IC_REG_DMA_CR, 32)
225 
226 DEFINE_MM_REG_READ(tdlr, DW_IC_REG_TDLR, 32)
227 DEFINE_MM_REG_WRITE(tdlr, DW_IC_REG_TDLR, 32)
228 DEFINE_MM_REG_READ(rdlr, DW_IC_REG_RDLR, 32)
229 DEFINE_MM_REG_WRITE(rdlr, DW_IC_REG_RDLR, 32)
230 
231 DEFINE_MM_REG_READ(fs_spklen, DW_IC_REG_FS_SPKLEN, 32)
232 DEFINE_MM_REG_READ(hs_spklen, DW_IC_REG_HS_SPKLEN, 32)
233 
234 DEFINE_MM_REG_READ(comp_param_1, DW_IC_REG_COMP_PARAM_1, 32)
235 DEFINE_MM_REG_READ(comp_type, DW_IC_REG_COMP_TYPE, 32)
236 DEFINE_MM_REG_READ(tar, DW_IC_REG_TAR, 32)
237 DEFINE_MM_REG_WRITE(tar, DW_IC_REG_TAR, 32)
238 DEFINE_MM_REG_WRITE(sar, DW_IC_REG_SAR, 32)
239 
240 #ifdef __cplusplus
241 }
242 #endif
243 
244 #endif /* ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_ */
245