From d7efd367f9cb9de6952a7ec2adf62ff3fc49c1f4 Mon Sep 17 00:00:00 2001 From: Dmitry Baryshkov Date: Fri, 23 Sep 2022 18:00:32 +0300 Subject: [PATCH] msm8996: add support for CPU clocks Measure CPU clusters and CBF clocks. Signed-off-by: Dmitry Baryshkov --- msm8996.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/msm8996.c b/msm8996.c index b488028..27a9c50 100644 --- a/msm8996.c +++ b/msm8996.c @@ -80,6 +80,47 @@ static struct debug_mux mmss_cc = { .mux_mask = 0x3ff, }; +/* rudimentary muxes to enable APC debug clocks */ +static struct debug_mux apc0_mux = { + .phys = 0x06400000, + .size = 0x1000, + + .enable_reg = 0x48, + .enable_mask = 0xf00, +}; + +static struct debug_mux apc1_mux = { + .phys = 0x06480000, + .size = 0x1000, + + .enable_reg = 0x48, + .enable_mask = 0xf00, +}; + +static void cpu_premeasure(struct debug_mux *mux) +{ + mux_enable(&apc0_mux); + mux_enable(&apc1_mux); +}; + +static void cpu_postmeasure(struct debug_mux *mux) +{ + mux_disable(&apc0_mux); + mux_disable(&apc1_mux); +}; + +static struct debug_mux cpu_cc = { + .phys = 0x09820000, + .size = 0x1000, + + .mux_reg = 0x78, + .mux_mask = 0xff << 8, + .mux_shift = 8, + + .premeasure = cpu_premeasure, + .postmeasure = cpu_postmeasure, +}; + static struct measure_clk msm8996_clocks[] = { { "snoc_clk", &gcc, 0x0000 }, { "gcc_sys_noc_usb3_axi_clk", &gcc, 0x0006 }, @@ -270,6 +311,9 @@ static struct measure_clk msm8996_clocks[] = { { "gcc_bimc_gfx_clk", &gcc, 0x00af}, { "gcc_hmss_rbcpr_clk", &gcc, 0x00ba }, //{ "cpu_dbg_clk", &gcc, 0x00bb }, + { "cpu_cbf_clk", &gcc, 0x00bb, &cpu_cc, 0x01 }, + { "cpu_pwr_clk", &gcc, 0x00bb, &cpu_cc, 0x11, 16 }, + { "cpu_perf_clk", &gcc, 0x00bb, &cpu_cc, 0x21, 16 }, { "gcc_gp1_clk", &gcc, 0x00e3 }, { "gcc_gp2_clk", &gcc, 0x00e4 }, { "gcc_gp3_clk", &gcc, 0x00e5 }, @@ -318,7 +362,19 @@ static struct measure_clk msm8996_clocks[] = { {} }; +static int msm8996_premap(int devmem) +{ + if (mmap_mux(devmem, &apc0_mux)) + return -1; + + if (mmap_mux(devmem, &apc1_mux)) + return -1; + + return 0; +} + struct debugcc_platform msm8996_debugcc = { "msm8996", msm8996_clocks, + msm8996_premap, };