Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

interconnect: qcom: Add MSM8976 interconnect provider driver

Add driver for interconnect busses found in MSM8976 based platforms.
The topology consists of four NoCs that are partially controlled by a
RPM processor.

Signed-off-by: Adam Skladowski <a39.skl@gmail.com>
Link: https://lore.kernel.org/r/20240709102728.15349-3-a39.skl@gmail.com
Signed-off-by: Georgi Djakov <djakov@kernel.org>

authored by

Adam Skladowski and committed by
Georgi Djakov
6e3ea1f3 e5b9032b

+1451
+9
drivers/interconnect/qcom/Kconfig
··· 53 53 This is a driver for the Qualcomm Network-on-Chip on msm8974-based 54 54 platforms. 55 55 56 + config INTERCONNECT_QCOM_MSM8976 57 + tristate "Qualcomm MSM8976 interconnect driver" 58 + depends on INTERCONNECT_QCOM 59 + depends on QCOM_SMD_RPM 60 + select INTERCONNECT_QCOM_SMD_RPM 61 + help 62 + This is a driver for the Qualcomm Network-on-Chip on msm8976-based 63 + platforms. 64 + 56 65 config INTERCONNECT_QCOM_MSM8996 57 66 tristate "Qualcomm MSM8996 interconnect driver" 58 67 depends on INTERCONNECT_QCOM
+2
drivers/interconnect/qcom/Makefile
··· 9 9 qnoc-msm8939-objs := msm8939.o 10 10 qnoc-msm8953-objs := msm8953.o 11 11 qnoc-msm8974-objs := msm8974.o 12 + qnoc-msm8976-objs := msm8976.o 12 13 qnoc-msm8996-objs := msm8996.o 13 14 icc-osm-l3-objs := osm-l3.o 14 15 qnoc-qcm2290-objs := qcm2290.o ··· 45 44 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8939) += qnoc-msm8939.o 46 45 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8953) += qnoc-msm8953.o 47 46 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8974) += qnoc-msm8974.o 47 + obj-$(CONFIG_INTERCONNECT_QCOM_MSM8976) += qnoc-msm8976.o 48 48 obj-$(CONFIG_INTERCONNECT_QCOM_MSM8996) += qnoc-msm8996.o 49 49 obj-$(CONFIG_INTERCONNECT_QCOM_OSM_L3) += icc-osm-l3.o 50 50 obj-$(CONFIG_INTERCONNECT_QCOM_QCM2290) += qnoc-qcm2290.o
+1440
drivers/interconnect/qcom/msm8976.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /* 3 + * Based on data from msm8976-bus.dtsi in Qualcomm's msm-3.10 release: 4 + * Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. 5 + */ 6 + 7 + #include <linux/device.h> 8 + #include <linux/interconnect-provider.h> 9 + #include <linux/mod_devicetable.h> 10 + #include <linux/module.h> 11 + #include <linux/platform_device.h> 12 + #include <linux/regmap.h> 13 + 14 + #include <dt-bindings/interconnect/qcom,msm8976.h> 15 + 16 + #include "icc-rpm.h" 17 + 18 + enum { 19 + QNOC_MASTER_AMPSS_M0 = 1, 20 + QNOC_MNOC_BIMC_MAS, 21 + QNOC_SNOC_BIMC_MAS, 22 + QNOC_MASTER_TCU_0, 23 + QNOC_MASTER_USB_HS2, 24 + QNOC_MASTER_BLSP_1, 25 + QNOC_MASTER_USB_HS, 26 + QNOC_MASTER_BLSP_2, 27 + QNOC_MASTER_CRYPTO_CORE0, 28 + QNOC_MASTER_SDCC_1, 29 + QNOC_MASTER_SDCC_2, 30 + QNOC_MASTER_SDCC_3, 31 + QNOC_SNOC_PNOC_MAS, 32 + QNOC_MASTER_LPASS_AHB, 33 + QNOC_MASTER_SPDM, 34 + QNOC_MASTER_DEHR, 35 + QNOC_MASTER_XM_USB_HS1, 36 + QNOC_MASTER_QDSS_BAM, 37 + QNOC_BIMC_SNOC_MAS, 38 + QNOC_MASTER_JPEG, 39 + QNOC_MASTER_GRAPHICS_3D, 40 + QNOC_MASTER_MDP_PORT0, 41 + QNOC_MASTER_MDP_PORT1, 42 + QNOC_PNOC_SNOC_MAS, 43 + QNOC_MASTER_VIDEO_P0, 44 + QNOC_MASTER_VIDEO_P1, 45 + QNOC_MASTER_VFE0, 46 + QNOC_MASTER_VFE1, 47 + QNOC_MASTER_CPP, 48 + QNOC_MASTER_QDSS_ETR, 49 + QNOC_MASTER_LPASS_PROC, 50 + QNOC_MASTER_IPA, 51 + QNOC_PNOC_M_0, 52 + QNOC_PNOC_M_1, 53 + QNOC_PNOC_INT_0, 54 + QNOC_PNOC_INT_1, 55 + QNOC_PNOC_INT_2, 56 + QNOC_PNOC_SLV_1, 57 + QNOC_PNOC_SLV_2, 58 + QNOC_PNOC_SLV_3, 59 + QNOC_PNOC_SLV_4, 60 + QNOC_PNOC_SLV_8, 61 + QNOC_PNOC_SLV_9, 62 + QNOC_SNOC_MM_INT_0, 63 + QNOC_SNOC_QDSS_INT, 64 + QNOC_SNOC_INT_0, 65 + QNOC_SNOC_INT_1, 66 + QNOC_SNOC_INT_2, 67 + QNOC_SLAVE_EBI_CH0, 68 + QNOC_BIMC_SNOC_SLV, 69 + QNOC_SLAVE_TCSR, 70 + QNOC_SLAVE_TLMM, 71 + QNOC_SLAVE_CRYPTO_0_CFG, 72 + QNOC_SLAVE_MESSAGE_RAM, 73 + QNOC_SLAVE_PDM, 74 + QNOC_SLAVE_PRNG, 75 + QNOC_SLAVE_PMIC_ARB, 76 + QNOC_SLAVE_SNOC_CFG, 77 + QNOC_SLAVE_DCC_CFG, 78 + QNOC_SLAVE_CAMERA_CFG, 79 + QNOC_SLAVE_DISPLAY_CFG, 80 + QNOC_SLAVE_VENUS_CFG, 81 + QNOC_SLAVE_SDCC_1, 82 + QNOC_SLAVE_BLSP_1, 83 + QNOC_SLAVE_USB_HS, 84 + QNOC_SLAVE_SDCC_3, 85 + QNOC_SLAVE_SDCC_2, 86 + QNOC_SLAVE_GRAPHICS_3D_CFG, 87 + QNOC_SLAVE_USB_HS2, 88 + QNOC_SLAVE_BLSP_2, 89 + QNOC_PNOC_SNOC_SLV, 90 + QNOC_SLAVE_APPSS, 91 + QNOC_MNOC_BIMC_SLV, 92 + QNOC_SNOC_BIMC_SLV, 93 + QNOC_SLAVE_SYSTEM_IMEM, 94 + QNOC_SNOC_PNOC_SLV, 95 + QNOC_SLAVE_QDSS_STM, 96 + QNOC_SLAVE_CATS_128, 97 + QNOC_SLAVE_OCMEM_64, 98 + QNOC_SLAVE_LPASS, 99 + }; 100 + 101 + static const u16 mas_apps_proc_links[] = { 102 + QNOC_SLAVE_EBI_CH0, 103 + QNOC_BIMC_SNOC_SLV 104 + }; 105 + 106 + static struct qcom_icc_node mas_apps_proc = { 107 + .name = "mas_apps_proc", 108 + .id = QNOC_MASTER_AMPSS_M0, 109 + .buswidth = 16, 110 + .mas_rpm_id = 0, 111 + .slv_rpm_id = -1, 112 + .qos.ap_owned = true, 113 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 114 + .qos.areq_prio = 0, 115 + .qos.prio_level = 0, 116 + .qos.qos_port = 0, 117 + .num_links = ARRAY_SIZE(mas_apps_proc_links), 118 + .links = mas_apps_proc_links, 119 + }; 120 + 121 + static const u16 mas_smmnoc_bimc_links[] = { 122 + QNOC_SLAVE_EBI_CH0 123 + }; 124 + 125 + static struct qcom_icc_node mas_smmnoc_bimc = { 126 + .name = "mas_smmnoc_bimc", 127 + .id = QNOC_MNOC_BIMC_MAS, 128 + .channels = 2, 129 + .buswidth = 16, 130 + .mas_rpm_id = 135, 131 + .slv_rpm_id = -1, 132 + .qos.ap_owned = true, 133 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 134 + .qos.areq_prio = 0, 135 + .qos.prio_level = 0, 136 + .qos.qos_port = 2, 137 + .num_links = ARRAY_SIZE(mas_smmnoc_bimc_links), 138 + .links = mas_smmnoc_bimc_links, 139 + }; 140 + 141 + static const u16 mas_snoc_bimc_links[] = { 142 + QNOC_SLAVE_EBI_CH0 143 + }; 144 + 145 + static struct qcom_icc_node mas_snoc_bimc = { 146 + .name = "mas_snoc_bimc", 147 + .id = QNOC_SNOC_BIMC_MAS, 148 + .channels = 2, 149 + .buswidth = 16, 150 + .mas_rpm_id = 3, 151 + .slv_rpm_id = -1, 152 + .qos.ap_owned = true, 153 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 154 + .qos.areq_prio = 0, 155 + .qos.prio_level = 0, 156 + .qos.qos_port = 3, 157 + .num_links = ARRAY_SIZE(mas_snoc_bimc_links), 158 + .links = mas_snoc_bimc_links, 159 + }; 160 + 161 + static const u16 mas_tcu_0_links[] = { 162 + QNOC_SLAVE_EBI_CH0, 163 + QNOC_BIMC_SNOC_SLV 164 + }; 165 + 166 + static struct qcom_icc_node mas_tcu_0 = { 167 + .name = "mas_tcu_0", 168 + .id = QNOC_MASTER_TCU_0, 169 + .buswidth = 16, 170 + .mas_rpm_id = 102, 171 + .slv_rpm_id = -1, 172 + .qos.ap_owned = true, 173 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 174 + .qos.areq_prio = 0, 175 + .qos.prio_level = 2, 176 + .qos.qos_port = 4, 177 + .num_links = ARRAY_SIZE(mas_tcu_0_links), 178 + .links = mas_tcu_0_links, 179 + }; 180 + 181 + static const u16 mas_usb_hs2_links[] = { 182 + QNOC_PNOC_M_0 183 + }; 184 + 185 + static struct qcom_icc_node mas_usb_hs2 = { 186 + .name = "mas_usb_hs2", 187 + .id = QNOC_MASTER_USB_HS2, 188 + .buswidth = 4, 189 + .mas_rpm_id = 57, 190 + .slv_rpm_id = -1, 191 + .num_links = ARRAY_SIZE(mas_usb_hs2_links), 192 + .links = mas_usb_hs2_links, 193 + }; 194 + 195 + static const u16 mas_blsp_1_links[] = { 196 + QNOC_PNOC_M_1 197 + }; 198 + 199 + static struct qcom_icc_node mas_blsp_1 = { 200 + .name = "mas_blsp_1", 201 + .id = QNOC_MASTER_BLSP_1, 202 + .buswidth = 4, 203 + .mas_rpm_id = 41, 204 + .slv_rpm_id = -1, 205 + .num_links = ARRAY_SIZE(mas_blsp_1_links), 206 + .links = mas_blsp_1_links, 207 + }; 208 + 209 + static const u16 mas_usb_hs1_links[] = { 210 + QNOC_PNOC_M_1 211 + }; 212 + 213 + static struct qcom_icc_node mas_usb_hs1 = { 214 + .name = "mas_usb_hs1", 215 + .id = QNOC_MASTER_USB_HS, 216 + .buswidth = 4, 217 + .mas_rpm_id = 42, 218 + .slv_rpm_id = -1, 219 + .num_links = ARRAY_SIZE(mas_usb_hs1_links), 220 + .links = mas_usb_hs1_links, 221 + }; 222 + 223 + static const u16 mas_blsp_2_links[] = { 224 + QNOC_PNOC_M_1 225 + }; 226 + 227 + static struct qcom_icc_node mas_blsp_2 = { 228 + .name = "mas_blsp_2", 229 + .id = QNOC_MASTER_BLSP_2, 230 + .buswidth = 4, 231 + .mas_rpm_id = 39, 232 + .slv_rpm_id = -1, 233 + .num_links = ARRAY_SIZE(mas_blsp_2_links), 234 + .links = mas_blsp_2_links, 235 + }; 236 + 237 + static const u16 mas_crypto_links[] = { 238 + QNOC_PNOC_INT_1 239 + }; 240 + 241 + static struct qcom_icc_node mas_crypto = { 242 + .name = "mas_crypto", 243 + .id = QNOC_MASTER_CRYPTO_CORE0, 244 + .buswidth = 8, 245 + .mas_rpm_id = 23, 246 + .slv_rpm_id = -1, 247 + .qos.ap_owned = true, 248 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 249 + .qos.areq_prio = 0, 250 + .qos.prio_level = 0, 251 + .qos.qos_port = 0, 252 + .num_links = ARRAY_SIZE(mas_crypto_links), 253 + .links = mas_crypto_links, 254 + }; 255 + 256 + static const u16 mas_sdcc_1_links[] = { 257 + QNOC_PNOC_INT_1 258 + }; 259 + 260 + static struct qcom_icc_node mas_sdcc_1 = { 261 + .name = "mas_sdcc_1", 262 + .id = QNOC_MASTER_SDCC_1, 263 + .buswidth = 8, 264 + .mas_rpm_id = 33, 265 + .slv_rpm_id = -1, 266 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 267 + .qos.areq_prio = 0, 268 + .qos.prio_level = 0, 269 + .qos.qos_port = 7, 270 + .num_links = ARRAY_SIZE(mas_sdcc_1_links), 271 + .links = mas_sdcc_1_links, 272 + }; 273 + 274 + static const u16 mas_sdcc_2_links[] = { 275 + QNOC_PNOC_INT_1 276 + }; 277 + 278 + static struct qcom_icc_node mas_sdcc_2 = { 279 + .name = "mas_sdcc_2", 280 + .id = QNOC_MASTER_SDCC_2, 281 + .buswidth = 8, 282 + .mas_rpm_id = 35, 283 + .slv_rpm_id = -1, 284 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 285 + .qos.areq_prio = 0, 286 + .qos.prio_level = 0, 287 + .qos.qos_port = 8, 288 + .num_links = ARRAY_SIZE(mas_sdcc_2_links), 289 + .links = mas_sdcc_2_links, 290 + }; 291 + 292 + static const u16 mas_sdcc_3_links[] = { 293 + QNOC_PNOC_INT_1 294 + }; 295 + 296 + static struct qcom_icc_node mas_sdcc_3 = { 297 + .name = "mas_sdcc_3", 298 + .id = QNOC_MASTER_SDCC_3, 299 + .buswidth = 8, 300 + .mas_rpm_id = 34, 301 + .slv_rpm_id = -1, 302 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 303 + .qos.areq_prio = 0, 304 + .qos.prio_level = 0, 305 + .qos.qos_port = 10, 306 + .num_links = ARRAY_SIZE(mas_sdcc_3_links), 307 + .links = mas_sdcc_3_links, 308 + }; 309 + 310 + static const u16 mas_snoc_pcnoc_links[] = { 311 + QNOC_PNOC_INT_2 312 + }; 313 + 314 + static struct qcom_icc_node mas_snoc_pcnoc = { 315 + .name = "mas_snoc_pcnoc", 316 + .id = QNOC_SNOC_PNOC_MAS, 317 + .buswidth = 8, 318 + .mas_rpm_id = 77, 319 + .slv_rpm_id = -1, 320 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 321 + .qos.areq_prio = 0, 322 + .qos.prio_level = 0, 323 + .qos.qos_port = 9, 324 + .num_links = ARRAY_SIZE(mas_snoc_pcnoc_links), 325 + .links = mas_snoc_pcnoc_links, 326 + }; 327 + 328 + static const u16 mas_lpass_ahb_links[] = { 329 + QNOC_PNOC_SNOC_SLV 330 + }; 331 + 332 + static struct qcom_icc_node mas_lpass_ahb = { 333 + .name = "mas_lpass_ahb", 334 + .id = QNOC_MASTER_LPASS_AHB, 335 + .buswidth = 8, 336 + .mas_rpm_id = 18, 337 + .slv_rpm_id = -1, 338 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 339 + .qos.areq_prio = 0, 340 + .qos.prio_level = 0, 341 + .qos.qos_port = 12, 342 + .num_links = ARRAY_SIZE(mas_lpass_ahb_links), 343 + .links = mas_lpass_ahb_links, 344 + }; 345 + 346 + static const u16 mas_spdm_links[] = { 347 + QNOC_PNOC_M_0 348 + }; 349 + 350 + static struct qcom_icc_node mas_spdm = { 351 + .name = "mas_spdm", 352 + .id = QNOC_MASTER_SPDM, 353 + .buswidth = 4, 354 + .mas_rpm_id = -1, 355 + .slv_rpm_id = -1, 356 + .num_links = ARRAY_SIZE(mas_spdm_links), 357 + .links = mas_spdm_links, 358 + }; 359 + 360 + static const u16 mas_dehr_links[] = { 361 + QNOC_PNOC_M_0 362 + }; 363 + 364 + static struct qcom_icc_node mas_dehr = { 365 + .name = "mas_dehr", 366 + .id = QNOC_MASTER_DEHR, 367 + .buswidth = 4, 368 + .mas_rpm_id = -1, 369 + .slv_rpm_id = -1, 370 + .num_links = ARRAY_SIZE(mas_dehr_links), 371 + .links = mas_dehr_links, 372 + }; 373 + 374 + static const u16 mas_xm_usb_hs1_links[] = { 375 + QNOC_PNOC_INT_0 376 + }; 377 + 378 + static struct qcom_icc_node mas_xm_usb_hs1 = { 379 + .name = "mas_xm_usb_hs1", 380 + .id = QNOC_MASTER_XM_USB_HS1, 381 + .buswidth = 8, 382 + .mas_rpm_id = -1, 383 + .slv_rpm_id = -1, 384 + .num_links = ARRAY_SIZE(mas_xm_usb_hs1_links), 385 + .links = mas_xm_usb_hs1_links, 386 + }; 387 + 388 + static const u16 mas_qdss_bam_links[] = { 389 + QNOC_SNOC_QDSS_INT 390 + }; 391 + 392 + static struct qcom_icc_node mas_qdss_bam = { 393 + .name = "mas_qdss_bam", 394 + .id = QNOC_MASTER_QDSS_BAM, 395 + .buswidth = 4, 396 + .mas_rpm_id = 19, 397 + .slv_rpm_id = -1, 398 + .qos.ap_owned = true, 399 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 400 + .qos.areq_prio = 1, 401 + .qos.prio_level = 1, 402 + .qos.qos_port = 11, 403 + .num_links = ARRAY_SIZE(mas_qdss_bam_links), 404 + .links = mas_qdss_bam_links, 405 + }; 406 + 407 + static const u16 mas_bimc_snoc_links[] = { 408 + QNOC_SNOC_INT_2 409 + }; 410 + 411 + static struct qcom_icc_node mas_bimc_snoc = { 412 + .name = "mas_bimc_snoc", 413 + .id = QNOC_BIMC_SNOC_MAS, 414 + .buswidth = 8, 415 + .mas_rpm_id = 21, 416 + .slv_rpm_id = -1, 417 + .num_links = ARRAY_SIZE(mas_bimc_snoc_links), 418 + .links = mas_bimc_snoc_links, 419 + }; 420 + 421 + static const u16 mas_jpeg_links[] = { 422 + QNOC_SNOC_MM_INT_0, 423 + QNOC_MNOC_BIMC_SLV 424 + }; 425 + 426 + static struct qcom_icc_node mas_jpeg = { 427 + .name = "mas_jpeg", 428 + .id = QNOC_MASTER_JPEG, 429 + .buswidth = 16, 430 + .mas_rpm_id = 7, 431 + .slv_rpm_id = -1, 432 + .qos.ap_owned = true, 433 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 434 + .qos.areq_prio = 0, 435 + .qos.prio_level = 0, 436 + .qos.qos_port = 6, 437 + .num_links = ARRAY_SIZE(mas_jpeg_links), 438 + .links = mas_jpeg_links, 439 + }; 440 + 441 + static const u16 mas_oxili_links[] = { 442 + QNOC_MNOC_BIMC_SLV, 443 + QNOC_SNOC_MM_INT_0 444 + }; 445 + 446 + static struct qcom_icc_node mas_oxili = { 447 + .name = "mas_oxili", 448 + .id = QNOC_MASTER_GRAPHICS_3D, 449 + .channels = 2, 450 + .buswidth = 16, 451 + .ib_coeff = 200, 452 + .mas_rpm_id = 6, 453 + .slv_rpm_id = -1, 454 + .qos.ap_owned = true, 455 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 456 + .qos.areq_prio = 0, 457 + .qos.prio_level = 0, 458 + .qos.qos_port = 16, /* [16, 17] */ 459 + .num_links = ARRAY_SIZE(mas_oxili_links), 460 + .links = mas_oxili_links, 461 + }; 462 + 463 + static const u16 mas_mdp0_links[] = { 464 + QNOC_SNOC_MM_INT_0, 465 + QNOC_MNOC_BIMC_SLV 466 + }; 467 + 468 + static struct qcom_icc_node mas_mdp0 = { 469 + .name = "mas_mdp0", 470 + .id = QNOC_MASTER_MDP_PORT0, 471 + .buswidth = 16, 472 + .ib_coeff = 50, 473 + .mas_rpm_id = 8, 474 + .slv_rpm_id = -1, 475 + .qos.ap_owned = true, 476 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 477 + .qos.areq_prio = 0, 478 + .qos.prio_level = 0, 479 + .qos.qos_port = 7, 480 + .num_links = ARRAY_SIZE(mas_mdp0_links), 481 + .links = mas_mdp0_links, 482 + }; 483 + 484 + static const u16 mas_mdp1_links[] = { 485 + QNOC_SNOC_MM_INT_0, 486 + QNOC_MNOC_BIMC_SLV 487 + }; 488 + 489 + static struct qcom_icc_node mas_mdp1 = { 490 + .name = "mas_mdp1", 491 + .id = QNOC_MASTER_MDP_PORT1, 492 + .buswidth = 16, 493 + .ib_coeff = 50, 494 + .mas_rpm_id = 61, 495 + .slv_rpm_id = -1, 496 + .qos.ap_owned = true, 497 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 498 + .qos.areq_prio = 0, 499 + .qos.prio_level = 0, 500 + .qos.qos_port = 13, 501 + .num_links = ARRAY_SIZE(mas_mdp1_links), 502 + .links = mas_mdp1_links, 503 + }; 504 + 505 + static const u16 mas_pcnoc_snoc_links[] = { 506 + QNOC_SNOC_INT_2 507 + }; 508 + 509 + static struct qcom_icc_node mas_pcnoc_snoc = { 510 + .name = "mas_pcnoc_snoc", 511 + .id = QNOC_PNOC_SNOC_MAS, 512 + .buswidth = 8, 513 + .mas_rpm_id = 29, 514 + .slv_rpm_id = -1, 515 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 516 + .qos.areq_prio = 0, 517 + .qos.prio_level = 0, 518 + .qos.qos_port = 5, 519 + .num_links = ARRAY_SIZE(mas_pcnoc_snoc_links), 520 + .links = mas_pcnoc_snoc_links, 521 + }; 522 + 523 + static const u16 mas_venus_0_links[] = { 524 + QNOC_SNOC_MM_INT_0, 525 + QNOC_MNOC_BIMC_SLV 526 + }; 527 + 528 + static struct qcom_icc_node mas_venus_0 = { 529 + .name = "mas_venus_0", 530 + .id = QNOC_MASTER_VIDEO_P0, 531 + .buswidth = 16, 532 + .mas_rpm_id = 9, 533 + .slv_rpm_id = -1, 534 + .qos.ap_owned = true, 535 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 536 + .qos.areq_prio = 0, 537 + .qos.prio_level = 0, 538 + .qos.qos_port = 8, 539 + .num_links = ARRAY_SIZE(mas_venus_0_links), 540 + .links = mas_venus_0_links, 541 + }; 542 + 543 + static const u16 mas_venus_1_links[] = { 544 + QNOC_SNOC_MM_INT_0, 545 + QNOC_MNOC_BIMC_SLV 546 + }; 547 + 548 + static struct qcom_icc_node mas_venus_1 = { 549 + .name = "mas_venus_1", 550 + .id = QNOC_MASTER_VIDEO_P1, 551 + .buswidth = 16, 552 + .mas_rpm_id = 10, 553 + .slv_rpm_id = -1, 554 + .qos.ap_owned = true, 555 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 556 + .qos.areq_prio = 0, 557 + .qos.prio_level = 0, 558 + .qos.qos_port = 14, 559 + .num_links = ARRAY_SIZE(mas_venus_1_links), 560 + .links = mas_venus_1_links, 561 + }; 562 + 563 + static const u16 mas_vfe_0_links[] = { 564 + QNOC_SNOC_MM_INT_0, 565 + QNOC_MNOC_BIMC_SLV 566 + }; 567 + 568 + static struct qcom_icc_node mas_vfe_0 = { 569 + .name = "mas_vfe_0", 570 + .id = QNOC_MASTER_VFE0, 571 + .buswidth = 16, 572 + .mas_rpm_id = 11, 573 + .slv_rpm_id = -1, 574 + .qos.ap_owned = true, 575 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 576 + .qos.areq_prio = 0, 577 + .qos.prio_level = 0, 578 + .qos.qos_port = 9, 579 + .num_links = ARRAY_SIZE(mas_vfe_0_links), 580 + .links = mas_vfe_0_links, 581 + }; 582 + 583 + static const u16 mas_vfe_1_links[] = { 584 + QNOC_SNOC_MM_INT_0, 585 + QNOC_MNOC_BIMC_SLV 586 + }; 587 + 588 + static struct qcom_icc_node mas_vfe_1 = { 589 + .name = "mas_vfe_1", 590 + .id = QNOC_MASTER_VFE1, 591 + .buswidth = 16, 592 + .mas_rpm_id = 133, 593 + .slv_rpm_id = -1, 594 + .qos.ap_owned = true, 595 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 596 + .qos.areq_prio = 0, 597 + .qos.prio_level = 0, 598 + .qos.qos_port = 15, 599 + .num_links = ARRAY_SIZE(mas_vfe_1_links), 600 + .links = mas_vfe_1_links, 601 + }; 602 + 603 + static const u16 mas_cpp_links[] = { 604 + QNOC_SNOC_MM_INT_0, 605 + QNOC_MNOC_BIMC_SLV 606 + }; 607 + 608 + static struct qcom_icc_node mas_cpp = { 609 + .name = "mas_cpp", 610 + .id = QNOC_MASTER_CPP, 611 + .buswidth = 16, 612 + .mas_rpm_id = 115, 613 + .slv_rpm_id = -1, 614 + .qos.ap_owned = true, 615 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 616 + .qos.areq_prio = 0, 617 + .qos.prio_level = 0, 618 + .qos.qos_port = 12, 619 + .num_links = ARRAY_SIZE(mas_cpp_links), 620 + .links = mas_cpp_links, 621 + }; 622 + 623 + static const u16 mas_qdss_etr_links[] = { 624 + QNOC_SNOC_QDSS_INT 625 + }; 626 + 627 + static struct qcom_icc_node mas_qdss_etr = { 628 + .name = "mas_qdss_etr", 629 + .id = QNOC_MASTER_QDSS_ETR, 630 + .buswidth = 8, 631 + .mas_rpm_id = 31, 632 + .slv_rpm_id = -1, 633 + .qos.ap_owned = true, 634 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 635 + .qos.areq_prio = 1, 636 + .qos.prio_level = 1, 637 + .qos.qos_port = 10, 638 + .num_links = ARRAY_SIZE(mas_qdss_etr_links), 639 + .links = mas_qdss_etr_links, 640 + }; 641 + 642 + static const u16 mas_lpass_proc_links[] = { 643 + QNOC_SNOC_INT_0, 644 + QNOC_SNOC_INT_1, 645 + QNOC_SNOC_BIMC_SLV 646 + }; 647 + 648 + static struct qcom_icc_node mas_lpass_proc = { 649 + .name = "mas_lpass_proc", 650 + .id = QNOC_MASTER_LPASS_PROC, 651 + .buswidth = 8, 652 + .mas_rpm_id = -1, 653 + .slv_rpm_id = -1, 654 + .qos.qos_mode = NOC_QOS_MODE_BYPASS, 655 + .qos.areq_prio = 0, 656 + .qos.prio_level = 0, 657 + .qos.qos_port = 19, 658 + .num_links = ARRAY_SIZE(mas_lpass_proc_links), 659 + .links = mas_lpass_proc_links, 660 + }; 661 + 662 + static const u16 mas_ipa_links[] = { 663 + QNOC_SNOC_INT_2 664 + }; 665 + 666 + static struct qcom_icc_node mas_ipa = { 667 + .name = "mas_ipa", 668 + .id = QNOC_MASTER_IPA, 669 + .buswidth = 8, 670 + .mas_rpm_id = 59, 671 + .slv_rpm_id = -1, 672 + .qos.ap_owned = true, 673 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 674 + .qos.areq_prio = 1, 675 + .qos.prio_level = 1, 676 + .qos.qos_port = 18, 677 + .num_links = ARRAY_SIZE(mas_ipa_links), 678 + .links = mas_ipa_links, 679 + }; 680 + 681 + static const u16 pcnoc_m_0_links[] = { 682 + QNOC_PNOC_SNOC_SLV 683 + }; 684 + 685 + static struct qcom_icc_node pcnoc_m_0 = { 686 + .name = "pcnoc_m_0", 687 + .id = QNOC_PNOC_M_0, 688 + .buswidth = 4, 689 + .mas_rpm_id = 87, 690 + .slv_rpm_id = 116, 691 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 692 + .qos.areq_prio = 0, 693 + .qos.prio_level = 0, 694 + .qos.qos_port = 5, 695 + .num_links = ARRAY_SIZE(pcnoc_m_0_links), 696 + .links = pcnoc_m_0_links, 697 + }; 698 + 699 + static const u16 pcnoc_m_1_links[] = { 700 + QNOC_PNOC_SNOC_SLV 701 + }; 702 + 703 + static struct qcom_icc_node pcnoc_m_1 = { 704 + .name = "pcnoc_m_1", 705 + .id = QNOC_PNOC_M_1, 706 + .buswidth = 4, 707 + .mas_rpm_id = 88, 708 + .slv_rpm_id = 117, 709 + .qos.qos_mode = NOC_QOS_MODE_FIXED, 710 + .qos.areq_prio = 0, 711 + .qos.prio_level = 0, 712 + .qos.qos_port = 6, 713 + .num_links = ARRAY_SIZE(pcnoc_m_1_links), 714 + .links = pcnoc_m_1_links, 715 + }; 716 + 717 + static const u16 pcnoc_int_0_links[] = { 718 + QNOC_PNOC_SNOC_SLV, 719 + QNOC_PNOC_INT_2 720 + }; 721 + 722 + static struct qcom_icc_node pcnoc_int_0 = { 723 + .name = "pcnoc_int_0", 724 + .id = QNOC_PNOC_INT_0, 725 + .buswidth = 4, 726 + .mas_rpm_id = -1, 727 + .slv_rpm_id = -1, 728 + .num_links = ARRAY_SIZE(pcnoc_int_0_links), 729 + .links = pcnoc_int_0_links, 730 + }; 731 + 732 + static const u16 pcnoc_int_1_links[] = { 733 + QNOC_PNOC_SNOC_SLV, 734 + QNOC_PNOC_INT_2 735 + }; 736 + 737 + static struct qcom_icc_node pcnoc_int_1 = { 738 + .name = "pcnoc_int_1", 739 + .id = QNOC_PNOC_INT_1, 740 + .buswidth = 8, 741 + .mas_rpm_id = 86, 742 + .slv_rpm_id = 115, 743 + .num_links = ARRAY_SIZE(pcnoc_int_1_links), 744 + .links = pcnoc_int_1_links, 745 + }; 746 + 747 + static const u16 pcnoc_int_2_links[] = { 748 + QNOC_PNOC_SLV_1, 749 + QNOC_PNOC_SLV_2, 750 + QNOC_PNOC_SLV_4, 751 + QNOC_PNOC_SLV_8, 752 + QNOC_PNOC_SLV_9, 753 + QNOC_PNOC_SLV_3 754 + }; 755 + 756 + static struct qcom_icc_node pcnoc_int_2 = { 757 + .name = "pcnoc_int_2", 758 + .id = QNOC_PNOC_INT_2, 759 + .buswidth = 8, 760 + .mas_rpm_id = 124, 761 + .slv_rpm_id = 184, 762 + .num_links = ARRAY_SIZE(pcnoc_int_2_links), 763 + .links = pcnoc_int_2_links, 764 + }; 765 + 766 + static const u16 pcnoc_s_1_links[] = { 767 + QNOC_SLAVE_CRYPTO_0_CFG, 768 + QNOC_SLAVE_PRNG, 769 + QNOC_SLAVE_PDM, 770 + QNOC_SLAVE_MESSAGE_RAM 771 + }; 772 + 773 + static struct qcom_icc_node pcnoc_s_1 = { 774 + .name = "pcnoc_s_1", 775 + .id = QNOC_PNOC_SLV_1, 776 + .buswidth = 4, 777 + .mas_rpm_id = 90, 778 + .slv_rpm_id = 119, 779 + .num_links = ARRAY_SIZE(pcnoc_s_1_links), 780 + .links = pcnoc_s_1_links, 781 + }; 782 + 783 + static const u16 pcnoc_s_2_links[] = { 784 + QNOC_SLAVE_PMIC_ARB 785 + }; 786 + 787 + static struct qcom_icc_node pcnoc_s_2 = { 788 + .name = "pcnoc_s_2", 789 + .id = QNOC_PNOC_SLV_2, 790 + .buswidth = 4, 791 + .mas_rpm_id = 91, 792 + .slv_rpm_id = 120, 793 + .num_links = ARRAY_SIZE(pcnoc_s_2_links), 794 + .links = pcnoc_s_2_links, 795 + }; 796 + 797 + static const u16 pcnoc_s_3_links[] = { 798 + QNOC_SLAVE_SNOC_CFG, 799 + QNOC_SLAVE_DCC_CFG 800 + }; 801 + 802 + static struct qcom_icc_node pcnoc_s_3 = { 803 + .name = "pcnoc_s_3", 804 + .id = QNOC_PNOC_SLV_3, 805 + .buswidth = 4, 806 + .mas_rpm_id = 92, 807 + .slv_rpm_id = 121, 808 + .num_links = ARRAY_SIZE(pcnoc_s_3_links), 809 + .links = pcnoc_s_3_links, 810 + }; 811 + 812 + static const u16 pcnoc_s_4_links[] = { 813 + QNOC_SLAVE_CAMERA_CFG, 814 + QNOC_SLAVE_DISPLAY_CFG, 815 + QNOC_SLAVE_VENUS_CFG 816 + }; 817 + 818 + static struct qcom_icc_node pcnoc_s_4 = { 819 + .name = "pcnoc_s_4", 820 + .id = QNOC_PNOC_SLV_4, 821 + .buswidth = 4, 822 + .mas_rpm_id = 93, 823 + .slv_rpm_id = 122, 824 + .qos.ap_owned = true, 825 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 826 + .num_links = ARRAY_SIZE(pcnoc_s_4_links), 827 + .links = pcnoc_s_4_links, 828 + }; 829 + 830 + static const u16 pcnoc_s_8_links[] = { 831 + QNOC_SLAVE_USB_HS, 832 + QNOC_SLAVE_SDCC_3, 833 + QNOC_SLAVE_BLSP_1, 834 + QNOC_SLAVE_SDCC_1 835 + }; 836 + 837 + static struct qcom_icc_node pcnoc_s_8 = { 838 + .name = "pcnoc_s_8", 839 + .id = QNOC_PNOC_SLV_8, 840 + .buswidth = 4, 841 + .mas_rpm_id = 96, 842 + .slv_rpm_id = 125, 843 + .num_links = ARRAY_SIZE(pcnoc_s_8_links), 844 + .links = pcnoc_s_8_links, 845 + }; 846 + 847 + static const u16 pcnoc_s_9_links[] = { 848 + QNOC_SLAVE_GRAPHICS_3D_CFG, 849 + QNOC_SLAVE_USB_HS2, 850 + QNOC_SLAVE_SDCC_2, 851 + QNOC_SLAVE_BLSP_2 852 + }; 853 + 854 + static struct qcom_icc_node pcnoc_s_9 = { 855 + .name = "pcnoc_s_9", 856 + .id = QNOC_PNOC_SLV_9, 857 + .buswidth = 4, 858 + .mas_rpm_id = 97, 859 + .slv_rpm_id = 126, 860 + .num_links = ARRAY_SIZE(pcnoc_s_9_links), 861 + .links = pcnoc_s_9_links, 862 + }; 863 + 864 + static const u16 mm_int_0_links[] = { 865 + QNOC_SNOC_INT_0 866 + }; 867 + 868 + static struct qcom_icc_node mm_int_0 = { 869 + .name = "mm_int_0", 870 + .id = QNOC_SNOC_MM_INT_0, 871 + .buswidth = 16, 872 + .ib_coeff = 200, 873 + .mas_rpm_id = 79, 874 + .slv_rpm_id = 108, 875 + .qos.ap_owned = true, 876 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 877 + .num_links = ARRAY_SIZE(mm_int_0_links), 878 + .links = mm_int_0_links, 879 + }; 880 + 881 + static const u16 qdss_int_links[] = { 882 + QNOC_SNOC_INT_2 883 + }; 884 + 885 + static struct qcom_icc_node qdss_int = { 886 + .name = "qdss_int", 887 + .id = QNOC_SNOC_QDSS_INT, 888 + .buswidth = 8, 889 + .mas_rpm_id = 98, 890 + .slv_rpm_id = 128, 891 + .qos.ap_owned = true, 892 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 893 + .num_links = ARRAY_SIZE(qdss_int_links), 894 + .links = qdss_int_links, 895 + }; 896 + 897 + static const u16 snoc_int_0_links[] = { 898 + QNOC_SLAVE_QDSS_STM, 899 + QNOC_SLAVE_SYSTEM_IMEM, 900 + QNOC_SNOC_PNOC_SLV 901 + }; 902 + 903 + static struct qcom_icc_node snoc_int_0 = { 904 + .name = "snoc_int_0", 905 + .id = QNOC_SNOC_INT_0, 906 + .buswidth = 8, 907 + .mas_rpm_id = 99, 908 + .slv_rpm_id = 130, 909 + .num_links = ARRAY_SIZE(snoc_int_0_links), 910 + .links = snoc_int_0_links, 911 + }; 912 + 913 + static const u16 snoc_int_1_links[] = { 914 + QNOC_SLAVE_LPASS, 915 + QNOC_SLAVE_CATS_128, 916 + QNOC_SLAVE_OCMEM_64, 917 + QNOC_SLAVE_APPSS 918 + }; 919 + 920 + static struct qcom_icc_node snoc_int_1 = { 921 + .name = "snoc_int_1", 922 + .id = QNOC_SNOC_INT_1, 923 + .buswidth = 8, 924 + .mas_rpm_id = 100, 925 + .slv_rpm_id = 131, 926 + .qos.ap_owned = true, 927 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 928 + .num_links = ARRAY_SIZE(snoc_int_1_links), 929 + .links = snoc_int_1_links, 930 + }; 931 + 932 + static const u16 snoc_int_2_links[] = { 933 + QNOC_SNOC_INT_0, 934 + QNOC_SNOC_INT_1, 935 + QNOC_SNOC_BIMC_SLV 936 + }; 937 + 938 + static struct qcom_icc_node snoc_int_2 = { 939 + .name = "snoc_int_2", 940 + .id = QNOC_SNOC_INT_2, 941 + .buswidth = 8, 942 + .mas_rpm_id = 134, 943 + .slv_rpm_id = 197, 944 + .num_links = ARRAY_SIZE(snoc_int_2_links), 945 + .links = snoc_int_2_links, 946 + }; 947 + 948 + static struct qcom_icc_node slv_ebi = { 949 + .name = "slv_ebi", 950 + .id = QNOC_SLAVE_EBI_CH0, 951 + .channels = 2, 952 + .buswidth = 16, 953 + .mas_rpm_id = -1, 954 + .slv_rpm_id = 0, 955 + }; 956 + 957 + static const u16 slv_bimc_snoc_links[] = { 958 + QNOC_BIMC_SNOC_MAS 959 + }; 960 + 961 + static struct qcom_icc_node slv_bimc_snoc = { 962 + .name = "slv_bimc_snoc", 963 + .id = QNOC_BIMC_SNOC_SLV, 964 + .buswidth = 16, 965 + .mas_rpm_id = -1, 966 + .slv_rpm_id = 2, 967 + .num_links = ARRAY_SIZE(slv_bimc_snoc_links), 968 + .links = slv_bimc_snoc_links, 969 + }; 970 + 971 + static struct qcom_icc_node slv_tcsr = { 972 + .name = "slv_tcsr", 973 + .id = QNOC_SLAVE_TCSR, 974 + .buswidth = 4, 975 + .mas_rpm_id = -1, 976 + .slv_rpm_id = 50, 977 + }; 978 + 979 + static struct qcom_icc_node slv_tlmm = { 980 + .name = "slv_tlmm", 981 + .id = QNOC_SLAVE_TLMM, 982 + .buswidth = 4, 983 + .mas_rpm_id = -1, 984 + .slv_rpm_id = 51, 985 + }; 986 + 987 + static struct qcom_icc_node slv_crypto_0_cfg = { 988 + .name = "slv_crypto_0_cfg", 989 + .id = QNOC_SLAVE_CRYPTO_0_CFG, 990 + .buswidth = 4, 991 + .mas_rpm_id = -1, 992 + .slv_rpm_id = 52, 993 + .qos.ap_owned = true, 994 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 995 + }; 996 + 997 + static struct qcom_icc_node slv_message_ram = { 998 + .name = "slv_message_ram", 999 + .id = QNOC_SLAVE_MESSAGE_RAM, 1000 + .buswidth = 4, 1001 + .mas_rpm_id = -1, 1002 + .slv_rpm_id = 55, 1003 + }; 1004 + 1005 + static struct qcom_icc_node slv_pdm = { 1006 + .name = "slv_pdm", 1007 + .id = QNOC_SLAVE_PDM, 1008 + .buswidth = 4, 1009 + .mas_rpm_id = -1, 1010 + .slv_rpm_id = 41, 1011 + }; 1012 + 1013 + static struct qcom_icc_node slv_prng = { 1014 + .name = "slv_prng", 1015 + .id = QNOC_SLAVE_PRNG, 1016 + .buswidth = 4, 1017 + .mas_rpm_id = -1, 1018 + .slv_rpm_id = 44, 1019 + .qos.ap_owned = true, 1020 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1021 + }; 1022 + 1023 + static struct qcom_icc_node slv_pmic_arb = { 1024 + .name = "slv_pmic_arb", 1025 + .id = QNOC_SLAVE_PMIC_ARB, 1026 + .buswidth = 4, 1027 + .mas_rpm_id = -1, 1028 + .slv_rpm_id = 59, 1029 + }; 1030 + 1031 + static struct qcom_icc_node slv_snoc_cfg = { 1032 + .name = "slv_snoc_cfg", 1033 + .id = QNOC_SLAVE_SNOC_CFG, 1034 + .buswidth = 4, 1035 + .mas_rpm_id = -1, 1036 + .slv_rpm_id = 70, 1037 + }; 1038 + 1039 + static struct qcom_icc_node slv_dcc_cfg = { 1040 + .name = "slv_dcc_cfg", 1041 + .id = QNOC_SLAVE_DCC_CFG, 1042 + .buswidth = 4, 1043 + .mas_rpm_id = -1, 1044 + .slv_rpm_id = 155, 1045 + .qos.ap_owned = true, 1046 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1047 + }; 1048 + 1049 + static struct qcom_icc_node slv_camera_ss_cfg = { 1050 + .name = "slv_camera_ss_cfg", 1051 + .id = QNOC_SLAVE_CAMERA_CFG, 1052 + .buswidth = 4, 1053 + .mas_rpm_id = -1, 1054 + .slv_rpm_id = 3, 1055 + .qos.ap_owned = true, 1056 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1057 + }; 1058 + 1059 + static struct qcom_icc_node slv_disp_ss_cfg = { 1060 + .name = "slv_disp_ss_cfg", 1061 + .id = QNOC_SLAVE_DISPLAY_CFG, 1062 + .buswidth = 4, 1063 + .mas_rpm_id = -1, 1064 + .slv_rpm_id = 4, 1065 + .qos.ap_owned = true, 1066 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1067 + }; 1068 + 1069 + static struct qcom_icc_node slv_venus_cfg = { 1070 + .name = "slv_venus_cfg", 1071 + .id = QNOC_SLAVE_VENUS_CFG, 1072 + .buswidth = 4, 1073 + .mas_rpm_id = -1, 1074 + .slv_rpm_id = 10, 1075 + .qos.ap_owned = true, 1076 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1077 + }; 1078 + 1079 + static struct qcom_icc_node slv_sdcc_1 = { 1080 + .name = "slv_sdcc_1", 1081 + .id = QNOC_SLAVE_SDCC_1, 1082 + .buswidth = 4, 1083 + .mas_rpm_id = -1, 1084 + .slv_rpm_id = 31, 1085 + }; 1086 + 1087 + static struct qcom_icc_node slv_blsp_1 = { 1088 + .name = "slv_blsp_1", 1089 + .id = QNOC_SLAVE_BLSP_1, 1090 + .buswidth = 4, 1091 + .mas_rpm_id = -1, 1092 + .slv_rpm_id = 39, 1093 + }; 1094 + 1095 + static struct qcom_icc_node slv_usb_hs = { 1096 + .name = "slv_usb_hs", 1097 + .id = QNOC_SLAVE_USB_HS, 1098 + .buswidth = 4, 1099 + .mas_rpm_id = -1, 1100 + .slv_rpm_id = 40, 1101 + }; 1102 + 1103 + static struct qcom_icc_node slv_sdcc_3 = { 1104 + .name = "slv_sdcc_3", 1105 + .id = QNOC_SLAVE_SDCC_3, 1106 + .buswidth = 4, 1107 + .mas_rpm_id = -1, 1108 + .slv_rpm_id = 32, 1109 + }; 1110 + 1111 + static struct qcom_icc_node slv_sdcc_2 = { 1112 + .name = "slv_sdcc_2", 1113 + .id = QNOC_SLAVE_SDCC_2, 1114 + .buswidth = 4, 1115 + .mas_rpm_id = -1, 1116 + .slv_rpm_id = 33, 1117 + }; 1118 + 1119 + static struct qcom_icc_node slv_gpu_cfg = { 1120 + .name = "slv_gpu_cfg", 1121 + .id = QNOC_SLAVE_GRAPHICS_3D_CFG, 1122 + .buswidth = 4, 1123 + .mas_rpm_id = -1, 1124 + .slv_rpm_id = 11, 1125 + .qos.ap_owned = true, 1126 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1127 + }; 1128 + 1129 + static struct qcom_icc_node slv_usb_hs2 = { 1130 + .name = "slv_usb_hs2", 1131 + .id = QNOC_SLAVE_USB_HS2, 1132 + .buswidth = 4, 1133 + .mas_rpm_id = -1, 1134 + .slv_rpm_id = 79, 1135 + }; 1136 + 1137 + static struct qcom_icc_node slv_blsp_2 = { 1138 + .name = "slv_blsp_2", 1139 + .id = QNOC_SLAVE_BLSP_2, 1140 + .buswidth = 4, 1141 + .mas_rpm_id = -1, 1142 + .slv_rpm_id = 37, 1143 + }; 1144 + 1145 + static const u16 slv_pcnoc_snoc_links[] = { 1146 + QNOC_PNOC_SNOC_MAS 1147 + }; 1148 + 1149 + static struct qcom_icc_node slv_pcnoc_snoc = { 1150 + .name = "slv_pcnoc_snoc", 1151 + .id = QNOC_PNOC_SNOC_SLV, 1152 + .buswidth = 8, 1153 + .mas_rpm_id = -1, 1154 + .slv_rpm_id = 45, 1155 + .num_links = ARRAY_SIZE(slv_pcnoc_snoc_links), 1156 + .links = slv_pcnoc_snoc_links, 1157 + }; 1158 + 1159 + static struct qcom_icc_node slv_kpss_ahb = { 1160 + .name = "slv_kpss_ahb", 1161 + .id = QNOC_SLAVE_APPSS, 1162 + .buswidth = 4, 1163 + .mas_rpm_id = -1, 1164 + .slv_rpm_id = 20, 1165 + .qos.ap_owned = true, 1166 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1167 + }; 1168 + 1169 + static const u16 slv_smmnoc_bimc_links[] = { 1170 + QNOC_MNOC_BIMC_MAS 1171 + }; 1172 + 1173 + static struct qcom_icc_node slv_smmnoc_bimc = { 1174 + .name = "slv_smmnoc_bimc", 1175 + .id = QNOC_MNOC_BIMC_SLV, 1176 + .channels = 2, 1177 + .buswidth = 16, 1178 + .ib_coeff = 200, 1179 + .mas_rpm_id = -1, 1180 + .slv_rpm_id = 198, 1181 + .qos.ap_owned = true, 1182 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1183 + .num_links = ARRAY_SIZE(slv_smmnoc_bimc_links), 1184 + .links = slv_smmnoc_bimc_links, 1185 + }; 1186 + 1187 + static const u16 slv_snoc_bimc_links[] = { 1188 + QNOC_SNOC_BIMC_MAS 1189 + }; 1190 + 1191 + static struct qcom_icc_node slv_snoc_bimc = { 1192 + .name = "slv_snoc_bimc", 1193 + .id = QNOC_SNOC_BIMC_SLV, 1194 + .channels = 2, 1195 + .buswidth = 8, 1196 + .mas_rpm_id = -1, 1197 + .slv_rpm_id = 24, 1198 + .qos.ap_owned = true, 1199 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1200 + .num_links = ARRAY_SIZE(slv_snoc_bimc_links), 1201 + .links = slv_snoc_bimc_links, 1202 + }; 1203 + 1204 + static struct qcom_icc_node slv_imem = { 1205 + .name = "slv_imem", 1206 + .id = QNOC_SLAVE_SYSTEM_IMEM, 1207 + .buswidth = 8, 1208 + .mas_rpm_id = -1, 1209 + .slv_rpm_id = 26, 1210 + }; 1211 + 1212 + static const u16 slv_snoc_pcnoc_links[] = { 1213 + QNOC_SNOC_PNOC_MAS 1214 + }; 1215 + 1216 + static struct qcom_icc_node slv_snoc_pcnoc = { 1217 + .name = "slv_snoc_pcnoc", 1218 + .id = QNOC_SNOC_PNOC_SLV, 1219 + .buswidth = 8, 1220 + .mas_rpm_id = -1, 1221 + .slv_rpm_id = 28, 1222 + .num_links = ARRAY_SIZE(slv_snoc_pcnoc_links), 1223 + .links = slv_snoc_pcnoc_links, 1224 + }; 1225 + 1226 + static struct qcom_icc_node slv_qdss_stm = { 1227 + .name = "slv_qdss_stm", 1228 + .id = QNOC_SLAVE_QDSS_STM, 1229 + .buswidth = 4, 1230 + .mas_rpm_id = -1, 1231 + .slv_rpm_id = 30, 1232 + }; 1233 + 1234 + static struct qcom_icc_node slv_cats_0 = { 1235 + .name = "slv_cats_0", 1236 + .id = QNOC_SLAVE_CATS_128, 1237 + .buswidth = 16, 1238 + .mas_rpm_id = -1, 1239 + .slv_rpm_id = 106, 1240 + .qos.ap_owned = true, 1241 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1242 + }; 1243 + 1244 + static struct qcom_icc_node slv_cats_1 = { 1245 + .name = "slv_cats_1", 1246 + .id = QNOC_SLAVE_OCMEM_64, 1247 + .buswidth = 8, 1248 + .mas_rpm_id = -1, 1249 + .slv_rpm_id = 107, 1250 + .qos.ap_owned = true, 1251 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1252 + }; 1253 + 1254 + static struct qcom_icc_node slv_lpass = { 1255 + .name = "slv_lpass", 1256 + .id = QNOC_SLAVE_LPASS, 1257 + .buswidth = 8, 1258 + .mas_rpm_id = -1, 1259 + .slv_rpm_id = 21, 1260 + .qos.ap_owned = true, 1261 + .qos.qos_mode = NOC_QOS_MODE_INVALID, 1262 + }; 1263 + 1264 + static struct qcom_icc_node * const msm8976_bimc_nodes[] = { 1265 + [MAS_APPS_PROC] = &mas_apps_proc, 1266 + [MAS_SMMNOC_BIMC] = &mas_smmnoc_bimc, 1267 + [MAS_SNOC_BIMC] = &mas_snoc_bimc, 1268 + [MAS_TCU_0] = &mas_tcu_0, 1269 + [SLV_EBI] = &slv_ebi, 1270 + [SLV_BIMC_SNOC] = &slv_bimc_snoc, 1271 + }; 1272 + 1273 + static const struct regmap_config msm8976_bimc_regmap_config = { 1274 + .reg_bits = 32, 1275 + .reg_stride = 4, 1276 + .val_bits = 32, 1277 + .max_register = 0x62000, 1278 + .fast_io = true, 1279 + }; 1280 + 1281 + static const struct qcom_icc_desc msm8976_bimc = { 1282 + .type = QCOM_ICC_BIMC, 1283 + .nodes = msm8976_bimc_nodes, 1284 + .num_nodes = ARRAY_SIZE(msm8976_bimc_nodes), 1285 + .bus_clk_desc = &bimc_clk, 1286 + .regmap_cfg = &msm8976_bimc_regmap_config, 1287 + .qos_offset = 0x8000, 1288 + .ab_coeff = 154, 1289 + }; 1290 + 1291 + static struct qcom_icc_node * const msm8976_pcnoc_nodes[] = { 1292 + [MAS_USB_HS2] = &mas_usb_hs2, 1293 + [MAS_BLSP_1] = &mas_blsp_1, 1294 + [MAS_USB_HS1] = &mas_usb_hs1, 1295 + [MAS_BLSP_2] = &mas_blsp_2, 1296 + [MAS_CRYPTO] = &mas_crypto, 1297 + [MAS_SDCC_1] = &mas_sdcc_1, 1298 + [MAS_SDCC_2] = &mas_sdcc_2, 1299 + [MAS_SDCC_3] = &mas_sdcc_3, 1300 + [MAS_SNOC_PCNOC] = &mas_snoc_pcnoc, 1301 + [MAS_LPASS_AHB] = &mas_lpass_ahb, 1302 + [MAS_SPDM] = &mas_spdm, 1303 + [MAS_DEHR] = &mas_dehr, 1304 + [MAS_XM_USB_HS1] = &mas_xm_usb_hs1, 1305 + [PCNOC_M_0] = &pcnoc_m_0, 1306 + [PCNOC_M_1] = &pcnoc_m_1, 1307 + [PCNOC_INT_0] = &pcnoc_int_0, 1308 + [PCNOC_INT_1] = &pcnoc_int_1, 1309 + [PCNOC_INT_2] = &pcnoc_int_2, 1310 + [PCNOC_S_1] = &pcnoc_s_1, 1311 + [PCNOC_S_2] = &pcnoc_s_2, 1312 + [PCNOC_S_3] = &pcnoc_s_3, 1313 + [PCNOC_S_4] = &pcnoc_s_4, 1314 + [PCNOC_S_8] = &pcnoc_s_8, 1315 + [PCNOC_S_9] = &pcnoc_s_9, 1316 + [SLV_TCSR] = &slv_tcsr, 1317 + [SLV_TLMM] = &slv_tlmm, 1318 + [SLV_CRYPTO_0_CFG] = &slv_crypto_0_cfg, 1319 + [SLV_MESSAGE_RAM] = &slv_message_ram, 1320 + [SLV_PDM] = &slv_pdm, 1321 + [SLV_PRNG] = &slv_prng, 1322 + [SLV_PMIC_ARB] = &slv_pmic_arb, 1323 + [SLV_SNOC_CFG] = &slv_snoc_cfg, 1324 + [SLV_DCC_CFG] = &slv_dcc_cfg, 1325 + [SLV_CAMERA_SS_CFG] = &slv_camera_ss_cfg, 1326 + [SLV_DISP_SS_CFG] = &slv_disp_ss_cfg, 1327 + [SLV_VENUS_CFG] = &slv_venus_cfg, 1328 + [SLV_SDCC_1] = &slv_sdcc_1, 1329 + [SLV_BLSP_1] = &slv_blsp_1, 1330 + [SLV_USB_HS] = &slv_usb_hs, 1331 + [SLV_SDCC_3] = &slv_sdcc_3, 1332 + [SLV_SDCC_2] = &slv_sdcc_2, 1333 + [SLV_GPU_CFG] = &slv_gpu_cfg, 1334 + [SLV_USB_HS2] = &slv_usb_hs2, 1335 + [SLV_BLSP_2] = &slv_blsp_2, 1336 + [SLV_PCNOC_SNOC] = &slv_pcnoc_snoc, 1337 + }; 1338 + 1339 + static const struct regmap_config msm8976_pcnoc_regmap_config = { 1340 + .reg_bits = 32, 1341 + .reg_stride = 4, 1342 + .val_bits = 32, 1343 + .max_register = 0x14000, 1344 + .fast_io = true, 1345 + }; 1346 + 1347 + static const struct qcom_icc_desc msm8976_pcnoc = { 1348 + .type = QCOM_ICC_NOC, 1349 + .nodes = msm8976_pcnoc_nodes, 1350 + .num_nodes = ARRAY_SIZE(msm8976_pcnoc_nodes), 1351 + .bus_clk_desc = &bus_0_clk, 1352 + .qos_offset = 0x7000, 1353 + .keep_alive = true, 1354 + .regmap_cfg = &msm8976_pcnoc_regmap_config, 1355 + }; 1356 + 1357 + static struct qcom_icc_node * const msm8976_snoc_nodes[] = { 1358 + [MAS_QDSS_BAM] = &mas_qdss_bam, 1359 + [MAS_BIMC_SNOC] = &mas_bimc_snoc, 1360 + [MAS_PCNOC_SNOC] = &mas_pcnoc_snoc, 1361 + [MAS_QDSS_ETR] = &mas_qdss_etr, 1362 + [MAS_LPASS_PROC] = &mas_lpass_proc, 1363 + [MAS_IPA] = &mas_ipa, 1364 + [QDSS_INT] = &qdss_int, 1365 + [SNOC_INT_0] = &snoc_int_0, 1366 + [SNOC_INT_1] = &snoc_int_1, 1367 + [SNOC_INT_2] = &snoc_int_2, 1368 + [SLV_KPSS_AHB] = &slv_kpss_ahb, 1369 + [SLV_SNOC_BIMC] = &slv_snoc_bimc, 1370 + [SLV_IMEM] = &slv_imem, 1371 + [SLV_SNOC_PCNOC] = &slv_snoc_pcnoc, 1372 + [SLV_QDSS_STM] = &slv_qdss_stm, 1373 + [SLV_CATS_0] = &slv_cats_0, 1374 + [SLV_CATS_1] = &slv_cats_1, 1375 + [SLV_LPASS] = &slv_lpass, 1376 + }; 1377 + 1378 + static const struct regmap_config msm8976_snoc_regmap_config = { 1379 + .reg_bits = 32, 1380 + .reg_stride = 4, 1381 + .val_bits = 32, 1382 + .max_register = 0x1A000, 1383 + .fast_io = true, 1384 + }; 1385 + 1386 + static const struct qcom_icc_desc msm8976_snoc = { 1387 + .type = QCOM_ICC_NOC, 1388 + .nodes = msm8976_snoc_nodes, 1389 + .num_nodes = ARRAY_SIZE(msm8976_snoc_nodes), 1390 + .bus_clk_desc = &bus_1_clk, 1391 + .regmap_cfg = &msm8976_snoc_regmap_config, 1392 + .qos_offset = 0x7000, 1393 + }; 1394 + 1395 + static struct qcom_icc_node * const msm8976_snoc_mm_nodes[] = { 1396 + [MAS_JPEG] = &mas_jpeg, 1397 + [MAS_OXILI] = &mas_oxili, 1398 + [MAS_MDP0] = &mas_mdp0, 1399 + [MAS_MDP1] = &mas_mdp1, 1400 + [MAS_VENUS_0] = &mas_venus_0, 1401 + [MAS_VENUS_1] = &mas_venus_1, 1402 + [MAS_VFE_0] = &mas_vfe_0, 1403 + [MAS_VFE_1] = &mas_vfe_1, 1404 + [MAS_CPP] = &mas_cpp, 1405 + [MM_INT_0] = &mm_int_0, 1406 + [SLV_SMMNOC_BIMC] = &slv_smmnoc_bimc, 1407 + }; 1408 + 1409 + static const struct qcom_icc_desc msm8976_snoc_mm = { 1410 + .type = QCOM_ICC_NOC, 1411 + .nodes = msm8976_snoc_mm_nodes, 1412 + .num_nodes = ARRAY_SIZE(msm8976_snoc_mm_nodes), 1413 + .bus_clk_desc = &bus_2_clk, 1414 + .regmap_cfg = &msm8976_snoc_regmap_config, 1415 + .qos_offset = 0x7000, 1416 + .ab_coeff = 154, 1417 + }; 1418 + 1419 + static const struct of_device_id msm8976_noc_of_match[] = { 1420 + { .compatible = "qcom,msm8976-bimc", .data = &msm8976_bimc }, 1421 + { .compatible = "qcom,msm8976-pcnoc", .data = &msm8976_pcnoc }, 1422 + { .compatible = "qcom,msm8976-snoc", .data = &msm8976_snoc }, 1423 + { .compatible = "qcom,msm8976-snoc-mm", .data = &msm8976_snoc_mm }, 1424 + { } 1425 + }; 1426 + MODULE_DEVICE_TABLE(of, msm8976_noc_of_match); 1427 + 1428 + static struct platform_driver msm8976_noc_driver = { 1429 + .probe = qnoc_probe, 1430 + .remove_new = qnoc_remove, 1431 + .driver = { 1432 + .name = "qnoc-msm8976", 1433 + .of_match_table = msm8976_noc_of_match, 1434 + .sync_state = icc_sync_state, 1435 + }, 1436 + }; 1437 + module_platform_driver(msm8976_noc_driver); 1438 + 1439 + MODULE_DESCRIPTION("Qualcomm MSM8976 NoC driver"); 1440 + MODULE_LICENSE("GPL");