volcano.c 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2023-2024, Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. */
  6. #include <dt-bindings/interconnect/qcom,volcano.h>
  7. #include <linux/device.h>
  8. #include <linux/interconnect.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 "icc-rpmh.h"
  16. #include "qnoc-qos.h"
  17. enum {
  18. VOTER_IDX_HLOS,
  19. VOTER_IDX_DISP,
  20. };
  21. static const struct regmap_config icc_regmap_config = {
  22. .reg_bits = 32,
  23. .reg_stride = 4,
  24. .val_bits = 32,
  25. };
  26. static struct qcom_icc_qosbox qhm_qup1_qos = {
  27. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  28. .num_ports = 1,
  29. .offsets = { 0xc000 },
  30. .config = &(struct qos_config) {
  31. .prio = 2,
  32. .urg_fwd = 0,
  33. .prio_fwd_disable = 1,
  34. },
  35. };
  36. static struct qcom_icc_node qhm_qup1 = {
  37. .name = "qhm_qup1",
  38. .id = MASTER_QUP_1,
  39. .channels = 1,
  40. .buswidth = 4,
  41. .noc_ops = &qcom_qnoc4_ops,
  42. .qosbox = &qhm_qup1_qos,
  43. .num_links = 1,
  44. .links = { SLAVE_A1NOC_SNOC },
  45. };
  46. static struct qcom_icc_qosbox xm_ufs_mem_qos = {
  47. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  48. .num_ports = 1,
  49. .offsets = { 0xf200 },
  50. .config = &(struct qos_config) {
  51. .prio = 2,
  52. .urg_fwd = 0,
  53. .prio_fwd_disable = 1,
  54. },
  55. };
  56. static struct qcom_icc_node xm_ufs_mem = {
  57. .name = "xm_ufs_mem",
  58. .id = MASTER_UFS_MEM,
  59. .channels = 1,
  60. .buswidth = 8,
  61. .noc_ops = &qcom_qnoc4_ops,
  62. .qosbox = &xm_ufs_mem_qos,
  63. .num_links = 1,
  64. .links = { SLAVE_A1NOC_SNOC },
  65. };
  66. static struct qcom_icc_qosbox xm_usb3_0_qos = {
  67. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  68. .num_ports = 1,
  69. .offsets = { 0x10000 },
  70. .config = &(struct qos_config) {
  71. .prio = 2,
  72. .urg_fwd = 0,
  73. .prio_fwd_disable = 1,
  74. },
  75. };
  76. static struct qcom_icc_node xm_usb3_0 = {
  77. .name = "xm_usb3_0",
  78. .id = MASTER_USB3_0,
  79. .channels = 1,
  80. .buswidth = 8,
  81. .noc_ops = &qcom_qnoc4_ops,
  82. .qosbox = &xm_usb3_0_qos,
  83. .num_links = 1,
  84. .links = { SLAVE_A1NOC_SNOC },
  85. };
  86. static struct qcom_icc_qosbox qhm_qdss_bam_qos = {
  87. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  88. .num_ports = 1,
  89. .offsets = { 0x14000 },
  90. .config = &(struct qos_config) {
  91. .prio = 2,
  92. .urg_fwd = 0,
  93. .prio_fwd_disable = 1,
  94. },
  95. };
  96. static struct qcom_icc_node qhm_qdss_bam = {
  97. .name = "qhm_qdss_bam",
  98. .id = MASTER_QDSS_BAM,
  99. .channels = 1,
  100. .buswidth = 4,
  101. .noc_ops = &qcom_qnoc4_ops,
  102. .qosbox = &qhm_qdss_bam_qos,
  103. .num_links = 1,
  104. .links = { SLAVE_A2NOC_SNOC },
  105. };
  106. static struct qcom_icc_qosbox qhm_qspi_qos = {
  107. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  108. .num_ports = 1,
  109. .offsets = { 0x12000 },
  110. .config = &(struct qos_config) {
  111. .prio = 2,
  112. .urg_fwd = 0,
  113. .prio_fwd_disable = 1,
  114. },
  115. };
  116. static struct qcom_icc_node qhm_qspi = {
  117. .name = "qhm_qspi",
  118. .id = MASTER_QSPI_0,
  119. .channels = 1,
  120. .buswidth = 4,
  121. .noc_ops = &qcom_qnoc4_ops,
  122. .qosbox = &qhm_qspi_qos,
  123. .num_links = 1,
  124. .links = { SLAVE_A2NOC_SNOC },
  125. };
  126. static struct qcom_icc_qosbox qhm_qup0_qos = {
  127. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  128. .num_ports = 1,
  129. .offsets = { 0x13000 },
  130. .config = &(struct qos_config) {
  131. .prio = 2,
  132. .urg_fwd = 0,
  133. .prio_fwd_disable = 1,
  134. },
  135. };
  136. static struct qcom_icc_node qhm_qup0 = {
  137. .name = "qhm_qup0",
  138. .id = MASTER_QUP_0,
  139. .channels = 1,
  140. .buswidth = 4,
  141. .noc_ops = &qcom_qnoc4_ops,
  142. .qosbox = &qhm_qup0_qos,
  143. .num_links = 1,
  144. .links = { SLAVE_A2NOC_SNOC },
  145. };
  146. static struct qcom_icc_qosbox qxm_crypto_qos = {
  147. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  148. .num_ports = 1,
  149. .offsets = { 0x15000 },
  150. .config = &(struct qos_config) {
  151. .prio = 2,
  152. .urg_fwd = 0,
  153. .prio_fwd_disable = 1,
  154. },
  155. };
  156. static struct qcom_icc_node qxm_crypto = {
  157. .name = "qxm_crypto",
  158. .id = MASTER_CRYPTO,
  159. .channels = 1,
  160. .buswidth = 8,
  161. .noc_ops = &qcom_qnoc4_ops,
  162. .qosbox = &qxm_crypto_qos,
  163. .num_links = 1,
  164. .links = { SLAVE_A2NOC_SNOC },
  165. };
  166. static struct qcom_icc_qosbox qxm_ipa_qos = {
  167. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  168. .num_ports = 1,
  169. .offsets = { 0x16000 },
  170. .config = &(struct qos_config) {
  171. .prio = 2,
  172. .urg_fwd = 0,
  173. .prio_fwd_disable = 1,
  174. },
  175. };
  176. static struct qcom_icc_node qxm_ipa = {
  177. .name = "qxm_ipa",
  178. .id = MASTER_IPA,
  179. .channels = 1,
  180. .buswidth = 8,
  181. .noc_ops = &qcom_qnoc4_ops,
  182. .qosbox = &qxm_ipa_qos,
  183. .num_links = 1,
  184. .links = { SLAVE_A2NOC_SNOC },
  185. };
  186. static struct qcom_icc_qosbox xm_qdss_etr_0_qos = {
  187. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  188. .num_ports = 1,
  189. .offsets = { 0x17000 },
  190. .config = &(struct qos_config) {
  191. .prio = 2,
  192. .urg_fwd = 0,
  193. .prio_fwd_disable = 1,
  194. },
  195. };
  196. static struct qcom_icc_node xm_qdss_etr_0 = {
  197. .name = "xm_qdss_etr_0",
  198. .id = MASTER_QDSS_ETR,
  199. .channels = 1,
  200. .buswidth = 8,
  201. .noc_ops = &qcom_qnoc4_ops,
  202. .qosbox = &xm_qdss_etr_0_qos,
  203. .num_links = 1,
  204. .links = { SLAVE_A2NOC_SNOC },
  205. };
  206. static struct qcom_icc_qosbox xm_qdss_etr_1_qos = {
  207. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  208. .num_ports = 1,
  209. .offsets = { 0x18000 },
  210. .config = &(struct qos_config) {
  211. .prio = 2,
  212. .urg_fwd = 0,
  213. .prio_fwd_disable = 1,
  214. },
  215. };
  216. static struct qcom_icc_node xm_qdss_etr_1 = {
  217. .name = "xm_qdss_etr_1",
  218. .id = MASTER_QDSS_ETR_1,
  219. .channels = 1,
  220. .buswidth = 8,
  221. .noc_ops = &qcom_qnoc4_ops,
  222. .qosbox = &xm_qdss_etr_1_qos,
  223. .num_links = 1,
  224. .links = { SLAVE_A2NOC_SNOC },
  225. };
  226. static struct qcom_icc_qosbox xm_sdc1_qos = {
  227. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  228. .num_ports = 1,
  229. .offsets = { 0x1a000 },
  230. .config = &(struct qos_config) {
  231. .prio = 2,
  232. .urg_fwd = 0,
  233. .prio_fwd_disable = 1,
  234. },
  235. };
  236. static struct qcom_icc_node xm_sdc1 = {
  237. .name = "xm_sdc1",
  238. .id = MASTER_SDCC_1,
  239. .channels = 1,
  240. .buswidth = 8,
  241. .noc_ops = &qcom_qnoc4_ops,
  242. .qosbox = &xm_sdc1_qos,
  243. .num_links = 1,
  244. .links = { SLAVE_A2NOC_SNOC },
  245. };
  246. static struct qcom_icc_qosbox xm_sdc2_qos = {
  247. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  248. .num_ports = 1,
  249. .offsets = { 0x19000 },
  250. .config = &(struct qos_config) {
  251. .prio = 2,
  252. .urg_fwd = 0,
  253. .prio_fwd_disable = 1,
  254. },
  255. };
  256. static struct qcom_icc_node xm_sdc2 = {
  257. .name = "xm_sdc2",
  258. .id = MASTER_SDCC_2,
  259. .channels = 1,
  260. .buswidth = 8,
  261. .noc_ops = &qcom_qnoc4_ops,
  262. .qosbox = &xm_sdc2_qos,
  263. .num_links = 1,
  264. .links = { SLAVE_A2NOC_SNOC },
  265. };
  266. static struct qcom_icc_node qup0_core_master = {
  267. .name = "qup0_core_master",
  268. .id = MASTER_QUP_CORE_0,
  269. .channels = 1,
  270. .buswidth = 4,
  271. .noc_ops = &qcom_qnoc4_ops,
  272. .num_links = 1,
  273. .links = { SLAVE_QUP_CORE_0 },
  274. };
  275. static struct qcom_icc_node qup1_core_master = {
  276. .name = "qup1_core_master",
  277. .id = MASTER_QUP_CORE_1,
  278. .channels = 1,
  279. .buswidth = 4,
  280. .noc_ops = &qcom_qnoc4_ops,
  281. .num_links = 1,
  282. .links = { SLAVE_QUP_CORE_1 },
  283. };
  284. static struct qcom_icc_node qsm_cfg = {
  285. .name = "qsm_cfg",
  286. .id = MASTER_CNOC_CFG,
  287. .channels = 1,
  288. .buswidth = 4,
  289. .noc_ops = &qcom_qnoc4_ops,
  290. .num_links = 35,
  291. .links = { SLAVE_AHB2PHY_SOUTH, SLAVE_AHB2PHY_NORTH,
  292. SLAVE_CAMERA_CFG, SLAVE_CLK_CTL,
  293. SLAVE_RBCPR_CX_CFG, SLAVE_RBCPR_MXA_CFG,
  294. SLAVE_CRYPTO_0_CFG, SLAVE_CX_RDPM,
  295. SLAVE_GFX3D_CFG, SLAVE_IMEM_CFG,
  296. SLAVE_CNOC_MSS, SLAVE_MX_2_RDPM,
  297. SLAVE_MX_RDPM, SLAVE_PDM,
  298. SLAVE_QDSS_CFG, SLAVE_QSPI_0,
  299. SLAVE_QUP_0, SLAVE_QUP_1,
  300. SLAVE_SDC1, SLAVE_SDCC_2,
  301. SLAVE_TCSR, SLAVE_TLMM,
  302. SLAVE_UFS_MEM_CFG, SLAVE_USB3_0,
  303. SLAVE_VENUS_CFG, SLAVE_VSENSE_CTRL_CFG,
  304. SLAVE_WLAN, SLAVE_CNOC_MNOC_HF_CFG,
  305. SLAVE_CNOC_MNOC_SF_CFG, SLAVE_NSP_QTB_CFG,
  306. SLAVE_PCIE_ANOC_CFG, SLAVE_WLAN_Q6_THROTTLE_CFG,
  307. SLAVE_SERVICE_CNOC_CFG, SLAVE_QDSS_STM,
  308. SLAVE_TCU },
  309. };
  310. static struct qcom_icc_node qnm_gemnoc_cnoc = {
  311. .name = "qnm_gemnoc_cnoc",
  312. .id = MASTER_GEM_NOC_CNOC,
  313. .channels = 1,
  314. .buswidth = 16,
  315. .noc_ops = &qcom_qnoc4_ops,
  316. .num_links = 14,
  317. .links = { SLAVE_AOSS, SLAVE_DISPLAY_CFG,
  318. SLAVE_IPA_CFG, SLAVE_IPC_ROUTER_CFG,
  319. SLAVE_PCIE_0_CFG, SLAVE_PCIE_1_CFG,
  320. SLAVE_PRNG, SLAVE_TME_CFG,
  321. SLAVE_APPSS, SLAVE_CNOC_CFG,
  322. SLAVE_DDRSS_CFG, SLAVE_IMEM,
  323. SLAVE_PIMEM, SLAVE_SERVICE_CNOC },
  324. };
  325. static struct qcom_icc_node qnm_gemnoc_pcie = {
  326. .name = "qnm_gemnoc_pcie",
  327. .id = MASTER_GEM_NOC_PCIE_SNOC,
  328. .channels = 1,
  329. .buswidth = 8,
  330. .noc_ops = &qcom_qnoc4_ops,
  331. .num_links = 2,
  332. .links = { SLAVE_PCIE_0, SLAVE_PCIE_1 },
  333. };
  334. static struct qcom_icc_qosbox alm_gpu_tcu_qos = {
  335. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  336. .num_ports = 1,
  337. .offsets = { 0xf1000 },
  338. .config = &(struct qos_config) {
  339. .prio = 1,
  340. .urg_fwd = 0,
  341. .prio_fwd_disable = 1,
  342. },
  343. };
  344. static struct qcom_icc_node alm_gpu_tcu = {
  345. .name = "alm_gpu_tcu",
  346. .id = MASTER_GPU_TCU,
  347. .channels = 1,
  348. .buswidth = 8,
  349. .noc_ops = &qcom_qnoc4_ops,
  350. .qosbox = &alm_gpu_tcu_qos,
  351. .num_links = 2,
  352. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  353. };
  354. static struct qcom_icc_qosbox alm_sys_tcu_qos = {
  355. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  356. .num_ports = 1,
  357. .offsets = { 0xf3000 },
  358. .config = &(struct qos_config) {
  359. .prio = 6,
  360. .urg_fwd = 0,
  361. .prio_fwd_disable = 1,
  362. },
  363. };
  364. static struct qcom_icc_node alm_sys_tcu = {
  365. .name = "alm_sys_tcu",
  366. .id = MASTER_SYS_TCU,
  367. .channels = 1,
  368. .buswidth = 8,
  369. .noc_ops = &qcom_qnoc4_ops,
  370. .qosbox = &alm_sys_tcu_qos,
  371. .num_links = 2,
  372. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  373. };
  374. static struct qcom_icc_node chm_apps = {
  375. .name = "chm_apps",
  376. .id = MASTER_APPSS_PROC,
  377. .channels = 3,
  378. .buswidth = 32,
  379. .noc_ops = &qcom_qnoc4_ops,
  380. .num_links = 3,
  381. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  382. SLAVE_MEM_NOC_PCIE_SNOC },
  383. };
  384. static struct qcom_icc_qosbox qnm_gpu_qos = {
  385. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  386. .num_ports = 2,
  387. .offsets = { 0x31000, 0x71000 },
  388. .config = &(struct qos_config) {
  389. .prio = 0,
  390. .urg_fwd = 0,
  391. .prio_fwd_disable = 1,
  392. },
  393. };
  394. static struct qcom_icc_node qnm_gpu = {
  395. .name = "qnm_gpu",
  396. .id = MASTER_GFX3D,
  397. .channels = 2,
  398. .buswidth = 32,
  399. .noc_ops = &qcom_qnoc4_ops,
  400. .qosbox = &qnm_gpu_qos,
  401. .num_links = 2,
  402. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  403. };
  404. static struct qcom_icc_qosbox qnm_lpass_gemnoc_qos = {
  405. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  406. .num_ports = 1,
  407. .offsets = { 0xf5000 },
  408. .config = &(struct qos_config) {
  409. .prio = 0,
  410. .urg_fwd = 1,
  411. .prio_fwd_disable = 0,
  412. },
  413. };
  414. static struct qcom_icc_node qnm_lpass_gemnoc = {
  415. .name = "qnm_lpass_gemnoc",
  416. .id = MASTER_LPASS_GEM_NOC,
  417. .channels = 1,
  418. .buswidth = 16,
  419. .noc_ops = &qcom_qnoc4_ops,
  420. .qosbox = &qnm_lpass_gemnoc_qos,
  421. .num_links = 3,
  422. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  423. SLAVE_MEM_NOC_PCIE_SNOC },
  424. };
  425. static struct qcom_icc_node qnm_mdsp = {
  426. .name = "qnm_mdsp",
  427. .id = MASTER_MSS_PROC,
  428. .channels = 1,
  429. .buswidth = 16,
  430. .noc_ops = &qcom_qnoc4_ops,
  431. .num_links = 3,
  432. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  433. SLAVE_MEM_NOC_PCIE_SNOC },
  434. };
  435. static struct qcom_icc_qosbox qnm_mnoc_hf_qos = {
  436. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  437. .num_ports = 2,
  438. .offsets = { 0x33000, 0x73000 },
  439. .config = &(struct qos_config) {
  440. .prio = 0,
  441. .urg_fwd = 1,
  442. .prio_fwd_disable = 0,
  443. },
  444. };
  445. static struct qcom_icc_node qnm_mnoc_hf = {
  446. .name = "qnm_mnoc_hf",
  447. .id = MASTER_MNOC_HF_MEM_NOC,
  448. .channels = 2,
  449. .buswidth = 32,
  450. .noc_ops = &qcom_qnoc4_ops,
  451. .qosbox = &qnm_mnoc_hf_qos,
  452. .num_links = 2,
  453. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  454. };
  455. static struct qcom_icc_qosbox qnm_mnoc_sf_qos = {
  456. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  457. .num_ports = 2,
  458. .offsets = { 0x35000, 0x75000 },
  459. .config = &(struct qos_config) {
  460. .prio = 0,
  461. .urg_fwd = 1,
  462. .prio_fwd_disable = 0,
  463. },
  464. };
  465. static struct qcom_icc_node qnm_mnoc_sf = {
  466. .name = "qnm_mnoc_sf",
  467. .id = MASTER_MNOC_SF_MEM_NOC,
  468. .channels = 2,
  469. .buswidth = 32,
  470. .noc_ops = &qcom_qnoc4_ops,
  471. .qosbox = &qnm_mnoc_sf_qos,
  472. .num_links = 2,
  473. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  474. };
  475. static struct qcom_icc_qosbox qnm_nsp_gemnoc_qos = {
  476. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  477. .num_ports = 2,
  478. .offsets = { 0x37000, 0x77000 },
  479. .config = &(struct qos_config) {
  480. .prio = 0,
  481. .urg_fwd = 0,
  482. .prio_fwd_disable = 1,
  483. },
  484. };
  485. static struct qcom_icc_node qnm_nsp_gemnoc = {
  486. .name = "qnm_nsp_gemnoc",
  487. .id = MASTER_COMPUTE_NOC,
  488. .channels = 2,
  489. .buswidth = 32,
  490. .noc_ops = &qcom_qnoc4_ops,
  491. .qosbox = &qnm_nsp_gemnoc_qos,
  492. .num_links = 3,
  493. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  494. SLAVE_MEM_NOC_PCIE_SNOC },
  495. };
  496. static struct qcom_icc_qosbox qnm_pcie_qos = {
  497. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  498. .num_ports = 1,
  499. .offsets = { 0xf7000 },
  500. .config = &(struct qos_config) {
  501. .prio = 2,
  502. .urg_fwd = 1,
  503. .prio_fwd_disable = 0,
  504. },
  505. };
  506. static struct qcom_icc_node qnm_pcie = {
  507. .name = "qnm_pcie",
  508. .id = MASTER_ANOC_PCIE_GEM_NOC,
  509. .channels = 1,
  510. .buswidth = 8,
  511. .noc_ops = &qcom_qnoc4_ops,
  512. .qosbox = &qnm_pcie_qos,
  513. .num_links = 2,
  514. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC },
  515. };
  516. static struct qcom_icc_qosbox qnm_snoc_gc_qos = {
  517. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  518. .num_ports = 1,
  519. .offsets = { 0xf9000 },
  520. .config = &(struct qos_config) {
  521. .prio = 0,
  522. .urg_fwd = 1,
  523. .prio_fwd_disable = 0,
  524. },
  525. };
  526. static struct qcom_icc_node qnm_snoc_gc = {
  527. .name = "qnm_snoc_gc",
  528. .id = MASTER_SNOC_GC_MEM_NOC,
  529. .channels = 1,
  530. .buswidth = 8,
  531. .noc_ops = &qcom_qnoc4_ops,
  532. .qosbox = &qnm_snoc_gc_qos,
  533. .num_links = 1,
  534. .links = { SLAVE_LLCC },
  535. };
  536. static struct qcom_icc_qosbox qnm_snoc_sf_qos = {
  537. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  538. .num_ports = 1,
  539. .offsets = { 0xfb000 },
  540. .config = &(struct qos_config) {
  541. .prio = 0,
  542. .urg_fwd = 1,
  543. .prio_fwd_disable = 0,
  544. },
  545. };
  546. static struct qcom_icc_node qnm_snoc_sf = {
  547. .name = "qnm_snoc_sf",
  548. .id = MASTER_SNOC_SF_MEM_NOC,
  549. .channels = 1,
  550. .buswidth = 16,
  551. .noc_ops = &qcom_qnoc4_ops,
  552. .qosbox = &qnm_snoc_sf_qos,
  553. .num_links = 3,
  554. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  555. SLAVE_MEM_NOC_PCIE_SNOC },
  556. };
  557. static struct qcom_icc_node qxm_wlan_q6 = {
  558. .name = "qxm_wlan_q6",
  559. .id = MASTER_WLAN_Q6,
  560. .channels = 1,
  561. .buswidth = 8,
  562. .noc_ops = &qcom_qnoc4_ops,
  563. .num_links = 3,
  564. .links = { SLAVE_GEM_NOC_CNOC, SLAVE_LLCC,
  565. SLAVE_MEM_NOC_PCIE_SNOC },
  566. };
  567. static struct qcom_icc_node qxm_lpass_dsp = {
  568. .name = "qxm_lpass_dsp",
  569. .id = MASTER_LPASS_PROC,
  570. .channels = 1,
  571. .buswidth = 8,
  572. .noc_ops = &qcom_qnoc4_ops,
  573. .num_links = 1,
  574. .links = { SLAVE_LPASS_GEM_NOC },
  575. };
  576. static struct qcom_icc_node llcc_mc = {
  577. .name = "llcc_mc",
  578. .id = MASTER_LLCC,
  579. .channels = 2,
  580. .buswidth = 4,
  581. .noc_ops = &qcom_qnoc4_ops,
  582. .num_links = 1,
  583. .links = { SLAVE_EBI1 },
  584. };
  585. static struct qcom_icc_qosbox qnm_camnoc_hf_qos = {
  586. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  587. .num_ports = 2,
  588. .offsets = { 0xa8000, 0xa9000 },
  589. .config = &(struct qos_config) {
  590. .prio = 0,
  591. .urg_fwd = 1,
  592. .prio_fwd_disable = 0,
  593. },
  594. };
  595. static struct qcom_icc_node qnm_camnoc_hf = {
  596. .name = "qnm_camnoc_hf",
  597. .id = MASTER_CAMNOC_HF,
  598. .channels = 2,
  599. .buswidth = 32,
  600. .noc_ops = &qcom_qnoc4_ops,
  601. .qosbox = &qnm_camnoc_hf_qos,
  602. .num_links = 1,
  603. .links = { SLAVE_MNOC_HF_MEM_NOC },
  604. };
  605. static struct qcom_icc_qosbox qnm_camnoc_icp_qos = {
  606. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  607. .num_ports = 1,
  608. .offsets = { 0x2a000 },
  609. .config = &(struct qos_config) {
  610. .prio = 5,
  611. .urg_fwd = 0,
  612. .prio_fwd_disable = 1,
  613. },
  614. };
  615. static struct qcom_icc_node qnm_camnoc_icp = {
  616. .name = "qnm_camnoc_icp",
  617. .id = MASTER_CAMNOC_ICP,
  618. .channels = 1,
  619. .buswidth = 8,
  620. .noc_ops = &qcom_qnoc4_ops,
  621. .qosbox = &qnm_camnoc_icp_qos,
  622. .num_links = 1,
  623. .links = { SLAVE_MNOC_SF_MEM_NOC },
  624. };
  625. static struct qcom_icc_qosbox qnm_camnoc_sf_qos = {
  626. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  627. .num_ports = 2,
  628. .offsets = { 0x2b000, 0x2c000 },
  629. .config = &(struct qos_config) {
  630. .prio = 0,
  631. .urg_fwd = 1,
  632. .prio_fwd_disable = 0,
  633. },
  634. };
  635. static struct qcom_icc_node qnm_camnoc_sf = {
  636. .name = "qnm_camnoc_sf",
  637. .id = MASTER_CAMNOC_SF,
  638. .channels = 2,
  639. .buswidth = 32,
  640. .noc_ops = &qcom_qnoc4_ops,
  641. .qosbox = &qnm_camnoc_sf_qos,
  642. .num_links = 1,
  643. .links = { SLAVE_MNOC_SF_MEM_NOC },
  644. };
  645. static struct qcom_icc_qosbox qnm_mdp_qos = {
  646. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  647. .num_ports = 1,
  648. .offsets = { 0xad000 },
  649. .config = &(struct qos_config) {
  650. .prio = 0,
  651. .urg_fwd = 1,
  652. .prio_fwd_disable = 0,
  653. },
  654. };
  655. static struct qcom_icc_node qnm_mdp = {
  656. .name = "qnm_mdp",
  657. .id = MASTER_MDP,
  658. .channels = 1,
  659. .buswidth = 32,
  660. .noc_ops = &qcom_qnoc4_ops,
  661. .qosbox = &qnm_mdp_qos,
  662. .num_links = 1,
  663. .links = { SLAVE_MNOC_HF_MEM_NOC },
  664. };
  665. static struct qcom_icc_qosbox qnm_video_qos = {
  666. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  667. .num_ports = 1,
  668. .offsets = { 0x30000 },
  669. .config = &(struct qos_config) {
  670. .prio = 0,
  671. .urg_fwd = 1,
  672. .prio_fwd_disable = 0,
  673. },
  674. };
  675. static struct qcom_icc_node qnm_video = {
  676. .name = "qnm_video",
  677. .id = MASTER_VIDEO,
  678. .channels = 1,
  679. .buswidth = 32,
  680. .noc_ops = &qcom_qnoc4_ops,
  681. .qosbox = &qnm_video_qos,
  682. .num_links = 1,
  683. .links = { SLAVE_MNOC_SF_MEM_NOC },
  684. };
  685. static struct qcom_icc_node qsm_hf_mnoc_cfg = {
  686. .name = "qsm_hf_mnoc_cfg",
  687. .id = MASTER_CNOC_MNOC_HF_CFG,
  688. .channels = 1,
  689. .buswidth = 4,
  690. .noc_ops = &qcom_qnoc4_ops,
  691. .num_links = 1,
  692. .links = { SLAVE_SERVICE_MNOC_HF },
  693. };
  694. static struct qcom_icc_node qsm_sf_mnoc_cfg = {
  695. .name = "qsm_sf_mnoc_cfg",
  696. .id = MASTER_CNOC_MNOC_SF_CFG,
  697. .channels = 1,
  698. .buswidth = 4,
  699. .noc_ops = &qcom_qnoc4_ops,
  700. .num_links = 1,
  701. .links = { SLAVE_SERVICE_MNOC_SF },
  702. };
  703. static struct qcom_icc_node qxm_nsp = {
  704. .name = "qxm_nsp",
  705. .id = MASTER_CDSP_PROC,
  706. .channels = 2,
  707. .buswidth = 32,
  708. .noc_ops = &qcom_qnoc4_ops,
  709. .num_links = 1,
  710. .links = { SLAVE_CDSP_MEM_NOC },
  711. };
  712. static struct qcom_icc_node qsm_pcie_anoc_cfg = {
  713. .name = "qsm_pcie_anoc_cfg",
  714. .id = MASTER_PCIE_ANOC_CFG,
  715. .channels = 1,
  716. .buswidth = 4,
  717. .noc_ops = &qcom_qnoc4_ops,
  718. .num_links = 1,
  719. .links = { SLAVE_SERVICE_PCIE_ANOC },
  720. };
  721. static struct qcom_icc_qosbox xm_pcie3_0_qos = {
  722. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  723. .num_ports = 1,
  724. .offsets = { 0xb000 },
  725. .config = &(struct qos_config) {
  726. .prio = 2,
  727. .urg_fwd = 0,
  728. .prio_fwd_disable = 1,
  729. },
  730. };
  731. static struct qcom_icc_node xm_pcie3_0 = {
  732. .name = "xm_pcie3_0",
  733. .id = MASTER_PCIE_0,
  734. .channels = 1,
  735. .buswidth = 8,
  736. .noc_ops = &qcom_qnoc4_ops,
  737. .qosbox = &xm_pcie3_0_qos,
  738. .num_links = 1,
  739. .links = { SLAVE_ANOC_PCIE_GEM_NOC },
  740. };
  741. static struct qcom_icc_qosbox xm_pcie3_1_qos = {
  742. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  743. .num_ports = 1,
  744. .offsets = { 0xc000 },
  745. .config = &(struct qos_config) {
  746. .prio = 2,
  747. .urg_fwd = 0,
  748. .prio_fwd_disable = 1,
  749. },
  750. };
  751. static struct qcom_icc_node xm_pcie3_1 = {
  752. .name = "xm_pcie3_1",
  753. .id = MASTER_PCIE_1,
  754. .channels = 1,
  755. .buswidth = 8,
  756. .noc_ops = &qcom_qnoc4_ops,
  757. .qosbox = &xm_pcie3_1_qos,
  758. .num_links = 1,
  759. .links = { SLAVE_ANOC_PCIE_GEM_NOC },
  760. };
  761. static struct qcom_icc_node qnm_aggre1_noc = {
  762. .name = "qnm_aggre1_noc",
  763. .id = MASTER_A1NOC_SNOC,
  764. .channels = 1,
  765. .buswidth = 16,
  766. .noc_ops = &qcom_qnoc4_ops,
  767. .num_links = 1,
  768. .links = { SLAVE_SNOC_GEM_NOC_SF },
  769. };
  770. static struct qcom_icc_node qnm_aggre2_noc = {
  771. .name = "qnm_aggre2_noc",
  772. .id = MASTER_A2NOC_SNOC,
  773. .channels = 1,
  774. .buswidth = 16,
  775. .noc_ops = &qcom_qnoc4_ops,
  776. .num_links = 1,
  777. .links = { SLAVE_SNOC_GEM_NOC_SF },
  778. };
  779. static struct qcom_icc_qosbox qnm_apss_noc_qos = {
  780. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  781. .num_ports = 1,
  782. .offsets = { 0x1c000 },
  783. .config = &(struct qos_config) {
  784. .prio = 2,
  785. .urg_fwd = 0,
  786. .prio_fwd_disable = 1,
  787. },
  788. };
  789. static struct qcom_icc_node qnm_apss_noc = {
  790. .name = "qnm_apss_noc",
  791. .id = MASTER_APSS_NOC,
  792. .channels = 1,
  793. .buswidth = 4,
  794. .noc_ops = &qcom_qnoc4_ops,
  795. .qosbox = &qnm_apss_noc_qos,
  796. .num_links = 1,
  797. .links = { SLAVE_SNOC_GEM_NOC_SF },
  798. };
  799. static struct qcom_icc_qosbox qnm_cnoc_data_qos = {
  800. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  801. .num_ports = 1,
  802. .offsets = { 0x1d000 },
  803. .config = &(struct qos_config) {
  804. .prio = 2,
  805. .urg_fwd = 0,
  806. .prio_fwd_disable = 1,
  807. },
  808. };
  809. static struct qcom_icc_node qnm_cnoc_data = {
  810. .name = "qnm_cnoc_data",
  811. .id = MASTER_CNOC_SNOC,
  812. .channels = 1,
  813. .buswidth = 8,
  814. .noc_ops = &qcom_qnoc4_ops,
  815. .qosbox = &qnm_cnoc_data_qos,
  816. .num_links = 1,
  817. .links = { SLAVE_SNOC_GEM_NOC_SF },
  818. };
  819. static struct qcom_icc_qosbox qxm_pimem_qos = {
  820. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  821. .num_ports = 1,
  822. .offsets = { 0x1e000 },
  823. .config = &(struct qos_config) {
  824. .prio = 2,
  825. .urg_fwd = 0,
  826. .prio_fwd_disable = 1,
  827. },
  828. };
  829. static struct qcom_icc_node qxm_pimem = {
  830. .name = "qxm_pimem",
  831. .id = MASTER_PIMEM,
  832. .channels = 1,
  833. .buswidth = 8,
  834. .noc_ops = &qcom_qnoc4_ops,
  835. .qosbox = &qxm_pimem_qos,
  836. .num_links = 1,
  837. .links = { SLAVE_SNOC_GEM_NOC_GC },
  838. };
  839. static struct qcom_icc_qosbox xm_gic_qos = {
  840. .regs = icc_qnoc_qos_regs[ICC_QNOC_QOSGEN_TYPE_RPMH],
  841. .num_ports = 1,
  842. .offsets = { 0x1f000 },
  843. .config = &(struct qos_config) {
  844. .prio = 2,
  845. .urg_fwd = 0,
  846. .prio_fwd_disable = 1,
  847. },
  848. };
  849. static struct qcom_icc_node xm_gic = {
  850. .name = "xm_gic",
  851. .id = MASTER_GIC,
  852. .channels = 1,
  853. .buswidth = 8,
  854. .noc_ops = &qcom_qnoc4_ops,
  855. .qosbox = &xm_gic_qos,
  856. .num_links = 1,
  857. .links = { SLAVE_SNOC_GEM_NOC_GC },
  858. };
  859. static struct qcom_icc_node qnm_mnoc_hf_disp = {
  860. .name = "qnm_mnoc_hf_disp",
  861. .id = MASTER_MNOC_HF_MEM_NOC_DISP,
  862. .channels = 2,
  863. .buswidth = 32,
  864. .noc_ops = &qcom_qnoc4_ops,
  865. .num_links = 1,
  866. .links = { SLAVE_LLCC_DISP },
  867. };
  868. static struct qcom_icc_node qnm_pcie_disp = {
  869. .name = "qnm_pcie_disp",
  870. .id = MASTER_ANOC_PCIE_GEM_NOC_DISP,
  871. .channels = 1,
  872. .buswidth = 8,
  873. .noc_ops = &qcom_qnoc4_ops,
  874. .num_links = 1,
  875. .links = { SLAVE_LLCC_DISP },
  876. };
  877. static struct qcom_icc_node llcc_mc_disp = {
  878. .name = "llcc_mc_disp",
  879. .id = MASTER_LLCC_DISP,
  880. .channels = 2,
  881. .buswidth = 4,
  882. .noc_ops = &qcom_qnoc4_ops,
  883. .num_links = 1,
  884. .links = { SLAVE_EBI1_DISP },
  885. };
  886. static struct qcom_icc_node qnm_mdp_disp = {
  887. .name = "qnm_mdp_disp",
  888. .id = MASTER_MDP_DISP,
  889. .channels = 1,
  890. .buswidth = 32,
  891. .noc_ops = &qcom_qnoc4_ops,
  892. .num_links = 1,
  893. .links = { SLAVE_MNOC_HF_MEM_NOC_DISP },
  894. };
  895. static struct qcom_icc_node qns_a1noc_snoc = {
  896. .name = "qns_a1noc_snoc",
  897. .id = SLAVE_A1NOC_SNOC,
  898. .channels = 1,
  899. .buswidth = 16,
  900. .noc_ops = &qcom_qnoc4_ops,
  901. .num_links = 1,
  902. .links = { MASTER_A1NOC_SNOC },
  903. };
  904. static struct qcom_icc_node qns_a2noc_snoc = {
  905. .name = "qns_a2noc_snoc",
  906. .id = SLAVE_A2NOC_SNOC,
  907. .channels = 1,
  908. .buswidth = 16,
  909. .noc_ops = &qcom_qnoc4_ops,
  910. .num_links = 1,
  911. .links = { MASTER_A2NOC_SNOC },
  912. };
  913. static struct qcom_icc_node qup0_core_slave = {
  914. .name = "qup0_core_slave",
  915. .id = SLAVE_QUP_CORE_0,
  916. .channels = 1,
  917. .buswidth = 4,
  918. .noc_ops = &qcom_qnoc4_ops,
  919. .num_links = 0,
  920. };
  921. static struct qcom_icc_node qup1_core_slave = {
  922. .name = "qup1_core_slave",
  923. .id = SLAVE_QUP_CORE_1,
  924. .channels = 1,
  925. .buswidth = 4,
  926. .noc_ops = &qcom_qnoc4_ops,
  927. .num_links = 0,
  928. };
  929. static struct qcom_icc_node qhs_ahb2phy0 = {
  930. .name = "qhs_ahb2phy0",
  931. .id = SLAVE_AHB2PHY_SOUTH,
  932. .channels = 1,
  933. .buswidth = 4,
  934. .noc_ops = &qcom_qnoc4_ops,
  935. .num_links = 0,
  936. };
  937. static struct qcom_icc_node qhs_ahb2phy1 = {
  938. .name = "qhs_ahb2phy1",
  939. .id = SLAVE_AHB2PHY_NORTH,
  940. .channels = 1,
  941. .buswidth = 4,
  942. .noc_ops = &qcom_qnoc4_ops,
  943. .num_links = 0,
  944. };
  945. static struct qcom_icc_node qhs_camera_cfg = {
  946. .name = "qhs_camera_cfg",
  947. .id = SLAVE_CAMERA_CFG,
  948. .channels = 1,
  949. .buswidth = 4,
  950. .noc_ops = &qcom_qnoc4_ops,
  951. .num_links = 0,
  952. };
  953. static struct qcom_icc_node qhs_clk_ctl = {
  954. .name = "qhs_clk_ctl",
  955. .id = SLAVE_CLK_CTL,
  956. .channels = 1,
  957. .buswidth = 4,
  958. .noc_ops = &qcom_qnoc4_ops,
  959. .num_links = 0,
  960. };
  961. static struct qcom_icc_node qhs_cpr_cx = {
  962. .name = "qhs_cpr_cx",
  963. .id = SLAVE_RBCPR_CX_CFG,
  964. .channels = 1,
  965. .buswidth = 4,
  966. .noc_ops = &qcom_qnoc4_ops,
  967. .num_links = 0,
  968. };
  969. static struct qcom_icc_node qhs_cpr_mxa = {
  970. .name = "qhs_cpr_mxa",
  971. .id = SLAVE_RBCPR_MXA_CFG,
  972. .channels = 1,
  973. .buswidth = 4,
  974. .noc_ops = &qcom_qnoc4_ops,
  975. .num_links = 0,
  976. };
  977. static struct qcom_icc_node qhs_crypto0_cfg = {
  978. .name = "qhs_crypto0_cfg",
  979. .id = SLAVE_CRYPTO_0_CFG,
  980. .channels = 1,
  981. .buswidth = 4,
  982. .noc_ops = &qcom_qnoc4_ops,
  983. .num_links = 0,
  984. };
  985. static struct qcom_icc_node qhs_cx_rdpm = {
  986. .name = "qhs_cx_rdpm",
  987. .id = SLAVE_CX_RDPM,
  988. .channels = 1,
  989. .buswidth = 4,
  990. .noc_ops = &qcom_qnoc4_ops,
  991. .num_links = 0,
  992. };
  993. static struct qcom_icc_node qhs_gpuss_cfg = {
  994. .name = "qhs_gpuss_cfg",
  995. .id = SLAVE_GFX3D_CFG,
  996. .channels = 1,
  997. .buswidth = 8,
  998. .noc_ops = &qcom_qnoc4_ops,
  999. .num_links = 0,
  1000. };
  1001. static struct qcom_icc_node qhs_imem_cfg = {
  1002. .name = "qhs_imem_cfg",
  1003. .id = SLAVE_IMEM_CFG,
  1004. .channels = 1,
  1005. .buswidth = 4,
  1006. .noc_ops = &qcom_qnoc4_ops,
  1007. .num_links = 0,
  1008. };
  1009. static struct qcom_icc_node qhs_mss_cfg = {
  1010. .name = "qhs_mss_cfg",
  1011. .id = SLAVE_CNOC_MSS,
  1012. .channels = 1,
  1013. .buswidth = 4,
  1014. .noc_ops = &qcom_qnoc4_ops,
  1015. .num_links = 0,
  1016. };
  1017. static struct qcom_icc_node qhs_mx_2_rdpm = {
  1018. .name = "qhs_mx_2_rdpm",
  1019. .id = SLAVE_MX_2_RDPM,
  1020. .channels = 1,
  1021. .buswidth = 4,
  1022. .noc_ops = &qcom_qnoc4_ops,
  1023. .num_links = 0,
  1024. };
  1025. static struct qcom_icc_node qhs_mx_rdpm = {
  1026. .name = "qhs_mx_rdpm",
  1027. .id = SLAVE_MX_RDPM,
  1028. .channels = 1,
  1029. .buswidth = 4,
  1030. .noc_ops = &qcom_qnoc4_ops,
  1031. .num_links = 0,
  1032. };
  1033. static struct qcom_icc_node qhs_pdm = {
  1034. .name = "qhs_pdm",
  1035. .id = SLAVE_PDM,
  1036. .channels = 1,
  1037. .buswidth = 4,
  1038. .noc_ops = &qcom_qnoc4_ops,
  1039. .num_links = 0,
  1040. };
  1041. static struct qcom_icc_node qhs_qdss_cfg = {
  1042. .name = "qhs_qdss_cfg",
  1043. .id = SLAVE_QDSS_CFG,
  1044. .channels = 1,
  1045. .buswidth = 4,
  1046. .noc_ops = &qcom_qnoc4_ops,
  1047. .num_links = 0,
  1048. };
  1049. static struct qcom_icc_node qhs_qspi = {
  1050. .name = "qhs_qspi",
  1051. .id = SLAVE_QSPI_0,
  1052. .channels = 1,
  1053. .buswidth = 4,
  1054. .noc_ops = &qcom_qnoc4_ops,
  1055. .num_links = 0,
  1056. };
  1057. static struct qcom_icc_node qhs_qup0 = {
  1058. .name = "qhs_qup0",
  1059. .id = SLAVE_QUP_0,
  1060. .channels = 1,
  1061. .buswidth = 4,
  1062. .noc_ops = &qcom_qnoc4_ops,
  1063. .num_links = 0,
  1064. };
  1065. static struct qcom_icc_node qhs_qup1 = {
  1066. .name = "qhs_qup1",
  1067. .id = SLAVE_QUP_1,
  1068. .channels = 1,
  1069. .buswidth = 4,
  1070. .noc_ops = &qcom_qnoc4_ops,
  1071. .num_links = 0,
  1072. };
  1073. static struct qcom_icc_node qhs_sdc1 = {
  1074. .name = "qhs_sdc1",
  1075. .id = SLAVE_SDC1,
  1076. .channels = 1,
  1077. .buswidth = 4,
  1078. .noc_ops = &qcom_qnoc4_ops,
  1079. .num_links = 0,
  1080. };
  1081. static struct qcom_icc_node qhs_sdc2 = {
  1082. .name = "qhs_sdc2",
  1083. .id = SLAVE_SDCC_2,
  1084. .channels = 1,
  1085. .buswidth = 4,
  1086. .noc_ops = &qcom_qnoc4_ops,
  1087. .num_links = 0,
  1088. };
  1089. static struct qcom_icc_node qhs_tcsr = {
  1090. .name = "qhs_tcsr",
  1091. .id = SLAVE_TCSR,
  1092. .channels = 1,
  1093. .buswidth = 4,
  1094. .noc_ops = &qcom_qnoc4_ops,
  1095. .num_links = 0,
  1096. };
  1097. static struct qcom_icc_node qhs_tlmm = {
  1098. .name = "qhs_tlmm",
  1099. .id = SLAVE_TLMM,
  1100. .channels = 1,
  1101. .buswidth = 4,
  1102. .noc_ops = &qcom_qnoc4_ops,
  1103. .num_links = 0,
  1104. };
  1105. static struct qcom_icc_node qhs_ufs_mem_cfg = {
  1106. .name = "qhs_ufs_mem_cfg",
  1107. .id = SLAVE_UFS_MEM_CFG,
  1108. .channels = 1,
  1109. .buswidth = 4,
  1110. .noc_ops = &qcom_qnoc4_ops,
  1111. .num_links = 0,
  1112. };
  1113. static struct qcom_icc_node qhs_usb3_0 = {
  1114. .name = "qhs_usb3_0",
  1115. .id = SLAVE_USB3_0,
  1116. .channels = 1,
  1117. .buswidth = 4,
  1118. .noc_ops = &qcom_qnoc4_ops,
  1119. .num_links = 0,
  1120. };
  1121. static struct qcom_icc_node qhs_venus_cfg = {
  1122. .name = "qhs_venus_cfg",
  1123. .id = SLAVE_VENUS_CFG,
  1124. .channels = 1,
  1125. .buswidth = 4,
  1126. .noc_ops = &qcom_qnoc4_ops,
  1127. .num_links = 0,
  1128. };
  1129. static struct qcom_icc_node qhs_vsense_ctrl_cfg = {
  1130. .name = "qhs_vsense_ctrl_cfg",
  1131. .id = SLAVE_VSENSE_CTRL_CFG,
  1132. .channels = 1,
  1133. .buswidth = 4,
  1134. .noc_ops = &qcom_qnoc4_ops,
  1135. .num_links = 0,
  1136. };
  1137. static struct qcom_icc_node qhs_wlan_q6 = {
  1138. .name = "qhs_wlan_q6",
  1139. .id = SLAVE_WLAN,
  1140. .channels = 1,
  1141. .buswidth = 4,
  1142. .noc_ops = &qcom_qnoc4_ops,
  1143. .num_links = 0,
  1144. };
  1145. static struct qcom_icc_node qss_mnoc_hf_cfg = {
  1146. .name = "qss_mnoc_hf_cfg",
  1147. .id = SLAVE_CNOC_MNOC_HF_CFG,
  1148. .channels = 1,
  1149. .buswidth = 4,
  1150. .noc_ops = &qcom_qnoc4_ops,
  1151. .num_links = 1,
  1152. .links = { MASTER_CNOC_MNOC_HF_CFG },
  1153. };
  1154. static struct qcom_icc_node qss_mnoc_sf_cfg = {
  1155. .name = "qss_mnoc_sf_cfg",
  1156. .id = SLAVE_CNOC_MNOC_SF_CFG,
  1157. .channels = 1,
  1158. .buswidth = 4,
  1159. .noc_ops = &qcom_qnoc4_ops,
  1160. .num_links = 1,
  1161. .links = { MASTER_CNOC_MNOC_SF_CFG },
  1162. };
  1163. static struct qcom_icc_node qss_nsp_qtb_cfg = {
  1164. .name = "qss_nsp_qtb_cfg",
  1165. .id = SLAVE_NSP_QTB_CFG,
  1166. .channels = 1,
  1167. .buswidth = 4,
  1168. .noc_ops = &qcom_qnoc4_ops,
  1169. .num_links = 0,
  1170. };
  1171. static struct qcom_icc_node qss_pcie_anoc_cfg = {
  1172. .name = "qss_pcie_anoc_cfg",
  1173. .id = SLAVE_PCIE_ANOC_CFG,
  1174. .channels = 1,
  1175. .buswidth = 4,
  1176. .noc_ops = &qcom_qnoc4_ops,
  1177. .num_links = 1,
  1178. .links = { MASTER_PCIE_ANOC_CFG },
  1179. };
  1180. static struct qcom_icc_node qss_wlan_q6_throttle_cfg = {
  1181. .name = "qss_wlan_q6_throttle_cfg",
  1182. .id = SLAVE_WLAN_Q6_THROTTLE_CFG,
  1183. .channels = 1,
  1184. .buswidth = 4,
  1185. .noc_ops = &qcom_qnoc4_ops,
  1186. .num_links = 0,
  1187. };
  1188. static struct qcom_icc_node srvc_cnoc_cfg = {
  1189. .name = "srvc_cnoc_cfg",
  1190. .id = SLAVE_SERVICE_CNOC_CFG,
  1191. .channels = 1,
  1192. .buswidth = 4,
  1193. .noc_ops = &qcom_qnoc4_ops,
  1194. .num_links = 0,
  1195. };
  1196. static struct qcom_icc_node xs_qdss_stm = {
  1197. .name = "xs_qdss_stm",
  1198. .id = SLAVE_QDSS_STM,
  1199. .channels = 1,
  1200. .buswidth = 4,
  1201. .noc_ops = &qcom_qnoc4_ops,
  1202. .num_links = 0,
  1203. };
  1204. static struct qcom_icc_node xs_sys_tcu_cfg = {
  1205. .name = "xs_sys_tcu_cfg",
  1206. .id = SLAVE_TCU,
  1207. .channels = 1,
  1208. .buswidth = 8,
  1209. .noc_ops = &qcom_qnoc4_ops,
  1210. .num_links = 0,
  1211. };
  1212. static struct qcom_icc_node qhs_aoss = {
  1213. .name = "qhs_aoss",
  1214. .id = SLAVE_AOSS,
  1215. .channels = 1,
  1216. .buswidth = 4,
  1217. .noc_ops = &qcom_qnoc4_ops,
  1218. .num_links = 0,
  1219. };
  1220. static struct qcom_icc_node qhs_display_cfg = {
  1221. .name = "qhs_display_cfg",
  1222. .id = SLAVE_DISPLAY_CFG,
  1223. .channels = 1,
  1224. .buswidth = 4,
  1225. .noc_ops = &qcom_qnoc4_ops,
  1226. .num_links = 0,
  1227. };
  1228. static struct qcom_icc_node qhs_ipa = {
  1229. .name = "qhs_ipa",
  1230. .id = SLAVE_IPA_CFG,
  1231. .channels = 1,
  1232. .buswidth = 4,
  1233. .noc_ops = &qcom_qnoc4_ops,
  1234. .num_links = 0,
  1235. };
  1236. static struct qcom_icc_node qhs_ipc_router = {
  1237. .name = "qhs_ipc_router",
  1238. .id = SLAVE_IPC_ROUTER_CFG,
  1239. .channels = 1,
  1240. .buswidth = 4,
  1241. .noc_ops = &qcom_qnoc4_ops,
  1242. .num_links = 0,
  1243. };
  1244. static struct qcom_icc_node qhs_pcie0_cfg = {
  1245. .name = "qhs_pcie0_cfg",
  1246. .id = SLAVE_PCIE_0_CFG,
  1247. .channels = 1,
  1248. .buswidth = 4,
  1249. .noc_ops = &qcom_qnoc4_ops,
  1250. .num_links = 0,
  1251. };
  1252. static struct qcom_icc_node qhs_pcie1_cfg = {
  1253. .name = "qhs_pcie1_cfg",
  1254. .id = SLAVE_PCIE_1_CFG,
  1255. .channels = 1,
  1256. .buswidth = 4,
  1257. .noc_ops = &qcom_qnoc4_ops,
  1258. .num_links = 0,
  1259. };
  1260. static struct qcom_icc_node qhs_prng = {
  1261. .name = "qhs_prng",
  1262. .id = SLAVE_PRNG,
  1263. .channels = 1,
  1264. .buswidth = 4,
  1265. .noc_ops = &qcom_qnoc4_ops,
  1266. .num_links = 0,
  1267. };
  1268. static struct qcom_icc_node qhs_tme_cfg = {
  1269. .name = "qhs_tme_cfg",
  1270. .id = SLAVE_TME_CFG,
  1271. .channels = 1,
  1272. .buswidth = 4,
  1273. .noc_ops = &qcom_qnoc4_ops,
  1274. .num_links = 0,
  1275. };
  1276. static struct qcom_icc_node qss_apss = {
  1277. .name = "qss_apss",
  1278. .id = SLAVE_APPSS,
  1279. .channels = 1,
  1280. .buswidth = 4,
  1281. .noc_ops = &qcom_qnoc4_ops,
  1282. .num_links = 0,
  1283. };
  1284. static struct qcom_icc_node qss_cfg = {
  1285. .name = "qss_cfg",
  1286. .id = SLAVE_CNOC_CFG,
  1287. .channels = 1,
  1288. .buswidth = 4,
  1289. .noc_ops = &qcom_qnoc4_ops,
  1290. .num_links = 1,
  1291. .links = { MASTER_CNOC_CFG },
  1292. };
  1293. static struct qcom_icc_node qss_ddrss_cfg = {
  1294. .name = "qss_ddrss_cfg",
  1295. .id = SLAVE_DDRSS_CFG,
  1296. .channels = 1,
  1297. .buswidth = 4,
  1298. .noc_ops = &qcom_qnoc4_ops,
  1299. .num_links = 0,
  1300. };
  1301. static struct qcom_icc_node qxs_imem = {
  1302. .name = "qxs_imem",
  1303. .id = SLAVE_IMEM,
  1304. .channels = 1,
  1305. .buswidth = 8,
  1306. .noc_ops = &qcom_qnoc4_ops,
  1307. .num_links = 0,
  1308. };
  1309. static struct qcom_icc_node qxs_pimem = {
  1310. .name = "qxs_pimem",
  1311. .id = SLAVE_PIMEM,
  1312. .channels = 1,
  1313. .buswidth = 8,
  1314. .noc_ops = &qcom_qnoc4_ops,
  1315. .num_links = 0,
  1316. };
  1317. static struct qcom_icc_node srvc_cnoc_main = {
  1318. .name = "srvc_cnoc_main",
  1319. .id = SLAVE_SERVICE_CNOC,
  1320. .channels = 1,
  1321. .buswidth = 4,
  1322. .noc_ops = &qcom_qnoc4_ops,
  1323. .num_links = 0,
  1324. };
  1325. static struct qcom_icc_node xs_pcie_0 = {
  1326. .name = "xs_pcie_0",
  1327. .id = SLAVE_PCIE_0,
  1328. .channels = 1,
  1329. .buswidth = 8,
  1330. .noc_ops = &qcom_qnoc4_ops,
  1331. .num_links = 0,
  1332. };
  1333. static struct qcom_icc_node xs_pcie_1 = {
  1334. .name = "xs_pcie_1",
  1335. .id = SLAVE_PCIE_1,
  1336. .channels = 1,
  1337. .buswidth = 8,
  1338. .noc_ops = &qcom_qnoc4_ops,
  1339. .num_links = 0,
  1340. };
  1341. static struct qcom_icc_node qns_gem_noc_cnoc = {
  1342. .name = "qns_gem_noc_cnoc",
  1343. .id = SLAVE_GEM_NOC_CNOC,
  1344. .channels = 1,
  1345. .buswidth = 16,
  1346. .noc_ops = &qcom_qnoc4_ops,
  1347. .num_links = 1,
  1348. .links = { MASTER_GEM_NOC_CNOC },
  1349. };
  1350. static struct qcom_icc_node qns_llcc = {
  1351. .name = "qns_llcc",
  1352. .id = SLAVE_LLCC,
  1353. .channels = 2,
  1354. .buswidth = 16,
  1355. .noc_ops = &qcom_qnoc4_ops,
  1356. .num_links = 1,
  1357. .links = { MASTER_LLCC },
  1358. };
  1359. static struct qcom_icc_node qns_pcie = {
  1360. .name = "qns_pcie",
  1361. .id = SLAVE_MEM_NOC_PCIE_SNOC,
  1362. .channels = 1,
  1363. .buswidth = 8,
  1364. .noc_ops = &qcom_qnoc4_ops,
  1365. .num_links = 1,
  1366. .links = { MASTER_GEM_NOC_PCIE_SNOC },
  1367. };
  1368. static struct qcom_icc_node qns_lpass_ag_noc_gemnoc = {
  1369. .name = "qns_lpass_ag_noc_gemnoc",
  1370. .id = SLAVE_LPASS_GEM_NOC,
  1371. .channels = 1,
  1372. .buswidth = 16,
  1373. .noc_ops = &qcom_qnoc4_ops,
  1374. .num_links = 1,
  1375. .links = { MASTER_LPASS_GEM_NOC },
  1376. };
  1377. static struct qcom_icc_node ebi = {
  1378. .name = "ebi",
  1379. .id = SLAVE_EBI1,
  1380. .channels = 2,
  1381. .buswidth = 4,
  1382. .noc_ops = &qcom_qnoc4_ops,
  1383. .num_links = 0,
  1384. };
  1385. static struct qcom_icc_node qns_mem_noc_hf = {
  1386. .name = "qns_mem_noc_hf",
  1387. .id = SLAVE_MNOC_HF_MEM_NOC,
  1388. .channels = 2,
  1389. .buswidth = 32,
  1390. .noc_ops = &qcom_qnoc4_ops,
  1391. .num_links = 1,
  1392. .links = { MASTER_MNOC_HF_MEM_NOC },
  1393. };
  1394. static struct qcom_icc_node qns_mem_noc_sf = {
  1395. .name = "qns_mem_noc_sf",
  1396. .id = SLAVE_MNOC_SF_MEM_NOC,
  1397. .channels = 2,
  1398. .buswidth = 32,
  1399. .noc_ops = &qcom_qnoc4_ops,
  1400. .num_links = 1,
  1401. .links = { MASTER_MNOC_SF_MEM_NOC },
  1402. };
  1403. static struct qcom_icc_node srvc_mnoc_hf = {
  1404. .name = "srvc_mnoc_hf",
  1405. .id = SLAVE_SERVICE_MNOC_HF,
  1406. .channels = 1,
  1407. .buswidth = 4,
  1408. .noc_ops = &qcom_qnoc4_ops,
  1409. .num_links = 0,
  1410. };
  1411. static struct qcom_icc_node srvc_mnoc_sf = {
  1412. .name = "srvc_mnoc_sf",
  1413. .id = SLAVE_SERVICE_MNOC_SF,
  1414. .channels = 1,
  1415. .buswidth = 4,
  1416. .noc_ops = &qcom_qnoc4_ops,
  1417. .num_links = 0,
  1418. };
  1419. static struct qcom_icc_node qns_nsp_gemnoc = {
  1420. .name = "qns_nsp_gemnoc",
  1421. .id = SLAVE_CDSP_MEM_NOC,
  1422. .channels = 2,
  1423. .buswidth = 32,
  1424. .noc_ops = &qcom_qnoc4_ops,
  1425. .num_links = 1,
  1426. .links = { MASTER_COMPUTE_NOC },
  1427. };
  1428. static struct qcom_icc_node qns_pcie_mem_noc = {
  1429. .name = "qns_pcie_mem_noc",
  1430. .id = SLAVE_ANOC_PCIE_GEM_NOC,
  1431. .channels = 1,
  1432. .buswidth = 8,
  1433. .noc_ops = &qcom_qnoc4_ops,
  1434. .num_links = 1,
  1435. .links = { MASTER_ANOC_PCIE_GEM_NOC },
  1436. };
  1437. static struct qcom_icc_node srvc_pcie_aggre_noc = {
  1438. .name = "srvc_pcie_aggre_noc",
  1439. .id = SLAVE_SERVICE_PCIE_ANOC,
  1440. .channels = 1,
  1441. .buswidth = 4,
  1442. .noc_ops = &qcom_qnoc4_ops,
  1443. .num_links = 0,
  1444. };
  1445. static struct qcom_icc_node qns_gemnoc_gc = {
  1446. .name = "qns_gemnoc_gc",
  1447. .id = SLAVE_SNOC_GEM_NOC_GC,
  1448. .channels = 1,
  1449. .buswidth = 8,
  1450. .noc_ops = &qcom_qnoc4_ops,
  1451. .num_links = 1,
  1452. .links = { MASTER_SNOC_GC_MEM_NOC },
  1453. };
  1454. static struct qcom_icc_node qns_gemnoc_sf = {
  1455. .name = "qns_gemnoc_sf",
  1456. .id = SLAVE_SNOC_GEM_NOC_SF,
  1457. .channels = 1,
  1458. .buswidth = 16,
  1459. .noc_ops = &qcom_qnoc4_ops,
  1460. .num_links = 1,
  1461. .links = { MASTER_SNOC_SF_MEM_NOC },
  1462. };
  1463. static struct qcom_icc_node qns_llcc_disp = {
  1464. .name = "qns_llcc_disp",
  1465. .id = SLAVE_LLCC_DISP,
  1466. .channels = 2,
  1467. .buswidth = 16,
  1468. .noc_ops = &qcom_qnoc4_ops,
  1469. .num_links = 1,
  1470. .links = { MASTER_LLCC_DISP },
  1471. };
  1472. static struct qcom_icc_node ebi_disp = {
  1473. .name = "ebi_disp",
  1474. .id = SLAVE_EBI1_DISP,
  1475. .channels = 2,
  1476. .buswidth = 4,
  1477. .noc_ops = &qcom_qnoc4_ops,
  1478. .num_links = 0,
  1479. };
  1480. static struct qcom_icc_node qns_mem_noc_hf_disp = {
  1481. .name = "qns_mem_noc_hf_disp",
  1482. .id = SLAVE_MNOC_HF_MEM_NOC_DISP,
  1483. .channels = 2,
  1484. .buswidth = 32,
  1485. .noc_ops = &qcom_qnoc4_ops,
  1486. .num_links = 1,
  1487. .links = { MASTER_MNOC_HF_MEM_NOC_DISP },
  1488. };
  1489. static struct qcom_icc_bcm bcm_acv = {
  1490. .name = "ACV",
  1491. .voter_idx = VOTER_IDX_HLOS,
  1492. .enable_mask = 0x1,
  1493. .perf_mode_mask = 0x2,
  1494. .num_nodes = 1,
  1495. .nodes = { &ebi },
  1496. };
  1497. static struct qcom_icc_bcm bcm_ce0 = {
  1498. .name = "CE0",
  1499. .voter_idx = VOTER_IDX_HLOS,
  1500. .num_nodes = 1,
  1501. .nodes = { &qxm_crypto },
  1502. };
  1503. static struct qcom_icc_bcm bcm_cn0 = {
  1504. .name = "CN0",
  1505. .voter_idx = VOTER_IDX_HLOS,
  1506. .enable_mask = 0x1,
  1507. .keepalive = true,
  1508. .num_nodes = 51,
  1509. .nodes = { &qsm_cfg, &qhs_ahb2phy0,
  1510. &qhs_ahb2phy1, &qhs_camera_cfg,
  1511. &qhs_clk_ctl, &qhs_cpr_cx,
  1512. &qhs_cpr_mxa, &qhs_crypto0_cfg,
  1513. &qhs_cx_rdpm, &qhs_gpuss_cfg,
  1514. &qhs_imem_cfg, &qhs_mss_cfg,
  1515. &qhs_mx_2_rdpm, &qhs_mx_rdpm,
  1516. &qhs_pdm, &qhs_qdss_cfg,
  1517. &qhs_qspi, &qhs_sdc1,
  1518. &qhs_sdc2, &qhs_tcsr,
  1519. &qhs_tlmm, &qhs_ufs_mem_cfg,
  1520. &qhs_usb3_0, &qhs_venus_cfg,
  1521. &qhs_vsense_ctrl_cfg, &qhs_wlan_q6,
  1522. &qss_mnoc_hf_cfg, &qss_mnoc_sf_cfg,
  1523. &qss_nsp_qtb_cfg, &qss_pcie_anoc_cfg,
  1524. &qss_wlan_q6_throttle_cfg, &srvc_cnoc_cfg,
  1525. &xs_qdss_stm, &xs_sys_tcu_cfg,
  1526. &qnm_gemnoc_cnoc, &qnm_gemnoc_pcie,
  1527. &qhs_aoss, &qhs_ipa,
  1528. &qhs_ipc_router, &qhs_pcie0_cfg,
  1529. &qhs_pcie1_cfg, &qhs_prng,
  1530. &qhs_tme_cfg, &qss_apss,
  1531. &qss_cfg, &qss_ddrss_cfg,
  1532. &qxs_imem, &qxs_pimem,
  1533. &srvc_cnoc_main, &xs_pcie_0,
  1534. &xs_pcie_1 },
  1535. };
  1536. static struct qcom_icc_bcm bcm_cn1 = {
  1537. .name = "CN1",
  1538. .voter_idx = VOTER_IDX_HLOS,
  1539. .num_nodes = 3,
  1540. .nodes = { &qhs_qup0, &qhs_qup1,
  1541. &qhs_display_cfg },
  1542. };
  1543. static struct qcom_icc_bcm bcm_co0 = {
  1544. .name = "CO0",
  1545. .voter_idx = VOTER_IDX_HLOS,
  1546. .enable_mask = 0x1,
  1547. .num_nodes = 2,
  1548. .nodes = { &qxm_nsp, &qns_nsp_gemnoc },
  1549. };
  1550. static struct qcom_icc_bcm bcm_mc0 = {
  1551. .name = "MC0",
  1552. .voter_idx = VOTER_IDX_HLOS,
  1553. .keepalive = true,
  1554. .num_nodes = 1,
  1555. .nodes = { &ebi },
  1556. };
  1557. static struct qcom_icc_bcm bcm_mm0 = {
  1558. .name = "MM0",
  1559. .voter_idx = VOTER_IDX_HLOS,
  1560. .keepalive_early = true,
  1561. .num_nodes = 1,
  1562. .nodes = { &qns_mem_noc_hf },
  1563. };
  1564. static struct qcom_icc_bcm bcm_mm1 = {
  1565. .name = "MM1",
  1566. .voter_idx = VOTER_IDX_HLOS,
  1567. .enable_mask = 0x1,
  1568. .num_nodes = 4,
  1569. .nodes = { &qnm_camnoc_hf, &qnm_camnoc_icp,
  1570. &qnm_camnoc_sf, &qns_mem_noc_sf },
  1571. };
  1572. static struct qcom_icc_bcm bcm_qup0 = {
  1573. .name = "QUP0",
  1574. .voter_idx = VOTER_IDX_HLOS,
  1575. .keepalive = true,
  1576. .vote_scale = 1,
  1577. .num_nodes = 1,
  1578. .nodes = { &qup0_core_slave },
  1579. };
  1580. static struct qcom_icc_bcm bcm_qup1 = {
  1581. .name = "QUP1",
  1582. .voter_idx = VOTER_IDX_HLOS,
  1583. .keepalive = true,
  1584. .vote_scale = 1,
  1585. .num_nodes = 1,
  1586. .nodes = { &qup1_core_slave },
  1587. };
  1588. static struct qcom_icc_bcm bcm_sh0 = {
  1589. .name = "SH0",
  1590. .voter_idx = VOTER_IDX_HLOS,
  1591. .keepalive = true,
  1592. .num_nodes = 1,
  1593. .nodes = { &qns_llcc },
  1594. };
  1595. static struct qcom_icc_bcm bcm_sh1 = {
  1596. .name = "SH1",
  1597. .voter_idx = VOTER_IDX_HLOS,
  1598. .enable_mask = 0x1,
  1599. .num_nodes = 14,
  1600. .nodes = { &alm_gpu_tcu, &alm_sys_tcu,
  1601. &chm_apps, &qnm_gpu,
  1602. &qnm_mdsp, &qnm_mnoc_hf,
  1603. &qnm_mnoc_sf, &qnm_nsp_gemnoc,
  1604. &qnm_pcie, &qnm_snoc_gc,
  1605. &qnm_snoc_sf, &qxm_wlan_q6,
  1606. &qns_gem_noc_cnoc, &qns_pcie },
  1607. };
  1608. static struct qcom_icc_bcm bcm_sn0 = {
  1609. .name = "SN0",
  1610. .voter_idx = VOTER_IDX_HLOS,
  1611. .keepalive = true,
  1612. .num_nodes = 2,
  1613. .nodes = { &qns_gemnoc_gc, &qns_gemnoc_sf },
  1614. };
  1615. static struct qcom_icc_bcm bcm_sn1 = {
  1616. .name = "SN1",
  1617. .voter_idx = VOTER_IDX_HLOS,
  1618. .enable_mask = 0x1,
  1619. .num_nodes = 1,
  1620. .nodes = { &qxm_pimem },
  1621. };
  1622. static struct qcom_icc_bcm bcm_sn2 = {
  1623. .name = "SN2",
  1624. .voter_idx = VOTER_IDX_HLOS,
  1625. .num_nodes = 1,
  1626. .nodes = { &qnm_aggre1_noc },
  1627. };
  1628. static struct qcom_icc_bcm bcm_sn3 = {
  1629. .name = "SN3",
  1630. .voter_idx = VOTER_IDX_HLOS,
  1631. .num_nodes = 1,
  1632. .nodes = { &qnm_aggre2_noc },
  1633. };
  1634. static struct qcom_icc_bcm bcm_sn4 = {
  1635. .name = "SN4",
  1636. .voter_idx = VOTER_IDX_HLOS,
  1637. .num_nodes = 1,
  1638. .nodes = { &qns_pcie_mem_noc },
  1639. };
  1640. static struct qcom_icc_bcm bcm_acv_disp = {
  1641. .name = "ACV",
  1642. .voter_idx = VOTER_IDX_DISP,
  1643. .enable_mask = 0x1,
  1644. .perf_mode_mask = 0x2,
  1645. .num_nodes = 1,
  1646. .nodes = { &ebi_disp },
  1647. };
  1648. static struct qcom_icc_bcm bcm_mc0_disp = {
  1649. .name = "MC0",
  1650. .voter_idx = VOTER_IDX_DISP,
  1651. .num_nodes = 1,
  1652. .nodes = { &ebi_disp },
  1653. };
  1654. static struct qcom_icc_bcm bcm_mm0_disp = {
  1655. .name = "MM0",
  1656. .voter_idx = VOTER_IDX_DISP,
  1657. .num_nodes = 1,
  1658. .nodes = { &qns_mem_noc_hf_disp },
  1659. };
  1660. static struct qcom_icc_bcm bcm_sh0_disp = {
  1661. .name = "SH0",
  1662. .voter_idx = VOTER_IDX_DISP,
  1663. .num_nodes = 1,
  1664. .nodes = { &qns_llcc_disp },
  1665. };
  1666. static struct qcom_icc_bcm bcm_sh1_disp = {
  1667. .name = "SH1",
  1668. .voter_idx = VOTER_IDX_DISP,
  1669. .enable_mask = 0x1,
  1670. .num_nodes = 2,
  1671. .nodes = { &qnm_mnoc_hf_disp, &qnm_pcie_disp },
  1672. };
  1673. static struct qcom_icc_bcm *aggre1_noc_bcms[] = {
  1674. };
  1675. static struct qcom_icc_node *aggre1_noc_nodes[] = {
  1676. [MASTER_QUP_1] = &qhm_qup1,
  1677. [MASTER_UFS_MEM] = &xm_ufs_mem,
  1678. [MASTER_USB3_0] = &xm_usb3_0,
  1679. [SLAVE_A1NOC_SNOC] = &qns_a1noc_snoc,
  1680. };
  1681. static char *aggre1_noc_voters[] = {
  1682. [VOTER_IDX_HLOS] = "hlos",
  1683. };
  1684. static struct qcom_icc_desc volcano_aggre1_noc = {
  1685. .config = &icc_regmap_config,
  1686. .nodes = aggre1_noc_nodes,
  1687. .num_nodes = ARRAY_SIZE(aggre1_noc_nodes),
  1688. .bcms = aggre1_noc_bcms,
  1689. .num_bcms = ARRAY_SIZE(aggre1_noc_bcms),
  1690. .voters = aggre1_noc_voters,
  1691. .num_voters = ARRAY_SIZE(aggre1_noc_voters),
  1692. };
  1693. static struct qcom_icc_bcm *aggre2_noc_bcms[] = {
  1694. &bcm_ce0,
  1695. };
  1696. static struct qcom_icc_node *aggre2_noc_nodes[] = {
  1697. [MASTER_QDSS_BAM] = &qhm_qdss_bam,
  1698. [MASTER_QSPI_0] = &qhm_qspi,
  1699. [MASTER_QUP_0] = &qhm_qup0,
  1700. [MASTER_CRYPTO] = &qxm_crypto,
  1701. [MASTER_IPA] = &qxm_ipa,
  1702. [MASTER_QDSS_ETR] = &xm_qdss_etr_0,
  1703. [MASTER_QDSS_ETR_1] = &xm_qdss_etr_1,
  1704. [MASTER_SDCC_1] = &xm_sdc1,
  1705. [MASTER_SDCC_2] = &xm_sdc2,
  1706. [SLAVE_A2NOC_SNOC] = &qns_a2noc_snoc,
  1707. };
  1708. static char *aggre2_noc_voters[] = {
  1709. [VOTER_IDX_HLOS] = "hlos",
  1710. };
  1711. static struct qcom_icc_desc volcano_aggre2_noc = {
  1712. .config = &icc_regmap_config,
  1713. .nodes = aggre2_noc_nodes,
  1714. .num_nodes = ARRAY_SIZE(aggre2_noc_nodes),
  1715. .bcms = aggre2_noc_bcms,
  1716. .num_bcms = ARRAY_SIZE(aggre2_noc_bcms),
  1717. .voters = aggre2_noc_voters,
  1718. .num_voters = ARRAY_SIZE(aggre2_noc_voters),
  1719. };
  1720. static struct qcom_icc_bcm *clk_virt_bcms[] = {
  1721. &bcm_qup0,
  1722. &bcm_qup1,
  1723. };
  1724. static struct qcom_icc_node *clk_virt_nodes[] = {
  1725. [MASTER_QUP_CORE_0] = &qup0_core_master,
  1726. [MASTER_QUP_CORE_1] = &qup1_core_master,
  1727. [SLAVE_QUP_CORE_0] = &qup0_core_slave,
  1728. [SLAVE_QUP_CORE_1] = &qup1_core_slave,
  1729. };
  1730. static char *clk_virt_voters[] = {
  1731. [VOTER_IDX_HLOS] = "hlos",
  1732. };
  1733. static struct qcom_icc_desc volcano_clk_virt = {
  1734. .config = &icc_regmap_config,
  1735. .nodes = clk_virt_nodes,
  1736. .num_nodes = ARRAY_SIZE(clk_virt_nodes),
  1737. .bcms = clk_virt_bcms,
  1738. .num_bcms = ARRAY_SIZE(clk_virt_bcms),
  1739. .voters = clk_virt_voters,
  1740. .num_voters = ARRAY_SIZE(clk_virt_voters),
  1741. };
  1742. static struct qcom_icc_bcm *cnoc_cfg_bcms[] = {
  1743. &bcm_cn0,
  1744. &bcm_cn1,
  1745. };
  1746. static struct qcom_icc_node *cnoc_cfg_nodes[] = {
  1747. [MASTER_CNOC_CFG] = &qsm_cfg,
  1748. [SLAVE_AHB2PHY_SOUTH] = &qhs_ahb2phy0,
  1749. [SLAVE_AHB2PHY_NORTH] = &qhs_ahb2phy1,
  1750. [SLAVE_CAMERA_CFG] = &qhs_camera_cfg,
  1751. [SLAVE_CLK_CTL] = &qhs_clk_ctl,
  1752. [SLAVE_RBCPR_CX_CFG] = &qhs_cpr_cx,
  1753. [SLAVE_RBCPR_MXA_CFG] = &qhs_cpr_mxa,
  1754. [SLAVE_CRYPTO_0_CFG] = &qhs_crypto0_cfg,
  1755. [SLAVE_CX_RDPM] = &qhs_cx_rdpm,
  1756. [SLAVE_GFX3D_CFG] = &qhs_gpuss_cfg,
  1757. [SLAVE_IMEM_CFG] = &qhs_imem_cfg,
  1758. [SLAVE_CNOC_MSS] = &qhs_mss_cfg,
  1759. [SLAVE_MX_2_RDPM] = &qhs_mx_2_rdpm,
  1760. [SLAVE_MX_RDPM] = &qhs_mx_rdpm,
  1761. [SLAVE_PDM] = &qhs_pdm,
  1762. [SLAVE_QDSS_CFG] = &qhs_qdss_cfg,
  1763. [SLAVE_QSPI_0] = &qhs_qspi,
  1764. [SLAVE_QUP_0] = &qhs_qup0,
  1765. [SLAVE_QUP_1] = &qhs_qup1,
  1766. [SLAVE_SDC1] = &qhs_sdc1,
  1767. [SLAVE_SDCC_2] = &qhs_sdc2,
  1768. [SLAVE_TCSR] = &qhs_tcsr,
  1769. [SLAVE_TLMM] = &qhs_tlmm,
  1770. [SLAVE_UFS_MEM_CFG] = &qhs_ufs_mem_cfg,
  1771. [SLAVE_USB3_0] = &qhs_usb3_0,
  1772. [SLAVE_VENUS_CFG] = &qhs_venus_cfg,
  1773. [SLAVE_VSENSE_CTRL_CFG] = &qhs_vsense_ctrl_cfg,
  1774. [SLAVE_WLAN] = &qhs_wlan_q6,
  1775. [SLAVE_CNOC_MNOC_HF_CFG] = &qss_mnoc_hf_cfg,
  1776. [SLAVE_CNOC_MNOC_SF_CFG] = &qss_mnoc_sf_cfg,
  1777. [SLAVE_NSP_QTB_CFG] = &qss_nsp_qtb_cfg,
  1778. [SLAVE_PCIE_ANOC_CFG] = &qss_pcie_anoc_cfg,
  1779. [SLAVE_WLAN_Q6_THROTTLE_CFG] = &qss_wlan_q6_throttle_cfg,
  1780. [SLAVE_SERVICE_CNOC_CFG] = &srvc_cnoc_cfg,
  1781. [SLAVE_QDSS_STM] = &xs_qdss_stm,
  1782. [SLAVE_TCU] = &xs_sys_tcu_cfg,
  1783. };
  1784. static char *cnoc_cfg_voters[] = {
  1785. [VOTER_IDX_HLOS] = "hlos",
  1786. };
  1787. static struct qcom_icc_desc volcano_cnoc_cfg = {
  1788. .config = &icc_regmap_config,
  1789. .nodes = cnoc_cfg_nodes,
  1790. .num_nodes = ARRAY_SIZE(cnoc_cfg_nodes),
  1791. .bcms = cnoc_cfg_bcms,
  1792. .num_bcms = ARRAY_SIZE(cnoc_cfg_bcms),
  1793. .voters = cnoc_cfg_voters,
  1794. .num_voters = ARRAY_SIZE(cnoc_cfg_voters),
  1795. };
  1796. static struct qcom_icc_bcm *cnoc_main_bcms[] = {
  1797. &bcm_cn0,
  1798. &bcm_cn1,
  1799. };
  1800. static struct qcom_icc_node *cnoc_main_nodes[] = {
  1801. [MASTER_GEM_NOC_CNOC] = &qnm_gemnoc_cnoc,
  1802. [MASTER_GEM_NOC_PCIE_SNOC] = &qnm_gemnoc_pcie,
  1803. [SLAVE_AOSS] = &qhs_aoss,
  1804. [SLAVE_DISPLAY_CFG] = &qhs_display_cfg,
  1805. [SLAVE_IPA_CFG] = &qhs_ipa,
  1806. [SLAVE_IPC_ROUTER_CFG] = &qhs_ipc_router,
  1807. [SLAVE_PCIE_0_CFG] = &qhs_pcie0_cfg,
  1808. [SLAVE_PCIE_1_CFG] = &qhs_pcie1_cfg,
  1809. [SLAVE_PRNG] = &qhs_prng,
  1810. [SLAVE_TME_CFG] = &qhs_tme_cfg,
  1811. [SLAVE_APPSS] = &qss_apss,
  1812. [SLAVE_CNOC_CFG] = &qss_cfg,
  1813. [SLAVE_DDRSS_CFG] = &qss_ddrss_cfg,
  1814. [SLAVE_IMEM] = &qxs_imem,
  1815. [SLAVE_PIMEM] = &qxs_pimem,
  1816. [SLAVE_SERVICE_CNOC] = &srvc_cnoc_main,
  1817. [SLAVE_PCIE_0] = &xs_pcie_0,
  1818. [SLAVE_PCIE_1] = &xs_pcie_1,
  1819. };
  1820. static char *cnoc_main_voters[] = {
  1821. [VOTER_IDX_HLOS] = "hlos",
  1822. };
  1823. static struct qcom_icc_desc volcano_cnoc_main = {
  1824. .config = &icc_regmap_config,
  1825. .nodes = cnoc_main_nodes,
  1826. .num_nodes = ARRAY_SIZE(cnoc_main_nodes),
  1827. .bcms = cnoc_main_bcms,
  1828. .num_bcms = ARRAY_SIZE(cnoc_main_bcms),
  1829. .voters = cnoc_main_voters,
  1830. .num_voters = ARRAY_SIZE(cnoc_main_voters),
  1831. };
  1832. static struct qcom_icc_bcm *gem_noc_bcms[] = {
  1833. &bcm_sh0,
  1834. &bcm_sh1,
  1835. &bcm_sh0_disp,
  1836. &bcm_sh1_disp,
  1837. };
  1838. static struct qcom_icc_node *gem_noc_nodes[] = {
  1839. [MASTER_GPU_TCU] = &alm_gpu_tcu,
  1840. [MASTER_SYS_TCU] = &alm_sys_tcu,
  1841. [MASTER_APPSS_PROC] = &chm_apps,
  1842. [MASTER_GFX3D] = &qnm_gpu,
  1843. [MASTER_LPASS_GEM_NOC] = &qnm_lpass_gemnoc,
  1844. [MASTER_MSS_PROC] = &qnm_mdsp,
  1845. [MASTER_MNOC_HF_MEM_NOC] = &qnm_mnoc_hf,
  1846. [MASTER_MNOC_SF_MEM_NOC] = &qnm_mnoc_sf,
  1847. [MASTER_COMPUTE_NOC] = &qnm_nsp_gemnoc,
  1848. [MASTER_ANOC_PCIE_GEM_NOC] = &qnm_pcie,
  1849. [MASTER_SNOC_GC_MEM_NOC] = &qnm_snoc_gc,
  1850. [MASTER_SNOC_SF_MEM_NOC] = &qnm_snoc_sf,
  1851. [MASTER_WLAN_Q6] = &qxm_wlan_q6,
  1852. [SLAVE_GEM_NOC_CNOC] = &qns_gem_noc_cnoc,
  1853. [SLAVE_LLCC] = &qns_llcc,
  1854. [SLAVE_MEM_NOC_PCIE_SNOC] = &qns_pcie,
  1855. [MASTER_MNOC_HF_MEM_NOC_DISP] = &qnm_mnoc_hf_disp,
  1856. [MASTER_ANOC_PCIE_GEM_NOC_DISP] = &qnm_pcie_disp,
  1857. [SLAVE_LLCC_DISP] = &qns_llcc_disp,
  1858. };
  1859. static char *gem_noc_voters[] = {
  1860. [VOTER_IDX_HLOS] = "hlos",
  1861. [VOTER_IDX_DISP] = "disp",
  1862. };
  1863. static struct qcom_icc_desc volcano_gem_noc = {
  1864. .config = &icc_regmap_config,
  1865. .nodes = gem_noc_nodes,
  1866. .num_nodes = ARRAY_SIZE(gem_noc_nodes),
  1867. .bcms = gem_noc_bcms,
  1868. .num_bcms = ARRAY_SIZE(gem_noc_bcms),
  1869. .voters = gem_noc_voters,
  1870. .num_voters = ARRAY_SIZE(gem_noc_voters),
  1871. };
  1872. static struct qcom_icc_bcm *lpass_ag_noc_bcms[] = {
  1873. };
  1874. static struct qcom_icc_node *lpass_ag_noc_nodes[] = {
  1875. [MASTER_LPASS_PROC] = &qxm_lpass_dsp,
  1876. [SLAVE_LPASS_GEM_NOC] = &qns_lpass_ag_noc_gemnoc,
  1877. };
  1878. static char *lpass_ag_noc_voters[] = {
  1879. [VOTER_IDX_HLOS] = "hlos",
  1880. };
  1881. static struct qcom_icc_desc volcano_lpass_ag_noc = {
  1882. .config = &icc_regmap_config,
  1883. .nodes = lpass_ag_noc_nodes,
  1884. .num_nodes = ARRAY_SIZE(lpass_ag_noc_nodes),
  1885. .bcms = lpass_ag_noc_bcms,
  1886. .num_bcms = ARRAY_SIZE(lpass_ag_noc_bcms),
  1887. .voters = lpass_ag_noc_voters,
  1888. .num_voters = ARRAY_SIZE(lpass_ag_noc_voters),
  1889. };
  1890. static struct qcom_icc_bcm *mc_virt_bcms[] = {
  1891. &bcm_acv,
  1892. &bcm_mc0,
  1893. &bcm_acv_disp,
  1894. &bcm_mc0_disp,
  1895. };
  1896. static struct qcom_icc_node *mc_virt_nodes[] = {
  1897. [MASTER_LLCC] = &llcc_mc,
  1898. [SLAVE_EBI1] = &ebi,
  1899. [MASTER_LLCC_DISP] = &llcc_mc_disp,
  1900. [SLAVE_EBI1_DISP] = &ebi_disp,
  1901. };
  1902. static char *mc_virt_voters[] = {
  1903. [VOTER_IDX_HLOS] = "hlos",
  1904. [VOTER_IDX_DISP] = "disp",
  1905. };
  1906. static struct qcom_icc_desc volcano_mc_virt = {
  1907. .config = &icc_regmap_config,
  1908. .nodes = mc_virt_nodes,
  1909. .num_nodes = ARRAY_SIZE(mc_virt_nodes),
  1910. .bcms = mc_virt_bcms,
  1911. .num_bcms = ARRAY_SIZE(mc_virt_bcms),
  1912. .voters = mc_virt_voters,
  1913. .num_voters = ARRAY_SIZE(mc_virt_voters),
  1914. };
  1915. static struct qcom_icc_bcm *mmss_noc_bcms[] = {
  1916. &bcm_mm0,
  1917. &bcm_mm1,
  1918. &bcm_mm0_disp,
  1919. };
  1920. static struct qcom_icc_node *mmss_noc_nodes[] = {
  1921. [MASTER_CAMNOC_HF] = &qnm_camnoc_hf,
  1922. [MASTER_CAMNOC_ICP] = &qnm_camnoc_icp,
  1923. [MASTER_CAMNOC_SF] = &qnm_camnoc_sf,
  1924. [MASTER_MDP] = &qnm_mdp,
  1925. [MASTER_VIDEO] = &qnm_video,
  1926. [MASTER_CNOC_MNOC_HF_CFG] = &qsm_hf_mnoc_cfg,
  1927. [MASTER_CNOC_MNOC_SF_CFG] = &qsm_sf_mnoc_cfg,
  1928. [SLAVE_MNOC_HF_MEM_NOC] = &qns_mem_noc_hf,
  1929. [SLAVE_MNOC_SF_MEM_NOC] = &qns_mem_noc_sf,
  1930. [SLAVE_SERVICE_MNOC_HF] = &srvc_mnoc_hf,
  1931. [SLAVE_SERVICE_MNOC_SF] = &srvc_mnoc_sf,
  1932. [MASTER_MDP_DISP] = &qnm_mdp_disp,
  1933. [SLAVE_MNOC_HF_MEM_NOC_DISP] = &qns_mem_noc_hf_disp,
  1934. };
  1935. static char *mmss_noc_voters[] = {
  1936. [VOTER_IDX_HLOS] = "hlos",
  1937. [VOTER_IDX_DISP] = "disp",
  1938. };
  1939. static struct qcom_icc_desc volcano_mmss_noc = {
  1940. .config = &icc_regmap_config,
  1941. .nodes = mmss_noc_nodes,
  1942. .num_nodes = ARRAY_SIZE(mmss_noc_nodes),
  1943. .bcms = mmss_noc_bcms,
  1944. .num_bcms = ARRAY_SIZE(mmss_noc_bcms),
  1945. .voters = mmss_noc_voters,
  1946. .num_voters = ARRAY_SIZE(mmss_noc_voters),
  1947. };
  1948. static struct qcom_icc_bcm *nsp_noc_bcms[] = {
  1949. &bcm_co0,
  1950. };
  1951. static struct qcom_icc_node *nsp_noc_nodes[] = {
  1952. [MASTER_CDSP_PROC] = &qxm_nsp,
  1953. [SLAVE_CDSP_MEM_NOC] = &qns_nsp_gemnoc,
  1954. };
  1955. static char *nsp_noc_voters[] = {
  1956. [VOTER_IDX_HLOS] = "hlos",
  1957. };
  1958. static struct qcom_icc_desc volcano_nsp_noc = {
  1959. .config = &icc_regmap_config,
  1960. .nodes = nsp_noc_nodes,
  1961. .num_nodes = ARRAY_SIZE(nsp_noc_nodes),
  1962. .bcms = nsp_noc_bcms,
  1963. .num_bcms = ARRAY_SIZE(nsp_noc_bcms),
  1964. .voters = nsp_noc_voters,
  1965. .num_voters = ARRAY_SIZE(nsp_noc_voters),
  1966. };
  1967. static struct qcom_icc_bcm *pcie_anoc_bcms[] = {
  1968. &bcm_sn4,
  1969. };
  1970. static struct qcom_icc_node *pcie_anoc_nodes[] = {
  1971. [MASTER_PCIE_ANOC_CFG] = &qsm_pcie_anoc_cfg,
  1972. [MASTER_PCIE_0] = &xm_pcie3_0,
  1973. [MASTER_PCIE_1] = &xm_pcie3_1,
  1974. [SLAVE_ANOC_PCIE_GEM_NOC] = &qns_pcie_mem_noc,
  1975. [SLAVE_SERVICE_PCIE_ANOC] = &srvc_pcie_aggre_noc,
  1976. };
  1977. static char *pcie_anoc_voters[] = {
  1978. [VOTER_IDX_HLOS] = "hlos",
  1979. };
  1980. static struct qcom_icc_desc volcano_pcie_anoc = {
  1981. .config = &icc_regmap_config,
  1982. .nodes = pcie_anoc_nodes,
  1983. .num_nodes = ARRAY_SIZE(pcie_anoc_nodes),
  1984. .bcms = pcie_anoc_bcms,
  1985. .num_bcms = ARRAY_SIZE(pcie_anoc_bcms),
  1986. .voters = pcie_anoc_voters,
  1987. .num_voters = ARRAY_SIZE(pcie_anoc_voters),
  1988. };
  1989. static struct qcom_icc_bcm *system_noc_bcms[] = {
  1990. &bcm_sn0,
  1991. &bcm_sn1,
  1992. &bcm_sn2,
  1993. &bcm_sn3,
  1994. };
  1995. static struct qcom_icc_node *system_noc_nodes[] = {
  1996. [MASTER_A1NOC_SNOC] = &qnm_aggre1_noc,
  1997. [MASTER_A2NOC_SNOC] = &qnm_aggre2_noc,
  1998. [MASTER_APSS_NOC] = &qnm_apss_noc,
  1999. [MASTER_CNOC_SNOC] = &qnm_cnoc_data,
  2000. [MASTER_PIMEM] = &qxm_pimem,
  2001. [MASTER_GIC] = &xm_gic,
  2002. [SLAVE_SNOC_GEM_NOC_GC] = &qns_gemnoc_gc,
  2003. [SLAVE_SNOC_GEM_NOC_SF] = &qns_gemnoc_sf,
  2004. };
  2005. static char *system_noc_voters[] = {
  2006. [VOTER_IDX_HLOS] = "hlos",
  2007. };
  2008. static struct qcom_icc_desc volcano_system_noc = {
  2009. .config = &icc_regmap_config,
  2010. .nodes = system_noc_nodes,
  2011. .num_nodes = ARRAY_SIZE(system_noc_nodes),
  2012. .bcms = system_noc_bcms,
  2013. .num_bcms = ARRAY_SIZE(system_noc_bcms),
  2014. .voters = system_noc_voters,
  2015. .num_voters = ARRAY_SIZE(system_noc_voters),
  2016. };
  2017. static int qnoc_probe(struct platform_device *pdev)
  2018. {
  2019. int ret;
  2020. ret = qcom_icc_rpmh_probe(pdev);
  2021. if (ret)
  2022. dev_err(&pdev->dev, "failed to register ICC provider: %d\n", ret);
  2023. else
  2024. dev_info(&pdev->dev, "Registered VOLCANO ICC\n");
  2025. return ret;
  2026. }
  2027. static const struct of_device_id qnoc_of_match[] = {
  2028. { .compatible = "qcom,volcano-aggre1_noc",
  2029. .data = &volcano_aggre1_noc},
  2030. { .compatible = "qcom,volcano-aggre2_noc",
  2031. .data = &volcano_aggre2_noc},
  2032. { .compatible = "qcom,volcano-clk_virt",
  2033. .data = &volcano_clk_virt},
  2034. { .compatible = "qcom,volcano-cnoc_cfg",
  2035. .data = &volcano_cnoc_cfg},
  2036. { .compatible = "qcom,volcano-cnoc_main",
  2037. .data = &volcano_cnoc_main},
  2038. { .compatible = "qcom,volcano-gem_noc",
  2039. .data = &volcano_gem_noc},
  2040. { .compatible = "qcom,volcano-lpass_ag_noc",
  2041. .data = &volcano_lpass_ag_noc},
  2042. { .compatible = "qcom,volcano-mc_virt",
  2043. .data = &volcano_mc_virt},
  2044. { .compatible = "qcom,volcano-mmss_noc",
  2045. .data = &volcano_mmss_noc},
  2046. { .compatible = "qcom,volcano-nsp_noc",
  2047. .data = &volcano_nsp_noc},
  2048. { .compatible = "qcom,volcano-pcie_anoc",
  2049. .data = &volcano_pcie_anoc},
  2050. { .compatible = "qcom,volcano-system_noc",
  2051. .data = &volcano_system_noc},
  2052. { }
  2053. };
  2054. MODULE_DEVICE_TABLE(of, qnoc_of_match);
  2055. static struct platform_driver qnoc_driver = {
  2056. .probe = qnoc_probe,
  2057. .remove = qcom_icc_rpmh_remove,
  2058. .driver = {
  2059. .name = "qnoc-volcano",
  2060. .of_match_table = qnoc_of_match,
  2061. .sync_state = qcom_icc_rpmh_sync_state,
  2062. },
  2063. };
  2064. static int __init qnoc_driver_init(void)
  2065. {
  2066. return platform_driver_register(&qnoc_driver);
  2067. }
  2068. core_initcall(qnoc_driver_init);
  2069. MODULE_DESCRIPTION("Volcano NoC driver");
  2070. MODULE_LICENSE("GPL");