sdm660.c 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Qualcomm SDM630/SDM636/SDM660 Network-on-Chip (NoC) QoS driver
  4. * Copyright (C) 2020, AngeloGioacchino Del Regno <[email protected]>
  5. */
  6. #include <dt-bindings/interconnect/qcom,sdm660.h>
  7. #include <linux/clk.h>
  8. #include <linux/device.h>
  9. #include <linux/interconnect-provider.h>
  10. #include <linux/io.h>
  11. #include <linux/module.h>
  12. #include <linux/of_device.h>
  13. #include <linux/of_platform.h>
  14. #include <linux/platform_device.h>
  15. #include <linux/regmap.h>
  16. #include <linux/slab.h>
  17. #include "icc-rpm.h"
  18. #include "smd-rpm.h"
  19. enum {
  20. SDM660_MASTER_IPA = 1,
  21. SDM660_MASTER_CNOC_A2NOC,
  22. SDM660_MASTER_SDCC_1,
  23. SDM660_MASTER_SDCC_2,
  24. SDM660_MASTER_BLSP_1,
  25. SDM660_MASTER_BLSP_2,
  26. SDM660_MASTER_UFS,
  27. SDM660_MASTER_USB_HS,
  28. SDM660_MASTER_USB3,
  29. SDM660_MASTER_CRYPTO_C0,
  30. SDM660_MASTER_GNOC_BIMC,
  31. SDM660_MASTER_OXILI,
  32. SDM660_MASTER_MNOC_BIMC,
  33. SDM660_MASTER_SNOC_BIMC,
  34. SDM660_MASTER_PIMEM,
  35. SDM660_MASTER_SNOC_CNOC,
  36. SDM660_MASTER_QDSS_DAP,
  37. SDM660_MASTER_APPS_PROC,
  38. SDM660_MASTER_CNOC_MNOC_MMSS_CFG,
  39. SDM660_MASTER_CNOC_MNOC_CFG,
  40. SDM660_MASTER_CPP,
  41. SDM660_MASTER_JPEG,
  42. SDM660_MASTER_MDP_P0,
  43. SDM660_MASTER_MDP_P1,
  44. SDM660_MASTER_VENUS,
  45. SDM660_MASTER_VFE,
  46. SDM660_MASTER_QDSS_ETR,
  47. SDM660_MASTER_QDSS_BAM,
  48. SDM660_MASTER_SNOC_CFG,
  49. SDM660_MASTER_BIMC_SNOC,
  50. SDM660_MASTER_A2NOC_SNOC,
  51. SDM660_MASTER_GNOC_SNOC,
  52. SDM660_SLAVE_A2NOC_SNOC,
  53. SDM660_SLAVE_EBI,
  54. SDM660_SLAVE_HMSS_L3,
  55. SDM660_SLAVE_BIMC_SNOC,
  56. SDM660_SLAVE_CNOC_A2NOC,
  57. SDM660_SLAVE_MPM,
  58. SDM660_SLAVE_PMIC_ARB,
  59. SDM660_SLAVE_TLMM_NORTH,
  60. SDM660_SLAVE_TCSR,
  61. SDM660_SLAVE_PIMEM_CFG,
  62. SDM660_SLAVE_IMEM_CFG,
  63. SDM660_SLAVE_MESSAGE_RAM,
  64. SDM660_SLAVE_GLM,
  65. SDM660_SLAVE_BIMC_CFG,
  66. SDM660_SLAVE_PRNG,
  67. SDM660_SLAVE_SPDM,
  68. SDM660_SLAVE_QDSS_CFG,
  69. SDM660_SLAVE_CNOC_MNOC_CFG,
  70. SDM660_SLAVE_SNOC_CFG,
  71. SDM660_SLAVE_QM_CFG,
  72. SDM660_SLAVE_CLK_CTL,
  73. SDM660_SLAVE_MSS_CFG,
  74. SDM660_SLAVE_TLMM_SOUTH,
  75. SDM660_SLAVE_UFS_CFG,
  76. SDM660_SLAVE_A2NOC_CFG,
  77. SDM660_SLAVE_A2NOC_SMMU_CFG,
  78. SDM660_SLAVE_GPUSS_CFG,
  79. SDM660_SLAVE_AHB2PHY,
  80. SDM660_SLAVE_BLSP_1,
  81. SDM660_SLAVE_SDCC_1,
  82. SDM660_SLAVE_SDCC_2,
  83. SDM660_SLAVE_TLMM_CENTER,
  84. SDM660_SLAVE_BLSP_2,
  85. SDM660_SLAVE_PDM,
  86. SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
  87. SDM660_SLAVE_USB_HS,
  88. SDM660_SLAVE_USB3_0,
  89. SDM660_SLAVE_SRVC_CNOC,
  90. SDM660_SLAVE_GNOC_BIMC,
  91. SDM660_SLAVE_GNOC_SNOC,
  92. SDM660_SLAVE_CAMERA_CFG,
  93. SDM660_SLAVE_CAMERA_THROTTLE_CFG,
  94. SDM660_SLAVE_MISC_CFG,
  95. SDM660_SLAVE_VENUS_THROTTLE_CFG,
  96. SDM660_SLAVE_VENUS_CFG,
  97. SDM660_SLAVE_MMSS_CLK_XPU_CFG,
  98. SDM660_SLAVE_MMSS_CLK_CFG,
  99. SDM660_SLAVE_MNOC_MPU_CFG,
  100. SDM660_SLAVE_DISPLAY_CFG,
  101. SDM660_SLAVE_CSI_PHY_CFG,
  102. SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
  103. SDM660_SLAVE_SMMU_CFG,
  104. SDM660_SLAVE_MNOC_BIMC,
  105. SDM660_SLAVE_SRVC_MNOC,
  106. SDM660_SLAVE_HMSS,
  107. SDM660_SLAVE_LPASS,
  108. SDM660_SLAVE_WLAN,
  109. SDM660_SLAVE_CDSP,
  110. SDM660_SLAVE_IPA,
  111. SDM660_SLAVE_SNOC_BIMC,
  112. SDM660_SLAVE_SNOC_CNOC,
  113. SDM660_SLAVE_IMEM,
  114. SDM660_SLAVE_PIMEM,
  115. SDM660_SLAVE_QDSS_STM,
  116. SDM660_SLAVE_SRVC_SNOC,
  117. SDM660_A2NOC,
  118. SDM660_BIMC,
  119. SDM660_CNOC,
  120. SDM660_GNOC,
  121. SDM660_MNOC,
  122. SDM660_SNOC,
  123. };
  124. static const char * const bus_mm_clocks[] = {
  125. "bus",
  126. "bus_a",
  127. "iface",
  128. };
  129. static const char * const bus_a2noc_clocks[] = {
  130. "bus",
  131. "bus_a",
  132. "ipa",
  133. "ufs_axi",
  134. "aggre2_ufs_axi",
  135. "aggre2_usb3_axi",
  136. "cfg_noc_usb2_axi",
  137. };
  138. static const u16 mas_ipa_links[] = {
  139. SDM660_SLAVE_A2NOC_SNOC
  140. };
  141. static struct qcom_icc_node mas_ipa = {
  142. .name = "mas_ipa",
  143. .id = SDM660_MASTER_IPA,
  144. .buswidth = 8,
  145. .mas_rpm_id = 59,
  146. .slv_rpm_id = -1,
  147. .qos.ap_owned = true,
  148. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  149. .qos.areq_prio = 1,
  150. .qos.prio_level = 1,
  151. .qos.qos_port = 3,
  152. .num_links = ARRAY_SIZE(mas_ipa_links),
  153. .links = mas_ipa_links,
  154. };
  155. static const u16 mas_cnoc_a2noc_links[] = {
  156. SDM660_SLAVE_A2NOC_SNOC
  157. };
  158. static struct qcom_icc_node mas_cnoc_a2noc = {
  159. .name = "mas_cnoc_a2noc",
  160. .id = SDM660_MASTER_CNOC_A2NOC,
  161. .buswidth = 8,
  162. .mas_rpm_id = 146,
  163. .slv_rpm_id = -1,
  164. .qos.ap_owned = true,
  165. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  166. .num_links = ARRAY_SIZE(mas_cnoc_a2noc_links),
  167. .links = mas_cnoc_a2noc_links,
  168. };
  169. static const u16 mas_sdcc_1_links[] = {
  170. SDM660_SLAVE_A2NOC_SNOC
  171. };
  172. static struct qcom_icc_node mas_sdcc_1 = {
  173. .name = "mas_sdcc_1",
  174. .id = SDM660_MASTER_SDCC_1,
  175. .buswidth = 8,
  176. .mas_rpm_id = 33,
  177. .slv_rpm_id = -1,
  178. .num_links = ARRAY_SIZE(mas_sdcc_1_links),
  179. .links = mas_sdcc_1_links,
  180. };
  181. static const u16 mas_sdcc_2_links[] = {
  182. SDM660_SLAVE_A2NOC_SNOC
  183. };
  184. static struct qcom_icc_node mas_sdcc_2 = {
  185. .name = "mas_sdcc_2",
  186. .id = SDM660_MASTER_SDCC_2,
  187. .buswidth = 8,
  188. .mas_rpm_id = 35,
  189. .slv_rpm_id = -1,
  190. .num_links = ARRAY_SIZE(mas_sdcc_2_links),
  191. .links = mas_sdcc_2_links,
  192. };
  193. static const u16 mas_blsp_1_links[] = {
  194. SDM660_SLAVE_A2NOC_SNOC
  195. };
  196. static struct qcom_icc_node mas_blsp_1 = {
  197. .name = "mas_blsp_1",
  198. .id = SDM660_MASTER_BLSP_1,
  199. .buswidth = 4,
  200. .mas_rpm_id = 41,
  201. .slv_rpm_id = -1,
  202. .num_links = ARRAY_SIZE(mas_blsp_1_links),
  203. .links = mas_blsp_1_links,
  204. };
  205. static const u16 mas_blsp_2_links[] = {
  206. SDM660_SLAVE_A2NOC_SNOC
  207. };
  208. static struct qcom_icc_node mas_blsp_2 = {
  209. .name = "mas_blsp_2",
  210. .id = SDM660_MASTER_BLSP_2,
  211. .buswidth = 4,
  212. .mas_rpm_id = 39,
  213. .slv_rpm_id = -1,
  214. .num_links = ARRAY_SIZE(mas_blsp_2_links),
  215. .links = mas_blsp_2_links,
  216. };
  217. static const u16 mas_ufs_links[] = {
  218. SDM660_SLAVE_A2NOC_SNOC
  219. };
  220. static struct qcom_icc_node mas_ufs = {
  221. .name = "mas_ufs",
  222. .id = SDM660_MASTER_UFS,
  223. .buswidth = 8,
  224. .mas_rpm_id = 68,
  225. .slv_rpm_id = -1,
  226. .qos.ap_owned = true,
  227. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  228. .qos.areq_prio = 1,
  229. .qos.prio_level = 1,
  230. .qos.qos_port = 4,
  231. .num_links = ARRAY_SIZE(mas_ufs_links),
  232. .links = mas_ufs_links,
  233. };
  234. static const u16 mas_usb_hs_links[] = {
  235. SDM660_SLAVE_A2NOC_SNOC
  236. };
  237. static struct qcom_icc_node mas_usb_hs = {
  238. .name = "mas_usb_hs",
  239. .id = SDM660_MASTER_USB_HS,
  240. .buswidth = 8,
  241. .mas_rpm_id = 42,
  242. .slv_rpm_id = -1,
  243. .qos.ap_owned = true,
  244. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  245. .qos.areq_prio = 1,
  246. .qos.prio_level = 1,
  247. .qos.qos_port = 1,
  248. .num_links = ARRAY_SIZE(mas_usb_hs_links),
  249. .links = mas_usb_hs_links,
  250. };
  251. static const u16 mas_usb3_links[] = {
  252. SDM660_SLAVE_A2NOC_SNOC
  253. };
  254. static struct qcom_icc_node mas_usb3 = {
  255. .name = "mas_usb3",
  256. .id = SDM660_MASTER_USB3,
  257. .buswidth = 8,
  258. .mas_rpm_id = 32,
  259. .slv_rpm_id = -1,
  260. .qos.ap_owned = true,
  261. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  262. .qos.areq_prio = 1,
  263. .qos.prio_level = 1,
  264. .qos.qos_port = 2,
  265. .num_links = ARRAY_SIZE(mas_usb3_links),
  266. .links = mas_usb3_links,
  267. };
  268. static const u16 mas_crypto_links[] = {
  269. SDM660_SLAVE_A2NOC_SNOC
  270. };
  271. static struct qcom_icc_node mas_crypto = {
  272. .name = "mas_crypto",
  273. .id = SDM660_MASTER_CRYPTO_C0,
  274. .buswidth = 8,
  275. .mas_rpm_id = 23,
  276. .slv_rpm_id = -1,
  277. .qos.ap_owned = true,
  278. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  279. .qos.areq_prio = 1,
  280. .qos.prio_level = 1,
  281. .qos.qos_port = 11,
  282. .num_links = ARRAY_SIZE(mas_crypto_links),
  283. .links = mas_crypto_links,
  284. };
  285. static const u16 mas_gnoc_bimc_links[] = {
  286. SDM660_SLAVE_EBI
  287. };
  288. static struct qcom_icc_node mas_gnoc_bimc = {
  289. .name = "mas_gnoc_bimc",
  290. .id = SDM660_MASTER_GNOC_BIMC,
  291. .buswidth = 4,
  292. .mas_rpm_id = 144,
  293. .slv_rpm_id = -1,
  294. .qos.ap_owned = true,
  295. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  296. .qos.areq_prio = 0,
  297. .qos.prio_level = 0,
  298. .qos.qos_port = 0,
  299. .num_links = ARRAY_SIZE(mas_gnoc_bimc_links),
  300. .links = mas_gnoc_bimc_links,
  301. };
  302. static const u16 mas_oxili_links[] = {
  303. SDM660_SLAVE_HMSS_L3,
  304. SDM660_SLAVE_EBI,
  305. SDM660_SLAVE_BIMC_SNOC
  306. };
  307. static struct qcom_icc_node mas_oxili = {
  308. .name = "mas_oxili",
  309. .id = SDM660_MASTER_OXILI,
  310. .buswidth = 4,
  311. .mas_rpm_id = 6,
  312. .slv_rpm_id = -1,
  313. .qos.ap_owned = true,
  314. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  315. .qos.areq_prio = 0,
  316. .qos.prio_level = 0,
  317. .qos.qos_port = 1,
  318. .num_links = ARRAY_SIZE(mas_oxili_links),
  319. .links = mas_oxili_links,
  320. };
  321. static const u16 mas_mnoc_bimc_links[] = {
  322. SDM660_SLAVE_HMSS_L3,
  323. SDM660_SLAVE_EBI,
  324. SDM660_SLAVE_BIMC_SNOC
  325. };
  326. static struct qcom_icc_node mas_mnoc_bimc = {
  327. .name = "mas_mnoc_bimc",
  328. .id = SDM660_MASTER_MNOC_BIMC,
  329. .buswidth = 4,
  330. .mas_rpm_id = 2,
  331. .slv_rpm_id = -1,
  332. .qos.ap_owned = true,
  333. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  334. .qos.areq_prio = 0,
  335. .qos.prio_level = 0,
  336. .qos.qos_port = 2,
  337. .num_links = ARRAY_SIZE(mas_mnoc_bimc_links),
  338. .links = mas_mnoc_bimc_links,
  339. };
  340. static const u16 mas_snoc_bimc_links[] = {
  341. SDM660_SLAVE_HMSS_L3,
  342. SDM660_SLAVE_EBI
  343. };
  344. static struct qcom_icc_node mas_snoc_bimc = {
  345. .name = "mas_snoc_bimc",
  346. .id = SDM660_MASTER_SNOC_BIMC,
  347. .buswidth = 4,
  348. .mas_rpm_id = 3,
  349. .slv_rpm_id = -1,
  350. .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
  351. .links = mas_snoc_bimc_links,
  352. };
  353. static const u16 mas_pimem_links[] = {
  354. SDM660_SLAVE_HMSS_L3,
  355. SDM660_SLAVE_EBI
  356. };
  357. static struct qcom_icc_node mas_pimem = {
  358. .name = "mas_pimem",
  359. .id = SDM660_MASTER_PIMEM,
  360. .buswidth = 4,
  361. .mas_rpm_id = 113,
  362. .slv_rpm_id = -1,
  363. .qos.ap_owned = true,
  364. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  365. .qos.areq_prio = 1,
  366. .qos.prio_level = 1,
  367. .qos.qos_port = 4,
  368. .num_links = ARRAY_SIZE(mas_pimem_links),
  369. .links = mas_pimem_links,
  370. };
  371. static const u16 mas_snoc_cnoc_links[] = {
  372. SDM660_SLAVE_CLK_CTL,
  373. SDM660_SLAVE_QDSS_CFG,
  374. SDM660_SLAVE_QM_CFG,
  375. SDM660_SLAVE_SRVC_CNOC,
  376. SDM660_SLAVE_UFS_CFG,
  377. SDM660_SLAVE_TCSR,
  378. SDM660_SLAVE_A2NOC_SMMU_CFG,
  379. SDM660_SLAVE_SNOC_CFG,
  380. SDM660_SLAVE_TLMM_SOUTH,
  381. SDM660_SLAVE_MPM,
  382. SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
  383. SDM660_SLAVE_SDCC_2,
  384. SDM660_SLAVE_SDCC_1,
  385. SDM660_SLAVE_SPDM,
  386. SDM660_SLAVE_PMIC_ARB,
  387. SDM660_SLAVE_PRNG,
  388. SDM660_SLAVE_MSS_CFG,
  389. SDM660_SLAVE_GPUSS_CFG,
  390. SDM660_SLAVE_IMEM_CFG,
  391. SDM660_SLAVE_USB3_0,
  392. SDM660_SLAVE_A2NOC_CFG,
  393. SDM660_SLAVE_TLMM_NORTH,
  394. SDM660_SLAVE_USB_HS,
  395. SDM660_SLAVE_PDM,
  396. SDM660_SLAVE_TLMM_CENTER,
  397. SDM660_SLAVE_AHB2PHY,
  398. SDM660_SLAVE_BLSP_2,
  399. SDM660_SLAVE_BLSP_1,
  400. SDM660_SLAVE_PIMEM_CFG,
  401. SDM660_SLAVE_GLM,
  402. SDM660_SLAVE_MESSAGE_RAM,
  403. SDM660_SLAVE_BIMC_CFG,
  404. SDM660_SLAVE_CNOC_MNOC_CFG
  405. };
  406. static struct qcom_icc_node mas_snoc_cnoc = {
  407. .name = "mas_snoc_cnoc",
  408. .id = SDM660_MASTER_SNOC_CNOC,
  409. .buswidth = 8,
  410. .mas_rpm_id = 52,
  411. .slv_rpm_id = -1,
  412. .qos.ap_owned = true,
  413. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  414. .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
  415. .links = mas_snoc_cnoc_links,
  416. };
  417. static const u16 mas_qdss_dap_links[] = {
  418. SDM660_SLAVE_CLK_CTL,
  419. SDM660_SLAVE_QDSS_CFG,
  420. SDM660_SLAVE_QM_CFG,
  421. SDM660_SLAVE_SRVC_CNOC,
  422. SDM660_SLAVE_UFS_CFG,
  423. SDM660_SLAVE_TCSR,
  424. SDM660_SLAVE_A2NOC_SMMU_CFG,
  425. SDM660_SLAVE_SNOC_CFG,
  426. SDM660_SLAVE_TLMM_SOUTH,
  427. SDM660_SLAVE_MPM,
  428. SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
  429. SDM660_SLAVE_SDCC_2,
  430. SDM660_SLAVE_SDCC_1,
  431. SDM660_SLAVE_SPDM,
  432. SDM660_SLAVE_PMIC_ARB,
  433. SDM660_SLAVE_PRNG,
  434. SDM660_SLAVE_MSS_CFG,
  435. SDM660_SLAVE_GPUSS_CFG,
  436. SDM660_SLAVE_IMEM_CFG,
  437. SDM660_SLAVE_USB3_0,
  438. SDM660_SLAVE_A2NOC_CFG,
  439. SDM660_SLAVE_TLMM_NORTH,
  440. SDM660_SLAVE_USB_HS,
  441. SDM660_SLAVE_PDM,
  442. SDM660_SLAVE_TLMM_CENTER,
  443. SDM660_SLAVE_AHB2PHY,
  444. SDM660_SLAVE_BLSP_2,
  445. SDM660_SLAVE_BLSP_1,
  446. SDM660_SLAVE_PIMEM_CFG,
  447. SDM660_SLAVE_GLM,
  448. SDM660_SLAVE_MESSAGE_RAM,
  449. SDM660_SLAVE_CNOC_A2NOC,
  450. SDM660_SLAVE_BIMC_CFG,
  451. SDM660_SLAVE_CNOC_MNOC_CFG
  452. };
  453. static struct qcom_icc_node mas_qdss_dap = {
  454. .name = "mas_qdss_dap",
  455. .id = SDM660_MASTER_QDSS_DAP,
  456. .buswidth = 8,
  457. .mas_rpm_id = 49,
  458. .slv_rpm_id = -1,
  459. .qos.ap_owned = true,
  460. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  461. .num_links = ARRAY_SIZE(mas_qdss_dap_links),
  462. .links = mas_qdss_dap_links,
  463. };
  464. static const u16 mas_apss_proc_links[] = {
  465. SDM660_SLAVE_GNOC_SNOC,
  466. SDM660_SLAVE_GNOC_BIMC
  467. };
  468. static struct qcom_icc_node mas_apss_proc = {
  469. .name = "mas_apss_proc",
  470. .id = SDM660_MASTER_APPS_PROC,
  471. .buswidth = 16,
  472. .mas_rpm_id = 0,
  473. .slv_rpm_id = -1,
  474. .qos.ap_owned = true,
  475. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  476. .num_links = ARRAY_SIZE(mas_apss_proc_links),
  477. .links = mas_apss_proc_links,
  478. };
  479. static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = {
  480. SDM660_SLAVE_VENUS_THROTTLE_CFG,
  481. SDM660_SLAVE_VENUS_CFG,
  482. SDM660_SLAVE_CAMERA_THROTTLE_CFG,
  483. SDM660_SLAVE_SMMU_CFG,
  484. SDM660_SLAVE_CAMERA_CFG,
  485. SDM660_SLAVE_CSI_PHY_CFG,
  486. SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
  487. SDM660_SLAVE_DISPLAY_CFG,
  488. SDM660_SLAVE_MMSS_CLK_CFG,
  489. SDM660_SLAVE_MNOC_MPU_CFG,
  490. SDM660_SLAVE_MISC_CFG,
  491. SDM660_SLAVE_MMSS_CLK_XPU_CFG
  492. };
  493. static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = {
  494. .name = "mas_cnoc_mnoc_mmss_cfg",
  495. .id = SDM660_MASTER_CNOC_MNOC_MMSS_CFG,
  496. .buswidth = 8,
  497. .mas_rpm_id = 4,
  498. .slv_rpm_id = -1,
  499. .qos.ap_owned = true,
  500. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  501. .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links),
  502. .links = mas_cnoc_mnoc_mmss_cfg_links,
  503. };
  504. static const u16 mas_cnoc_mnoc_cfg_links[] = {
  505. SDM660_SLAVE_SRVC_MNOC
  506. };
  507. static struct qcom_icc_node mas_cnoc_mnoc_cfg = {
  508. .name = "mas_cnoc_mnoc_cfg",
  509. .id = SDM660_MASTER_CNOC_MNOC_CFG,
  510. .buswidth = 4,
  511. .mas_rpm_id = 5,
  512. .slv_rpm_id = -1,
  513. .qos.ap_owned = true,
  514. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  515. .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links),
  516. .links = mas_cnoc_mnoc_cfg_links,
  517. };
  518. static const u16 mas_cpp_links[] = {
  519. SDM660_SLAVE_MNOC_BIMC
  520. };
  521. static struct qcom_icc_node mas_cpp = {
  522. .name = "mas_cpp",
  523. .id = SDM660_MASTER_CPP,
  524. .buswidth = 16,
  525. .mas_rpm_id = 115,
  526. .slv_rpm_id = -1,
  527. .qos.ap_owned = true,
  528. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  529. .qos.areq_prio = 0,
  530. .qos.prio_level = 0,
  531. .qos.qos_port = 4,
  532. .num_links = ARRAY_SIZE(mas_cpp_links),
  533. .links = mas_cpp_links,
  534. };
  535. static const u16 mas_jpeg_links[] = {
  536. SDM660_SLAVE_MNOC_BIMC
  537. };
  538. static struct qcom_icc_node mas_jpeg = {
  539. .name = "mas_jpeg",
  540. .id = SDM660_MASTER_JPEG,
  541. .buswidth = 16,
  542. .mas_rpm_id = 7,
  543. .slv_rpm_id = -1,
  544. .qos.ap_owned = true,
  545. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  546. .qos.areq_prio = 0,
  547. .qos.prio_level = 0,
  548. .qos.qos_port = 6,
  549. .num_links = ARRAY_SIZE(mas_jpeg_links),
  550. .links = mas_jpeg_links,
  551. };
  552. static const u16 mas_mdp_p0_links[] = {
  553. SDM660_SLAVE_MNOC_BIMC
  554. };
  555. static struct qcom_icc_node mas_mdp_p0 = {
  556. .name = "mas_mdp_p0",
  557. .id = SDM660_MASTER_MDP_P0,
  558. .buswidth = 16,
  559. .mas_rpm_id = 8,
  560. .slv_rpm_id = -1,
  561. .qos.ap_owned = true,
  562. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  563. .qos.areq_prio = 0,
  564. .qos.prio_level = 0,
  565. .qos.qos_port = 0,
  566. .num_links = ARRAY_SIZE(mas_mdp_p0_links),
  567. .links = mas_mdp_p0_links,
  568. };
  569. static const u16 mas_mdp_p1_links[] = {
  570. SDM660_SLAVE_MNOC_BIMC
  571. };
  572. static struct qcom_icc_node mas_mdp_p1 = {
  573. .name = "mas_mdp_p1",
  574. .id = SDM660_MASTER_MDP_P1,
  575. .buswidth = 16,
  576. .mas_rpm_id = 61,
  577. .slv_rpm_id = -1,
  578. .qos.ap_owned = true,
  579. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  580. .qos.areq_prio = 0,
  581. .qos.prio_level = 0,
  582. .qos.qos_port = 1,
  583. .num_links = ARRAY_SIZE(mas_mdp_p1_links),
  584. .links = mas_mdp_p1_links,
  585. };
  586. static const u16 mas_venus_links[] = {
  587. SDM660_SLAVE_MNOC_BIMC
  588. };
  589. static struct qcom_icc_node mas_venus = {
  590. .name = "mas_venus",
  591. .id = SDM660_MASTER_VENUS,
  592. .buswidth = 16,
  593. .mas_rpm_id = 9,
  594. .slv_rpm_id = -1,
  595. .qos.ap_owned = true,
  596. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  597. .qos.areq_prio = 0,
  598. .qos.prio_level = 0,
  599. .qos.qos_port = 1,
  600. .num_links = ARRAY_SIZE(mas_venus_links),
  601. .links = mas_venus_links,
  602. };
  603. static const u16 mas_vfe_links[] = {
  604. SDM660_SLAVE_MNOC_BIMC
  605. };
  606. static struct qcom_icc_node mas_vfe = {
  607. .name = "mas_vfe",
  608. .id = SDM660_MASTER_VFE,
  609. .buswidth = 16,
  610. .mas_rpm_id = 11,
  611. .slv_rpm_id = -1,
  612. .qos.ap_owned = true,
  613. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  614. .qos.areq_prio = 0,
  615. .qos.prio_level = 0,
  616. .qos.qos_port = 5,
  617. .num_links = ARRAY_SIZE(mas_vfe_links),
  618. .links = mas_vfe_links,
  619. };
  620. static const u16 mas_qdss_etr_links[] = {
  621. SDM660_SLAVE_PIMEM,
  622. SDM660_SLAVE_IMEM,
  623. SDM660_SLAVE_SNOC_CNOC,
  624. SDM660_SLAVE_SNOC_BIMC
  625. };
  626. static struct qcom_icc_node mas_qdss_etr = {
  627. .name = "mas_qdss_etr",
  628. .id = SDM660_MASTER_QDSS_ETR,
  629. .buswidth = 8,
  630. .mas_rpm_id = 31,
  631. .slv_rpm_id = -1,
  632. .qos.ap_owned = true,
  633. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  634. .qos.areq_prio = 1,
  635. .qos.prio_level = 1,
  636. .qos.qos_port = 1,
  637. .num_links = ARRAY_SIZE(mas_qdss_etr_links),
  638. .links = mas_qdss_etr_links,
  639. };
  640. static const u16 mas_qdss_bam_links[] = {
  641. SDM660_SLAVE_PIMEM,
  642. SDM660_SLAVE_IMEM,
  643. SDM660_SLAVE_SNOC_CNOC,
  644. SDM660_SLAVE_SNOC_BIMC
  645. };
  646. static struct qcom_icc_node mas_qdss_bam = {
  647. .name = "mas_qdss_bam",
  648. .id = SDM660_MASTER_QDSS_BAM,
  649. .buswidth = 4,
  650. .mas_rpm_id = 19,
  651. .slv_rpm_id = -1,
  652. .qos.ap_owned = true,
  653. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  654. .qos.areq_prio = 1,
  655. .qos.prio_level = 1,
  656. .qos.qos_port = 0,
  657. .num_links = ARRAY_SIZE(mas_qdss_bam_links),
  658. .links = mas_qdss_bam_links,
  659. };
  660. static const u16 mas_snoc_cfg_links[] = {
  661. SDM660_SLAVE_SRVC_SNOC
  662. };
  663. static struct qcom_icc_node mas_snoc_cfg = {
  664. .name = "mas_snoc_cfg",
  665. .id = SDM660_MASTER_SNOC_CFG,
  666. .buswidth = 4,
  667. .mas_rpm_id = 20,
  668. .slv_rpm_id = -1,
  669. .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
  670. .links = mas_snoc_cfg_links,
  671. };
  672. static const u16 mas_bimc_snoc_links[] = {
  673. SDM660_SLAVE_PIMEM,
  674. SDM660_SLAVE_IPA,
  675. SDM660_SLAVE_QDSS_STM,
  676. SDM660_SLAVE_LPASS,
  677. SDM660_SLAVE_HMSS,
  678. SDM660_SLAVE_CDSP,
  679. SDM660_SLAVE_SNOC_CNOC,
  680. SDM660_SLAVE_WLAN,
  681. SDM660_SLAVE_IMEM
  682. };
  683. static struct qcom_icc_node mas_bimc_snoc = {
  684. .name = "mas_bimc_snoc",
  685. .id = SDM660_MASTER_BIMC_SNOC,
  686. .buswidth = 8,
  687. .mas_rpm_id = 21,
  688. .slv_rpm_id = -1,
  689. .num_links = ARRAY_SIZE(mas_bimc_snoc_links),
  690. .links = mas_bimc_snoc_links,
  691. };
  692. static const u16 mas_gnoc_snoc_links[] = {
  693. SDM660_SLAVE_PIMEM,
  694. SDM660_SLAVE_IPA,
  695. SDM660_SLAVE_QDSS_STM,
  696. SDM660_SLAVE_LPASS,
  697. SDM660_SLAVE_HMSS,
  698. SDM660_SLAVE_CDSP,
  699. SDM660_SLAVE_SNOC_CNOC,
  700. SDM660_SLAVE_WLAN,
  701. SDM660_SLAVE_IMEM
  702. };
  703. static struct qcom_icc_node mas_gnoc_snoc = {
  704. .name = "mas_gnoc_snoc",
  705. .id = SDM660_MASTER_GNOC_SNOC,
  706. .buswidth = 8,
  707. .mas_rpm_id = 150,
  708. .slv_rpm_id = -1,
  709. .num_links = ARRAY_SIZE(mas_gnoc_snoc_links),
  710. .links = mas_gnoc_snoc_links,
  711. };
  712. static const u16 mas_a2noc_snoc_links[] = {
  713. SDM660_SLAVE_PIMEM,
  714. SDM660_SLAVE_IPA,
  715. SDM660_SLAVE_QDSS_STM,
  716. SDM660_SLAVE_LPASS,
  717. SDM660_SLAVE_HMSS,
  718. SDM660_SLAVE_SNOC_BIMC,
  719. SDM660_SLAVE_CDSP,
  720. SDM660_SLAVE_SNOC_CNOC,
  721. SDM660_SLAVE_WLAN,
  722. SDM660_SLAVE_IMEM
  723. };
  724. static struct qcom_icc_node mas_a2noc_snoc = {
  725. .name = "mas_a2noc_snoc",
  726. .id = SDM660_MASTER_A2NOC_SNOC,
  727. .buswidth = 16,
  728. .mas_rpm_id = 112,
  729. .slv_rpm_id = -1,
  730. .num_links = ARRAY_SIZE(mas_a2noc_snoc_links),
  731. .links = mas_a2noc_snoc_links,
  732. };
  733. static const u16 slv_a2noc_snoc_links[] = {
  734. SDM660_MASTER_A2NOC_SNOC
  735. };
  736. static struct qcom_icc_node slv_a2noc_snoc = {
  737. .name = "slv_a2noc_snoc",
  738. .id = SDM660_SLAVE_A2NOC_SNOC,
  739. .buswidth = 16,
  740. .mas_rpm_id = -1,
  741. .slv_rpm_id = 143,
  742. .num_links = ARRAY_SIZE(slv_a2noc_snoc_links),
  743. .links = slv_a2noc_snoc_links,
  744. };
  745. static struct qcom_icc_node slv_ebi = {
  746. .name = "slv_ebi",
  747. .id = SDM660_SLAVE_EBI,
  748. .buswidth = 4,
  749. .mas_rpm_id = -1,
  750. .slv_rpm_id = 0,
  751. };
  752. static struct qcom_icc_node slv_hmss_l3 = {
  753. .name = "slv_hmss_l3",
  754. .id = SDM660_SLAVE_HMSS_L3,
  755. .buswidth = 4,
  756. .mas_rpm_id = -1,
  757. .slv_rpm_id = 160,
  758. };
  759. static const u16 slv_bimc_snoc_links[] = {
  760. SDM660_MASTER_BIMC_SNOC
  761. };
  762. static struct qcom_icc_node slv_bimc_snoc = {
  763. .name = "slv_bimc_snoc",
  764. .id = SDM660_SLAVE_BIMC_SNOC,
  765. .buswidth = 4,
  766. .mas_rpm_id = -1,
  767. .slv_rpm_id = 2,
  768. .num_links = ARRAY_SIZE(slv_bimc_snoc_links),
  769. .links = slv_bimc_snoc_links,
  770. };
  771. static const u16 slv_cnoc_a2noc_links[] = {
  772. SDM660_MASTER_CNOC_A2NOC
  773. };
  774. static struct qcom_icc_node slv_cnoc_a2noc = {
  775. .name = "slv_cnoc_a2noc",
  776. .id = SDM660_SLAVE_CNOC_A2NOC,
  777. .buswidth = 8,
  778. .mas_rpm_id = -1,
  779. .slv_rpm_id = 208,
  780. .qos.ap_owned = true,
  781. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  782. .num_links = ARRAY_SIZE(slv_cnoc_a2noc_links),
  783. .links = slv_cnoc_a2noc_links,
  784. };
  785. static struct qcom_icc_node slv_mpm = {
  786. .name = "slv_mpm",
  787. .id = SDM660_SLAVE_MPM,
  788. .buswidth = 4,
  789. .mas_rpm_id = -1,
  790. .slv_rpm_id = 62,
  791. .qos.ap_owned = true,
  792. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  793. };
  794. static struct qcom_icc_node slv_pmic_arb = {
  795. .name = "slv_pmic_arb",
  796. .id = SDM660_SLAVE_PMIC_ARB,
  797. .buswidth = 4,
  798. .mas_rpm_id = -1,
  799. .slv_rpm_id = 59,
  800. .qos.ap_owned = true,
  801. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  802. };
  803. static struct qcom_icc_node slv_tlmm_north = {
  804. .name = "slv_tlmm_north",
  805. .id = SDM660_SLAVE_TLMM_NORTH,
  806. .buswidth = 8,
  807. .mas_rpm_id = -1,
  808. .slv_rpm_id = 214,
  809. .qos.ap_owned = true,
  810. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  811. };
  812. static struct qcom_icc_node slv_tcsr = {
  813. .name = "slv_tcsr",
  814. .id = SDM660_SLAVE_TCSR,
  815. .buswidth = 4,
  816. .mas_rpm_id = -1,
  817. .slv_rpm_id = 50,
  818. .qos.ap_owned = true,
  819. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  820. };
  821. static struct qcom_icc_node slv_pimem_cfg = {
  822. .name = "slv_pimem_cfg",
  823. .id = SDM660_SLAVE_PIMEM_CFG,
  824. .buswidth = 4,
  825. .mas_rpm_id = -1,
  826. .slv_rpm_id = 167,
  827. .qos.ap_owned = true,
  828. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  829. };
  830. static struct qcom_icc_node slv_imem_cfg = {
  831. .name = "slv_imem_cfg",
  832. .id = SDM660_SLAVE_IMEM_CFG,
  833. .buswidth = 4,
  834. .mas_rpm_id = -1,
  835. .slv_rpm_id = 54,
  836. .qos.ap_owned = true,
  837. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  838. };
  839. static struct qcom_icc_node slv_message_ram = {
  840. .name = "slv_message_ram",
  841. .id = SDM660_SLAVE_MESSAGE_RAM,
  842. .buswidth = 4,
  843. .mas_rpm_id = -1,
  844. .slv_rpm_id = 55,
  845. .qos.ap_owned = true,
  846. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  847. };
  848. static struct qcom_icc_node slv_glm = {
  849. .name = "slv_glm",
  850. .id = SDM660_SLAVE_GLM,
  851. .buswidth = 4,
  852. .mas_rpm_id = -1,
  853. .slv_rpm_id = 209,
  854. .qos.ap_owned = true,
  855. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  856. };
  857. static struct qcom_icc_node slv_bimc_cfg = {
  858. .name = "slv_bimc_cfg",
  859. .id = SDM660_SLAVE_BIMC_CFG,
  860. .buswidth = 4,
  861. .mas_rpm_id = -1,
  862. .slv_rpm_id = 56,
  863. .qos.ap_owned = true,
  864. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  865. };
  866. static struct qcom_icc_node slv_prng = {
  867. .name = "slv_prng",
  868. .id = SDM660_SLAVE_PRNG,
  869. .buswidth = 4,
  870. .mas_rpm_id = -1,
  871. .slv_rpm_id = 44,
  872. .qos.ap_owned = true,
  873. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  874. };
  875. static struct qcom_icc_node slv_spdm = {
  876. .name = "slv_spdm",
  877. .id = SDM660_SLAVE_SPDM,
  878. .buswidth = 4,
  879. .mas_rpm_id = -1,
  880. .slv_rpm_id = 60,
  881. .qos.ap_owned = true,
  882. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  883. };
  884. static struct qcom_icc_node slv_qdss_cfg = {
  885. .name = "slv_qdss_cfg",
  886. .id = SDM660_SLAVE_QDSS_CFG,
  887. .buswidth = 4,
  888. .mas_rpm_id = -1,
  889. .slv_rpm_id = 63,
  890. .qos.ap_owned = true,
  891. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  892. };
  893. static const u16 slv_cnoc_mnoc_cfg_links[] = {
  894. SDM660_MASTER_CNOC_MNOC_CFG
  895. };
  896. static struct qcom_icc_node slv_cnoc_mnoc_cfg = {
  897. .name = "slv_cnoc_mnoc_cfg",
  898. .id = SDM660_SLAVE_CNOC_MNOC_CFG,
  899. .buswidth = 4,
  900. .mas_rpm_id = -1,
  901. .slv_rpm_id = 66,
  902. .qos.ap_owned = true,
  903. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  904. .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links),
  905. .links = slv_cnoc_mnoc_cfg_links,
  906. };
  907. static struct qcom_icc_node slv_snoc_cfg = {
  908. .name = "slv_snoc_cfg",
  909. .id = SDM660_SLAVE_SNOC_CFG,
  910. .buswidth = 4,
  911. .mas_rpm_id = -1,
  912. .slv_rpm_id = 70,
  913. .qos.ap_owned = true,
  914. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  915. };
  916. static struct qcom_icc_node slv_qm_cfg = {
  917. .name = "slv_qm_cfg",
  918. .id = SDM660_SLAVE_QM_CFG,
  919. .buswidth = 4,
  920. .mas_rpm_id = -1,
  921. .slv_rpm_id = 212,
  922. .qos.ap_owned = true,
  923. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  924. };
  925. static struct qcom_icc_node slv_clk_ctl = {
  926. .name = "slv_clk_ctl",
  927. .id = SDM660_SLAVE_CLK_CTL,
  928. .buswidth = 4,
  929. .mas_rpm_id = -1,
  930. .slv_rpm_id = 47,
  931. .qos.ap_owned = true,
  932. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  933. };
  934. static struct qcom_icc_node slv_mss_cfg = {
  935. .name = "slv_mss_cfg",
  936. .id = SDM660_SLAVE_MSS_CFG,
  937. .buswidth = 4,
  938. .mas_rpm_id = -1,
  939. .slv_rpm_id = 48,
  940. .qos.ap_owned = true,
  941. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  942. };
  943. static struct qcom_icc_node slv_tlmm_south = {
  944. .name = "slv_tlmm_south",
  945. .id = SDM660_SLAVE_TLMM_SOUTH,
  946. .buswidth = 4,
  947. .mas_rpm_id = -1,
  948. .slv_rpm_id = 217,
  949. .qos.ap_owned = true,
  950. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  951. };
  952. static struct qcom_icc_node slv_ufs_cfg = {
  953. .name = "slv_ufs_cfg",
  954. .id = SDM660_SLAVE_UFS_CFG,
  955. .buswidth = 4,
  956. .mas_rpm_id = -1,
  957. .slv_rpm_id = 92,
  958. .qos.ap_owned = true,
  959. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  960. };
  961. static struct qcom_icc_node slv_a2noc_cfg = {
  962. .name = "slv_a2noc_cfg",
  963. .id = SDM660_SLAVE_A2NOC_CFG,
  964. .buswidth = 4,
  965. .mas_rpm_id = -1,
  966. .slv_rpm_id = 150,
  967. .qos.ap_owned = true,
  968. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  969. };
  970. static struct qcom_icc_node slv_a2noc_smmu_cfg = {
  971. .name = "slv_a2noc_smmu_cfg",
  972. .id = SDM660_SLAVE_A2NOC_SMMU_CFG,
  973. .buswidth = 8,
  974. .mas_rpm_id = -1,
  975. .slv_rpm_id = 152,
  976. .qos.ap_owned = true,
  977. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  978. };
  979. static struct qcom_icc_node slv_gpuss_cfg = {
  980. .name = "slv_gpuss_cfg",
  981. .id = SDM660_SLAVE_GPUSS_CFG,
  982. .buswidth = 8,
  983. .mas_rpm_id = -1,
  984. .slv_rpm_id = 11,
  985. .qos.ap_owned = true,
  986. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  987. };
  988. static struct qcom_icc_node slv_ahb2phy = {
  989. .name = "slv_ahb2phy",
  990. .id = SDM660_SLAVE_AHB2PHY,
  991. .buswidth = 4,
  992. .mas_rpm_id = -1,
  993. .slv_rpm_id = 163,
  994. .qos.ap_owned = true,
  995. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  996. };
  997. static struct qcom_icc_node slv_blsp_1 = {
  998. .name = "slv_blsp_1",
  999. .id = SDM660_SLAVE_BLSP_1,
  1000. .buswidth = 4,
  1001. .mas_rpm_id = -1,
  1002. .slv_rpm_id = 39,
  1003. .qos.ap_owned = true,
  1004. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1005. };
  1006. static struct qcom_icc_node slv_sdcc_1 = {
  1007. .name = "slv_sdcc_1",
  1008. .id = SDM660_SLAVE_SDCC_1,
  1009. .buswidth = 4,
  1010. .mas_rpm_id = -1,
  1011. .slv_rpm_id = 31,
  1012. .qos.ap_owned = true,
  1013. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1014. };
  1015. static struct qcom_icc_node slv_sdcc_2 = {
  1016. .name = "slv_sdcc_2",
  1017. .id = SDM660_SLAVE_SDCC_2,
  1018. .buswidth = 4,
  1019. .mas_rpm_id = -1,
  1020. .slv_rpm_id = 33,
  1021. .qos.ap_owned = true,
  1022. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1023. };
  1024. static struct qcom_icc_node slv_tlmm_center = {
  1025. .name = "slv_tlmm_center",
  1026. .id = SDM660_SLAVE_TLMM_CENTER,
  1027. .buswidth = 4,
  1028. .mas_rpm_id = -1,
  1029. .slv_rpm_id = 218,
  1030. .qos.ap_owned = true,
  1031. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1032. };
  1033. static struct qcom_icc_node slv_blsp_2 = {
  1034. .name = "slv_blsp_2",
  1035. .id = SDM660_SLAVE_BLSP_2,
  1036. .buswidth = 4,
  1037. .mas_rpm_id = -1,
  1038. .slv_rpm_id = 37,
  1039. .qos.ap_owned = true,
  1040. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1041. };
  1042. static struct qcom_icc_node slv_pdm = {
  1043. .name = "slv_pdm",
  1044. .id = SDM660_SLAVE_PDM,
  1045. .buswidth = 4,
  1046. .mas_rpm_id = -1,
  1047. .slv_rpm_id = 41,
  1048. .qos.ap_owned = true,
  1049. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1050. };
  1051. static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = {
  1052. SDM660_MASTER_CNOC_MNOC_MMSS_CFG
  1053. };
  1054. static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = {
  1055. .name = "slv_cnoc_mnoc_mmss_cfg",
  1056. .id = SDM660_SLAVE_CNOC_MNOC_MMSS_CFG,
  1057. .buswidth = 8,
  1058. .mas_rpm_id = -1,
  1059. .slv_rpm_id = 58,
  1060. .qos.ap_owned = true,
  1061. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1062. .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links),
  1063. .links = slv_cnoc_mnoc_mmss_cfg_links,
  1064. };
  1065. static struct qcom_icc_node slv_usb_hs = {
  1066. .name = "slv_usb_hs",
  1067. .id = SDM660_SLAVE_USB_HS,
  1068. .buswidth = 4,
  1069. .mas_rpm_id = -1,
  1070. .slv_rpm_id = 40,
  1071. .qos.ap_owned = true,
  1072. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1073. };
  1074. static struct qcom_icc_node slv_usb3_0 = {
  1075. .name = "slv_usb3_0",
  1076. .id = SDM660_SLAVE_USB3_0,
  1077. .buswidth = 4,
  1078. .mas_rpm_id = -1,
  1079. .slv_rpm_id = 22,
  1080. .qos.ap_owned = true,
  1081. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1082. };
  1083. static struct qcom_icc_node slv_srvc_cnoc = {
  1084. .name = "slv_srvc_cnoc",
  1085. .id = SDM660_SLAVE_SRVC_CNOC,
  1086. .buswidth = 4,
  1087. .mas_rpm_id = -1,
  1088. .slv_rpm_id = 76,
  1089. .qos.ap_owned = true,
  1090. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1091. };
  1092. static const u16 slv_gnoc_bimc_links[] = {
  1093. SDM660_MASTER_GNOC_BIMC
  1094. };
  1095. static struct qcom_icc_node slv_gnoc_bimc = {
  1096. .name = "slv_gnoc_bimc",
  1097. .id = SDM660_SLAVE_GNOC_BIMC,
  1098. .buswidth = 16,
  1099. .mas_rpm_id = -1,
  1100. .slv_rpm_id = 210,
  1101. .qos.ap_owned = true,
  1102. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1103. .num_links = ARRAY_SIZE(slv_gnoc_bimc_links),
  1104. .links = slv_gnoc_bimc_links,
  1105. };
  1106. static const u16 slv_gnoc_snoc_links[] = {
  1107. SDM660_MASTER_GNOC_SNOC
  1108. };
  1109. static struct qcom_icc_node slv_gnoc_snoc = {
  1110. .name = "slv_gnoc_snoc",
  1111. .id = SDM660_SLAVE_GNOC_SNOC,
  1112. .buswidth = 8,
  1113. .mas_rpm_id = -1,
  1114. .slv_rpm_id = 211,
  1115. .qos.ap_owned = true,
  1116. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1117. .num_links = ARRAY_SIZE(slv_gnoc_snoc_links),
  1118. .links = slv_gnoc_snoc_links,
  1119. };
  1120. static struct qcom_icc_node slv_camera_cfg = {
  1121. .name = "slv_camera_cfg",
  1122. .id = SDM660_SLAVE_CAMERA_CFG,
  1123. .buswidth = 4,
  1124. .mas_rpm_id = -1,
  1125. .slv_rpm_id = 3,
  1126. .qos.ap_owned = true,
  1127. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1128. };
  1129. static struct qcom_icc_node slv_camera_throttle_cfg = {
  1130. .name = "slv_camera_throttle_cfg",
  1131. .id = SDM660_SLAVE_CAMERA_THROTTLE_CFG,
  1132. .buswidth = 4,
  1133. .mas_rpm_id = -1,
  1134. .slv_rpm_id = 154,
  1135. .qos.ap_owned = true,
  1136. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1137. };
  1138. static struct qcom_icc_node slv_misc_cfg = {
  1139. .name = "slv_misc_cfg",
  1140. .id = SDM660_SLAVE_MISC_CFG,
  1141. .buswidth = 4,
  1142. .mas_rpm_id = -1,
  1143. .slv_rpm_id = 8,
  1144. .qos.ap_owned = true,
  1145. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1146. };
  1147. static struct qcom_icc_node slv_venus_throttle_cfg = {
  1148. .name = "slv_venus_throttle_cfg",
  1149. .id = SDM660_SLAVE_VENUS_THROTTLE_CFG,
  1150. .buswidth = 4,
  1151. .mas_rpm_id = -1,
  1152. .slv_rpm_id = 178,
  1153. .qos.ap_owned = true,
  1154. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1155. };
  1156. static struct qcom_icc_node slv_venus_cfg = {
  1157. .name = "slv_venus_cfg",
  1158. .id = SDM660_SLAVE_VENUS_CFG,
  1159. .buswidth = 4,
  1160. .mas_rpm_id = -1,
  1161. .slv_rpm_id = 10,
  1162. .qos.ap_owned = true,
  1163. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1164. };
  1165. static struct qcom_icc_node slv_mmss_clk_xpu_cfg = {
  1166. .name = "slv_mmss_clk_xpu_cfg",
  1167. .id = SDM660_SLAVE_MMSS_CLK_XPU_CFG,
  1168. .buswidth = 4,
  1169. .mas_rpm_id = -1,
  1170. .slv_rpm_id = 13,
  1171. .qos.ap_owned = true,
  1172. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1173. };
  1174. static struct qcom_icc_node slv_mmss_clk_cfg = {
  1175. .name = "slv_mmss_clk_cfg",
  1176. .id = SDM660_SLAVE_MMSS_CLK_CFG,
  1177. .buswidth = 4,
  1178. .mas_rpm_id = -1,
  1179. .slv_rpm_id = 12,
  1180. .qos.ap_owned = true,
  1181. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1182. };
  1183. static struct qcom_icc_node slv_mnoc_mpu_cfg = {
  1184. .name = "slv_mnoc_mpu_cfg",
  1185. .id = SDM660_SLAVE_MNOC_MPU_CFG,
  1186. .buswidth = 4,
  1187. .mas_rpm_id = -1,
  1188. .slv_rpm_id = 14,
  1189. .qos.ap_owned = true,
  1190. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1191. };
  1192. static struct qcom_icc_node slv_display_cfg = {
  1193. .name = "slv_display_cfg",
  1194. .id = SDM660_SLAVE_DISPLAY_CFG,
  1195. .buswidth = 4,
  1196. .mas_rpm_id = -1,
  1197. .slv_rpm_id = 4,
  1198. .qos.ap_owned = true,
  1199. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1200. };
  1201. static struct qcom_icc_node slv_csi_phy_cfg = {
  1202. .name = "slv_csi_phy_cfg",
  1203. .id = SDM660_SLAVE_CSI_PHY_CFG,
  1204. .buswidth = 4,
  1205. .mas_rpm_id = -1,
  1206. .slv_rpm_id = 224,
  1207. .qos.ap_owned = true,
  1208. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1209. };
  1210. static struct qcom_icc_node slv_display_throttle_cfg = {
  1211. .name = "slv_display_throttle_cfg",
  1212. .id = SDM660_SLAVE_DISPLAY_THROTTLE_CFG,
  1213. .buswidth = 4,
  1214. .mas_rpm_id = -1,
  1215. .slv_rpm_id = 156,
  1216. .qos.ap_owned = true,
  1217. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1218. };
  1219. static struct qcom_icc_node slv_smmu_cfg = {
  1220. .name = "slv_smmu_cfg",
  1221. .id = SDM660_SLAVE_SMMU_CFG,
  1222. .buswidth = 8,
  1223. .mas_rpm_id = -1,
  1224. .slv_rpm_id = 205,
  1225. .qos.ap_owned = true,
  1226. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1227. };
  1228. static const u16 slv_mnoc_bimc_links[] = {
  1229. SDM660_MASTER_MNOC_BIMC
  1230. };
  1231. static struct qcom_icc_node slv_mnoc_bimc = {
  1232. .name = "slv_mnoc_bimc",
  1233. .id = SDM660_SLAVE_MNOC_BIMC,
  1234. .buswidth = 16,
  1235. .mas_rpm_id = -1,
  1236. .slv_rpm_id = 16,
  1237. .qos.ap_owned = true,
  1238. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1239. .num_links = ARRAY_SIZE(slv_mnoc_bimc_links),
  1240. .links = slv_mnoc_bimc_links,
  1241. };
  1242. static struct qcom_icc_node slv_srvc_mnoc = {
  1243. .name = "slv_srvc_mnoc",
  1244. .id = SDM660_SLAVE_SRVC_MNOC,
  1245. .buswidth = 8,
  1246. .mas_rpm_id = -1,
  1247. .slv_rpm_id = 17,
  1248. .qos.ap_owned = true,
  1249. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1250. };
  1251. static struct qcom_icc_node slv_hmss = {
  1252. .name = "slv_hmss",
  1253. .id = SDM660_SLAVE_HMSS,
  1254. .buswidth = 8,
  1255. .mas_rpm_id = -1,
  1256. .slv_rpm_id = 20,
  1257. .qos.ap_owned = true,
  1258. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1259. };
  1260. static struct qcom_icc_node slv_lpass = {
  1261. .name = "slv_lpass",
  1262. .id = SDM660_SLAVE_LPASS,
  1263. .buswidth = 4,
  1264. .mas_rpm_id = -1,
  1265. .slv_rpm_id = 21,
  1266. .qos.ap_owned = true,
  1267. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1268. };
  1269. static struct qcom_icc_node slv_wlan = {
  1270. .name = "slv_wlan",
  1271. .id = SDM660_SLAVE_WLAN,
  1272. .buswidth = 4,
  1273. .mas_rpm_id = -1,
  1274. .slv_rpm_id = 206,
  1275. };
  1276. static struct qcom_icc_node slv_cdsp = {
  1277. .name = "slv_cdsp",
  1278. .id = SDM660_SLAVE_CDSP,
  1279. .buswidth = 4,
  1280. .mas_rpm_id = -1,
  1281. .slv_rpm_id = 221,
  1282. .qos.ap_owned = true,
  1283. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1284. };
  1285. static struct qcom_icc_node slv_ipa = {
  1286. .name = "slv_ipa",
  1287. .id = SDM660_SLAVE_IPA,
  1288. .buswidth = 4,
  1289. .mas_rpm_id = -1,
  1290. .slv_rpm_id = 183,
  1291. .qos.ap_owned = true,
  1292. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1293. };
  1294. static const u16 slv_snoc_bimc_links[] = {
  1295. SDM660_MASTER_SNOC_BIMC
  1296. };
  1297. static struct qcom_icc_node slv_snoc_bimc = {
  1298. .name = "slv_snoc_bimc",
  1299. .id = SDM660_SLAVE_SNOC_BIMC,
  1300. .buswidth = 16,
  1301. .mas_rpm_id = -1,
  1302. .slv_rpm_id = 24,
  1303. .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
  1304. .links = slv_snoc_bimc_links,
  1305. };
  1306. static const u16 slv_snoc_cnoc_links[] = {
  1307. SDM660_MASTER_SNOC_CNOC
  1308. };
  1309. static struct qcom_icc_node slv_snoc_cnoc = {
  1310. .name = "slv_snoc_cnoc",
  1311. .id = SDM660_SLAVE_SNOC_CNOC,
  1312. .buswidth = 8,
  1313. .mas_rpm_id = -1,
  1314. .slv_rpm_id = 25,
  1315. .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
  1316. .links = slv_snoc_cnoc_links,
  1317. };
  1318. static struct qcom_icc_node slv_imem = {
  1319. .name = "slv_imem",
  1320. .id = SDM660_SLAVE_IMEM,
  1321. .buswidth = 8,
  1322. .mas_rpm_id = -1,
  1323. .slv_rpm_id = 26,
  1324. };
  1325. static struct qcom_icc_node slv_pimem = {
  1326. .name = "slv_pimem",
  1327. .id = SDM660_SLAVE_PIMEM,
  1328. .buswidth = 8,
  1329. .mas_rpm_id = -1,
  1330. .slv_rpm_id = 166,
  1331. };
  1332. static struct qcom_icc_node slv_qdss_stm = {
  1333. .name = "slv_qdss_stm",
  1334. .id = SDM660_SLAVE_QDSS_STM,
  1335. .buswidth = 4,
  1336. .mas_rpm_id = -1,
  1337. .slv_rpm_id = 30,
  1338. };
  1339. static struct qcom_icc_node slv_srvc_snoc = {
  1340. .name = "slv_srvc_snoc",
  1341. .id = SDM660_SLAVE_SRVC_SNOC,
  1342. .buswidth = 16,
  1343. .mas_rpm_id = -1,
  1344. .slv_rpm_id = 29,
  1345. };
  1346. static struct qcom_icc_node * const sdm660_a2noc_nodes[] = {
  1347. [MASTER_IPA] = &mas_ipa,
  1348. [MASTER_CNOC_A2NOC] = &mas_cnoc_a2noc,
  1349. [MASTER_SDCC_1] = &mas_sdcc_1,
  1350. [MASTER_SDCC_2] = &mas_sdcc_2,
  1351. [MASTER_BLSP_1] = &mas_blsp_1,
  1352. [MASTER_BLSP_2] = &mas_blsp_2,
  1353. [MASTER_UFS] = &mas_ufs,
  1354. [MASTER_USB_HS] = &mas_usb_hs,
  1355. [MASTER_USB3] = &mas_usb3,
  1356. [MASTER_CRYPTO_C0] = &mas_crypto,
  1357. [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc,
  1358. };
  1359. static const struct regmap_config sdm660_a2noc_regmap_config = {
  1360. .reg_bits = 32,
  1361. .reg_stride = 4,
  1362. .val_bits = 32,
  1363. .max_register = 0x20000,
  1364. .fast_io = true,
  1365. };
  1366. static const struct qcom_icc_desc sdm660_a2noc = {
  1367. .type = QCOM_ICC_NOC,
  1368. .nodes = sdm660_a2noc_nodes,
  1369. .num_nodes = ARRAY_SIZE(sdm660_a2noc_nodes),
  1370. .clocks = bus_a2noc_clocks,
  1371. .num_clocks = ARRAY_SIZE(bus_a2noc_clocks),
  1372. .regmap_cfg = &sdm660_a2noc_regmap_config,
  1373. };
  1374. static struct qcom_icc_node * const sdm660_bimc_nodes[] = {
  1375. [MASTER_GNOC_BIMC] = &mas_gnoc_bimc,
  1376. [MASTER_OXILI] = &mas_oxili,
  1377. [MASTER_MNOC_BIMC] = &mas_mnoc_bimc,
  1378. [MASTER_SNOC_BIMC] = &mas_snoc_bimc,
  1379. [MASTER_PIMEM] = &mas_pimem,
  1380. [SLAVE_EBI] = &slv_ebi,
  1381. [SLAVE_HMSS_L3] = &slv_hmss_l3,
  1382. [SLAVE_BIMC_SNOC] = &slv_bimc_snoc,
  1383. };
  1384. static const struct regmap_config sdm660_bimc_regmap_config = {
  1385. .reg_bits = 32,
  1386. .reg_stride = 4,
  1387. .val_bits = 32,
  1388. .max_register = 0x80000,
  1389. .fast_io = true,
  1390. };
  1391. static const struct qcom_icc_desc sdm660_bimc = {
  1392. .type = QCOM_ICC_BIMC,
  1393. .nodes = sdm660_bimc_nodes,
  1394. .num_nodes = ARRAY_SIZE(sdm660_bimc_nodes),
  1395. .regmap_cfg = &sdm660_bimc_regmap_config,
  1396. };
  1397. static struct qcom_icc_node * const sdm660_cnoc_nodes[] = {
  1398. [MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
  1399. [MASTER_QDSS_DAP] = &mas_qdss_dap,
  1400. [SLAVE_CNOC_A2NOC] = &slv_cnoc_a2noc,
  1401. [SLAVE_MPM] = &slv_mpm,
  1402. [SLAVE_PMIC_ARB] = &slv_pmic_arb,
  1403. [SLAVE_TLMM_NORTH] = &slv_tlmm_north,
  1404. [SLAVE_TCSR] = &slv_tcsr,
  1405. [SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
  1406. [SLAVE_IMEM_CFG] = &slv_imem_cfg,
  1407. [SLAVE_MESSAGE_RAM] = &slv_message_ram,
  1408. [SLAVE_GLM] = &slv_glm,
  1409. [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
  1410. [SLAVE_PRNG] = &slv_prng,
  1411. [SLAVE_SPDM] = &slv_spdm,
  1412. [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
  1413. [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg,
  1414. [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
  1415. [SLAVE_QM_CFG] = &slv_qm_cfg,
  1416. [SLAVE_CLK_CTL] = &slv_clk_ctl,
  1417. [SLAVE_MSS_CFG] = &slv_mss_cfg,
  1418. [SLAVE_TLMM_SOUTH] = &slv_tlmm_south,
  1419. [SLAVE_UFS_CFG] = &slv_ufs_cfg,
  1420. [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg,
  1421. [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg,
  1422. [SLAVE_GPUSS_CFG] = &slv_gpuss_cfg,
  1423. [SLAVE_AHB2PHY] = &slv_ahb2phy,
  1424. [SLAVE_BLSP_1] = &slv_blsp_1,
  1425. [SLAVE_SDCC_1] = &slv_sdcc_1,
  1426. [SLAVE_SDCC_2] = &slv_sdcc_2,
  1427. [SLAVE_TLMM_CENTER] = &slv_tlmm_center,
  1428. [SLAVE_BLSP_2] = &slv_blsp_2,
  1429. [SLAVE_PDM] = &slv_pdm,
  1430. [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg,
  1431. [SLAVE_USB_HS] = &slv_usb_hs,
  1432. [SLAVE_USB3_0] = &slv_usb3_0,
  1433. [SLAVE_SRVC_CNOC] = &slv_srvc_cnoc,
  1434. };
  1435. static const struct regmap_config sdm660_cnoc_regmap_config = {
  1436. .reg_bits = 32,
  1437. .reg_stride = 4,
  1438. .val_bits = 32,
  1439. .max_register = 0x10000,
  1440. .fast_io = true,
  1441. };
  1442. static const struct qcom_icc_desc sdm660_cnoc = {
  1443. .type = QCOM_ICC_NOC,
  1444. .nodes = sdm660_cnoc_nodes,
  1445. .num_nodes = ARRAY_SIZE(sdm660_cnoc_nodes),
  1446. .regmap_cfg = &sdm660_cnoc_regmap_config,
  1447. };
  1448. static struct qcom_icc_node * const sdm660_gnoc_nodes[] = {
  1449. [MASTER_APSS_PROC] = &mas_apss_proc,
  1450. [SLAVE_GNOC_BIMC] = &slv_gnoc_bimc,
  1451. [SLAVE_GNOC_SNOC] = &slv_gnoc_snoc,
  1452. };
  1453. static const struct regmap_config sdm660_gnoc_regmap_config = {
  1454. .reg_bits = 32,
  1455. .reg_stride = 4,
  1456. .val_bits = 32,
  1457. .max_register = 0xe000,
  1458. .fast_io = true,
  1459. };
  1460. static const struct qcom_icc_desc sdm660_gnoc = {
  1461. .type = QCOM_ICC_NOC,
  1462. .nodes = sdm660_gnoc_nodes,
  1463. .num_nodes = ARRAY_SIZE(sdm660_gnoc_nodes),
  1464. .regmap_cfg = &sdm660_gnoc_regmap_config,
  1465. };
  1466. static struct qcom_icc_node * const sdm660_mnoc_nodes[] = {
  1467. [MASTER_CPP] = &mas_cpp,
  1468. [MASTER_JPEG] = &mas_jpeg,
  1469. [MASTER_MDP_P0] = &mas_mdp_p0,
  1470. [MASTER_MDP_P1] = &mas_mdp_p1,
  1471. [MASTER_VENUS] = &mas_venus,
  1472. [MASTER_VFE] = &mas_vfe,
  1473. [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg,
  1474. [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg,
  1475. [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
  1476. [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg,
  1477. [SLAVE_MISC_CFG] = &slv_misc_cfg,
  1478. [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
  1479. [SLAVE_VENUS_CFG] = &slv_venus_cfg,
  1480. [SLAVE_MMSS_CLK_XPU_CFG] = &slv_mmss_clk_xpu_cfg,
  1481. [SLAVE_MMSS_CLK_CFG] = &slv_mmss_clk_cfg,
  1482. [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg,
  1483. [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
  1484. [SLAVE_CSI_PHY_CFG] = &slv_csi_phy_cfg,
  1485. [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
  1486. [SLAVE_SMMU_CFG] = &slv_smmu_cfg,
  1487. [SLAVE_SRVC_MNOC] = &slv_srvc_mnoc,
  1488. [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc,
  1489. };
  1490. static const struct regmap_config sdm660_mnoc_regmap_config = {
  1491. .reg_bits = 32,
  1492. .reg_stride = 4,
  1493. .val_bits = 32,
  1494. .max_register = 0x10000,
  1495. .fast_io = true,
  1496. };
  1497. static const struct qcom_icc_desc sdm660_mnoc = {
  1498. .type = QCOM_ICC_NOC,
  1499. .nodes = sdm660_mnoc_nodes,
  1500. .num_nodes = ARRAY_SIZE(sdm660_mnoc_nodes),
  1501. .clocks = bus_mm_clocks,
  1502. .num_clocks = ARRAY_SIZE(bus_mm_clocks),
  1503. .regmap_cfg = &sdm660_mnoc_regmap_config,
  1504. };
  1505. static struct qcom_icc_node * const sdm660_snoc_nodes[] = {
  1506. [MASTER_QDSS_ETR] = &mas_qdss_etr,
  1507. [MASTER_QDSS_BAM] = &mas_qdss_bam,
  1508. [MASTER_SNOC_CFG] = &mas_snoc_cfg,
  1509. [MASTER_BIMC_SNOC] = &mas_bimc_snoc,
  1510. [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc,
  1511. [MASTER_GNOC_SNOC] = &mas_gnoc_snoc,
  1512. [SLAVE_HMSS] = &slv_hmss,
  1513. [SLAVE_LPASS] = &slv_lpass,
  1514. [SLAVE_WLAN] = &slv_wlan,
  1515. [SLAVE_CDSP] = &slv_cdsp,
  1516. [SLAVE_IPA] = &slv_ipa,
  1517. [SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
  1518. [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
  1519. [SLAVE_IMEM] = &slv_imem,
  1520. [SLAVE_PIMEM] = &slv_pimem,
  1521. [SLAVE_QDSS_STM] = &slv_qdss_stm,
  1522. [SLAVE_SRVC_SNOC] = &slv_srvc_snoc,
  1523. };
  1524. static const struct regmap_config sdm660_snoc_regmap_config = {
  1525. .reg_bits = 32,
  1526. .reg_stride = 4,
  1527. .val_bits = 32,
  1528. .max_register = 0x20000,
  1529. .fast_io = true,
  1530. };
  1531. static const struct qcom_icc_desc sdm660_snoc = {
  1532. .type = QCOM_ICC_NOC,
  1533. .nodes = sdm660_snoc_nodes,
  1534. .num_nodes = ARRAY_SIZE(sdm660_snoc_nodes),
  1535. .regmap_cfg = &sdm660_snoc_regmap_config,
  1536. };
  1537. static const struct of_device_id sdm660_noc_of_match[] = {
  1538. { .compatible = "qcom,sdm660-a2noc", .data = &sdm660_a2noc },
  1539. { .compatible = "qcom,sdm660-bimc", .data = &sdm660_bimc },
  1540. { .compatible = "qcom,sdm660-cnoc", .data = &sdm660_cnoc },
  1541. { .compatible = "qcom,sdm660-gnoc", .data = &sdm660_gnoc },
  1542. { .compatible = "qcom,sdm660-mnoc", .data = &sdm660_mnoc },
  1543. { .compatible = "qcom,sdm660-snoc", .data = &sdm660_snoc },
  1544. { },
  1545. };
  1546. MODULE_DEVICE_TABLE(of, sdm660_noc_of_match);
  1547. static struct platform_driver sdm660_noc_driver = {
  1548. .probe = qnoc_probe,
  1549. .remove = qnoc_remove,
  1550. .driver = {
  1551. .name = "qnoc-sdm660",
  1552. .of_match_table = sdm660_noc_of_match,
  1553. },
  1554. };
  1555. module_platform_driver(sdm660_noc_driver);
  1556. MODULE_DESCRIPTION("Qualcomm sdm660 NoC driver");
  1557. MODULE_LICENSE("GPL v2");