@@ -35,3 +35,272 @@ const gdma_signal_conn_t gdma_periph_signals = {
3535 }
3636 }
3737};
38+
39+ #if SOC_PAU_SUPPORTED && SOC_GDMA_SUPPORT_SLEEP_RETENTION
40+ /* AHB_DMA Channel (Group0, Pair0) Registers Context
41+ Include: AHB_DMA_MISC_CONF_REG
42+ AHB_DMA_IN_INT_ENA_CH0_REG / AHB_DMA_OUT_INT_ENA_CH0_REG
43+ AHB_DMA_IN_CONF0_CH0_REG / AHB_DMA_IN_CONF1_CH0_REG
44+ AHB_DMA_IN_LINK_CH0_REG / AHB_DMA_IN_LINK_ADDR_CH0_REG
45+ AHB_DMA_IN_PRI_CH0_REG / AHB_DMA_IN_PERI_SEL_CH0_REG
46+ AHB_DMA_RX_CH_ARB_WEIGH_CH0_REG / AHB_DMA_RX_ARB_WEIGH_OPT_DIR_CH0_REG
47+ AHB_DMA_OUT_CONF0_CH0_REG / AHB_DMA_OUT_CONF1_CH0_REG
48+ AHB_DMA_OUT_LINK_CH0_REG / AHB_DMA_OUT_LINK_ADDR_CH0_REG
49+ AHB_DMA_OUT_PRI_CH0_REG / AHB_DMA_OUT_PERI_SEL_CH0_REG
50+ AHB_DMA_TX_CH_ARB_WEIGH_CH0_REG / AHB_DMA_TX_ARB_WEIGH_OPT_DIR_CH0_REG
51+
52+ AHB_DMA_INTR_MEM_START_ADDR_REG / AHB_DMA_INTR_MEM_END_ADDR_REG
53+ AHB_DMA_ARB_TIMEOUT_REG / AHB_DMA_WEIGHT_EN_REG
54+ */
55+ #define G0P0_RETENTION_REGS_CNT_0 19
56+ #define G0P0_RETENTION_MAP_BASE_0 (DR_REG_AHB_DMA_BASE + 0x8)
57+ #define G0P0_RETENTION_REGS_CNT_1 4
58+ #define G0P0_RETENTION_MAP_BASE_1 (DR_REG_AHB_DMA_BASE + 0x600)
59+ static const uint32_t g0p0_regs_map0 [4 ] = {0x100001 , 0xc0000080 , 0xc000780c , 0x780c };
60+ static const uint32_t g0p0_regs_map1 [4 ] = {0x17 , 0x0 , 0x0 , 0x0 };
61+ static const regdma_entries_config_t gdma_g0p0_regs_retention [] = {
62+ [0 ] = {
63+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
64+ G0P0_RETENTION_MAP_BASE_0 , G0P0_RETENTION_MAP_BASE_0 , \
65+ G0P0_RETENTION_REGS_CNT_0 , 0 , 0 , \
66+ g0p0_regs_map0 [0 ], g0p0_regs_map0 [1 ], \
67+ g0p0_regs_map0 [2 ], g0p0_regs_map0 [3 ]), \
68+ .owner = GDMA_RETENTION_ENTRY
69+ }, \
70+ [1 ] = {
71+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
72+ G0P0_RETENTION_MAP_BASE_1 , G0P0_RETENTION_MAP_BASE_1 , \
73+ G0P0_RETENTION_REGS_CNT_1 , 0 , 0 , \
74+ g0p0_regs_map1 [0 ], g0p0_regs_map1 [1 ], \
75+ g0p0_regs_map1 [2 ], g0p0_regs_map1 [3 ]), \
76+ .owner = GDMA_RETENTION_ENTRY
77+ }, \
78+ };
79+
80+ /* AHB_DMA Channel (Group0, Pair1) Registers Context
81+ Include: AHB_DMA_MISC_CONF_REG
82+ AHB_DMA_IN_INT_ENA_CH1_REG / AHB_DMA_OUT_INT_ENA_CH1_REG
83+
84+ AHB_DMA_IN_CONF0_CH1_REG / AHB_DMA_IN_CONF1_CH1_REG
85+ AHB_DMA_IN_LINK_CH1_REG / AHB_DMA_IN_LINK_ADDR_CH1_REG
86+ AHB_DMA_IN_PRI_CH1_REG / AHB_DMA_IN_PERI_SEL_CH1_REG
87+ AHB_DMA_RX_CH_ARB_WEIGH_CH1_REG / AHB_DMA_RX_ARB_WEIGH_OPT_DIR_CH1_REG
88+ AHB_DMA_OUT_CONF0_CH1_REG / AHB_DMA_OUT_CONF1_CH1_REG
89+ AHB_DMA_OUT_LINK_CH1_REG / AHB_DMA_OUT_LINK_ADDR_CH1_REG
90+ AHB_DMA_OUT_PRI_CH1_REG / AHB_DMA_OUT_PERI_SEL_CH1_REG
91+ AHB_DMA_TX_CH_ARB_WEIGH_CH1_REG / AHB_DMA_TX_ARB_WEIGH_OPT_DIR_CH1_REG
92+
93+ AHB_DMA_INTR_MEM_START_ADDR_REG / AHB_DMA_INTR_MEM_END_ADDR_REG
94+ AHB_DMA_ARB_TIMEOUT_REG / AHB_DMA_WEIGHT_EN_REG
95+ */
96+
97+ #define G0P1_RETENTION_REGS_CNT_0 3
98+ #define G0P1_RETENTION_MAP_BASE_0 (DR_REG_AHB_DMA_BASE + 0x18)
99+ #define G0P1_RETENTION_REGS_CNT_1 16
100+ #define G0P1_RETENTION_MAP_BASE_1 (DR_REG_AHB_DMA_BASE + 0x200)
101+ #define G0P1_RETENTION_REGS_CNT_2 4
102+ #define G0P1_RETENTION_MAP_BASE_2 (DR_REG_AHB_DMA_BASE + 0x600)
103+ static const uint32_t g0p1_regs_map0 [4 ] = {0x100001 , 0x8 , 0x0 , 0x0 };
104+ static const uint32_t g0p1_regs_map1 [4 ] = {0x1e033 , 0x1e033 , 0x0 , 0x0 };
105+ static const uint32_t g0p1_regs_map2 [4 ] = {0x17 , 0x0 , 0x0 , 0x0 };
106+ static const regdma_entries_config_t gdma_g0p1_regs_retention [] = {
107+ [0 ] = {
108+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
109+ G0P1_RETENTION_MAP_BASE_0 , G0P1_RETENTION_MAP_BASE_0 , \
110+ G0P1_RETENTION_REGS_CNT_0 , 0 , 0 , \
111+ g0p1_regs_map0 [0 ], g0p1_regs_map0 [1 ], \
112+ g0p1_regs_map0 [2 ], g0p1_regs_map0 [3 ]), \
113+ .owner = GDMA_RETENTION_ENTRY
114+ }, \
115+ [1 ] = {
116+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
117+ G0P1_RETENTION_MAP_BASE_1 , G0P1_RETENTION_MAP_BASE_1 , \
118+ G0P1_RETENTION_REGS_CNT_1 , 0 , 0 , \
119+ g0p1_regs_map1 [0 ], g0p1_regs_map1 [1 ], \
120+ g0p1_regs_map1 [2 ], g0p1_regs_map1 [3 ]), \
121+ .owner = GDMA_RETENTION_ENTRY
122+ }, \
123+ [2 ] = {
124+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
125+ G0P1_RETENTION_MAP_BASE_2 , G0P1_RETENTION_MAP_BASE_2 , \
126+ G0P1_RETENTION_REGS_CNT_2 , 0 , 0 , \
127+ g0p1_regs_map2 [0 ], g0p1_regs_map2 [1 ], \
128+ g0p1_regs_map2 [2 ], g0p1_regs_map2 [3 ]), \
129+ .owner = GDMA_RETENTION_ENTRY
130+ }, \
131+ };
132+
133+ /* AHB_DMA Channel (Group0, Pair2) Registers Context
134+ Include: AHB_DMA_MISC_CONF_REG
135+ AHB_DMA_IN_INT_ENA_CH2_REG / AHB_DMA_OUT_INT_ENA_CH2_REG
136+
137+ AHB_DMA_IN_CONF0_CH2_REG / AHB_DMA_IN_CONF1_CH2_REG
138+ AHB_DMA_IN_LINK_CH2_REG / AHB_DMA_IN_LINK_ADDR_CH2_REG
139+ AHB_DMA_IN_PRI_CH2_REG / AHB_DMA_IN_PERI_SEL_CH2_REG
140+ AHB_DMA_RX_CH_ARB_WEIGH_CH2_REG / AHB_DMA_RX_ARB_WEIGH_OPT_DIR_CH2_REG
141+ AHB_DMA_OUT_CONF0_CH2_REG / AHB_DMA_OUT_CONF1_CH2_REG
142+ AHB_DMA_OUT_LINK_CH2_REG / AHB_DMA_OUT_LINK_ADDR_CH2_REG
143+ AHB_DMA_OUT_PRI_CH2_REG / AHB_DMA_OUT_PERI_SEL_CH2_REG
144+ AHB_DMA_TX_CH_ARB_WEIGH_CH2_REG / AHB_DMA_TX_ARB_WEIGH_OPT_DIR_CH2_REG
145+
146+ AHB_DMA_INTR_MEM_START_ADDR_REG / AHB_DMA_INTR_MEM_END_ADDR_REG
147+ AHB_DMA_ARB_TIMEOUT_REG / AHB_DMA_WEIGHT_EN_REG
148+ */
149+ #define G0P2_RETENTION_REGS_CNT_0 3
150+ #define G0P2_RETENTION_MAP_BASE_0 (DR_REG_AHB_DMA_BASE + 0x28)
151+ #define G0P2_RETENTION_REGS_CNT_1 16
152+ #define G0P2_RETENTION_MAP_BASE_1 (DR_REG_AHB_DMA_BASE + 0x300)
153+ #define G0P2_RETENTION_REGS_CNT_2 4
154+ #define G0P2_RETENTION_MAP_BASE_2 (DR_REG_AHB_DMA_BASE + 0x600)
155+ static const uint32_t g0p2_regs_map0 [4 ] = {0x80100001 , 0x8 , 0x0 , 0x0 };
156+ static const uint32_t g0p2_regs_map1 [4 ] = {0x1e033 , 0x1e033 , 0x0 , 0x0 };
157+ static const uint32_t g0p2_regs_map2 [4 ] = {0x17 , 0x0 , 0x0 , 0x0 };
158+ static const regdma_entries_config_t gdma_g0p2_regs_retention [] = {
159+ [0 ] = {
160+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
161+ G0P2_RETENTION_MAP_BASE_0 , G0P2_RETENTION_MAP_BASE_0 , \
162+ G0P2_RETENTION_REGS_CNT_0 , 0 , 0 , \
163+ g0p2_regs_map0 [0 ], g0p2_regs_map0 [1 ], \
164+ g0p2_regs_map0 [2 ], g0p2_regs_map0 [3 ]), \
165+ .owner = GDMA_RETENTION_ENTRY
166+ }, \
167+ [1 ] = {
168+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
169+ G0P2_RETENTION_MAP_BASE_1 , G0P2_RETENTION_MAP_BASE_1 , \
170+ G0P2_RETENTION_REGS_CNT_1 , 0 , 0 , \
171+ g0p2_regs_map1 [0 ], g0p2_regs_map1 [1 ], \
172+ g0p2_regs_map1 [2 ], g0p2_regs_map1 [3 ]), \
173+ .owner = GDMA_RETENTION_ENTRY
174+ }, \
175+ [2 ] = {
176+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
177+ G0P2_RETENTION_MAP_BASE_2 , G0P2_RETENTION_MAP_BASE_2 , \
178+ G0P2_RETENTION_REGS_CNT_2 , 0 , 0 , \
179+ g0p2_regs_map2 [0 ], g0p2_regs_map2 [1 ], \
180+ g0p2_regs_map2 [2 ], g0p2_regs_map2 [3 ]), \
181+ .owner = GDMA_RETENTION_ENTRY
182+ }, \
183+ };
184+
185+ /* AHB_DMA Channel (Group0, Pair3) Registers Context
186+ Include: AHB_DMA_MISC_CONF_REG
187+ AHB_DMA_IN_INT_ENA_CH3_REG / AHB_DMA_OUT_INT_ENA_CH3_REG
188+
189+ AHB_DMA_IN_CONF0_CH3_REG / AHB_DMA_IN_CONF1_CH3_REG
190+ AHB_DMA_IN_LINK_CH3_REG / AHB_DMA_IN_LINK_ADDR_CH3_REG
191+ AHB_DMA_IN_PRI_CH3_REG / AHB_DMA_IN_PERI_SEL_CH3_REG
192+ AHB_DMA_RX_CH_ARB_WEIGH_CH3_REG / AHB_DMA_RX_ARB_WEIGH_OPT_DIR_CH3_REG
193+ AHB_DMA_OUT_CONF0_CH3_REG / AHB_DMA_OUT_CONF1_CH3_REG
194+ AHB_DMA_OUT_LINK_CH3_REG / AHB_DMA_OUT_LINK_ADDR_CH3_REG
195+ AHB_DMA_OUT_PRI_CH3_REG / AHB_DMA_OUT_PERI_SEL_CH3_REG
196+ AHB_DMA_TX_CH_ARB_WEIGH_CH3_REG / AHB_DMA_TX_ARB_WEIGH_OPT_DIR_CH3_REG
197+
198+ AHB_DMA_INTR_MEM_START_ADDR_REG / AHB_DMA_INTR_MEM_END_ADDR_REG
199+ AHB_DMA_ARB_TIMEOUT_REG / AHB_DMA_WEIGHT_EN_REG
200+ */
201+ #define G0P3_RETENTION_REGS_CNT_0 3
202+ #define G0P3_RETENTION_MAP_BASE_0 (DR_REG_AHB_DMA_BASE + 0x38)
203+ #define G0P3_RETENTION_REGS_CNT_1 16
204+ #define G0P3_RETENTION_MAP_BASE_1 (DR_REG_AHB_DMA_BASE + 0x400)
205+ #define G0P3_RETENTION_REGS_CNT_2 4
206+ #define G0P3_RETENTION_MAP_BASE_2 (DR_REG_AHB_DMA_BASE + 0x600)
207+ static const uint32_t g0p3_regs_map0 [4 ] = {0x8100001 , 0x8 , 0x0 , 0x0 };
208+ static const uint32_t g0p3_regs_map1 [4 ] = {0x1e033 , 0x1e033 , 0x0 , 0x0 };
209+ static const uint32_t g0p3_regs_map2 [4 ] = {0x17 , 0x0 , 0x0 , 0x0 };
210+ static const regdma_entries_config_t gdma_g0p3_regs_retention [] = {
211+ [0 ] = {
212+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
213+ G0P3_RETENTION_MAP_BASE_0 , G0P3_RETENTION_MAP_BASE_0 , \
214+ G0P3_RETENTION_REGS_CNT_0 , 0 , 0 , \
215+ g0p3_regs_map0 [0 ], g0p3_regs_map0 [1 ], \
216+ g0p3_regs_map0 [2 ], g0p3_regs_map0 [3 ]), \
217+ .owner = GDMA_RETENTION_ENTRY
218+ }, \
219+ [1 ] = {
220+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
221+ G0P3_RETENTION_MAP_BASE_1 , G0P3_RETENTION_MAP_BASE_1 , \
222+ G0P3_RETENTION_REGS_CNT_1 , 0 , 0 , \
223+ g0p3_regs_map1 [0 ], g0p3_regs_map1 [1 ], \
224+ g0p3_regs_map1 [2 ], g0p3_regs_map1 [3 ]), \
225+ .owner = GDMA_RETENTION_ENTRY
226+ }, \
227+ [2 ] = {
228+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
229+ G0P3_RETENTION_MAP_BASE_2 , G0P3_RETENTION_MAP_BASE_2 , \
230+ G0P3_RETENTION_REGS_CNT_2 , 0 , 0 , \
231+ g0p3_regs_map2 [0 ], g0p3_regs_map2 [1 ], \
232+ g0p3_regs_map2 [2 ], g0p3_regs_map2 [3 ]), \
233+ .owner = GDMA_RETENTION_ENTRY
234+ }, \
235+ };
236+
237+ /* AHB_DMA Channel (Group0, Pair4) Registers Context
238+ Include: AHB_DMA_MISC_CONF_REG
239+ AHB_DMA_IN_INT_ENA_CH4_REG / AHB_DMA_OUT_INT_ENA_CH4_REG
240+
241+ AHB_DMA_IN_CONF0_CH4_REG / AHB_DMA_IN_CONF1_CH4_REG
242+ AHB_DMA_IN_LINK_CH4_REG / AHB_DMA_IN_LINK_ADDR_CH4_REG
243+ AHB_DMA_IN_PRI_CH4_REG / AHB_DMA_IN_PERI_SEL_CH4_REG
244+ AHB_DMA_RX_CH_ARB_WEIGH_CH4_REG / AHB_DMA_RX_ARB_WEIGH_OPT_DIR_CH4_REG
245+ AHB_DMA_OUT_CONF0_CH4_REG / AHB_DMA_OUT_CONF1_CH4_REG
246+ AHB_DMA_OUT_LINK_CH4_REG / AHB_DMA_OUT_LINK_ADDR_CH4_REG
247+ AHB_DMA_OUT_PRI_CH4_REG / AHB_DMA_OUT_PERI_SEL_CH4_REG
248+ AHB_DMA_TX_CH_ARB_WEIGH_CH4_REG / AHB_DMA_TX_ARB_WEIGH_OPT_DIR_CH4_REG
249+ AHB_DMA_INTR_MEM_START_ADDR_REG / AHB_DMA_INTR_MEM_END_ADDR_REG
250+ AHB_DMA_ARB_TIMEOUT_REG / AHB_DMA_WEIGHT_EN_REG
251+ */
252+ #define G0P4_RETENTION_REGS_CNT_0 3
253+ #define G0P4_RETENTION_MAP_BASE_0 (DR_REG_AHB_DMA_BASE + 0x48)
254+ #define G0P4_RETENTION_REGS_CNT_1 20
255+ #define G0P4_RETENTION_MAP_BASE_1 (DR_REG_AHB_DMA_BASE + 0x500)
256+ static const uint32_t g0p4_regs_map0 [4 ] = {0x900001 , 0x8 , 0x0 , 0x0 };
257+ static const uint32_t g0p4_regs_map1 [4 ] = {0x1e033 , 0x1e033 , 0x17 , 0x0 };
258+ static const regdma_entries_config_t gdma_g0p4_regs_retention [] = {
259+ [0 ] = {
260+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
261+ G0P4_RETENTION_MAP_BASE_0 , G0P4_RETENTION_MAP_BASE_0 , \
262+ G0P4_RETENTION_REGS_CNT_0 , 0 , 0 , \
263+ g0p4_regs_map0 [0 ], g0p4_regs_map0 [1 ], \
264+ g0p4_regs_map0 [2 ], g0p4_regs_map0 [3 ]), \
265+ .owner = GDMA_RETENTION_ENTRY
266+ }, \
267+ [1 ] = {
268+ .config = REGDMA_LINK_ADDR_MAP_INIT (REGDMA_AHB_DMA_LINK (0x00 ), \
269+ G0P4_RETENTION_MAP_BASE_1 , G0P4_RETENTION_MAP_BASE_1 , \
270+ G0P4_RETENTION_REGS_CNT_1 , 0 , 0 , \
271+ g0p4_regs_map1 [0 ], g0p4_regs_map1 [1 ], \
272+ g0p4_regs_map1 [2 ], g0p4_regs_map1 [3 ]), \
273+ .owner = GDMA_RETENTION_ENTRY
274+ }, \
275+ };
276+
277+ const gdma_chx_reg_ctx_link_t gdma_chx_regs_retention [SOC_GDMA_NUM_GROUPS_MAX ][SOC_GDMA_PAIRS_PER_GROUP_MAX ] = {
278+ [0 ] = {
279+ [0 ] = {
280+ gdma_g0p0_regs_retention ,
281+ ARRAY_SIZE (gdma_g0p0_regs_retention ),
282+ SLEEP_RETENTION_MODULE_GDMA_CH0 ,
283+ },
284+ [1 ] = {
285+ gdma_g0p1_regs_retention ,
286+ ARRAY_SIZE (gdma_g0p1_regs_retention ),
287+ SLEEP_RETENTION_MODULE_GDMA_CH1 ,
288+ },
289+ [2 ] = {
290+ gdma_g0p2_regs_retention ,
291+ ARRAY_SIZE (gdma_g0p2_regs_retention ),
292+ SLEEP_RETENTION_MODULE_GDMA_CH2 ,
293+ },
294+ [3 ] = {
295+ gdma_g0p3_regs_retention ,
296+ ARRAY_SIZE (gdma_g0p3_regs_retention ),
297+ SLEEP_RETENTION_MODULE_GDMA_CH3 ,
298+ },
299+ [4 ] = {
300+ gdma_g0p4_regs_retention ,
301+ ARRAY_SIZE (gdma_g0p4_regs_retention ),
302+ SLEEP_RETENTION_MODULE_GDMA_CH4 ,
303+ },
304+ }
305+ };
306+ #endif // SOC_PAU_SUPPORTED && SOC_GDMA_SUPPORT_SLEEP_RETENTION
0 commit comments