xref: /rk3399_ARM-atf/plat/mediatek/mt8183/aarch64/platform_common.c (revision 16b49f601df30378b78bb323a859109149f3ea00)
13fa9dec4Skenny liang /*
23fa9dec4Skenny liang  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
33fa9dec4Skenny liang  *
43fa9dec4Skenny liang  * SPDX-License-Identifier: BSD-3-Clause
53fa9dec4Skenny liang  */
63fa9dec4Skenny liang 
73fa9dec4Skenny liang #include <arch_helpers.h>
83fa9dec4Skenny liang #include <common/bl_common.h>
93fa9dec4Skenny liang #include <common/debug.h>
10*16b49f60Skenny liang #include <mcsi/mcsi.h>
113fa9dec4Skenny liang #include <platform_def.h>
123fa9dec4Skenny liang #include <lib/utils.h>
133fa9dec4Skenny liang #include <lib/xlat_tables/xlat_tables.h>
143fa9dec4Skenny liang 
15*16b49f60Skenny liang static const int cci_map[] = {
16*16b49f60Skenny liang 	PLAT_MT_CCI_CLUSTER0_SL_IFACE_IX,
17*16b49f60Skenny liang 	PLAT_MT_CCI_CLUSTER1_SL_IFACE_IX
18*16b49f60Skenny liang };
19*16b49f60Skenny liang 
203fa9dec4Skenny liang /* Table of regions to map using the MMU.  */
213fa9dec4Skenny liang const mmap_region_t plat_mmap[] = {
223fa9dec4Skenny liang 	/* for TF text, RO, RW */
233fa9dec4Skenny liang 	MAP_REGION_FLAT(TZRAM_BASE, TZRAM_SIZE,
243fa9dec4Skenny liang 			MT_MEMORY | MT_RW | MT_SECURE),
253fa9dec4Skenny liang 	MAP_REGION_FLAT(MTK_DEV_RNG0_BASE, MTK_DEV_RNG0_SIZE,
263fa9dec4Skenny liang 			MT_DEVICE | MT_RW | MT_SECURE),
273fa9dec4Skenny liang 	MAP_REGION_FLAT(MTK_DEV_RNG1_BASE, MTK_DEV_RNG1_SIZE,
283fa9dec4Skenny liang 			MT_DEVICE | MT_RW | MT_SECURE),
293fa9dec4Skenny liang 	MAP_REGION_FLAT(MTK_DEV_RNG2_BASE, MTK_DEV_RNG2_SIZE,
303fa9dec4Skenny liang 			MT_DEVICE | MT_RW | MT_SECURE),
313fa9dec4Skenny liang 	{ 0 }
323fa9dec4Skenny liang };
333fa9dec4Skenny liang 
343fa9dec4Skenny liang /*******************************************************************************
353fa9dec4Skenny liang  * Macro generating the code for the function setting up the pagetables as per
363fa9dec4Skenny liang  * the platform memory map & initialize the mmu, for the given exception level
373fa9dec4Skenny liang  ******************************************************************************/
plat_configure_mmu_el3(uintptr_t total_base,uintptr_t total_size,uintptr_t ro_start,uintptr_t ro_limit,uintptr_t coh_start,uintptr_t coh_limit)383fa9dec4Skenny liang void plat_configure_mmu_el3(uintptr_t total_base,
393fa9dec4Skenny liang 			    uintptr_t total_size,
403fa9dec4Skenny liang 			    uintptr_t ro_start,
413fa9dec4Skenny liang 			    uintptr_t ro_limit,
423fa9dec4Skenny liang 			    uintptr_t coh_start,
433fa9dec4Skenny liang 			    uintptr_t coh_limit)
443fa9dec4Skenny liang {
453fa9dec4Skenny liang 	mmap_add_region(total_base, total_base, total_size,
463fa9dec4Skenny liang 			MT_MEMORY | MT_RW | MT_SECURE);
473fa9dec4Skenny liang 	mmap_add_region(ro_start, ro_start, ro_limit - ro_start,
483fa9dec4Skenny liang 			MT_MEMORY | MT_RO | MT_SECURE);
493fa9dec4Skenny liang 	mmap_add_region(coh_start, coh_start, coh_limit - coh_start,
503fa9dec4Skenny liang 			MT_DEVICE | MT_RW | MT_SECURE);
513fa9dec4Skenny liang 	mmap_add(plat_mmap);
523fa9dec4Skenny liang 	init_xlat_tables();
533fa9dec4Skenny liang 	enable_mmu_el3(0);
543fa9dec4Skenny liang }
553fa9dec4Skenny liang 
plat_get_syscnt_freq2(void)563fa9dec4Skenny liang unsigned int plat_get_syscnt_freq2(void)
573fa9dec4Skenny liang {
583fa9dec4Skenny liang 	return SYS_COUNTER_FREQ_IN_TICKS;
593fa9dec4Skenny liang }
60*16b49f60Skenny liang 
plat_mtk_cci_init(void)61*16b49f60Skenny liang void plat_mtk_cci_init(void)
62*16b49f60Skenny liang {
63*16b49f60Skenny liang 	/* Initialize CCI driver */
64*16b49f60Skenny liang 	mcsi_init(PLAT_MT_CCI_BASE, ARRAY_SIZE(cci_map));
65*16b49f60Skenny liang }
66*16b49f60Skenny liang 
plat_mtk_cci_enable(void)67*16b49f60Skenny liang void plat_mtk_cci_enable(void)
68*16b49f60Skenny liang {
69*16b49f60Skenny liang 	/* Enable CCI coherency for this cluster.
70*16b49f60Skenny liang 	 * No need for locks as no other cpu is active at the moment.
71*16b49f60Skenny liang 	 */
72*16b49f60Skenny liang 	cci_enable_cluster_coherency(read_mpidr());
73*16b49f60Skenny liang }
74*16b49f60Skenny liang 
plat_mtk_cci_disable(void)75*16b49f60Skenny liang void plat_mtk_cci_disable(void)
76*16b49f60Skenny liang {
77*16b49f60Skenny liang 	cci_disable_cluster_coherency(read_mpidr());
78*16b49f60Skenny liang }
79*16b49f60Skenny liang 
plat_mtk_cci_init_sf(void)80*16b49f60Skenny liang void plat_mtk_cci_init_sf(void)
81*16b49f60Skenny liang {
82*16b49f60Skenny liang 	/* Init mcsi snoop filter. */
83*16b49f60Skenny liang 	cci_init_sf();
84*16b49f60Skenny liang }
85