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