msm8996.c 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Qualcomm MSM8996 Network-on-Chip (NoC) QoS driver
  4. *
  5. * Copyright (c) 2021 Yassine Oudjana <y.oudjana@protonmail.com>
  6. */
  7. #include <linux/device.h>
  8. #include <linux/interconnect-provider.h>
  9. #include <linux/io.h>
  10. #include <linux/mod_devicetable.h>
  11. #include <linux/module.h>
  12. #include <linux/platform_device.h>
  13. #include <linux/regmap.h>
  14. #include <dt-bindings/interconnect/qcom,msm8996.h>
  15. #include "icc-rpm.h"
  16. #include "msm8996.h"
  17. static const char * const mm_intf_clocks[] = {
  18. "iface"
  19. };
  20. static const char * const a0noc_intf_clocks[] = {
  21. "aggre0_snoc_axi",
  22. "aggre0_cnoc_ahb",
  23. "aggre0_noc_mpu_cfg"
  24. };
  25. static const char * const a2noc_intf_clocks[] = {
  26. "aggre2_ufs_axi",
  27. "ufs_axi"
  28. };
  29. static const u16 mas_a0noc_common_links[] = {
  30. MSM8996_SLAVE_A0NOC_SNOC
  31. };
  32. static struct qcom_icc_node mas_pcie_0 = {
  33. .name = "mas_pcie_0",
  34. .id = MSM8996_MASTER_PCIE_0,
  35. .buswidth = 8,
  36. .mas_rpm_id = 65,
  37. .slv_rpm_id = -1,
  38. .qos.ap_owned = true,
  39. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  40. .qos.areq_prio = 1,
  41. .qos.prio_level = 1,
  42. .qos.qos_port = 0,
  43. .num_links = ARRAY_SIZE(mas_a0noc_common_links),
  44. .links = mas_a0noc_common_links
  45. };
  46. static struct qcom_icc_node mas_pcie_1 = {
  47. .name = "mas_pcie_1",
  48. .id = MSM8996_MASTER_PCIE_1,
  49. .buswidth = 8,
  50. .mas_rpm_id = 66,
  51. .slv_rpm_id = -1,
  52. .qos.ap_owned = true,
  53. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  54. .qos.areq_prio = 1,
  55. .qos.prio_level = 1,
  56. .qos.qos_port = 1,
  57. .num_links = ARRAY_SIZE(mas_a0noc_common_links),
  58. .links = mas_a0noc_common_links
  59. };
  60. static struct qcom_icc_node mas_pcie_2 = {
  61. .name = "mas_pcie_2",
  62. .id = MSM8996_MASTER_PCIE_2,
  63. .buswidth = 8,
  64. .mas_rpm_id = 119,
  65. .slv_rpm_id = -1,
  66. .qos.ap_owned = true,
  67. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  68. .qos.areq_prio = 1,
  69. .qos.prio_level = 1,
  70. .qos.qos_port = 2,
  71. .num_links = ARRAY_SIZE(mas_a0noc_common_links),
  72. .links = mas_a0noc_common_links
  73. };
  74. static const u16 mas_a1noc_common_links[] = {
  75. MSM8996_SLAVE_A1NOC_SNOC
  76. };
  77. static struct qcom_icc_node mas_cnoc_a1noc = {
  78. .name = "mas_cnoc_a1noc",
  79. .id = MSM8996_MASTER_CNOC_A1NOC,
  80. .buswidth = 8,
  81. .mas_rpm_id = 116,
  82. .slv_rpm_id = -1,
  83. .qos.ap_owned = true,
  84. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  85. .num_links = ARRAY_SIZE(mas_a1noc_common_links),
  86. .links = mas_a1noc_common_links
  87. };
  88. static struct qcom_icc_node mas_crypto_c0 = {
  89. .name = "mas_crypto_c0",
  90. .id = MSM8996_MASTER_CRYPTO_CORE0,
  91. .buswidth = 8,
  92. .mas_rpm_id = 23,
  93. .slv_rpm_id = -1,
  94. .qos.ap_owned = true,
  95. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  96. .qos.areq_prio = 1,
  97. .qos.prio_level = 1,
  98. .qos.qos_port = 0,
  99. .num_links = ARRAY_SIZE(mas_a1noc_common_links),
  100. .links = mas_a1noc_common_links
  101. };
  102. static struct qcom_icc_node mas_pnoc_a1noc = {
  103. .name = "mas_pnoc_a1noc",
  104. .id = MSM8996_MASTER_PNOC_A1NOC,
  105. .buswidth = 8,
  106. .mas_rpm_id = 117,
  107. .slv_rpm_id = -1,
  108. .qos.ap_owned = false,
  109. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  110. .qos.areq_prio = 0,
  111. .qos.prio_level = 0,
  112. .qos.qos_port = 1,
  113. .num_links = ARRAY_SIZE(mas_a1noc_common_links),
  114. .links = mas_a1noc_common_links
  115. };
  116. static const u16 mas_a2noc_common_links[] = {
  117. MSM8996_SLAVE_A2NOC_SNOC
  118. };
  119. static struct qcom_icc_node mas_usb3 = {
  120. .name = "mas_usb3",
  121. .id = MSM8996_MASTER_USB3,
  122. .buswidth = 8,
  123. .mas_rpm_id = 32,
  124. .slv_rpm_id = -1,
  125. .qos.ap_owned = true,
  126. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  127. .qos.areq_prio = 1,
  128. .qos.prio_level = 1,
  129. .qos.qos_port = 3,
  130. .num_links = ARRAY_SIZE(mas_a2noc_common_links),
  131. .links = mas_a2noc_common_links
  132. };
  133. static struct qcom_icc_node mas_ipa = {
  134. .name = "mas_ipa",
  135. .id = MSM8996_MASTER_IPA,
  136. .buswidth = 8,
  137. .mas_rpm_id = 59,
  138. .slv_rpm_id = -1,
  139. .qos.ap_owned = true,
  140. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  141. .qos.areq_prio = 0,
  142. .qos.prio_level = 0,
  143. .qos.qos_port = -1,
  144. .num_links = ARRAY_SIZE(mas_a2noc_common_links),
  145. .links = mas_a2noc_common_links
  146. };
  147. static struct qcom_icc_node mas_ufs = {
  148. .name = "mas_ufs",
  149. .id = MSM8996_MASTER_UFS,
  150. .buswidth = 8,
  151. .mas_rpm_id = 68,
  152. .slv_rpm_id = -1,
  153. .qos.ap_owned = true,
  154. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  155. .qos.areq_prio = 1,
  156. .qos.prio_level = 1,
  157. .qos.qos_port = 2,
  158. .num_links = ARRAY_SIZE(mas_a2noc_common_links),
  159. .links = mas_a2noc_common_links
  160. };
  161. static const u16 mas_apps_proc_links[] = {
  162. MSM8996_SLAVE_BIMC_SNOC_1,
  163. MSM8996_SLAVE_EBI_CH0,
  164. MSM8996_SLAVE_BIMC_SNOC_0
  165. };
  166. static struct qcom_icc_node mas_apps_proc = {
  167. .name = "mas_apps_proc",
  168. .id = MSM8996_MASTER_AMPSS_M0,
  169. .buswidth = 8,
  170. .mas_rpm_id = 0,
  171. .slv_rpm_id = -1,
  172. .qos.ap_owned = true,
  173. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  174. .qos.areq_prio = 0,
  175. .qos.prio_level = 0,
  176. .qos.qos_port = 0,
  177. .num_links = ARRAY_SIZE(mas_apps_proc_links),
  178. .links = mas_apps_proc_links
  179. };
  180. static const u16 mas_oxili_common_links[] = {
  181. MSM8996_SLAVE_BIMC_SNOC_1,
  182. MSM8996_SLAVE_HMSS_L3,
  183. MSM8996_SLAVE_EBI_CH0,
  184. MSM8996_SLAVE_BIMC_SNOC_0
  185. };
  186. static struct qcom_icc_node mas_oxili = {
  187. .name = "mas_oxili",
  188. .id = MSM8996_MASTER_GRAPHICS_3D,
  189. .buswidth = 8,
  190. .mas_rpm_id = 6,
  191. .slv_rpm_id = -1,
  192. .qos.ap_owned = true,
  193. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  194. .qos.areq_prio = 0,
  195. .qos.prio_level = 0,
  196. .qos.qos_port = 1,
  197. .num_links = ARRAY_SIZE(mas_oxili_common_links),
  198. .links = mas_oxili_common_links
  199. };
  200. static struct qcom_icc_node mas_mnoc_bimc = {
  201. .name = "mas_mnoc_bimc",
  202. .id = MSM8996_MASTER_MNOC_BIMC,
  203. .buswidth = 8,
  204. .mas_rpm_id = 2,
  205. .slv_rpm_id = -1,
  206. .qos.ap_owned = true,
  207. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  208. .qos.areq_prio = 0,
  209. .qos.prio_level = 0,
  210. .qos.qos_port = 2,
  211. .num_links = ARRAY_SIZE(mas_oxili_common_links),
  212. .links = mas_oxili_common_links
  213. };
  214. static const u16 mas_snoc_bimc_links[] = {
  215. MSM8996_SLAVE_HMSS_L3,
  216. MSM8996_SLAVE_EBI_CH0
  217. };
  218. static struct qcom_icc_node mas_snoc_bimc = {
  219. .name = "mas_snoc_bimc",
  220. .id = MSM8996_MASTER_SNOC_BIMC,
  221. .buswidth = 8,
  222. .mas_rpm_id = 3,
  223. .slv_rpm_id = -1,
  224. .qos.ap_owned = false,
  225. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  226. .qos.areq_prio = 0,
  227. .qos.prio_level = 0,
  228. .qos.qos_port = -1,
  229. .num_links = ARRAY_SIZE(mas_snoc_bimc_links),
  230. .links = mas_snoc_bimc_links
  231. };
  232. static const u16 mas_snoc_cnoc_links[] = {
  233. MSM8996_SLAVE_CLK_CTL,
  234. MSM8996_SLAVE_RBCPR_CX,
  235. MSM8996_SLAVE_A2NOC_SMMU_CFG,
  236. MSM8996_SLAVE_A0NOC_MPU_CFG,
  237. MSM8996_SLAVE_MESSAGE_RAM,
  238. MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
  239. MSM8996_SLAVE_PCIE_0_CFG,
  240. MSM8996_SLAVE_TLMM,
  241. MSM8996_SLAVE_MPM,
  242. MSM8996_SLAVE_A0NOC_SMMU_CFG,
  243. MSM8996_SLAVE_EBI1_PHY_CFG,
  244. MSM8996_SLAVE_BIMC_CFG,
  245. MSM8996_SLAVE_PIMEM_CFG,
  246. MSM8996_SLAVE_RBCPR_MX,
  247. MSM8996_SLAVE_PRNG,
  248. MSM8996_SLAVE_PCIE20_AHB2PHY,
  249. MSM8996_SLAVE_A2NOC_MPU_CFG,
  250. MSM8996_SLAVE_QDSS_CFG,
  251. MSM8996_SLAVE_A2NOC_CFG,
  252. MSM8996_SLAVE_A0NOC_CFG,
  253. MSM8996_SLAVE_UFS_CFG,
  254. MSM8996_SLAVE_CRYPTO_0_CFG,
  255. MSM8996_SLAVE_PCIE_1_CFG,
  256. MSM8996_SLAVE_SNOC_CFG,
  257. MSM8996_SLAVE_SNOC_MPU_CFG,
  258. MSM8996_SLAVE_A1NOC_MPU_CFG,
  259. MSM8996_SLAVE_A1NOC_SMMU_CFG,
  260. MSM8996_SLAVE_PCIE_2_CFG,
  261. MSM8996_SLAVE_CNOC_MNOC_CFG,
  262. MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
  263. MSM8996_SLAVE_PMIC_ARB,
  264. MSM8996_SLAVE_IMEM_CFG,
  265. MSM8996_SLAVE_A1NOC_CFG,
  266. MSM8996_SLAVE_SSC_CFG,
  267. MSM8996_SLAVE_TCSR,
  268. MSM8996_SLAVE_LPASS_SMMU_CFG,
  269. MSM8996_SLAVE_DCC_CFG
  270. };
  271. static struct qcom_icc_node mas_snoc_cnoc = {
  272. .name = "mas_snoc_cnoc",
  273. .id = MSM8996_MASTER_SNOC_CNOC,
  274. .buswidth = 8,
  275. .mas_rpm_id = 52,
  276. .slv_rpm_id = -1,
  277. .num_links = ARRAY_SIZE(mas_snoc_cnoc_links),
  278. .links = mas_snoc_cnoc_links
  279. };
  280. static const u16 mas_qdss_dap_links[] = {
  281. MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
  282. MSM8996_SLAVE_RBCPR_CX,
  283. MSM8996_SLAVE_A2NOC_SMMU_CFG,
  284. MSM8996_SLAVE_A0NOC_MPU_CFG,
  285. MSM8996_SLAVE_MESSAGE_RAM,
  286. MSM8996_SLAVE_PCIE_0_CFG,
  287. MSM8996_SLAVE_TLMM,
  288. MSM8996_SLAVE_MPM,
  289. MSM8996_SLAVE_A0NOC_SMMU_CFG,
  290. MSM8996_SLAVE_EBI1_PHY_CFG,
  291. MSM8996_SLAVE_BIMC_CFG,
  292. MSM8996_SLAVE_PIMEM_CFG,
  293. MSM8996_SLAVE_RBCPR_MX,
  294. MSM8996_SLAVE_CLK_CTL,
  295. MSM8996_SLAVE_PRNG,
  296. MSM8996_SLAVE_PCIE20_AHB2PHY,
  297. MSM8996_SLAVE_A2NOC_MPU_CFG,
  298. MSM8996_SLAVE_QDSS_CFG,
  299. MSM8996_SLAVE_A2NOC_CFG,
  300. MSM8996_SLAVE_A0NOC_CFG,
  301. MSM8996_SLAVE_UFS_CFG,
  302. MSM8996_SLAVE_CRYPTO_0_CFG,
  303. MSM8996_SLAVE_CNOC_A1NOC,
  304. MSM8996_SLAVE_PCIE_1_CFG,
  305. MSM8996_SLAVE_SNOC_CFG,
  306. MSM8996_SLAVE_SNOC_MPU_CFG,
  307. MSM8996_SLAVE_A1NOC_MPU_CFG,
  308. MSM8996_SLAVE_A1NOC_SMMU_CFG,
  309. MSM8996_SLAVE_PCIE_2_CFG,
  310. MSM8996_SLAVE_CNOC_MNOC_CFG,
  311. MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
  312. MSM8996_SLAVE_PMIC_ARB,
  313. MSM8996_SLAVE_IMEM_CFG,
  314. MSM8996_SLAVE_A1NOC_CFG,
  315. MSM8996_SLAVE_SSC_CFG,
  316. MSM8996_SLAVE_TCSR,
  317. MSM8996_SLAVE_LPASS_SMMU_CFG,
  318. MSM8996_SLAVE_DCC_CFG
  319. };
  320. static struct qcom_icc_node mas_qdss_dap = {
  321. .name = "mas_qdss_dap",
  322. .id = MSM8996_MASTER_QDSS_DAP,
  323. .buswidth = 8,
  324. .mas_rpm_id = 49,
  325. .slv_rpm_id = -1,
  326. .qos.ap_owned = true,
  327. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  328. .num_links = ARRAY_SIZE(mas_qdss_dap_links),
  329. .links = mas_qdss_dap_links
  330. };
  331. static const u16 mas_cnoc_mnoc_mmss_cfg_links[] = {
  332. MSM8996_SLAVE_MMAGIC_CFG,
  333. MSM8996_SLAVE_DSA_MPU_CFG,
  334. MSM8996_SLAVE_MMSS_CLK_CFG,
  335. MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
  336. MSM8996_SLAVE_VENUS_CFG,
  337. MSM8996_SLAVE_SMMU_VFE_CFG,
  338. MSM8996_SLAVE_MISC_CFG,
  339. MSM8996_SLAVE_SMMU_CPP_CFG,
  340. MSM8996_SLAVE_GRAPHICS_3D_CFG,
  341. MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
  342. MSM8996_SLAVE_VENUS_THROTTLE_CFG,
  343. MSM8996_SLAVE_CAMERA_CFG,
  344. MSM8996_SLAVE_DISPLAY_CFG,
  345. MSM8996_SLAVE_CPR_CFG,
  346. MSM8996_SLAVE_SMMU_ROTATOR_CFG,
  347. MSM8996_SLAVE_DSA_CFG,
  348. MSM8996_SLAVE_SMMU_VENUS_CFG,
  349. MSM8996_SLAVE_VMEM_CFG,
  350. MSM8996_SLAVE_SMMU_JPEG_CFG,
  351. MSM8996_SLAVE_SMMU_MDP_CFG,
  352. MSM8996_SLAVE_MNOC_MPU_CFG
  353. };
  354. static struct qcom_icc_node mas_cnoc_mnoc_mmss_cfg = {
  355. .name = "mas_cnoc_mnoc_mmss_cfg",
  356. .id = MSM8996_MASTER_CNOC_MNOC_MMSS_CFG,
  357. .buswidth = 8,
  358. .mas_rpm_id = 4,
  359. .slv_rpm_id = -1,
  360. .qos.ap_owned = true,
  361. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  362. .num_links = ARRAY_SIZE(mas_cnoc_mnoc_mmss_cfg_links),
  363. .links = mas_cnoc_mnoc_mmss_cfg_links
  364. };
  365. static const u16 mas_cnoc_mnoc_cfg_links[] = {
  366. MSM8996_SLAVE_SERVICE_MNOC
  367. };
  368. static struct qcom_icc_node mas_cnoc_mnoc_cfg = {
  369. .name = "mas_cnoc_mnoc_cfg",
  370. .id = MSM8996_MASTER_CNOC_MNOC_CFG,
  371. .buswidth = 8,
  372. .mas_rpm_id = 5,
  373. .slv_rpm_id = -1,
  374. .qos.ap_owned = true,
  375. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  376. .num_links = ARRAY_SIZE(mas_cnoc_mnoc_cfg_links),
  377. .links = mas_cnoc_mnoc_cfg_links
  378. };
  379. static const u16 mas_mnoc_bimc_common_links[] = {
  380. MSM8996_SLAVE_MNOC_BIMC
  381. };
  382. static struct qcom_icc_node mas_cpp = {
  383. .name = "mas_cpp",
  384. .id = MSM8996_MASTER_CPP,
  385. .buswidth = 32,
  386. .mas_rpm_id = 115,
  387. .slv_rpm_id = -1,
  388. .qos.ap_owned = true,
  389. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  390. .qos.areq_prio = 0,
  391. .qos.prio_level = 0,
  392. .qos.qos_port = 5,
  393. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  394. .links = mas_mnoc_bimc_common_links
  395. };
  396. static struct qcom_icc_node mas_jpeg = {
  397. .name = "mas_jpeg",
  398. .id = MSM8996_MASTER_JPEG,
  399. .buswidth = 32,
  400. .mas_rpm_id = 7,
  401. .slv_rpm_id = -1,
  402. .qos.ap_owned = true,
  403. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  404. .qos.areq_prio = 0,
  405. .qos.prio_level = 0,
  406. .qos.qos_port = 7,
  407. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  408. .links = mas_mnoc_bimc_common_links
  409. };
  410. static struct qcom_icc_node mas_mdp_p0 = {
  411. .name = "mas_mdp_p0",
  412. .id = MSM8996_MASTER_MDP_PORT0,
  413. .buswidth = 32,
  414. .ib_coeff = 25,
  415. .mas_rpm_id = 8,
  416. .slv_rpm_id = -1,
  417. .qos.ap_owned = true,
  418. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  419. .qos.areq_prio = 0,
  420. .qos.prio_level = 0,
  421. .qos.qos_port = 1,
  422. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  423. .links = mas_mnoc_bimc_common_links
  424. };
  425. static struct qcom_icc_node mas_mdp_p1 = {
  426. .name = "mas_mdp_p1",
  427. .id = MSM8996_MASTER_MDP_PORT1,
  428. .buswidth = 32,
  429. .ib_coeff = 25,
  430. .mas_rpm_id = 61,
  431. .slv_rpm_id = -1,
  432. .qos.ap_owned = true,
  433. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  434. .qos.areq_prio = 0,
  435. .qos.prio_level = 0,
  436. .qos.qos_port = 2,
  437. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  438. .links = mas_mnoc_bimc_common_links
  439. };
  440. static struct qcom_icc_node mas_rotator = {
  441. .name = "mas_rotator",
  442. .id = MSM8996_MASTER_ROTATOR,
  443. .buswidth = 32,
  444. .mas_rpm_id = 120,
  445. .slv_rpm_id = -1,
  446. .qos.ap_owned = true,
  447. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  448. .qos.areq_prio = 0,
  449. .qos.prio_level = 0,
  450. .qos.qos_port = 0,
  451. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  452. .links = mas_mnoc_bimc_common_links
  453. };
  454. static struct qcom_icc_node mas_venus = {
  455. .name = "mas_venus",
  456. .id = MSM8996_MASTER_VIDEO_P0,
  457. .buswidth = 32,
  458. .mas_rpm_id = 9,
  459. .slv_rpm_id = -1,
  460. .qos.ap_owned = true,
  461. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  462. .qos.areq_prio = 0,
  463. .qos.prio_level = 0,
  464. .qos.qos_port = 3,
  465. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  466. .links = mas_mnoc_bimc_common_links
  467. };
  468. static struct qcom_icc_node mas_vfe = {
  469. .name = "mas_vfe",
  470. .id = MSM8996_MASTER_VFE,
  471. .buswidth = 32,
  472. .mas_rpm_id = 11,
  473. .slv_rpm_id = -1,
  474. .qos.ap_owned = true,
  475. .qos.qos_mode = NOC_QOS_MODE_BYPASS,
  476. .qos.areq_prio = 0,
  477. .qos.prio_level = 0,
  478. .qos.qos_port = 6,
  479. .num_links = ARRAY_SIZE(mas_mnoc_bimc_common_links),
  480. .links = mas_mnoc_bimc_common_links
  481. };
  482. static const u16 mas_vmem_common_links[] = {
  483. MSM8996_SLAVE_VMEM
  484. };
  485. static struct qcom_icc_node mas_snoc_vmem = {
  486. .name = "mas_snoc_vmem",
  487. .id = MSM8996_MASTER_SNOC_VMEM,
  488. .buswidth = 32,
  489. .mas_rpm_id = 114,
  490. .slv_rpm_id = -1,
  491. .qos.ap_owned = true,
  492. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  493. .num_links = ARRAY_SIZE(mas_vmem_common_links),
  494. .links = mas_vmem_common_links
  495. };
  496. static struct qcom_icc_node mas_venus_vmem = {
  497. .name = "mas_venus_vmem",
  498. .id = MSM8996_MASTER_VIDEO_P0_OCMEM,
  499. .buswidth = 32,
  500. .mas_rpm_id = 121,
  501. .slv_rpm_id = -1,
  502. .qos.ap_owned = true,
  503. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  504. .num_links = ARRAY_SIZE(mas_vmem_common_links),
  505. .links = mas_vmem_common_links
  506. };
  507. static const u16 mas_snoc_pnoc_links[] = {
  508. MSM8996_SLAVE_BLSP_1,
  509. MSM8996_SLAVE_BLSP_2,
  510. MSM8996_SLAVE_SDCC_1,
  511. MSM8996_SLAVE_SDCC_2,
  512. MSM8996_SLAVE_SDCC_4,
  513. MSM8996_SLAVE_TSIF,
  514. MSM8996_SLAVE_PDM,
  515. MSM8996_SLAVE_AHB2PHY
  516. };
  517. static struct qcom_icc_node mas_snoc_pnoc = {
  518. .name = "mas_snoc_pnoc",
  519. .id = MSM8996_MASTER_SNOC_PNOC,
  520. .buswidth = 8,
  521. .mas_rpm_id = 44,
  522. .slv_rpm_id = -1,
  523. .num_links = ARRAY_SIZE(mas_snoc_pnoc_links),
  524. .links = mas_snoc_pnoc_links
  525. };
  526. static const u16 mas_pnoc_a1noc_common_links[] = {
  527. MSM8996_SLAVE_PNOC_A1NOC
  528. };
  529. static struct qcom_icc_node mas_sdcc_1 = {
  530. .name = "mas_sdcc_1",
  531. .id = MSM8996_MASTER_SDCC_1,
  532. .buswidth = 8,
  533. .mas_rpm_id = 33,
  534. .slv_rpm_id = -1,
  535. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  536. .links = mas_pnoc_a1noc_common_links
  537. };
  538. static struct qcom_icc_node mas_sdcc_2 = {
  539. .name = "mas_sdcc_2",
  540. .id = MSM8996_MASTER_SDCC_2,
  541. .buswidth = 8,
  542. .mas_rpm_id = 35,
  543. .slv_rpm_id = -1,
  544. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  545. .links = mas_pnoc_a1noc_common_links
  546. };
  547. static struct qcom_icc_node mas_sdcc_4 = {
  548. .name = "mas_sdcc_4",
  549. .id = MSM8996_MASTER_SDCC_4,
  550. .buswidth = 8,
  551. .mas_rpm_id = 36,
  552. .slv_rpm_id = -1,
  553. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  554. .links = mas_pnoc_a1noc_common_links
  555. };
  556. static struct qcom_icc_node mas_usb_hs = {
  557. .name = "mas_usb_hs",
  558. .id = MSM8996_MASTER_USB_HS,
  559. .buswidth = 8,
  560. .mas_rpm_id = 42,
  561. .slv_rpm_id = -1,
  562. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  563. .links = mas_pnoc_a1noc_common_links
  564. };
  565. static struct qcom_icc_node mas_blsp_1 = {
  566. .name = "mas_blsp_1",
  567. .id = MSM8996_MASTER_BLSP_1,
  568. .buswidth = 4,
  569. .mas_rpm_id = 41,
  570. .slv_rpm_id = -1,
  571. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  572. .links = mas_pnoc_a1noc_common_links
  573. };
  574. static struct qcom_icc_node mas_blsp_2 = {
  575. .name = "mas_blsp_2",
  576. .id = MSM8996_MASTER_BLSP_2,
  577. .buswidth = 4,
  578. .mas_rpm_id = 39,
  579. .slv_rpm_id = -1,
  580. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  581. .links = mas_pnoc_a1noc_common_links
  582. };
  583. static struct qcom_icc_node mas_tsif = {
  584. .name = "mas_tsif",
  585. .id = MSM8996_MASTER_TSIF,
  586. .buswidth = 4,
  587. .mas_rpm_id = 37,
  588. .slv_rpm_id = -1,
  589. .num_links = ARRAY_SIZE(mas_pnoc_a1noc_common_links),
  590. .links = mas_pnoc_a1noc_common_links
  591. };
  592. static const u16 mas_hmss_links[] = {
  593. MSM8996_SLAVE_PIMEM,
  594. MSM8996_SLAVE_OCIMEM,
  595. MSM8996_SLAVE_SNOC_BIMC
  596. };
  597. static struct qcom_icc_node mas_hmss = {
  598. .name = "mas_hmss",
  599. .id = MSM8996_MASTER_HMSS,
  600. .buswidth = 8,
  601. .mas_rpm_id = 118,
  602. .slv_rpm_id = -1,
  603. .qos.ap_owned = true,
  604. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  605. .qos.areq_prio = 1,
  606. .qos.prio_level = 1,
  607. .qos.qos_port = 4,
  608. .num_links = ARRAY_SIZE(mas_hmss_links),
  609. .links = mas_hmss_links
  610. };
  611. static const u16 mas_qdss_common_links[] = {
  612. MSM8996_SLAVE_PIMEM,
  613. MSM8996_SLAVE_USB3,
  614. MSM8996_SLAVE_OCIMEM,
  615. MSM8996_SLAVE_SNOC_BIMC,
  616. MSM8996_SLAVE_SNOC_PNOC
  617. };
  618. static struct qcom_icc_node mas_qdss_bam = {
  619. .name = "mas_qdss_bam",
  620. .id = MSM8996_MASTER_QDSS_BAM,
  621. .buswidth = 16,
  622. .mas_rpm_id = 19,
  623. .slv_rpm_id = -1,
  624. .qos.ap_owned = true,
  625. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  626. .qos.areq_prio = 1,
  627. .qos.prio_level = 1,
  628. .qos.qos_port = 2,
  629. .num_links = ARRAY_SIZE(mas_qdss_common_links),
  630. .links = mas_qdss_common_links
  631. };
  632. static const u16 mas_snoc_cfg_links[] = {
  633. MSM8996_SLAVE_SERVICE_SNOC
  634. };
  635. static struct qcom_icc_node mas_snoc_cfg = {
  636. .name = "mas_snoc_cfg",
  637. .id = MSM8996_MASTER_SNOC_CFG,
  638. .buswidth = 16,
  639. .mas_rpm_id = 20,
  640. .slv_rpm_id = -1,
  641. .qos.ap_owned = true,
  642. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  643. .num_links = ARRAY_SIZE(mas_snoc_cfg_links),
  644. .links = mas_snoc_cfg_links
  645. };
  646. static const u16 mas_bimc_snoc_0_links[] = {
  647. MSM8996_SLAVE_SNOC_VMEM,
  648. MSM8996_SLAVE_USB3,
  649. MSM8996_SLAVE_PIMEM,
  650. MSM8996_SLAVE_LPASS,
  651. MSM8996_SLAVE_APPSS,
  652. MSM8996_SLAVE_SNOC_CNOC,
  653. MSM8996_SLAVE_SNOC_PNOC,
  654. MSM8996_SLAVE_OCIMEM,
  655. MSM8996_SLAVE_QDSS_STM
  656. };
  657. static struct qcom_icc_node mas_bimc_snoc_0 = {
  658. .name = "mas_bimc_snoc_0",
  659. .id = MSM8996_MASTER_BIMC_SNOC_0,
  660. .buswidth = 16,
  661. .mas_rpm_id = 21,
  662. .slv_rpm_id = -1,
  663. .qos.ap_owned = true,
  664. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  665. .num_links = ARRAY_SIZE(mas_bimc_snoc_0_links),
  666. .links = mas_bimc_snoc_0_links
  667. };
  668. static const u16 mas_bimc_snoc_1_links[] = {
  669. MSM8996_SLAVE_PCIE_2,
  670. MSM8996_SLAVE_PCIE_1,
  671. MSM8996_SLAVE_PCIE_0
  672. };
  673. static struct qcom_icc_node mas_bimc_snoc_1 = {
  674. .name = "mas_bimc_snoc_1",
  675. .id = MSM8996_MASTER_BIMC_SNOC_1,
  676. .buswidth = 16,
  677. .mas_rpm_id = 109,
  678. .slv_rpm_id = -1,
  679. .qos.ap_owned = true,
  680. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  681. .num_links = ARRAY_SIZE(mas_bimc_snoc_1_links),
  682. .links = mas_bimc_snoc_1_links
  683. };
  684. static const u16 mas_a0noc_snoc_links[] = {
  685. MSM8996_SLAVE_SNOC_PNOC,
  686. MSM8996_SLAVE_OCIMEM,
  687. MSM8996_SLAVE_APPSS,
  688. MSM8996_SLAVE_SNOC_BIMC,
  689. MSM8996_SLAVE_PIMEM
  690. };
  691. static struct qcom_icc_node mas_a0noc_snoc = {
  692. .name = "mas_a0noc_snoc",
  693. .id = MSM8996_MASTER_A0NOC_SNOC,
  694. .buswidth = 16,
  695. .mas_rpm_id = 110,
  696. .slv_rpm_id = -1,
  697. .qos.ap_owned = true,
  698. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  699. .num_links = ARRAY_SIZE(mas_a0noc_snoc_links),
  700. .links = mas_a0noc_snoc_links
  701. };
  702. static const u16 mas_a1noc_snoc_links[] = {
  703. MSM8996_SLAVE_SNOC_VMEM,
  704. MSM8996_SLAVE_USB3,
  705. MSM8996_SLAVE_PCIE_0,
  706. MSM8996_SLAVE_PIMEM,
  707. MSM8996_SLAVE_PCIE_2,
  708. MSM8996_SLAVE_LPASS,
  709. MSM8996_SLAVE_PCIE_1,
  710. MSM8996_SLAVE_APPSS,
  711. MSM8996_SLAVE_SNOC_BIMC,
  712. MSM8996_SLAVE_SNOC_CNOC,
  713. MSM8996_SLAVE_SNOC_PNOC,
  714. MSM8996_SLAVE_OCIMEM,
  715. MSM8996_SLAVE_QDSS_STM
  716. };
  717. static struct qcom_icc_node mas_a1noc_snoc = {
  718. .name = "mas_a1noc_snoc",
  719. .id = MSM8996_MASTER_A1NOC_SNOC,
  720. .buswidth = 16,
  721. .mas_rpm_id = 111,
  722. .slv_rpm_id = -1,
  723. .num_links = ARRAY_SIZE(mas_a1noc_snoc_links),
  724. .links = mas_a1noc_snoc_links
  725. };
  726. static const u16 mas_a2noc_snoc_links[] = {
  727. MSM8996_SLAVE_SNOC_VMEM,
  728. MSM8996_SLAVE_USB3,
  729. MSM8996_SLAVE_PCIE_1,
  730. MSM8996_SLAVE_PIMEM,
  731. MSM8996_SLAVE_PCIE_2,
  732. MSM8996_SLAVE_QDSS_STM,
  733. MSM8996_SLAVE_LPASS,
  734. MSM8996_SLAVE_SNOC_BIMC,
  735. MSM8996_SLAVE_SNOC_CNOC,
  736. MSM8996_SLAVE_SNOC_PNOC,
  737. MSM8996_SLAVE_OCIMEM,
  738. MSM8996_SLAVE_PCIE_0
  739. };
  740. static struct qcom_icc_node mas_a2noc_snoc = {
  741. .name = "mas_a2noc_snoc",
  742. .id = MSM8996_MASTER_A2NOC_SNOC,
  743. .buswidth = 16,
  744. .mas_rpm_id = 112,
  745. .slv_rpm_id = -1,
  746. .num_links = ARRAY_SIZE(mas_a2noc_snoc_links),
  747. .links = mas_a2noc_snoc_links
  748. };
  749. static struct qcom_icc_node mas_qdss_etr = {
  750. .name = "mas_qdss_etr",
  751. .id = MSM8996_MASTER_QDSS_ETR,
  752. .buswidth = 16,
  753. .mas_rpm_id = 31,
  754. .slv_rpm_id = -1,
  755. .qos.ap_owned = true,
  756. .qos.qos_mode = NOC_QOS_MODE_FIXED,
  757. .qos.areq_prio = 1,
  758. .qos.prio_level = 1,
  759. .qos.qos_port = 3,
  760. .num_links = ARRAY_SIZE(mas_qdss_common_links),
  761. .links = mas_qdss_common_links
  762. };
  763. static const u16 slv_a0noc_snoc_links[] = {
  764. MSM8996_MASTER_A0NOC_SNOC
  765. };
  766. static struct qcom_icc_node slv_a0noc_snoc = {
  767. .name = "slv_a0noc_snoc",
  768. .id = MSM8996_SLAVE_A0NOC_SNOC,
  769. .buswidth = 8,
  770. .mas_rpm_id = -1,
  771. .slv_rpm_id = 141,
  772. .qos.ap_owned = true,
  773. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  774. .num_links = ARRAY_SIZE(slv_a0noc_snoc_links),
  775. .links = slv_a0noc_snoc_links
  776. };
  777. static const u16 slv_a1noc_snoc_links[] = {
  778. MSM8996_MASTER_A1NOC_SNOC
  779. };
  780. static struct qcom_icc_node slv_a1noc_snoc = {
  781. .name = "slv_a1noc_snoc",
  782. .id = MSM8996_SLAVE_A1NOC_SNOC,
  783. .buswidth = 8,
  784. .mas_rpm_id = -1,
  785. .slv_rpm_id = 142,
  786. .num_links = ARRAY_SIZE(slv_a1noc_snoc_links),
  787. .links = slv_a1noc_snoc_links
  788. };
  789. static const u16 slv_a2noc_snoc_links[] = {
  790. MSM8996_MASTER_A2NOC_SNOC
  791. };
  792. static struct qcom_icc_node slv_a2noc_snoc = {
  793. .name = "slv_a2noc_snoc",
  794. .id = MSM8996_SLAVE_A2NOC_SNOC,
  795. .buswidth = 8,
  796. .mas_rpm_id = -1,
  797. .slv_rpm_id = 143,
  798. .num_links = ARRAY_SIZE(slv_a2noc_snoc_links),
  799. .links = slv_a2noc_snoc_links
  800. };
  801. static struct qcom_icc_node slv_ebi = {
  802. .name = "slv_ebi",
  803. .id = MSM8996_SLAVE_EBI_CH0,
  804. .buswidth = 8,
  805. .mas_rpm_id = -1,
  806. .slv_rpm_id = 0
  807. };
  808. static struct qcom_icc_node slv_hmss_l3 = {
  809. .name = "slv_hmss_l3",
  810. .id = MSM8996_SLAVE_HMSS_L3,
  811. .buswidth = 8,
  812. .mas_rpm_id = -1,
  813. .slv_rpm_id = 160
  814. };
  815. static const u16 slv_bimc_snoc_0_links[] = {
  816. MSM8996_MASTER_BIMC_SNOC_0
  817. };
  818. static struct qcom_icc_node slv_bimc_snoc_0 = {
  819. .name = "slv_bimc_snoc_0",
  820. .id = MSM8996_SLAVE_BIMC_SNOC_0,
  821. .buswidth = 8,
  822. .mas_rpm_id = -1,
  823. .slv_rpm_id = 2,
  824. .qos.ap_owned = true,
  825. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  826. .num_links = ARRAY_SIZE(slv_bimc_snoc_0_links),
  827. .links = slv_bimc_snoc_0_links
  828. };
  829. static const u16 slv_bimc_snoc_1_links[] = {
  830. MSM8996_MASTER_BIMC_SNOC_1
  831. };
  832. static struct qcom_icc_node slv_bimc_snoc_1 = {
  833. .name = "slv_bimc_snoc_1",
  834. .id = MSM8996_SLAVE_BIMC_SNOC_1,
  835. .buswidth = 8,
  836. .mas_rpm_id = -1,
  837. .slv_rpm_id = 138,
  838. .qos.ap_owned = true,
  839. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  840. .num_links = ARRAY_SIZE(slv_bimc_snoc_1_links),
  841. .links = slv_bimc_snoc_1_links
  842. };
  843. static const u16 slv_cnoc_a1noc_links[] = {
  844. MSM8996_MASTER_CNOC_A1NOC
  845. };
  846. static struct qcom_icc_node slv_cnoc_a1noc = {
  847. .name = "slv_cnoc_a1noc",
  848. .id = MSM8996_SLAVE_CNOC_A1NOC,
  849. .buswidth = 4,
  850. .mas_rpm_id = -1,
  851. .slv_rpm_id = 75,
  852. .qos.ap_owned = true,
  853. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  854. .num_links = ARRAY_SIZE(slv_cnoc_a1noc_links),
  855. .links = slv_cnoc_a1noc_links
  856. };
  857. static struct qcom_icc_node slv_clk_ctl = {
  858. .name = "slv_clk_ctl",
  859. .id = MSM8996_SLAVE_CLK_CTL,
  860. .buswidth = 4,
  861. .mas_rpm_id = -1,
  862. .slv_rpm_id = 47
  863. };
  864. static struct qcom_icc_node slv_tcsr = {
  865. .name = "slv_tcsr",
  866. .id = MSM8996_SLAVE_TCSR,
  867. .buswidth = 4,
  868. .mas_rpm_id = -1,
  869. .slv_rpm_id = 50
  870. };
  871. static struct qcom_icc_node slv_tlmm = {
  872. .name = "slv_tlmm",
  873. .id = MSM8996_SLAVE_TLMM,
  874. .buswidth = 4,
  875. .mas_rpm_id = -1,
  876. .slv_rpm_id = 51
  877. };
  878. static struct qcom_icc_node slv_crypto0_cfg = {
  879. .name = "slv_crypto0_cfg",
  880. .id = MSM8996_SLAVE_CRYPTO_0_CFG,
  881. .buswidth = 4,
  882. .mas_rpm_id = -1,
  883. .slv_rpm_id = 52,
  884. .qos.ap_owned = true,
  885. .qos.qos_mode = NOC_QOS_MODE_INVALID
  886. };
  887. static struct qcom_icc_node slv_mpm = {
  888. .name = "slv_mpm",
  889. .id = MSM8996_SLAVE_MPM,
  890. .buswidth = 4,
  891. .mas_rpm_id = -1,
  892. .slv_rpm_id = 62,
  893. .qos.ap_owned = true,
  894. .qos.qos_mode = NOC_QOS_MODE_INVALID
  895. };
  896. static struct qcom_icc_node slv_pimem_cfg = {
  897. .name = "slv_pimem_cfg",
  898. .id = MSM8996_SLAVE_PIMEM_CFG,
  899. .buswidth = 4,
  900. .mas_rpm_id = -1,
  901. .slv_rpm_id = 167,
  902. .qos.ap_owned = true,
  903. .qos.qos_mode = NOC_QOS_MODE_INVALID
  904. };
  905. static struct qcom_icc_node slv_imem_cfg = {
  906. .name = "slv_imem_cfg",
  907. .id = MSM8996_SLAVE_IMEM_CFG,
  908. .buswidth = 4,
  909. .mas_rpm_id = -1,
  910. .slv_rpm_id = 54,
  911. .qos.ap_owned = true,
  912. .qos.qos_mode = NOC_QOS_MODE_INVALID
  913. };
  914. static struct qcom_icc_node slv_message_ram = {
  915. .name = "slv_message_ram",
  916. .id = MSM8996_SLAVE_MESSAGE_RAM,
  917. .buswidth = 4,
  918. .mas_rpm_id = -1,
  919. .slv_rpm_id = 55
  920. };
  921. static struct qcom_icc_node slv_bimc_cfg = {
  922. .name = "slv_bimc_cfg",
  923. .id = MSM8996_SLAVE_BIMC_CFG,
  924. .buswidth = 4,
  925. .mas_rpm_id = -1,
  926. .slv_rpm_id = 56,
  927. .qos.ap_owned = true,
  928. .qos.qos_mode = NOC_QOS_MODE_INVALID
  929. };
  930. static struct qcom_icc_node slv_pmic_arb = {
  931. .name = "slv_pmic_arb",
  932. .id = MSM8996_SLAVE_PMIC_ARB,
  933. .buswidth = 4,
  934. .mas_rpm_id = -1,
  935. .slv_rpm_id = 59
  936. };
  937. static struct qcom_icc_node slv_prng = {
  938. .name = "slv_prng",
  939. .id = MSM8996_SLAVE_PRNG,
  940. .buswidth = 4,
  941. .mas_rpm_id = -1,
  942. .slv_rpm_id = 127,
  943. .qos.ap_owned = true,
  944. .qos.qos_mode = NOC_QOS_MODE_INVALID
  945. };
  946. static struct qcom_icc_node slv_dcc_cfg = {
  947. .name = "slv_dcc_cfg",
  948. .id = MSM8996_SLAVE_DCC_CFG,
  949. .buswidth = 4,
  950. .mas_rpm_id = -1,
  951. .slv_rpm_id = 155,
  952. .qos.ap_owned = true,
  953. .qos.qos_mode = NOC_QOS_MODE_INVALID
  954. };
  955. static struct qcom_icc_node slv_rbcpr_mx = {
  956. .name = "slv_rbcpr_mx",
  957. .id = MSM8996_SLAVE_RBCPR_MX,
  958. .buswidth = 4,
  959. .mas_rpm_id = -1,
  960. .slv_rpm_id = 170,
  961. .qos.ap_owned = true,
  962. .qos.qos_mode = NOC_QOS_MODE_INVALID
  963. };
  964. static struct qcom_icc_node slv_qdss_cfg = {
  965. .name = "slv_qdss_cfg",
  966. .id = MSM8996_SLAVE_QDSS_CFG,
  967. .buswidth = 4,
  968. .mas_rpm_id = -1,
  969. .slv_rpm_id = 63,
  970. .qos.ap_owned = true,
  971. .qos.qos_mode = NOC_QOS_MODE_INVALID
  972. };
  973. static struct qcom_icc_node slv_rbcpr_cx = {
  974. .name = "slv_rbcpr_cx",
  975. .id = MSM8996_SLAVE_RBCPR_CX,
  976. .buswidth = 4,
  977. .mas_rpm_id = -1,
  978. .slv_rpm_id = 169,
  979. .qos.ap_owned = true,
  980. .qos.qos_mode = NOC_QOS_MODE_INVALID
  981. };
  982. static struct qcom_icc_node slv_cpu_apu_cfg = {
  983. .name = "slv_cpu_apu_cfg",
  984. .id = MSM8996_SLAVE_QDSS_RBCPR_APU_CFG,
  985. .buswidth = 4,
  986. .mas_rpm_id = -1,
  987. .slv_rpm_id = 168,
  988. .qos.ap_owned = true,
  989. .qos.qos_mode = NOC_QOS_MODE_INVALID
  990. };
  991. static const u16 slv_cnoc_mnoc_cfg_links[] = {
  992. MSM8996_MASTER_CNOC_MNOC_CFG
  993. };
  994. static struct qcom_icc_node slv_cnoc_mnoc_cfg = {
  995. .name = "slv_cnoc_mnoc_cfg",
  996. .id = MSM8996_SLAVE_CNOC_MNOC_CFG,
  997. .buswidth = 4,
  998. .mas_rpm_id = -1,
  999. .slv_rpm_id = 66,
  1000. .qos.ap_owned = true,
  1001. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1002. .num_links = ARRAY_SIZE(slv_cnoc_mnoc_cfg_links),
  1003. .links = slv_cnoc_mnoc_cfg_links
  1004. };
  1005. static struct qcom_icc_node slv_snoc_cfg = {
  1006. .name = "slv_snoc_cfg",
  1007. .id = MSM8996_SLAVE_SNOC_CFG,
  1008. .buswidth = 4,
  1009. .mas_rpm_id = -1,
  1010. .slv_rpm_id = 70,
  1011. .qos.ap_owned = true,
  1012. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1013. };
  1014. static struct qcom_icc_node slv_snoc_mpu_cfg = {
  1015. .name = "slv_snoc_mpu_cfg",
  1016. .id = MSM8996_SLAVE_SNOC_MPU_CFG,
  1017. .buswidth = 4,
  1018. .mas_rpm_id = -1,
  1019. .slv_rpm_id = 67,
  1020. .qos.ap_owned = true,
  1021. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1022. };
  1023. static struct qcom_icc_node slv_ebi1_phy_cfg = {
  1024. .name = "slv_ebi1_phy_cfg",
  1025. .id = MSM8996_SLAVE_EBI1_PHY_CFG,
  1026. .buswidth = 4,
  1027. .mas_rpm_id = -1,
  1028. .slv_rpm_id = 73,
  1029. .qos.ap_owned = true,
  1030. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1031. };
  1032. static struct qcom_icc_node slv_a0noc_cfg = {
  1033. .name = "slv_a0noc_cfg",
  1034. .id = MSM8996_SLAVE_A0NOC_CFG,
  1035. .buswidth = 4,
  1036. .mas_rpm_id = -1,
  1037. .slv_rpm_id = 144,
  1038. .qos.ap_owned = true,
  1039. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1040. };
  1041. static struct qcom_icc_node slv_pcie_1_cfg = {
  1042. .name = "slv_pcie_1_cfg",
  1043. .id = MSM8996_SLAVE_PCIE_1_CFG,
  1044. .buswidth = 4,
  1045. .mas_rpm_id = -1,
  1046. .slv_rpm_id = 89,
  1047. .qos.ap_owned = true,
  1048. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1049. };
  1050. static struct qcom_icc_node slv_pcie_2_cfg = {
  1051. .name = "slv_pcie_2_cfg",
  1052. .id = MSM8996_SLAVE_PCIE_2_CFG,
  1053. .buswidth = 4,
  1054. .mas_rpm_id = -1,
  1055. .slv_rpm_id = 165,
  1056. .qos.ap_owned = true,
  1057. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1058. };
  1059. static struct qcom_icc_node slv_pcie_0_cfg = {
  1060. .name = "slv_pcie_0_cfg",
  1061. .id = MSM8996_SLAVE_PCIE_0_CFG,
  1062. .buswidth = 4,
  1063. .mas_rpm_id = -1,
  1064. .slv_rpm_id = 88,
  1065. .qos.ap_owned = true,
  1066. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1067. };
  1068. static struct qcom_icc_node slv_pcie20_ahb2phy = {
  1069. .name = "slv_pcie20_ahb2phy",
  1070. .id = MSM8996_SLAVE_PCIE20_AHB2PHY,
  1071. .buswidth = 4,
  1072. .mas_rpm_id = -1,
  1073. .slv_rpm_id = 163,
  1074. .qos.ap_owned = true,
  1075. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1076. };
  1077. static struct qcom_icc_node slv_a0noc_mpu_cfg = {
  1078. .name = "slv_a0noc_mpu_cfg",
  1079. .id = MSM8996_SLAVE_A0NOC_MPU_CFG,
  1080. .buswidth = 4,
  1081. .mas_rpm_id = -1,
  1082. .slv_rpm_id = 145,
  1083. .qos.ap_owned = true,
  1084. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1085. };
  1086. static struct qcom_icc_node slv_ufs_cfg = {
  1087. .name = "slv_ufs_cfg",
  1088. .id = MSM8996_SLAVE_UFS_CFG,
  1089. .buswidth = 4,
  1090. .mas_rpm_id = -1,
  1091. .slv_rpm_id = 92,
  1092. .qos.ap_owned = true,
  1093. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1094. };
  1095. static struct qcom_icc_node slv_a1noc_cfg = {
  1096. .name = "slv_a1noc_cfg",
  1097. .id = MSM8996_SLAVE_A1NOC_CFG,
  1098. .buswidth = 4,
  1099. .mas_rpm_id = -1,
  1100. .slv_rpm_id = 147,
  1101. .qos.ap_owned = true,
  1102. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1103. };
  1104. static struct qcom_icc_node slv_a1noc_mpu_cfg = {
  1105. .name = "slv_a1noc_mpu_cfg",
  1106. .id = MSM8996_SLAVE_A1NOC_MPU_CFG,
  1107. .buswidth = 4,
  1108. .mas_rpm_id = -1,
  1109. .slv_rpm_id = 148,
  1110. .qos.ap_owned = true,
  1111. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1112. };
  1113. static struct qcom_icc_node slv_a2noc_cfg = {
  1114. .name = "slv_a2noc_cfg",
  1115. .id = MSM8996_SLAVE_A2NOC_CFG,
  1116. .buswidth = 4,
  1117. .mas_rpm_id = -1,
  1118. .slv_rpm_id = 150,
  1119. .qos.ap_owned = true,
  1120. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1121. };
  1122. static struct qcom_icc_node slv_a2noc_mpu_cfg = {
  1123. .name = "slv_a2noc_mpu_cfg",
  1124. .id = MSM8996_SLAVE_A2NOC_MPU_CFG,
  1125. .buswidth = 4,
  1126. .mas_rpm_id = -1,
  1127. .slv_rpm_id = 151,
  1128. .qos.ap_owned = true,
  1129. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1130. };
  1131. static struct qcom_icc_node slv_ssc_cfg = {
  1132. .name = "slv_ssc_cfg",
  1133. .id = MSM8996_SLAVE_SSC_CFG,
  1134. .buswidth = 4,
  1135. .mas_rpm_id = -1,
  1136. .slv_rpm_id = 177,
  1137. .qos.ap_owned = true,
  1138. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1139. };
  1140. static struct qcom_icc_node slv_a0noc_smmu_cfg = {
  1141. .name = "slv_a0noc_smmu_cfg",
  1142. .id = MSM8996_SLAVE_A0NOC_SMMU_CFG,
  1143. .buswidth = 8,
  1144. .mas_rpm_id = -1,
  1145. .slv_rpm_id = 146,
  1146. .qos.ap_owned = true,
  1147. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1148. };
  1149. static struct qcom_icc_node slv_a1noc_smmu_cfg = {
  1150. .name = "slv_a1noc_smmu_cfg",
  1151. .id = MSM8996_SLAVE_A1NOC_SMMU_CFG,
  1152. .buswidth = 8,
  1153. .mas_rpm_id = -1,
  1154. .slv_rpm_id = 149,
  1155. .qos.ap_owned = true,
  1156. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1157. };
  1158. static struct qcom_icc_node slv_a2noc_smmu_cfg = {
  1159. .name = "slv_a2noc_smmu_cfg",
  1160. .id = MSM8996_SLAVE_A2NOC_SMMU_CFG,
  1161. .buswidth = 8,
  1162. .mas_rpm_id = -1,
  1163. .slv_rpm_id = 152,
  1164. .qos.ap_owned = true,
  1165. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1166. };
  1167. static struct qcom_icc_node slv_lpass_smmu_cfg = {
  1168. .name = "slv_lpass_smmu_cfg",
  1169. .id = MSM8996_SLAVE_LPASS_SMMU_CFG,
  1170. .buswidth = 8,
  1171. .mas_rpm_id = -1,
  1172. .slv_rpm_id = 161,
  1173. .qos.ap_owned = true,
  1174. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1175. };
  1176. static const u16 slv_cnoc_mnoc_mmss_cfg_links[] = {
  1177. MSM8996_MASTER_CNOC_MNOC_MMSS_CFG
  1178. };
  1179. static struct qcom_icc_node slv_cnoc_mnoc_mmss_cfg = {
  1180. .name = "slv_cnoc_mnoc_mmss_cfg",
  1181. .id = MSM8996_SLAVE_CNOC_MNOC_MMSS_CFG,
  1182. .buswidth = 8,
  1183. .mas_rpm_id = -1,
  1184. .slv_rpm_id = 58,
  1185. .qos.ap_owned = true,
  1186. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1187. .num_links = ARRAY_SIZE(slv_cnoc_mnoc_mmss_cfg_links),
  1188. .links = slv_cnoc_mnoc_mmss_cfg_links
  1189. };
  1190. static struct qcom_icc_node slv_mmagic_cfg = {
  1191. .name = "slv_mmagic_cfg",
  1192. .id = MSM8996_SLAVE_MMAGIC_CFG,
  1193. .buswidth = 8,
  1194. .mas_rpm_id = -1,
  1195. .slv_rpm_id = 162,
  1196. .qos.ap_owned = true,
  1197. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1198. };
  1199. static struct qcom_icc_node slv_cpr_cfg = {
  1200. .name = "slv_cpr_cfg",
  1201. .id = MSM8996_SLAVE_CPR_CFG,
  1202. .buswidth = 8,
  1203. .mas_rpm_id = -1,
  1204. .slv_rpm_id = 6,
  1205. .qos.ap_owned = true,
  1206. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1207. };
  1208. static struct qcom_icc_node slv_misc_cfg = {
  1209. .name = "slv_misc_cfg",
  1210. .id = MSM8996_SLAVE_MISC_CFG,
  1211. .buswidth = 8,
  1212. .mas_rpm_id = -1,
  1213. .slv_rpm_id = 8,
  1214. .qos.ap_owned = true,
  1215. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1216. };
  1217. static struct qcom_icc_node slv_venus_throttle_cfg = {
  1218. .name = "slv_venus_throttle_cfg",
  1219. .id = MSM8996_SLAVE_VENUS_THROTTLE_CFG,
  1220. .buswidth = 8,
  1221. .mas_rpm_id = -1,
  1222. .slv_rpm_id = 178,
  1223. .qos.ap_owned = true,
  1224. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1225. };
  1226. static struct qcom_icc_node slv_venus_cfg = {
  1227. .name = "slv_venus_cfg",
  1228. .id = MSM8996_SLAVE_VENUS_CFG,
  1229. .buswidth = 8,
  1230. .mas_rpm_id = -1,
  1231. .slv_rpm_id = 10,
  1232. .qos.ap_owned = true,
  1233. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1234. };
  1235. static struct qcom_icc_node slv_vmem_cfg = {
  1236. .name = "slv_vmem_cfg",
  1237. .id = MSM8996_SLAVE_VMEM_CFG,
  1238. .buswidth = 8,
  1239. .mas_rpm_id = -1,
  1240. .slv_rpm_id = 180,
  1241. .qos.ap_owned = true,
  1242. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1243. };
  1244. static struct qcom_icc_node slv_dsa_cfg = {
  1245. .name = "slv_dsa_cfg",
  1246. .id = MSM8996_SLAVE_DSA_CFG,
  1247. .buswidth = 8,
  1248. .mas_rpm_id = -1,
  1249. .slv_rpm_id = 157,
  1250. .qos.ap_owned = true,
  1251. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1252. };
  1253. static struct qcom_icc_node slv_mnoc_clocks_cfg = {
  1254. .name = "slv_mnoc_clocks_cfg",
  1255. .id = MSM8996_SLAVE_MMSS_CLK_CFG,
  1256. .buswidth = 8,
  1257. .mas_rpm_id = -1,
  1258. .slv_rpm_id = 12,
  1259. .qos.ap_owned = true,
  1260. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1261. };
  1262. static struct qcom_icc_node slv_dsa_mpu_cfg = {
  1263. .name = "slv_dsa_mpu_cfg",
  1264. .id = MSM8996_SLAVE_DSA_MPU_CFG,
  1265. .buswidth = 8,
  1266. .mas_rpm_id = -1,
  1267. .slv_rpm_id = 158,
  1268. .qos.ap_owned = true,
  1269. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1270. };
  1271. static struct qcom_icc_node slv_mnoc_mpu_cfg = {
  1272. .name = "slv_mnoc_mpu_cfg",
  1273. .id = MSM8996_SLAVE_MNOC_MPU_CFG,
  1274. .buswidth = 8,
  1275. .mas_rpm_id = -1,
  1276. .slv_rpm_id = 14,
  1277. .qos.ap_owned = true,
  1278. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1279. };
  1280. static struct qcom_icc_node slv_display_cfg = {
  1281. .name = "slv_display_cfg",
  1282. .id = MSM8996_SLAVE_DISPLAY_CFG,
  1283. .buswidth = 8,
  1284. .mas_rpm_id = -1,
  1285. .slv_rpm_id = 4,
  1286. .qos.ap_owned = true,
  1287. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1288. };
  1289. static struct qcom_icc_node slv_display_throttle_cfg = {
  1290. .name = "slv_display_throttle_cfg",
  1291. .id = MSM8996_SLAVE_DISPLAY_THROTTLE_CFG,
  1292. .buswidth = 8,
  1293. .mas_rpm_id = -1,
  1294. .slv_rpm_id = 156,
  1295. .qos.ap_owned = true,
  1296. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1297. };
  1298. static struct qcom_icc_node slv_camera_cfg = {
  1299. .name = "slv_camera_cfg",
  1300. .id = MSM8996_SLAVE_CAMERA_CFG,
  1301. .buswidth = 8,
  1302. .mas_rpm_id = -1,
  1303. .slv_rpm_id = 3,
  1304. .qos.ap_owned = true,
  1305. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1306. };
  1307. static struct qcom_icc_node slv_camera_throttle_cfg = {
  1308. .name = "slv_camera_throttle_cfg",
  1309. .id = MSM8996_SLAVE_CAMERA_THROTTLE_CFG,
  1310. .buswidth = 8,
  1311. .mas_rpm_id = -1,
  1312. .slv_rpm_id = 154,
  1313. .qos.ap_owned = true,
  1314. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1315. };
  1316. static struct qcom_icc_node slv_oxili_cfg = {
  1317. .name = "slv_oxili_cfg",
  1318. .id = MSM8996_SLAVE_GRAPHICS_3D_CFG,
  1319. .buswidth = 8,
  1320. .mas_rpm_id = -1,
  1321. .slv_rpm_id = 11,
  1322. .qos.ap_owned = true,
  1323. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1324. };
  1325. static struct qcom_icc_node slv_smmu_mdp_cfg = {
  1326. .name = "slv_smmu_mdp_cfg",
  1327. .id = MSM8996_SLAVE_SMMU_MDP_CFG,
  1328. .buswidth = 8,
  1329. .mas_rpm_id = -1,
  1330. .slv_rpm_id = 173,
  1331. .qos.ap_owned = true,
  1332. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1333. };
  1334. static struct qcom_icc_node slv_smmu_rot_cfg = {
  1335. .name = "slv_smmu_rot_cfg",
  1336. .id = MSM8996_SLAVE_SMMU_ROTATOR_CFG,
  1337. .buswidth = 8,
  1338. .mas_rpm_id = -1,
  1339. .slv_rpm_id = 174,
  1340. .qos.ap_owned = true,
  1341. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1342. };
  1343. static struct qcom_icc_node slv_smmu_venus_cfg = {
  1344. .name = "slv_smmu_venus_cfg",
  1345. .id = MSM8996_SLAVE_SMMU_VENUS_CFG,
  1346. .buswidth = 8,
  1347. .mas_rpm_id = -1,
  1348. .slv_rpm_id = 175,
  1349. .qos.ap_owned = true,
  1350. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1351. };
  1352. static struct qcom_icc_node slv_smmu_cpp_cfg = {
  1353. .name = "slv_smmu_cpp_cfg",
  1354. .id = MSM8996_SLAVE_SMMU_CPP_CFG,
  1355. .buswidth = 8,
  1356. .mas_rpm_id = -1,
  1357. .slv_rpm_id = 171,
  1358. .qos.ap_owned = true,
  1359. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1360. };
  1361. static struct qcom_icc_node slv_smmu_jpeg_cfg = {
  1362. .name = "slv_smmu_jpeg_cfg",
  1363. .id = MSM8996_SLAVE_SMMU_JPEG_CFG,
  1364. .buswidth = 8,
  1365. .mas_rpm_id = -1,
  1366. .slv_rpm_id = 172,
  1367. .qos.ap_owned = true,
  1368. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1369. };
  1370. static struct qcom_icc_node slv_smmu_vfe_cfg = {
  1371. .name = "slv_smmu_vfe_cfg",
  1372. .id = MSM8996_SLAVE_SMMU_VFE_CFG,
  1373. .buswidth = 8,
  1374. .mas_rpm_id = -1,
  1375. .slv_rpm_id = 176,
  1376. .qos.ap_owned = true,
  1377. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1378. };
  1379. static const u16 slv_mnoc_bimc_links[] = {
  1380. MSM8996_MASTER_MNOC_BIMC
  1381. };
  1382. static struct qcom_icc_node slv_mnoc_bimc = {
  1383. .name = "slv_mnoc_bimc",
  1384. .id = MSM8996_SLAVE_MNOC_BIMC,
  1385. .buswidth = 32,
  1386. .mas_rpm_id = -1,
  1387. .slv_rpm_id = 16,
  1388. .qos.ap_owned = true,
  1389. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1390. .num_links = ARRAY_SIZE(slv_mnoc_bimc_links),
  1391. .links = slv_mnoc_bimc_links
  1392. };
  1393. static struct qcom_icc_node slv_vmem = {
  1394. .name = "slv_vmem",
  1395. .id = MSM8996_SLAVE_VMEM,
  1396. .buswidth = 32,
  1397. .mas_rpm_id = -1,
  1398. .slv_rpm_id = 179,
  1399. .qos.ap_owned = true,
  1400. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1401. };
  1402. static struct qcom_icc_node slv_srvc_mnoc = {
  1403. .name = "slv_srvc_mnoc",
  1404. .id = MSM8996_SLAVE_SERVICE_MNOC,
  1405. .buswidth = 8,
  1406. .mas_rpm_id = -1,
  1407. .slv_rpm_id = 17,
  1408. .qos.ap_owned = true,
  1409. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1410. };
  1411. static const u16 slv_pnoc_a1noc_links[] = {
  1412. MSM8996_MASTER_PNOC_A1NOC
  1413. };
  1414. static struct qcom_icc_node slv_pnoc_a1noc = {
  1415. .name = "slv_pnoc_a1noc",
  1416. .id = MSM8996_SLAVE_PNOC_A1NOC,
  1417. .buswidth = 8,
  1418. .mas_rpm_id = -1,
  1419. .slv_rpm_id = 139,
  1420. .num_links = ARRAY_SIZE(slv_pnoc_a1noc_links),
  1421. .links = slv_pnoc_a1noc_links
  1422. };
  1423. static struct qcom_icc_node slv_usb_hs = {
  1424. .name = "slv_usb_hs",
  1425. .id = MSM8996_SLAVE_USB_HS,
  1426. .buswidth = 4,
  1427. .mas_rpm_id = -1,
  1428. .slv_rpm_id = 40
  1429. };
  1430. static struct qcom_icc_node slv_sdcc_2 = {
  1431. .name = "slv_sdcc_2",
  1432. .id = MSM8996_SLAVE_SDCC_2,
  1433. .buswidth = 4,
  1434. .mas_rpm_id = -1,
  1435. .slv_rpm_id = 33
  1436. };
  1437. static struct qcom_icc_node slv_sdcc_4 = {
  1438. .name = "slv_sdcc_4",
  1439. .id = MSM8996_SLAVE_SDCC_4,
  1440. .buswidth = 4,
  1441. .mas_rpm_id = -1,
  1442. .slv_rpm_id = 34
  1443. };
  1444. static struct qcom_icc_node slv_tsif = {
  1445. .name = "slv_tsif",
  1446. .id = MSM8996_SLAVE_TSIF,
  1447. .buswidth = 4,
  1448. .mas_rpm_id = -1,
  1449. .slv_rpm_id = 35
  1450. };
  1451. static struct qcom_icc_node slv_blsp_2 = {
  1452. .name = "slv_blsp_2",
  1453. .id = MSM8996_SLAVE_BLSP_2,
  1454. .buswidth = 4,
  1455. .mas_rpm_id = -1,
  1456. .slv_rpm_id = 37
  1457. };
  1458. static struct qcom_icc_node slv_sdcc_1 = {
  1459. .name = "slv_sdcc_1",
  1460. .id = MSM8996_SLAVE_SDCC_1,
  1461. .buswidth = 4,
  1462. .mas_rpm_id = -1,
  1463. .slv_rpm_id = 31
  1464. };
  1465. static struct qcom_icc_node slv_blsp_1 = {
  1466. .name = "slv_blsp_1",
  1467. .id = MSM8996_SLAVE_BLSP_1,
  1468. .buswidth = 4,
  1469. .mas_rpm_id = -1,
  1470. .slv_rpm_id = 39
  1471. };
  1472. static struct qcom_icc_node slv_pdm = {
  1473. .name = "slv_pdm",
  1474. .id = MSM8996_SLAVE_PDM,
  1475. .buswidth = 4,
  1476. .mas_rpm_id = -1,
  1477. .slv_rpm_id = 41
  1478. };
  1479. static struct qcom_icc_node slv_ahb2phy = {
  1480. .name = "slv_ahb2phy",
  1481. .id = MSM8996_SLAVE_AHB2PHY,
  1482. .buswidth = 4,
  1483. .mas_rpm_id = -1,
  1484. .slv_rpm_id = 153,
  1485. .qos.ap_owned = true,
  1486. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1487. };
  1488. static struct qcom_icc_node slv_hmss = {
  1489. .name = "slv_hmss",
  1490. .id = MSM8996_SLAVE_APPSS,
  1491. .buswidth = 16,
  1492. .mas_rpm_id = -1,
  1493. .slv_rpm_id = 20,
  1494. .qos.ap_owned = true,
  1495. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1496. };
  1497. static struct qcom_icc_node slv_lpass = {
  1498. .name = "slv_lpass",
  1499. .id = MSM8996_SLAVE_LPASS,
  1500. .buswidth = 16,
  1501. .mas_rpm_id = -1,
  1502. .slv_rpm_id = 21,
  1503. .qos.ap_owned = true,
  1504. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1505. };
  1506. static struct qcom_icc_node slv_usb3 = {
  1507. .name = "slv_usb3",
  1508. .id = MSM8996_SLAVE_USB3,
  1509. .buswidth = 16,
  1510. .mas_rpm_id = -1,
  1511. .slv_rpm_id = 22,
  1512. .qos.ap_owned = true,
  1513. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1514. };
  1515. static const u16 slv_snoc_bimc_links[] = {
  1516. MSM8996_MASTER_SNOC_BIMC
  1517. };
  1518. static struct qcom_icc_node slv_snoc_bimc = {
  1519. .name = "slv_snoc_bimc",
  1520. .id = MSM8996_SLAVE_SNOC_BIMC,
  1521. .buswidth = 32,
  1522. .mas_rpm_id = -1,
  1523. .slv_rpm_id = 24,
  1524. .num_links = ARRAY_SIZE(slv_snoc_bimc_links),
  1525. .links = slv_snoc_bimc_links
  1526. };
  1527. static const u16 slv_snoc_cnoc_links[] = {
  1528. MSM8996_MASTER_SNOC_CNOC
  1529. };
  1530. static struct qcom_icc_node slv_snoc_cnoc = {
  1531. .name = "slv_snoc_cnoc",
  1532. .id = MSM8996_SLAVE_SNOC_CNOC,
  1533. .buswidth = 16,
  1534. .mas_rpm_id = -1,
  1535. .slv_rpm_id = 25,
  1536. .num_links = ARRAY_SIZE(slv_snoc_cnoc_links),
  1537. .links = slv_snoc_cnoc_links
  1538. };
  1539. static struct qcom_icc_node slv_imem = {
  1540. .name = "slv_imem",
  1541. .id = MSM8996_SLAVE_OCIMEM,
  1542. .buswidth = 16,
  1543. .mas_rpm_id = -1,
  1544. .slv_rpm_id = 26
  1545. };
  1546. static struct qcom_icc_node slv_pimem = {
  1547. .name = "slv_pimem",
  1548. .id = MSM8996_SLAVE_PIMEM,
  1549. .buswidth = 16,
  1550. .mas_rpm_id = -1,
  1551. .slv_rpm_id = 166
  1552. };
  1553. static const u16 slv_snoc_vmem_links[] = {
  1554. MSM8996_MASTER_SNOC_VMEM
  1555. };
  1556. static struct qcom_icc_node slv_snoc_vmem = {
  1557. .name = "slv_snoc_vmem",
  1558. .id = MSM8996_SLAVE_SNOC_VMEM,
  1559. .buswidth = 16,
  1560. .mas_rpm_id = -1,
  1561. .slv_rpm_id = 140,
  1562. .qos.ap_owned = true,
  1563. .qos.qos_mode = NOC_QOS_MODE_INVALID,
  1564. .num_links = ARRAY_SIZE(slv_snoc_vmem_links),
  1565. .links = slv_snoc_vmem_links
  1566. };
  1567. static const u16 slv_snoc_pnoc_links[] = {
  1568. MSM8996_MASTER_SNOC_PNOC
  1569. };
  1570. static struct qcom_icc_node slv_snoc_pnoc = {
  1571. .name = "slv_snoc_pnoc",
  1572. .id = MSM8996_SLAVE_SNOC_PNOC,
  1573. .buswidth = 16,
  1574. .mas_rpm_id = -1,
  1575. .slv_rpm_id = 28,
  1576. .num_links = ARRAY_SIZE(slv_snoc_pnoc_links),
  1577. .links = slv_snoc_pnoc_links
  1578. };
  1579. static struct qcom_icc_node slv_qdss_stm = {
  1580. .name = "slv_qdss_stm",
  1581. .id = MSM8996_SLAVE_QDSS_STM,
  1582. .buswidth = 16,
  1583. .mas_rpm_id = -1,
  1584. .slv_rpm_id = 30
  1585. };
  1586. static struct qcom_icc_node slv_pcie_0 = {
  1587. .name = "slv_pcie_0",
  1588. .id = MSM8996_SLAVE_PCIE_0,
  1589. .buswidth = 16,
  1590. .mas_rpm_id = -1,
  1591. .slv_rpm_id = 84,
  1592. .qos.ap_owned = true,
  1593. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1594. };
  1595. static struct qcom_icc_node slv_pcie_1 = {
  1596. .name = "slv_pcie_1",
  1597. .id = MSM8996_SLAVE_PCIE_1,
  1598. .buswidth = 16,
  1599. .mas_rpm_id = -1,
  1600. .slv_rpm_id = 85,
  1601. .qos.ap_owned = true,
  1602. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1603. };
  1604. static struct qcom_icc_node slv_pcie_2 = {
  1605. .name = "slv_pcie_2",
  1606. .id = MSM8996_SLAVE_PCIE_2,
  1607. .buswidth = 16,
  1608. .mas_rpm_id = -1,
  1609. .slv_rpm_id = 164,
  1610. .qos.ap_owned = true,
  1611. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1612. };
  1613. static struct qcom_icc_node slv_srvc_snoc = {
  1614. .name = "slv_srvc_snoc",
  1615. .id = MSM8996_SLAVE_SERVICE_SNOC,
  1616. .buswidth = 16,
  1617. .mas_rpm_id = -1,
  1618. .slv_rpm_id = 29,
  1619. .qos.ap_owned = true,
  1620. .qos.qos_mode = NOC_QOS_MODE_INVALID
  1621. };
  1622. static struct qcom_icc_node * const a0noc_nodes[] = {
  1623. [MASTER_PCIE_0] = &mas_pcie_0,
  1624. [MASTER_PCIE_1] = &mas_pcie_1,
  1625. [MASTER_PCIE_2] = &mas_pcie_2
  1626. };
  1627. static const struct regmap_config msm8996_a0noc_regmap_config = {
  1628. .reg_bits = 32,
  1629. .reg_stride = 4,
  1630. .val_bits = 32,
  1631. .max_register = 0x6000,
  1632. .fast_io = true
  1633. };
  1634. static const struct qcom_icc_desc msm8996_a0noc = {
  1635. .type = QCOM_ICC_NOC,
  1636. .nodes = a0noc_nodes,
  1637. .num_nodes = ARRAY_SIZE(a0noc_nodes),
  1638. .intf_clocks = a0noc_intf_clocks,
  1639. .num_intf_clocks = ARRAY_SIZE(a0noc_intf_clocks),
  1640. .regmap_cfg = &msm8996_a0noc_regmap_config
  1641. };
  1642. static struct qcom_icc_node * const a1noc_nodes[] = {
  1643. [MASTER_CNOC_A1NOC] = &mas_cnoc_a1noc,
  1644. [MASTER_CRYPTO_CORE0] = &mas_crypto_c0,
  1645. [MASTER_PNOC_A1NOC] = &mas_pnoc_a1noc
  1646. };
  1647. static const struct regmap_config msm8996_a1noc_regmap_config = {
  1648. .reg_bits = 32,
  1649. .reg_stride = 4,
  1650. .val_bits = 32,
  1651. .max_register = 0x5000,
  1652. .fast_io = true
  1653. };
  1654. static const struct qcom_icc_desc msm8996_a1noc = {
  1655. .type = QCOM_ICC_NOC,
  1656. .nodes = a1noc_nodes,
  1657. .num_nodes = ARRAY_SIZE(a1noc_nodes),
  1658. .bus_clk_desc = &aggre1_branch_clk,
  1659. .regmap_cfg = &msm8996_a1noc_regmap_config
  1660. };
  1661. static struct qcom_icc_node * const a2noc_nodes[] = {
  1662. [MASTER_USB3] = &mas_usb3,
  1663. [MASTER_IPA] = &mas_ipa,
  1664. [MASTER_UFS] = &mas_ufs
  1665. };
  1666. static const struct regmap_config msm8996_a2noc_regmap_config = {
  1667. .reg_bits = 32,
  1668. .reg_stride = 4,
  1669. .val_bits = 32,
  1670. .max_register = 0x7000,
  1671. .fast_io = true
  1672. };
  1673. static const struct qcom_icc_desc msm8996_a2noc = {
  1674. .type = QCOM_ICC_NOC,
  1675. .nodes = a2noc_nodes,
  1676. .num_nodes = ARRAY_SIZE(a2noc_nodes),
  1677. .bus_clk_desc = &aggre2_branch_clk,
  1678. .intf_clocks = a2noc_intf_clocks,
  1679. .num_intf_clocks = ARRAY_SIZE(a2noc_intf_clocks),
  1680. .regmap_cfg = &msm8996_a2noc_regmap_config
  1681. };
  1682. static struct qcom_icc_node * const bimc_nodes[] = {
  1683. [MASTER_AMPSS_M0] = &mas_apps_proc,
  1684. [MASTER_GRAPHICS_3D] = &mas_oxili,
  1685. [MASTER_MNOC_BIMC] = &mas_mnoc_bimc,
  1686. [MASTER_SNOC_BIMC] = &mas_snoc_bimc,
  1687. [SLAVE_EBI_CH0] = &slv_ebi,
  1688. [SLAVE_HMSS_L3] = &slv_hmss_l3,
  1689. [SLAVE_BIMC_SNOC_0] = &slv_bimc_snoc_0,
  1690. [SLAVE_BIMC_SNOC_1] = &slv_bimc_snoc_1
  1691. };
  1692. static const struct regmap_config msm8996_bimc_regmap_config = {
  1693. .reg_bits = 32,
  1694. .reg_stride = 4,
  1695. .val_bits = 32,
  1696. .max_register = 0x5a000,
  1697. .fast_io = true
  1698. };
  1699. static const struct qcom_icc_desc msm8996_bimc = {
  1700. .type = QCOM_ICC_BIMC,
  1701. .nodes = bimc_nodes,
  1702. .num_nodes = ARRAY_SIZE(bimc_nodes),
  1703. .bus_clk_desc = &bimc_clk,
  1704. .regmap_cfg = &msm8996_bimc_regmap_config,
  1705. .ab_coeff = 154,
  1706. };
  1707. static struct qcom_icc_node * const cnoc_nodes[] = {
  1708. [MASTER_SNOC_CNOC] = &mas_snoc_cnoc,
  1709. [MASTER_QDSS_DAP] = &mas_qdss_dap,
  1710. [SLAVE_CNOC_A1NOC] = &slv_cnoc_a1noc,
  1711. [SLAVE_CLK_CTL] = &slv_clk_ctl,
  1712. [SLAVE_TCSR] = &slv_tcsr,
  1713. [SLAVE_TLMM] = &slv_tlmm,
  1714. [SLAVE_CRYPTO_0_CFG] = &slv_crypto0_cfg,
  1715. [SLAVE_MPM] = &slv_mpm,
  1716. [SLAVE_PIMEM_CFG] = &slv_pimem_cfg,
  1717. [SLAVE_IMEM_CFG] = &slv_imem_cfg,
  1718. [SLAVE_MESSAGE_RAM] = &slv_message_ram,
  1719. [SLAVE_BIMC_CFG] = &slv_bimc_cfg,
  1720. [SLAVE_PMIC_ARB] = &slv_pmic_arb,
  1721. [SLAVE_PRNG] = &slv_prng,
  1722. [SLAVE_DCC_CFG] = &slv_dcc_cfg,
  1723. [SLAVE_RBCPR_MX] = &slv_rbcpr_mx,
  1724. [SLAVE_QDSS_CFG] = &slv_qdss_cfg,
  1725. [SLAVE_RBCPR_CX] = &slv_rbcpr_cx,
  1726. [SLAVE_QDSS_RBCPR_APU] = &slv_cpu_apu_cfg,
  1727. [SLAVE_CNOC_MNOC_CFG] = &slv_cnoc_mnoc_cfg,
  1728. [SLAVE_SNOC_CFG] = &slv_snoc_cfg,
  1729. [SLAVE_SNOC_MPU_CFG] = &slv_snoc_mpu_cfg,
  1730. [SLAVE_EBI1_PHY_CFG] = &slv_ebi1_phy_cfg,
  1731. [SLAVE_A0NOC_CFG] = &slv_a0noc_cfg,
  1732. [SLAVE_PCIE_1_CFG] = &slv_pcie_1_cfg,
  1733. [SLAVE_PCIE_2_CFG] = &slv_pcie_2_cfg,
  1734. [SLAVE_PCIE_0_CFG] = &slv_pcie_0_cfg,
  1735. [SLAVE_PCIE20_AHB2PHY] = &slv_pcie20_ahb2phy,
  1736. [SLAVE_A0NOC_MPU_CFG] = &slv_a0noc_mpu_cfg,
  1737. [SLAVE_UFS_CFG] = &slv_ufs_cfg,
  1738. [SLAVE_A1NOC_CFG] = &slv_a1noc_cfg,
  1739. [SLAVE_A1NOC_MPU_CFG] = &slv_a1noc_mpu_cfg,
  1740. [SLAVE_A2NOC_CFG] = &slv_a2noc_cfg,
  1741. [SLAVE_A2NOC_MPU_CFG] = &slv_a2noc_mpu_cfg,
  1742. [SLAVE_SSC_CFG] = &slv_ssc_cfg,
  1743. [SLAVE_A0NOC_SMMU_CFG] = &slv_a0noc_smmu_cfg,
  1744. [SLAVE_A1NOC_SMMU_CFG] = &slv_a1noc_smmu_cfg,
  1745. [SLAVE_A2NOC_SMMU_CFG] = &slv_a2noc_smmu_cfg,
  1746. [SLAVE_LPASS_SMMU_CFG] = &slv_lpass_smmu_cfg,
  1747. [SLAVE_CNOC_MNOC_MMSS_CFG] = &slv_cnoc_mnoc_mmss_cfg
  1748. };
  1749. static const struct regmap_config msm8996_cnoc_regmap_config = {
  1750. .reg_bits = 32,
  1751. .reg_stride = 4,
  1752. .val_bits = 32,
  1753. .max_register = 0x1000,
  1754. .fast_io = true
  1755. };
  1756. static const struct qcom_icc_desc msm8996_cnoc = {
  1757. .type = QCOM_ICC_NOC,
  1758. .nodes = cnoc_nodes,
  1759. .num_nodes = ARRAY_SIZE(cnoc_nodes),
  1760. .bus_clk_desc = &bus_2_clk,
  1761. .regmap_cfg = &msm8996_cnoc_regmap_config
  1762. };
  1763. static struct qcom_icc_node * const mnoc_nodes[] = {
  1764. [MASTER_CNOC_MNOC_CFG] = &mas_cnoc_mnoc_cfg,
  1765. [MASTER_CPP] = &mas_cpp,
  1766. [MASTER_JPEG] = &mas_jpeg,
  1767. [MASTER_MDP_PORT0] = &mas_mdp_p0,
  1768. [MASTER_MDP_PORT1] = &mas_mdp_p1,
  1769. [MASTER_ROTATOR] = &mas_rotator,
  1770. [MASTER_VIDEO_P0] = &mas_venus,
  1771. [MASTER_VFE] = &mas_vfe,
  1772. [MASTER_SNOC_VMEM] = &mas_snoc_vmem,
  1773. [MASTER_VIDEO_P0_OCMEM] = &mas_venus_vmem,
  1774. [MASTER_CNOC_MNOC_MMSS_CFG] = &mas_cnoc_mnoc_mmss_cfg,
  1775. [SLAVE_MNOC_BIMC] = &slv_mnoc_bimc,
  1776. [SLAVE_VMEM] = &slv_vmem,
  1777. [SLAVE_SERVICE_MNOC] = &slv_srvc_mnoc,
  1778. [SLAVE_MMAGIC_CFG] = &slv_mmagic_cfg,
  1779. [SLAVE_CPR_CFG] = &slv_cpr_cfg,
  1780. [SLAVE_MISC_CFG] = &slv_misc_cfg,
  1781. [SLAVE_VENUS_THROTTLE_CFG] = &slv_venus_throttle_cfg,
  1782. [SLAVE_VENUS_CFG] = &slv_venus_cfg,
  1783. [SLAVE_VMEM_CFG] = &slv_vmem_cfg,
  1784. [SLAVE_DSA_CFG] = &slv_dsa_cfg,
  1785. [SLAVE_MMSS_CLK_CFG] = &slv_mnoc_clocks_cfg,
  1786. [SLAVE_DSA_MPU_CFG] = &slv_dsa_mpu_cfg,
  1787. [SLAVE_MNOC_MPU_CFG] = &slv_mnoc_mpu_cfg,
  1788. [SLAVE_DISPLAY_CFG] = &slv_display_cfg,
  1789. [SLAVE_DISPLAY_THROTTLE_CFG] = &slv_display_throttle_cfg,
  1790. [SLAVE_CAMERA_CFG] = &slv_camera_cfg,
  1791. [SLAVE_CAMERA_THROTTLE_CFG] = &slv_camera_throttle_cfg,
  1792. [SLAVE_GRAPHICS_3D_CFG] = &slv_oxili_cfg,
  1793. [SLAVE_SMMU_MDP_CFG] = &slv_smmu_mdp_cfg,
  1794. [SLAVE_SMMU_ROT_CFG] = &slv_smmu_rot_cfg,
  1795. [SLAVE_SMMU_VENUS_CFG] = &slv_smmu_venus_cfg,
  1796. [SLAVE_SMMU_CPP_CFG] = &slv_smmu_cpp_cfg,
  1797. [SLAVE_SMMU_JPEG_CFG] = &slv_smmu_jpeg_cfg,
  1798. [SLAVE_SMMU_VFE_CFG] = &slv_smmu_vfe_cfg
  1799. };
  1800. static const struct regmap_config msm8996_mnoc_regmap_config = {
  1801. .reg_bits = 32,
  1802. .reg_stride = 4,
  1803. .val_bits = 32,
  1804. .max_register = 0x1c000,
  1805. .fast_io = true
  1806. };
  1807. static const struct qcom_icc_desc msm8996_mnoc = {
  1808. .type = QCOM_ICC_NOC,
  1809. .nodes = mnoc_nodes,
  1810. .num_nodes = ARRAY_SIZE(mnoc_nodes),
  1811. .bus_clk_desc = &mmaxi_0_clk,
  1812. .intf_clocks = mm_intf_clocks,
  1813. .num_intf_clocks = ARRAY_SIZE(mm_intf_clocks),
  1814. .regmap_cfg = &msm8996_mnoc_regmap_config,
  1815. .ab_coeff = 154,
  1816. };
  1817. static struct qcom_icc_node * const pnoc_nodes[] = {
  1818. [MASTER_SNOC_PNOC] = &mas_snoc_pnoc,
  1819. [MASTER_SDCC_1] = &mas_sdcc_1,
  1820. [MASTER_SDCC_2] = &mas_sdcc_2,
  1821. [MASTER_SDCC_4] = &mas_sdcc_4,
  1822. [MASTER_USB_HS] = &mas_usb_hs,
  1823. [MASTER_BLSP_1] = &mas_blsp_1,
  1824. [MASTER_BLSP_2] = &mas_blsp_2,
  1825. [MASTER_TSIF] = &mas_tsif,
  1826. [SLAVE_PNOC_A1NOC] = &slv_pnoc_a1noc,
  1827. [SLAVE_USB_HS] = &slv_usb_hs,
  1828. [SLAVE_SDCC_2] = &slv_sdcc_2,
  1829. [SLAVE_SDCC_4] = &slv_sdcc_4,
  1830. [SLAVE_TSIF] = &slv_tsif,
  1831. [SLAVE_BLSP_2] = &slv_blsp_2,
  1832. [SLAVE_SDCC_1] = &slv_sdcc_1,
  1833. [SLAVE_BLSP_1] = &slv_blsp_1,
  1834. [SLAVE_PDM] = &slv_pdm,
  1835. [SLAVE_AHB2PHY] = &slv_ahb2phy
  1836. };
  1837. static const struct regmap_config msm8996_pnoc_regmap_config = {
  1838. .reg_bits = 32,
  1839. .reg_stride = 4,
  1840. .val_bits = 32,
  1841. .max_register = 0x3000,
  1842. .fast_io = true
  1843. };
  1844. static const struct qcom_icc_desc msm8996_pnoc = {
  1845. .type = QCOM_ICC_NOC,
  1846. .nodes = pnoc_nodes,
  1847. .num_nodes = ARRAY_SIZE(pnoc_nodes),
  1848. .bus_clk_desc = &bus_0_clk,
  1849. .regmap_cfg = &msm8996_pnoc_regmap_config
  1850. };
  1851. static struct qcom_icc_node * const snoc_nodes[] = {
  1852. [MASTER_HMSS] = &mas_hmss,
  1853. [MASTER_QDSS_BAM] = &mas_qdss_bam,
  1854. [MASTER_SNOC_CFG] = &mas_snoc_cfg,
  1855. [MASTER_BIMC_SNOC_0] = &mas_bimc_snoc_0,
  1856. [MASTER_BIMC_SNOC_1] = &mas_bimc_snoc_1,
  1857. [MASTER_A0NOC_SNOC] = &mas_a0noc_snoc,
  1858. [MASTER_A1NOC_SNOC] = &mas_a1noc_snoc,
  1859. [MASTER_A2NOC_SNOC] = &mas_a2noc_snoc,
  1860. [MASTER_QDSS_ETR] = &mas_qdss_etr,
  1861. [SLAVE_A0NOC_SNOC] = &slv_a0noc_snoc,
  1862. [SLAVE_A1NOC_SNOC] = &slv_a1noc_snoc,
  1863. [SLAVE_A2NOC_SNOC] = &slv_a2noc_snoc,
  1864. [SLAVE_HMSS] = &slv_hmss,
  1865. [SLAVE_LPASS] = &slv_lpass,
  1866. [SLAVE_USB3] = &slv_usb3,
  1867. [SLAVE_SNOC_BIMC] = &slv_snoc_bimc,
  1868. [SLAVE_SNOC_CNOC] = &slv_snoc_cnoc,
  1869. [SLAVE_IMEM] = &slv_imem,
  1870. [SLAVE_PIMEM] = &slv_pimem,
  1871. [SLAVE_SNOC_VMEM] = &slv_snoc_vmem,
  1872. [SLAVE_SNOC_PNOC] = &slv_snoc_pnoc,
  1873. [SLAVE_QDSS_STM] = &slv_qdss_stm,
  1874. [SLAVE_PCIE_0] = &slv_pcie_0,
  1875. [SLAVE_PCIE_1] = &slv_pcie_1,
  1876. [SLAVE_PCIE_2] = &slv_pcie_2,
  1877. [SLAVE_SERVICE_SNOC] = &slv_srvc_snoc
  1878. };
  1879. static const struct regmap_config msm8996_snoc_regmap_config = {
  1880. .reg_bits = 32,
  1881. .reg_stride = 4,
  1882. .val_bits = 32,
  1883. .max_register = 0x20000,
  1884. .fast_io = true
  1885. };
  1886. static const struct qcom_icc_desc msm8996_snoc = {
  1887. .type = QCOM_ICC_NOC,
  1888. .nodes = snoc_nodes,
  1889. .num_nodes = ARRAY_SIZE(snoc_nodes),
  1890. .bus_clk_desc = &bus_1_clk,
  1891. .regmap_cfg = &msm8996_snoc_regmap_config
  1892. };
  1893. static const struct of_device_id qnoc_of_match[] = {
  1894. { .compatible = "qcom,msm8996-a0noc", .data = &msm8996_a0noc},
  1895. { .compatible = "qcom,msm8996-a1noc", .data = &msm8996_a1noc},
  1896. { .compatible = "qcom,msm8996-a2noc", .data = &msm8996_a2noc},
  1897. { .compatible = "qcom,msm8996-bimc", .data = &msm8996_bimc},
  1898. { .compatible = "qcom,msm8996-cnoc", .data = &msm8996_cnoc},
  1899. { .compatible = "qcom,msm8996-mnoc", .data = &msm8996_mnoc},
  1900. { .compatible = "qcom,msm8996-pnoc", .data = &msm8996_pnoc},
  1901. { .compatible = "qcom,msm8996-snoc", .data = &msm8996_snoc},
  1902. { }
  1903. };
  1904. MODULE_DEVICE_TABLE(of, qnoc_of_match);
  1905. static struct platform_driver qnoc_driver = {
  1906. .probe = qnoc_probe,
  1907. .remove_new = qnoc_remove,
  1908. .driver = {
  1909. .name = "qnoc-msm8996",
  1910. .of_match_table = qnoc_of_match,
  1911. .sync_state = icc_sync_state,
  1912. }
  1913. };
  1914. static int __init qnoc_driver_init(void)
  1915. {
  1916. return platform_driver_register(&qnoc_driver);
  1917. }
  1918. core_initcall(qnoc_driver_init);
  1919. static void __exit qnoc_driver_exit(void)
  1920. {
  1921. platform_driver_unregister(&qnoc_driver);
  1922. }
  1923. module_exit(qnoc_driver_exit);
  1924. MODULE_AUTHOR("Yassine Oudjana <y.oudjana@protonmail.com>");
  1925. MODULE_DESCRIPTION("Qualcomm MSM8996 NoC driver");
  1926. MODULE_LICENSE("GPL v2");