1 // SPDX-License-Identifier: BSD-2-Clause
2 /*
3 * Copyright (C) 2017, Fuzhou Rockchip Electronics Co., Ltd.
4 * Copyright (C) 2019, Theobroma Systems Design und Consulting GmbH
5 */
6
7 #include <common.h>
8 #include <io.h>
9 #include <mm/core_memprot.h>
10 #include <platform.h>
11 #include <platform_config.h>
12
13 register_phys_mem_pgdir(MEM_AREA_IO_SEC, SGRF_BASE, SGRF_SIZE);
14 register_phys_mem_pgdir(MEM_AREA_IO_SEC, DDRSGRF_BASE, DDRSGRF_SIZE);
15
16 #define SGRF_SOC_CON(n) ((n) * 4)
17 #define DDR_SGRF_DDR_CON(n) ((n) * 4)
18 #define DDR_RGN0_NS BIT32(30)
19 #define SLAVE_ALL_NS GENMASK_32(31, 16)
20
platform_secure_init(void)21 int platform_secure_init(void)
22 {
23 vaddr_t sgrf_base = (vaddr_t)phys_to_virt_io(SGRF_BASE, SGRF_SIZE);
24 vaddr_t ddrsgrf_base = (vaddr_t)phys_to_virt_io(DDRSGRF_BASE,
25 DDRSGRF_SIZE);
26
27 /* Set rgn0 non-secure */
28 io_write32(ddrsgrf_base + DDR_SGRF_DDR_CON(0), DDR_RGN0_NS);
29
30 /* Initialize all slave non-secure */
31 io_write32(sgrf_base + SGRF_SOC_CON(7), SLAVE_ALL_NS);
32 io_write32(sgrf_base + SGRF_SOC_CON(8), SLAVE_ALL_NS);
33 io_write32(sgrf_base + SGRF_SOC_CON(9), SLAVE_ALL_NS);
34 io_write32(sgrf_base + SGRF_SOC_CON(10), SLAVE_ALL_NS);
35
36 return 0;
37 }
38