blob: 199100c29db5991ce1f151fcdb5ae4078a1f3739 [file] [log] [blame]
Yann Gautierdb77f8b2024-05-21 11:46:59 +02001/*
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)
30static const mmap_region_t stm32mp2_mmap[] = {
31 MAP_SYSRAM,
32 MAP_DEVICE,
33 {0}
34};
35#endif
36
37void configure_mmu(void)
38{
39 mmap_add(stm32mp2_mmap);
40 init_xlat_tables();
41
42 enable_mmu_el3(0);
43}
44
45uintptr_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
56uint32_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
67unsigned 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
78uintptr_t stm32_get_bkpr_boot_mode_addr(void)
79{
80 return tamp_bkpr(BKPR_BOOT_MODE);
81}