1f80a1d41SAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0 2f80a1d41SAngeloGioacchino Del Regno /* 3f80a1d41SAngeloGioacchino Del Regno * Qualcomm SDM630/SDM636/SDM660 Network-on-Chip (NoC) QoS driver 4f80a1d41SAngeloGioacchino Del Regno * Copyright (C) 2020, AngeloGioacchino Del Regno <kholk11@gmail.com> 5f80a1d41SAngeloGioacchino Del Regno */ 6f80a1d41SAngeloGioacchino Del Regno 7f80a1d41SAngeloGioacchino Del Regno #include <dt-bindings/interconnect/qcom,sdm660.h> 8f80a1d41SAngeloGioacchino Del Regno #include <linux/clk.h> 9f80a1d41SAngeloGioacchino Del Regno #include <linux/device.h> 10f80a1d41SAngeloGioacchino Del Regno #include <linux/interconnect-provider.h> 11f80a1d41SAngeloGioacchino Del Regno #include <linux/io.h> 12f80a1d41SAngeloGioacchino Del Regno #include <linux/module.h> 13f80a1d41SAngeloGioacchino Del Regno #include <linux/of_device.h> 14f80a1d41SAngeloGioacchino Del Regno #include <linux/of_platform.h> 15f80a1d41SAngeloGioacchino Del Regno #include <linux/platform_device.h> 16f80a1d41SAngeloGioacchino Del Regno #include <linux/regmap.h> 17f80a1d41SAngeloGioacchino Del Regno #include <linux/slab.h> 18f80a1d41SAngeloGioacchino Del Regno 19f80a1d41SAngeloGioacchino Del Regno #include "smd-rpm.h" 20f80a1d41SAngeloGioacchino Del Regno 21f80a1d41SAngeloGioacchino Del Regno #define RPM_BUS_MASTER_REQ 0x73616d62 22f80a1d41SAngeloGioacchino Del Regno #define RPM_BUS_SLAVE_REQ 0x766c7362 23f80a1d41SAngeloGioacchino Del Regno 24f80a1d41SAngeloGioacchino Del Regno /* BIMC QoS */ 25f80a1d41SAngeloGioacchino Del Regno #define M_BKE_REG_BASE(n) (0x300 + (0x4000 * n)) 26f80a1d41SAngeloGioacchino Del Regno #define M_BKE_EN_ADDR(n) (M_BKE_REG_BASE(n)) 27f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_ADDR(i, n) (M_BKE_REG_BASE(n) + 0x40 + (0x4 * i)) 28f80a1d41SAngeloGioacchino Del Regno 29f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_LIMITCMDS_MASK 0x80000000 30f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_AREQPRIO_MASK 0x300 31f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_PRIOLVL_MASK 0x3 32f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_AREQPRIO_SHIFT 0x8 33f80a1d41SAngeloGioacchino Del Regno #define M_BKE_HEALTH_CFG_LIMITCMDS_SHIFT 0x1f 34f80a1d41SAngeloGioacchino Del Regno 35f80a1d41SAngeloGioacchino Del Regno #define M_BKE_EN_EN_BMASK 0x1 36f80a1d41SAngeloGioacchino Del Regno 37f80a1d41SAngeloGioacchino Del Regno /* Valid for both NoC and BIMC */ 38*656ba110SDmitry Baryshkov #define NOC_QOS_MODE_INVALID -1 39f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_FIXED 0x0 40f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_LIMITER 0x1 41f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODE_BYPASS 0x2 42f80a1d41SAngeloGioacchino Del Regno 43f80a1d41SAngeloGioacchino Del Regno /* NoC QoS */ 44f80a1d41SAngeloGioacchino Del Regno #define NOC_PERM_MODE_FIXED 1 45f80a1d41SAngeloGioacchino Del Regno #define NOC_PERM_MODE_BYPASS (1 << NOC_QOS_MODE_BYPASS) 46f80a1d41SAngeloGioacchino Del Regno 47f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_PRIORITYn_ADDR(n) (0x8 + (n * 0x1000)) 485833c9b8SShawn Guo #define NOC_QOS_PRIORITY_P1_MASK 0xc 495833c9b8SShawn Guo #define NOC_QOS_PRIORITY_P0_MASK 0x3 50f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_PRIORITY_P1_SHIFT 0x2 51f80a1d41SAngeloGioacchino Del Regno 52f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODEn_ADDR(n) (0xc + (n * 0x1000)) 53f80a1d41SAngeloGioacchino Del Regno #define NOC_QOS_MODEn_MASK 0x3 54f80a1d41SAngeloGioacchino Del Regno 55f80a1d41SAngeloGioacchino Del Regno enum { 56f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_IPA = 1, 57f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_CNOC_A2NOC, 58f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_SDCC_1, 59f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_SDCC_2, 60f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_BLSP_1, 61f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_BLSP_2, 62f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_UFS, 63f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_USB_HS, 64f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_USB3, 65f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_CRYPTO_C0, 66f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_GNOC_BIMC, 67f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_OXILI, 68f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_MNOC_BIMC, 69f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_SNOC_BIMC, 70f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_PIMEM, 71f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_SNOC_CNOC, 72f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_QDSS_DAP, 73f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_APPS_PROC, 74f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_CNOC_MNOC_MMSS_CFG, 75f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_CNOC_MNOC_CFG, 76f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_CPP, 77f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_JPEG, 78f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_MDP_P0, 79f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_MDP_P1, 80f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_VENUS, 81f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_VFE, 82f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_QDSS_ETR, 83f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_QDSS_BAM, 84f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_SNOC_CFG, 85f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_BIMC_SNOC, 86f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_A2NOC_SNOC, 87f80a1d41SAngeloGioacchino Del Regno SDM660_MASTER_GNOC_SNOC, 88f80a1d41SAngeloGioacchino Del Regno 89f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_A2NOC_SNOC, 90f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_EBI, 91f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_HMSS_L3, 92f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_BIMC_SNOC, 93f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CNOC_A2NOC, 94f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MPM, 95f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_PMIC_ARB, 96f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_TLMM_NORTH, 97f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_TCSR, 98f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_PIMEM_CFG, 99f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_IMEM_CFG, 100f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MESSAGE_RAM, 101f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_GLM, 102f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_BIMC_CFG, 103f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_PRNG, 104f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SPDM, 105f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_QDSS_CFG, 106f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CNOC_MNOC_CFG, 107f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SNOC_CFG, 108f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_QM_CFG, 109f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CLK_CTL, 110f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MSS_CFG, 111f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_TLMM_SOUTH, 112f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_UFS_CFG, 113f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_A2NOC_CFG, 114f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_A2NOC_SMMU_CFG, 115f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_GPUSS_CFG, 116f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_AHB2PHY, 117f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_BLSP_1, 118f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SDCC_1, 119f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SDCC_2, 120f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_TLMM_CENTER, 121f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_BLSP_2, 122f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_PDM, 123f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CNOC_MNOC_MMSS_CFG, 124f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_USB_HS, 125f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_USB3_0, 126f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SRVC_CNOC, 127f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_GNOC_BIMC, 128f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_GNOC_SNOC, 129f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CAMERA_CFG, 130f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CAMERA_THROTTLE_CFG, 131f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MISC_CFG, 132f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_VENUS_THROTTLE_CFG, 133f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_VENUS_CFG, 134f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MMSS_CLK_XPU_CFG, 135f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MMSS_CLK_CFG, 136f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MNOC_MPU_CFG, 137f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_DISPLAY_CFG, 138f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CSI_PHY_CFG, 139f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_DISPLAY_THROTTLE_CFG, 140f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SMMU_CFG, 141f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_MNOC_BIMC, 142f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SRVC_MNOC, 143f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_HMSS, 144f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_LPASS, 145f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_WLAN, 146f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_CDSP, 147f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_IPA, 148f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SNOC_BIMC, 149f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SNOC_CNOC, 150f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_IMEM, 151f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_PIMEM, 152f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_QDSS_STM, 153f80a1d41SAngeloGioacchino Del Regno SDM660_SLAVE_SRVC_SNOC, 154f80a1d41SAngeloGioacchino Del Regno 155f80a1d41SAngeloGioacchino Del Regno SDM660_A2NOC, 156f80a1d41SAngeloGioacchino Del Regno SDM660_BIMC, 157f80a1d41SAngeloGioacchino Del Regno SDM660_CNOC, 158f80a1d41SAngeloGioacchino Del Regno SDM660_GNOC, 159f80a1d41SAngeloGioacchino Del Regno SDM660_MNOC, 160f80a1d41SAngeloGioacchino Del Regno SDM660_SNOC, 161f80a1d41SAngeloGioacchino Del Regno }; 162f80a1d41SAngeloGioacchino Del Regno 163f80a1d41SAngeloGioacchino Del Regno #define to_qcom_provider(_provider) \ 164f80a1d41SAngeloGioacchino Del Regno container_of(_provider, struct qcom_icc_provider, provider) 165f80a1d41SAngeloGioacchino Del Regno 166f80a1d41SAngeloGioacchino Del Regno static const struct clk_bulk_data bus_clocks[] = { 167f80a1d41SAngeloGioacchino Del Regno { .id = "bus" }, 168f80a1d41SAngeloGioacchino Del Regno { .id = "bus_a" }, 169f80a1d41SAngeloGioacchino Del Regno }; 170f80a1d41SAngeloGioacchino Del Regno 171f80a1d41SAngeloGioacchino Del Regno static const struct clk_bulk_data bus_mm_clocks[] = { 172f80a1d41SAngeloGioacchino Del Regno { .id = "bus" }, 173f80a1d41SAngeloGioacchino Del Regno { .id = "bus_a" }, 174f80a1d41SAngeloGioacchino Del Regno { .id = "iface" }, 175f80a1d41SAngeloGioacchino Del Regno }; 176f80a1d41SAngeloGioacchino Del Regno 17713404ac8SShawn Guo static const struct clk_bulk_data bus_a2noc_clocks[] = { 17813404ac8SShawn Guo { .id = "bus" }, 17913404ac8SShawn Guo { .id = "bus_a" }, 18013404ac8SShawn Guo { .id = "ipa" }, 18113404ac8SShawn Guo { .id = "ufs_axi" }, 18213404ac8SShawn Guo { .id = "aggre2_ufs_axi" }, 18313404ac8SShawn Guo { .id = "aggre2_usb3_axi" }, 18413404ac8SShawn Guo { .id = "cfg_noc_usb2_axi" }, 18513404ac8SShawn Guo }; 18613404ac8SShawn Guo 187f80a1d41SAngeloGioacchino Del Regno /** 188f80a1d41SAngeloGioacchino Del Regno * struct qcom_icc_provider - Qualcomm specific interconnect provider 189f80a1d41SAngeloGioacchino Del Regno * @provider: generic interconnect provider 190f80a1d41SAngeloGioacchino Del Regno * @bus_clks: the clk_bulk_data table of bus clocks 191f80a1d41SAngeloGioacchino Del Regno * @num_clks: the total number of clk_bulk_data entries 192f80a1d41SAngeloGioacchino Del Regno * @is_bimc_node: indicates whether to use bimc specific setting 1937014dfeeSGeorgi Djakov * @regmap: regmap for QoS registers read/write access 194f80a1d41SAngeloGioacchino Del Regno * @mmio: NoC base iospace 195f80a1d41SAngeloGioacchino Del Regno */ 196f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider { 197f80a1d41SAngeloGioacchino Del Regno struct icc_provider provider; 198f80a1d41SAngeloGioacchino Del Regno struct clk_bulk_data *bus_clks; 199f80a1d41SAngeloGioacchino Del Regno int num_clks; 200f80a1d41SAngeloGioacchino Del Regno bool is_bimc_node; 201f80a1d41SAngeloGioacchino Del Regno struct regmap *regmap; 202f80a1d41SAngeloGioacchino Del Regno void __iomem *mmio; 203f80a1d41SAngeloGioacchino Del Regno }; 204f80a1d41SAngeloGioacchino Del Regno 205f80a1d41SAngeloGioacchino Del Regno /** 206f80a1d41SAngeloGioacchino Del Regno * struct qcom_icc_qos - Qualcomm specific interconnect QoS parameters 207f80a1d41SAngeloGioacchino Del Regno * @areq_prio: node requests priority 208f80a1d41SAngeloGioacchino Del Regno * @prio_level: priority level for bus communication 209f80a1d41SAngeloGioacchino Del Regno * @limit_commands: activate/deactivate limiter mode during runtime 210f80a1d41SAngeloGioacchino Del Regno * @ap_owned: indicates if the node is owned by the AP or by the RPM 211f80a1d41SAngeloGioacchino Del Regno * @qos_mode: default qos mode for this node 212f80a1d41SAngeloGioacchino Del Regno * @qos_port: qos port number for finding qos registers of this node 213f80a1d41SAngeloGioacchino Del Regno */ 214f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_qos { 215f80a1d41SAngeloGioacchino Del Regno u32 areq_prio; 216f80a1d41SAngeloGioacchino Del Regno u32 prio_level; 217f80a1d41SAngeloGioacchino Del Regno bool limit_commands; 218f80a1d41SAngeloGioacchino Del Regno bool ap_owned; 219f80a1d41SAngeloGioacchino Del Regno int qos_mode; 220f80a1d41SAngeloGioacchino Del Regno int qos_port; 221f80a1d41SAngeloGioacchino Del Regno }; 222f80a1d41SAngeloGioacchino Del Regno 223f80a1d41SAngeloGioacchino Del Regno /** 224f80a1d41SAngeloGioacchino Del Regno * struct qcom_icc_node - Qualcomm specific interconnect nodes 225f80a1d41SAngeloGioacchino Del Regno * @name: the node name used in debugfs 226f80a1d41SAngeloGioacchino Del Regno * @id: a unique node identifier 227f80a1d41SAngeloGioacchino Del Regno * @links: an array of nodes where we can go next while traversing 228f80a1d41SAngeloGioacchino Del Regno * @num_links: the total number of @links 229f80a1d41SAngeloGioacchino Del Regno * @buswidth: width of the interconnect between a node and the bus (bytes) 230f80a1d41SAngeloGioacchino Del Regno * @mas_rpm_id: RPM id for devices that are bus masters 231f80a1d41SAngeloGioacchino Del Regno * @slv_rpm_id: RPM id for devices that are bus slaves 232f80a1d41SAngeloGioacchino Del Regno * @qos: NoC QoS setting parameters 233f80a1d41SAngeloGioacchino Del Regno * @rate: current bus clock rate in Hz 234f80a1d41SAngeloGioacchino Del Regno */ 235f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node { 236f80a1d41SAngeloGioacchino Del Regno unsigned char *name; 237f80a1d41SAngeloGioacchino Del Regno u16 id; 2387ae77e60SDmitry Baryshkov const u16 *links; 239f80a1d41SAngeloGioacchino Del Regno u16 num_links; 240f80a1d41SAngeloGioacchino Del Regno u16 buswidth; 241f80a1d41SAngeloGioacchino Del Regno int mas_rpm_id; 242f80a1d41SAngeloGioacchino Del Regno int slv_rpm_id; 243f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_qos qos; 244f80a1d41SAngeloGioacchino Del Regno u64 rate; 245f80a1d41SAngeloGioacchino Del Regno }; 246f80a1d41SAngeloGioacchino Del Regno 247f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_desc { 248f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node **nodes; 249f80a1d41SAngeloGioacchino Del Regno size_t num_nodes; 250f80a1d41SAngeloGioacchino Del Regno const struct regmap_config *regmap_cfg; 251f80a1d41SAngeloGioacchino Del Regno }; 252f80a1d41SAngeloGioacchino Del Regno 2537ae77e60SDmitry Baryshkov static const u16 mas_ipa_links[] = { 2547ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 2557ae77e60SDmitry Baryshkov }; 256f80a1d41SAngeloGioacchino Del Regno 2577ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_ipa = { 2587ae77e60SDmitry Baryshkov .name = "mas_ipa", 2597ae77e60SDmitry Baryshkov .id = SDM660_MASTER_IPA, 2607ae77e60SDmitry Baryshkov .buswidth = 8, 2617ae77e60SDmitry Baryshkov .mas_rpm_id = 59, 2627ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 2637ae77e60SDmitry Baryshkov .qos.ap_owned = true, 2647ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 2657ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 2667ae77e60SDmitry Baryshkov .qos.prio_level = 1, 2677ae77e60SDmitry Baryshkov .qos.qos_port = 3, 2687ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_ipa_links), 2697ae77e60SDmitry Baryshkov .links = mas_ipa_links, 2707ae77e60SDmitry Baryshkov }; 2717ae77e60SDmitry Baryshkov 2727ae77e60SDmitry Baryshkov static const u16 mas_cnoc_a2noc_links[] = { 2737ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 2747ae77e60SDmitry Baryshkov }; 2757ae77e60SDmitry Baryshkov 2767ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_a2noc = { 2777ae77e60SDmitry Baryshkov .name = "mas_cnoc_a2noc", 2787ae77e60SDmitry Baryshkov .id = SDM660_MASTER_CNOC_A2NOC, 2797ae77e60SDmitry Baryshkov .buswidth = 8, 2807ae77e60SDmitry Baryshkov .mas_rpm_id = 146, 2817ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 2827ae77e60SDmitry Baryshkov .qos.ap_owned = true, 283*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 2847ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_cnoc_a2noc_links), 2857ae77e60SDmitry Baryshkov .links = mas_cnoc_a2noc_links, 2867ae77e60SDmitry Baryshkov }; 2877ae77e60SDmitry Baryshkov 2887ae77e60SDmitry Baryshkov static const u16 mas_sdcc_1_links[] = { 2897ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 2907ae77e60SDmitry Baryshkov }; 2917ae77e60SDmitry Baryshkov 2927ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_sdcc_1 = { 2937ae77e60SDmitry Baryshkov .name = "mas_sdcc_1", 2947ae77e60SDmitry Baryshkov .id = SDM660_MASTER_SDCC_1, 2957ae77e60SDmitry Baryshkov .buswidth = 8, 2967ae77e60SDmitry Baryshkov .mas_rpm_id = 33, 2977ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 2987ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_sdcc_1_links), 2997ae77e60SDmitry Baryshkov .links = mas_sdcc_1_links, 3007ae77e60SDmitry Baryshkov }; 3017ae77e60SDmitry Baryshkov 3027ae77e60SDmitry Baryshkov static const u16 mas_sdcc_2_links[] = { 3037ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3047ae77e60SDmitry Baryshkov }; 3057ae77e60SDmitry Baryshkov 3067ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_sdcc_2 = { 3077ae77e60SDmitry Baryshkov .name = "mas_sdcc_2", 3087ae77e60SDmitry Baryshkov .id = SDM660_MASTER_SDCC_2, 3097ae77e60SDmitry Baryshkov .buswidth = 8, 3107ae77e60SDmitry Baryshkov .mas_rpm_id = 35, 3117ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3127ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_sdcc_2_links), 3137ae77e60SDmitry Baryshkov .links = mas_sdcc_2_links, 3147ae77e60SDmitry Baryshkov }; 3157ae77e60SDmitry Baryshkov 3167ae77e60SDmitry Baryshkov static const u16 mas_blsp_1_links[] = { 3177ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3187ae77e60SDmitry Baryshkov }; 3197ae77e60SDmitry Baryshkov 3207ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_blsp_1 = { 3217ae77e60SDmitry Baryshkov .name = "mas_blsp_1", 3227ae77e60SDmitry Baryshkov .id = SDM660_MASTER_BLSP_1, 3237ae77e60SDmitry Baryshkov .buswidth = 4, 3247ae77e60SDmitry Baryshkov .mas_rpm_id = 41, 3257ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3267ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_blsp_1_links), 3277ae77e60SDmitry Baryshkov .links = mas_blsp_1_links, 3287ae77e60SDmitry Baryshkov }; 3297ae77e60SDmitry Baryshkov 3307ae77e60SDmitry Baryshkov static const u16 mas_blsp_2_links[] = { 3317ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3327ae77e60SDmitry Baryshkov }; 3337ae77e60SDmitry Baryshkov 3347ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_blsp_2 = { 3357ae77e60SDmitry Baryshkov .name = "mas_blsp_2", 3367ae77e60SDmitry Baryshkov .id = SDM660_MASTER_BLSP_2, 3377ae77e60SDmitry Baryshkov .buswidth = 4, 3387ae77e60SDmitry Baryshkov .mas_rpm_id = 39, 3397ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3407ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_blsp_2_links), 3417ae77e60SDmitry Baryshkov .links = mas_blsp_2_links, 3427ae77e60SDmitry Baryshkov }; 3437ae77e60SDmitry Baryshkov 3447ae77e60SDmitry Baryshkov static const u16 mas_ufs_links[] = { 3457ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3467ae77e60SDmitry Baryshkov }; 3477ae77e60SDmitry Baryshkov 3487ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_ufs = { 3497ae77e60SDmitry Baryshkov .name = "mas_ufs", 3507ae77e60SDmitry Baryshkov .id = SDM660_MASTER_UFS, 3517ae77e60SDmitry Baryshkov .buswidth = 8, 3527ae77e60SDmitry Baryshkov .mas_rpm_id = 68, 3537ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3547ae77e60SDmitry Baryshkov .qos.ap_owned = true, 3557ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 3567ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 3577ae77e60SDmitry Baryshkov .qos.prio_level = 1, 3587ae77e60SDmitry Baryshkov .qos.qos_port = 4, 3597ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_ufs_links), 3607ae77e60SDmitry Baryshkov .links = mas_ufs_links, 3617ae77e60SDmitry Baryshkov }; 3627ae77e60SDmitry Baryshkov 3637ae77e60SDmitry Baryshkov static const u16 mas_usb_hs_links[] = { 3647ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3657ae77e60SDmitry Baryshkov }; 3667ae77e60SDmitry Baryshkov 3677ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_usb_hs = { 3687ae77e60SDmitry Baryshkov .name = "mas_usb_hs", 3697ae77e60SDmitry Baryshkov .id = SDM660_MASTER_USB_HS, 3707ae77e60SDmitry Baryshkov .buswidth = 8, 3717ae77e60SDmitry Baryshkov .mas_rpm_id = 42, 3727ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3737ae77e60SDmitry Baryshkov .qos.ap_owned = true, 3747ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 3757ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 3767ae77e60SDmitry Baryshkov .qos.prio_level = 1, 3777ae77e60SDmitry Baryshkov .qos.qos_port = 1, 3787ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_usb_hs_links), 3797ae77e60SDmitry Baryshkov .links = mas_usb_hs_links, 3807ae77e60SDmitry Baryshkov }; 3817ae77e60SDmitry Baryshkov 3827ae77e60SDmitry Baryshkov static const u16 mas_usb3_links[] = { 3837ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 3847ae77e60SDmitry Baryshkov }; 3857ae77e60SDmitry Baryshkov 3867ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_usb3 = { 3877ae77e60SDmitry Baryshkov .name = "mas_usb3", 3887ae77e60SDmitry Baryshkov .id = SDM660_MASTER_USB3, 3897ae77e60SDmitry Baryshkov .buswidth = 8, 3907ae77e60SDmitry Baryshkov .mas_rpm_id = 32, 3917ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 3927ae77e60SDmitry Baryshkov .qos.ap_owned = true, 3937ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 3947ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 3957ae77e60SDmitry Baryshkov .qos.prio_level = 1, 3967ae77e60SDmitry Baryshkov .qos.qos_port = 2, 3977ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_usb3_links), 3987ae77e60SDmitry Baryshkov .links = mas_usb3_links, 3997ae77e60SDmitry Baryshkov }; 4007ae77e60SDmitry Baryshkov 4017ae77e60SDmitry Baryshkov static const u16 mas_crypto_links[] = { 4027ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SNOC 4037ae77e60SDmitry Baryshkov }; 4047ae77e60SDmitry Baryshkov 4057ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_crypto = { 4067ae77e60SDmitry Baryshkov .name = "mas_crypto", 4077ae77e60SDmitry Baryshkov .id = SDM660_MASTER_CRYPTO_C0, 4087ae77e60SDmitry Baryshkov .buswidth = 8, 4097ae77e60SDmitry Baryshkov .mas_rpm_id = 23, 4107ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 4117ae77e60SDmitry Baryshkov .qos.ap_owned = true, 4127ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 4137ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 4147ae77e60SDmitry Baryshkov .qos.prio_level = 1, 4157ae77e60SDmitry Baryshkov .qos.qos_port = 11, 4167ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_crypto_links), 4177ae77e60SDmitry Baryshkov .links = mas_crypto_links, 4187ae77e60SDmitry Baryshkov }; 4197ae77e60SDmitry Baryshkov 4207ae77e60SDmitry Baryshkov static const u16 mas_gnoc_bimc_links[] = { 4217ae77e60SDmitry Baryshkov SDM660_SLAVE_EBI 4227ae77e60SDmitry Baryshkov }; 4237ae77e60SDmitry Baryshkov 4247ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_gnoc_bimc = { 4257ae77e60SDmitry Baryshkov .name = "mas_gnoc_bimc", 4267ae77e60SDmitry Baryshkov .id = SDM660_MASTER_GNOC_BIMC, 4277ae77e60SDmitry Baryshkov .buswidth = 4, 4287ae77e60SDmitry Baryshkov .mas_rpm_id = 144, 4297ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 4307ae77e60SDmitry Baryshkov .qos.ap_owned = true, 4317ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 4327ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 4337ae77e60SDmitry Baryshkov .qos.prio_level = 0, 4347ae77e60SDmitry Baryshkov .qos.qos_port = 0, 4357ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_gnoc_bimc_links), 4367ae77e60SDmitry Baryshkov .links = mas_gnoc_bimc_links, 4377ae77e60SDmitry Baryshkov }; 4387ae77e60SDmitry Baryshkov 4397ae77e60SDmitry Baryshkov static const u16 mas_oxili_links[] = { 4407ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS_L3, 4417ae77e60SDmitry Baryshkov SDM660_SLAVE_EBI, 4427ae77e60SDmitry Baryshkov SDM660_SLAVE_BIMC_SNOC 4437ae77e60SDmitry Baryshkov }; 4447ae77e60SDmitry Baryshkov 4457ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_oxili = { 4467ae77e60SDmitry Baryshkov .name = "mas_oxili", 4477ae77e60SDmitry Baryshkov .id = SDM660_MASTER_OXILI, 4487ae77e60SDmitry Baryshkov .buswidth = 4, 4497ae77e60SDmitry Baryshkov .mas_rpm_id = 6, 4507ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 4517ae77e60SDmitry Baryshkov .qos.ap_owned = true, 4527ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 4537ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 4547ae77e60SDmitry Baryshkov .qos.prio_level = 0, 4557ae77e60SDmitry Baryshkov .qos.qos_port = 1, 4567ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_oxili_links), 4577ae77e60SDmitry Baryshkov .links = mas_oxili_links, 4587ae77e60SDmitry Baryshkov }; 4597ae77e60SDmitry Baryshkov 4607ae77e60SDmitry Baryshkov static const u16 mas_mnoc_bimc_links[] = { 4617ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS_L3, 4627ae77e60SDmitry Baryshkov SDM660_SLAVE_EBI, 4637ae77e60SDmitry Baryshkov SDM660_SLAVE_BIMC_SNOC 4647ae77e60SDmitry Baryshkov }; 4657ae77e60SDmitry Baryshkov 4667ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mnoc_bimc = { 4677ae77e60SDmitry Baryshkov .name = "mas_mnoc_bimc", 4687ae77e60SDmitry Baryshkov .id = SDM660_MASTER_MNOC_BIMC, 4697ae77e60SDmitry Baryshkov .buswidth = 4, 4707ae77e60SDmitry Baryshkov .mas_rpm_id = 2, 4717ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 4727ae77e60SDmitry Baryshkov .qos.ap_owned = true, 4737ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 4747ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 4757ae77e60SDmitry Baryshkov .qos.prio_level = 0, 4767ae77e60SDmitry Baryshkov .qos.qos_port = 2, 4777ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_mnoc_bimc_links), 4787ae77e60SDmitry Baryshkov .links = mas_mnoc_bimc_links, 4797ae77e60SDmitry Baryshkov }; 4807ae77e60SDmitry Baryshkov 4817ae77e60SDmitry Baryshkov static const u16 mas_snoc_bimc_links[] = { 4827ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS_L3, 4837ae77e60SDmitry Baryshkov SDM660_SLAVE_EBI 4847ae77e60SDmitry Baryshkov }; 4857ae77e60SDmitry Baryshkov 4867ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_bimc = { 4877ae77e60SDmitry Baryshkov .name = "mas_snoc_bimc", 4887ae77e60SDmitry Baryshkov .id = SDM660_MASTER_SNOC_BIMC, 4897ae77e60SDmitry Baryshkov .buswidth = 4, 4907ae77e60SDmitry Baryshkov .mas_rpm_id = 3, 4917ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 4927ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 4937ae77e60SDmitry Baryshkov .links = mas_snoc_bimc_links, 4947ae77e60SDmitry Baryshkov }; 4957ae77e60SDmitry Baryshkov 4967ae77e60SDmitry Baryshkov static const u16 mas_pimem_links[] = { 4977ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS_L3, 4987ae77e60SDmitry Baryshkov SDM660_SLAVE_EBI 4997ae77e60SDmitry Baryshkov }; 5007ae77e60SDmitry Baryshkov 5017ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_pimem = { 5027ae77e60SDmitry Baryshkov .name = "mas_pimem", 5037ae77e60SDmitry Baryshkov .id = SDM660_MASTER_PIMEM, 5047ae77e60SDmitry Baryshkov .buswidth = 4, 5057ae77e60SDmitry Baryshkov .mas_rpm_id = 113, 5067ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 5077ae77e60SDmitry Baryshkov .qos.ap_owned = true, 5087ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 5097ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 5107ae77e60SDmitry Baryshkov .qos.prio_level = 1, 5117ae77e60SDmitry Baryshkov .qos.qos_port = 4, 5127ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_pimem_links), 5137ae77e60SDmitry Baryshkov .links = mas_pimem_links, 5147ae77e60SDmitry Baryshkov }; 5157ae77e60SDmitry Baryshkov 5167ae77e60SDmitry Baryshkov static const u16 mas_snoc_cnoc_links[] = { 5177ae77e60SDmitry Baryshkov SDM660_SLAVE_CLK_CTL, 5187ae77e60SDmitry Baryshkov SDM660_SLAVE_QDSS_CFG, 5197ae77e60SDmitry Baryshkov SDM660_SLAVE_QM_CFG, 5207ae77e60SDmitry Baryshkov SDM660_SLAVE_SRVC_CNOC, 5217ae77e60SDmitry Baryshkov SDM660_SLAVE_UFS_CFG, 5227ae77e60SDmitry Baryshkov SDM660_SLAVE_TCSR, 5237ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SMMU_CFG, 5247ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CFG, 5257ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_SOUTH, 5267ae77e60SDmitry Baryshkov SDM660_SLAVE_MPM, 5277ae77e60SDmitry Baryshkov SDM660_SLAVE_CNOC_MNOC_MMSS_CFG, 5287ae77e60SDmitry Baryshkov SDM660_SLAVE_SDCC_2, 5297ae77e60SDmitry Baryshkov SDM660_SLAVE_SDCC_1, 5307ae77e60SDmitry Baryshkov SDM660_SLAVE_SPDM, 5317ae77e60SDmitry Baryshkov SDM660_SLAVE_PMIC_ARB, 5327ae77e60SDmitry Baryshkov SDM660_SLAVE_PRNG, 5337ae77e60SDmitry Baryshkov SDM660_SLAVE_MSS_CFG, 5347ae77e60SDmitry Baryshkov SDM660_SLAVE_GPUSS_CFG, 5357ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM_CFG, 5367ae77e60SDmitry Baryshkov SDM660_SLAVE_USB3_0, 5377ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_CFG, 5387ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_NORTH, 5397ae77e60SDmitry Baryshkov SDM660_SLAVE_USB_HS, 5407ae77e60SDmitry Baryshkov SDM660_SLAVE_PDM, 5417ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_CENTER, 5427ae77e60SDmitry Baryshkov SDM660_SLAVE_AHB2PHY, 5437ae77e60SDmitry Baryshkov SDM660_SLAVE_BLSP_2, 5447ae77e60SDmitry Baryshkov SDM660_SLAVE_BLSP_1, 5457ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM_CFG, 5467ae77e60SDmitry Baryshkov SDM660_SLAVE_GLM, 5477ae77e60SDmitry Baryshkov SDM660_SLAVE_MESSAGE_RAM, 5487ae77e60SDmitry Baryshkov SDM660_SLAVE_BIMC_CFG, 5497ae77e60SDmitry Baryshkov SDM660_SLAVE_CNOC_MNOC_CFG 5507ae77e60SDmitry Baryshkov }; 5517ae77e60SDmitry Baryshkov 5527ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_cnoc = { 5537ae77e60SDmitry Baryshkov .name = "mas_snoc_cnoc", 5547ae77e60SDmitry Baryshkov .id = SDM660_MASTER_SNOC_CNOC, 5557ae77e60SDmitry Baryshkov .buswidth = 8, 5567ae77e60SDmitry Baryshkov .mas_rpm_id = 52, 5577ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 5587ae77e60SDmitry Baryshkov .qos.ap_owned = true, 559*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 5607ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_snoc_cnoc_links), 5617ae77e60SDmitry Baryshkov .links = mas_snoc_cnoc_links, 5627ae77e60SDmitry Baryshkov }; 5637ae77e60SDmitry Baryshkov 5647ae77e60SDmitry Baryshkov static const u16 mas_qdss_dap_links[] = { 5657ae77e60SDmitry Baryshkov SDM660_SLAVE_CLK_CTL, 5667ae77e60SDmitry Baryshkov SDM660_SLAVE_QDSS_CFG, 5677ae77e60SDmitry Baryshkov SDM660_SLAVE_QM_CFG, 5687ae77e60SDmitry Baryshkov SDM660_SLAVE_SRVC_CNOC, 5697ae77e60SDmitry Baryshkov SDM660_SLAVE_UFS_CFG, 5707ae77e60SDmitry Baryshkov SDM660_SLAVE_TCSR, 5717ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_SMMU_CFG, 5727ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CFG, 5737ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_SOUTH, 5747ae77e60SDmitry Baryshkov SDM660_SLAVE_MPM, 5757ae77e60SDmitry Baryshkov SDM660_SLAVE_CNOC_MNOC_MMSS_CFG, 5767ae77e60SDmitry Baryshkov SDM660_SLAVE_SDCC_2, 5777ae77e60SDmitry Baryshkov SDM660_SLAVE_SDCC_1, 5787ae77e60SDmitry Baryshkov SDM660_SLAVE_SPDM, 5797ae77e60SDmitry Baryshkov SDM660_SLAVE_PMIC_ARB, 5807ae77e60SDmitry Baryshkov SDM660_SLAVE_PRNG, 5817ae77e60SDmitry Baryshkov SDM660_SLAVE_MSS_CFG, 5827ae77e60SDmitry Baryshkov SDM660_SLAVE_GPUSS_CFG, 5837ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM_CFG, 5847ae77e60SDmitry Baryshkov SDM660_SLAVE_USB3_0, 5857ae77e60SDmitry Baryshkov SDM660_SLAVE_A2NOC_CFG, 5867ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_NORTH, 5877ae77e60SDmitry Baryshkov SDM660_SLAVE_USB_HS, 5887ae77e60SDmitry Baryshkov SDM660_SLAVE_PDM, 5897ae77e60SDmitry Baryshkov SDM660_SLAVE_TLMM_CENTER, 5907ae77e60SDmitry Baryshkov SDM660_SLAVE_AHB2PHY, 5917ae77e60SDmitry Baryshkov SDM660_SLAVE_BLSP_2, 5927ae77e60SDmitry Baryshkov SDM660_SLAVE_BLSP_1, 5937ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM_CFG, 5947ae77e60SDmitry Baryshkov SDM660_SLAVE_GLM, 5957ae77e60SDmitry Baryshkov SDM660_SLAVE_MESSAGE_RAM, 5967ae77e60SDmitry Baryshkov SDM660_SLAVE_CNOC_A2NOC, 5977ae77e60SDmitry Baryshkov SDM660_SLAVE_BIMC_CFG, 5987ae77e60SDmitry Baryshkov SDM660_SLAVE_CNOC_MNOC_CFG 5997ae77e60SDmitry Baryshkov }; 6007ae77e60SDmitry Baryshkov 6017ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_dap = { 6027ae77e60SDmitry Baryshkov .name = "mas_qdss_dap", 6037ae77e60SDmitry Baryshkov .id = SDM660_MASTER_QDSS_DAP, 6047ae77e60SDmitry Baryshkov .buswidth = 8, 6057ae77e60SDmitry Baryshkov .mas_rpm_id = 49, 6067ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 6077ae77e60SDmitry Baryshkov .qos.ap_owned = true, 608*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 6097ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_qdss_dap_links), 6107ae77e60SDmitry Baryshkov .links = mas_qdss_dap_links, 6117ae77e60SDmitry Baryshkov }; 6127ae77e60SDmitry Baryshkov 6137ae77e60SDmitry Baryshkov static const u16 mas_apss_proc_links[] = { 6147ae77e60SDmitry Baryshkov SDM660_SLAVE_GNOC_SNOC, 6157ae77e60SDmitry Baryshkov SDM660_SLAVE_GNOC_BIMC 6167ae77e60SDmitry Baryshkov }; 6177ae77e60SDmitry Baryshkov 6187ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_apss_proc = { 6197ae77e60SDmitry Baryshkov .name = "mas_apss_proc", 6207ae77e60SDmitry Baryshkov .id = SDM660_MASTER_APPS_PROC, 6217ae77e60SDmitry Baryshkov .buswidth = 16, 6227ae77e60SDmitry Baryshkov .mas_rpm_id = 0, 6237ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 6247ae77e60SDmitry Baryshkov .qos.ap_owned = true, 625*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 6267ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_apss_proc_links), 6277ae77e60SDmitry Baryshkov .links = mas_apss_proc_links, 6287ae77e60SDmitry Baryshkov }; 6297ae77e60SDmitry Baryshkov 6307ae77e60SDmitry Baryshkov static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = { 6317ae77e60SDmitry Baryshkov SDM660_SLAVE_VENUS_THROTTLE_CFG, 6327ae77e60SDmitry Baryshkov SDM660_SLAVE_VENUS_CFG, 6337ae77e60SDmitry Baryshkov SDM660_SLAVE_CAMERA_THROTTLE_CFG, 6347ae77e60SDmitry Baryshkov SDM660_SLAVE_SMMU_CFG, 6357ae77e60SDmitry Baryshkov SDM660_SLAVE_CAMERA_CFG, 6367ae77e60SDmitry Baryshkov SDM660_SLAVE_CSI_PHY_CFG, 6377ae77e60SDmitry Baryshkov SDM660_SLAVE_DISPLAY_THROTTLE_CFG, 6387ae77e60SDmitry Baryshkov SDM660_SLAVE_DISPLAY_CFG, 6397ae77e60SDmitry Baryshkov SDM660_SLAVE_MMSS_CLK_CFG, 6407ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_MPU_CFG, 6417ae77e60SDmitry Baryshkov SDM660_SLAVE_MISC_CFG, 6427ae77e60SDmitry Baryshkov SDM660_SLAVE_MMSS_CLK_XPU_CFG 6437ae77e60SDmitry Baryshkov }; 6447ae77e60SDmitry Baryshkov 6457ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = { 6467ae77e60SDmitry Baryshkov .name = "mas_cnoc_mnoc_mmss_cfg", 6477ae77e60SDmitry Baryshkov .id = SDM660_MASTER_CNOC_MNOC_MMSS_CFG, 6487ae77e60SDmitry Baryshkov .buswidth = 8, 6497ae77e60SDmitry Baryshkov .mas_rpm_id = 4, 6507ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 6517ae77e60SDmitry Baryshkov .qos.ap_owned = true, 652*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 6537ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links), 6547ae77e60SDmitry Baryshkov .links = mas_cnoc_mnoc_mmss_cfg_links, 6557ae77e60SDmitry Baryshkov }; 6567ae77e60SDmitry Baryshkov 6577ae77e60SDmitry Baryshkov static const u16 mas_cnoc_mnoc_cfg_links[] = { 6587ae77e60SDmitry Baryshkov SDM660_SLAVE_SRVC_MNOC 6597ae77e60SDmitry Baryshkov }; 6607ae77e60SDmitry Baryshkov 6617ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cnoc_mnoc_cfg = { 6627ae77e60SDmitry Baryshkov .name = "mas_cnoc_mnoc_cfg", 6637ae77e60SDmitry Baryshkov .id = SDM660_MASTER_CNOC_MNOC_CFG, 6647ae77e60SDmitry Baryshkov .buswidth = 4, 6657ae77e60SDmitry Baryshkov .mas_rpm_id = 5, 6667ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 6677ae77e60SDmitry Baryshkov .qos.ap_owned = true, 668*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 6697ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links), 6707ae77e60SDmitry Baryshkov .links = mas_cnoc_mnoc_cfg_links, 6717ae77e60SDmitry Baryshkov }; 6727ae77e60SDmitry Baryshkov 6737ae77e60SDmitry Baryshkov static const u16 mas_cpp_links[] = { 6747ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 6757ae77e60SDmitry Baryshkov }; 6767ae77e60SDmitry Baryshkov 6777ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_cpp = { 6787ae77e60SDmitry Baryshkov .name = "mas_cpp", 6797ae77e60SDmitry Baryshkov .id = SDM660_MASTER_CPP, 6807ae77e60SDmitry Baryshkov .buswidth = 16, 6817ae77e60SDmitry Baryshkov .mas_rpm_id = 115, 6827ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 6837ae77e60SDmitry Baryshkov .qos.ap_owned = true, 6847ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 6857ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 6867ae77e60SDmitry Baryshkov .qos.prio_level = 0, 6877ae77e60SDmitry Baryshkov .qos.qos_port = 4, 6887ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_cpp_links), 6897ae77e60SDmitry Baryshkov .links = mas_cpp_links, 6907ae77e60SDmitry Baryshkov }; 6917ae77e60SDmitry Baryshkov 6927ae77e60SDmitry Baryshkov static const u16 mas_jpeg_links[] = { 6937ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 6947ae77e60SDmitry Baryshkov }; 6957ae77e60SDmitry Baryshkov 6967ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_jpeg = { 6977ae77e60SDmitry Baryshkov .name = "mas_jpeg", 6987ae77e60SDmitry Baryshkov .id = SDM660_MASTER_JPEG, 6997ae77e60SDmitry Baryshkov .buswidth = 16, 7007ae77e60SDmitry Baryshkov .mas_rpm_id = 7, 7017ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 7027ae77e60SDmitry Baryshkov .qos.ap_owned = true, 7037ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 7047ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 7057ae77e60SDmitry Baryshkov .qos.prio_level = 0, 7067ae77e60SDmitry Baryshkov .qos.qos_port = 6, 7077ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_jpeg_links), 7087ae77e60SDmitry Baryshkov .links = mas_jpeg_links, 7097ae77e60SDmitry Baryshkov }; 7107ae77e60SDmitry Baryshkov 7117ae77e60SDmitry Baryshkov static const u16 mas_mdp_p0_links[] = { 7127ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 7137ae77e60SDmitry Baryshkov }; 7147ae77e60SDmitry Baryshkov 7157ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mdp_p0 = { 7167ae77e60SDmitry Baryshkov .name = "mas_mdp_p0", 7177ae77e60SDmitry Baryshkov .id = SDM660_MASTER_MDP_P0, 7187ae77e60SDmitry Baryshkov .buswidth = 16, 7197ae77e60SDmitry Baryshkov .mas_rpm_id = 8, 7207ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 7217ae77e60SDmitry Baryshkov .qos.ap_owned = true, 7227ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 7237ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 7247ae77e60SDmitry Baryshkov .qos.prio_level = 0, 7257ae77e60SDmitry Baryshkov .qos.qos_port = 0, 7267ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_mdp_p0_links), 7277ae77e60SDmitry Baryshkov .links = mas_mdp_p0_links, 7287ae77e60SDmitry Baryshkov }; 7297ae77e60SDmitry Baryshkov 7307ae77e60SDmitry Baryshkov static const u16 mas_mdp_p1_links[] = { 7317ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 7327ae77e60SDmitry Baryshkov }; 7337ae77e60SDmitry Baryshkov 7347ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_mdp_p1 = { 7357ae77e60SDmitry Baryshkov .name = "mas_mdp_p1", 7367ae77e60SDmitry Baryshkov .id = SDM660_MASTER_MDP_P1, 7377ae77e60SDmitry Baryshkov .buswidth = 16, 7387ae77e60SDmitry Baryshkov .mas_rpm_id = 61, 7397ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 7407ae77e60SDmitry Baryshkov .qos.ap_owned = true, 7417ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 7427ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 7437ae77e60SDmitry Baryshkov .qos.prio_level = 0, 7447ae77e60SDmitry Baryshkov .qos.qos_port = 1, 7457ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_mdp_p1_links), 7467ae77e60SDmitry Baryshkov .links = mas_mdp_p1_links, 7477ae77e60SDmitry Baryshkov }; 7487ae77e60SDmitry Baryshkov 7497ae77e60SDmitry Baryshkov static const u16 mas_venus_links[] = { 7507ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 7517ae77e60SDmitry Baryshkov }; 7527ae77e60SDmitry Baryshkov 7537ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_venus = { 7547ae77e60SDmitry Baryshkov .name = "mas_venus", 7557ae77e60SDmitry Baryshkov .id = SDM660_MASTER_VENUS, 7567ae77e60SDmitry Baryshkov .buswidth = 16, 7577ae77e60SDmitry Baryshkov .mas_rpm_id = 9, 7587ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 7597ae77e60SDmitry Baryshkov .qos.ap_owned = true, 7607ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 7617ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 7627ae77e60SDmitry Baryshkov .qos.prio_level = 0, 7637ae77e60SDmitry Baryshkov .qos.qos_port = 1, 7647ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_venus_links), 7657ae77e60SDmitry Baryshkov .links = mas_venus_links, 7667ae77e60SDmitry Baryshkov }; 7677ae77e60SDmitry Baryshkov 7687ae77e60SDmitry Baryshkov static const u16 mas_vfe_links[] = { 7697ae77e60SDmitry Baryshkov SDM660_SLAVE_MNOC_BIMC 7707ae77e60SDmitry Baryshkov }; 7717ae77e60SDmitry Baryshkov 7727ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_vfe = { 7737ae77e60SDmitry Baryshkov .name = "mas_vfe", 7747ae77e60SDmitry Baryshkov .id = SDM660_MASTER_VFE, 7757ae77e60SDmitry Baryshkov .buswidth = 16, 7767ae77e60SDmitry Baryshkov .mas_rpm_id = 11, 7777ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 7787ae77e60SDmitry Baryshkov .qos.ap_owned = true, 7797ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_BYPASS, 7807ae77e60SDmitry Baryshkov .qos.areq_prio = 0, 7817ae77e60SDmitry Baryshkov .qos.prio_level = 0, 7827ae77e60SDmitry Baryshkov .qos.qos_port = 5, 7837ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_vfe_links), 7847ae77e60SDmitry Baryshkov .links = mas_vfe_links, 7857ae77e60SDmitry Baryshkov }; 7867ae77e60SDmitry Baryshkov 7877ae77e60SDmitry Baryshkov static const u16 mas_qdss_etr_links[] = { 7887ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM, 7897ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM, 7907ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CNOC, 7917ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_BIMC 7927ae77e60SDmitry Baryshkov }; 7937ae77e60SDmitry Baryshkov 7947ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_etr = { 7957ae77e60SDmitry Baryshkov .name = "mas_qdss_etr", 7967ae77e60SDmitry Baryshkov .id = SDM660_MASTER_QDSS_ETR, 7977ae77e60SDmitry Baryshkov .buswidth = 8, 7987ae77e60SDmitry Baryshkov .mas_rpm_id = 31, 7997ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 8007ae77e60SDmitry Baryshkov .qos.ap_owned = true, 8017ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 8027ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 8037ae77e60SDmitry Baryshkov .qos.prio_level = 1, 8047ae77e60SDmitry Baryshkov .qos.qos_port = 1, 8057ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_qdss_etr_links), 8067ae77e60SDmitry Baryshkov .links = mas_qdss_etr_links, 8077ae77e60SDmitry Baryshkov }; 8087ae77e60SDmitry Baryshkov 8097ae77e60SDmitry Baryshkov static const u16 mas_qdss_bam_links[] = { 8107ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM, 8117ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM, 8127ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CNOC, 8137ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_BIMC 8147ae77e60SDmitry Baryshkov }; 8157ae77e60SDmitry Baryshkov 8167ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_qdss_bam = { 8177ae77e60SDmitry Baryshkov .name = "mas_qdss_bam", 8187ae77e60SDmitry Baryshkov .id = SDM660_MASTER_QDSS_BAM, 8197ae77e60SDmitry Baryshkov .buswidth = 4, 8207ae77e60SDmitry Baryshkov .mas_rpm_id = 19, 8217ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 8227ae77e60SDmitry Baryshkov .qos.ap_owned = true, 8237ae77e60SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_FIXED, 8247ae77e60SDmitry Baryshkov .qos.areq_prio = 1, 8257ae77e60SDmitry Baryshkov .qos.prio_level = 1, 8267ae77e60SDmitry Baryshkov .qos.qos_port = 0, 8277ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_qdss_bam_links), 8287ae77e60SDmitry Baryshkov .links = mas_qdss_bam_links, 8297ae77e60SDmitry Baryshkov }; 8307ae77e60SDmitry Baryshkov 8317ae77e60SDmitry Baryshkov static const u16 mas_snoc_cfg_links[] = { 8327ae77e60SDmitry Baryshkov SDM660_SLAVE_SRVC_SNOC 8337ae77e60SDmitry Baryshkov }; 8347ae77e60SDmitry Baryshkov 8357ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_snoc_cfg = { 8367ae77e60SDmitry Baryshkov .name = "mas_snoc_cfg", 8377ae77e60SDmitry Baryshkov .id = SDM660_MASTER_SNOC_CFG, 8387ae77e60SDmitry Baryshkov .buswidth = 4, 8397ae77e60SDmitry Baryshkov .mas_rpm_id = 20, 8407ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 8417ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_snoc_cfg_links), 8427ae77e60SDmitry Baryshkov .links = mas_snoc_cfg_links, 8437ae77e60SDmitry Baryshkov }; 8447ae77e60SDmitry Baryshkov 8457ae77e60SDmitry Baryshkov static const u16 mas_bimc_snoc_links[] = { 8467ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM, 8477ae77e60SDmitry Baryshkov SDM660_SLAVE_IPA, 8487ae77e60SDmitry Baryshkov SDM660_SLAVE_QDSS_STM, 8497ae77e60SDmitry Baryshkov SDM660_SLAVE_LPASS, 8507ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS, 8517ae77e60SDmitry Baryshkov SDM660_SLAVE_CDSP, 8527ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CNOC, 8537ae77e60SDmitry Baryshkov SDM660_SLAVE_WLAN, 8547ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM 8557ae77e60SDmitry Baryshkov }; 8567ae77e60SDmitry Baryshkov 8577ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_bimc_snoc = { 8587ae77e60SDmitry Baryshkov .name = "mas_bimc_snoc", 8597ae77e60SDmitry Baryshkov .id = SDM660_MASTER_BIMC_SNOC, 8607ae77e60SDmitry Baryshkov .buswidth = 8, 8617ae77e60SDmitry Baryshkov .mas_rpm_id = 21, 8627ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 8637ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 8647ae77e60SDmitry Baryshkov .links = mas_bimc_snoc_links, 8657ae77e60SDmitry Baryshkov }; 8667ae77e60SDmitry Baryshkov 8677ae77e60SDmitry Baryshkov static const u16 mas_gnoc_snoc_links[] = { 8687ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM, 8697ae77e60SDmitry Baryshkov SDM660_SLAVE_IPA, 8707ae77e60SDmitry Baryshkov SDM660_SLAVE_QDSS_STM, 8717ae77e60SDmitry Baryshkov SDM660_SLAVE_LPASS, 8727ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS, 8737ae77e60SDmitry Baryshkov SDM660_SLAVE_CDSP, 8747ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CNOC, 8757ae77e60SDmitry Baryshkov SDM660_SLAVE_WLAN, 8767ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM 8777ae77e60SDmitry Baryshkov }; 8787ae77e60SDmitry Baryshkov 8797ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_gnoc_snoc = { 8807ae77e60SDmitry Baryshkov .name = "mas_gnoc_snoc", 8817ae77e60SDmitry Baryshkov .id = SDM660_MASTER_GNOC_SNOC, 8827ae77e60SDmitry Baryshkov .buswidth = 8, 8837ae77e60SDmitry Baryshkov .mas_rpm_id = 150, 8847ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 8857ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_gnoc_snoc_links), 8867ae77e60SDmitry Baryshkov .links = mas_gnoc_snoc_links, 8877ae77e60SDmitry Baryshkov }; 8887ae77e60SDmitry Baryshkov 8897ae77e60SDmitry Baryshkov static const u16 mas_a2noc_snoc_links[] = { 8907ae77e60SDmitry Baryshkov SDM660_SLAVE_PIMEM, 8917ae77e60SDmitry Baryshkov SDM660_SLAVE_IPA, 8927ae77e60SDmitry Baryshkov SDM660_SLAVE_QDSS_STM, 8937ae77e60SDmitry Baryshkov SDM660_SLAVE_LPASS, 8947ae77e60SDmitry Baryshkov SDM660_SLAVE_HMSS, 8957ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_BIMC, 8967ae77e60SDmitry Baryshkov SDM660_SLAVE_CDSP, 8977ae77e60SDmitry Baryshkov SDM660_SLAVE_SNOC_CNOC, 8987ae77e60SDmitry Baryshkov SDM660_SLAVE_WLAN, 8997ae77e60SDmitry Baryshkov SDM660_SLAVE_IMEM 9007ae77e60SDmitry Baryshkov }; 9017ae77e60SDmitry Baryshkov 9027ae77e60SDmitry Baryshkov static struct qcom_icc_node mas_a2noc_snoc = { 9037ae77e60SDmitry Baryshkov .name = "mas_a2noc_snoc", 9047ae77e60SDmitry Baryshkov .id = SDM660_MASTER_A2NOC_SNOC, 9057ae77e60SDmitry Baryshkov .buswidth = 16, 9067ae77e60SDmitry Baryshkov .mas_rpm_id = 112, 9077ae77e60SDmitry Baryshkov .slv_rpm_id = -1, 9087ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(mas_a2noc_snoc_links), 9097ae77e60SDmitry Baryshkov .links = mas_a2noc_snoc_links, 9107ae77e60SDmitry Baryshkov }; 9117ae77e60SDmitry Baryshkov 9127ae77e60SDmitry Baryshkov static const u16 slv_a2noc_snoc_links[] = { 9137ae77e60SDmitry Baryshkov SDM660_MASTER_A2NOC_SNOC 9147ae77e60SDmitry Baryshkov }; 9157ae77e60SDmitry Baryshkov 9167ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_snoc = { 9177ae77e60SDmitry Baryshkov .name = "slv_a2noc_snoc", 9187ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_A2NOC_SNOC, 9197ae77e60SDmitry Baryshkov .buswidth = 16, 9207ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9217ae77e60SDmitry Baryshkov .slv_rpm_id = 143, 9227ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_a2noc_snoc_links), 9237ae77e60SDmitry Baryshkov .links = slv_a2noc_snoc_links, 9247ae77e60SDmitry Baryshkov }; 9257ae77e60SDmitry Baryshkov 9267ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ebi = { 9277ae77e60SDmitry Baryshkov .name = "slv_ebi", 9287ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_EBI, 9297ae77e60SDmitry Baryshkov .buswidth = 4, 9307ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9317ae77e60SDmitry Baryshkov .slv_rpm_id = 0, 9327ae77e60SDmitry Baryshkov }; 9337ae77e60SDmitry Baryshkov 9347ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_hmss_l3 = { 9357ae77e60SDmitry Baryshkov .name = "slv_hmss_l3", 9367ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_HMSS_L3, 9377ae77e60SDmitry Baryshkov .buswidth = 4, 9387ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9397ae77e60SDmitry Baryshkov .slv_rpm_id = 160, 9407ae77e60SDmitry Baryshkov }; 9417ae77e60SDmitry Baryshkov 9427ae77e60SDmitry Baryshkov static const u16 slv_bimc_snoc_links[] = { 9437ae77e60SDmitry Baryshkov SDM660_MASTER_BIMC_SNOC 9447ae77e60SDmitry Baryshkov }; 9457ae77e60SDmitry Baryshkov 9467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_bimc_snoc = { 9477ae77e60SDmitry Baryshkov .name = "slv_bimc_snoc", 9487ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_BIMC_SNOC, 9497ae77e60SDmitry Baryshkov .buswidth = 4, 9507ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9517ae77e60SDmitry Baryshkov .slv_rpm_id = 2, 9527ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 9537ae77e60SDmitry Baryshkov .links = slv_bimc_snoc_links, 9547ae77e60SDmitry Baryshkov }; 9557ae77e60SDmitry Baryshkov 9567ae77e60SDmitry Baryshkov static const u16 slv_cnoc_a2noc_links[] = { 9577ae77e60SDmitry Baryshkov SDM660_MASTER_CNOC_A2NOC 9587ae77e60SDmitry Baryshkov }; 9597ae77e60SDmitry Baryshkov 9607ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_a2noc = { 9617ae77e60SDmitry Baryshkov .name = "slv_cnoc_a2noc", 9627ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CNOC_A2NOC, 9637ae77e60SDmitry Baryshkov .buswidth = 8, 9647ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9657ae77e60SDmitry Baryshkov .slv_rpm_id = 208, 9667ae77e60SDmitry Baryshkov .qos.ap_owned = true, 967*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 9687ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_cnoc_a2noc_links), 9697ae77e60SDmitry Baryshkov .links = slv_cnoc_a2noc_links, 9707ae77e60SDmitry Baryshkov }; 9717ae77e60SDmitry Baryshkov 9727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mpm = { 9737ae77e60SDmitry Baryshkov .name = "slv_mpm", 9747ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MPM, 9757ae77e60SDmitry Baryshkov .buswidth = 4, 9767ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9777ae77e60SDmitry Baryshkov .slv_rpm_id = 62, 9787ae77e60SDmitry Baryshkov .qos.ap_owned = true, 979*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 9807ae77e60SDmitry Baryshkov }; 9817ae77e60SDmitry Baryshkov 9827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pmic_arb = { 9837ae77e60SDmitry Baryshkov .name = "slv_pmic_arb", 9847ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_PMIC_ARB, 9857ae77e60SDmitry Baryshkov .buswidth = 4, 9867ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9877ae77e60SDmitry Baryshkov .slv_rpm_id = 59, 9887ae77e60SDmitry Baryshkov .qos.ap_owned = true, 989*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 9907ae77e60SDmitry Baryshkov }; 9917ae77e60SDmitry Baryshkov 9927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_north = { 9937ae77e60SDmitry Baryshkov .name = "slv_tlmm_north", 9947ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_TLMM_NORTH, 9957ae77e60SDmitry Baryshkov .buswidth = 8, 9967ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 9977ae77e60SDmitry Baryshkov .slv_rpm_id = 214, 9987ae77e60SDmitry Baryshkov .qos.ap_owned = true, 999*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10007ae77e60SDmitry Baryshkov }; 10017ae77e60SDmitry Baryshkov 10027ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tcsr = { 10037ae77e60SDmitry Baryshkov .name = "slv_tcsr", 10047ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_TCSR, 10057ae77e60SDmitry Baryshkov .buswidth = 4, 10067ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10077ae77e60SDmitry Baryshkov .slv_rpm_id = 50, 10087ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1009*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10107ae77e60SDmitry Baryshkov }; 10117ae77e60SDmitry Baryshkov 10127ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pimem_cfg = { 10137ae77e60SDmitry Baryshkov .name = "slv_pimem_cfg", 10147ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_PIMEM_CFG, 10157ae77e60SDmitry Baryshkov .buswidth = 4, 10167ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10177ae77e60SDmitry Baryshkov .slv_rpm_id = 167, 10187ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1019*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10207ae77e60SDmitry Baryshkov }; 10217ae77e60SDmitry Baryshkov 10227ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_imem_cfg = { 10237ae77e60SDmitry Baryshkov .name = "slv_imem_cfg", 10247ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_IMEM_CFG, 10257ae77e60SDmitry Baryshkov .buswidth = 4, 10267ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10277ae77e60SDmitry Baryshkov .slv_rpm_id = 54, 10287ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1029*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10307ae77e60SDmitry Baryshkov }; 10317ae77e60SDmitry Baryshkov 10327ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_message_ram = { 10337ae77e60SDmitry Baryshkov .name = "slv_message_ram", 10347ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MESSAGE_RAM, 10357ae77e60SDmitry Baryshkov .buswidth = 4, 10367ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10377ae77e60SDmitry Baryshkov .slv_rpm_id = 55, 10387ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1039*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10407ae77e60SDmitry Baryshkov }; 10417ae77e60SDmitry Baryshkov 10427ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_glm = { 10437ae77e60SDmitry Baryshkov .name = "slv_glm", 10447ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_GLM, 10457ae77e60SDmitry Baryshkov .buswidth = 4, 10467ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10477ae77e60SDmitry Baryshkov .slv_rpm_id = 209, 10487ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1049*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10507ae77e60SDmitry Baryshkov }; 10517ae77e60SDmitry Baryshkov 10527ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_bimc_cfg = { 10537ae77e60SDmitry Baryshkov .name = "slv_bimc_cfg", 10547ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_BIMC_CFG, 10557ae77e60SDmitry Baryshkov .buswidth = 4, 10567ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10577ae77e60SDmitry Baryshkov .slv_rpm_id = 56, 10587ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1059*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10607ae77e60SDmitry Baryshkov }; 10617ae77e60SDmitry Baryshkov 10627ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_prng = { 10637ae77e60SDmitry Baryshkov .name = "slv_prng", 10647ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_PRNG, 10657ae77e60SDmitry Baryshkov .buswidth = 4, 10667ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10677ae77e60SDmitry Baryshkov .slv_rpm_id = 44, 10687ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1069*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10707ae77e60SDmitry Baryshkov }; 10717ae77e60SDmitry Baryshkov 10727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_spdm = { 10737ae77e60SDmitry Baryshkov .name = "slv_spdm", 10747ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SPDM, 10757ae77e60SDmitry Baryshkov .buswidth = 4, 10767ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10777ae77e60SDmitry Baryshkov .slv_rpm_id = 60, 10787ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1079*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10807ae77e60SDmitry Baryshkov }; 10817ae77e60SDmitry Baryshkov 10827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qdss_cfg = { 10837ae77e60SDmitry Baryshkov .name = "slv_qdss_cfg", 10847ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_QDSS_CFG, 10857ae77e60SDmitry Baryshkov .buswidth = 4, 10867ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 10877ae77e60SDmitry Baryshkov .slv_rpm_id = 63, 10887ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1089*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 10907ae77e60SDmitry Baryshkov }; 10917ae77e60SDmitry Baryshkov 10927ae77e60SDmitry Baryshkov static const u16 slv_cnoc_mnoc_cfg_links[] = { 10937ae77e60SDmitry Baryshkov SDM660_MASTER_CNOC_MNOC_CFG 10947ae77e60SDmitry Baryshkov }; 10957ae77e60SDmitry Baryshkov 10967ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_mnoc_cfg = { 10977ae77e60SDmitry Baryshkov .name = "slv_cnoc_mnoc_cfg", 10987ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CNOC_MNOC_CFG, 10997ae77e60SDmitry Baryshkov .buswidth = 4, 11007ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11017ae77e60SDmitry Baryshkov .slv_rpm_id = 66, 11027ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1103*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11047ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links), 11057ae77e60SDmitry Baryshkov .links = slv_cnoc_mnoc_cfg_links, 11067ae77e60SDmitry Baryshkov }; 11077ae77e60SDmitry Baryshkov 11087ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_cfg = { 11097ae77e60SDmitry Baryshkov .name = "slv_snoc_cfg", 11107ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SNOC_CFG, 11117ae77e60SDmitry Baryshkov .buswidth = 4, 11127ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11137ae77e60SDmitry Baryshkov .slv_rpm_id = 70, 11147ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1115*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11167ae77e60SDmitry Baryshkov }; 11177ae77e60SDmitry Baryshkov 11187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qm_cfg = { 11197ae77e60SDmitry Baryshkov .name = "slv_qm_cfg", 11207ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_QM_CFG, 11217ae77e60SDmitry Baryshkov .buswidth = 4, 11227ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11237ae77e60SDmitry Baryshkov .slv_rpm_id = 212, 11247ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1125*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11267ae77e60SDmitry Baryshkov }; 11277ae77e60SDmitry Baryshkov 11287ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_clk_ctl = { 11297ae77e60SDmitry Baryshkov .name = "slv_clk_ctl", 11307ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CLK_CTL, 11317ae77e60SDmitry Baryshkov .buswidth = 4, 11327ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11337ae77e60SDmitry Baryshkov .slv_rpm_id = 47, 11347ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1135*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11367ae77e60SDmitry Baryshkov }; 11377ae77e60SDmitry Baryshkov 11387ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mss_cfg = { 11397ae77e60SDmitry Baryshkov .name = "slv_mss_cfg", 11407ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MSS_CFG, 11417ae77e60SDmitry Baryshkov .buswidth = 4, 11427ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11437ae77e60SDmitry Baryshkov .slv_rpm_id = 48, 11447ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1145*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11467ae77e60SDmitry Baryshkov }; 11477ae77e60SDmitry Baryshkov 11487ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_south = { 11497ae77e60SDmitry Baryshkov .name = "slv_tlmm_south", 11507ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_TLMM_SOUTH, 11517ae77e60SDmitry Baryshkov .buswidth = 4, 11527ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11537ae77e60SDmitry Baryshkov .slv_rpm_id = 217, 11547ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1155*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11567ae77e60SDmitry Baryshkov }; 11577ae77e60SDmitry Baryshkov 11587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ufs_cfg = { 11597ae77e60SDmitry Baryshkov .name = "slv_ufs_cfg", 11607ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_UFS_CFG, 11617ae77e60SDmitry Baryshkov .buswidth = 4, 11627ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11637ae77e60SDmitry Baryshkov .slv_rpm_id = 92, 11647ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1165*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11667ae77e60SDmitry Baryshkov }; 11677ae77e60SDmitry Baryshkov 11687ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_cfg = { 11697ae77e60SDmitry Baryshkov .name = "slv_a2noc_cfg", 11707ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_A2NOC_CFG, 11717ae77e60SDmitry Baryshkov .buswidth = 4, 11727ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11737ae77e60SDmitry Baryshkov .slv_rpm_id = 150, 11747ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1175*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11767ae77e60SDmitry Baryshkov }; 11777ae77e60SDmitry Baryshkov 11787ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_a2noc_smmu_cfg = { 11797ae77e60SDmitry Baryshkov .name = "slv_a2noc_smmu_cfg", 11807ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_A2NOC_SMMU_CFG, 11817ae77e60SDmitry Baryshkov .buswidth = 8, 11827ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11837ae77e60SDmitry Baryshkov .slv_rpm_id = 152, 11847ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1185*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11867ae77e60SDmitry Baryshkov }; 11877ae77e60SDmitry Baryshkov 11887ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gpuss_cfg = { 11897ae77e60SDmitry Baryshkov .name = "slv_gpuss_cfg", 11907ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_GPUSS_CFG, 11917ae77e60SDmitry Baryshkov .buswidth = 8, 11927ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 11937ae77e60SDmitry Baryshkov .slv_rpm_id = 11, 11947ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1195*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 11967ae77e60SDmitry Baryshkov }; 11977ae77e60SDmitry Baryshkov 11987ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ahb2phy = { 11997ae77e60SDmitry Baryshkov .name = "slv_ahb2phy", 12007ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_AHB2PHY, 12017ae77e60SDmitry Baryshkov .buswidth = 4, 12027ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12037ae77e60SDmitry Baryshkov .slv_rpm_id = 163, 12047ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1205*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12067ae77e60SDmitry Baryshkov }; 12077ae77e60SDmitry Baryshkov 12087ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_blsp_1 = { 12097ae77e60SDmitry Baryshkov .name = "slv_blsp_1", 12107ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_BLSP_1, 12117ae77e60SDmitry Baryshkov .buswidth = 4, 12127ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12137ae77e60SDmitry Baryshkov .slv_rpm_id = 39, 12147ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1215*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12167ae77e60SDmitry Baryshkov }; 12177ae77e60SDmitry Baryshkov 12187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_sdcc_1 = { 12197ae77e60SDmitry Baryshkov .name = "slv_sdcc_1", 12207ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SDCC_1, 12217ae77e60SDmitry Baryshkov .buswidth = 4, 12227ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12237ae77e60SDmitry Baryshkov .slv_rpm_id = 31, 12247ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1225*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12267ae77e60SDmitry Baryshkov }; 12277ae77e60SDmitry Baryshkov 12287ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_sdcc_2 = { 12297ae77e60SDmitry Baryshkov .name = "slv_sdcc_2", 12307ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SDCC_2, 12317ae77e60SDmitry Baryshkov .buswidth = 4, 12327ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12337ae77e60SDmitry Baryshkov .slv_rpm_id = 33, 12347ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1235*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12367ae77e60SDmitry Baryshkov }; 12377ae77e60SDmitry Baryshkov 12387ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_tlmm_center = { 12397ae77e60SDmitry Baryshkov .name = "slv_tlmm_center", 12407ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_TLMM_CENTER, 12417ae77e60SDmitry Baryshkov .buswidth = 4, 12427ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12437ae77e60SDmitry Baryshkov .slv_rpm_id = 218, 12447ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1245*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12467ae77e60SDmitry Baryshkov }; 12477ae77e60SDmitry Baryshkov 12487ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_blsp_2 = { 12497ae77e60SDmitry Baryshkov .name = "slv_blsp_2", 12507ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_BLSP_2, 12517ae77e60SDmitry Baryshkov .buswidth = 4, 12527ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12537ae77e60SDmitry Baryshkov .slv_rpm_id = 37, 12547ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1255*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12567ae77e60SDmitry Baryshkov }; 12577ae77e60SDmitry Baryshkov 12587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pdm = { 12597ae77e60SDmitry Baryshkov .name = "slv_pdm", 12607ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_PDM, 12617ae77e60SDmitry Baryshkov .buswidth = 4, 12627ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12637ae77e60SDmitry Baryshkov .slv_rpm_id = 41, 12647ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1265*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12667ae77e60SDmitry Baryshkov }; 12677ae77e60SDmitry Baryshkov 12687ae77e60SDmitry Baryshkov static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = { 12697ae77e60SDmitry Baryshkov SDM660_MASTER_CNOC_MNOC_MMSS_CFG 12707ae77e60SDmitry Baryshkov }; 12717ae77e60SDmitry Baryshkov 12727ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = { 12737ae77e60SDmitry Baryshkov .name = "slv_cnoc_mnoc_mmss_cfg", 12747ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CNOC_MNOC_MMSS_CFG, 12757ae77e60SDmitry Baryshkov .buswidth = 8, 12767ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12777ae77e60SDmitry Baryshkov .slv_rpm_id = 58, 12787ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1279*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12807ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links), 12817ae77e60SDmitry Baryshkov .links = slv_cnoc_mnoc_mmss_cfg_links, 12827ae77e60SDmitry Baryshkov }; 12837ae77e60SDmitry Baryshkov 12847ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_usb_hs = { 12857ae77e60SDmitry Baryshkov .name = "slv_usb_hs", 12867ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_USB_HS, 12877ae77e60SDmitry Baryshkov .buswidth = 4, 12887ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12897ae77e60SDmitry Baryshkov .slv_rpm_id = 40, 12907ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1291*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 12927ae77e60SDmitry Baryshkov }; 12937ae77e60SDmitry Baryshkov 12947ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_usb3_0 = { 12957ae77e60SDmitry Baryshkov .name = "slv_usb3_0", 12967ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_USB3_0, 12977ae77e60SDmitry Baryshkov .buswidth = 4, 12987ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 12997ae77e60SDmitry Baryshkov .slv_rpm_id = 22, 13007ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1301*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13027ae77e60SDmitry Baryshkov }; 13037ae77e60SDmitry Baryshkov 13047ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_cnoc = { 13057ae77e60SDmitry Baryshkov .name = "slv_srvc_cnoc", 13067ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SRVC_CNOC, 13077ae77e60SDmitry Baryshkov .buswidth = 4, 13087ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13097ae77e60SDmitry Baryshkov .slv_rpm_id = 76, 13107ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1311*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13127ae77e60SDmitry Baryshkov }; 13137ae77e60SDmitry Baryshkov 13147ae77e60SDmitry Baryshkov static const u16 slv_gnoc_bimc_links[] = { 13157ae77e60SDmitry Baryshkov SDM660_MASTER_GNOC_BIMC 13167ae77e60SDmitry Baryshkov }; 13177ae77e60SDmitry Baryshkov 13187ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gnoc_bimc = { 13197ae77e60SDmitry Baryshkov .name = "slv_gnoc_bimc", 13207ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_GNOC_BIMC, 13217ae77e60SDmitry Baryshkov .buswidth = 16, 13227ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13237ae77e60SDmitry Baryshkov .slv_rpm_id = 210, 13247ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1325*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13267ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_gnoc_bimc_links), 13277ae77e60SDmitry Baryshkov .links = slv_gnoc_bimc_links, 13287ae77e60SDmitry Baryshkov }; 13297ae77e60SDmitry Baryshkov 13307ae77e60SDmitry Baryshkov static const u16 slv_gnoc_snoc_links[] = { 13317ae77e60SDmitry Baryshkov SDM660_MASTER_GNOC_SNOC 13327ae77e60SDmitry Baryshkov }; 13337ae77e60SDmitry Baryshkov 13347ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_gnoc_snoc = { 13357ae77e60SDmitry Baryshkov .name = "slv_gnoc_snoc", 13367ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_GNOC_SNOC, 13377ae77e60SDmitry Baryshkov .buswidth = 8, 13387ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13397ae77e60SDmitry Baryshkov .slv_rpm_id = 211, 13407ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1341*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13427ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_gnoc_snoc_links), 13437ae77e60SDmitry Baryshkov .links = slv_gnoc_snoc_links, 13447ae77e60SDmitry Baryshkov }; 13457ae77e60SDmitry Baryshkov 13467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_camera_cfg = { 13477ae77e60SDmitry Baryshkov .name = "slv_camera_cfg", 13487ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CAMERA_CFG, 13497ae77e60SDmitry Baryshkov .buswidth = 4, 13507ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13517ae77e60SDmitry Baryshkov .slv_rpm_id = 3, 13527ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1353*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13547ae77e60SDmitry Baryshkov }; 13557ae77e60SDmitry Baryshkov 13567ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_camera_throttle_cfg = { 13577ae77e60SDmitry Baryshkov .name = "slv_camera_throttle_cfg", 13587ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CAMERA_THROTTLE_CFG, 13597ae77e60SDmitry Baryshkov .buswidth = 4, 13607ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13617ae77e60SDmitry Baryshkov .slv_rpm_id = 154, 13627ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1363*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13647ae77e60SDmitry Baryshkov }; 13657ae77e60SDmitry Baryshkov 13667ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_misc_cfg = { 13677ae77e60SDmitry Baryshkov .name = "slv_misc_cfg", 13687ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MISC_CFG, 13697ae77e60SDmitry Baryshkov .buswidth = 4, 13707ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13717ae77e60SDmitry Baryshkov .slv_rpm_id = 8, 13727ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1373*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13747ae77e60SDmitry Baryshkov }; 13757ae77e60SDmitry Baryshkov 13767ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_venus_throttle_cfg = { 13777ae77e60SDmitry Baryshkov .name = "slv_venus_throttle_cfg", 13787ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_VENUS_THROTTLE_CFG, 13797ae77e60SDmitry Baryshkov .buswidth = 4, 13807ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13817ae77e60SDmitry Baryshkov .slv_rpm_id = 178, 13827ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1383*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13847ae77e60SDmitry Baryshkov }; 13857ae77e60SDmitry Baryshkov 13867ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_venus_cfg = { 13877ae77e60SDmitry Baryshkov .name = "slv_venus_cfg", 13887ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_VENUS_CFG, 13897ae77e60SDmitry Baryshkov .buswidth = 4, 13907ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 13917ae77e60SDmitry Baryshkov .slv_rpm_id = 10, 13927ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1393*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 13947ae77e60SDmitry Baryshkov }; 13957ae77e60SDmitry Baryshkov 13967ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mmss_clk_xpu_cfg = { 13977ae77e60SDmitry Baryshkov .name = "slv_mmss_clk_xpu_cfg", 13987ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MMSS_CLK_XPU_CFG, 13997ae77e60SDmitry Baryshkov .buswidth = 4, 14007ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14017ae77e60SDmitry Baryshkov .slv_rpm_id = 13, 14027ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1403*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14047ae77e60SDmitry Baryshkov }; 14057ae77e60SDmitry Baryshkov 14067ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mmss_clk_cfg = { 14077ae77e60SDmitry Baryshkov .name = "slv_mmss_clk_cfg", 14087ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MMSS_CLK_CFG, 14097ae77e60SDmitry Baryshkov .buswidth = 4, 14107ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14117ae77e60SDmitry Baryshkov .slv_rpm_id = 12, 14127ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1413*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14147ae77e60SDmitry Baryshkov }; 14157ae77e60SDmitry Baryshkov 14167ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mnoc_mpu_cfg = { 14177ae77e60SDmitry Baryshkov .name = "slv_mnoc_mpu_cfg", 14187ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MNOC_MPU_CFG, 14197ae77e60SDmitry Baryshkov .buswidth = 4, 14207ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14217ae77e60SDmitry Baryshkov .slv_rpm_id = 14, 14227ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1423*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14247ae77e60SDmitry Baryshkov }; 14257ae77e60SDmitry Baryshkov 14267ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_display_cfg = { 14277ae77e60SDmitry Baryshkov .name = "slv_display_cfg", 14287ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_DISPLAY_CFG, 14297ae77e60SDmitry Baryshkov .buswidth = 4, 14307ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14317ae77e60SDmitry Baryshkov .slv_rpm_id = 4, 14327ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1433*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14347ae77e60SDmitry Baryshkov }; 14357ae77e60SDmitry Baryshkov 14367ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_csi_phy_cfg = { 14377ae77e60SDmitry Baryshkov .name = "slv_csi_phy_cfg", 14387ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CSI_PHY_CFG, 14397ae77e60SDmitry Baryshkov .buswidth = 4, 14407ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14417ae77e60SDmitry Baryshkov .slv_rpm_id = 224, 14427ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1443*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14447ae77e60SDmitry Baryshkov }; 14457ae77e60SDmitry Baryshkov 14467ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_display_throttle_cfg = { 14477ae77e60SDmitry Baryshkov .name = "slv_display_throttle_cfg", 14487ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_DISPLAY_THROTTLE_CFG, 14497ae77e60SDmitry Baryshkov .buswidth = 4, 14507ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14517ae77e60SDmitry Baryshkov .slv_rpm_id = 156, 14527ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1453*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14547ae77e60SDmitry Baryshkov }; 14557ae77e60SDmitry Baryshkov 14567ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_smmu_cfg = { 14577ae77e60SDmitry Baryshkov .name = "slv_smmu_cfg", 14587ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SMMU_CFG, 14597ae77e60SDmitry Baryshkov .buswidth = 8, 14607ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14617ae77e60SDmitry Baryshkov .slv_rpm_id = 205, 14627ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1463*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14647ae77e60SDmitry Baryshkov }; 14657ae77e60SDmitry Baryshkov 14667ae77e60SDmitry Baryshkov static const u16 slv_mnoc_bimc_links[] = { 14677ae77e60SDmitry Baryshkov SDM660_MASTER_MNOC_BIMC 14687ae77e60SDmitry Baryshkov }; 14697ae77e60SDmitry Baryshkov 14707ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_mnoc_bimc = { 14717ae77e60SDmitry Baryshkov .name = "slv_mnoc_bimc", 14727ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_MNOC_BIMC, 14737ae77e60SDmitry Baryshkov .buswidth = 16, 14747ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14757ae77e60SDmitry Baryshkov .slv_rpm_id = 16, 14767ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1477*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14787ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_mnoc_bimc_links), 14797ae77e60SDmitry Baryshkov .links = slv_mnoc_bimc_links, 14807ae77e60SDmitry Baryshkov }; 14817ae77e60SDmitry Baryshkov 14827ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_mnoc = { 14837ae77e60SDmitry Baryshkov .name = "slv_srvc_mnoc", 14847ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SRVC_MNOC, 14857ae77e60SDmitry Baryshkov .buswidth = 8, 14867ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14877ae77e60SDmitry Baryshkov .slv_rpm_id = 17, 14887ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1489*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 14907ae77e60SDmitry Baryshkov }; 14917ae77e60SDmitry Baryshkov 14927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_hmss = { 14937ae77e60SDmitry Baryshkov .name = "slv_hmss", 14947ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_HMSS, 14957ae77e60SDmitry Baryshkov .buswidth = 8, 14967ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 14977ae77e60SDmitry Baryshkov .slv_rpm_id = 20, 14987ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1499*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 15007ae77e60SDmitry Baryshkov }; 15017ae77e60SDmitry Baryshkov 15027ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_lpass = { 15037ae77e60SDmitry Baryshkov .name = "slv_lpass", 15047ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_LPASS, 15057ae77e60SDmitry Baryshkov .buswidth = 4, 15067ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15077ae77e60SDmitry Baryshkov .slv_rpm_id = 21, 15087ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1509*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 15107ae77e60SDmitry Baryshkov }; 15117ae77e60SDmitry Baryshkov 15127ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_wlan = { 15137ae77e60SDmitry Baryshkov .name = "slv_wlan", 15147ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_WLAN, 15157ae77e60SDmitry Baryshkov .buswidth = 4, 15167ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15177ae77e60SDmitry Baryshkov .slv_rpm_id = 206, 15187ae77e60SDmitry Baryshkov }; 15197ae77e60SDmitry Baryshkov 15207ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_cdsp = { 15217ae77e60SDmitry Baryshkov .name = "slv_cdsp", 15227ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_CDSP, 15237ae77e60SDmitry Baryshkov .buswidth = 4, 15247ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15257ae77e60SDmitry Baryshkov .slv_rpm_id = 221, 15267ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1527*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 15287ae77e60SDmitry Baryshkov }; 15297ae77e60SDmitry Baryshkov 15307ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_ipa = { 15317ae77e60SDmitry Baryshkov .name = "slv_ipa", 15327ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_IPA, 15337ae77e60SDmitry Baryshkov .buswidth = 4, 15347ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15357ae77e60SDmitry Baryshkov .slv_rpm_id = 183, 15367ae77e60SDmitry Baryshkov .qos.ap_owned = true, 1537*656ba110SDmitry Baryshkov .qos.qos_mode = NOC_QOS_MODE_INVALID, 15387ae77e60SDmitry Baryshkov }; 15397ae77e60SDmitry Baryshkov 15407ae77e60SDmitry Baryshkov static const u16 slv_snoc_bimc_links[] = { 15417ae77e60SDmitry Baryshkov SDM660_MASTER_SNOC_BIMC 15427ae77e60SDmitry Baryshkov }; 15437ae77e60SDmitry Baryshkov 15447ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_bimc = { 15457ae77e60SDmitry Baryshkov .name = "slv_snoc_bimc", 15467ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SNOC_BIMC, 15477ae77e60SDmitry Baryshkov .buswidth = 16, 15487ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15497ae77e60SDmitry Baryshkov .slv_rpm_id = 24, 15507ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 15517ae77e60SDmitry Baryshkov .links = slv_snoc_bimc_links, 15527ae77e60SDmitry Baryshkov }; 15537ae77e60SDmitry Baryshkov 15547ae77e60SDmitry Baryshkov static const u16 slv_snoc_cnoc_links[] = { 15557ae77e60SDmitry Baryshkov SDM660_MASTER_SNOC_CNOC 15567ae77e60SDmitry Baryshkov }; 15577ae77e60SDmitry Baryshkov 15587ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_snoc_cnoc = { 15597ae77e60SDmitry Baryshkov .name = "slv_snoc_cnoc", 15607ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SNOC_CNOC, 15617ae77e60SDmitry Baryshkov .buswidth = 8, 15627ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15637ae77e60SDmitry Baryshkov .slv_rpm_id = 25, 15647ae77e60SDmitry Baryshkov .num_links = ARRAY_SIZE(slv_snoc_cnoc_links), 15657ae77e60SDmitry Baryshkov .links = slv_snoc_cnoc_links, 15667ae77e60SDmitry Baryshkov }; 15677ae77e60SDmitry Baryshkov 15687ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_imem = { 15697ae77e60SDmitry Baryshkov .name = "slv_imem", 15707ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_IMEM, 15717ae77e60SDmitry Baryshkov .buswidth = 8, 15727ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15737ae77e60SDmitry Baryshkov .slv_rpm_id = 26, 15747ae77e60SDmitry Baryshkov }; 15757ae77e60SDmitry Baryshkov 15767ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_pimem = { 15777ae77e60SDmitry Baryshkov .name = "slv_pimem", 15787ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_PIMEM, 15797ae77e60SDmitry Baryshkov .buswidth = 8, 15807ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15817ae77e60SDmitry Baryshkov .slv_rpm_id = 166, 15827ae77e60SDmitry Baryshkov }; 15837ae77e60SDmitry Baryshkov 15847ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_qdss_stm = { 15857ae77e60SDmitry Baryshkov .name = "slv_qdss_stm", 15867ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_QDSS_STM, 15877ae77e60SDmitry Baryshkov .buswidth = 4, 15887ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15897ae77e60SDmitry Baryshkov .slv_rpm_id = 30, 15907ae77e60SDmitry Baryshkov }; 15917ae77e60SDmitry Baryshkov 15927ae77e60SDmitry Baryshkov static struct qcom_icc_node slv_srvc_snoc = { 15937ae77e60SDmitry Baryshkov .name = "slv_srvc_snoc", 15947ae77e60SDmitry Baryshkov .id = SDM660_SLAVE_SRVC_SNOC, 15957ae77e60SDmitry Baryshkov .buswidth = 16, 15967ae77e60SDmitry Baryshkov .mas_rpm_id = -1, 15977ae77e60SDmitry Baryshkov .slv_rpm_id = 29, 15987ae77e60SDmitry Baryshkov }; 1599f80a1d41SAngeloGioacchino Del Regno 1600f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_a2noc_nodes[] = { 1601f80a1d41SAngeloGioacchino Del Regno [MASTER_IPA] = &mas_ipa, 1602f80a1d41SAngeloGioacchino Del Regno [MASTER_CNOC_A2NOC] = &mas_cnoc_a2noc, 1603f80a1d41SAngeloGioacchino Del Regno [MASTER_SDCC_1] = &mas_sdcc_1, 1604f80a1d41SAngeloGioacchino Del Regno [MASTER_SDCC_2] = &mas_sdcc_2, 1605f80a1d41SAngeloGioacchino Del Regno [MASTER_BLSP_1] = &mas_blsp_1, 1606f80a1d41SAngeloGioacchino Del Regno [MASTER_BLSP_2] = &mas_blsp_2, 1607f80a1d41SAngeloGioacchino Del Regno [MASTER_UFS] = &mas_ufs, 1608f80a1d41SAngeloGioacchino Del Regno [MASTER_USB_HS] = &mas_usb_hs, 1609f80a1d41SAngeloGioacchino Del Regno [MASTER_USB3] = &mas_usb3, 1610f80a1d41SAngeloGioacchino Del Regno [MASTER_CRYPTO_C0] = &mas_crypto, 1611f80a1d41SAngeloGioacchino Del Regno [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc, 1612f80a1d41SAngeloGioacchino Del Regno }; 1613f80a1d41SAngeloGioacchino Del Regno 1614f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_a2noc_regmap_config = { 1615f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1616f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1617f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1618f80a1d41SAngeloGioacchino Del Regno .max_register = 0x20000, 1619f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1620f80a1d41SAngeloGioacchino Del Regno }; 1621f80a1d41SAngeloGioacchino Del Regno 1622f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_a2noc = { 1623f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_a2noc_nodes, 1624f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_a2noc_nodes), 1625f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_a2noc_regmap_config, 1626f80a1d41SAngeloGioacchino Del Regno }; 1627f80a1d41SAngeloGioacchino Del Regno 1628f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_bimc_nodes[] = { 1629f80a1d41SAngeloGioacchino Del Regno [MASTER_GNOC_BIMC] = &mas_gnoc_bimc, 1630f80a1d41SAngeloGioacchino Del Regno [MASTER_OXILI] = &mas_oxili, 1631f80a1d41SAngeloGioacchino Del Regno [MASTER_MNOC_BIMC] = &mas_mnoc_bimc, 1632f80a1d41SAngeloGioacchino Del Regno [MASTER_SNOC_BIMC] = &mas_snoc_bimc, 1633f80a1d41SAngeloGioacchino Del Regno [MASTER_PIMEM] = &mas_pimem, 1634f80a1d41SAngeloGioacchino Del Regno [SLAVE_EBI] = &slv_ebi, 1635f80a1d41SAngeloGioacchino Del Regno [SLAVE_HMSS_L3] = &slv_hmss_l3, 1636f80a1d41SAngeloGioacchino Del Regno [SLAVE_BIMC_SNOC] = &slv_bimc_snoc, 1637f80a1d41SAngeloGioacchino Del Regno }; 1638f80a1d41SAngeloGioacchino Del Regno 1639f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_bimc_regmap_config = { 1640f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1641f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1642f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1643f80a1d41SAngeloGioacchino Del Regno .max_register = 0x80000, 1644f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1645f80a1d41SAngeloGioacchino Del Regno }; 1646f80a1d41SAngeloGioacchino Del Regno 1647f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_bimc = { 1648f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_bimc_nodes, 1649f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_bimc_nodes), 1650f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_bimc_regmap_config, 1651f80a1d41SAngeloGioacchino Del Regno }; 1652f80a1d41SAngeloGioacchino Del Regno 1653f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_cnoc_nodes[] = { 1654f80a1d41SAngeloGioacchino Del Regno [MASTER_SNOC_CNOC] = &mas_snoc_cnoc, 1655f80a1d41SAngeloGioacchino Del Regno [MASTER_QDSS_DAP] = &mas_qdss_dap, 1656f80a1d41SAngeloGioacchino Del Regno [SLAVE_CNOC_A2NOC] = &slv_cnoc_a2noc, 1657f80a1d41SAngeloGioacchino Del Regno [SLAVE_MPM] = &slv_mpm, 1658f80a1d41SAngeloGioacchino Del Regno [SLAVE_PMIC_ARB] = &slv_pmic_arb, 1659f80a1d41SAngeloGioacchino Del Regno [SLAVE_TLMM_NORTH] = &slv_tlmm_north, 1660f80a1d41SAngeloGioacchino Del Regno [SLAVE_TCSR] = &slv_tcsr, 1661f80a1d41SAngeloGioacchino Del Regno [SLAVE_PIMEM_CFG] = &slv_pimem_cfg, 1662f80a1d41SAngeloGioacchino Del Regno [SLAVE_IMEM_CFG] = &slv_imem_cfg, 1663f80a1d41SAngeloGioacchino Del Regno [SLAVE_MESSAGE_RAM] = &slv_message_ram, 1664f80a1d41SAngeloGioacchino Del Regno [SLAVE_GLM] = &slv_glm, 1665f80a1d41SAngeloGioacchino Del Regno [SLAVE_BIMC_CFG] = &slv_bimc_cfg, 1666f80a1d41SAngeloGioacchino Del Regno [SLAVE_PRNG] = &slv_prng, 1667f80a1d41SAngeloGioacchino Del Regno [SLAVE_SPDM] = &slv_spdm, 1668f80a1d41SAngeloGioacchino Del Regno [SLAVE_QDSS_CFG] = &slv_qdss_cfg, 1669f80a1d41SAngeloGioacchino Del Regno [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg, 1670f80a1d41SAngeloGioacchino Del Regno [SLAVE_SNOC_CFG] = &slv_snoc_cfg, 1671f80a1d41SAngeloGioacchino Del Regno [SLAVE_QM_CFG] = &slv_qm_cfg, 1672f80a1d41SAngeloGioacchino Del Regno [SLAVE_CLK_CTL] = &slv_clk_ctl, 1673f80a1d41SAngeloGioacchino Del Regno [SLAVE_MSS_CFG] = &slv_mss_cfg, 1674f80a1d41SAngeloGioacchino Del Regno [SLAVE_TLMM_SOUTH] = &slv_tlmm_south, 1675f80a1d41SAngeloGioacchino Del Regno [SLAVE_UFS_CFG] = &slv_ufs_cfg, 1676f80a1d41SAngeloGioacchino Del Regno [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg, 1677f80a1d41SAngeloGioacchino Del Regno [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg, 1678f80a1d41SAngeloGioacchino Del Regno [SLAVE_GPUSS_CFG] = &slv_gpuss_cfg, 1679f80a1d41SAngeloGioacchino Del Regno [SLAVE_AHB2PHY] = &slv_ahb2phy, 1680f80a1d41SAngeloGioacchino Del Regno [SLAVE_BLSP_1] = &slv_blsp_1, 1681f80a1d41SAngeloGioacchino Del Regno [SLAVE_SDCC_1] = &slv_sdcc_1, 1682f80a1d41SAngeloGioacchino Del Regno [SLAVE_SDCC_2] = &slv_sdcc_2, 1683f80a1d41SAngeloGioacchino Del Regno [SLAVE_TLMM_CENTER] = &slv_tlmm_center, 1684f80a1d41SAngeloGioacchino Del Regno [SLAVE_BLSP_2] = &slv_blsp_2, 1685f80a1d41SAngeloGioacchino Del Regno [SLAVE_PDM] = &slv_pdm, 1686f80a1d41SAngeloGioacchino Del Regno [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg, 1687f80a1d41SAngeloGioacchino Del Regno [SLAVE_USB_HS] = &slv_usb_hs, 1688f80a1d41SAngeloGioacchino Del Regno [SLAVE_USB3_0] = &slv_usb3_0, 1689f80a1d41SAngeloGioacchino Del Regno [SLAVE_SRVC_CNOC] = &slv_srvc_cnoc, 1690f80a1d41SAngeloGioacchino Del Regno }; 1691f80a1d41SAngeloGioacchino Del Regno 1692f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_cnoc_regmap_config = { 1693f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1694f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1695f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1696f80a1d41SAngeloGioacchino Del Regno .max_register = 0x10000, 1697f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1698f80a1d41SAngeloGioacchino Del Regno }; 1699f80a1d41SAngeloGioacchino Del Regno 1700f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_cnoc = { 1701f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_cnoc_nodes, 1702f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_cnoc_nodes), 1703f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_cnoc_regmap_config, 1704f80a1d41SAngeloGioacchino Del Regno }; 1705f80a1d41SAngeloGioacchino Del Regno 1706f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_gnoc_nodes[] = { 1707f80a1d41SAngeloGioacchino Del Regno [MASTER_APSS_PROC] = &mas_apss_proc, 1708f80a1d41SAngeloGioacchino Del Regno [SLAVE_GNOC_BIMC] = &slv_gnoc_bimc, 1709f80a1d41SAngeloGioacchino Del Regno [SLAVE_GNOC_SNOC] = &slv_gnoc_snoc, 1710f80a1d41SAngeloGioacchino Del Regno }; 1711f80a1d41SAngeloGioacchino Del Regno 1712f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_gnoc_regmap_config = { 1713f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1714f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1715f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1716f80a1d41SAngeloGioacchino Del Regno .max_register = 0xe000, 1717f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1718f80a1d41SAngeloGioacchino Del Regno }; 1719f80a1d41SAngeloGioacchino Del Regno 1720f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_gnoc = { 1721f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_gnoc_nodes, 1722f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_gnoc_nodes), 1723f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_gnoc_regmap_config, 1724f80a1d41SAngeloGioacchino Del Regno }; 1725f80a1d41SAngeloGioacchino Del Regno 1726f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_mnoc_nodes[] = { 1727f80a1d41SAngeloGioacchino Del Regno [MASTER_CPP] = &mas_cpp, 1728f80a1d41SAngeloGioacchino Del Regno [MASTER_JPEG] = &mas_jpeg, 1729f80a1d41SAngeloGioacchino Del Regno [MASTER_MDP_P0] = &mas_mdp_p0, 1730f80a1d41SAngeloGioacchino Del Regno [MASTER_MDP_P1] = &mas_mdp_p1, 1731f80a1d41SAngeloGioacchino Del Regno [MASTER_VENUS] = &mas_venus, 1732f80a1d41SAngeloGioacchino Del Regno [MASTER_VFE] = &mas_vfe, 1733f80a1d41SAngeloGioacchino Del Regno [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg, 1734f80a1d41SAngeloGioacchino Del Regno [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg, 1735f80a1d41SAngeloGioacchino Del Regno [SLAVE_CAMERA_CFG] = &slv_camera_cfg, 1736f80a1d41SAngeloGioacchino Del Regno [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg, 1737f80a1d41SAngeloGioacchino Del Regno [SLAVE_MISC_CFG] = &slv_misc_cfg, 1738f80a1d41SAngeloGioacchino Del Regno [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg, 1739f80a1d41SAngeloGioacchino Del Regno [SLAVE_VENUS_CFG] = &slv_venus_cfg, 1740f80a1d41SAngeloGioacchino Del Regno [SLAVE_MMSS_CLK_XPU_CFG] = &slv_mmss_clk_xpu_cfg, 1741f80a1d41SAngeloGioacchino Del Regno [SLAVE_MMSS_CLK_CFG] = &slv_mmss_clk_cfg, 1742f80a1d41SAngeloGioacchino Del Regno [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg, 1743f80a1d41SAngeloGioacchino Del Regno [SLAVE_DISPLAY_CFG] = &slv_display_cfg, 1744f80a1d41SAngeloGioacchino Del Regno [SLAVE_CSI_PHY_CFG] = &slv_csi_phy_cfg, 1745f80a1d41SAngeloGioacchino Del Regno [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg, 1746f80a1d41SAngeloGioacchino Del Regno [SLAVE_SMMU_CFG] = &slv_smmu_cfg, 1747f80a1d41SAngeloGioacchino Del Regno [SLAVE_SRVC_MNOC] = &slv_srvc_mnoc, 1748f80a1d41SAngeloGioacchino Del Regno [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc, 1749f80a1d41SAngeloGioacchino Del Regno }; 1750f80a1d41SAngeloGioacchino Del Regno 1751f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_mnoc_regmap_config = { 1752f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1753f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1754f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1755f80a1d41SAngeloGioacchino Del Regno .max_register = 0x10000, 1756f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1757f80a1d41SAngeloGioacchino Del Regno }; 1758f80a1d41SAngeloGioacchino Del Regno 1759f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_mnoc = { 1760f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_mnoc_nodes, 1761f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_mnoc_nodes), 1762f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_mnoc_regmap_config, 1763f80a1d41SAngeloGioacchino Del Regno }; 1764f80a1d41SAngeloGioacchino Del Regno 1765f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_node *sdm660_snoc_nodes[] = { 1766f80a1d41SAngeloGioacchino Del Regno [MASTER_QDSS_ETR] = &mas_qdss_etr, 1767f80a1d41SAngeloGioacchino Del Regno [MASTER_QDSS_BAM] = &mas_qdss_bam, 1768f80a1d41SAngeloGioacchino Del Regno [MASTER_SNOC_CFG] = &mas_snoc_cfg, 1769f80a1d41SAngeloGioacchino Del Regno [MASTER_BIMC_SNOC] = &mas_bimc_snoc, 1770f80a1d41SAngeloGioacchino Del Regno [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc, 1771f80a1d41SAngeloGioacchino Del Regno [MASTER_GNOC_SNOC] = &mas_gnoc_snoc, 1772f80a1d41SAngeloGioacchino Del Regno [SLAVE_HMSS] = &slv_hmss, 1773f80a1d41SAngeloGioacchino Del Regno [SLAVE_LPASS] = &slv_lpass, 1774f80a1d41SAngeloGioacchino Del Regno [SLAVE_WLAN] = &slv_wlan, 1775f80a1d41SAngeloGioacchino Del Regno [SLAVE_CDSP] = &slv_cdsp, 1776f80a1d41SAngeloGioacchino Del Regno [SLAVE_IPA] = &slv_ipa, 1777f80a1d41SAngeloGioacchino Del Regno [SLAVE_SNOC_BIMC] = &slv_snoc_bimc, 1778f80a1d41SAngeloGioacchino Del Regno [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc, 1779f80a1d41SAngeloGioacchino Del Regno [SLAVE_IMEM] = &slv_imem, 1780f80a1d41SAngeloGioacchino Del Regno [SLAVE_PIMEM] = &slv_pimem, 1781f80a1d41SAngeloGioacchino Del Regno [SLAVE_QDSS_STM] = &slv_qdss_stm, 1782f80a1d41SAngeloGioacchino Del Regno [SLAVE_SRVC_SNOC] = &slv_srvc_snoc, 1783f80a1d41SAngeloGioacchino Del Regno }; 1784f80a1d41SAngeloGioacchino Del Regno 1785f80a1d41SAngeloGioacchino Del Regno static const struct regmap_config sdm660_snoc_regmap_config = { 1786f80a1d41SAngeloGioacchino Del Regno .reg_bits = 32, 1787f80a1d41SAngeloGioacchino Del Regno .reg_stride = 4, 1788f80a1d41SAngeloGioacchino Del Regno .val_bits = 32, 1789f80a1d41SAngeloGioacchino Del Regno .max_register = 0x20000, 1790f80a1d41SAngeloGioacchino Del Regno .fast_io = true, 1791f80a1d41SAngeloGioacchino Del Regno }; 1792f80a1d41SAngeloGioacchino Del Regno 1793f80a1d41SAngeloGioacchino Del Regno static struct qcom_icc_desc sdm660_snoc = { 1794f80a1d41SAngeloGioacchino Del Regno .nodes = sdm660_snoc_nodes, 1795f80a1d41SAngeloGioacchino Del Regno .num_nodes = ARRAY_SIZE(sdm660_snoc_nodes), 1796f80a1d41SAngeloGioacchino Del Regno .regmap_cfg = &sdm660_snoc_regmap_config, 1797f80a1d41SAngeloGioacchino Del Regno }; 1798f80a1d41SAngeloGioacchino Del Regno 1799f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_bimc_set_qos_health(struct regmap *rmap, 1800f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_qos *qos, 1801f80a1d41SAngeloGioacchino Del Regno int regnum) 1802f80a1d41SAngeloGioacchino Del Regno { 1803f80a1d41SAngeloGioacchino Del Regno u32 val; 1804f80a1d41SAngeloGioacchino Del Regno u32 mask; 1805f80a1d41SAngeloGioacchino Del Regno 1806f80a1d41SAngeloGioacchino Del Regno val = qos->prio_level; 1807f80a1d41SAngeloGioacchino Del Regno mask = M_BKE_HEALTH_CFG_PRIOLVL_MASK; 1808f80a1d41SAngeloGioacchino Del Regno 1809f80a1d41SAngeloGioacchino Del Regno val |= qos->areq_prio << M_BKE_HEALTH_CFG_AREQPRIO_SHIFT; 1810f80a1d41SAngeloGioacchino Del Regno mask |= M_BKE_HEALTH_CFG_AREQPRIO_MASK; 1811f80a1d41SAngeloGioacchino Del Regno 1812f80a1d41SAngeloGioacchino Del Regno /* LIMITCMDS is not present on M_BKE_HEALTH_3 */ 1813f80a1d41SAngeloGioacchino Del Regno if (regnum != 3) { 1814f80a1d41SAngeloGioacchino Del Regno val |= qos->limit_commands << M_BKE_HEALTH_CFG_LIMITCMDS_SHIFT; 1815f80a1d41SAngeloGioacchino Del Regno mask |= M_BKE_HEALTH_CFG_LIMITCMDS_MASK; 1816f80a1d41SAngeloGioacchino Del Regno } 1817f80a1d41SAngeloGioacchino Del Regno 1818f80a1d41SAngeloGioacchino Del Regno return regmap_update_bits(rmap, 1819f80a1d41SAngeloGioacchino Del Regno M_BKE_HEALTH_CFG_ADDR(regnum, qos->qos_port), 1820f80a1d41SAngeloGioacchino Del Regno mask, val); 1821f80a1d41SAngeloGioacchino Del Regno } 1822f80a1d41SAngeloGioacchino Del Regno 1823f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set_bimc_qos(struct icc_node *src, u64 max_bw, 1824f80a1d41SAngeloGioacchino Del Regno bool bypass_mode) 1825f80a1d41SAngeloGioacchino Del Regno { 1826f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp; 1827f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node *qn; 1828f80a1d41SAngeloGioacchino Del Regno struct icc_provider *provider; 1829f80a1d41SAngeloGioacchino Del Regno u32 mode = NOC_QOS_MODE_BYPASS; 1830f80a1d41SAngeloGioacchino Del Regno u32 val = 0; 1831f80a1d41SAngeloGioacchino Del Regno int i, rc = 0; 1832f80a1d41SAngeloGioacchino Del Regno 1833f80a1d41SAngeloGioacchino Del Regno qn = src->data; 1834f80a1d41SAngeloGioacchino Del Regno provider = src->provider; 1835f80a1d41SAngeloGioacchino Del Regno qp = to_qcom_provider(provider); 1836f80a1d41SAngeloGioacchino Del Regno 1837*656ba110SDmitry Baryshkov if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID) 1838f80a1d41SAngeloGioacchino Del Regno mode = qn->qos.qos_mode; 1839f80a1d41SAngeloGioacchino Del Regno 1840f80a1d41SAngeloGioacchino Del Regno /* QoS Priority: The QoS Health parameters are getting considered 1841f80a1d41SAngeloGioacchino Del Regno * only if we are NOT in Bypass Mode. 1842f80a1d41SAngeloGioacchino Del Regno */ 1843f80a1d41SAngeloGioacchino Del Regno if (mode != NOC_QOS_MODE_BYPASS) { 1844f80a1d41SAngeloGioacchino Del Regno for (i = 3; i >= 0; i--) { 1845f80a1d41SAngeloGioacchino Del Regno rc = qcom_icc_bimc_set_qos_health(qp->regmap, 1846f80a1d41SAngeloGioacchino Del Regno &qn->qos, i); 1847f80a1d41SAngeloGioacchino Del Regno if (rc) 1848f80a1d41SAngeloGioacchino Del Regno return rc; 1849f80a1d41SAngeloGioacchino Del Regno } 1850f80a1d41SAngeloGioacchino Del Regno 1851f80a1d41SAngeloGioacchino Del Regno /* Set BKE_EN to 1 when Fixed, Regulator or Limiter Mode */ 1852f80a1d41SAngeloGioacchino Del Regno val = 1; 1853f80a1d41SAngeloGioacchino Del Regno } 1854f80a1d41SAngeloGioacchino Del Regno 1855f80a1d41SAngeloGioacchino Del Regno return regmap_update_bits(qp->regmap, M_BKE_EN_ADDR(qn->qos.qos_port), 1856f80a1d41SAngeloGioacchino Del Regno M_BKE_EN_EN_BMASK, val); 1857f80a1d41SAngeloGioacchino Del Regno } 1858f80a1d41SAngeloGioacchino Del Regno 1859f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_noc_set_qos_priority(struct regmap *rmap, 1860f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_qos *qos) 1861f80a1d41SAngeloGioacchino Del Regno { 1862f80a1d41SAngeloGioacchino Del Regno u32 val; 1863f80a1d41SAngeloGioacchino Del Regno int rc; 1864f80a1d41SAngeloGioacchino Del Regno 1865f80a1d41SAngeloGioacchino Del Regno /* Must be updated one at a time, P1 first, P0 last */ 1866f80a1d41SAngeloGioacchino Del Regno val = qos->areq_prio << NOC_QOS_PRIORITY_P1_SHIFT; 1867f80a1d41SAngeloGioacchino Del Regno rc = regmap_update_bits(rmap, NOC_QOS_PRIORITYn_ADDR(qos->qos_port), 18685833c9b8SShawn Guo NOC_QOS_PRIORITY_P1_MASK, val); 1869f80a1d41SAngeloGioacchino Del Regno if (rc) 1870f80a1d41SAngeloGioacchino Del Regno return rc; 1871f80a1d41SAngeloGioacchino Del Regno 1872f80a1d41SAngeloGioacchino Del Regno return regmap_update_bits(rmap, NOC_QOS_PRIORITYn_ADDR(qos->qos_port), 18735833c9b8SShawn Guo NOC_QOS_PRIORITY_P0_MASK, qos->prio_level); 1874f80a1d41SAngeloGioacchino Del Regno } 1875f80a1d41SAngeloGioacchino Del Regno 1876f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set_noc_qos(struct icc_node *src, u64 max_bw) 1877f80a1d41SAngeloGioacchino Del Regno { 1878f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp; 1879f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node *qn; 1880f80a1d41SAngeloGioacchino Del Regno struct icc_provider *provider; 1881f80a1d41SAngeloGioacchino Del Regno u32 mode = NOC_QOS_MODE_BYPASS; 1882f80a1d41SAngeloGioacchino Del Regno int rc = 0; 1883f80a1d41SAngeloGioacchino Del Regno 1884f80a1d41SAngeloGioacchino Del Regno qn = src->data; 1885f80a1d41SAngeloGioacchino Del Regno provider = src->provider; 1886f80a1d41SAngeloGioacchino Del Regno qp = to_qcom_provider(provider); 1887f80a1d41SAngeloGioacchino Del Regno 1888f80a1d41SAngeloGioacchino Del Regno if (qn->qos.qos_port < 0) { 1889f80a1d41SAngeloGioacchino Del Regno dev_dbg(src->provider->dev, 1890f80a1d41SAngeloGioacchino Del Regno "NoC QoS: Skipping %s: vote aggregated on parent.\n", 1891f80a1d41SAngeloGioacchino Del Regno qn->name); 1892f80a1d41SAngeloGioacchino Del Regno return 0; 1893f80a1d41SAngeloGioacchino Del Regno } 1894f80a1d41SAngeloGioacchino Del Regno 1895*656ba110SDmitry Baryshkov if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID) 1896f80a1d41SAngeloGioacchino Del Regno mode = qn->qos.qos_mode; 1897f80a1d41SAngeloGioacchino Del Regno 1898f80a1d41SAngeloGioacchino Del Regno if (mode == NOC_QOS_MODE_FIXED) { 1899f80a1d41SAngeloGioacchino Del Regno dev_dbg(src->provider->dev, "NoC QoS: %s: Set Fixed mode\n", 1900f80a1d41SAngeloGioacchino Del Regno qn->name); 1901f80a1d41SAngeloGioacchino Del Regno rc = qcom_icc_noc_set_qos_priority(qp->regmap, &qn->qos); 1902f80a1d41SAngeloGioacchino Del Regno if (rc) 1903f80a1d41SAngeloGioacchino Del Regno return rc; 1904f80a1d41SAngeloGioacchino Del Regno } else if (mode == NOC_QOS_MODE_BYPASS) { 1905f80a1d41SAngeloGioacchino Del Regno dev_dbg(src->provider->dev, "NoC QoS: %s: Set Bypass mode\n", 1906f80a1d41SAngeloGioacchino Del Regno qn->name); 1907f80a1d41SAngeloGioacchino Del Regno } 1908f80a1d41SAngeloGioacchino Del Regno 1909f80a1d41SAngeloGioacchino Del Regno return regmap_update_bits(qp->regmap, 1910f80a1d41SAngeloGioacchino Del Regno NOC_QOS_MODEn_ADDR(qn->qos.qos_port), 1911f80a1d41SAngeloGioacchino Del Regno NOC_QOS_MODEn_MASK, mode); 1912f80a1d41SAngeloGioacchino Del Regno } 1913f80a1d41SAngeloGioacchino Del Regno 1914f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_qos_set(struct icc_node *node, u64 sum_bw) 1915f80a1d41SAngeloGioacchino Del Regno { 1916f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp = to_qcom_provider(node->provider); 1917f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node *qn = node->data; 1918f80a1d41SAngeloGioacchino Del Regno 1919f80a1d41SAngeloGioacchino Del Regno dev_dbg(node->provider->dev, "Setting QoS for %s\n", qn->name); 1920f80a1d41SAngeloGioacchino Del Regno 1921f80a1d41SAngeloGioacchino Del Regno if (qp->is_bimc_node) 1922f80a1d41SAngeloGioacchino Del Regno return qcom_icc_set_bimc_qos(node, sum_bw, 1923f80a1d41SAngeloGioacchino Del Regno (qn->qos.qos_mode == NOC_QOS_MODE_BYPASS)); 1924f80a1d41SAngeloGioacchino Del Regno 1925f80a1d41SAngeloGioacchino Del Regno return qcom_icc_set_noc_qos(node, sum_bw); 1926f80a1d41SAngeloGioacchino Del Regno } 1927f80a1d41SAngeloGioacchino Del Regno 1928f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_rpm_set(int mas_rpm_id, int slv_rpm_id, u64 sum_bw) 1929f80a1d41SAngeloGioacchino Del Regno { 1930f80a1d41SAngeloGioacchino Del Regno int ret = 0; 1931f80a1d41SAngeloGioacchino Del Regno 1932f80a1d41SAngeloGioacchino Del Regno if (mas_rpm_id != -1) { 1933f80a1d41SAngeloGioacchino Del Regno ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE, 1934f80a1d41SAngeloGioacchino Del Regno RPM_BUS_MASTER_REQ, 1935f80a1d41SAngeloGioacchino Del Regno mas_rpm_id, 1936f80a1d41SAngeloGioacchino Del Regno sum_bw); 1937f80a1d41SAngeloGioacchino Del Regno if (ret) { 1938f80a1d41SAngeloGioacchino Del Regno pr_err("qcom_icc_rpm_smd_send mas %d error %d\n", 1939f80a1d41SAngeloGioacchino Del Regno mas_rpm_id, ret); 1940f80a1d41SAngeloGioacchino Del Regno return ret; 1941f80a1d41SAngeloGioacchino Del Regno } 1942f80a1d41SAngeloGioacchino Del Regno } 1943f80a1d41SAngeloGioacchino Del Regno 1944f80a1d41SAngeloGioacchino Del Regno if (slv_rpm_id != -1) { 1945f80a1d41SAngeloGioacchino Del Regno ret = qcom_icc_rpm_smd_send(QCOM_SMD_RPM_ACTIVE_STATE, 1946f80a1d41SAngeloGioacchino Del Regno RPM_BUS_SLAVE_REQ, 1947f80a1d41SAngeloGioacchino Del Regno slv_rpm_id, 1948f80a1d41SAngeloGioacchino Del Regno sum_bw); 1949f80a1d41SAngeloGioacchino Del Regno if (ret) { 1950f80a1d41SAngeloGioacchino Del Regno pr_err("qcom_icc_rpm_smd_send slv %d error %d\n", 1951f80a1d41SAngeloGioacchino Del Regno slv_rpm_id, ret); 1952f80a1d41SAngeloGioacchino Del Regno return ret; 1953f80a1d41SAngeloGioacchino Del Regno } 1954f80a1d41SAngeloGioacchino Del Regno } 1955f80a1d41SAngeloGioacchino Del Regno 1956f80a1d41SAngeloGioacchino Del Regno return ret; 1957f80a1d41SAngeloGioacchino Del Regno } 1958f80a1d41SAngeloGioacchino Del Regno 1959f80a1d41SAngeloGioacchino Del Regno static int qcom_icc_set(struct icc_node *src, struct icc_node *dst) 1960f80a1d41SAngeloGioacchino Del Regno { 1961f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp; 1962f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node *qn; 1963f80a1d41SAngeloGioacchino Del Regno struct icc_provider *provider; 1964f80a1d41SAngeloGioacchino Del Regno struct icc_node *n; 1965f80a1d41SAngeloGioacchino Del Regno u64 sum_bw; 1966f80a1d41SAngeloGioacchino Del Regno u64 max_peak_bw; 1967f80a1d41SAngeloGioacchino Del Regno u64 rate; 1968f80a1d41SAngeloGioacchino Del Regno u32 agg_avg = 0; 1969f80a1d41SAngeloGioacchino Del Regno u32 agg_peak = 0; 1970f80a1d41SAngeloGioacchino Del Regno int ret, i; 1971f80a1d41SAngeloGioacchino Del Regno 1972f80a1d41SAngeloGioacchino Del Regno qn = src->data; 1973f80a1d41SAngeloGioacchino Del Regno provider = src->provider; 1974f80a1d41SAngeloGioacchino Del Regno qp = to_qcom_provider(provider); 1975f80a1d41SAngeloGioacchino Del Regno 1976f80a1d41SAngeloGioacchino Del Regno list_for_each_entry(n, &provider->nodes, node_list) 1977f80a1d41SAngeloGioacchino Del Regno provider->aggregate(n, 0, n->avg_bw, n->peak_bw, 1978f80a1d41SAngeloGioacchino Del Regno &agg_avg, &agg_peak); 1979f80a1d41SAngeloGioacchino Del Regno 1980f80a1d41SAngeloGioacchino Del Regno sum_bw = icc_units_to_bps(agg_avg); 1981f80a1d41SAngeloGioacchino Del Regno max_peak_bw = icc_units_to_bps(agg_peak); 1982f80a1d41SAngeloGioacchino Del Regno 1983f80a1d41SAngeloGioacchino Del Regno if (!qn->qos.ap_owned) { 1984f80a1d41SAngeloGioacchino Del Regno /* send bandwidth request message to the RPM processor */ 1985f80a1d41SAngeloGioacchino Del Regno ret = qcom_icc_rpm_set(qn->mas_rpm_id, qn->slv_rpm_id, sum_bw); 1986f80a1d41SAngeloGioacchino Del Regno if (ret) 1987f80a1d41SAngeloGioacchino Del Regno return ret; 1988*656ba110SDmitry Baryshkov } else if (qn->qos.qos_mode != NOC_QOS_MODE_INVALID) { 1989f80a1d41SAngeloGioacchino Del Regno /* set bandwidth directly from the AP */ 1990f80a1d41SAngeloGioacchino Del Regno ret = qcom_icc_qos_set(src, sum_bw); 1991f80a1d41SAngeloGioacchino Del Regno if (ret) 1992f80a1d41SAngeloGioacchino Del Regno return ret; 1993f80a1d41SAngeloGioacchino Del Regno } 1994f80a1d41SAngeloGioacchino Del Regno 1995f80a1d41SAngeloGioacchino Del Regno rate = max(sum_bw, max_peak_bw); 1996f80a1d41SAngeloGioacchino Del Regno 1997f80a1d41SAngeloGioacchino Del Regno do_div(rate, qn->buswidth); 1998f80a1d41SAngeloGioacchino Del Regno 1999f80a1d41SAngeloGioacchino Del Regno if (qn->rate == rate) 2000f80a1d41SAngeloGioacchino Del Regno return 0; 2001f80a1d41SAngeloGioacchino Del Regno 2002f80a1d41SAngeloGioacchino Del Regno for (i = 0; i < qp->num_clks; i++) { 2003f80a1d41SAngeloGioacchino Del Regno ret = clk_set_rate(qp->bus_clks[i].clk, rate); 2004f80a1d41SAngeloGioacchino Del Regno if (ret) { 2005f80a1d41SAngeloGioacchino Del Regno pr_err("%s clk_set_rate error: %d\n", 2006f80a1d41SAngeloGioacchino Del Regno qp->bus_clks[i].id, ret); 2007f80a1d41SAngeloGioacchino Del Regno return ret; 2008f80a1d41SAngeloGioacchino Del Regno } 2009f80a1d41SAngeloGioacchino Del Regno } 2010f80a1d41SAngeloGioacchino Del Regno 2011f80a1d41SAngeloGioacchino Del Regno qn->rate = rate; 2012f80a1d41SAngeloGioacchino Del Regno 2013f80a1d41SAngeloGioacchino Del Regno return 0; 2014f80a1d41SAngeloGioacchino Del Regno } 2015f80a1d41SAngeloGioacchino Del Regno 2016f80a1d41SAngeloGioacchino Del Regno static int qnoc_probe(struct platform_device *pdev) 2017f80a1d41SAngeloGioacchino Del Regno { 2018f80a1d41SAngeloGioacchino Del Regno struct device *dev = &pdev->dev; 2019f80a1d41SAngeloGioacchino Del Regno const struct qcom_icc_desc *desc; 2020f80a1d41SAngeloGioacchino Del Regno struct icc_onecell_data *data; 2021f80a1d41SAngeloGioacchino Del Regno struct icc_provider *provider; 2022f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_node **qnodes; 2023f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp; 2024f80a1d41SAngeloGioacchino Del Regno struct icc_node *node; 2025f80a1d41SAngeloGioacchino Del Regno struct resource *res; 2026f80a1d41SAngeloGioacchino Del Regno size_t num_nodes, i; 2027f80a1d41SAngeloGioacchino Del Regno int ret; 2028f80a1d41SAngeloGioacchino Del Regno 2029f80a1d41SAngeloGioacchino Del Regno /* wait for the RPM proxy */ 2030f80a1d41SAngeloGioacchino Del Regno if (!qcom_icc_rpm_smd_available()) 2031f80a1d41SAngeloGioacchino Del Regno return -EPROBE_DEFER; 2032f80a1d41SAngeloGioacchino Del Regno 2033f80a1d41SAngeloGioacchino Del Regno desc = of_device_get_match_data(dev); 2034f80a1d41SAngeloGioacchino Del Regno if (!desc) 2035f80a1d41SAngeloGioacchino Del Regno return -EINVAL; 2036f80a1d41SAngeloGioacchino Del Regno 2037f80a1d41SAngeloGioacchino Del Regno qnodes = desc->nodes; 2038f80a1d41SAngeloGioacchino Del Regno num_nodes = desc->num_nodes; 2039f80a1d41SAngeloGioacchino Del Regno 2040f80a1d41SAngeloGioacchino Del Regno qp = devm_kzalloc(dev, sizeof(*qp), GFP_KERNEL); 2041f80a1d41SAngeloGioacchino Del Regno if (!qp) 2042f80a1d41SAngeloGioacchino Del Regno return -ENOMEM; 2043f80a1d41SAngeloGioacchino Del Regno 2044f80a1d41SAngeloGioacchino Del Regno data = devm_kzalloc(dev, struct_size(data, nodes, num_nodes), 2045f80a1d41SAngeloGioacchino Del Regno GFP_KERNEL); 2046f80a1d41SAngeloGioacchino Del Regno if (!data) 2047f80a1d41SAngeloGioacchino Del Regno return -ENOMEM; 2048f80a1d41SAngeloGioacchino Del Regno 2049f80a1d41SAngeloGioacchino Del Regno if (of_device_is_compatible(dev->of_node, "qcom,sdm660-mnoc")) { 2050f80a1d41SAngeloGioacchino Del Regno qp->bus_clks = devm_kmemdup(dev, bus_mm_clocks, 2051f80a1d41SAngeloGioacchino Del Regno sizeof(bus_mm_clocks), GFP_KERNEL); 2052f80a1d41SAngeloGioacchino Del Regno qp->num_clks = ARRAY_SIZE(bus_mm_clocks); 205313404ac8SShawn Guo } else if (of_device_is_compatible(dev->of_node, "qcom,sdm660-a2noc")) { 205413404ac8SShawn Guo qp->bus_clks = devm_kmemdup(dev, bus_a2noc_clocks, 205513404ac8SShawn Guo sizeof(bus_a2noc_clocks), GFP_KERNEL); 205613404ac8SShawn Guo qp->num_clks = ARRAY_SIZE(bus_a2noc_clocks); 2057f80a1d41SAngeloGioacchino Del Regno } else { 2058f80a1d41SAngeloGioacchino Del Regno if (of_device_is_compatible(dev->of_node, "qcom,sdm660-bimc")) 2059f80a1d41SAngeloGioacchino Del Regno qp->is_bimc_node = true; 2060f80a1d41SAngeloGioacchino Del Regno 2061f80a1d41SAngeloGioacchino Del Regno qp->bus_clks = devm_kmemdup(dev, bus_clocks, sizeof(bus_clocks), 2062f80a1d41SAngeloGioacchino Del Regno GFP_KERNEL); 2063f80a1d41SAngeloGioacchino Del Regno qp->num_clks = ARRAY_SIZE(bus_clocks); 2064f80a1d41SAngeloGioacchino Del Regno } 2065f80a1d41SAngeloGioacchino Del Regno if (!qp->bus_clks) 2066f80a1d41SAngeloGioacchino Del Regno return -ENOMEM; 2067f80a1d41SAngeloGioacchino Del Regno 2068f80a1d41SAngeloGioacchino Del Regno res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2069f80a1d41SAngeloGioacchino Del Regno if (!res) 2070f80a1d41SAngeloGioacchino Del Regno return -ENODEV; 2071f80a1d41SAngeloGioacchino Del Regno 2072f80a1d41SAngeloGioacchino Del Regno qp->mmio = devm_ioremap_resource(dev, res); 2073f80a1d41SAngeloGioacchino Del Regno if (IS_ERR(qp->mmio)) { 2074f80a1d41SAngeloGioacchino Del Regno dev_err(dev, "Cannot ioremap interconnect bus resource\n"); 2075f80a1d41SAngeloGioacchino Del Regno return PTR_ERR(qp->mmio); 2076f80a1d41SAngeloGioacchino Del Regno } 2077f80a1d41SAngeloGioacchino Del Regno 2078f80a1d41SAngeloGioacchino Del Regno qp->regmap = devm_regmap_init_mmio(dev, qp->mmio, desc->regmap_cfg); 2079f80a1d41SAngeloGioacchino Del Regno if (IS_ERR(qp->regmap)) { 2080f80a1d41SAngeloGioacchino Del Regno dev_err(dev, "Cannot regmap interconnect bus resource\n"); 2081f80a1d41SAngeloGioacchino Del Regno return PTR_ERR(qp->regmap); 2082f80a1d41SAngeloGioacchino Del Regno } 2083f80a1d41SAngeloGioacchino Del Regno 2084f80a1d41SAngeloGioacchino Del Regno ret = devm_clk_bulk_get(dev, qp->num_clks, qp->bus_clks); 2085f80a1d41SAngeloGioacchino Del Regno if (ret) 2086f80a1d41SAngeloGioacchino Del Regno return ret; 2087f80a1d41SAngeloGioacchino Del Regno 2088f80a1d41SAngeloGioacchino Del Regno ret = clk_bulk_prepare_enable(qp->num_clks, qp->bus_clks); 2089f80a1d41SAngeloGioacchino Del Regno if (ret) 2090f80a1d41SAngeloGioacchino Del Regno return ret; 2091f80a1d41SAngeloGioacchino Del Regno 2092f80a1d41SAngeloGioacchino Del Regno provider = &qp->provider; 2093f80a1d41SAngeloGioacchino Del Regno INIT_LIST_HEAD(&provider->nodes); 2094f80a1d41SAngeloGioacchino Del Regno provider->dev = dev; 2095f80a1d41SAngeloGioacchino Del Regno provider->set = qcom_icc_set; 2096f80a1d41SAngeloGioacchino Del Regno provider->aggregate = icc_std_aggregate; 2097f80a1d41SAngeloGioacchino Del Regno provider->xlate = of_icc_xlate_onecell; 2098f80a1d41SAngeloGioacchino Del Regno provider->data = data; 2099f80a1d41SAngeloGioacchino Del Regno 2100f80a1d41SAngeloGioacchino Del Regno ret = icc_provider_add(provider); 2101f80a1d41SAngeloGioacchino Del Regno if (ret) { 2102f80a1d41SAngeloGioacchino Del Regno dev_err(dev, "error adding interconnect provider: %d\n", ret); 2103f80a1d41SAngeloGioacchino Del Regno clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); 2104f80a1d41SAngeloGioacchino Del Regno return ret; 2105f80a1d41SAngeloGioacchino Del Regno } 2106f80a1d41SAngeloGioacchino Del Regno 2107f80a1d41SAngeloGioacchino Del Regno for (i = 0; i < num_nodes; i++) { 2108f80a1d41SAngeloGioacchino Del Regno size_t j; 2109f80a1d41SAngeloGioacchino Del Regno 2110f80a1d41SAngeloGioacchino Del Regno node = icc_node_create(qnodes[i]->id); 2111f80a1d41SAngeloGioacchino Del Regno if (IS_ERR(node)) { 2112f80a1d41SAngeloGioacchino Del Regno ret = PTR_ERR(node); 2113f80a1d41SAngeloGioacchino Del Regno goto err; 2114f80a1d41SAngeloGioacchino Del Regno } 2115f80a1d41SAngeloGioacchino Del Regno 2116f80a1d41SAngeloGioacchino Del Regno node->name = qnodes[i]->name; 2117f80a1d41SAngeloGioacchino Del Regno node->data = qnodes[i]; 2118f80a1d41SAngeloGioacchino Del Regno icc_node_add(node, provider); 2119f80a1d41SAngeloGioacchino Del Regno 2120f80a1d41SAngeloGioacchino Del Regno for (j = 0; j < qnodes[i]->num_links; j++) 2121f80a1d41SAngeloGioacchino Del Regno icc_link_create(node, qnodes[i]->links[j]); 2122f80a1d41SAngeloGioacchino Del Regno 2123f80a1d41SAngeloGioacchino Del Regno data->nodes[i] = node; 2124f80a1d41SAngeloGioacchino Del Regno } 2125f80a1d41SAngeloGioacchino Del Regno data->num_nodes = num_nodes; 2126f80a1d41SAngeloGioacchino Del Regno platform_set_drvdata(pdev, qp); 2127f80a1d41SAngeloGioacchino Del Regno 2128f80a1d41SAngeloGioacchino Del Regno return 0; 2129f80a1d41SAngeloGioacchino Del Regno err: 2130f80a1d41SAngeloGioacchino Del Regno icc_nodes_remove(provider); 2131f80a1d41SAngeloGioacchino Del Regno clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); 2132f80a1d41SAngeloGioacchino Del Regno icc_provider_del(provider); 2133f80a1d41SAngeloGioacchino Del Regno 2134f80a1d41SAngeloGioacchino Del Regno return ret; 2135f80a1d41SAngeloGioacchino Del Regno } 2136f80a1d41SAngeloGioacchino Del Regno 2137f80a1d41SAngeloGioacchino Del Regno static int qnoc_remove(struct platform_device *pdev) 2138f80a1d41SAngeloGioacchino Del Regno { 2139f80a1d41SAngeloGioacchino Del Regno struct qcom_icc_provider *qp = platform_get_drvdata(pdev); 2140f80a1d41SAngeloGioacchino Del Regno 2141f80a1d41SAngeloGioacchino Del Regno icc_nodes_remove(&qp->provider); 2142f80a1d41SAngeloGioacchino Del Regno clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); 2143f80a1d41SAngeloGioacchino Del Regno return icc_provider_del(&qp->provider); 2144f80a1d41SAngeloGioacchino Del Regno } 2145f80a1d41SAngeloGioacchino Del Regno 2146f80a1d41SAngeloGioacchino Del Regno static const struct of_device_id sdm660_noc_of_match[] = { 2147f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-a2noc", .data = &sdm660_a2noc }, 2148f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-bimc", .data = &sdm660_bimc }, 2149f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-cnoc", .data = &sdm660_cnoc }, 2150f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-gnoc", .data = &sdm660_gnoc }, 2151f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-mnoc", .data = &sdm660_mnoc }, 2152f80a1d41SAngeloGioacchino Del Regno { .compatible = "qcom,sdm660-snoc", .data = &sdm660_snoc }, 2153f80a1d41SAngeloGioacchino Del Regno { }, 2154f80a1d41SAngeloGioacchino Del Regno }; 2155f80a1d41SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, sdm660_noc_of_match); 2156f80a1d41SAngeloGioacchino Del Regno 2157f80a1d41SAngeloGioacchino Del Regno static struct platform_driver sdm660_noc_driver = { 2158f80a1d41SAngeloGioacchino Del Regno .probe = qnoc_probe, 2159f80a1d41SAngeloGioacchino Del Regno .remove = qnoc_remove, 2160f80a1d41SAngeloGioacchino Del Regno .driver = { 2161f80a1d41SAngeloGioacchino Del Regno .name = "qnoc-sdm660", 2162f80a1d41SAngeloGioacchino Del Regno .of_match_table = sdm660_noc_of_match, 2163f80a1d41SAngeloGioacchino Del Regno }, 2164f80a1d41SAngeloGioacchino Del Regno }; 2165f80a1d41SAngeloGioacchino Del Regno module_platform_driver(sdm660_noc_driver); 2166f80a1d41SAngeloGioacchino Del Regno MODULE_DESCRIPTION("Qualcomm sdm660 NoC driver"); 2167f80a1d41SAngeloGioacchino Del Regno MODULE_LICENSE("GPL v2"); 2168