pcie-qcom.c 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Qualcomm PCIe root complex driver
  4. *
  5. * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
  6. * Copyright 2015 Linaro Limited.
  7. *
  8. * Author: Stanimir Varbanov <svarbanov@mm-sol.com>
  9. */
  10. #include <linux/clk.h>
  11. #include <linux/crc8.h>
  12. #include <linux/debugfs.h>
  13. #include <linux/delay.h>
  14. #include <linux/gpio/consumer.h>
  15. #include <linux/interconnect.h>
  16. #include <linux/interrupt.h>
  17. #include <linux/io.h>
  18. #include <linux/iopoll.h>
  19. #include <linux/kernel.h>
  20. #include <linux/limits.h>
  21. #include <linux/init.h>
  22. #include <linux/of.h>
  23. #include <linux/of_pci.h>
  24. #include <linux/pci.h>
  25. #include <linux/pci-ecam.h>
  26. #include <linux/pci-pwrctrl.h>
  27. #include <linux/pm_opp.h>
  28. #include <linux/pm_runtime.h>
  29. #include <linux/platform_device.h>
  30. #include <linux/phy/pcie.h>
  31. #include <linux/phy/phy.h>
  32. #include <linux/regulator/consumer.h>
  33. #include <linux/reset.h>
  34. #include <linux/slab.h>
  35. #include <linux/types.h>
  36. #include <linux/units.h>
  37. #include "../../pci.h"
  38. #include "../pci-host-common.h"
  39. #include "pcie-designware.h"
  40. #include "pcie-qcom-common.h"
  41. /* PARF registers */
  42. #define PARF_SYS_CTRL 0x00
  43. #define PARF_PM_CTRL 0x20
  44. #define PARF_PCS_DEEMPH 0x34
  45. #define PARF_PCS_SWING 0x38
  46. #define PARF_PHY_CTRL 0x40
  47. #define PARF_PHY_REFCLK 0x4c
  48. #define PARF_CONFIG_BITS 0x50
  49. #define PARF_DBI_BASE_ADDR 0x168
  50. #define PARF_SLV_ADDR_SPACE_SIZE 0x16c
  51. #define PARF_MHI_CLOCK_RESET_CTRL 0x174
  52. #define PARF_AXI_MSTR_WR_ADDR_HALT 0x178
  53. #define PARF_AXI_MSTR_WR_ADDR_HALT_V2 0x1a8
  54. #define PARF_Q2A_FLUSH 0x1ac
  55. #define PARF_LTSSM 0x1b0
  56. #define PARF_SID_OFFSET 0x234
  57. #define PARF_BDF_TRANSLATE_CFG 0x24c
  58. #define PARF_DBI_BASE_ADDR_V2 0x350
  59. #define PARF_DBI_BASE_ADDR_V2_HI 0x354
  60. #define PARF_SLV_ADDR_SPACE_SIZE_V2 0x358
  61. #define PARF_SLV_ADDR_SPACE_SIZE_V2_HI 0x35c
  62. #define PARF_NO_SNOOP_OVERRIDE 0x3d4
  63. #define PARF_ATU_BASE_ADDR 0x634
  64. #define PARF_ATU_BASE_ADDR_HI 0x638
  65. #define PARF_DEVICE_TYPE 0x1000
  66. #define PARF_BDF_TO_SID_TABLE_N 0x2000
  67. #define PARF_BDF_TO_SID_CFG 0x2c00
  68. /* ELBI registers */
  69. #define ELBI_SYS_CTRL 0x04
  70. /* DBI registers */
  71. #define AXI_MSTR_RESP_COMP_CTRL0 0x818
  72. #define AXI_MSTR_RESP_COMP_CTRL1 0x81c
  73. /* MHI registers */
  74. #define PARF_DEBUG_CNT_PM_LINKST_IN_L2 0xc04
  75. #define PARF_DEBUG_CNT_PM_LINKST_IN_L1 0xc0c
  76. #define PARF_DEBUG_CNT_PM_LINKST_IN_L0S 0xc10
  77. #define PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L1 0xc84
  78. #define PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L2 0xc88
  79. /* PARF_SYS_CTRL register fields */
  80. #define MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN BIT(29)
  81. #define MST_WAKEUP_EN BIT(13)
  82. #define SLV_WAKEUP_EN BIT(12)
  83. #define MSTR_ACLK_CGC_DIS BIT(10)
  84. #define SLV_ACLK_CGC_DIS BIT(9)
  85. #define CORE_CLK_CGC_DIS BIT(6)
  86. #define AUX_PWR_DET BIT(4)
  87. #define L23_CLK_RMV_DIS BIT(2)
  88. #define L1_CLK_RMV_DIS BIT(1)
  89. /* PARF_PM_CTRL register fields */
  90. #define REQ_NOT_ENTR_L1 BIT(5)
  91. /* PARF_PCS_DEEMPH register fields */
  92. #define PCS_DEEMPH_TX_DEEMPH_GEN1(x) FIELD_PREP(GENMASK(21, 16), x)
  93. #define PCS_DEEMPH_TX_DEEMPH_GEN2_3_5DB(x) FIELD_PREP(GENMASK(13, 8), x)
  94. #define PCS_DEEMPH_TX_DEEMPH_GEN2_6DB(x) FIELD_PREP(GENMASK(5, 0), x)
  95. /* PARF_PCS_SWING register fields */
  96. #define PCS_SWING_TX_SWING_FULL(x) FIELD_PREP(GENMASK(14, 8), x)
  97. #define PCS_SWING_TX_SWING_LOW(x) FIELD_PREP(GENMASK(6, 0), x)
  98. /* PARF_PHY_CTRL register fields */
  99. #define PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK GENMASK(20, 16)
  100. #define PHY_CTRL_PHY_TX0_TERM_OFFSET(x) FIELD_PREP(PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK, x)
  101. #define PHY_TEST_PWR_DOWN BIT(0)
  102. /* PARF_PHY_REFCLK register fields */
  103. #define PHY_REFCLK_SSP_EN BIT(16)
  104. #define PHY_REFCLK_USE_PAD BIT(12)
  105. /* PARF_CONFIG_BITS register fields */
  106. #define PHY_RX0_EQ(x) FIELD_PREP(GENMASK(26, 24), x)
  107. /* PARF_SLV_ADDR_SPACE_SIZE register value */
  108. #define SLV_ADDR_SPACE_SZ 0x80000000
  109. /* PARF_MHI_CLOCK_RESET_CTRL register fields */
  110. #define AHB_CLK_EN BIT(0)
  111. #define MSTR_AXI_CLK_EN BIT(1)
  112. #define BYPASS BIT(4)
  113. /* PARF_AXI_MSTR_WR_ADDR_HALT register fields */
  114. #define EN BIT(31)
  115. /* PARF_LTSSM register fields */
  116. #define LTSSM_EN BIT(8)
  117. /* PARF_NO_SNOOP_OVERRIDE register fields */
  118. #define WR_NO_SNOOP_OVERRIDE_EN BIT(1)
  119. #define RD_NO_SNOOP_OVERRIDE_EN BIT(3)
  120. /* PARF_DEVICE_TYPE register fields */
  121. #define DEVICE_TYPE_RC 0x4
  122. /* PARF_BDF_TO_SID_CFG fields */
  123. #define BDF_TO_SID_BYPASS BIT(0)
  124. /* ELBI_SYS_CTRL register fields */
  125. #define ELBI_SYS_CTRL_LT_ENABLE BIT(0)
  126. /* AXI_MSTR_RESP_COMP_CTRL0 register fields */
  127. #define CFG_REMOTE_RD_REQ_BRIDGE_SIZE_2K 0x4
  128. #define CFG_REMOTE_RD_REQ_BRIDGE_SIZE_4K 0x5
  129. /* AXI_MSTR_RESP_COMP_CTRL1 register fields */
  130. #define CFG_BRIDGE_SB_INIT BIT(0)
  131. /* PCI_EXP_SLTCAP register fields */
  132. #define PCIE_CAP_SLOT_POWER_LIMIT_VAL FIELD_PREP(PCI_EXP_SLTCAP_SPLV, 250)
  133. #define PCIE_CAP_SLOT_POWER_LIMIT_SCALE FIELD_PREP(PCI_EXP_SLTCAP_SPLS, 1)
  134. #define PCIE_CAP_SLOT_VAL (PCI_EXP_SLTCAP_ABP | \
  135. PCI_EXP_SLTCAP_PCP | \
  136. PCI_EXP_SLTCAP_MRLSP | \
  137. PCI_EXP_SLTCAP_AIP | \
  138. PCI_EXP_SLTCAP_PIP | \
  139. PCI_EXP_SLTCAP_HPS | \
  140. PCI_EXP_SLTCAP_EIP | \
  141. PCIE_CAP_SLOT_POWER_LIMIT_VAL | \
  142. PCIE_CAP_SLOT_POWER_LIMIT_SCALE)
  143. #define PERST_DELAY_US 1000
  144. #define QCOM_PCIE_CRC8_POLYNOMIAL (BIT(2) | BIT(1) | BIT(0))
  145. #define QCOM_PCIE_LINK_SPEED_TO_BW(speed) \
  146. Mbps_to_icc(PCIE_SPEED2MBS_ENC(pcie_link_speed[speed]))
  147. struct qcom_pcie_resources_1_0_0 {
  148. struct clk_bulk_data *clks;
  149. int num_clks;
  150. struct reset_control *core;
  151. struct regulator *vdda;
  152. };
  153. #define QCOM_PCIE_2_1_0_MAX_RESETS 6
  154. #define QCOM_PCIE_2_1_0_MAX_SUPPLY 3
  155. struct qcom_pcie_resources_2_1_0 {
  156. struct clk_bulk_data *clks;
  157. int num_clks;
  158. struct reset_control_bulk_data resets[QCOM_PCIE_2_1_0_MAX_RESETS];
  159. int num_resets;
  160. struct regulator_bulk_data supplies[QCOM_PCIE_2_1_0_MAX_SUPPLY];
  161. };
  162. #define QCOM_PCIE_2_3_2_MAX_SUPPLY 2
  163. struct qcom_pcie_resources_2_3_2 {
  164. struct clk_bulk_data *clks;
  165. int num_clks;
  166. struct regulator_bulk_data supplies[QCOM_PCIE_2_3_2_MAX_SUPPLY];
  167. };
  168. #define QCOM_PCIE_2_3_3_MAX_RESETS 7
  169. struct qcom_pcie_resources_2_3_3 {
  170. struct clk_bulk_data *clks;
  171. int num_clks;
  172. struct reset_control_bulk_data rst[QCOM_PCIE_2_3_3_MAX_RESETS];
  173. };
  174. #define QCOM_PCIE_2_4_0_MAX_RESETS 12
  175. struct qcom_pcie_resources_2_4_0 {
  176. struct clk_bulk_data *clks;
  177. int num_clks;
  178. struct reset_control_bulk_data resets[QCOM_PCIE_2_4_0_MAX_RESETS];
  179. int num_resets;
  180. };
  181. #define QCOM_PCIE_2_7_0_MAX_SUPPLIES 2
  182. struct qcom_pcie_resources_2_7_0 {
  183. struct clk_bulk_data *clks;
  184. int num_clks;
  185. struct regulator_bulk_data supplies[QCOM_PCIE_2_7_0_MAX_SUPPLIES];
  186. struct reset_control *rst;
  187. };
  188. struct qcom_pcie_resources_2_9_0 {
  189. struct clk_bulk_data *clks;
  190. int num_clks;
  191. struct reset_control *rst;
  192. };
  193. union qcom_pcie_resources {
  194. struct qcom_pcie_resources_1_0_0 v1_0_0;
  195. struct qcom_pcie_resources_2_1_0 v2_1_0;
  196. struct qcom_pcie_resources_2_3_2 v2_3_2;
  197. struct qcom_pcie_resources_2_3_3 v2_3_3;
  198. struct qcom_pcie_resources_2_4_0 v2_4_0;
  199. struct qcom_pcie_resources_2_7_0 v2_7_0;
  200. struct qcom_pcie_resources_2_9_0 v2_9_0;
  201. };
  202. struct qcom_pcie;
  203. struct qcom_pcie_ops {
  204. int (*get_resources)(struct qcom_pcie *pcie);
  205. int (*init)(struct qcom_pcie *pcie);
  206. int (*post_init)(struct qcom_pcie *pcie);
  207. void (*host_post_init)(struct qcom_pcie *pcie);
  208. void (*deinit)(struct qcom_pcie *pcie);
  209. void (*ltssm_enable)(struct qcom_pcie *pcie);
  210. int (*config_sid)(struct qcom_pcie *pcie);
  211. };
  212. /**
  213. * struct qcom_pcie_cfg - Per SoC config struct
  214. * @ops: qcom PCIe ops structure
  215. * @override_no_snoop: Override NO_SNOOP attribute in TLP to enable cache
  216. * snooping
  217. * @firmware_managed: Set if the Root Complex is firmware managed
  218. */
  219. struct qcom_pcie_cfg {
  220. const struct qcom_pcie_ops *ops;
  221. bool override_no_snoop;
  222. bool firmware_managed;
  223. bool no_l0s;
  224. };
  225. struct qcom_pcie_perst {
  226. struct list_head list;
  227. struct gpio_desc *desc;
  228. };
  229. struct qcom_pcie_port {
  230. struct list_head list;
  231. struct phy *phy;
  232. struct list_head perst;
  233. };
  234. struct qcom_pcie {
  235. struct dw_pcie *pci;
  236. void __iomem *parf; /* DT parf */
  237. void __iomem *mhi;
  238. union qcom_pcie_resources res;
  239. struct icc_path *icc_mem;
  240. struct icc_path *icc_cpu;
  241. const struct qcom_pcie_cfg *cfg;
  242. struct dentry *debugfs;
  243. struct list_head ports;
  244. bool suspended;
  245. bool use_pm_opp;
  246. };
  247. #define to_qcom_pcie(x) dev_get_drvdata((x)->dev)
  248. static void __qcom_pcie_perst_assert(struct qcom_pcie *pcie, bool assert)
  249. {
  250. struct qcom_pcie_perst *perst;
  251. struct qcom_pcie_port *port;
  252. int val = assert ? 1 : 0;
  253. list_for_each_entry(port, &pcie->ports, list) {
  254. list_for_each_entry(perst, &port->perst, list)
  255. gpiod_set_value_cansleep(perst->desc, val);
  256. }
  257. usleep_range(PERST_DELAY_US, PERST_DELAY_US + 500);
  258. }
  259. static void qcom_pcie_perst_assert(struct qcom_pcie *pcie)
  260. {
  261. __qcom_pcie_perst_assert(pcie, true);
  262. }
  263. static void qcom_pcie_perst_deassert(struct qcom_pcie *pcie)
  264. {
  265. /* Ensure that PERST# has been asserted for at least 100 ms */
  266. msleep(PCIE_T_PVPERL_MS);
  267. __qcom_pcie_perst_assert(pcie, false);
  268. }
  269. static int qcom_pcie_start_link(struct dw_pcie *pci)
  270. {
  271. struct qcom_pcie *pcie = to_qcom_pcie(pci);
  272. qcom_pcie_common_set_equalization(pci);
  273. if (pcie_link_speed[pci->max_link_speed] == PCIE_SPEED_16_0GT)
  274. qcom_pcie_common_set_16gt_lane_margining(pci);
  275. /* Enable Link Training state machine */
  276. if (pcie->cfg->ops->ltssm_enable)
  277. pcie->cfg->ops->ltssm_enable(pcie);
  278. return 0;
  279. }
  280. static void qcom_pcie_clear_aspm_l0s(struct dw_pcie *pci)
  281. {
  282. struct qcom_pcie *pcie = to_qcom_pcie(pci);
  283. u16 offset;
  284. u32 val;
  285. if (!pcie->cfg->no_l0s)
  286. return;
  287. offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  288. dw_pcie_dbi_ro_wr_en(pci);
  289. val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);
  290. val &= ~PCI_EXP_LNKCAP_ASPM_L0S;
  291. writel(val, pci->dbi_base + offset + PCI_EXP_LNKCAP);
  292. dw_pcie_dbi_ro_wr_dis(pci);
  293. }
  294. static void qcom_pcie_clear_hpc(struct dw_pcie *pci)
  295. {
  296. u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  297. u32 val;
  298. dw_pcie_dbi_ro_wr_en(pci);
  299. val = readl(pci->dbi_base + offset + PCI_EXP_SLTCAP);
  300. val &= ~PCI_EXP_SLTCAP_HPC;
  301. writel(val, pci->dbi_base + offset + PCI_EXP_SLTCAP);
  302. dw_pcie_dbi_ro_wr_dis(pci);
  303. }
  304. static void qcom_pcie_configure_dbi_base(struct qcom_pcie *pcie)
  305. {
  306. struct dw_pcie *pci = pcie->pci;
  307. if (pci->dbi_phys_addr) {
  308. /*
  309. * PARF_DBI_BASE_ADDR register is in CPU domain and require to
  310. * be programmed with CPU physical address.
  311. */
  312. writel(lower_32_bits(pci->dbi_phys_addr), pcie->parf +
  313. PARF_DBI_BASE_ADDR);
  314. writel(SLV_ADDR_SPACE_SZ, pcie->parf +
  315. PARF_SLV_ADDR_SPACE_SIZE);
  316. }
  317. }
  318. static void qcom_pcie_configure_dbi_atu_base(struct qcom_pcie *pcie)
  319. {
  320. struct dw_pcie *pci = pcie->pci;
  321. if (pci->dbi_phys_addr) {
  322. /*
  323. * PARF_DBI_BASE_ADDR_V2 and PARF_ATU_BASE_ADDR registers are
  324. * in CPU domain and require to be programmed with CPU
  325. * physical addresses.
  326. */
  327. writel(lower_32_bits(pci->dbi_phys_addr), pcie->parf +
  328. PARF_DBI_BASE_ADDR_V2);
  329. writel(upper_32_bits(pci->dbi_phys_addr), pcie->parf +
  330. PARF_DBI_BASE_ADDR_V2_HI);
  331. if (pci->atu_phys_addr) {
  332. writel(lower_32_bits(pci->atu_phys_addr), pcie->parf +
  333. PARF_ATU_BASE_ADDR);
  334. writel(upper_32_bits(pci->atu_phys_addr), pcie->parf +
  335. PARF_ATU_BASE_ADDR_HI);
  336. }
  337. writel(0x0, pcie->parf + PARF_SLV_ADDR_SPACE_SIZE_V2);
  338. writel(SLV_ADDR_SPACE_SZ, pcie->parf +
  339. PARF_SLV_ADDR_SPACE_SIZE_V2_HI);
  340. }
  341. }
  342. static void qcom_pcie_2_1_0_ltssm_enable(struct qcom_pcie *pcie)
  343. {
  344. struct dw_pcie *pci = pcie->pci;
  345. u32 val;
  346. if (!pci->elbi_base) {
  347. dev_err(pci->dev, "ELBI is not present\n");
  348. return;
  349. }
  350. /* enable link training */
  351. val = readl(pci->elbi_base + ELBI_SYS_CTRL);
  352. val |= ELBI_SYS_CTRL_LT_ENABLE;
  353. writel(val, pci->elbi_base + ELBI_SYS_CTRL);
  354. }
  355. static int qcom_pcie_get_resources_2_1_0(struct qcom_pcie *pcie)
  356. {
  357. struct qcom_pcie_resources_2_1_0 *res = &pcie->res.v2_1_0;
  358. struct dw_pcie *pci = pcie->pci;
  359. struct device *dev = pci->dev;
  360. bool is_apq = of_device_is_compatible(dev->of_node, "qcom,pcie-apq8064");
  361. int ret;
  362. res->supplies[0].supply = "vdda";
  363. res->supplies[1].supply = "vdda_phy";
  364. res->supplies[2].supply = "vdda_refclk";
  365. ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(res->supplies),
  366. res->supplies);
  367. if (ret)
  368. return ret;
  369. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  370. if (res->num_clks < 0) {
  371. dev_err(dev, "Failed to get clocks\n");
  372. return res->num_clks;
  373. }
  374. res->resets[0].id = "pci";
  375. res->resets[1].id = "axi";
  376. res->resets[2].id = "ahb";
  377. res->resets[3].id = "por";
  378. res->resets[4].id = "phy";
  379. res->resets[5].id = "ext";
  380. /* ext is optional on APQ8016 */
  381. res->num_resets = is_apq ? 5 : 6;
  382. ret = devm_reset_control_bulk_get_exclusive(dev, res->num_resets, res->resets);
  383. if (ret < 0)
  384. return ret;
  385. return 0;
  386. }
  387. static void qcom_pcie_deinit_2_1_0(struct qcom_pcie *pcie)
  388. {
  389. struct qcom_pcie_resources_2_1_0 *res = &pcie->res.v2_1_0;
  390. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  391. reset_control_bulk_assert(res->num_resets, res->resets);
  392. writel(1, pcie->parf + PARF_PHY_CTRL);
  393. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  394. }
  395. static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie)
  396. {
  397. struct qcom_pcie_resources_2_1_0 *res = &pcie->res.v2_1_0;
  398. struct dw_pcie *pci = pcie->pci;
  399. struct device *dev = pci->dev;
  400. int ret;
  401. /* reset the PCIe interface as uboot can leave it undefined state */
  402. ret = reset_control_bulk_assert(res->num_resets, res->resets);
  403. if (ret < 0) {
  404. dev_err(dev, "cannot assert resets\n");
  405. return ret;
  406. }
  407. ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
  408. if (ret < 0) {
  409. dev_err(dev, "cannot enable regulators\n");
  410. return ret;
  411. }
  412. ret = reset_control_bulk_deassert(res->num_resets, res->resets);
  413. if (ret < 0) {
  414. dev_err(dev, "cannot deassert resets\n");
  415. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  416. return ret;
  417. }
  418. return 0;
  419. }
  420. static int qcom_pcie_post_init_2_1_0(struct qcom_pcie *pcie)
  421. {
  422. struct qcom_pcie_resources_2_1_0 *res = &pcie->res.v2_1_0;
  423. struct dw_pcie *pci = pcie->pci;
  424. struct device *dev = pci->dev;
  425. struct device_node *node = dev->of_node;
  426. u32 val;
  427. int ret;
  428. /* enable PCIe clocks and resets */
  429. val = readl(pcie->parf + PARF_PHY_CTRL);
  430. val &= ~PHY_TEST_PWR_DOWN;
  431. writel(val, pcie->parf + PARF_PHY_CTRL);
  432. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  433. if (ret)
  434. return ret;
  435. if (of_device_is_compatible(node, "qcom,pcie-ipq8064") ||
  436. of_device_is_compatible(node, "qcom,pcie-ipq8064-v2")) {
  437. writel(PCS_DEEMPH_TX_DEEMPH_GEN1(24) |
  438. PCS_DEEMPH_TX_DEEMPH_GEN2_3_5DB(24) |
  439. PCS_DEEMPH_TX_DEEMPH_GEN2_6DB(34),
  440. pcie->parf + PARF_PCS_DEEMPH);
  441. writel(PCS_SWING_TX_SWING_FULL(120) |
  442. PCS_SWING_TX_SWING_LOW(120),
  443. pcie->parf + PARF_PCS_SWING);
  444. writel(PHY_RX0_EQ(4), pcie->parf + PARF_CONFIG_BITS);
  445. }
  446. if (of_device_is_compatible(node, "qcom,pcie-ipq8064")) {
  447. /* set TX termination offset */
  448. val = readl(pcie->parf + PARF_PHY_CTRL);
  449. val &= ~PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK;
  450. val |= PHY_CTRL_PHY_TX0_TERM_OFFSET(7);
  451. writel(val, pcie->parf + PARF_PHY_CTRL);
  452. }
  453. /* enable external reference clock */
  454. val = readl(pcie->parf + PARF_PHY_REFCLK);
  455. /* USE_PAD is required only for ipq806x */
  456. if (!of_device_is_compatible(node, "qcom,pcie-apq8064"))
  457. val &= ~PHY_REFCLK_USE_PAD;
  458. val |= PHY_REFCLK_SSP_EN;
  459. writel(val, pcie->parf + PARF_PHY_REFCLK);
  460. /* wait for clock acquisition */
  461. usleep_range(1000, 1500);
  462. /* Set the Max TLP size to 2K, instead of using default of 4K */
  463. writel(CFG_REMOTE_RD_REQ_BRIDGE_SIZE_2K,
  464. pci->dbi_base + AXI_MSTR_RESP_COMP_CTRL0);
  465. writel(CFG_BRIDGE_SB_INIT,
  466. pci->dbi_base + AXI_MSTR_RESP_COMP_CTRL1);
  467. qcom_pcie_clear_hpc(pcie->pci);
  468. return 0;
  469. }
  470. static int qcom_pcie_get_resources_1_0_0(struct qcom_pcie *pcie)
  471. {
  472. struct qcom_pcie_resources_1_0_0 *res = &pcie->res.v1_0_0;
  473. struct dw_pcie *pci = pcie->pci;
  474. struct device *dev = pci->dev;
  475. res->vdda = devm_regulator_get(dev, "vdda");
  476. if (IS_ERR(res->vdda))
  477. return PTR_ERR(res->vdda);
  478. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  479. if (res->num_clks < 0) {
  480. dev_err(dev, "Failed to get clocks\n");
  481. return res->num_clks;
  482. }
  483. res->core = devm_reset_control_get_exclusive(dev, "core");
  484. return PTR_ERR_OR_ZERO(res->core);
  485. }
  486. static void qcom_pcie_deinit_1_0_0(struct qcom_pcie *pcie)
  487. {
  488. struct qcom_pcie_resources_1_0_0 *res = &pcie->res.v1_0_0;
  489. reset_control_assert(res->core);
  490. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  491. regulator_disable(res->vdda);
  492. }
  493. static int qcom_pcie_init_1_0_0(struct qcom_pcie *pcie)
  494. {
  495. struct qcom_pcie_resources_1_0_0 *res = &pcie->res.v1_0_0;
  496. struct dw_pcie *pci = pcie->pci;
  497. struct device *dev = pci->dev;
  498. int ret;
  499. ret = reset_control_deassert(res->core);
  500. if (ret) {
  501. dev_err(dev, "cannot deassert core reset\n");
  502. return ret;
  503. }
  504. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  505. if (ret) {
  506. dev_err(dev, "cannot prepare/enable clocks\n");
  507. goto err_assert_reset;
  508. }
  509. ret = regulator_enable(res->vdda);
  510. if (ret) {
  511. dev_err(dev, "cannot enable vdda regulator\n");
  512. goto err_disable_clks;
  513. }
  514. return 0;
  515. err_disable_clks:
  516. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  517. err_assert_reset:
  518. reset_control_assert(res->core);
  519. return ret;
  520. }
  521. static int qcom_pcie_post_init_1_0_0(struct qcom_pcie *pcie)
  522. {
  523. qcom_pcie_configure_dbi_base(pcie);
  524. if (IS_ENABLED(CONFIG_PCI_MSI)) {
  525. u32 val = readl(pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
  526. val |= EN;
  527. writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT);
  528. }
  529. qcom_pcie_clear_hpc(pcie->pci);
  530. return 0;
  531. }
  532. static void qcom_pcie_2_3_2_ltssm_enable(struct qcom_pcie *pcie)
  533. {
  534. u32 val;
  535. /* enable link training */
  536. val = readl(pcie->parf + PARF_LTSSM);
  537. val |= LTSSM_EN;
  538. writel(val, pcie->parf + PARF_LTSSM);
  539. }
  540. static int qcom_pcie_get_resources_2_3_2(struct qcom_pcie *pcie)
  541. {
  542. struct qcom_pcie_resources_2_3_2 *res = &pcie->res.v2_3_2;
  543. struct dw_pcie *pci = pcie->pci;
  544. struct device *dev = pci->dev;
  545. int ret;
  546. res->supplies[0].supply = "vdda";
  547. res->supplies[1].supply = "vddpe-3v3";
  548. ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(res->supplies),
  549. res->supplies);
  550. if (ret)
  551. return ret;
  552. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  553. if (res->num_clks < 0) {
  554. dev_err(dev, "Failed to get clocks\n");
  555. return res->num_clks;
  556. }
  557. return 0;
  558. }
  559. static void qcom_pcie_deinit_2_3_2(struct qcom_pcie *pcie)
  560. {
  561. struct qcom_pcie_resources_2_3_2 *res = &pcie->res.v2_3_2;
  562. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  563. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  564. }
  565. static int qcom_pcie_init_2_3_2(struct qcom_pcie *pcie)
  566. {
  567. struct qcom_pcie_resources_2_3_2 *res = &pcie->res.v2_3_2;
  568. struct dw_pcie *pci = pcie->pci;
  569. struct device *dev = pci->dev;
  570. int ret;
  571. ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
  572. if (ret < 0) {
  573. dev_err(dev, "cannot enable regulators\n");
  574. return ret;
  575. }
  576. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  577. if (ret) {
  578. dev_err(dev, "cannot prepare/enable clocks\n");
  579. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  580. return ret;
  581. }
  582. return 0;
  583. }
  584. static int qcom_pcie_post_init_2_3_2(struct qcom_pcie *pcie)
  585. {
  586. u32 val;
  587. /* enable PCIe clocks and resets */
  588. val = readl(pcie->parf + PARF_PHY_CTRL);
  589. val &= ~PHY_TEST_PWR_DOWN;
  590. writel(val, pcie->parf + PARF_PHY_CTRL);
  591. qcom_pcie_configure_dbi_base(pcie);
  592. /* MAC PHY_POWERDOWN MUX DISABLE */
  593. val = readl(pcie->parf + PARF_SYS_CTRL);
  594. val &= ~MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN;
  595. writel(val, pcie->parf + PARF_SYS_CTRL);
  596. val = readl(pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
  597. val |= BYPASS;
  598. writel(val, pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
  599. val = readl(pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
  600. val |= EN;
  601. writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
  602. qcom_pcie_clear_hpc(pcie->pci);
  603. return 0;
  604. }
  605. static int qcom_pcie_get_resources_2_4_0(struct qcom_pcie *pcie)
  606. {
  607. struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0;
  608. struct dw_pcie *pci = pcie->pci;
  609. struct device *dev = pci->dev;
  610. bool is_ipq = of_device_is_compatible(dev->of_node, "qcom,pcie-ipq4019");
  611. int ret;
  612. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  613. if (res->num_clks < 0) {
  614. dev_err(dev, "Failed to get clocks\n");
  615. return res->num_clks;
  616. }
  617. res->resets[0].id = "axi_m";
  618. res->resets[1].id = "axi_s";
  619. res->resets[2].id = "axi_m_sticky";
  620. res->resets[3].id = "pipe_sticky";
  621. res->resets[4].id = "pwr";
  622. res->resets[5].id = "ahb";
  623. res->resets[6].id = "pipe";
  624. res->resets[7].id = "axi_m_vmid";
  625. res->resets[8].id = "axi_s_xpu";
  626. res->resets[9].id = "parf";
  627. res->resets[10].id = "phy";
  628. res->resets[11].id = "phy_ahb";
  629. res->num_resets = is_ipq ? 12 : 6;
  630. ret = devm_reset_control_bulk_get_exclusive(dev, res->num_resets, res->resets);
  631. if (ret < 0)
  632. return ret;
  633. return 0;
  634. }
  635. static void qcom_pcie_deinit_2_4_0(struct qcom_pcie *pcie)
  636. {
  637. struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0;
  638. reset_control_bulk_assert(res->num_resets, res->resets);
  639. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  640. }
  641. static int qcom_pcie_init_2_4_0(struct qcom_pcie *pcie)
  642. {
  643. struct qcom_pcie_resources_2_4_0 *res = &pcie->res.v2_4_0;
  644. struct dw_pcie *pci = pcie->pci;
  645. struct device *dev = pci->dev;
  646. int ret;
  647. ret = reset_control_bulk_assert(res->num_resets, res->resets);
  648. if (ret < 0) {
  649. dev_err(dev, "cannot assert resets\n");
  650. return ret;
  651. }
  652. usleep_range(10000, 12000);
  653. ret = reset_control_bulk_deassert(res->num_resets, res->resets);
  654. if (ret < 0) {
  655. dev_err(dev, "cannot deassert resets\n");
  656. return ret;
  657. }
  658. usleep_range(10000, 12000);
  659. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  660. if (ret) {
  661. reset_control_bulk_assert(res->num_resets, res->resets);
  662. return ret;
  663. }
  664. return 0;
  665. }
  666. static int qcom_pcie_get_resources_2_3_3(struct qcom_pcie *pcie)
  667. {
  668. struct qcom_pcie_resources_2_3_3 *res = &pcie->res.v2_3_3;
  669. struct dw_pcie *pci = pcie->pci;
  670. struct device *dev = pci->dev;
  671. int ret;
  672. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  673. if (res->num_clks < 0) {
  674. dev_err(dev, "Failed to get clocks\n");
  675. return res->num_clks;
  676. }
  677. res->rst[0].id = "axi_m";
  678. res->rst[1].id = "axi_s";
  679. res->rst[2].id = "pipe";
  680. res->rst[3].id = "axi_m_sticky";
  681. res->rst[4].id = "sticky";
  682. res->rst[5].id = "ahb";
  683. res->rst[6].id = "sleep";
  684. ret = devm_reset_control_bulk_get_exclusive(dev, ARRAY_SIZE(res->rst), res->rst);
  685. if (ret < 0)
  686. return ret;
  687. return 0;
  688. }
  689. static void qcom_pcie_deinit_2_3_3(struct qcom_pcie *pcie)
  690. {
  691. struct qcom_pcie_resources_2_3_3 *res = &pcie->res.v2_3_3;
  692. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  693. }
  694. static int qcom_pcie_init_2_3_3(struct qcom_pcie *pcie)
  695. {
  696. struct qcom_pcie_resources_2_3_3 *res = &pcie->res.v2_3_3;
  697. struct dw_pcie *pci = pcie->pci;
  698. struct device *dev = pci->dev;
  699. int ret;
  700. ret = reset_control_bulk_assert(ARRAY_SIZE(res->rst), res->rst);
  701. if (ret < 0) {
  702. dev_err(dev, "cannot assert resets\n");
  703. return ret;
  704. }
  705. usleep_range(2000, 2500);
  706. ret = reset_control_bulk_deassert(ARRAY_SIZE(res->rst), res->rst);
  707. if (ret < 0) {
  708. dev_err(dev, "cannot deassert resets\n");
  709. return ret;
  710. }
  711. /*
  712. * Don't have a way to see if the reset has completed.
  713. * Wait for some time.
  714. */
  715. usleep_range(2000, 2500);
  716. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  717. if (ret) {
  718. dev_err(dev, "cannot prepare/enable clocks\n");
  719. goto err_assert_resets;
  720. }
  721. return 0;
  722. err_assert_resets:
  723. /*
  724. * Not checking for failure, will anyway return
  725. * the original failure in 'ret'.
  726. */
  727. reset_control_bulk_assert(ARRAY_SIZE(res->rst), res->rst);
  728. return ret;
  729. }
  730. static int qcom_pcie_post_init_2_3_3(struct qcom_pcie *pcie)
  731. {
  732. struct dw_pcie *pci = pcie->pci;
  733. u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  734. u32 val;
  735. val = readl(pcie->parf + PARF_PHY_CTRL);
  736. val &= ~PHY_TEST_PWR_DOWN;
  737. writel(val, pcie->parf + PARF_PHY_CTRL);
  738. qcom_pcie_configure_dbi_atu_base(pcie);
  739. writel(MST_WAKEUP_EN | SLV_WAKEUP_EN | MSTR_ACLK_CGC_DIS
  740. | SLV_ACLK_CGC_DIS | CORE_CLK_CGC_DIS |
  741. AUX_PWR_DET | L23_CLK_RMV_DIS | L1_CLK_RMV_DIS,
  742. pcie->parf + PARF_SYS_CTRL);
  743. writel(0, pcie->parf + PARF_Q2A_FLUSH);
  744. writel(PCI_COMMAND_MASTER, pci->dbi_base + PCI_COMMAND);
  745. dw_pcie_dbi_ro_wr_en(pci);
  746. writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP);
  747. val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);
  748. val &= ~PCI_EXP_LNKCAP_ASPMS;
  749. writel(val, pci->dbi_base + offset + PCI_EXP_LNKCAP);
  750. writel(PCI_EXP_DEVCTL2_COMP_TMOUT_DIS, pci->dbi_base + offset +
  751. PCI_EXP_DEVCTL2);
  752. dw_pcie_dbi_ro_wr_dis(pci);
  753. return 0;
  754. }
  755. static int qcom_pcie_get_resources_2_7_0(struct qcom_pcie *pcie)
  756. {
  757. struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
  758. struct dw_pcie *pci = pcie->pci;
  759. struct device *dev = pci->dev;
  760. int ret;
  761. res->rst = devm_reset_control_array_get_exclusive(dev);
  762. if (IS_ERR(res->rst))
  763. return PTR_ERR(res->rst);
  764. res->supplies[0].supply = "vdda";
  765. res->supplies[1].supply = "vddpe-3v3";
  766. ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(res->supplies),
  767. res->supplies);
  768. if (ret)
  769. return ret;
  770. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  771. if (res->num_clks < 0) {
  772. dev_err(dev, "Failed to get clocks\n");
  773. return res->num_clks;
  774. }
  775. return 0;
  776. }
  777. static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
  778. {
  779. struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
  780. struct dw_pcie *pci = pcie->pci;
  781. struct device *dev = pci->dev;
  782. u32 val;
  783. int ret;
  784. ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
  785. if (ret < 0) {
  786. dev_err(dev, "cannot enable regulators\n");
  787. return ret;
  788. }
  789. ret = clk_bulk_prepare_enable(res->num_clks, res->clks);
  790. if (ret < 0)
  791. goto err_disable_regulators;
  792. ret = reset_control_assert(res->rst);
  793. if (ret) {
  794. dev_err(dev, "reset assert failed (%d)\n", ret);
  795. goto err_disable_clocks;
  796. }
  797. usleep_range(1000, 1500);
  798. ret = reset_control_deassert(res->rst);
  799. if (ret) {
  800. dev_err(dev, "reset deassert failed (%d)\n", ret);
  801. goto err_disable_clocks;
  802. }
  803. /* Wait for reset to complete, required on SM8450 */
  804. usleep_range(1000, 1500);
  805. /* configure PCIe to RC mode */
  806. writel(DEVICE_TYPE_RC, pcie->parf + PARF_DEVICE_TYPE);
  807. /* enable PCIe clocks and resets */
  808. val = readl(pcie->parf + PARF_PHY_CTRL);
  809. val &= ~PHY_TEST_PWR_DOWN;
  810. writel(val, pcie->parf + PARF_PHY_CTRL);
  811. qcom_pcie_configure_dbi_atu_base(pcie);
  812. /* MAC PHY_POWERDOWN MUX DISABLE */
  813. val = readl(pcie->parf + PARF_SYS_CTRL);
  814. val &= ~MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN;
  815. writel(val, pcie->parf + PARF_SYS_CTRL);
  816. val = readl(pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
  817. val |= BYPASS;
  818. writel(val, pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
  819. /* Enable L1 and L1SS */
  820. val = readl(pcie->parf + PARF_PM_CTRL);
  821. val &= ~REQ_NOT_ENTR_L1;
  822. writel(val, pcie->parf + PARF_PM_CTRL);
  823. pci->l1ss_support = true;
  824. val = readl(pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
  825. val |= EN;
  826. writel(val, pcie->parf + PARF_AXI_MSTR_WR_ADDR_HALT_V2);
  827. return 0;
  828. err_disable_clocks:
  829. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  830. err_disable_regulators:
  831. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  832. return ret;
  833. }
  834. static int qcom_pcie_post_init_2_7_0(struct qcom_pcie *pcie)
  835. {
  836. const struct qcom_pcie_cfg *pcie_cfg = pcie->cfg;
  837. if (pcie_cfg->override_no_snoop)
  838. writel(WR_NO_SNOOP_OVERRIDE_EN | RD_NO_SNOOP_OVERRIDE_EN,
  839. pcie->parf + PARF_NO_SNOOP_OVERRIDE);
  840. qcom_pcie_clear_hpc(pcie->pci);
  841. return 0;
  842. }
  843. static int qcom_pcie_enable_aspm(struct pci_dev *pdev, void *userdata)
  844. {
  845. /*
  846. * Downstream devices need to be in D0 state before enabling PCI PM
  847. * substates.
  848. */
  849. pci_set_power_state_locked(pdev, PCI_D0);
  850. pci_enable_link_state_locked(pdev, PCIE_LINK_STATE_ALL);
  851. return 0;
  852. }
  853. static void qcom_pcie_host_post_init_2_7_0(struct qcom_pcie *pcie)
  854. {
  855. struct dw_pcie_rp *pp = &pcie->pci->pp;
  856. pci_walk_bus(pp->bridge->bus, qcom_pcie_enable_aspm, NULL);
  857. }
  858. static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie)
  859. {
  860. struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
  861. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  862. regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
  863. }
  864. static int qcom_pcie_config_sid_1_9_0(struct qcom_pcie *pcie)
  865. {
  866. /* iommu map structure */
  867. struct {
  868. u32 bdf;
  869. u32 phandle;
  870. u32 smmu_sid;
  871. u32 smmu_sid_len;
  872. } *map;
  873. void __iomem *bdf_to_sid_base = pcie->parf + PARF_BDF_TO_SID_TABLE_N;
  874. struct device *dev = pcie->pci->dev;
  875. u8 qcom_pcie_crc8_table[CRC8_TABLE_SIZE];
  876. int i, nr_map, size = 0;
  877. u32 smmu_sid_base;
  878. u32 val;
  879. of_get_property(dev->of_node, "iommu-map", &size);
  880. if (!size)
  881. return 0;
  882. /* Enable BDF to SID translation by disabling bypass mode (default) */
  883. val = readl(pcie->parf + PARF_BDF_TO_SID_CFG);
  884. val &= ~BDF_TO_SID_BYPASS;
  885. writel(val, pcie->parf + PARF_BDF_TO_SID_CFG);
  886. map = kzalloc(size, GFP_KERNEL);
  887. if (!map)
  888. return -ENOMEM;
  889. of_property_read_u32_array(dev->of_node, "iommu-map", (u32 *)map,
  890. size / sizeof(u32));
  891. nr_map = size / (sizeof(*map));
  892. crc8_populate_msb(qcom_pcie_crc8_table, QCOM_PCIE_CRC8_POLYNOMIAL);
  893. /* Registers need to be zero out first */
  894. memset_io(bdf_to_sid_base, 0, CRC8_TABLE_SIZE * sizeof(u32));
  895. /* Extract the SMMU SID base from the first entry of iommu-map */
  896. smmu_sid_base = map[0].smmu_sid;
  897. /* Look for an available entry to hold the mapping */
  898. for (i = 0; i < nr_map; i++) {
  899. __be16 bdf_be = cpu_to_be16(map[i].bdf);
  900. u32 val;
  901. u8 hash;
  902. hash = crc8(qcom_pcie_crc8_table, (u8 *)&bdf_be, sizeof(bdf_be), 0);
  903. val = readl(bdf_to_sid_base + hash * sizeof(u32));
  904. /* If the register is already populated, look for next available entry */
  905. while (val) {
  906. u8 current_hash = hash++;
  907. u8 next_mask = 0xff;
  908. /* If NEXT field is NULL then update it with next hash */
  909. if (!(val & next_mask)) {
  910. val |= (u32)hash;
  911. writel(val, bdf_to_sid_base + current_hash * sizeof(u32));
  912. }
  913. val = readl(bdf_to_sid_base + hash * sizeof(u32));
  914. }
  915. /* BDF [31:16] | SID [15:8] | NEXT [7:0] */
  916. val = map[i].bdf << 16 | (map[i].smmu_sid - smmu_sid_base) << 8 | 0;
  917. writel(val, bdf_to_sid_base + hash * sizeof(u32));
  918. }
  919. kfree(map);
  920. return 0;
  921. }
  922. static int qcom_pcie_get_resources_2_9_0(struct qcom_pcie *pcie)
  923. {
  924. struct qcom_pcie_resources_2_9_0 *res = &pcie->res.v2_9_0;
  925. struct dw_pcie *pci = pcie->pci;
  926. struct device *dev = pci->dev;
  927. res->num_clks = devm_clk_bulk_get_all(dev, &res->clks);
  928. if (res->num_clks < 0) {
  929. dev_err(dev, "Failed to get clocks\n");
  930. return res->num_clks;
  931. }
  932. res->rst = devm_reset_control_array_get_exclusive(dev);
  933. if (IS_ERR(res->rst))
  934. return PTR_ERR(res->rst);
  935. return 0;
  936. }
  937. static void qcom_pcie_deinit_2_9_0(struct qcom_pcie *pcie)
  938. {
  939. struct qcom_pcie_resources_2_9_0 *res = &pcie->res.v2_9_0;
  940. clk_bulk_disable_unprepare(res->num_clks, res->clks);
  941. }
  942. static int qcom_pcie_init_2_9_0(struct qcom_pcie *pcie)
  943. {
  944. struct qcom_pcie_resources_2_9_0 *res = &pcie->res.v2_9_0;
  945. struct device *dev = pcie->pci->dev;
  946. int ret;
  947. ret = reset_control_assert(res->rst);
  948. if (ret) {
  949. dev_err(dev, "reset assert failed (%d)\n", ret);
  950. return ret;
  951. }
  952. /*
  953. * Delay periods before and after reset deassert are working values
  954. * from downstream Codeaurora kernel
  955. */
  956. usleep_range(2000, 2500);
  957. ret = reset_control_deassert(res->rst);
  958. if (ret) {
  959. dev_err(dev, "reset deassert failed (%d)\n", ret);
  960. return ret;
  961. }
  962. usleep_range(2000, 2500);
  963. return clk_bulk_prepare_enable(res->num_clks, res->clks);
  964. }
  965. static int qcom_pcie_post_init_2_9_0(struct qcom_pcie *pcie)
  966. {
  967. struct dw_pcie *pci = pcie->pci;
  968. u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  969. u32 val;
  970. int i;
  971. val = readl(pcie->parf + PARF_PHY_CTRL);
  972. val &= ~PHY_TEST_PWR_DOWN;
  973. writel(val, pcie->parf + PARF_PHY_CTRL);
  974. qcom_pcie_configure_dbi_atu_base(pcie);
  975. writel(DEVICE_TYPE_RC, pcie->parf + PARF_DEVICE_TYPE);
  976. writel(BYPASS | MSTR_AXI_CLK_EN | AHB_CLK_EN,
  977. pcie->parf + PARF_MHI_CLOCK_RESET_CTRL);
  978. writel(GEN3_RELATED_OFF_RXEQ_RGRDLESS_RXTS |
  979. GEN3_RELATED_OFF_GEN3_ZRXDC_NONCOMPL,
  980. pci->dbi_base + GEN3_RELATED_OFF);
  981. writel(MST_WAKEUP_EN | SLV_WAKEUP_EN | MSTR_ACLK_CGC_DIS |
  982. SLV_ACLK_CGC_DIS | CORE_CLK_CGC_DIS |
  983. AUX_PWR_DET | L23_CLK_RMV_DIS | L1_CLK_RMV_DIS,
  984. pcie->parf + PARF_SYS_CTRL);
  985. writel(0, pcie->parf + PARF_Q2A_FLUSH);
  986. dw_pcie_dbi_ro_wr_en(pci);
  987. writel(PCIE_CAP_SLOT_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP);
  988. val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);
  989. val &= ~PCI_EXP_LNKCAP_ASPMS;
  990. writel(val, pci->dbi_base + offset + PCI_EXP_LNKCAP);
  991. writel(PCI_EXP_DEVCTL2_COMP_TMOUT_DIS, pci->dbi_base + offset +
  992. PCI_EXP_DEVCTL2);
  993. dw_pcie_dbi_ro_wr_dis(pci);
  994. for (i = 0; i < 256; i++)
  995. writel(0, pcie->parf + PARF_BDF_TO_SID_TABLE_N + (4 * i));
  996. return 0;
  997. }
  998. static bool qcom_pcie_link_up(struct dw_pcie *pci)
  999. {
  1000. u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  1001. u16 val = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
  1002. return val & PCI_EXP_LNKSTA_DLLLA;
  1003. }
  1004. static void qcom_pcie_phy_power_off(struct qcom_pcie *pcie)
  1005. {
  1006. struct qcom_pcie_port *port;
  1007. list_for_each_entry(port, &pcie->ports, list)
  1008. phy_power_off(port->phy);
  1009. }
  1010. static int qcom_pcie_phy_power_on(struct qcom_pcie *pcie)
  1011. {
  1012. struct qcom_pcie_port *port;
  1013. int ret;
  1014. list_for_each_entry(port, &pcie->ports, list) {
  1015. ret = phy_set_mode_ext(port->phy, PHY_MODE_PCIE, PHY_MODE_PCIE_RC);
  1016. if (ret)
  1017. return ret;
  1018. ret = phy_power_on(port->phy);
  1019. if (ret) {
  1020. qcom_pcie_phy_power_off(pcie);
  1021. return ret;
  1022. }
  1023. }
  1024. return 0;
  1025. }
  1026. static int qcom_pcie_host_init(struct dw_pcie_rp *pp)
  1027. {
  1028. struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
  1029. struct qcom_pcie *pcie = to_qcom_pcie(pci);
  1030. int ret;
  1031. qcom_pcie_perst_assert(pcie);
  1032. ret = pcie->cfg->ops->init(pcie);
  1033. if (ret)
  1034. return ret;
  1035. ret = qcom_pcie_phy_power_on(pcie);
  1036. if (ret)
  1037. goto err_deinit;
  1038. ret = pci_pwrctrl_create_devices(pci->dev);
  1039. if (ret)
  1040. goto err_disable_phy;
  1041. ret = pci_pwrctrl_power_on_devices(pci->dev);
  1042. if (ret)
  1043. goto err_pwrctrl_destroy;
  1044. if (pcie->cfg->ops->post_init) {
  1045. ret = pcie->cfg->ops->post_init(pcie);
  1046. if (ret)
  1047. goto err_pwrctrl_power_off;
  1048. }
  1049. qcom_pcie_clear_aspm_l0s(pcie->pci);
  1050. dw_pcie_remove_capability(pcie->pci, PCI_CAP_ID_MSIX);
  1051. dw_pcie_remove_ext_capability(pcie->pci, PCI_EXT_CAP_ID_DPC);
  1052. qcom_pcie_perst_deassert(pcie);
  1053. if (pcie->cfg->ops->config_sid) {
  1054. ret = pcie->cfg->ops->config_sid(pcie);
  1055. if (ret)
  1056. goto err_assert_reset;
  1057. }
  1058. return 0;
  1059. err_assert_reset:
  1060. qcom_pcie_perst_assert(pcie);
  1061. err_pwrctrl_power_off:
  1062. pci_pwrctrl_power_off_devices(pci->dev);
  1063. err_pwrctrl_destroy:
  1064. if (ret != -EPROBE_DEFER)
  1065. pci_pwrctrl_destroy_devices(pci->dev);
  1066. err_disable_phy:
  1067. qcom_pcie_phy_power_off(pcie);
  1068. err_deinit:
  1069. pcie->cfg->ops->deinit(pcie);
  1070. return ret;
  1071. }
  1072. static void qcom_pcie_host_deinit(struct dw_pcie_rp *pp)
  1073. {
  1074. struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
  1075. struct qcom_pcie *pcie = to_qcom_pcie(pci);
  1076. qcom_pcie_perst_assert(pcie);
  1077. /*
  1078. * No need to destroy pwrctrl devices as this function only gets called
  1079. * during system suspend as of now.
  1080. */
  1081. pci_pwrctrl_power_off_devices(pci->dev);
  1082. qcom_pcie_phy_power_off(pcie);
  1083. pcie->cfg->ops->deinit(pcie);
  1084. }
  1085. static void qcom_pcie_host_post_init(struct dw_pcie_rp *pp)
  1086. {
  1087. struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
  1088. struct qcom_pcie *pcie = to_qcom_pcie(pci);
  1089. if (pcie->cfg->ops->host_post_init)
  1090. pcie->cfg->ops->host_post_init(pcie);
  1091. }
  1092. static const struct dw_pcie_host_ops qcom_pcie_dw_ops = {
  1093. .init = qcom_pcie_host_init,
  1094. .deinit = qcom_pcie_host_deinit,
  1095. .post_init = qcom_pcie_host_post_init,
  1096. };
  1097. /* Qcom IP rev.: 2.1.0 Synopsys IP rev.: 4.01a */
  1098. static const struct qcom_pcie_ops ops_2_1_0 = {
  1099. .get_resources = qcom_pcie_get_resources_2_1_0,
  1100. .init = qcom_pcie_init_2_1_0,
  1101. .post_init = qcom_pcie_post_init_2_1_0,
  1102. .deinit = qcom_pcie_deinit_2_1_0,
  1103. .ltssm_enable = qcom_pcie_2_1_0_ltssm_enable,
  1104. };
  1105. /* Qcom IP rev.: 1.0.0 Synopsys IP rev.: 4.11a */
  1106. static const struct qcom_pcie_ops ops_1_0_0 = {
  1107. .get_resources = qcom_pcie_get_resources_1_0_0,
  1108. .init = qcom_pcie_init_1_0_0,
  1109. .post_init = qcom_pcie_post_init_1_0_0,
  1110. .deinit = qcom_pcie_deinit_1_0_0,
  1111. .ltssm_enable = qcom_pcie_2_1_0_ltssm_enable,
  1112. };
  1113. /* Qcom IP rev.: 2.3.2 Synopsys IP rev.: 4.21a */
  1114. static const struct qcom_pcie_ops ops_2_3_2 = {
  1115. .get_resources = qcom_pcie_get_resources_2_3_2,
  1116. .init = qcom_pcie_init_2_3_2,
  1117. .post_init = qcom_pcie_post_init_2_3_2,
  1118. .deinit = qcom_pcie_deinit_2_3_2,
  1119. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1120. };
  1121. /* Qcom IP rev.: 2.4.0 Synopsys IP rev.: 4.20a */
  1122. static const struct qcom_pcie_ops ops_2_4_0 = {
  1123. .get_resources = qcom_pcie_get_resources_2_4_0,
  1124. .init = qcom_pcie_init_2_4_0,
  1125. .post_init = qcom_pcie_post_init_2_3_2,
  1126. .deinit = qcom_pcie_deinit_2_4_0,
  1127. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1128. };
  1129. /* Qcom IP rev.: 2.3.3 Synopsys IP rev.: 4.30a */
  1130. static const struct qcom_pcie_ops ops_2_3_3 = {
  1131. .get_resources = qcom_pcie_get_resources_2_3_3,
  1132. .init = qcom_pcie_init_2_3_3,
  1133. .post_init = qcom_pcie_post_init_2_3_3,
  1134. .deinit = qcom_pcie_deinit_2_3_3,
  1135. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1136. };
  1137. /* Qcom IP rev.: 2.7.0 Synopsys IP rev.: 4.30a */
  1138. static const struct qcom_pcie_ops ops_2_7_0 = {
  1139. .get_resources = qcom_pcie_get_resources_2_7_0,
  1140. .init = qcom_pcie_init_2_7_0,
  1141. .post_init = qcom_pcie_post_init_2_7_0,
  1142. .deinit = qcom_pcie_deinit_2_7_0,
  1143. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1144. };
  1145. /* Qcom IP rev.: 1.9.0 */
  1146. static const struct qcom_pcie_ops ops_1_9_0 = {
  1147. .get_resources = qcom_pcie_get_resources_2_7_0,
  1148. .init = qcom_pcie_init_2_7_0,
  1149. .post_init = qcom_pcie_post_init_2_7_0,
  1150. .host_post_init = qcom_pcie_host_post_init_2_7_0,
  1151. .deinit = qcom_pcie_deinit_2_7_0,
  1152. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1153. .config_sid = qcom_pcie_config_sid_1_9_0,
  1154. };
  1155. /* Qcom IP rev.: 1.21.0 Synopsys IP rev.: 5.60a */
  1156. static const struct qcom_pcie_ops ops_1_21_0 = {
  1157. .get_resources = qcom_pcie_get_resources_2_7_0,
  1158. .init = qcom_pcie_init_2_7_0,
  1159. .post_init = qcom_pcie_post_init_2_7_0,
  1160. .host_post_init = qcom_pcie_host_post_init_2_7_0,
  1161. .deinit = qcom_pcie_deinit_2_7_0,
  1162. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1163. };
  1164. /* Qcom IP rev.: 2.9.0 Synopsys IP rev.: 5.00a */
  1165. static const struct qcom_pcie_ops ops_2_9_0 = {
  1166. .get_resources = qcom_pcie_get_resources_2_9_0,
  1167. .init = qcom_pcie_init_2_9_0,
  1168. .post_init = qcom_pcie_post_init_2_9_0,
  1169. .deinit = qcom_pcie_deinit_2_9_0,
  1170. .ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
  1171. };
  1172. static const struct qcom_pcie_cfg cfg_1_0_0 = {
  1173. .ops = &ops_1_0_0,
  1174. };
  1175. static const struct qcom_pcie_cfg cfg_1_9_0 = {
  1176. .ops = &ops_1_9_0,
  1177. };
  1178. static const struct qcom_pcie_cfg cfg_1_34_0 = {
  1179. .ops = &ops_1_9_0,
  1180. .override_no_snoop = true,
  1181. };
  1182. static const struct qcom_pcie_cfg cfg_2_1_0 = {
  1183. .ops = &ops_2_1_0,
  1184. };
  1185. static const struct qcom_pcie_cfg cfg_2_3_2 = {
  1186. .ops = &ops_2_3_2,
  1187. .no_l0s = true,
  1188. };
  1189. static const struct qcom_pcie_cfg cfg_2_3_3 = {
  1190. .ops = &ops_2_3_3,
  1191. };
  1192. static const struct qcom_pcie_cfg cfg_2_4_0 = {
  1193. .ops = &ops_2_4_0,
  1194. };
  1195. static const struct qcom_pcie_cfg cfg_2_7_0 = {
  1196. .ops = &ops_2_7_0,
  1197. };
  1198. static const struct qcom_pcie_cfg cfg_2_9_0 = {
  1199. .ops = &ops_2_9_0,
  1200. };
  1201. static const struct qcom_pcie_cfg cfg_sc8280xp = {
  1202. .ops = &ops_1_21_0,
  1203. .no_l0s = true,
  1204. };
  1205. static const struct qcom_pcie_cfg cfg_fw_managed = {
  1206. .firmware_managed = true,
  1207. };
  1208. static const struct dw_pcie_ops dw_pcie_ops = {
  1209. .link_up = qcom_pcie_link_up,
  1210. .start_link = qcom_pcie_start_link,
  1211. };
  1212. static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
  1213. {
  1214. struct dw_pcie *pci = pcie->pci;
  1215. int ret;
  1216. pcie->icc_mem = devm_of_icc_get(pci->dev, "pcie-mem");
  1217. if (IS_ERR(pcie->icc_mem))
  1218. return PTR_ERR(pcie->icc_mem);
  1219. pcie->icc_cpu = devm_of_icc_get(pci->dev, "cpu-pcie");
  1220. if (IS_ERR(pcie->icc_cpu))
  1221. return PTR_ERR(pcie->icc_cpu);
  1222. /*
  1223. * Some Qualcomm platforms require interconnect bandwidth constraints
  1224. * to be set before enabling interconnect clocks.
  1225. *
  1226. * Set an initial peak bandwidth corresponding to single-lane Gen 1
  1227. * for the pcie-mem path.
  1228. */
  1229. ret = icc_set_bw(pcie->icc_mem, 0, QCOM_PCIE_LINK_SPEED_TO_BW(1));
  1230. if (ret) {
  1231. dev_err(pci->dev, "Failed to set bandwidth for PCIe-MEM interconnect path: %d\n",
  1232. ret);
  1233. return ret;
  1234. }
  1235. /*
  1236. * Since the CPU-PCIe path is only used for activities like register
  1237. * access of the host controller and endpoint Config/BAR space access,
  1238. * HW team has recommended to use a minimal bandwidth of 1KBps just to
  1239. * keep the path active.
  1240. */
  1241. ret = icc_set_bw(pcie->icc_cpu, 0, kBps_to_icc(1));
  1242. if (ret) {
  1243. dev_err(pci->dev, "Failed to set bandwidth for CPU-PCIe interconnect path: %d\n",
  1244. ret);
  1245. icc_set_bw(pcie->icc_mem, 0, 0);
  1246. return ret;
  1247. }
  1248. return 0;
  1249. }
  1250. static void qcom_pcie_icc_opp_update(struct qcom_pcie *pcie)
  1251. {
  1252. u32 offset, status, width, speed;
  1253. struct dw_pcie *pci = pcie->pci;
  1254. struct dev_pm_opp_key key = {};
  1255. unsigned long freq_kbps;
  1256. struct dev_pm_opp *opp;
  1257. int ret, freq_mbps;
  1258. offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  1259. status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
  1260. /* Only update constraints if link is up. */
  1261. if (!(status & PCI_EXP_LNKSTA_DLLLA))
  1262. return;
  1263. speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
  1264. width = FIELD_GET(PCI_EXP_LNKSTA_NLW, status);
  1265. if (pcie->icc_mem) {
  1266. ret = icc_set_bw(pcie->icc_mem, 0,
  1267. width * QCOM_PCIE_LINK_SPEED_TO_BW(speed));
  1268. if (ret) {
  1269. dev_err(pci->dev, "Failed to set bandwidth for PCIe-MEM interconnect path: %d\n",
  1270. ret);
  1271. }
  1272. } else if (pcie->use_pm_opp) {
  1273. freq_mbps = pcie_dev_speed_mbps(pcie_link_speed[speed]);
  1274. if (freq_mbps < 0)
  1275. return;
  1276. freq_kbps = freq_mbps * KILO;
  1277. opp = dev_pm_opp_find_level_exact(pci->dev, speed);
  1278. if (IS_ERR(opp)) {
  1279. /* opp-level is not defined use only frequency */
  1280. opp = dev_pm_opp_find_freq_exact(pci->dev, freq_kbps * width,
  1281. true);
  1282. } else {
  1283. /* put opp-level OPP */
  1284. dev_pm_opp_put(opp);
  1285. key.freq = freq_kbps * width;
  1286. key.level = speed;
  1287. key.bw = 0;
  1288. opp = dev_pm_opp_find_key_exact(pci->dev, &key, true);
  1289. }
  1290. if (!IS_ERR(opp)) {
  1291. ret = dev_pm_opp_set_opp(pci->dev, opp);
  1292. if (ret)
  1293. dev_err(pci->dev, "Failed to set OPP for freq (%lu): %d\n",
  1294. freq_kbps * width, ret);
  1295. dev_pm_opp_put(opp);
  1296. }
  1297. }
  1298. }
  1299. static int qcom_pcie_link_transition_count(struct seq_file *s, void *data)
  1300. {
  1301. struct qcom_pcie *pcie = (struct qcom_pcie *)dev_get_drvdata(s->private);
  1302. seq_printf(s, "L0s transition count: %u\n",
  1303. readl_relaxed(pcie->mhi + PARF_DEBUG_CNT_PM_LINKST_IN_L0S));
  1304. seq_printf(s, "L1 transition count: %u\n",
  1305. readl_relaxed(pcie->mhi + PARF_DEBUG_CNT_PM_LINKST_IN_L1));
  1306. seq_printf(s, "L1.1 transition count: %u\n",
  1307. readl_relaxed(pcie->mhi + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L1));
  1308. seq_printf(s, "L1.2 transition count: %u\n",
  1309. readl_relaxed(pcie->mhi + PARF_DEBUG_CNT_AUX_CLK_IN_L1SUB_L2));
  1310. seq_printf(s, "L2 transition count: %u\n",
  1311. readl_relaxed(pcie->mhi + PARF_DEBUG_CNT_PM_LINKST_IN_L2));
  1312. return 0;
  1313. }
  1314. static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
  1315. {
  1316. struct dw_pcie *pci = pcie->pci;
  1317. struct device *dev = pci->dev;
  1318. char *name;
  1319. name = devm_kasprintf(dev, GFP_KERNEL, "%pOFP", dev->of_node);
  1320. if (!name)
  1321. return;
  1322. pcie->debugfs = debugfs_create_dir(name, NULL);
  1323. debugfs_create_devm_seqfile(dev, "link_transition_count", pcie->debugfs,
  1324. qcom_pcie_link_transition_count);
  1325. }
  1326. static void qcom_pci_free_msi(void *ptr)
  1327. {
  1328. struct dw_pcie_rp *pp = (struct dw_pcie_rp *)ptr;
  1329. if (pp && pp->use_imsi_rx)
  1330. dw_pcie_free_msi(pp);
  1331. }
  1332. static int qcom_pcie_ecam_host_init(struct pci_config_window *cfg)
  1333. {
  1334. struct device *dev = cfg->parent;
  1335. struct dw_pcie_rp *pp;
  1336. struct dw_pcie *pci;
  1337. int ret;
  1338. pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
  1339. if (!pci)
  1340. return -ENOMEM;
  1341. pci->dev = dev;
  1342. pp = &pci->pp;
  1343. pci->dbi_base = cfg->win;
  1344. pp->num_vectors = MSI_DEF_NUM_VECTORS;
  1345. ret = dw_pcie_msi_host_init(pp);
  1346. if (ret)
  1347. return ret;
  1348. pp->use_imsi_rx = true;
  1349. dw_pcie_msi_init(pp);
  1350. return devm_add_action_or_reset(dev, qcom_pci_free_msi, pp);
  1351. }
  1352. static const struct pci_ecam_ops pci_qcom_ecam_ops = {
  1353. .init = qcom_pcie_ecam_host_init,
  1354. .pci_ops = {
  1355. .map_bus = pci_ecam_map_bus,
  1356. .read = pci_generic_config_read,
  1357. .write = pci_generic_config_write,
  1358. }
  1359. };
  1360. /* Parse PERST# from all nodes in depth first manner starting from @np */
  1361. static int qcom_pcie_parse_perst(struct qcom_pcie *pcie,
  1362. struct qcom_pcie_port *port,
  1363. struct device_node *np)
  1364. {
  1365. struct device *dev = pcie->pci->dev;
  1366. struct qcom_pcie_perst *perst;
  1367. struct gpio_desc *reset;
  1368. int ret;
  1369. if (!of_find_property(np, "reset-gpios", NULL))
  1370. goto parse_child_node;
  1371. reset = devm_fwnode_gpiod_get(dev, of_fwnode_handle(np), "reset",
  1372. GPIOD_OUT_HIGH, "PERST#");
  1373. if (IS_ERR(reset)) {
  1374. /*
  1375. * FIXME: GPIOLIB currently supports exclusive GPIO access only.
  1376. * Non exclusive access is broken. But shared PERST# requires
  1377. * non-exclusive access. So once GPIOLIB properly supports it,
  1378. * implement it here.
  1379. */
  1380. if (PTR_ERR(reset) == -EBUSY)
  1381. dev_err(dev, "Shared PERST# is not supported\n");
  1382. return PTR_ERR(reset);
  1383. }
  1384. perst = devm_kzalloc(dev, sizeof(*perst), GFP_KERNEL);
  1385. if (!perst)
  1386. return -ENOMEM;
  1387. INIT_LIST_HEAD(&perst->list);
  1388. perst->desc = reset;
  1389. list_add_tail(&perst->list, &port->perst);
  1390. parse_child_node:
  1391. for_each_available_child_of_node_scoped(np, child) {
  1392. ret = qcom_pcie_parse_perst(pcie, port, child);
  1393. if (ret)
  1394. return ret;
  1395. }
  1396. return 0;
  1397. }
  1398. static int qcom_pcie_parse_port(struct qcom_pcie *pcie, struct device_node *node)
  1399. {
  1400. struct device *dev = pcie->pci->dev;
  1401. struct qcom_pcie_port *port;
  1402. struct phy *phy;
  1403. int ret;
  1404. phy = devm_of_phy_get(dev, node, NULL);
  1405. if (IS_ERR(phy))
  1406. return PTR_ERR(phy);
  1407. port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
  1408. if (!port)
  1409. return -ENOMEM;
  1410. ret = phy_init(phy);
  1411. if (ret)
  1412. return ret;
  1413. INIT_LIST_HEAD(&port->perst);
  1414. ret = qcom_pcie_parse_perst(pcie, port, node);
  1415. if (ret)
  1416. return ret;
  1417. port->phy = phy;
  1418. INIT_LIST_HEAD(&port->list);
  1419. list_add_tail(&port->list, &pcie->ports);
  1420. return 0;
  1421. }
  1422. static int qcom_pcie_parse_ports(struct qcom_pcie *pcie)
  1423. {
  1424. struct qcom_pcie_perst *perst, *tmp_perst;
  1425. struct qcom_pcie_port *port, *tmp_port;
  1426. struct device *dev = pcie->pci->dev;
  1427. int ret = -ENODEV;
  1428. for_each_available_child_of_node_scoped(dev->of_node, of_port) {
  1429. if (!of_node_is_type(of_port, "pci"))
  1430. continue;
  1431. ret = qcom_pcie_parse_port(pcie, of_port);
  1432. if (ret)
  1433. goto err_port_del;
  1434. }
  1435. return ret;
  1436. err_port_del:
  1437. list_for_each_entry_safe(port, tmp_port, &pcie->ports, list) {
  1438. list_for_each_entry_safe(perst, tmp_perst, &port->perst, list)
  1439. list_del(&perst->list);
  1440. phy_exit(port->phy);
  1441. list_del(&port->list);
  1442. }
  1443. return ret;
  1444. }
  1445. static int qcom_pcie_parse_legacy_binding(struct qcom_pcie *pcie)
  1446. {
  1447. struct device *dev = pcie->pci->dev;
  1448. struct qcom_pcie_perst *perst;
  1449. struct qcom_pcie_port *port;
  1450. struct gpio_desc *reset;
  1451. struct phy *phy;
  1452. int ret;
  1453. phy = devm_phy_optional_get(dev, "pciephy");
  1454. if (IS_ERR(phy))
  1455. return PTR_ERR(phy);
  1456. reset = devm_gpiod_get_optional(dev, "perst", GPIOD_OUT_HIGH);
  1457. if (IS_ERR(reset))
  1458. return PTR_ERR(reset);
  1459. ret = phy_init(phy);
  1460. if (ret)
  1461. return ret;
  1462. port = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);
  1463. if (!port)
  1464. return -ENOMEM;
  1465. perst = devm_kzalloc(dev, sizeof(*perst), GFP_KERNEL);
  1466. if (!perst)
  1467. return -ENOMEM;
  1468. port->phy = phy;
  1469. INIT_LIST_HEAD(&port->list);
  1470. list_add_tail(&port->list, &pcie->ports);
  1471. perst->desc = reset;
  1472. INIT_LIST_HEAD(&port->perst);
  1473. INIT_LIST_HEAD(&perst->list);
  1474. list_add_tail(&perst->list, &port->perst);
  1475. return 0;
  1476. }
  1477. static int qcom_pcie_probe(struct platform_device *pdev)
  1478. {
  1479. struct qcom_pcie_perst *perst, *tmp_perst;
  1480. struct qcom_pcie_port *port, *tmp_port;
  1481. const struct qcom_pcie_cfg *pcie_cfg;
  1482. unsigned long max_freq = ULONG_MAX;
  1483. struct device *dev = &pdev->dev;
  1484. struct dev_pm_opp *opp;
  1485. struct qcom_pcie *pcie;
  1486. struct dw_pcie_rp *pp;
  1487. struct resource *res;
  1488. struct dw_pcie *pci;
  1489. int ret;
  1490. pcie_cfg = of_device_get_match_data(dev);
  1491. if (!pcie_cfg) {
  1492. dev_err(dev, "No platform data\n");
  1493. return -ENODATA;
  1494. }
  1495. if (!pcie_cfg->firmware_managed && !pcie_cfg->ops) {
  1496. dev_err(dev, "No platform ops\n");
  1497. return -ENODATA;
  1498. }
  1499. pm_runtime_enable(dev);
  1500. ret = pm_runtime_get_sync(dev);
  1501. if (ret < 0)
  1502. goto err_pm_runtime_put;
  1503. if (pcie_cfg->firmware_managed) {
  1504. struct pci_host_bridge *bridge;
  1505. struct pci_config_window *cfg;
  1506. bridge = devm_pci_alloc_host_bridge(dev, 0);
  1507. if (!bridge) {
  1508. ret = -ENOMEM;
  1509. goto err_pm_runtime_put;
  1510. }
  1511. /* Parse and map our ECAM configuration space area */
  1512. cfg = pci_host_common_ecam_create(dev, bridge,
  1513. &pci_qcom_ecam_ops);
  1514. if (IS_ERR(cfg)) {
  1515. ret = PTR_ERR(cfg);
  1516. goto err_pm_runtime_put;
  1517. }
  1518. bridge->sysdata = cfg;
  1519. bridge->ops = (struct pci_ops *)&pci_qcom_ecam_ops.pci_ops;
  1520. bridge->msi_domain = true;
  1521. ret = pci_host_probe(bridge);
  1522. if (ret)
  1523. goto err_pm_runtime_put;
  1524. return 0;
  1525. }
  1526. pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
  1527. if (!pcie) {
  1528. ret = -ENOMEM;
  1529. goto err_pm_runtime_put;
  1530. }
  1531. pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL);
  1532. if (!pci) {
  1533. ret = -ENOMEM;
  1534. goto err_pm_runtime_put;
  1535. }
  1536. INIT_LIST_HEAD(&pcie->ports);
  1537. pci->dev = dev;
  1538. pci->ops = &dw_pcie_ops;
  1539. pp = &pci->pp;
  1540. pcie->pci = pci;
  1541. pcie->cfg = pcie_cfg;
  1542. pcie->parf = devm_platform_ioremap_resource_byname(pdev, "parf");
  1543. if (IS_ERR(pcie->parf)) {
  1544. ret = PTR_ERR(pcie->parf);
  1545. goto err_pm_runtime_put;
  1546. }
  1547. /* MHI region is optional */
  1548. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mhi");
  1549. if (res) {
  1550. pcie->mhi = devm_ioremap_resource(dev, res);
  1551. if (IS_ERR(pcie->mhi)) {
  1552. ret = PTR_ERR(pcie->mhi);
  1553. goto err_pm_runtime_put;
  1554. }
  1555. }
  1556. /* OPP table is optional */
  1557. ret = devm_pm_opp_of_add_table(dev);
  1558. if (ret && ret != -ENODEV) {
  1559. dev_err_probe(dev, ret, "Failed to add OPP table\n");
  1560. goto err_pm_runtime_put;
  1561. }
  1562. /*
  1563. * Before the PCIe link is initialized, vote for highest OPP in the OPP
  1564. * table, so that we are voting for maximum voltage corner for the
  1565. * link to come up in maximum supported speed. At the end of the
  1566. * probe(), OPP will be updated using qcom_pcie_icc_opp_update().
  1567. */
  1568. if (!ret) {
  1569. opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
  1570. if (IS_ERR(opp)) {
  1571. ret = PTR_ERR(opp);
  1572. dev_err_probe(pci->dev, ret,
  1573. "Unable to find max freq OPP\n");
  1574. goto err_pm_runtime_put;
  1575. } else {
  1576. ret = dev_pm_opp_set_opp(dev, opp);
  1577. }
  1578. dev_pm_opp_put(opp);
  1579. if (ret) {
  1580. dev_err_probe(pci->dev, ret,
  1581. "Failed to set OPP for freq %lu\n",
  1582. max_freq);
  1583. goto err_pm_runtime_put;
  1584. }
  1585. pcie->use_pm_opp = true;
  1586. } else {
  1587. /* Skip ICC init if OPP is supported as it is handled by OPP */
  1588. ret = qcom_pcie_icc_init(pcie);
  1589. if (ret)
  1590. goto err_pm_runtime_put;
  1591. }
  1592. ret = pcie->cfg->ops->get_resources(pcie);
  1593. if (ret)
  1594. goto err_pm_runtime_put;
  1595. pp->ops = &qcom_pcie_dw_ops;
  1596. ret = qcom_pcie_parse_ports(pcie);
  1597. if (ret) {
  1598. if (ret != -ENODEV) {
  1599. dev_err_probe(pci->dev, ret,
  1600. "Failed to parse Root Port: %d\n", ret);
  1601. goto err_pm_runtime_put;
  1602. }
  1603. /*
  1604. * In the case of properties not populated in Root Port node,
  1605. * fallback to the legacy method of parsing the Host Bridge
  1606. * node. This is to maintain DT backwards compatibility.
  1607. */
  1608. ret = qcom_pcie_parse_legacy_binding(pcie);
  1609. if (ret)
  1610. goto err_pm_runtime_put;
  1611. }
  1612. platform_set_drvdata(pdev, pcie);
  1613. ret = dw_pcie_host_init(pp);
  1614. if (ret) {
  1615. dev_err_probe(dev, ret, "cannot initialize host\n");
  1616. goto err_phy_exit;
  1617. }
  1618. qcom_pcie_icc_opp_update(pcie);
  1619. if (pcie->mhi)
  1620. qcom_pcie_init_debugfs(pcie);
  1621. return 0;
  1622. err_phy_exit:
  1623. list_for_each_entry_safe(port, tmp_port, &pcie->ports, list) {
  1624. list_for_each_entry_safe(perst, tmp_perst, &port->perst, list)
  1625. list_del(&perst->list);
  1626. phy_exit(port->phy);
  1627. list_del(&port->list);
  1628. }
  1629. err_pm_runtime_put:
  1630. pm_runtime_put(dev);
  1631. pm_runtime_disable(dev);
  1632. return ret;
  1633. }
  1634. static int qcom_pcie_suspend_noirq(struct device *dev)
  1635. {
  1636. struct qcom_pcie *pcie;
  1637. int ret = 0;
  1638. pcie = dev_get_drvdata(dev);
  1639. if (!pcie)
  1640. return 0;
  1641. /*
  1642. * Set minimum bandwidth required to keep data path functional during
  1643. * suspend.
  1644. */
  1645. if (pcie->icc_mem) {
  1646. ret = icc_set_bw(pcie->icc_mem, 0, kBps_to_icc(1));
  1647. if (ret) {
  1648. dev_err(dev,
  1649. "Failed to set bandwidth for PCIe-MEM interconnect path: %d\n",
  1650. ret);
  1651. return ret;
  1652. }
  1653. }
  1654. /*
  1655. * Turn OFF the resources only for controllers without active PCIe
  1656. * devices. For controllers with active devices, the resources are kept
  1657. * ON and the link is expected to be in L0/L1 (sub)states.
  1658. *
  1659. * Turning OFF the resources for controllers with active PCIe devices
  1660. * will trigger access violation during the end of the suspend cycle,
  1661. * as kernel tries to access the PCIe devices config space for masking
  1662. * MSIs.
  1663. *
  1664. * Also, it is not desirable to put the link into L2/L3 state as that
  1665. * implies VDD supply will be removed and the devices may go into
  1666. * powerdown state. This will affect the lifetime of the storage devices
  1667. * like NVMe.
  1668. */
  1669. if (!dw_pcie_link_up(pcie->pci)) {
  1670. qcom_pcie_host_deinit(&pcie->pci->pp);
  1671. pcie->suspended = true;
  1672. }
  1673. /*
  1674. * Only disable CPU-PCIe interconnect path if the suspend is non-S2RAM.
  1675. * Because on some platforms, DBI access can happen very late during the
  1676. * S2RAM and a non-active CPU-PCIe interconnect path may lead to NoC
  1677. * error.
  1678. */
  1679. if (pm_suspend_target_state != PM_SUSPEND_MEM) {
  1680. ret = icc_disable(pcie->icc_cpu);
  1681. if (ret)
  1682. dev_err(dev, "Failed to disable CPU-PCIe interconnect path: %d\n", ret);
  1683. if (pcie->use_pm_opp)
  1684. dev_pm_opp_set_opp(pcie->pci->dev, NULL);
  1685. }
  1686. return ret;
  1687. }
  1688. static int qcom_pcie_resume_noirq(struct device *dev)
  1689. {
  1690. struct qcom_pcie *pcie;
  1691. int ret;
  1692. pcie = dev_get_drvdata(dev);
  1693. if (!pcie)
  1694. return 0;
  1695. if (pm_suspend_target_state != PM_SUSPEND_MEM) {
  1696. ret = icc_enable(pcie->icc_cpu);
  1697. if (ret) {
  1698. dev_err(dev, "Failed to enable CPU-PCIe interconnect path: %d\n", ret);
  1699. return ret;
  1700. }
  1701. }
  1702. if (pcie->suspended) {
  1703. ret = qcom_pcie_host_init(&pcie->pci->pp);
  1704. if (ret)
  1705. return ret;
  1706. pcie->suspended = false;
  1707. }
  1708. qcom_pcie_icc_opp_update(pcie);
  1709. return 0;
  1710. }
  1711. static const struct of_device_id qcom_pcie_match[] = {
  1712. { .compatible = "qcom,pcie-apq8064", .data = &cfg_2_1_0 },
  1713. { .compatible = "qcom,pcie-apq8084", .data = &cfg_1_0_0 },
  1714. { .compatible = "qcom,pcie-ipq4019", .data = &cfg_2_4_0 },
  1715. { .compatible = "qcom,pcie-ipq5018", .data = &cfg_2_9_0 },
  1716. { .compatible = "qcom,pcie-ipq6018", .data = &cfg_2_9_0 },
  1717. { .compatible = "qcom,pcie-ipq8064", .data = &cfg_2_1_0 },
  1718. { .compatible = "qcom,pcie-ipq8064-v2", .data = &cfg_2_1_0 },
  1719. { .compatible = "qcom,pcie-ipq8074", .data = &cfg_2_3_3 },
  1720. { .compatible = "qcom,pcie-ipq8074-gen3", .data = &cfg_2_9_0 },
  1721. { .compatible = "qcom,pcie-ipq9574", .data = &cfg_2_9_0 },
  1722. { .compatible = "qcom,pcie-msm8996", .data = &cfg_2_3_2 },
  1723. { .compatible = "qcom,pcie-qcs404", .data = &cfg_2_4_0 },
  1724. { .compatible = "qcom,pcie-sa8255p", .data = &cfg_fw_managed },
  1725. { .compatible = "qcom,pcie-sa8540p", .data = &cfg_sc8280xp },
  1726. { .compatible = "qcom,pcie-sa8775p", .data = &cfg_1_34_0},
  1727. { .compatible = "qcom,pcie-sc7280", .data = &cfg_1_9_0 },
  1728. { .compatible = "qcom,pcie-sc8180x", .data = &cfg_1_9_0 },
  1729. { .compatible = "qcom,pcie-sc8280xp", .data = &cfg_sc8280xp },
  1730. { .compatible = "qcom,pcie-sdm845", .data = &cfg_2_7_0 },
  1731. { .compatible = "qcom,pcie-sdx55", .data = &cfg_1_9_0 },
  1732. { .compatible = "qcom,pcie-sm8150", .data = &cfg_1_9_0 },
  1733. { .compatible = "qcom,pcie-sm8250", .data = &cfg_1_9_0 },
  1734. { .compatible = "qcom,pcie-sm8350", .data = &cfg_1_9_0 },
  1735. { .compatible = "qcom,pcie-sm8450-pcie0", .data = &cfg_1_9_0 },
  1736. { .compatible = "qcom,pcie-sm8450-pcie1", .data = &cfg_1_9_0 },
  1737. { .compatible = "qcom,pcie-sm8550", .data = &cfg_1_9_0 },
  1738. { .compatible = "qcom,pcie-x1e80100", .data = &cfg_sc8280xp },
  1739. { }
  1740. };
  1741. static void qcom_fixup_class(struct pci_dev *dev)
  1742. {
  1743. dev->class = PCI_CLASS_BRIDGE_PCI_NORMAL;
  1744. }
  1745. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0101, qcom_fixup_class);
  1746. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0104, qcom_fixup_class);
  1747. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0106, qcom_fixup_class);
  1748. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0107, qcom_fixup_class);
  1749. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0302, qcom_fixup_class);
  1750. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x1000, qcom_fixup_class);
  1751. DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x1001, qcom_fixup_class);
  1752. static const struct dev_pm_ops qcom_pcie_pm_ops = {
  1753. NOIRQ_SYSTEM_SLEEP_PM_OPS(qcom_pcie_suspend_noirq, qcom_pcie_resume_noirq)
  1754. };
  1755. static struct platform_driver qcom_pcie_driver = {
  1756. .probe = qcom_pcie_probe,
  1757. .driver = {
  1758. .name = "qcom-pcie",
  1759. .suppress_bind_attrs = true,
  1760. .of_match_table = qcom_pcie_match,
  1761. .pm = &qcom_pcie_pm_ops,
  1762. .probe_type = PROBE_PREFER_ASYNCHRONOUS,
  1763. },
  1764. };
  1765. builtin_platform_driver(qcom_pcie_driver);