1*82e35083SBryan O'Donoghue /* 2*82e35083SBryan O'Donoghue * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*82e35083SBryan O'Donoghue * 4*82e35083SBryan O'Donoghue * SPDX-License-Identifier: BSD-3-Clause 5*82e35083SBryan O'Donoghue */ 6*82e35083SBryan O'Donoghue #include <arch.h> 7*82e35083SBryan O'Donoghue #include <mmio.h> 8*82e35083SBryan O'Donoghue #include <stdint.h> 9*82e35083SBryan O'Donoghue #include <stdbool.h> 10*82e35083SBryan O'Donoghue #include <imx_regs.h> 11*82e35083SBryan O'Donoghue #include <imx_clock.h> 12*82e35083SBryan O'Donoghue 13*82e35083SBryan O'Donoghue void imx_clock_target_set(unsigned int id, uint32_t val) 14*82e35083SBryan O'Donoghue { 15*82e35083SBryan O'Donoghue struct ccm *ccm = ((struct ccm *)CCM_BASE); 16*82e35083SBryan O'Donoghue uintptr_t addr; 17*82e35083SBryan O'Donoghue 18*82e35083SBryan O'Donoghue if (id > CCM_ROOT_CTRL_NUM) 19*82e35083SBryan O'Donoghue return; 20*82e35083SBryan O'Donoghue 21*82e35083SBryan O'Donoghue addr = (uintptr_t)&ccm->ccm_root_ctrl[id].ccm_target_root; 22*82e35083SBryan O'Donoghue mmio_write_32(addr, val); 23*82e35083SBryan O'Donoghue } 24*82e35083SBryan O'Donoghue 25*82e35083SBryan O'Donoghue void imx_clock_target_clr(unsigned int id, uint32_t val) 26*82e35083SBryan O'Donoghue { 27*82e35083SBryan O'Donoghue struct ccm *ccm = ((struct ccm *)CCM_BASE); 28*82e35083SBryan O'Donoghue uintptr_t addr; 29*82e35083SBryan O'Donoghue 30*82e35083SBryan O'Donoghue if (id > CCM_ROOT_CTRL_NUM) 31*82e35083SBryan O'Donoghue return; 32*82e35083SBryan O'Donoghue 33*82e35083SBryan O'Donoghue addr = (uintptr_t)&ccm->ccm_root_ctrl[id].ccm_target_root_clr; 34*82e35083SBryan O'Donoghue mmio_write_32(addr, val); 35*82e35083SBryan O'Donoghue } 36*82e35083SBryan O'Donoghue 37*82e35083SBryan O'Donoghue void imx_clock_gate_enable(unsigned int id, bool enable) 38*82e35083SBryan O'Donoghue { 39*82e35083SBryan O'Donoghue struct ccm *ccm = ((struct ccm *)CCM_BASE); 40*82e35083SBryan O'Donoghue uintptr_t addr; 41*82e35083SBryan O'Donoghue 42*82e35083SBryan O'Donoghue if (id > CCM_CLK_GATE_CTRL_NUM) 43*82e35083SBryan O'Donoghue return; 44*82e35083SBryan O'Donoghue 45*82e35083SBryan O'Donoghue /* TODO: add support for more than DOMAIN0 clocks */ 46*82e35083SBryan O'Donoghue if (enable) 47*82e35083SBryan O'Donoghue addr = (uintptr_t)&ccm->ccm_clk_gate_ctrl[id].ccm_ccgr_set; 48*82e35083SBryan O'Donoghue else 49*82e35083SBryan O'Donoghue addr = (uintptr_t)&ccm->ccm_clk_gate_ctrl[id].ccm_ccgr_clr; 50*82e35083SBryan O'Donoghue 51*82e35083SBryan O'Donoghue mmio_write_32(addr, CCM_CCGR_SETTING0_DOM_CLK_ALWAYS); 52*82e35083SBryan O'Donoghue } 53