1
0

sdm660.c 39 KB

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