msm8976.c 31 KB

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