pcie-designware.c 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Synopsys DesignWare PCIe host controller driver
  4. *
  5. * Copyright (C) 2013 Samsung Electronics Co., Ltd.
  6. * https://www.samsung.com
  7. *
  8. * Author: Jingoo Han <jg1.han@samsung.com>
  9. */
  10. #include <linux/align.h>
  11. #include <linux/bitops.h>
  12. #include <linux/clk.h>
  13. #include <linux/delay.h>
  14. #include <linux/dma/edma.h>
  15. #include <linux/gpio/consumer.h>
  16. #include <linux/ioport.h>
  17. #include <linux/of.h>
  18. #include <linux/of_address.h>
  19. #include <linux/pcie-dwc.h>
  20. #include <linux/platform_device.h>
  21. #include <linux/sizes.h>
  22. #include <linux/types.h>
  23. #include "../../pci.h"
  24. #include "pcie-designware.h"
  25. static const char * const dw_pcie_app_clks[DW_PCIE_NUM_APP_CLKS] = {
  26. [DW_PCIE_DBI_CLK] = "dbi",
  27. [DW_PCIE_MSTR_CLK] = "mstr",
  28. [DW_PCIE_SLV_CLK] = "slv",
  29. };
  30. static const char * const dw_pcie_core_clks[DW_PCIE_NUM_CORE_CLKS] = {
  31. [DW_PCIE_PIPE_CLK] = "pipe",
  32. [DW_PCIE_CORE_CLK] = "core",
  33. [DW_PCIE_AUX_CLK] = "aux",
  34. [DW_PCIE_REF_CLK] = "ref",
  35. };
  36. static const char * const dw_pcie_app_rsts[DW_PCIE_NUM_APP_RSTS] = {
  37. [DW_PCIE_DBI_RST] = "dbi",
  38. [DW_PCIE_MSTR_RST] = "mstr",
  39. [DW_PCIE_SLV_RST] = "slv",
  40. };
  41. static const char * const dw_pcie_core_rsts[DW_PCIE_NUM_CORE_RSTS] = {
  42. [DW_PCIE_NON_STICKY_RST] = "non-sticky",
  43. [DW_PCIE_STICKY_RST] = "sticky",
  44. [DW_PCIE_CORE_RST] = "core",
  45. [DW_PCIE_PIPE_RST] = "pipe",
  46. [DW_PCIE_PHY_RST] = "phy",
  47. [DW_PCIE_HOT_RST] = "hot",
  48. [DW_PCIE_PWR_RST] = "pwr",
  49. };
  50. static const struct dwc_pcie_vsec_id dwc_pcie_ptm_vsec_ids[] = {
  51. { .vendor_id = PCI_VENDOR_ID_QCOM, /* EP */
  52. .vsec_id = 0x03, .vsec_rev = 0x1 },
  53. { .vendor_id = PCI_VENDOR_ID_QCOM, /* RC */
  54. .vsec_id = 0x04, .vsec_rev = 0x1 },
  55. { }
  56. };
  57. static int dw_pcie_get_clocks(struct dw_pcie *pci)
  58. {
  59. int i, ret;
  60. for (i = 0; i < DW_PCIE_NUM_APP_CLKS; i++)
  61. pci->app_clks[i].id = dw_pcie_app_clks[i];
  62. for (i = 0; i < DW_PCIE_NUM_CORE_CLKS; i++)
  63. pci->core_clks[i].id = dw_pcie_core_clks[i];
  64. ret = devm_clk_bulk_get_optional(pci->dev, DW_PCIE_NUM_APP_CLKS,
  65. pci->app_clks);
  66. if (ret)
  67. return ret;
  68. return devm_clk_bulk_get_optional(pci->dev, DW_PCIE_NUM_CORE_CLKS,
  69. pci->core_clks);
  70. }
  71. static int dw_pcie_get_resets(struct dw_pcie *pci)
  72. {
  73. int i, ret;
  74. for (i = 0; i < DW_PCIE_NUM_APP_RSTS; i++)
  75. pci->app_rsts[i].id = dw_pcie_app_rsts[i];
  76. for (i = 0; i < DW_PCIE_NUM_CORE_RSTS; i++)
  77. pci->core_rsts[i].id = dw_pcie_core_rsts[i];
  78. ret = devm_reset_control_bulk_get_optional_shared(pci->dev,
  79. DW_PCIE_NUM_APP_RSTS,
  80. pci->app_rsts);
  81. if (ret)
  82. return ret;
  83. ret = devm_reset_control_bulk_get_optional_exclusive(pci->dev,
  84. DW_PCIE_NUM_CORE_RSTS,
  85. pci->core_rsts);
  86. if (ret)
  87. return ret;
  88. pci->pe_rst = devm_gpiod_get_optional(pci->dev, "reset", GPIOD_OUT_HIGH);
  89. if (IS_ERR(pci->pe_rst))
  90. return PTR_ERR(pci->pe_rst);
  91. return 0;
  92. }
  93. int dw_pcie_get_resources(struct dw_pcie *pci)
  94. {
  95. struct platform_device *pdev = to_platform_device(pci->dev);
  96. struct device_node *np = dev_of_node(pci->dev);
  97. struct resource *res;
  98. int ret;
  99. if (!pci->dbi_base) {
  100. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi");
  101. pci->dbi_base = devm_pci_remap_cfg_resource(pci->dev, res);
  102. if (IS_ERR(pci->dbi_base))
  103. return PTR_ERR(pci->dbi_base);
  104. pci->dbi_phys_addr = res->start;
  105. }
  106. /* DBI2 is mainly useful for the endpoint controller */
  107. if (!pci->dbi_base2) {
  108. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dbi2");
  109. if (res) {
  110. pci->dbi_base2 = devm_pci_remap_cfg_resource(pci->dev, res);
  111. if (IS_ERR(pci->dbi_base2))
  112. return PTR_ERR(pci->dbi_base2);
  113. } else {
  114. pci->dbi_base2 = pci->dbi_base + SZ_4K;
  115. }
  116. }
  117. /* For non-unrolled iATU/eDMA platforms this range will be ignored */
  118. if (!pci->atu_base) {
  119. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "atu");
  120. if (res) {
  121. pci->atu_size = resource_size(res);
  122. pci->atu_base = devm_ioremap_resource(pci->dev, res);
  123. if (IS_ERR(pci->atu_base))
  124. return PTR_ERR(pci->atu_base);
  125. pci->atu_phys_addr = res->start;
  126. } else {
  127. pci->atu_base = pci->dbi_base + DEFAULT_DBI_ATU_OFFSET;
  128. }
  129. }
  130. /* Set a default value suitable for at most 8 in and 8 out windows */
  131. if (!pci->atu_size)
  132. pci->atu_size = SZ_4K;
  133. /* eDMA region can be mapped to a custom base address */
  134. if (!pci->edma.reg_base) {
  135. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dma");
  136. if (res) {
  137. pci->edma.reg_base = devm_ioremap_resource(pci->dev, res);
  138. if (IS_ERR(pci->edma.reg_base))
  139. return PTR_ERR(pci->edma.reg_base);
  140. } else if (pci->atu_size >= 2 * DEFAULT_DBI_DMA_OFFSET) {
  141. pci->edma.reg_base = pci->atu_base + DEFAULT_DBI_DMA_OFFSET;
  142. }
  143. }
  144. /* ELBI is an optional resource */
  145. if (!pci->elbi_base) {
  146. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "elbi");
  147. if (res) {
  148. pci->elbi_base = devm_ioremap_resource(pci->dev, res);
  149. if (IS_ERR(pci->elbi_base))
  150. return PTR_ERR(pci->elbi_base);
  151. }
  152. }
  153. /* LLDD is supposed to manually switch the clocks and resets state */
  154. if (dw_pcie_cap_is(pci, REQ_RES)) {
  155. ret = dw_pcie_get_clocks(pci);
  156. if (ret)
  157. return ret;
  158. ret = dw_pcie_get_resets(pci);
  159. if (ret)
  160. return ret;
  161. }
  162. if (pci->max_link_speed < 1)
  163. pci->max_link_speed = of_pci_get_max_link_speed(np);
  164. of_property_read_u32(np, "num-lanes", &pci->num_lanes);
  165. if (of_property_read_bool(np, "snps,enable-cdm-check"))
  166. dw_pcie_cap_set(pci, CDM_CHECK);
  167. return 0;
  168. }
  169. void dw_pcie_version_detect(struct dw_pcie *pci)
  170. {
  171. u32 ver;
  172. /* The content of the CSR is zero on DWC PCIe older than v4.70a */
  173. ver = dw_pcie_readl_dbi(pci, PCIE_VERSION_NUMBER);
  174. if (!ver)
  175. return;
  176. if (pci->version && pci->version != ver)
  177. dev_warn(pci->dev, "Versions don't match (%08x != %08x)\n",
  178. pci->version, ver);
  179. else
  180. pci->version = ver;
  181. ver = dw_pcie_readl_dbi(pci, PCIE_VERSION_TYPE);
  182. if (pci->type && pci->type != ver)
  183. dev_warn(pci->dev, "Types don't match (%08x != %08x)\n",
  184. pci->type, ver);
  185. else
  186. pci->type = ver;
  187. }
  188. u8 dw_pcie_find_capability(struct dw_pcie *pci, u8 cap)
  189. {
  190. return PCI_FIND_NEXT_CAP(dw_pcie_read_cfg, PCI_CAPABILITY_LIST, cap,
  191. NULL, pci);
  192. }
  193. EXPORT_SYMBOL_GPL(dw_pcie_find_capability);
  194. u16 dw_pcie_find_ext_capability(struct dw_pcie *pci, u8 cap)
  195. {
  196. return PCI_FIND_NEXT_EXT_CAP(dw_pcie_read_cfg, 0, cap, NULL, pci);
  197. }
  198. EXPORT_SYMBOL_GPL(dw_pcie_find_ext_capability);
  199. void dw_pcie_remove_capability(struct dw_pcie *pci, u8 cap)
  200. {
  201. u8 cap_pos, pre_pos, next_pos;
  202. u16 reg;
  203. cap_pos = PCI_FIND_NEXT_CAP(dw_pcie_read_cfg, PCI_CAPABILITY_LIST, cap,
  204. &pre_pos, pci);
  205. if (!cap_pos)
  206. return;
  207. reg = dw_pcie_readw_dbi(pci, cap_pos);
  208. next_pos = (reg & 0xff00) >> 8;
  209. dw_pcie_dbi_ro_wr_en(pci);
  210. if (pre_pos == PCI_CAPABILITY_LIST)
  211. dw_pcie_writeb_dbi(pci, PCI_CAPABILITY_LIST, next_pos);
  212. else
  213. dw_pcie_writeb_dbi(pci, pre_pos + 1, next_pos);
  214. dw_pcie_dbi_ro_wr_dis(pci);
  215. }
  216. EXPORT_SYMBOL_GPL(dw_pcie_remove_capability);
  217. void dw_pcie_remove_ext_capability(struct dw_pcie *pci, u8 cap)
  218. {
  219. int cap_pos, next_pos, pre_pos;
  220. u32 pre_header, header;
  221. cap_pos = PCI_FIND_NEXT_EXT_CAP(dw_pcie_read_cfg, 0, cap, &pre_pos, pci);
  222. if (!cap_pos)
  223. return;
  224. header = dw_pcie_readl_dbi(pci, cap_pos);
  225. /*
  226. * If the first cap at offset PCI_CFG_SPACE_SIZE is removed,
  227. * only set its capid to zero as it cannot be skipped.
  228. */
  229. if (cap_pos == PCI_CFG_SPACE_SIZE) {
  230. dw_pcie_dbi_ro_wr_en(pci);
  231. dw_pcie_writel_dbi(pci, cap_pos, header & 0xffff0000);
  232. dw_pcie_dbi_ro_wr_dis(pci);
  233. return;
  234. }
  235. pre_header = dw_pcie_readl_dbi(pci, pre_pos);
  236. next_pos = PCI_EXT_CAP_NEXT(header);
  237. dw_pcie_dbi_ro_wr_en(pci);
  238. dw_pcie_writel_dbi(pci, pre_pos,
  239. (pre_header & 0xfffff) | (next_pos << 20));
  240. dw_pcie_dbi_ro_wr_dis(pci);
  241. }
  242. EXPORT_SYMBOL_GPL(dw_pcie_remove_ext_capability);
  243. static u16 __dw_pcie_find_vsec_capability(struct dw_pcie *pci, u16 vendor_id,
  244. u16 vsec_id)
  245. {
  246. u16 vsec = 0;
  247. u32 header;
  248. if (vendor_id != dw_pcie_readw_dbi(pci, PCI_VENDOR_ID))
  249. return 0;
  250. while ((vsec = PCI_FIND_NEXT_EXT_CAP(dw_pcie_read_cfg, vsec,
  251. PCI_EXT_CAP_ID_VNDR, NULL, pci))) {
  252. header = dw_pcie_readl_dbi(pci, vsec + PCI_VNDR_HEADER);
  253. if (PCI_VNDR_HEADER_ID(header) == vsec_id)
  254. return vsec;
  255. }
  256. return 0;
  257. }
  258. static u16 dw_pcie_find_vsec_capability(struct dw_pcie *pci,
  259. const struct dwc_pcie_vsec_id *vsec_ids)
  260. {
  261. const struct dwc_pcie_vsec_id *vid;
  262. u16 vsec;
  263. u32 header;
  264. for (vid = vsec_ids; vid->vendor_id; vid++) {
  265. vsec = __dw_pcie_find_vsec_capability(pci, vid->vendor_id,
  266. vid->vsec_id);
  267. if (vsec) {
  268. header = dw_pcie_readl_dbi(pci, vsec + PCI_VNDR_HEADER);
  269. if (PCI_VNDR_HEADER_REV(header) == vid->vsec_rev)
  270. return vsec;
  271. }
  272. }
  273. return 0;
  274. }
  275. u16 dw_pcie_find_rasdes_capability(struct dw_pcie *pci)
  276. {
  277. return dw_pcie_find_vsec_capability(pci, dwc_pcie_rasdes_vsec_ids);
  278. }
  279. EXPORT_SYMBOL_GPL(dw_pcie_find_rasdes_capability);
  280. u16 dw_pcie_find_ptm_capability(struct dw_pcie *pci)
  281. {
  282. return dw_pcie_find_vsec_capability(pci, dwc_pcie_ptm_vsec_ids);
  283. }
  284. EXPORT_SYMBOL_GPL(dw_pcie_find_ptm_capability);
  285. int dw_pcie_read(void __iomem *addr, int size, u32 *val)
  286. {
  287. if (!IS_ALIGNED((uintptr_t)addr, size)) {
  288. *val = 0;
  289. return PCIBIOS_BAD_REGISTER_NUMBER;
  290. }
  291. if (size == 4) {
  292. *val = readl(addr);
  293. } else if (size == 2) {
  294. *val = readw(addr);
  295. } else if (size == 1) {
  296. *val = readb(addr);
  297. } else {
  298. *val = 0;
  299. return PCIBIOS_BAD_REGISTER_NUMBER;
  300. }
  301. return PCIBIOS_SUCCESSFUL;
  302. }
  303. EXPORT_SYMBOL_GPL(dw_pcie_read);
  304. int dw_pcie_write(void __iomem *addr, int size, u32 val)
  305. {
  306. if (!IS_ALIGNED((uintptr_t)addr, size))
  307. return PCIBIOS_BAD_REGISTER_NUMBER;
  308. if (size == 4)
  309. writel(val, addr);
  310. else if (size == 2)
  311. writew(val, addr);
  312. else if (size == 1)
  313. writeb(val, addr);
  314. else
  315. return PCIBIOS_BAD_REGISTER_NUMBER;
  316. return PCIBIOS_SUCCESSFUL;
  317. }
  318. EXPORT_SYMBOL_GPL(dw_pcie_write);
  319. u32 dw_pcie_read_dbi(struct dw_pcie *pci, u32 reg, size_t size)
  320. {
  321. int ret;
  322. u32 val;
  323. if (pci->ops && pci->ops->read_dbi)
  324. return pci->ops->read_dbi(pci, pci->dbi_base, reg, size);
  325. ret = dw_pcie_read(pci->dbi_base + reg, size, &val);
  326. if (ret)
  327. dev_err(pci->dev, "Read DBI address failed\n");
  328. return val;
  329. }
  330. EXPORT_SYMBOL_GPL(dw_pcie_read_dbi);
  331. void dw_pcie_write_dbi(struct dw_pcie *pci, u32 reg, size_t size, u32 val)
  332. {
  333. int ret;
  334. if (pci->ops && pci->ops->write_dbi) {
  335. pci->ops->write_dbi(pci, pci->dbi_base, reg, size, val);
  336. return;
  337. }
  338. ret = dw_pcie_write(pci->dbi_base + reg, size, val);
  339. if (ret)
  340. dev_err(pci->dev, "Write DBI address failed\n");
  341. }
  342. EXPORT_SYMBOL_GPL(dw_pcie_write_dbi);
  343. void dw_pcie_write_dbi2(struct dw_pcie *pci, u32 reg, size_t size, u32 val)
  344. {
  345. int ret;
  346. if (pci->ops && pci->ops->write_dbi2) {
  347. pci->ops->write_dbi2(pci, pci->dbi_base2, reg, size, val);
  348. return;
  349. }
  350. ret = dw_pcie_write(pci->dbi_base2 + reg, size, val);
  351. if (ret)
  352. dev_err(pci->dev, "write DBI address failed\n");
  353. }
  354. EXPORT_SYMBOL_GPL(dw_pcie_write_dbi2);
  355. static inline void __iomem *dw_pcie_select_atu(struct dw_pcie *pci, u32 dir,
  356. u32 index)
  357. {
  358. if (dw_pcie_cap_is(pci, IATU_UNROLL))
  359. return pci->atu_base + PCIE_ATU_UNROLL_BASE(dir, index);
  360. dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, dir | index);
  361. return pci->atu_base;
  362. }
  363. static u32 dw_pcie_readl_atu(struct dw_pcie *pci, u32 dir, u32 index, u32 reg)
  364. {
  365. void __iomem *base;
  366. int ret;
  367. u32 val;
  368. base = dw_pcie_select_atu(pci, dir, index);
  369. if (pci->ops && pci->ops->read_dbi)
  370. return pci->ops->read_dbi(pci, base, reg, 4);
  371. ret = dw_pcie_read(base + reg, 4, &val);
  372. if (ret)
  373. dev_err(pci->dev, "Read ATU address failed\n");
  374. return val;
  375. }
  376. static void dw_pcie_writel_atu(struct dw_pcie *pci, u32 dir, u32 index,
  377. u32 reg, u32 val)
  378. {
  379. void __iomem *base;
  380. int ret;
  381. base = dw_pcie_select_atu(pci, dir, index);
  382. if (pci->ops && pci->ops->write_dbi) {
  383. pci->ops->write_dbi(pci, base, reg, 4, val);
  384. return;
  385. }
  386. ret = dw_pcie_write(base + reg, 4, val);
  387. if (ret)
  388. dev_err(pci->dev, "Write ATU address failed\n");
  389. }
  390. static inline u32 dw_pcie_readl_atu_ob(struct dw_pcie *pci, u32 index, u32 reg)
  391. {
  392. return dw_pcie_readl_atu(pci, PCIE_ATU_REGION_DIR_OB, index, reg);
  393. }
  394. static inline void dw_pcie_writel_atu_ob(struct dw_pcie *pci, u32 index, u32 reg,
  395. u32 val)
  396. {
  397. dw_pcie_writel_atu(pci, PCIE_ATU_REGION_DIR_OB, index, reg, val);
  398. }
  399. static inline u32 dw_pcie_enable_ecrc(u32 val)
  400. {
  401. /*
  402. * DesignWare core version 4.90A has a design issue where the 'TD'
  403. * bit in the Control register-1 of the ATU outbound region acts
  404. * like an override for the ECRC setting, i.e., the presence of TLP
  405. * Digest (ECRC) in the outgoing TLPs is solely determined by this
  406. * bit. This is contrary to the PCIe spec which says that the
  407. * enablement of the ECRC is solely determined by the AER
  408. * registers.
  409. *
  410. * Because of this, even when the ECRC is enabled through AER
  411. * registers, the transactions going through ATU won't have TLP
  412. * Digest as there is no way the PCI core AER code could program
  413. * the TD bit which is specific to the DesignWare core.
  414. *
  415. * The best way to handle this scenario is to program the TD bit
  416. * always. It affects only the traffic from root port to downstream
  417. * devices.
  418. *
  419. * At this point,
  420. * When ECRC is enabled in AER registers, everything works normally
  421. * When ECRC is NOT enabled in AER registers, then,
  422. * on Root Port:- TLP Digest (DWord size) gets appended to each packet
  423. * even through it is not required. Since downstream
  424. * TLPs are mostly for configuration accesses and BAR
  425. * accesses, they are not in critical path and won't
  426. * have much negative effect on the performance.
  427. * on End Point:- TLP Digest is received for some/all the packets coming
  428. * from the root port. TLP Digest is ignored because,
  429. * as per the PCIe Spec r5.0 v1.0 section 2.2.3
  430. * "TLP Digest Rules", when an endpoint receives TLP
  431. * Digest when its ECRC check functionality is disabled
  432. * in AER registers, received TLP Digest is just ignored.
  433. * Since there is no issue or error reported either side, best way to
  434. * handle the scenario is to program TD bit by default.
  435. */
  436. return val | PCIE_ATU_TD;
  437. }
  438. int dw_pcie_prog_outbound_atu(struct dw_pcie *pci,
  439. const struct dw_pcie_ob_atu_cfg *atu)
  440. {
  441. u64 parent_bus_addr = atu->parent_bus_addr;
  442. u32 retries, val;
  443. u64 limit_addr;
  444. if (atu->index >= pci->num_ob_windows)
  445. return -ENOSPC;
  446. limit_addr = parent_bus_addr + atu->size - 1;
  447. if ((limit_addr & ~pci->region_limit) != (parent_bus_addr & ~pci->region_limit) ||
  448. !IS_ALIGNED(parent_bus_addr, pci->region_align) ||
  449. !IS_ALIGNED(atu->pci_addr, pci->region_align) || !atu->size) {
  450. return -EINVAL;
  451. }
  452. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_LOWER_BASE,
  453. lower_32_bits(parent_bus_addr));
  454. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_UPPER_BASE,
  455. upper_32_bits(parent_bus_addr));
  456. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_LIMIT,
  457. lower_32_bits(limit_addr));
  458. if (dw_pcie_ver_is_ge(pci, 460A))
  459. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_UPPER_LIMIT,
  460. upper_32_bits(limit_addr));
  461. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_LOWER_TARGET,
  462. lower_32_bits(atu->pci_addr));
  463. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_UPPER_TARGET,
  464. upper_32_bits(atu->pci_addr));
  465. val = atu->type | atu->routing | PCIE_ATU_FUNC_NUM(atu->func_no);
  466. if (upper_32_bits(limit_addr) > upper_32_bits(parent_bus_addr) &&
  467. dw_pcie_ver_is_ge(pci, 460A))
  468. val |= PCIE_ATU_INCREASE_REGION_SIZE;
  469. if (dw_pcie_ver_is(pci, 490A))
  470. val = dw_pcie_enable_ecrc(val);
  471. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_REGION_CTRL1, val);
  472. val = PCIE_ATU_ENABLE | atu->ctrl2;
  473. if (atu->type == PCIE_ATU_TYPE_MSG) {
  474. /* The data-less messages only for now */
  475. val |= PCIE_ATU_INHIBIT_PAYLOAD | atu->code;
  476. }
  477. dw_pcie_writel_atu_ob(pci, atu->index, PCIE_ATU_REGION_CTRL2, val);
  478. /*
  479. * Make sure ATU enable takes effect before any subsequent config
  480. * and I/O accesses.
  481. */
  482. for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
  483. val = dw_pcie_readl_atu_ob(pci, atu->index, PCIE_ATU_REGION_CTRL2);
  484. if (val & PCIE_ATU_ENABLE)
  485. return 0;
  486. mdelay(LINK_WAIT_IATU);
  487. }
  488. dev_err(pci->dev, "Outbound iATU is not being enabled\n");
  489. return -ETIMEDOUT;
  490. }
  491. static inline u32 dw_pcie_readl_atu_ib(struct dw_pcie *pci, u32 index, u32 reg)
  492. {
  493. return dw_pcie_readl_atu(pci, PCIE_ATU_REGION_DIR_IB, index, reg);
  494. }
  495. static inline void dw_pcie_writel_atu_ib(struct dw_pcie *pci, u32 index, u32 reg,
  496. u32 val)
  497. {
  498. dw_pcie_writel_atu(pci, PCIE_ATU_REGION_DIR_IB, index, reg, val);
  499. }
  500. int dw_pcie_prog_inbound_atu(struct dw_pcie *pci, int index, int type,
  501. u64 parent_bus_addr, u64 pci_addr, u64 size)
  502. {
  503. u64 limit_addr = pci_addr + size - 1;
  504. u32 retries, val;
  505. if (index >= pci->num_ib_windows)
  506. return -ENOSPC;
  507. if ((limit_addr & ~pci->region_limit) != (pci_addr & ~pci->region_limit) ||
  508. !IS_ALIGNED(parent_bus_addr, pci->region_align) ||
  509. !IS_ALIGNED(pci_addr, pci->region_align) || !size) {
  510. return -EINVAL;
  511. }
  512. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_LOWER_BASE,
  513. lower_32_bits(pci_addr));
  514. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_UPPER_BASE,
  515. upper_32_bits(pci_addr));
  516. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_LIMIT,
  517. lower_32_bits(limit_addr));
  518. if (dw_pcie_ver_is_ge(pci, 460A))
  519. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_UPPER_LIMIT,
  520. upper_32_bits(limit_addr));
  521. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_LOWER_TARGET,
  522. lower_32_bits(parent_bus_addr));
  523. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_UPPER_TARGET,
  524. upper_32_bits(parent_bus_addr));
  525. val = type;
  526. if (upper_32_bits(limit_addr) > upper_32_bits(pci_addr) &&
  527. dw_pcie_ver_is_ge(pci, 460A))
  528. val |= PCIE_ATU_INCREASE_REGION_SIZE;
  529. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL1, val);
  530. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2, PCIE_ATU_ENABLE);
  531. /*
  532. * Make sure ATU enable takes effect before any subsequent config
  533. * and I/O accesses.
  534. */
  535. for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
  536. val = dw_pcie_readl_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2);
  537. if (val & PCIE_ATU_ENABLE)
  538. return 0;
  539. mdelay(LINK_WAIT_IATU);
  540. }
  541. dev_err(pci->dev, "Inbound iATU is not being enabled\n");
  542. return -ETIMEDOUT;
  543. }
  544. int dw_pcie_prog_ep_inbound_atu(struct dw_pcie *pci, u8 func_no, int index,
  545. int type, u64 parent_bus_addr, u8 bar, size_t size)
  546. {
  547. u32 retries, val;
  548. if (!IS_ALIGNED(parent_bus_addr, pci->region_align) ||
  549. !IS_ALIGNED(parent_bus_addr, size))
  550. return -EINVAL;
  551. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_LOWER_TARGET,
  552. lower_32_bits(parent_bus_addr));
  553. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_UPPER_TARGET,
  554. upper_32_bits(parent_bus_addr));
  555. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL1, type |
  556. PCIE_ATU_FUNC_NUM(func_no));
  557. dw_pcie_writel_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2,
  558. PCIE_ATU_ENABLE | PCIE_ATU_FUNC_NUM_MATCH_EN |
  559. PCIE_ATU_BAR_MODE_ENABLE | (bar << 8));
  560. /*
  561. * Make sure ATU enable takes effect before any subsequent config
  562. * and I/O accesses.
  563. */
  564. for (retries = 0; retries < LINK_WAIT_MAX_IATU_RETRIES; retries++) {
  565. val = dw_pcie_readl_atu_ib(pci, index, PCIE_ATU_REGION_CTRL2);
  566. if (val & PCIE_ATU_ENABLE)
  567. return 0;
  568. mdelay(LINK_WAIT_IATU);
  569. }
  570. dev_err(pci->dev, "Inbound iATU is not being enabled\n");
  571. return -ETIMEDOUT;
  572. }
  573. void dw_pcie_disable_atu(struct dw_pcie *pci, u32 dir, int index)
  574. {
  575. dw_pcie_writel_atu(pci, dir, index, PCIE_ATU_REGION_CTRL2, 0);
  576. }
  577. const char *dw_pcie_ltssm_status_string(enum dw_pcie_ltssm ltssm)
  578. {
  579. const char *str;
  580. switch (ltssm) {
  581. #define DW_PCIE_LTSSM_NAME(n) case n: str = #n; break
  582. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DETECT_QUIET);
  583. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DETECT_ACT);
  584. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_POLL_ACTIVE);
  585. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_POLL_COMPLIANCE);
  586. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_POLL_CONFIG);
  587. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_PRE_DETECT_QUIET);
  588. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DETECT_WAIT);
  589. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_LINKWD_START);
  590. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_LINKWD_ACEPT);
  591. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_LANENUM_WAI);
  592. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_LANENUM_ACEPT);
  593. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_COMPLETE);
  594. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_CFG_IDLE);
  595. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_LOCK);
  596. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_SPEED);
  597. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_RCVRCFG);
  598. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_IDLE);
  599. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L0);
  600. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L0S);
  601. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L123_SEND_EIDLE);
  602. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L1_IDLE);
  603. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L2_IDLE);
  604. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L2_WAKE);
  605. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DISABLED_ENTRY);
  606. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DISABLED_IDLE);
  607. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_DISABLED);
  608. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_LPBK_ENTRY);
  609. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_LPBK_ACTIVE);
  610. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_LPBK_EXIT);
  611. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_LPBK_EXIT_TIMEOUT);
  612. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_HOT_RESET_ENTRY);
  613. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_HOT_RESET);
  614. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_EQ0);
  615. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_EQ1);
  616. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_EQ2);
  617. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_RCVRY_EQ3);
  618. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L1_1);
  619. DW_PCIE_LTSSM_NAME(DW_PCIE_LTSSM_L1_2);
  620. default:
  621. str = "DW_PCIE_LTSSM_UNKNOWN";
  622. break;
  623. }
  624. return str + strlen("DW_PCIE_LTSSM_");
  625. }
  626. /**
  627. * dw_pcie_wait_for_link - Wait for the PCIe link to be up
  628. * @pci: DWC instance
  629. *
  630. * Returns: 0 if link is up, -ENODEV if device is not found, -EIO if the device
  631. * is found but not active and -ETIMEDOUT if the link fails to come up for other
  632. * reasons.
  633. */
  634. int dw_pcie_wait_for_link(struct dw_pcie *pci)
  635. {
  636. u32 offset, val, ltssm;
  637. int retries;
  638. /* Check if the link is up or not */
  639. for (retries = 0; retries < PCIE_LINK_WAIT_MAX_RETRIES; retries++) {
  640. if (dw_pcie_link_up(pci))
  641. break;
  642. msleep(PCIE_LINK_WAIT_SLEEP_MS);
  643. }
  644. if (retries >= PCIE_LINK_WAIT_MAX_RETRIES) {
  645. /*
  646. * If the link is in Detect.Quiet or Detect.Active state, it
  647. * indicates that no device is detected.
  648. */
  649. ltssm = dw_pcie_get_ltssm(pci);
  650. if (ltssm == DW_PCIE_LTSSM_DETECT_QUIET ||
  651. ltssm == DW_PCIE_LTSSM_DETECT_ACT) {
  652. dev_info(pci->dev, "Device not found\n");
  653. return -ENODEV;
  654. /*
  655. * If the link is in POLL.{Active/Compliance} state, then the
  656. * device is found to be connected to the bus, but it is not
  657. * active i.e., the device firmware might not yet initialized.
  658. */
  659. } else if (ltssm == DW_PCIE_LTSSM_POLL_ACTIVE ||
  660. ltssm == DW_PCIE_LTSSM_POLL_COMPLIANCE) {
  661. dev_info(pci->dev, "Device found, but not active\n");
  662. return -EIO;
  663. }
  664. dev_err(pci->dev, "Link failed to come up. LTSSM: %s\n",
  665. dw_pcie_ltssm_status_string(ltssm));
  666. return -ETIMEDOUT;
  667. }
  668. /*
  669. * As per PCIe r6.0, sec 6.6.1, a Downstream Port that supports Link
  670. * speeds greater than 5.0 GT/s, software must wait a minimum of 100 ms
  671. * after Link training completes before sending a Configuration Request.
  672. */
  673. if (pci->max_link_speed > 2)
  674. msleep(PCIE_RESET_CONFIG_WAIT_MS);
  675. offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  676. val = dw_pcie_readw_dbi(pci, offset + PCI_EXP_LNKSTA);
  677. dev_info(pci->dev, "PCIe Gen.%u x%u link up\n",
  678. FIELD_GET(PCI_EXP_LNKSTA_CLS, val),
  679. FIELD_GET(PCI_EXP_LNKSTA_NLW, val));
  680. return 0;
  681. }
  682. EXPORT_SYMBOL_GPL(dw_pcie_wait_for_link);
  683. bool dw_pcie_link_up(struct dw_pcie *pci)
  684. {
  685. u32 val;
  686. if (pci->ops && pci->ops->link_up)
  687. return pci->ops->link_up(pci);
  688. val = dw_pcie_readl_dbi(pci, PCIE_PORT_DEBUG1);
  689. return ((val & PCIE_PORT_DEBUG1_LINK_UP) &&
  690. (!(val & PCIE_PORT_DEBUG1_LINK_IN_TRAINING)));
  691. }
  692. EXPORT_SYMBOL_GPL(dw_pcie_link_up);
  693. void dw_pcie_upconfig_setup(struct dw_pcie *pci)
  694. {
  695. u32 val;
  696. val = dw_pcie_readl_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL);
  697. val |= PORT_MLTI_UPCFG_SUPPORT;
  698. dw_pcie_writel_dbi(pci, PCIE_PORT_MULTI_LANE_CTRL, val);
  699. }
  700. EXPORT_SYMBOL_GPL(dw_pcie_upconfig_setup);
  701. static void dw_pcie_link_set_max_speed(struct dw_pcie *pci)
  702. {
  703. u32 cap, ctrl2, link_speed;
  704. u8 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  705. cap = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCAP);
  706. /*
  707. * Even if the platform doesn't want to limit the maximum link speed,
  708. * just cache the hardware default value so that the vendor drivers can
  709. * use it to do any link specific configuration.
  710. */
  711. if (pci->max_link_speed < 1) {
  712. pci->max_link_speed = FIELD_GET(PCI_EXP_LNKCAP_SLS, cap);
  713. return;
  714. }
  715. ctrl2 = dw_pcie_readl_dbi(pci, offset + PCI_EXP_LNKCTL2);
  716. ctrl2 &= ~PCI_EXP_LNKCTL2_TLS;
  717. switch (pcie_link_speed[pci->max_link_speed]) {
  718. case PCIE_SPEED_2_5GT:
  719. link_speed = PCI_EXP_LNKCTL2_TLS_2_5GT;
  720. break;
  721. case PCIE_SPEED_5_0GT:
  722. link_speed = PCI_EXP_LNKCTL2_TLS_5_0GT;
  723. break;
  724. case PCIE_SPEED_8_0GT:
  725. link_speed = PCI_EXP_LNKCTL2_TLS_8_0GT;
  726. break;
  727. case PCIE_SPEED_16_0GT:
  728. link_speed = PCI_EXP_LNKCTL2_TLS_16_0GT;
  729. break;
  730. default:
  731. /* Use hardware capability */
  732. link_speed = FIELD_GET(PCI_EXP_LNKCAP_SLS, cap);
  733. ctrl2 &= ~PCI_EXP_LNKCTL2_HASD;
  734. break;
  735. }
  736. dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCTL2, ctrl2 | link_speed);
  737. cap &= ~((u32)PCI_EXP_LNKCAP_SLS);
  738. dw_pcie_writel_dbi(pci, offset + PCI_EXP_LNKCAP, cap | link_speed);
  739. }
  740. int dw_pcie_link_get_max_link_width(struct dw_pcie *pci)
  741. {
  742. u8 cap = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  743. u32 lnkcap = dw_pcie_readl_dbi(pci, cap + PCI_EXP_LNKCAP);
  744. return FIELD_GET(PCI_EXP_LNKCAP_MLW, lnkcap);
  745. }
  746. static void dw_pcie_link_set_max_link_width(struct dw_pcie *pci, u32 num_lanes)
  747. {
  748. u32 lnkcap, lwsc, plc;
  749. u8 cap;
  750. if (!num_lanes)
  751. return;
  752. /* Set the number of lanes */
  753. plc = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL);
  754. plc &= ~PORT_LINK_FAST_LINK_MODE;
  755. plc &= ~PORT_LINK_MODE_MASK;
  756. /* Set link width speed control register */
  757. lwsc = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
  758. lwsc &= ~PORT_LOGIC_LINK_WIDTH_MASK;
  759. lwsc |= PORT_LOGIC_LINK_WIDTH_1_LANES;
  760. switch (num_lanes) {
  761. case 1:
  762. plc |= PORT_LINK_MODE_1_LANES;
  763. break;
  764. case 2:
  765. plc |= PORT_LINK_MODE_2_LANES;
  766. break;
  767. case 4:
  768. plc |= PORT_LINK_MODE_4_LANES;
  769. break;
  770. case 8:
  771. plc |= PORT_LINK_MODE_8_LANES;
  772. break;
  773. case 16:
  774. plc |= PORT_LINK_MODE_16_LANES;
  775. break;
  776. default:
  777. dev_err(pci->dev, "num-lanes %u: invalid value\n", num_lanes);
  778. return;
  779. }
  780. dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, plc);
  781. dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, lwsc);
  782. cap = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
  783. lnkcap = dw_pcie_readl_dbi(pci, cap + PCI_EXP_LNKCAP);
  784. lnkcap &= ~PCI_EXP_LNKCAP_MLW;
  785. lnkcap |= FIELD_PREP(PCI_EXP_LNKCAP_MLW, num_lanes);
  786. dw_pcie_writel_dbi(pci, cap + PCI_EXP_LNKCAP, lnkcap);
  787. }
  788. void dw_pcie_iatu_detect(struct dw_pcie *pci)
  789. {
  790. int max_region, ob, ib;
  791. u32 val, min, dir;
  792. u64 max;
  793. val = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT);
  794. if (val == 0xFFFFFFFF) {
  795. dw_pcie_cap_set(pci, IATU_UNROLL);
  796. max_region = min((int)pci->atu_size / 512, 256);
  797. } else {
  798. pci->atu_base = pci->dbi_base + PCIE_ATU_VIEWPORT_BASE;
  799. pci->atu_size = PCIE_ATU_VIEWPORT_SIZE;
  800. dw_pcie_writel_dbi(pci, PCIE_ATU_VIEWPORT, 0xFF);
  801. max_region = dw_pcie_readl_dbi(pci, PCIE_ATU_VIEWPORT) + 1;
  802. }
  803. for (ob = 0; ob < max_region; ob++) {
  804. dw_pcie_writel_atu_ob(pci, ob, PCIE_ATU_LOWER_TARGET, 0x11110000);
  805. val = dw_pcie_readl_atu_ob(pci, ob, PCIE_ATU_LOWER_TARGET);
  806. if (val != 0x11110000)
  807. break;
  808. }
  809. for (ib = 0; ib < max_region; ib++) {
  810. dw_pcie_writel_atu_ib(pci, ib, PCIE_ATU_LOWER_TARGET, 0x11110000);
  811. val = dw_pcie_readl_atu_ib(pci, ib, PCIE_ATU_LOWER_TARGET);
  812. if (val != 0x11110000)
  813. break;
  814. }
  815. if (ob) {
  816. dir = PCIE_ATU_REGION_DIR_OB;
  817. } else if (ib) {
  818. dir = PCIE_ATU_REGION_DIR_IB;
  819. } else {
  820. dev_err(pci->dev, "No iATU regions found\n");
  821. return;
  822. }
  823. dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_LIMIT, 0x0);
  824. min = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_LIMIT);
  825. if (dw_pcie_ver_is_ge(pci, 460A)) {
  826. dw_pcie_writel_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT, 0xFFFFFFFF);
  827. max = dw_pcie_readl_atu(pci, dir, 0, PCIE_ATU_UPPER_LIMIT);
  828. } else {
  829. max = 0;
  830. }
  831. pci->num_ob_windows = ob;
  832. pci->num_ib_windows = ib;
  833. pci->region_align = 1 << fls(min);
  834. pci->region_limit = (max << 32) | (SZ_4G - 1);
  835. dev_info(pci->dev, "iATU: unroll %s, %u ob, %u ib, align %uK, limit %lluG\n",
  836. dw_pcie_cap_is(pci, IATU_UNROLL) ? "T" : "F",
  837. pci->num_ob_windows, pci->num_ib_windows,
  838. pci->region_align / SZ_1K, (pci->region_limit + 1) / SZ_1G);
  839. }
  840. static u32 dw_pcie_readl_dma(struct dw_pcie *pci, u32 reg)
  841. {
  842. u32 val = 0;
  843. int ret;
  844. if (pci->ops && pci->ops->read_dbi)
  845. return pci->ops->read_dbi(pci, pci->edma.reg_base, reg, 4);
  846. ret = dw_pcie_read(pci->edma.reg_base + reg, 4, &val);
  847. if (ret)
  848. dev_err(pci->dev, "Read DMA address failed\n");
  849. return val;
  850. }
  851. static int dw_pcie_edma_irq_vector(struct device *dev, unsigned int nr)
  852. {
  853. struct platform_device *pdev = to_platform_device(dev);
  854. char name[6];
  855. int ret;
  856. if (nr >= EDMA_MAX_WR_CH + EDMA_MAX_RD_CH)
  857. return -EINVAL;
  858. ret = platform_get_irq_byname_optional(pdev, "dma");
  859. if (ret > 0)
  860. return ret;
  861. snprintf(name, sizeof(name), "dma%u", nr);
  862. return platform_get_irq_byname_optional(pdev, name);
  863. }
  864. static struct dw_edma_plat_ops dw_pcie_edma_ops = {
  865. .irq_vector = dw_pcie_edma_irq_vector,
  866. };
  867. static void dw_pcie_edma_init_data(struct dw_pcie *pci)
  868. {
  869. pci->edma.dev = pci->dev;
  870. if (!pci->edma.ops)
  871. pci->edma.ops = &dw_pcie_edma_ops;
  872. pci->edma.flags |= DW_EDMA_CHIP_LOCAL;
  873. }
  874. static int dw_pcie_edma_find_mf(struct dw_pcie *pci)
  875. {
  876. u32 val;
  877. /*
  878. * Bail out finding the mapping format if it is already set by the glue
  879. * driver. Also ensure that the edma.reg_base is pointing to a valid
  880. * memory region.
  881. */
  882. if (pci->edma.mf != EDMA_MF_EDMA_LEGACY)
  883. return pci->edma.reg_base ? 0 : -ENODEV;
  884. /*
  885. * Indirect eDMA CSRs access has been completely removed since v5.40a
  886. * thus no space is now reserved for the eDMA channels viewport and
  887. * former DMA CTRL register is no longer fixed to FFs.
  888. */
  889. if (dw_pcie_ver_is_ge(pci, 540A))
  890. val = 0xFFFFFFFF;
  891. else
  892. val = dw_pcie_readl_dbi(pci, PCIE_DMA_VIEWPORT_BASE + PCIE_DMA_CTRL);
  893. if (val == 0xFFFFFFFF && pci->edma.reg_base) {
  894. pci->edma.mf = EDMA_MF_EDMA_UNROLL;
  895. } else if (val != 0xFFFFFFFF) {
  896. pci->edma.mf = EDMA_MF_EDMA_LEGACY;
  897. pci->edma.reg_base = pci->dbi_base + PCIE_DMA_VIEWPORT_BASE;
  898. } else {
  899. return -ENODEV;
  900. }
  901. return 0;
  902. }
  903. static int dw_pcie_edma_find_channels(struct dw_pcie *pci)
  904. {
  905. u32 val;
  906. /*
  907. * Autodetect the read/write channels count only for non-HDMA platforms.
  908. * HDMA platforms with native CSR mapping doesn't support autodetect,
  909. * so the glue drivers should've passed the valid count already. If not,
  910. * the below sanity check will catch it.
  911. */
  912. if (pci->edma.mf != EDMA_MF_HDMA_NATIVE) {
  913. val = dw_pcie_readl_dma(pci, PCIE_DMA_CTRL);
  914. pci->edma.ll_wr_cnt = FIELD_GET(PCIE_DMA_NUM_WR_CHAN, val);
  915. pci->edma.ll_rd_cnt = FIELD_GET(PCIE_DMA_NUM_RD_CHAN, val);
  916. }
  917. /* Sanity check the channels count if the mapping was incorrect */
  918. if (!pci->edma.ll_wr_cnt || pci->edma.ll_wr_cnt > EDMA_MAX_WR_CH ||
  919. !pci->edma.ll_rd_cnt || pci->edma.ll_rd_cnt > EDMA_MAX_RD_CH)
  920. return -EINVAL;
  921. return 0;
  922. }
  923. static int dw_pcie_edma_find_chip(struct dw_pcie *pci)
  924. {
  925. int ret;
  926. dw_pcie_edma_init_data(pci);
  927. ret = dw_pcie_edma_find_mf(pci);
  928. if (ret)
  929. return ret;
  930. return dw_pcie_edma_find_channels(pci);
  931. }
  932. static int dw_pcie_edma_irq_verify(struct dw_pcie *pci)
  933. {
  934. struct platform_device *pdev = to_platform_device(pci->dev);
  935. u16 ch_cnt = pci->edma.ll_wr_cnt + pci->edma.ll_rd_cnt;
  936. char name[15];
  937. int ret;
  938. if (pci->edma.nr_irqs > 1)
  939. return pci->edma.nr_irqs != ch_cnt ? -EINVAL : 0;
  940. ret = platform_get_irq_byname_optional(pdev, "dma");
  941. if (ret > 0) {
  942. pci->edma.nr_irqs = 1;
  943. return 0;
  944. }
  945. for (; pci->edma.nr_irqs < ch_cnt; pci->edma.nr_irqs++) {
  946. snprintf(name, sizeof(name), "dma%d", pci->edma.nr_irqs);
  947. ret = platform_get_irq_byname_optional(pdev, name);
  948. if (ret <= 0)
  949. return -EINVAL;
  950. }
  951. return 0;
  952. }
  953. static int dw_pcie_edma_ll_alloc(struct dw_pcie *pci)
  954. {
  955. struct dw_edma_region *ll;
  956. dma_addr_t paddr;
  957. int i;
  958. for (i = 0; i < pci->edma.ll_wr_cnt; i++) {
  959. ll = &pci->edma.ll_region_wr[i];
  960. ll->sz = DMA_LLP_MEM_SIZE;
  961. ll->vaddr.mem = dmam_alloc_coherent(pci->dev, ll->sz,
  962. &paddr, GFP_KERNEL);
  963. if (!ll->vaddr.mem)
  964. return -ENOMEM;
  965. ll->paddr = paddr;
  966. }
  967. for (i = 0; i < pci->edma.ll_rd_cnt; i++) {
  968. ll = &pci->edma.ll_region_rd[i];
  969. ll->sz = DMA_LLP_MEM_SIZE;
  970. ll->vaddr.mem = dmam_alloc_coherent(pci->dev, ll->sz,
  971. &paddr, GFP_KERNEL);
  972. if (!ll->vaddr.mem)
  973. return -ENOMEM;
  974. ll->paddr = paddr;
  975. }
  976. return 0;
  977. }
  978. int dw_pcie_edma_detect(struct dw_pcie *pci)
  979. {
  980. int ret;
  981. /* Don't fail if no eDMA was found (for the backward compatibility) */
  982. ret = dw_pcie_edma_find_chip(pci);
  983. if (ret)
  984. return 0;
  985. /* Don't fail on the IRQs verification (for the backward compatibility) */
  986. ret = dw_pcie_edma_irq_verify(pci);
  987. if (ret) {
  988. dev_err(pci->dev, "Invalid eDMA IRQs found\n");
  989. return 0;
  990. }
  991. ret = dw_pcie_edma_ll_alloc(pci);
  992. if (ret) {
  993. dev_err(pci->dev, "Couldn't allocate LLP memory\n");
  994. return ret;
  995. }
  996. /* Don't fail if the DW eDMA driver can't find the device */
  997. ret = dw_edma_probe(&pci->edma);
  998. if (ret && ret != -ENODEV) {
  999. dev_err(pci->dev, "Couldn't register eDMA device\n");
  1000. return ret;
  1001. }
  1002. dev_info(pci->dev, "eDMA: unroll %s, %hu wr, %hu rd\n",
  1003. pci->edma.mf == EDMA_MF_EDMA_UNROLL ? "T" : "F",
  1004. pci->edma.ll_wr_cnt, pci->edma.ll_rd_cnt);
  1005. return 0;
  1006. }
  1007. void dw_pcie_edma_remove(struct dw_pcie *pci)
  1008. {
  1009. dw_edma_remove(&pci->edma);
  1010. }
  1011. void dw_pcie_hide_unsupported_l1ss(struct dw_pcie *pci)
  1012. {
  1013. u16 l1ss;
  1014. u32 l1ss_cap;
  1015. if (pci->l1ss_support)
  1016. return;
  1017. l1ss = dw_pcie_find_ext_capability(pci, PCI_EXT_CAP_ID_L1SS);
  1018. if (!l1ss)
  1019. return;
  1020. /*
  1021. * Unless the driver claims "l1ss_support", don't advertise L1 PM
  1022. * Substates because they require CLKREQ# and possibly other
  1023. * device-specific configuration.
  1024. */
  1025. l1ss_cap = dw_pcie_readl_dbi(pci, l1ss + PCI_L1SS_CAP);
  1026. l1ss_cap &= ~(PCI_L1SS_CAP_PCIPM_L1_1 | PCI_L1SS_CAP_ASPM_L1_1 |
  1027. PCI_L1SS_CAP_PCIPM_L1_2 | PCI_L1SS_CAP_ASPM_L1_2 |
  1028. PCI_L1SS_CAP_L1_PM_SS);
  1029. dw_pcie_writel_dbi(pci, l1ss + PCI_L1SS_CAP, l1ss_cap);
  1030. }
  1031. void dw_pcie_setup(struct dw_pcie *pci)
  1032. {
  1033. u32 val;
  1034. dw_pcie_link_set_max_speed(pci);
  1035. /* Configure Gen1 N_FTS */
  1036. if (pci->n_fts[0]) {
  1037. val = dw_pcie_readl_dbi(pci, PCIE_PORT_AFR);
  1038. val &= ~(PORT_AFR_N_FTS_MASK | PORT_AFR_CC_N_FTS_MASK);
  1039. val |= PORT_AFR_N_FTS(pci->n_fts[0]);
  1040. val |= PORT_AFR_CC_N_FTS(pci->n_fts[0]);
  1041. dw_pcie_writel_dbi(pci, PCIE_PORT_AFR, val);
  1042. }
  1043. /* Configure Gen2+ N_FTS */
  1044. if (pci->n_fts[1]) {
  1045. val = dw_pcie_readl_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL);
  1046. val &= ~PORT_LOGIC_N_FTS_MASK;
  1047. val |= pci->n_fts[1];
  1048. dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, val);
  1049. }
  1050. if (dw_pcie_cap_is(pci, CDM_CHECK)) {
  1051. val = dw_pcie_readl_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS);
  1052. val |= PCIE_PL_CHK_REG_CHK_REG_CONTINUOUS |
  1053. PCIE_PL_CHK_REG_CHK_REG_START;
  1054. dw_pcie_writel_dbi(pci, PCIE_PL_CHK_REG_CONTROL_STATUS, val);
  1055. }
  1056. val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL);
  1057. val &= ~PORT_LINK_FAST_LINK_MODE;
  1058. val |= PORT_LINK_DLL_LINK_EN;
  1059. dw_pcie_writel_dbi(pci, PCIE_PORT_LINK_CONTROL, val);
  1060. dw_pcie_link_set_max_link_width(pci, pci->num_lanes);
  1061. }
  1062. resource_size_t dw_pcie_parent_bus_offset(struct dw_pcie *pci,
  1063. const char *reg_name,
  1064. resource_size_t cpu_phys_addr)
  1065. {
  1066. struct device *dev = pci->dev;
  1067. struct device_node *np = dev->of_node;
  1068. int index;
  1069. u64 reg_addr, fixup_addr;
  1070. u64 (*fixup)(struct dw_pcie *pcie, u64 cpu_addr);
  1071. /* Look up reg_name address on parent bus */
  1072. index = of_property_match_string(np, "reg-names", reg_name);
  1073. if (index < 0) {
  1074. dev_err(dev, "No %s in devicetree \"reg\" property\n", reg_name);
  1075. return 0;
  1076. }
  1077. of_property_read_reg(np, index, &reg_addr, NULL);
  1078. fixup = pci->ops ? pci->ops->cpu_addr_fixup : NULL;
  1079. if (fixup) {
  1080. fixup_addr = fixup(pci, cpu_phys_addr);
  1081. if (reg_addr == fixup_addr) {
  1082. dev_info(dev, "%s reg[%d] %#010llx == %#010llx == fixup(cpu %#010llx); %ps is redundant with this devicetree\n",
  1083. reg_name, index, reg_addr, fixup_addr,
  1084. (unsigned long long) cpu_phys_addr, fixup);
  1085. } else {
  1086. dev_warn(dev, "%s reg[%d] %#010llx != %#010llx == fixup(cpu %#010llx); devicetree is broken\n",
  1087. reg_name, index, reg_addr, fixup_addr,
  1088. (unsigned long long) cpu_phys_addr);
  1089. reg_addr = fixup_addr;
  1090. }
  1091. return cpu_phys_addr - reg_addr;
  1092. }
  1093. if (pci->use_parent_dt_ranges) {
  1094. /*
  1095. * This platform once had a fixup, presumably because it
  1096. * translates between CPU and PCI controller addresses.
  1097. * Log a note if devicetree didn't describe a translation.
  1098. */
  1099. if (reg_addr == cpu_phys_addr)
  1100. dev_info(dev, "%s reg[%d] %#010llx == cpu %#010llx\n; no fixup was ever needed for this devicetree\n",
  1101. reg_name, index, reg_addr,
  1102. (unsigned long long) cpu_phys_addr);
  1103. } else {
  1104. if (reg_addr != cpu_phys_addr) {
  1105. dev_warn(dev, "%s reg[%d] %#010llx != cpu %#010llx; no fixup and devicetree \"ranges\" is broken, assuming no translation\n",
  1106. reg_name, index, reg_addr,
  1107. (unsigned long long) cpu_phys_addr);
  1108. return 0;
  1109. }
  1110. }
  1111. return cpu_phys_addr - reg_addr;
  1112. }