1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
|
// SPDX-License-Identifier: BSD-3-Clause
/* Copyright (c) 2022, Linaro Ltd. */
#include <sys/mman.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "debugcc.h"
#define GCC_BASE 0x01800000
#define GCC_SIZE 0x80000
#define GCC_DEBUG_CLK_CTL 0x74000
#define GCC_CLOCK_FREQ_MEASURE_CTL 0x74004
#define GCC_CLOCK_FREQ_MEASURE_STATUS 0x74008
#define GCC_XO_DIV4_CBCR 0x30034
static struct gcc_mux gcc = {
.mux = {
.phys = GCC_BASE,
.size = GCC_SIZE,
.measure = measure_gcc,
.enable_reg = GCC_DEBUG_CLK_CTL,
.enable_mask = BIT(16),
.mux_reg = GCC_DEBUG_CLK_CTL,
.mux_mask = 0x1ff,
.div_reg = GCC_DEBUG_CLK_CTL,
.div_shift = 12,
.div_mask = 0xf << 12,
.div_val = 4,
},
.xo_div4_reg = GCC_XO_DIV4_CBCR,
.debug_ctl_reg = GCC_CLOCK_FREQ_MEASURE_CTL,
.debug_status_reg = GCC_CLOCK_FREQ_MEASURE_STATUS,
};
static struct measure_clk msm8936_clocks[] = {
{ "gcc_gp1_clk", &gcc.mux, 16 },
{ "gcc_gp2_clk", &gcc.mux, 17 },
{ "gcc_gp3_clk", &gcc.mux, 18 },
{ "gcc_bimc_gfx_clk", &gcc.mux, 45 },
{ "gcc_mss_cfg_ahb_clk", &gcc.mux, 48 },
{ "gcc_mss_q6_bimc_axi_clk", &gcc.mux, 49 },
{ "gcc_apss_tcu_clk", &gcc.mux, 80 },
{ "gcc_mdp_tbu_clk", &gcc.mux, 81 },
{ "gcc_gfx_tbu_clk", &gcc.mux, 82 },
{ "gcc_gfx_tcu_clk", &gcc.mux, 83 },
{ "gcc_venus_tbu_clk", &gcc.mux, 84 },
{ "gcc_gtcu_ahb_clk", &gcc.mux, 88 },
{ "gcc_vfe_tbu_clk", &gcc.mux, 90 },
{ "gcc_smmu_cfg_clk", &gcc.mux, 91 },
{ "gcc_jpeg_tbu_clk", &gcc.mux, 92 },
{ "gcc_usb_hs_system_clk", &gcc.mux, 96 },
{ "gcc_usb_hs_ahb_clk", &gcc.mux, 97 },
{ "gcc_usb_fs_ahb_clk", &gcc.mux, 241 },
{ "gcc_usb_fs_ic_clk", &gcc.mux, 244 },
{ "gcc_usb2a_phy_sleep_clk", &gcc.mux, 99 },
{ "gcc_sdcc1_apps_clk", &gcc.mux, 104 },
{ "gcc_sdcc1_ahb_clk", &gcc.mux, 105 },
{ "gcc_sdcc2_apps_clk", &gcc.mux, 112 },
{ "gcc_sdcc2_ahb_clk", &gcc.mux, 113 },
{ "gcc_blsp1_ahb_clk", &gcc.mux, 136 },
{ "gcc_blsp1_qup1_spi_apps_clk", &gcc.mux, 138 },
{ "gcc_blsp1_qup1_i2c_apps_clk", &gcc.mux, 139 },
{ "gcc_blsp1_uart1_apps_clk", &gcc.mux, 140 },
{ "gcc_blsp1_qup2_spi_apps_clk", &gcc.mux, 142 },
{ "gcc_blsp1_qup2_i2c_apps_clk", &gcc.mux, 144 },
{ "gcc_blsp1_uart2_apps_clk", &gcc.mux, 145 },
{ "gcc_blsp1_qup3_spi_apps_clk", &gcc.mux, 147 },
{ "gcc_blsp1_qup3_i2c_apps_clk", &gcc.mux, 148 },
{ "gcc_blsp1_qup4_spi_apps_clk", &gcc.mux, 152 },
{ "gcc_blsp1_qup4_i2c_apps_clk", &gcc.mux, 153 },
{ "gcc_blsp1_qup5_spi_apps_clk", &gcc.mux, 156 },
{ "gcc_blsp1_qup5_i2c_apps_clk", &gcc.mux, 157 },
{ "gcc_blsp1_qup6_spi_apps_clk", &gcc.mux, 161 },
{ "gcc_blsp1_qup6_i2c_apps_clk", &gcc.mux, 162 },
{ "gcc_camss_ahb_clk", &gcc.mux, 168 },
{ "gcc_camss_top_ahb_clk", &gcc.mux, 169 },
{ "gcc_camss_micro_ahb_clk", &gcc.mux, 170 },
{ "gcc_camss_gp0_clk", &gcc.mux, 171 },
{ "gcc_camss_gp1_clk", &gcc.mux, 172 },
{ "gcc_camss_mclk0_clk", &gcc.mux, 173 },
{ "gcc_camss_mclk1_clk", &gcc.mux, 174 },
{ "gcc_camss_mclk2_clk", &gcc.mux, 445 },
{ "gcc_camss_cci_clk", &gcc.mux, 175 },
{ "gcc_camss_cci_ahb_clk", &gcc.mux, 176 },
{ "gcc_camss_csi0phytimer_clk", &gcc.mux, 177 },
{ "gcc_camss_csi1phytimer_clk", &gcc.mux, 178 },
{ "gcc_camss_jpeg0_clk", &gcc.mux, 179 },
{ "gcc_camss_jpeg_ahb_clk", &gcc.mux, 180 },
{ "gcc_camss_jpeg_axi_clk", &gcc.mux, 181 },
{ "gcc_camss_vfe0_clk", &gcc.mux, 184 },
{ "gcc_camss_cpp_clk", &gcc.mux, 185 },
{ "gcc_camss_cpp_ahb_clk", &gcc.mux, 186 },
{ "gcc_camss_vfe_ahb_clk", &gcc.mux, 187 },
{ "gcc_camss_vfe_axi_clk", &gcc.mux, 188 },
{ "gcc_camss_csi_vfe0_clk", &gcc.mux, 191 },
{ "gcc_camss_csi0_clk", &gcc.mux, 192 },
{ "gcc_camss_csi0_ahb_clk", &gcc.mux, 193 },
{ "gcc_camss_csi0phy_clk", &gcc.mux, 194 },
{ "gcc_camss_csi0rdi_clk", &gcc.mux, 195 },
{ "gcc_camss_csi0pix_clk", &gcc.mux, 196 },
{ "gcc_camss_csi1_clk", &gcc.mux, 197 },
{ "gcc_camss_csi1_ahb_clk", &gcc.mux, 198 },
{ "gcc_camss_csi1phy_clk", &gcc.mux, 199 },
{ "gcc_camss_csi2_clk", &gcc.mux, 227 },
{ "gcc_camss_csi2_ahb_clk", &gcc.mux, 228 },
{ "gcc_camss_csi2phy_clk", &gcc.mux, 229 },
{ "gcc_camss_csi2rdi_clk", &gcc.mux, 230 },
{ "gcc_camss_csi2pix_clk", &gcc.mux, 231 },
{ "gcc_pdm_ahb_clk", &gcc.mux, 208 },
{ "gcc_pdm2_clk", &gcc.mux, 210 },
{ "gcc_prng_ahb_clk", &gcc.mux, 216 },
{ "gcc_camss_csi1rdi_clk", &gcc.mux, 224 },
{ "gcc_camss_csi1pix_clk", &gcc.mux, 225 },
{ "gcc_camss_ispif_ahb_clk", &gcc.mux, 226 },
{ "gcc_boot_rom_ahb_clk", &gcc.mux, 248 },
{ "gcc_crypto_clk", &gcc.mux, 312 },
{ "gcc_crypto_axi_clk", &gcc.mux, 313 },
{ "gcc_crypto_ahb_clk", &gcc.mux, 314 },
{ "gcc_oxili_timer_clk", &gcc.mux, 489 },
{ "gcc_oxili_gfx3d_clk", &gcc.mux, 490 },
{ "gcc_oxili_ahb_clk", &gcc.mux, 491 },
{ "gcc_oxili_gmem_clk", &gcc.mux, 496 },
{ "gcc_venus0_vcodec0_clk", &gcc.mux, 497 },
{ "gcc_venus0_core0_vcodec0_clk", &gcc.mux, 440 },
{ "gcc_venus0_core1_vcodec0_clk", &gcc.mux, 441 },
{ "gcc_venus0_axi_clk", &gcc.mux, 498 },
{ "gcc_venus0_ahb_clk", &gcc.mux, 499 },
{ "gcc_mdss_ahb_clk", &gcc.mux, 502 },
{ "gcc_mdss_axi_clk", &gcc.mux, 503 },
{ "gcc_mdss_pclk0_clk", &gcc.mux, 504 },
{ "gcc_mdss_pclk1_clk", &gcc.mux, 442 },
{ "gcc_mdss_mdp_clk", &gcc.mux, 505 },
{ "gcc_mdss_vsync_clk", &gcc.mux, 507 },
{ "gcc_mdss_byte0_clk", &gcc.mux, 508 },
{ "gcc_mdss_byte1_clk", &gcc.mux, 443 },
{ "gcc_mdss_esc0_clk", &gcc.mux, 509 },
{ "gcc_mdss_esc1_clk", &gcc.mux, 444 },
{ "gcc_bimc_clk", &gcc.mux, 340 },
{ "gcc_bimc_gpu_clk", &gcc.mux, 343 },
{ "gcc_bimc_ddr_ch0_clk", &gcc.mux, 346 },
{ "gcc_cpp_tbu_clk", &gcc.mux, 233 },
{ "gcc_mdp_rt_tbu_clk", &gcc.mux, 238 },
{ "wcnss_m_clk", &gcc.mux, 408 },
{},
};
struct debugcc_platform msm8936_debugcc = {
"msm8936",
msm8936_clocks,
};
|