diff options
Diffstat (limited to 'plat/rockchip/rk3399/drivers/soc/soc.c')
-rw-r--r-- | plat/rockchip/rk3399/drivers/soc/soc.c | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/plat/rockchip/rk3399/drivers/soc/soc.c b/plat/rockchip/rk3399/drivers/soc/soc.c index bf2d4413..d11a2f64 100644 --- a/plat/rockchip/rk3399/drivers/soc/soc.c +++ b/plat/rockchip/rk3399/drivers/soc/soc.c @@ -69,6 +69,15 @@ const mmap_region_t plat_rk_mmap[] = { MT_DEVICE | MT_RW | MT_SECURE), MAP_REGION_FLAT(GRF_BASE, GRF_SIZE, MT_DEVICE | MT_RW | MT_SECURE), + MAP_REGION_FLAT(SERVICE_NOC_0_BASE, NOC_0_SIZE, + MT_DEVICE | MT_RW | MT_SECURE), + MAP_REGION_FLAT(SERVICE_NOC_1_BASE, NOC_1_SIZE, + MT_DEVICE | MT_RW | MT_SECURE), + MAP_REGION_FLAT(SERVICE_NOC_2_BASE, NOC_2_SIZE, + MT_DEVICE | MT_RW | MT_SECURE), + MAP_REGION_FLAT(SERVICE_NOC_3_BASE, NOC_3_SIZE, + MT_DEVICE | MT_RW | MT_SECURE), + { 0 } }; @@ -272,8 +281,7 @@ void plls_suspend(void) for (i = 0; i < CRU_CLKSEL_COUNT; i++) slp_data.cru_clksel_con[i] = - mmio_read_32(CRU_BASE + - CRU_CLKSEL_OFFSET + i * REG_SIZE); + mmio_read_32(CRU_BASE + CRU_CLKSEL_CON(i)); for (i = 0; i < PMUCRU_CLKSEL_CONUT; i++) slp_data.pmucru_clksel_con[i] = @@ -289,6 +297,43 @@ void plls_suspend(void) _pll_suspend(ALPLL_ID); } +void clk_gate_con_save(void) +{ + uint32_t i = 0; + + for (i = 0; i < PMUCRU_GATE_COUNT; i++) + slp_data.pmucru_gate_con[i] = + mmio_read_32(PMUCRU_BASE + PMUCRU_GATE_CON(i)); + + for (i = 0; i < CRU_GATE_COUNT; i++) + slp_data.cru_gate_con[i] = + mmio_read_32(CRU_BASE + CRU_GATE_CON(i)); +} + +void clk_gate_con_disable(void) +{ + uint32_t i; + + for (i = 0; i < PMUCRU_GATE_COUNT; i++) + mmio_write_32(PMUCRU_BASE + PMUCRU_GATE_CON(i), REG_SOC_WMSK); + + for (i = 0; i < CRU_GATE_COUNT; i++) + mmio_write_32(CRU_BASE + CRU_GATE_CON(i), REG_SOC_WMSK); +} + +void clk_gate_con_restore(void) +{ + uint32_t i; + + for (i = 0; i < PMUCRU_GATE_COUNT; i++) + mmio_write_32(PMUCRU_BASE + PMUCRU_GATE_CON(i), + REG_SOC_WMSK | slp_data.pmucru_gate_con[i]); + + for (i = 0; i < CRU_GATE_COUNT; i++) + mmio_write_32(CRU_BASE + CRU_GATE_CON(i), + REG_SOC_WMSK | slp_data.cru_gate_con[i]); +} + static void set_plls_nobypass(uint32_t pll_id) { if (pll_id == PPLL_ID) @@ -304,7 +349,7 @@ static void plls_resume_prepare(void) int i; for (i = 0; i < CRU_CLKSEL_COUNT; i++) - mmio_write_32((CRU_BASE + CRU_CLKSEL_OFFSET + i * REG_SIZE), + mmio_write_32((CRU_BASE + CRU_CLKSEL_CON(i)), REG_SOC_WMSK | slp_data.cru_clksel_con[i]); for (i = 0; i < PMUCRU_CLKSEL_CONUT; i++) mmio_write_32((PMUCRU_BASE + @@ -351,7 +396,7 @@ void __dead2 soc_global_soft_reset(void) * so we do not hope the core to excute valid codes. */ while (1) - ; + ; } void plat_rockchip_soc_init(void) |