/* * Copyright (c) 2024, Rockchip, Inc. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define RK3588_DEV_RNG0_BASE 0xf0000000 #define RK3588_DEV_RNG0_SIZE 0x0ffff000 const mmap_region_t plat_rk_mmap[] = { MAP_REGION_FLAT(RK3588_DEV_RNG0_BASE, RK3588_DEV_RNG0_SIZE, MT_DEVICE | MT_RW | MT_SECURE), MAP_REGION_FLAT(DDR_SHARE_MEM, DDR_SHARE_SIZE, MT_DEVICE | MT_RW | MT_NS), { 0 } }; /* The RockChip power domain tree descriptor */ const unsigned char rockchip_power_domain_tree_desc[] = { /* No of root nodes */ PLATFORM_SYSTEM_COUNT, /* No of children for the root node */ PLATFORM_CLUSTER_COUNT, /* No of children for the first cluster node */ PLATFORM_CLUSTER0_CORE_COUNT, /* No of children for the second cluster node */ PLATFORM_CLUSTER1_CORE_COUNT }; void timer_hp_init(void) { if ((mmio_read_32(TIMER_HP_BASE + TIMER_HP_CTRL) & 0x1) != 0) return; mmio_write_32(TIMER_HP_BASE + TIMER_HP_CTRL, 0x0); dsb(); mmio_write_32(TIMER_HP_BASE + TIMER_HP_LOAD_COUNT0, 0xffffffff); mmio_write_32(TIMER_HP_BASE + TIMER_HP_LOAD_COUNT1, 0xffffffff); mmio_write_32(TIMER_HP_BASE + TIMER_HP_INT_EN, 0); dsb(); mmio_write_32(TIMER_HP_BASE + TIMER_HP_CTRL, 0x1); } static void system_reset_init(void) { /* enable wdt_ns0~4 trigger global reset and select first reset. * enable tsadc trigger global reset and select first reset. * enable global reset and wdt trigger pmu reset. * select first reset trigger pmu reset.s */ mmio_write_32(CRU_BASE + CRU_GLB_RST_CON, 0xffdf); /* enable wdt_s, wdt_ns reset */ mmio_write_32(BUSSGRF_BASE + SGRF_SOC_CON(2), 0x0c000c00); /* reset width = 0xffff */ mmio_write_32(PMU1GRF_BASE + PMU1GRF_SOC_CON(1), 0xffffffff); /* enable first/tsadc/wdt reset output */ mmio_write_32(PMU1SGRF_BASE + PMU1SGRF_SOC_CON(0), 0x00070007); /* pmu1_grf pmu1_ioc hold */ mmio_write_32(PMU1GRF_BASE + PMU1GRF_SOC_CON(7), 0x30003000); /* pmu1sgrf hold */ mmio_write_32(PMU1SGRF_BASE + PMU1SGRF_SOC_CON(14), 0x00200020); /* select tsadc_shut_m0 ionmux*/ mmio_write_32(PMU0IOC_BASE + 0x0, 0x00f00020); } void plat_rockchip_soc_init(void) { rockchip_clock_init(); secure_timer_init(); timer_hp_init(); system_reset_init(); sgrf_init(); rockchip_init_scmi_server(); }