xref: /rk3399_ARM-atf/plat/st/stm32mp2/stm32mp2_private.c (revision db77f8bf227b1ffc6b282408aeccc4737cb1fc78)
1 /*
2  * Copyright (c) 2023-2024, STMicroelectronics - All Rights Reserved
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <assert.h>
8 
9 #include <lib/xlat_tables/xlat_tables_v2.h>
10 
11 #include <platform_def.h>
12 
13 #define BKPR_BOOT_MODE	96U
14 
15 #define MAP_SYSRAM	MAP_REGION_FLAT(STM32MP_SYSRAM_BASE, \
16 					STM32MP_SYSRAM_SIZE, \
17 					MT_MEMORY | \
18 					MT_RW | \
19 					MT_SECURE | \
20 					MT_EXECUTE_NEVER)
21 
22 #define MAP_DEVICE	MAP_REGION_FLAT(STM32MP_DEVICE_BASE, \
23 					STM32MP_DEVICE_SIZE, \
24 					MT_DEVICE | \
25 					MT_RW | \
26 					MT_SECURE | \
27 					MT_EXECUTE_NEVER)
28 
29 #if defined(IMAGE_BL2)
30 static const mmap_region_t stm32mp2_mmap[] = {
31 	MAP_SYSRAM,
32 	MAP_DEVICE,
33 	{0}
34 };
35 #endif
36 
37 void configure_mmu(void)
38 {
39 	mmap_add(stm32mp2_mmap);
40 	init_xlat_tables();
41 
42 	enable_mmu_el3(0);
43 }
44 
45 uintptr_t stm32_get_gpio_bank_base(unsigned int bank)
46 {
47 	if (bank == GPIO_BANK_Z) {
48 		return GPIOZ_BASE;
49 	}
50 
51 	assert(bank <= GPIO_BANK_K);
52 
53 	return GPIOA_BASE + (bank * GPIO_BANK_OFFSET);
54 }
55 
56 uint32_t stm32_get_gpio_bank_offset(unsigned int bank)
57 {
58 	if (bank == GPIO_BANK_Z) {
59 		return 0;
60 	}
61 
62 	assert(bank <= GPIO_BANK_K);
63 
64 	return bank * GPIO_BANK_OFFSET;
65 }
66 
67 unsigned long stm32_get_gpio_bank_clock(unsigned int bank)
68 {
69 	if (bank == GPIO_BANK_Z) {
70 		return CK_BUS_GPIOZ;
71 	}
72 
73 	assert(bank <= GPIO_BANK_K);
74 
75 	return CK_BUS_GPIOA + (bank - GPIO_BANK_A);
76 }
77 
78 uintptr_t stm32_get_bkpr_boot_mode_addr(void)
79 {
80 	return tamp_bkpr(BKPR_BOOT_MODE);
81 }
82