xref: /rk3399_ARM-atf/plat/st/stm32mp2/stm32mp2_private.c (revision c8e1a2d9d27d4f7e3a919b7994e82f2a886f3e6a)
1db77f8bfSYann Gautier /*
2399cfdd4SNicolas Le Bayon  * Copyright (c) 2023-2025, STMicroelectronics - All Rights Reserved
3db77f8bfSYann Gautier  *
4db77f8bfSYann Gautier  * SPDX-License-Identifier: BSD-3-Clause
5db77f8bfSYann Gautier  */
6db77f8bfSYann Gautier 
7db77f8bfSYann Gautier #include <assert.h>
8399cfdd4SNicolas Le Bayon #include <errno.h>
9db77f8bfSYann Gautier 
10db77f8bfSYann Gautier #include <lib/xlat_tables/xlat_tables_v2.h>
11db77f8bfSYann Gautier 
12db77f8bfSYann Gautier #include <platform_def.h>
13db77f8bfSYann Gautier 
14c28c0ca2SYann Gautier #define BKPR_FWU_INFO	48U
15db77f8bfSYann Gautier #define BKPR_BOOT_MODE	96U
16db77f8bfSYann Gautier 
1703020b66SYann Gautier #if defined(IMAGE_BL31)
1803020b66SYann Gautier /* BL31 only uses the first half of the SYSRAM */
1903020b66SYann Gautier #define MAP_SYSRAM	MAP_REGION_FLAT(STM32MP_SYSRAM_BASE, \
2003020b66SYann Gautier 					STM32MP_SYSRAM_SIZE / 2U, \
2103020b66SYann Gautier 					MT_MEMORY | \
2203020b66SYann Gautier 					MT_RW | \
2303020b66SYann Gautier 					MT_SECURE | \
2403020b66SYann Gautier 					MT_EXECUTE_NEVER)
2503020b66SYann Gautier #else
26db77f8bfSYann Gautier #define MAP_SYSRAM	MAP_REGION_FLAT(STM32MP_SYSRAM_BASE, \
27db77f8bfSYann Gautier 					STM32MP_SYSRAM_SIZE, \
28db77f8bfSYann Gautier 					MT_MEMORY | \
29db77f8bfSYann Gautier 					MT_RW | \
30db77f8bfSYann Gautier 					MT_SECURE | \
31db77f8bfSYann Gautier 					MT_EXECUTE_NEVER)
3203020b66SYann Gautier #endif
33db77f8bfSYann Gautier 
34*6d1366e5SPatrick Delaunay #if STM32MP_USB_PROGRAMMER
35*6d1366e5SPatrick Delaunay #define MAP_SYSRAM_MEM	MAP_REGION_FLAT(STM32MP_SYSRAM_MEM_BASE, \
36*6d1366e5SPatrick Delaunay 					STM32MP_SYSRAM_MEM_SIZE, \
37*6d1366e5SPatrick Delaunay 					MT_MEMORY | \
38*6d1366e5SPatrick Delaunay 					MT_RW | \
39*6d1366e5SPatrick Delaunay 					MT_SECURE | \
40*6d1366e5SPatrick Delaunay 					MT_EXECUTE_NEVER)
41*6d1366e5SPatrick Delaunay 
42*6d1366e5SPatrick Delaunay #define MAP_SYSRAM_DEV	MAP_REGION_FLAT(STM32MP_SYSRAM_DEVICE_BASE, \
43*6d1366e5SPatrick Delaunay 					STM32MP_SYSRAM_DEVICE_SIZE, \
44*6d1366e5SPatrick Delaunay 					MT_DEVICE | \
45*6d1366e5SPatrick Delaunay 					MT_RW | \
46*6d1366e5SPatrick Delaunay 					MT_SECURE | \
47*6d1366e5SPatrick Delaunay 					MT_EXECUTE_NEVER)
48*6d1366e5SPatrick Delaunay #endif
49*6d1366e5SPatrick Delaunay 
50ae84525fSMaxime Méré #if STM32MP_DDR_FIP_IO_STORAGE
51ae84525fSMaxime Méré #define MAP_SRAM1	MAP_REGION_FLAT(SRAM1_BASE, \
52ae84525fSMaxime Méré 					SRAM1_SIZE_FOR_TFA, \
53ae84525fSMaxime Méré 					MT_MEMORY | \
54ae84525fSMaxime Méré 					MT_RW | \
55ae84525fSMaxime Méré 					MT_SECURE | \
56ae84525fSMaxime Méré 					MT_EXECUTE_NEVER)
57ae84525fSMaxime Méré #endif
58ae84525fSMaxime Méré 
59db77f8bfSYann Gautier #define MAP_DEVICE	MAP_REGION_FLAT(STM32MP_DEVICE_BASE, \
60db77f8bfSYann Gautier 					STM32MP_DEVICE_SIZE, \
61db77f8bfSYann Gautier 					MT_DEVICE | \
62db77f8bfSYann Gautier 					MT_RW | \
63db77f8bfSYann Gautier 					MT_SECURE | \
64db77f8bfSYann Gautier 					MT_EXECUTE_NEVER)
65db77f8bfSYann Gautier 
66db77f8bfSYann Gautier #if defined(IMAGE_BL2)
67db77f8bfSYann Gautier static const mmap_region_t stm32mp2_mmap[] = {
68*6d1366e5SPatrick Delaunay #if STM32MP_USB_PROGRAMMER
69*6d1366e5SPatrick Delaunay 	MAP_SYSRAM_MEM,
70*6d1366e5SPatrick Delaunay 	MAP_SYSRAM_DEV,
71*6d1366e5SPatrick Delaunay #else
72db77f8bfSYann Gautier 	MAP_SYSRAM,
73*6d1366e5SPatrick Delaunay #endif
74ae84525fSMaxime Méré #if STM32MP_DDR_FIP_IO_STORAGE
75ae84525fSMaxime Méré 	MAP_SRAM1,
76ae84525fSMaxime Méré #endif
77db77f8bfSYann Gautier 	MAP_DEVICE,
78db77f8bfSYann Gautier 	{0}
79db77f8bfSYann Gautier };
80db77f8bfSYann Gautier #endif
8103020b66SYann Gautier #if defined(IMAGE_BL31)
8203020b66SYann Gautier static const mmap_region_t stm32mp2_mmap[] = {
8303020b66SYann Gautier 	MAP_SYSRAM,
8403020b66SYann Gautier 	MAP_DEVICE,
8503020b66SYann Gautier 	{0}
8603020b66SYann Gautier };
8703020b66SYann Gautier #endif
88db77f8bfSYann Gautier 
configure_mmu(void)89db77f8bfSYann Gautier void configure_mmu(void)
90db77f8bfSYann Gautier {
91db77f8bfSYann Gautier 	mmap_add(stm32mp2_mmap);
92db77f8bfSYann Gautier 	init_xlat_tables();
93db77f8bfSYann Gautier 
94db77f8bfSYann Gautier 	enable_mmu_el3(0);
95db77f8bfSYann Gautier }
96db77f8bfSYann Gautier 
stm32mp_map_retram(void)9752f530d3SMaxime Méré int stm32mp_map_retram(void)
9852f530d3SMaxime Méré {
9952f530d3SMaxime Méré 	return  mmap_add_dynamic_region(RETRAM_BASE, RETRAM_BASE,
10052f530d3SMaxime Méré 					RETRAM_SIZE,
10152f530d3SMaxime Méré 					MT_RW | MT_SECURE);
10252f530d3SMaxime Méré }
10352f530d3SMaxime Méré 
stm32mp_unmap_retram(void)10452f530d3SMaxime Méré int stm32mp_unmap_retram(void)
10552f530d3SMaxime Méré {
10652f530d3SMaxime Méré 	return  mmap_remove_dynamic_region(RETRAM_BASE,
10752f530d3SMaxime Méré 					   RETRAM_SIZE);
10852f530d3SMaxime Méré }
10952f530d3SMaxime Méré 
stm32_get_gpio_bank_base(unsigned int bank)110db77f8bfSYann Gautier uintptr_t stm32_get_gpio_bank_base(unsigned int bank)
111db77f8bfSYann Gautier {
112db77f8bfSYann Gautier 	if (bank == GPIO_BANK_Z) {
113db77f8bfSYann Gautier 		return GPIOZ_BASE;
114db77f8bfSYann Gautier 	}
115db77f8bfSYann Gautier 
116db77f8bfSYann Gautier 	assert(bank <= GPIO_BANK_K);
117db77f8bfSYann Gautier 
118db77f8bfSYann Gautier 	return GPIOA_BASE + (bank * GPIO_BANK_OFFSET);
119db77f8bfSYann Gautier }
120db77f8bfSYann Gautier 
stm32_get_gpio_bank_offset(unsigned int bank)121db77f8bfSYann Gautier uint32_t stm32_get_gpio_bank_offset(unsigned int bank)
122db77f8bfSYann Gautier {
123db77f8bfSYann Gautier 	if (bank == GPIO_BANK_Z) {
124db77f8bfSYann Gautier 		return 0;
125db77f8bfSYann Gautier 	}
126db77f8bfSYann Gautier 
127db77f8bfSYann Gautier 	assert(bank <= GPIO_BANK_K);
128db77f8bfSYann Gautier 
129db77f8bfSYann Gautier 	return bank * GPIO_BANK_OFFSET;
130db77f8bfSYann Gautier }
131db77f8bfSYann Gautier 
stm32_get_gpio_bank_clock(unsigned int bank)132db77f8bfSYann Gautier unsigned long stm32_get_gpio_bank_clock(unsigned int bank)
133db77f8bfSYann Gautier {
134db77f8bfSYann Gautier 	if (bank == GPIO_BANK_Z) {
135db77f8bfSYann Gautier 		return CK_BUS_GPIOZ;
136db77f8bfSYann Gautier 	}
137db77f8bfSYann Gautier 
138db77f8bfSYann Gautier 	assert(bank <= GPIO_BANK_K);
139db77f8bfSYann Gautier 
140db77f8bfSYann Gautier 	return CK_BUS_GPIOA + (bank - GPIO_BANK_A);
141db77f8bfSYann Gautier }
142db77f8bfSYann Gautier 
14327dd11dbSMaxime Méré #if STM32MP_UART_PROGRAMMER || !defined(IMAGE_BL2)
14427dd11dbSMaxime Méré /*
14527dd11dbSMaxime Méré  * UART Management
14627dd11dbSMaxime Méré  */
14727dd11dbSMaxime Méré static const uintptr_t stm32mp2_uart_addresses[STM32MP_NB_OF_UART] = {
14827dd11dbSMaxime Méré 	USART1_BASE,
14927dd11dbSMaxime Méré 	USART2_BASE,
15027dd11dbSMaxime Méré 	USART3_BASE,
15127dd11dbSMaxime Méré 	UART4_BASE,
15227dd11dbSMaxime Méré 	UART5_BASE,
15327dd11dbSMaxime Méré 	USART6_BASE,
15427dd11dbSMaxime Méré 	UART7_BASE,
15527dd11dbSMaxime Méré 	UART8_BASE,
15627dd11dbSMaxime Méré 	UART9_BASE,
15727dd11dbSMaxime Méré };
15827dd11dbSMaxime Méré 
get_uart_address(uint32_t instance_nb)15927dd11dbSMaxime Méré uintptr_t get_uart_address(uint32_t instance_nb)
16027dd11dbSMaxime Méré {
16127dd11dbSMaxime Méré 	if ((instance_nb == 0U) ||
16227dd11dbSMaxime Méré 	    (instance_nb > STM32MP_NB_OF_UART)) {
16327dd11dbSMaxime Méré 		return 0U;
16427dd11dbSMaxime Méré 	}
16527dd11dbSMaxime Méré 
16627dd11dbSMaxime Méré 	return stm32mp2_uart_addresses[instance_nb - 1U];
16727dd11dbSMaxime Méré }
16827dd11dbSMaxime Méré #endif
16927dd11dbSMaxime Méré 
stm32mp_get_chip_version(void)170381b2a6bSYann Gautier uint32_t stm32mp_get_chip_version(void)
171381b2a6bSYann Gautier {
172381b2a6bSYann Gautier 	static uint32_t rev;
173381b2a6bSYann Gautier 
174381b2a6bSYann Gautier 	if (rev != 0U) {
175381b2a6bSYann Gautier 		return rev;
176381b2a6bSYann Gautier 	}
177381b2a6bSYann Gautier 
178381b2a6bSYann Gautier 	if (stm32_get_otp_value(REVISION_OTP, &rev) != 0) {
179381b2a6bSYann Gautier 		panic();
180381b2a6bSYann Gautier 	}
181381b2a6bSYann Gautier 
182381b2a6bSYann Gautier 	return rev;
183381b2a6bSYann Gautier }
184381b2a6bSYann Gautier 
stm32mp_get_chip_dev_id(void)185381b2a6bSYann Gautier uint32_t stm32mp_get_chip_dev_id(void)
186381b2a6bSYann Gautier {
187381b2a6bSYann Gautier 	return stm32mp_syscfg_get_chip_dev_id();
188381b2a6bSYann Gautier }
189381b2a6bSYann Gautier 
get_part_number(void)190381b2a6bSYann Gautier static uint32_t get_part_number(void)
191381b2a6bSYann Gautier {
192381b2a6bSYann Gautier 	static uint32_t part_number;
193381b2a6bSYann Gautier 
194381b2a6bSYann Gautier 	if (part_number != 0U) {
195381b2a6bSYann Gautier 		return part_number;
196381b2a6bSYann Gautier 	}
197381b2a6bSYann Gautier 
198381b2a6bSYann Gautier 	if (stm32_get_otp_value(PART_NUMBER_OTP, &part_number) != 0) {
199381b2a6bSYann Gautier 		panic();
200381b2a6bSYann Gautier 	}
201381b2a6bSYann Gautier 
202381b2a6bSYann Gautier 	return part_number;
203381b2a6bSYann Gautier }
204381b2a6bSYann Gautier 
get_cpu_package(void)205381b2a6bSYann Gautier static uint32_t get_cpu_package(void)
206381b2a6bSYann Gautier {
207381b2a6bSYann Gautier 	static uint32_t package = UINT32_MAX;
208381b2a6bSYann Gautier 
209381b2a6bSYann Gautier 	if (package == UINT32_MAX) {
210381b2a6bSYann Gautier 		if (stm32_get_otp_value(PACKAGE_OTP, &package) != 0) {
211381b2a6bSYann Gautier 			panic();
212381b2a6bSYann Gautier 		}
213381b2a6bSYann Gautier 	}
214381b2a6bSYann Gautier 
215381b2a6bSYann Gautier 	return (package & PACKAGE_OTP_PKG_MASK) >> PACKAGE_OTP_PKG_SHIFT;
216381b2a6bSYann Gautier }
217381b2a6bSYann Gautier 
stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])218381b2a6bSYann Gautier void stm32mp_get_soc_name(char name[STM32_SOC_NAME_SIZE])
219381b2a6bSYann Gautier {
220381b2a6bSYann Gautier 	char *cpu_s, *cpu_r, *pkg;
221381b2a6bSYann Gautier 
222381b2a6bSYann Gautier 	/* MPUs Part Numbers */
223381b2a6bSYann Gautier 	switch (get_part_number()) {
224381b2a6bSYann Gautier 	case STM32MP251A_PART_NB:
225381b2a6bSYann Gautier 		cpu_s = "251A";
226381b2a6bSYann Gautier 		break;
227381b2a6bSYann Gautier 	case STM32MP251C_PART_NB:
228381b2a6bSYann Gautier 		cpu_s = "251C";
229381b2a6bSYann Gautier 		break;
230381b2a6bSYann Gautier 	case STM32MP251D_PART_NB:
231381b2a6bSYann Gautier 		cpu_s = "251D";
232381b2a6bSYann Gautier 		break;
233381b2a6bSYann Gautier 	case STM32MP251F_PART_NB:
234381b2a6bSYann Gautier 		cpu_s = "251F";
235381b2a6bSYann Gautier 		break;
236381b2a6bSYann Gautier 	case STM32MP253A_PART_NB:
237381b2a6bSYann Gautier 		cpu_s = "253A";
238381b2a6bSYann Gautier 		break;
239381b2a6bSYann Gautier 	case STM32MP253C_PART_NB:
240381b2a6bSYann Gautier 		cpu_s = "253C";
241381b2a6bSYann Gautier 		break;
242381b2a6bSYann Gautier 	case STM32MP253D_PART_NB:
243381b2a6bSYann Gautier 		cpu_s = "253D";
244381b2a6bSYann Gautier 		break;
245381b2a6bSYann Gautier 	case STM32MP253F_PART_NB:
246381b2a6bSYann Gautier 		cpu_s = "253F";
247381b2a6bSYann Gautier 		break;
248381b2a6bSYann Gautier 	case STM32MP255A_PART_NB:
249381b2a6bSYann Gautier 		cpu_s = "255A";
250381b2a6bSYann Gautier 		break;
251381b2a6bSYann Gautier 	case STM32MP255C_PART_NB:
252381b2a6bSYann Gautier 		cpu_s = "255C";
253381b2a6bSYann Gautier 		break;
254381b2a6bSYann Gautier 	case STM32MP255D_PART_NB:
255381b2a6bSYann Gautier 		cpu_s = "255D";
256381b2a6bSYann Gautier 		break;
257381b2a6bSYann Gautier 	case STM32MP255F_PART_NB:
258381b2a6bSYann Gautier 		cpu_s = "255F";
259381b2a6bSYann Gautier 		break;
260381b2a6bSYann Gautier 	case STM32MP257A_PART_NB:
261381b2a6bSYann Gautier 		cpu_s = "257A";
262381b2a6bSYann Gautier 		break;
263381b2a6bSYann Gautier 	case STM32MP257C_PART_NB:
264381b2a6bSYann Gautier 		cpu_s = "257C";
265381b2a6bSYann Gautier 		break;
266381b2a6bSYann Gautier 	case STM32MP257D_PART_NB:
267381b2a6bSYann Gautier 		cpu_s = "257D";
268381b2a6bSYann Gautier 		break;
269381b2a6bSYann Gautier 	case STM32MP257F_PART_NB:
270381b2a6bSYann Gautier 		cpu_s = "257F";
271381b2a6bSYann Gautier 		break;
272381b2a6bSYann Gautier 	default:
273381b2a6bSYann Gautier 		cpu_s = "????";
274381b2a6bSYann Gautier 		break;
275381b2a6bSYann Gautier 	}
276381b2a6bSYann Gautier 
277381b2a6bSYann Gautier 	/* Package */
278381b2a6bSYann Gautier 	switch (get_cpu_package()) {
279381b2a6bSYann Gautier 	case STM32MP25_PKG_CUSTOM:
280381b2a6bSYann Gautier 		pkg = "XX";
281381b2a6bSYann Gautier 		break;
282381b2a6bSYann Gautier 	case STM32MP25_PKG_AL_VFBGA361:
283381b2a6bSYann Gautier 		pkg = "AL";
284381b2a6bSYann Gautier 		break;
285381b2a6bSYann Gautier 	case STM32MP25_PKG_AK_VFBGA424:
286381b2a6bSYann Gautier 		pkg = "AK";
287381b2a6bSYann Gautier 		break;
288381b2a6bSYann Gautier 	case STM32MP25_PKG_AI_TFBGA436:
289381b2a6bSYann Gautier 		pkg = "AI";
290381b2a6bSYann Gautier 		break;
291381b2a6bSYann Gautier 	default:
292381b2a6bSYann Gautier 		pkg = "??";
293381b2a6bSYann Gautier 		break;
294381b2a6bSYann Gautier 	}
295381b2a6bSYann Gautier 
296381b2a6bSYann Gautier 	/* REVISION */
297381b2a6bSYann Gautier 	switch (stm32mp_get_chip_version()) {
298381b2a6bSYann Gautier 	case STM32MP2_REV_A:
299381b2a6bSYann Gautier 		cpu_r = "A";
300381b2a6bSYann Gautier 		break;
301381b2a6bSYann Gautier 	case STM32MP2_REV_B:
302381b2a6bSYann Gautier 		cpu_r = "B";
303381b2a6bSYann Gautier 		break;
304381b2a6bSYann Gautier 	case STM32MP2_REV_X:
305381b2a6bSYann Gautier 		cpu_r = "X";
306381b2a6bSYann Gautier 		break;
307381b2a6bSYann Gautier 	case STM32MP2_REV_Y:
308381b2a6bSYann Gautier 		cpu_r = "Y";
309381b2a6bSYann Gautier 		break;
310381b2a6bSYann Gautier 	case STM32MP2_REV_Z:
311381b2a6bSYann Gautier 		cpu_r = "Z";
312381b2a6bSYann Gautier 		break;
313381b2a6bSYann Gautier 	default:
314381b2a6bSYann Gautier 		cpu_r = "?";
315381b2a6bSYann Gautier 		break;
316381b2a6bSYann Gautier 	}
317381b2a6bSYann Gautier 
318381b2a6bSYann Gautier 	snprintf(name, STM32_SOC_NAME_SIZE,
319381b2a6bSYann Gautier 		 "STM32MP%s%s Rev.%s", cpu_s, pkg, cpu_r);
320381b2a6bSYann Gautier }
321381b2a6bSYann Gautier 
stm32mp_print_cpuinfo(void)322381b2a6bSYann Gautier void stm32mp_print_cpuinfo(void)
323381b2a6bSYann Gautier {
324381b2a6bSYann Gautier 	char name[STM32_SOC_NAME_SIZE];
325381b2a6bSYann Gautier 
326381b2a6bSYann Gautier 	stm32mp_get_soc_name(name);
327381b2a6bSYann Gautier 	NOTICE("CPU: %s\n", name);
328381b2a6bSYann Gautier }
329381b2a6bSYann Gautier 
stm32mp_print_boardinfo(void)330cdaced36SYann Gautier void stm32mp_print_boardinfo(void)
331cdaced36SYann Gautier {
332cdaced36SYann Gautier 	uint32_t board_id = 0U;
333cdaced36SYann Gautier 
334cdaced36SYann Gautier 	if (stm32_get_otp_value(BOARD_ID_OTP, &board_id) != 0) {
335cdaced36SYann Gautier 		return;
336cdaced36SYann Gautier 	}
337cdaced36SYann Gautier 
338cdaced36SYann Gautier 	if (board_id != 0U) {
339cdaced36SYann Gautier 		stm32_display_board_info(board_id);
340cdaced36SYann Gautier 	}
341cdaced36SYann Gautier }
342cdaced36SYann Gautier 
3432c831e4bSYann Gautier /* Return true when SoC provides a single Cortex-A35 core, and false otherwise */
stm32mp_is_single_core(void)3442c831e4bSYann Gautier bool stm32mp_is_single_core(void)
3452c831e4bSYann Gautier {
3462c831e4bSYann Gautier 	bool single_core = false;
3472c831e4bSYann Gautier 
3482c831e4bSYann Gautier 	switch (get_part_number()) {
3492c831e4bSYann Gautier 	case STM32MP251A_PART_NB:
3502c831e4bSYann Gautier 	case STM32MP251C_PART_NB:
3512c831e4bSYann Gautier 	case STM32MP251D_PART_NB:
3522c831e4bSYann Gautier 	case STM32MP251F_PART_NB:
3532c831e4bSYann Gautier 		single_core = true;
3542c831e4bSYann Gautier 		break;
3552c831e4bSYann Gautier 	default:
3562c831e4bSYann Gautier 		break;
3572c831e4bSYann Gautier 	}
3582c831e4bSYann Gautier 
3592c831e4bSYann Gautier 	return single_core;
3602c831e4bSYann Gautier }
3612c831e4bSYann Gautier 
3622c831e4bSYann Gautier /* Return true when device is in closed state */
stm32mp_check_closed_device(void)3632c831e4bSYann Gautier uint32_t stm32mp_check_closed_device(void)
3642c831e4bSYann Gautier {
3652c831e4bSYann Gautier 	return STM32MP_CHIP_SEC_OPEN;
3662c831e4bSYann Gautier }
3672c831e4bSYann Gautier 
3682c831e4bSYann Gautier /* Return true when device supports secure boot */
stm32mp_is_auth_supported(void)3692c831e4bSYann Gautier bool stm32mp_is_auth_supported(void)
3702c831e4bSYann Gautier {
3712c831e4bSYann Gautier 	bool supported = false;
3722c831e4bSYann Gautier 
3732c831e4bSYann Gautier 	switch (get_part_number()) {
3742c831e4bSYann Gautier 	case STM32MP251C_PART_NB:
3752c831e4bSYann Gautier 	case STM32MP251F_PART_NB:
3762c831e4bSYann Gautier 	case STM32MP253C_PART_NB:
3772c831e4bSYann Gautier 	case STM32MP253F_PART_NB:
3782c831e4bSYann Gautier 	case STM32MP255C_PART_NB:
3792c831e4bSYann Gautier 	case STM32MP255F_PART_NB:
3802c831e4bSYann Gautier 	case STM32MP257C_PART_NB:
3812c831e4bSYann Gautier 	case STM32MP257F_PART_NB:
3822c831e4bSYann Gautier 		supported = true;
3832c831e4bSYann Gautier 		break;
3842c831e4bSYann Gautier 	default:
3852c831e4bSYann Gautier 		break;
3862c831e4bSYann Gautier 	}
3872c831e4bSYann Gautier 
3882c831e4bSYann Gautier 	return supported;
3892c831e4bSYann Gautier }
3902c831e4bSYann Gautier 
stm32mp_is_wakeup_from_standby(void)39187cd847cSYann Gautier bool stm32mp_is_wakeup_from_standby(void)
39287cd847cSYann Gautier {
39387cd847cSYann Gautier 	/* TODO add source code to determine if platform is waking up from standby mode */
39487cd847cSYann Gautier 	return false;
39587cd847cSYann Gautier }
39687cd847cSYann Gautier 
stm32_risaf_get_instance(uintptr_t base)397399cfdd4SNicolas Le Bayon int stm32_risaf_get_instance(uintptr_t base)
398399cfdd4SNicolas Le Bayon {
399399cfdd4SNicolas Le Bayon 	switch (base) {
400399cfdd4SNicolas Le Bayon 	case RISAF2_BASE:
401399cfdd4SNicolas Le Bayon 		return (int)RISAF2_INST;
402399cfdd4SNicolas Le Bayon 	case RISAF4_BASE:
403399cfdd4SNicolas Le Bayon 		return (int)RISAF4_INST;
404399cfdd4SNicolas Le Bayon 	default:
405399cfdd4SNicolas Le Bayon 		return -ENODEV;
406399cfdd4SNicolas Le Bayon 	}
407399cfdd4SNicolas Le Bayon }
408399cfdd4SNicolas Le Bayon 
stm32_risaf_get_base(int instance)409399cfdd4SNicolas Le Bayon uintptr_t stm32_risaf_get_base(int instance)
410399cfdd4SNicolas Le Bayon {
411399cfdd4SNicolas Le Bayon 	switch (instance) {
412399cfdd4SNicolas Le Bayon 	case RISAF2_INST:
413399cfdd4SNicolas Le Bayon 		return (uintptr_t)RISAF2_BASE;
414399cfdd4SNicolas Le Bayon 	case RISAF4_INST:
415399cfdd4SNicolas Le Bayon 		return (uintptr_t)RISAF4_BASE;
416399cfdd4SNicolas Le Bayon 	default:
417399cfdd4SNicolas Le Bayon 		return 0U;
418399cfdd4SNicolas Le Bayon 	}
419399cfdd4SNicolas Le Bayon }
420399cfdd4SNicolas Le Bayon 
stm32_risaf_get_max_region(int instance)421399cfdd4SNicolas Le Bayon int stm32_risaf_get_max_region(int instance)
422399cfdd4SNicolas Le Bayon {
423399cfdd4SNicolas Le Bayon 	switch (instance) {
424399cfdd4SNicolas Le Bayon 	case RISAF2_INST:
425399cfdd4SNicolas Le Bayon 		return (int)RISAF2_MAX_REGION;
426399cfdd4SNicolas Le Bayon 	case RISAF4_INST:
427399cfdd4SNicolas Le Bayon 		return (int)RISAF4_MAX_REGION;
428399cfdd4SNicolas Le Bayon 	default:
429399cfdd4SNicolas Le Bayon 		return 0;
430399cfdd4SNicolas Le Bayon 	}
431399cfdd4SNicolas Le Bayon }
432399cfdd4SNicolas Le Bayon 
stm32_risaf_get_memory_base(int instance)433399cfdd4SNicolas Le Bayon uintptr_t stm32_risaf_get_memory_base(int instance)
434399cfdd4SNicolas Le Bayon {
435399cfdd4SNicolas Le Bayon 	switch (instance) {
436399cfdd4SNicolas Le Bayon 	case RISAF2_INST:
437399cfdd4SNicolas Le Bayon 		return (uintptr_t)STM32MP_OSPI_MM_BASE;
438399cfdd4SNicolas Le Bayon 	case RISAF4_INST:
439399cfdd4SNicolas Le Bayon 		return (uintptr_t)STM32MP_DDR_BASE;
440399cfdd4SNicolas Le Bayon 	default:
441399cfdd4SNicolas Le Bayon 		return 0U;
442399cfdd4SNicolas Le Bayon 	}
443399cfdd4SNicolas Le Bayon }
444399cfdd4SNicolas Le Bayon 
stm32_risaf_get_memory_size(int instance)445399cfdd4SNicolas Le Bayon size_t stm32_risaf_get_memory_size(int instance)
446399cfdd4SNicolas Le Bayon {
447399cfdd4SNicolas Le Bayon 	switch (instance) {
448399cfdd4SNicolas Le Bayon 	case RISAF2_INST:
449399cfdd4SNicolas Le Bayon 		return STM32MP_OSPI_MM_SIZE;
450399cfdd4SNicolas Le Bayon 	case RISAF4_INST:
451399cfdd4SNicolas Le Bayon 		return dt_get_ddr_size();
452399cfdd4SNicolas Le Bayon 	default:
453399cfdd4SNicolas Le Bayon 		return 0U;
454399cfdd4SNicolas Le Bayon 	}
455399cfdd4SNicolas Le Bayon }
456399cfdd4SNicolas Le Bayon 
stm32_get_bkpr_boot_mode_addr(void)457db77f8bfSYann Gautier uintptr_t stm32_get_bkpr_boot_mode_addr(void)
458db77f8bfSYann Gautier {
459db77f8bfSYann Gautier 	return tamp_bkpr(BKPR_BOOT_MODE);
460db77f8bfSYann Gautier }
4612fd7b230SNicolas Le Bayon 
462c28c0ca2SYann Gautier #if PSA_FWU_SUPPORT
stm32_get_bkpr_fwu_info_addr(void)463c28c0ca2SYann Gautier uintptr_t stm32_get_bkpr_fwu_info_addr(void)
464c28c0ca2SYann Gautier {
465c28c0ca2SYann Gautier 	return tamp_bkpr(BKPR_FWU_INFO);
466c28c0ca2SYann Gautier }
467c28c0ca2SYann Gautier #endif /* PSA_FWU_SUPPORT */
468c28c0ca2SYann Gautier 
stm32_ddrdbg_get_base(void)4692fd7b230SNicolas Le Bayon uintptr_t stm32_ddrdbg_get_base(void)
4702fd7b230SNicolas Le Bayon {
4712fd7b230SNicolas Le Bayon 	return DDRDBG_BASE;
4722fd7b230SNicolas Le Bayon }
473