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