// SPDX-License-Identifier: BSD-2-Clause /* * Copyright (c) 2025, Linaro Ltd * Copyright (c) 2026, Qualcomm Technologies, Inc. and/or its subsidiaries. */ #include #include #include #include register_phys_mem(MEM_AREA_IO_NSEC, GCC_BASE, GCC_SIZE); #define CBCR_BRANCH_ENABLE_BIT BIT(0) #define CBCR_HW_CTL_ENABLE_BIT BIT(1) #define CBCR_BRANCH_OFF_BIT BIT(31) static inline bool cbcr_branch_on(uint32_t val) { return !(val & CBCR_BRANCH_OFF_BIT); } TEE_Result qcom_clock_enable_cbc(vaddr_t cbcr) { int ret = 0; io_setbits32(cbcr, CBCR_BRANCH_ENABLE_BIT); REG_POLL_TIMEOUT(cbcr, 10 * 1000, 10, &ret, cbcr_branch_on); if (ret < 0) return TEE_ERROR_TIMEOUT; return TEE_SUCCESS; } TEE_Result qcom_clock_enable(enum qcom_clk_group group) { switch (group) { case QCOM_CLKS_TURING: case QCOM_CLKS_LPASS: case QCOM_CLKS_WPSS: return qcom_clock_enable_pas(group); default: EMSG("Unsupported clock group %d\n", group); return TEE_ERROR_BAD_PARAMETERS; } return TEE_SUCCESS; }