Merge "bindings: clock: qcom: Update the GPU CC clock IDs"

This commit is contained in:
qctecmdr 2020-07-04 10:39:44 -07:00 • committed by Gerrit - the friendly Code Review server
commit 2f20b6b85e
3 changed files with 86 additions and 33 deletions

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2013, 2016-2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2013, 2016-2020, The Linux Foundation. All rights reserved.
*/
#include <linux/kernel.h>
@ -11,6 +11,7 @@
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/regmap.h>
#include <linux/clk/qcom.h>
#include "clk-branch.h"
#include "clk-debug.h"
@ -199,6 +200,10 @@ static void clk_branch2_init(struct clk_hw *hw)
}
const struct clk_ops clk_branch2_ops = {
.prepare = clk_prepare_regmap,
.unprepare = clk_unprepare_regmap,
.pre_rate_change = clk_pre_change_regmap,
.post_rate_change = clk_post_change_regmap,
.enable = clk_branch2_enable,
.disable = clk_branch2_disable,
.is_enabled = clk_is_enabled_regmap,
@ -272,3 +277,55 @@ const struct clk_ops clk_branch_simple_ops = {
.is_enabled = clk_is_enabled_regmap,
};
EXPORT_SYMBOL_GPL(clk_branch_simple_ops);
int qcom_clk_set_flags(struct clk *clk, unsigned long flags)
{
struct clk_hw *hw;
struct clk_branch *br;
u32 cbcr_val = 0, cbcr_mask;
int ret;
if (IS_ERR_OR_NULL(clk))
return 0;
hw = __clk_get_hw(clk);
if (IS_ERR_OR_NULL(hw))
return -EINVAL;
switch (flags) {
case CLKFLAG_PERIPH_OFF_SET:
cbcr_val = cbcr_mask = BIT(12);
break;
case CLKFLAG_PERIPH_OFF_CLEAR:
cbcr_mask = BIT(12);
break;
case CLKFLAG_RETAIN_PERIPH:
cbcr_val = cbcr_mask = BIT(13);
break;
case CLKFLAG_NORETAIN_PERIPH:
cbcr_mask = BIT(13);
break;
case CLKFLAG_RETAIN_MEM:
cbcr_val = cbcr_mask = BIT(14);
break;
case CLKFLAG_NORETAIN_MEM:
cbcr_mask = BIT(14);
break;
default:
return -EINVAL;
}
br = to_clk_branch(hw);
ret = regmap_update_bits(br->clkr.regmap, br->halt_reg, cbcr_mask,
cbcr_val);
if (ret)
return ret;
/* Make sure power is enabled/disabled before returning. */
mb();
udelay(1);
return 0;
}
EXPORT_SYMBOL(qcom_clk_set_flags);

View file

@ -7,38 +7,24 @@
#define _DT_BINDINGS_CLK_QCOM_GPU_CC_HOLI_H
/* GPU_CC clocks */
#define GPU_CC_PLL0 0
#define GPU_CC_PLL1 1
#define GPU_CC_ACD_AHB_CLK 2
#define GPU_CC_ACD_CXO_CLK 3
#define GPU_CC_AHB_CLK 4
#define GPU_CC_CRC_AHB_CLK 5
#define GPU_CC_CX_APB_CLK 6
#define GPU_CC_CX_GFX3D_CLK 7
#define GPU_CC_CX_GFX3D_SLV_CLK 8
#define GPU_CC_CX_GMU_CLK 9
#define GPU_CC_CX_SNOC_DVM_CLK 10
#define GPU_CC_CXO_AON_CLK 11
#define GPU_CC_CXO_CLK 12
#define GPU_CC_GMU_CLK_SRC 13
#define GPU_CC_GX_CXO_CLK 14
#define GPU_CC_GX_GFX3D_CLK 15
#define GPU_CC_GX_GMU_CLK 16
#define GPU_CC_GX_QDSS_TSCTR_CLK 17
#define GPU_CC_GX_VSENSE_CLK 18
#define GPU_CC_SLEEP_CLK 19
#define GPU_CC_PLL0 0
#define GPU_CC_PLL1 1
#define GPU_CC_AHB_CLK 2
#define GPU_CC_CX_GFX3D_CLK 3
#define GPU_CC_CX_GFX3D_SLV_CLK 4
#define GPU_CC_CX_GMU_CLK 5
#define GPU_CC_CX_SNOC_DVM_CLK 6
#define GPU_CC_CXO_AON_CLK 7
#define GPU_CC_CXO_CLK 8
#define GPU_CC_GMU_CLK_SRC 9
#define GPU_CC_GX_CXO_CLK 10
#define GPU_CC_GX_GFX3D_CLK 11
#define GPU_CC_GX_GFX3D_CLK_SRC 12
#define GPU_CC_GX_GMU_CLK 13
#define GPU_CC_SLEEP_CLK 14
/* GPU_CC power domains */
#define CX_GDSC 0
#define GX_GDSC 1
/* GPU_CC resets */
#define GPUCC_GPU_CC_ACD_BCR 0
#define GPUCC_GPU_CC_CX_BCR 1
#define GPUCC_GPU_CC_GFX3D_AON_BCR 2
#define GPUCC_GPU_CC_GMU_BCR 3
#define GPUCC_GPU_CC_GX_BCR 4
#define GPUCC_GPU_CC_RBCPR_BCR 5
#define GPUCC_GPU_CC_XO_BCR 6
#define CX_GDSC 0
#define GX_GDSC 1
#endif

View file

@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*/
#ifndef __LINUX_CLK_QCOM_H_
@ -8,6 +8,16 @@
#include <linux/clk-provider.h>
enum branch_mem_flags {
CLKFLAG_RETAIN_PERIPH,
CLKFLAG_NORETAIN_PERIPH,
CLKFLAG_RETAIN_MEM,
CLKFLAG_NORETAIN_MEM,
CLKFLAG_PERIPH_OFF_SET,
CLKFLAG_PERIPH_OFF_CLEAR,
};
int qcom_clk_get_voltage(struct clk *clk, unsigned long rate);
int qcom_clk_set_flags(struct clk *clk, unsigned long flags);
#endif /* __LINUX_CLK_QCOM_H_ */