From: Vladimir Lypak <vladimir.lypak@xxxxxxxxx>[..]
Add driver for interconnect busses found in MSM8953 based platforms.
The topology consists of four NoCs that are partially controlled by a
RPM processor.
Note that one of NoCs (System NoC) has a counterpart (System NoC MM)
that is modelled as child device to avoid resource conflicts, since it
uses same MMIO space for configuration.
Signed-off-by: Vladimir Lypak <vladimir.lypak@xxxxxxxxx>
Signed-off-by: Barnabás Czémán <barnabas.czeman@xxxxxxxxxxxxxx>
---
drivers/interconnect/qcom/Kconfig | 9 +
drivers/interconnect/qcom/Makefile | 2 +
drivers/interconnect/qcom/msm8953.c | 1325 +++++++++++++++++++++++++++++++++++
3 files changed, 1336 insertions(+)
+
+static struct qcom_icc_node * const msm8953_pcnoc_nodes[] = {
+ [MAS_SPDM] = &mas_spdm,
+ [MAS_BLSP_1] = &mas_blsp_1,
+ [MAS_BLSP_2] = &mas_blsp_2,
+ [MAS_USB3] = &mas_usb3,
+ [MAS_CRYPTO] = &mas_crypto,
+ [MAS_SDCC_1] = &mas_sdcc_1,
+ [MAS_SDCC_2] = &mas_sdcc_2,
+ [MAS_SNOC_PCNOC] = &mas_snoc_pcnoc,
+ [PCNOC_M_0] = &pcnoc_m_0,
+ [PCNOC_M_1] = &pcnoc_m_1,
+ [PCNOC_INT_1] = &pcnoc_int_1,
+ [PCNOC_INT_2] = &pcnoc_int_2,
+ [PCNOC_S_0] = &pcnoc_s_0,
+ [PCNOC_S_1] = &pcnoc_s_1,
+ [PCNOC_S_2] = &pcnoc_s_2,
+ [PCNOC_S_3] = &pcnoc_s_3,
+ [PCNOC_S_4] = &pcnoc_s_4,
+ [PCNOC_S_6] = &pcnoc_s_6,
+ [PCNOC_S_7] = &pcnoc_s_7,
+ [PCNOC_S_8] = &pcnoc_s_8,
+ [PCNOC_S_9] = &pcnoc_s_9,
+ [SLV_SPDM] = &slv_spdm,
+ [SLV_PDM] = &slv_pdm,
+ [SLV_TCSR] = &slv_tcsr,
+ [SLV_SNOC_CFG] = &slv_snoc_cfg,
+ [SLV_TLMM] = &slv_tlmm,
+ [SLV_MESSAGE_RAM] = &slv_message_ram,
+ [SLV_BLSP_1] = &slv_blsp_1,
+ [SLV_BLSP_2] = &slv_blsp_2,
+ [SLV_PRNG] = &slv_prng,
+ [SLV_CAMERA_SS_CFG] = &slv_camera_ss_cfg,
+ [SLV_DISP_SS_CFG] = &slv_disp_ss_cfg,
+ [SLV_VENUS_CFG] = &slv_venus_cfg,
+ [SLV_GPU_CFG] = &slv_gpu_cfg,
+ [SLV_SDCC_1] = &slv_sdcc_1,
+ [SLV_SDCC_2] = &slv_sdcc_2,
+ [SLV_CRYPTO_0_CFG] = &slv_crypto_0_cfg,
+ [SLV_PMIC_ARB] = &slv_pmic_arb,
+ [SLV_USB3] = &slv_usb3,
+ [SLV_IPA_CFG] = &slv_ipa_cfg,
+ [SLV_TCU] = &slv_tcu,
+ [SLV_PCNOC_SNOC] = &slv_pcnoc_snoc,
+};
+
+static const char * const msm8953_pcnoc_bus_clocks[] = {
+ "bus", "bus_a"
+};
+
+static const char * const msm8953_pcnoc_intf_clocks[] = {
+ "pcnoc_usb3_axi"
+};
+
+static const struct regmap_config msm8953_pcnoc_regmap_config = {
+ .fast_io = true,
+ .max_register = 0x12080,
+ .reg_bits = 32,
+ .reg_stride = 4,
+ .val_bits = 32,
+};
+
+static const struct qcom_icc_desc msm8953_pcnoc = {
+ .type = QCOM_ICC_NOC,
+ .bus_clk_desc = &bus_0_clk,
+ .intf_clocks = msm8953_pcnoc_intf_clocks,
+ .num_intf_clocks = ARRAY_SIZE(msm8953_pcnoc_intf_clocks),
+ .nodes = msm8953_pcnoc_nodes,
+ .num_nodes = ARRAY_SIZE(msm8953_pcnoc_nodes),
+ .qos_offset = 0x7000,
+ .regmap_cfg = &msm8953_pcnoc_regmap_config,
+};