msm8996.c 50 KB

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