xref: /rk3399_ARM-atf/plat/rockchip/common/aarch64/platform_common.c (revision d43a2e8bf4b4434cf30296cc56fdaf15321e5e8b)
16fba6e04STony Xie /*
29fd9f1d0Sshengfei Xu  * Copyright (c) 2013-2023, ARM Limited and Contributors. All rights reserved.
36fba6e04STony Xie  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
56fba6e04STony Xie  */
66fba6e04STony Xie 
7ee1ebbd1SIsla Mitchell #include <string.h>
809d40e0eSAntonio Nino Diaz 
909d40e0eSAntonio Nino Diaz #include <platform_def.h>
1009d40e0eSAntonio Nino Diaz 
1109d40e0eSAntonio Nino Diaz #include <arch_helpers.h>
1209d40e0eSAntonio Nino Diaz #include <common/bl_common.h>
1309d40e0eSAntonio Nino Diaz #include <common/debug.h>
1409d40e0eSAntonio Nino Diaz #include <drivers/arm/cci.h>
1509d40e0eSAntonio Nino Diaz #include <lib/utils.h>
16*d43a2e8bSXiaoDong Huang #include <lib/xlat_tables/xlat_tables_compat.h>
17*d43a2e8bSXiaoDong Huang 
1809d40e0eSAntonio Nino Diaz #include <plat_private.h>
196fba6e04STony Xie 
206fba6e04STony Xie #ifdef PLAT_RK_CCI_BASE
216fba6e04STony Xie static const int cci_map[] = {
226fba6e04STony Xie 	PLAT_RK_CCI_CLUSTER0_SL_IFACE_IX,
236fba6e04STony Xie 	PLAT_RK_CCI_CLUSTER1_SL_IFACE_IX
246fba6e04STony Xie };
256fba6e04STony Xie #endif
266fba6e04STony Xie 
276fba6e04STony Xie /******************************************************************************
286fba6e04STony Xie  * Macro generating the code for the function setting up the pagetables as per
296fba6e04STony Xie  * the platform memory map & initialize the mmu, for the given exception level
306fba6e04STony Xie  ******************************************************************************/
316fba6e04STony Xie #define DEFINE_CONFIGURE_MMU_EL(_el)					\
326fba6e04STony Xie 	void plat_configure_mmu_el ## _el(unsigned long total_base,	\
336fba6e04STony Xie 					  unsigned long total_size,	\
346fba6e04STony Xie 					  unsigned long ro_start,	\
356fba6e04STony Xie 					  unsigned long ro_limit,	\
366fba6e04STony Xie 					  unsigned long coh_start,	\
376fba6e04STony Xie 					  unsigned long coh_limit)	\
386fba6e04STony Xie 	{								\
396fba6e04STony Xie 		mmap_add_region(total_base, total_base,			\
406fba6e04STony Xie 				total_size,				\
416fba6e04STony Xie 				MT_MEMORY | MT_RW | MT_SECURE);		\
426fba6e04STony Xie 		mmap_add_region(ro_start, ro_start,			\
436fba6e04STony Xie 				ro_limit - ro_start,			\
446fba6e04STony Xie 				MT_MEMORY | MT_RO | MT_SECURE);		\
459fd9f1d0Sshengfei Xu 		if ((coh_limit - coh_start) != 0)			\
466fba6e04STony Xie 			mmap_add_region(coh_start, coh_start,		\
476fba6e04STony Xie 					coh_limit - coh_start,		\
486fba6e04STony Xie 					MT_DEVICE | MT_RW | MT_SECURE);	\
496fba6e04STony Xie 		mmap_add(plat_rk_mmap);					\
50bc5c3007SLin Huang 		rockchip_plat_mmu_el##_el();				\
516fba6e04STony Xie 		init_xlat_tables();					\
526fba6e04STony Xie 									\
536fba6e04STony Xie 		enable_mmu_el ## _el(0);				\
546fba6e04STony Xie 	}
556fba6e04STony Xie 
566fba6e04STony Xie /* Define EL3 variants of the function initialising the MMU */
576fba6e04STony Xie DEFINE_CONFIGURE_MMU_EL(3)
586fba6e04STony Xie 
59f3d3b316SAntonio Nino Diaz unsigned int plat_get_syscnt_freq2(void)
606fba6e04STony Xie {
616fba6e04STony Xie 	return SYS_COUNTER_FREQ_IN_TICKS;
626fba6e04STony Xie }
636fba6e04STony Xie 
646fba6e04STony Xie void plat_cci_init(void)
656fba6e04STony Xie {
666fba6e04STony Xie #ifdef PLAT_RK_CCI_BASE
676fba6e04STony Xie 	/* Initialize CCI driver */
686fba6e04STony Xie 	cci_init(PLAT_RK_CCI_BASE, cci_map, ARRAY_SIZE(cci_map));
696fba6e04STony Xie #endif
706fba6e04STony Xie }
716fba6e04STony Xie 
726fba6e04STony Xie void plat_cci_enable(void)
736fba6e04STony Xie {
746fba6e04STony Xie 	/*
756fba6e04STony Xie 	 * Enable CCI coherency for this cluster.
766fba6e04STony Xie 	 * No need for locks as no other cpu is active at the moment.
776fba6e04STony Xie 	 */
786fba6e04STony Xie #ifdef PLAT_RK_CCI_BASE
796fba6e04STony Xie 	cci_enable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr()));
806fba6e04STony Xie #endif
816fba6e04STony Xie }
826fba6e04STony Xie 
836fba6e04STony Xie void plat_cci_disable(void)
846fba6e04STony Xie {
856fba6e04STony Xie #ifdef PLAT_RK_CCI_BASE
866fba6e04STony Xie 	cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr()));
876fba6e04STony Xie #endif
886fba6e04STony Xie }
89