pcie-rockchip.c 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345
  1. /*
  2. * Rockchip AXI PCIe host controller driver
  3. *
  4. * Copyright (c) 2016 Rockchip, Inc.
  5. *
  6. * Author: Shawn Lin <shawn.lin@rock-chips.com>
  7. * Wenrui Li <wenrui.li@rock-chips.com>
  8. *
  9. * Bits taken from Synopsys Designware Host controller driver and
  10. * ARM PCI Host generic driver.
  11. *
  12. * This program is free software: you can redistribute it and/or modify
  13. * it under the terms of the GNU General Public License as published by
  14. * the Free Software Foundation, either version 2 of the License, or
  15. * (at your option) any later version.
  16. */
  17. #include <linux/clk.h>
  18. #include <linux/delay.h>
  19. #include <linux/gpio/consumer.h>
  20. #include <linux/init.h>
  21. #include <linux/interrupt.h>
  22. #include <linux/irq.h>
  23. #include <linux/irqchip/chained_irq.h>
  24. #include <linux/irqdomain.h>
  25. #include <linux/kernel.h>
  26. #include <linux/mfd/syscon.h>
  27. #include <linux/of_address.h>
  28. #include <linux/of_device.h>
  29. #include <linux/of_pci.h>
  30. #include <linux/of_platform.h>
  31. #include <linux/of_irq.h>
  32. #include <linux/pci.h>
  33. #include <linux/pci_ids.h>
  34. #include <linux/phy/phy.h>
  35. #include <linux/platform_device.h>
  36. #include <linux/reset.h>
  37. #include <linux/regmap.h>
  38. /*
  39. * The upper 16 bits of PCIE_CLIENT_CONFIG are a write mask for the lower 16
  40. * bits. This allows atomic updates of the register without locking.
  41. */
  42. #define HIWORD_UPDATE(mask, val) (((mask) << 16) | (val))
  43. #define HIWORD_UPDATE_BIT(val) HIWORD_UPDATE(val, val)
  44. #define ENCODE_LANES(x) ((((x) >> 1) & 3) << 4)
  45. #define PCIE_CLIENT_BASE 0x0
  46. #define PCIE_CLIENT_CONFIG (PCIE_CLIENT_BASE + 0x00)
  47. #define PCIE_CLIENT_CONF_ENABLE HIWORD_UPDATE_BIT(0x0001)
  48. #define PCIE_CLIENT_LINK_TRAIN_ENABLE HIWORD_UPDATE_BIT(0x0002)
  49. #define PCIE_CLIENT_ARI_ENABLE HIWORD_UPDATE_BIT(0x0008)
  50. #define PCIE_CLIENT_CONF_LANE_NUM(x) HIWORD_UPDATE(0x0030, ENCODE_LANES(x))
  51. #define PCIE_CLIENT_MODE_RC HIWORD_UPDATE_BIT(0x0040)
  52. #define PCIE_CLIENT_GEN_SEL_1 HIWORD_UPDATE(0x0080, 0)
  53. #define PCIE_CLIENT_GEN_SEL_2 HIWORD_UPDATE_BIT(0x0080)
  54. #define PCIE_CLIENT_BASIC_STATUS1 (PCIE_CLIENT_BASE + 0x48)
  55. #define PCIE_CLIENT_LINK_STATUS_UP 0x00300000
  56. #define PCIE_CLIENT_LINK_STATUS_MASK 0x00300000
  57. #define PCIE_CLIENT_INT_MASK (PCIE_CLIENT_BASE + 0x4c)
  58. #define PCIE_CLIENT_INT_STATUS (PCIE_CLIENT_BASE + 0x50)
  59. #define PCIE_CLIENT_INTR_MASK GENMASK(8, 5)
  60. #define PCIE_CLIENT_INTR_SHIFT 5
  61. #define PCIE_CLIENT_INT_LEGACY_DONE BIT(15)
  62. #define PCIE_CLIENT_INT_MSG BIT(14)
  63. #define PCIE_CLIENT_INT_HOT_RST BIT(13)
  64. #define PCIE_CLIENT_INT_DPA BIT(12)
  65. #define PCIE_CLIENT_INT_FATAL_ERR BIT(11)
  66. #define PCIE_CLIENT_INT_NFATAL_ERR BIT(10)
  67. #define PCIE_CLIENT_INT_CORR_ERR BIT(9)
  68. #define PCIE_CLIENT_INT_INTD BIT(8)
  69. #define PCIE_CLIENT_INT_INTC BIT(7)
  70. #define PCIE_CLIENT_INT_INTB BIT(6)
  71. #define PCIE_CLIENT_INT_INTA BIT(5)
  72. #define PCIE_CLIENT_INT_LOCAL BIT(4)
  73. #define PCIE_CLIENT_INT_UDMA BIT(3)
  74. #define PCIE_CLIENT_INT_PHY BIT(2)
  75. #define PCIE_CLIENT_INT_HOT_PLUG BIT(1)
  76. #define PCIE_CLIENT_INT_PWR_STCG BIT(0)
  77. #define PCIE_CLIENT_INT_LEGACY \
  78. (PCIE_CLIENT_INT_INTA | PCIE_CLIENT_INT_INTB | \
  79. PCIE_CLIENT_INT_INTC | PCIE_CLIENT_INT_INTD)
  80. #define PCIE_CLIENT_INT_CLI \
  81. (PCIE_CLIENT_INT_CORR_ERR | PCIE_CLIENT_INT_NFATAL_ERR | \
  82. PCIE_CLIENT_INT_FATAL_ERR | PCIE_CLIENT_INT_DPA | \
  83. PCIE_CLIENT_INT_HOT_RST | PCIE_CLIENT_INT_MSG | \
  84. PCIE_CLIENT_INT_LEGACY_DONE | PCIE_CLIENT_INT_LEGACY | \
  85. PCIE_CLIENT_INT_PHY)
  86. #define PCIE_CORE_CTRL_MGMT_BASE 0x900000
  87. #define PCIE_CORE_CTRL (PCIE_CORE_CTRL_MGMT_BASE + 0x000)
  88. #define PCIE_CORE_PL_CONF_SPEED_5G 0x00000008
  89. #define PCIE_CORE_PL_CONF_SPEED_MASK 0x00000018
  90. #define PCIE_CORE_PL_CONF_LANE_MASK 0x00000006
  91. #define PCIE_CORE_PL_CONF_LANE_SHIFT 1
  92. #define PCIE_CORE_CTRL_PLC1 (PCIE_CORE_CTRL_MGMT_BASE + 0x004)
  93. #define PCIE_CORE_CTRL_PLC1_FTS_MASK GENMASK(23, 8)
  94. #define PCIE_CORE_CTRL_PLC1_FTS_SHIFT 8
  95. #define PCIE_CORE_CTRL_PLC1_FTS_CNT 0xffff
  96. #define PCIE_CORE_TXCREDIT_CFG1 (PCIE_CORE_CTRL_MGMT_BASE + 0x020)
  97. #define PCIE_CORE_TXCREDIT_CFG1_MUI_MASK 0xFFFF0000
  98. #define PCIE_CORE_TXCREDIT_CFG1_MUI_SHIFT 16
  99. #define PCIE_CORE_TXCREDIT_CFG1_MUI_ENCODE(x) \
  100. (((x) >> 3) << PCIE_CORE_TXCREDIT_CFG1_MUI_SHIFT)
  101. #define PCIE_CORE_INT_STATUS (PCIE_CORE_CTRL_MGMT_BASE + 0x20c)
  102. #define PCIE_CORE_INT_PRFPE BIT(0)
  103. #define PCIE_CORE_INT_CRFPE BIT(1)
  104. #define PCIE_CORE_INT_RRPE BIT(2)
  105. #define PCIE_CORE_INT_PRFO BIT(3)
  106. #define PCIE_CORE_INT_CRFO BIT(4)
  107. #define PCIE_CORE_INT_RT BIT(5)
  108. #define PCIE_CORE_INT_RTR BIT(6)
  109. #define PCIE_CORE_INT_PE BIT(7)
  110. #define PCIE_CORE_INT_MTR BIT(8)
  111. #define PCIE_CORE_INT_UCR BIT(9)
  112. #define PCIE_CORE_INT_FCE BIT(10)
  113. #define PCIE_CORE_INT_CT BIT(11)
  114. #define PCIE_CORE_INT_UTC BIT(18)
  115. #define PCIE_CORE_INT_MMVC BIT(19)
  116. #define PCIE_CORE_INT_MASK (PCIE_CORE_CTRL_MGMT_BASE + 0x210)
  117. #define PCIE_RC_BAR_CONF (PCIE_CORE_CTRL_MGMT_BASE + 0x300)
  118. #define PCIE_CORE_INT \
  119. (PCIE_CORE_INT_PRFPE | PCIE_CORE_INT_CRFPE | \
  120. PCIE_CORE_INT_RRPE | PCIE_CORE_INT_CRFO | \
  121. PCIE_CORE_INT_RT | PCIE_CORE_INT_RTR | \
  122. PCIE_CORE_INT_PE | PCIE_CORE_INT_MTR | \
  123. PCIE_CORE_INT_UCR | PCIE_CORE_INT_FCE | \
  124. PCIE_CORE_INT_CT | PCIE_CORE_INT_UTC | \
  125. PCIE_CORE_INT_MMVC)
  126. #define PCIE_RC_CONFIG_BASE 0xa00000
  127. #define PCIE_RC_CONFIG_VENDOR (PCIE_RC_CONFIG_BASE + 0x00)
  128. #define PCIE_RC_CONFIG_RID_CCR (PCIE_RC_CONFIG_BASE + 0x08)
  129. #define PCIE_RC_CONFIG_SCC_SHIFT 16
  130. #define PCIE_RC_CONFIG_DCR (PCIE_RC_CONFIG_BASE + 0xc4)
  131. #define PCIE_RC_CONFIG_DCR_CSPL_SHIFT 18
  132. #define PCIE_RC_CONFIG_DCR_CSPL_LIMIT 0xff
  133. #define PCIE_RC_CONFIG_DCR_CPLS_SHIFT 26
  134. #define PCIE_RC_CONFIG_LCS (PCIE_RC_CONFIG_BASE + 0xd0)
  135. #define PCIE_RC_CONFIG_L1_SUBSTATE_CTRL2 (PCIE_RC_CONFIG_BASE + 0x90c)
  136. #define PCIE_RC_CONFIG_THP_CAP (PCIE_RC_CONFIG_BASE + 0x274)
  137. #define PCIE_RC_CONFIG_THP_CAP_NEXT_MASK GENMASK(31, 20)
  138. #define PCIE_CORE_AXI_CONF_BASE 0xc00000
  139. #define PCIE_CORE_OB_REGION_ADDR0 (PCIE_CORE_AXI_CONF_BASE + 0x0)
  140. #define PCIE_CORE_OB_REGION_ADDR0_NUM_BITS 0x3f
  141. #define PCIE_CORE_OB_REGION_ADDR0_LO_ADDR 0xffffff00
  142. #define PCIE_CORE_OB_REGION_ADDR1 (PCIE_CORE_AXI_CONF_BASE + 0x4)
  143. #define PCIE_CORE_OB_REGION_DESC0 (PCIE_CORE_AXI_CONF_BASE + 0x8)
  144. #define PCIE_CORE_OB_REGION_DESC1 (PCIE_CORE_AXI_CONF_BASE + 0xc)
  145. #define PCIE_CORE_AXI_INBOUND_BASE 0xc00800
  146. #define PCIE_RP_IB_ADDR0 (PCIE_CORE_AXI_INBOUND_BASE + 0x0)
  147. #define PCIE_CORE_IB_REGION_ADDR0_NUM_BITS 0x3f
  148. #define PCIE_CORE_IB_REGION_ADDR0_LO_ADDR 0xffffff00
  149. #define PCIE_RP_IB_ADDR1 (PCIE_CORE_AXI_INBOUND_BASE + 0x4)
  150. /* Size of one AXI Region (not Region 0) */
  151. #define AXI_REGION_SIZE BIT(20)
  152. /* Size of Region 0, equal to sum of sizes of other regions */
  153. #define AXI_REGION_0_SIZE (32 * (0x1 << 20))
  154. #define OB_REG_SIZE_SHIFT 5
  155. #define IB_ROOT_PORT_REG_SIZE_SHIFT 3
  156. #define AXI_WRAPPER_IO_WRITE 0x6
  157. #define AXI_WRAPPER_MEM_WRITE 0x2
  158. #define MAX_AXI_IB_ROOTPORT_REGION_NUM 3
  159. #define MIN_AXI_ADDR_BITS_PASSED 8
  160. #define ROCKCHIP_VENDOR_ID 0x1d87
  161. #define PCIE_ECAM_BUS(x) (((x) & 0xff) << 20)
  162. #define PCIE_ECAM_DEV(x) (((x) & 0x1f) << 15)
  163. #define PCIE_ECAM_FUNC(x) (((x) & 0x7) << 12)
  164. #define PCIE_ECAM_REG(x) (((x) & 0xfff) << 0)
  165. #define PCIE_ECAM_ADDR(bus, dev, func, reg) \
  166. (PCIE_ECAM_BUS(bus) | PCIE_ECAM_DEV(dev) | \
  167. PCIE_ECAM_FUNC(func) | PCIE_ECAM_REG(reg))
  168. #define RC_REGION_0_ADDR_TRANS_H 0x00000000
  169. #define RC_REGION_0_ADDR_TRANS_L 0x00000000
  170. #define RC_REGION_0_PASS_BITS (25 - 1)
  171. #define MAX_AXI_WRAPPER_REGION_NUM 33
  172. struct rockchip_pcie {
  173. void __iomem *reg_base; /* DT axi-base */
  174. void __iomem *apb_base; /* DT apb-base */
  175. struct phy *phy;
  176. struct reset_control *core_rst;
  177. struct reset_control *mgmt_rst;
  178. struct reset_control *mgmt_sticky_rst;
  179. struct reset_control *pipe_rst;
  180. struct reset_control *pm_rst;
  181. struct reset_control *aclk_rst;
  182. struct reset_control *pclk_rst;
  183. struct clk *aclk_pcie;
  184. struct clk *aclk_perf_pcie;
  185. struct clk *hclk_pcie;
  186. struct clk *clk_pcie_pm;
  187. struct regulator *vpcie3v3; /* 3.3V power supply */
  188. struct regulator *vpcie1v8; /* 1.8V power supply */
  189. struct regulator *vpcie0v9; /* 0.9V power supply */
  190. struct gpio_desc *ep_gpio;
  191. u32 lanes;
  192. u8 root_bus_nr;
  193. int link_gen;
  194. struct device *dev;
  195. struct irq_domain *irq_domain;
  196. u32 io_size;
  197. int offset;
  198. phys_addr_t io_bus_addr;
  199. u32 mem_size;
  200. phys_addr_t mem_bus_addr;
  201. };
  202. static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg)
  203. {
  204. return readl(rockchip->apb_base + reg);
  205. }
  206. static void rockchip_pcie_write(struct rockchip_pcie *rockchip, u32 val,
  207. u32 reg)
  208. {
  209. writel(val, rockchip->apb_base + reg);
  210. }
  211. static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip)
  212. {
  213. u32 status;
  214. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  215. status |= (PCI_EXP_LNKCTL_LBMIE | PCI_EXP_LNKCTL_LABIE);
  216. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  217. }
  218. static void rockchip_pcie_clr_bw_int(struct rockchip_pcie *rockchip)
  219. {
  220. u32 status;
  221. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  222. status |= (PCI_EXP_LNKSTA_LBMS | PCI_EXP_LNKSTA_LABS) << 16;
  223. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  224. }
  225. static void rockchip_pcie_update_txcredit_mui(struct rockchip_pcie *rockchip)
  226. {
  227. u32 val;
  228. /* Update Tx credit maximum update interval */
  229. val = rockchip_pcie_read(rockchip, PCIE_CORE_TXCREDIT_CFG1);
  230. val &= ~PCIE_CORE_TXCREDIT_CFG1_MUI_MASK;
  231. val |= PCIE_CORE_TXCREDIT_CFG1_MUI_ENCODE(24000); /* ns */
  232. rockchip_pcie_write(rockchip, val, PCIE_CORE_TXCREDIT_CFG1);
  233. }
  234. static int rockchip_pcie_valid_device(struct rockchip_pcie *rockchip,
  235. struct pci_bus *bus, int dev)
  236. {
  237. /* access only one slot on each root port */
  238. if (bus->number == rockchip->root_bus_nr && dev > 0)
  239. return 0;
  240. /*
  241. * do not read more than one device on the bus directly attached
  242. * to RC's downstream side.
  243. */
  244. if (bus->primary == rockchip->root_bus_nr && dev > 0)
  245. return 0;
  246. return 1;
  247. }
  248. static int rockchip_pcie_rd_own_conf(struct rockchip_pcie *rockchip,
  249. int where, int size, u32 *val)
  250. {
  251. void __iomem *addr = rockchip->apb_base + PCIE_RC_CONFIG_BASE + where;
  252. if (!IS_ALIGNED((uintptr_t)addr, size)) {
  253. *val = 0;
  254. return PCIBIOS_BAD_REGISTER_NUMBER;
  255. }
  256. if (size == 4) {
  257. *val = readl(addr);
  258. } else if (size == 2) {
  259. *val = readw(addr);
  260. } else if (size == 1) {
  261. *val = readb(addr);
  262. } else {
  263. *val = 0;
  264. return PCIBIOS_BAD_REGISTER_NUMBER;
  265. }
  266. return PCIBIOS_SUCCESSFUL;
  267. }
  268. static int rockchip_pcie_wr_own_conf(struct rockchip_pcie *rockchip,
  269. int where, int size, u32 val)
  270. {
  271. u32 mask, tmp, offset;
  272. offset = where & ~0x3;
  273. if (size == 4) {
  274. writel(val, rockchip->apb_base + PCIE_RC_CONFIG_BASE + offset);
  275. return PCIBIOS_SUCCESSFUL;
  276. }
  277. mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
  278. /*
  279. * N.B. This read/modify/write isn't safe in general because it can
  280. * corrupt RW1C bits in adjacent registers. But the hardware
  281. * doesn't support smaller writes.
  282. */
  283. tmp = readl(rockchip->apb_base + PCIE_RC_CONFIG_BASE + offset) & mask;
  284. tmp |= val << ((where & 0x3) * 8);
  285. writel(tmp, rockchip->apb_base + PCIE_RC_CONFIG_BASE + offset);
  286. return PCIBIOS_SUCCESSFUL;
  287. }
  288. static int rockchip_pcie_rd_other_conf(struct rockchip_pcie *rockchip,
  289. struct pci_bus *bus, u32 devfn,
  290. int where, int size, u32 *val)
  291. {
  292. u32 busdev;
  293. busdev = PCIE_ECAM_ADDR(bus->number, PCI_SLOT(devfn),
  294. PCI_FUNC(devfn), where);
  295. if (!IS_ALIGNED(busdev, size)) {
  296. *val = 0;
  297. return PCIBIOS_BAD_REGISTER_NUMBER;
  298. }
  299. if (size == 4) {
  300. *val = readl(rockchip->reg_base + busdev);
  301. } else if (size == 2) {
  302. *val = readw(rockchip->reg_base + busdev);
  303. } else if (size == 1) {
  304. *val = readb(rockchip->reg_base + busdev);
  305. } else {
  306. *val = 0;
  307. return PCIBIOS_BAD_REGISTER_NUMBER;
  308. }
  309. return PCIBIOS_SUCCESSFUL;
  310. }
  311. static int rockchip_pcie_wr_other_conf(struct rockchip_pcie *rockchip,
  312. struct pci_bus *bus, u32 devfn,
  313. int where, int size, u32 val)
  314. {
  315. u32 busdev;
  316. busdev = PCIE_ECAM_ADDR(bus->number, PCI_SLOT(devfn),
  317. PCI_FUNC(devfn), where);
  318. if (!IS_ALIGNED(busdev, size))
  319. return PCIBIOS_BAD_REGISTER_NUMBER;
  320. if (size == 4)
  321. writel(val, rockchip->reg_base + busdev);
  322. else if (size == 2)
  323. writew(val, rockchip->reg_base + busdev);
  324. else if (size == 1)
  325. writeb(val, rockchip->reg_base + busdev);
  326. else
  327. return PCIBIOS_BAD_REGISTER_NUMBER;
  328. return PCIBIOS_SUCCESSFUL;
  329. }
  330. static int rockchip_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
  331. int size, u32 *val)
  332. {
  333. struct rockchip_pcie *rockchip = bus->sysdata;
  334. if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) {
  335. *val = 0xffffffff;
  336. return PCIBIOS_DEVICE_NOT_FOUND;
  337. }
  338. if (bus->number == rockchip->root_bus_nr)
  339. return rockchip_pcie_rd_own_conf(rockchip, where, size, val);
  340. return rockchip_pcie_rd_other_conf(rockchip, bus, devfn, where, size, val);
  341. }
  342. static int rockchip_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
  343. int where, int size, u32 val)
  344. {
  345. struct rockchip_pcie *rockchip = bus->sysdata;
  346. if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn)))
  347. return PCIBIOS_DEVICE_NOT_FOUND;
  348. if (bus->number == rockchip->root_bus_nr)
  349. return rockchip_pcie_wr_own_conf(rockchip, where, size, val);
  350. return rockchip_pcie_wr_other_conf(rockchip, bus, devfn, where, size, val);
  351. }
  352. static struct pci_ops rockchip_pcie_ops = {
  353. .read = rockchip_pcie_rd_conf,
  354. .write = rockchip_pcie_wr_conf,
  355. };
  356. static void rockchip_pcie_set_power_limit(struct rockchip_pcie *rockchip)
  357. {
  358. u32 status, curr, scale, power;
  359. if (IS_ERR(rockchip->vpcie3v3))
  360. return;
  361. /*
  362. * Set RC's captured slot power limit and scale if
  363. * vpcie3v3 available. The default values are both zero
  364. * which means the software should set these two according
  365. * to the actual power supply.
  366. */
  367. curr = regulator_get_current_limit(rockchip->vpcie3v3);
  368. if (curr > 0) {
  369. scale = 3; /* 0.001x */
  370. curr = curr / 1000; /* convert to mA */
  371. power = (curr * 3300) / 1000; /* milliwatt */
  372. while (power > PCIE_RC_CONFIG_DCR_CSPL_LIMIT) {
  373. if (!scale) {
  374. dev_warn(rockchip->dev, "invalid power supply\n");
  375. return;
  376. }
  377. scale--;
  378. power = power / 10;
  379. }
  380. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCR);
  381. status |= (power << PCIE_RC_CONFIG_DCR_CSPL_SHIFT) |
  382. (scale << PCIE_RC_CONFIG_DCR_CPLS_SHIFT);
  383. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCR);
  384. }
  385. }
  386. /**
  387. * rockchip_pcie_init_port - Initialize hardware
  388. * @rockchip: PCIe port information
  389. */
  390. static int rockchip_pcie_init_port(struct rockchip_pcie *rockchip)
  391. {
  392. struct device *dev = rockchip->dev;
  393. int err;
  394. u32 status;
  395. unsigned long timeout;
  396. gpiod_set_value(rockchip->ep_gpio, 0);
  397. err = reset_control_assert(rockchip->aclk_rst);
  398. if (err) {
  399. dev_err(dev, "assert aclk_rst err %d\n", err);
  400. return err;
  401. }
  402. err = reset_control_assert(rockchip->pclk_rst);
  403. if (err) {
  404. dev_err(dev, "assert pclk_rst err %d\n", err);
  405. return err;
  406. }
  407. err = reset_control_assert(rockchip->pm_rst);
  408. if (err) {
  409. dev_err(dev, "assert pm_rst err %d\n", err);
  410. return err;
  411. }
  412. err = phy_init(rockchip->phy);
  413. if (err < 0) {
  414. dev_err(dev, "fail to init phy, err %d\n", err);
  415. return err;
  416. }
  417. err = reset_control_assert(rockchip->core_rst);
  418. if (err) {
  419. dev_err(dev, "assert core_rst err %d\n", err);
  420. return err;
  421. }
  422. err = reset_control_assert(rockchip->mgmt_rst);
  423. if (err) {
  424. dev_err(dev, "assert mgmt_rst err %d\n", err);
  425. return err;
  426. }
  427. err = reset_control_assert(rockchip->mgmt_sticky_rst);
  428. if (err) {
  429. dev_err(dev, "assert mgmt_sticky_rst err %d\n", err);
  430. return err;
  431. }
  432. err = reset_control_assert(rockchip->pipe_rst);
  433. if (err) {
  434. dev_err(dev, "assert pipe_rst err %d\n", err);
  435. return err;
  436. }
  437. udelay(10);
  438. err = reset_control_deassert(rockchip->pm_rst);
  439. if (err) {
  440. dev_err(dev, "deassert pm_rst err %d\n", err);
  441. return err;
  442. }
  443. err = reset_control_deassert(rockchip->aclk_rst);
  444. if (err) {
  445. dev_err(dev, "deassert aclk_rst err %d\n", err);
  446. return err;
  447. }
  448. err = reset_control_deassert(rockchip->pclk_rst);
  449. if (err) {
  450. dev_err(dev, "deassert pclk_rst err %d\n", err);
  451. return err;
  452. }
  453. if (rockchip->link_gen == 2)
  454. rockchip_pcie_write(rockchip, PCIE_CLIENT_GEN_SEL_2,
  455. PCIE_CLIENT_CONFIG);
  456. else
  457. rockchip_pcie_write(rockchip, PCIE_CLIENT_GEN_SEL_1,
  458. PCIE_CLIENT_CONFIG);
  459. rockchip_pcie_write(rockchip,
  460. PCIE_CLIENT_CONF_ENABLE |
  461. PCIE_CLIENT_LINK_TRAIN_ENABLE |
  462. PCIE_CLIENT_ARI_ENABLE |
  463. PCIE_CLIENT_CONF_LANE_NUM(rockchip->lanes) |
  464. PCIE_CLIENT_MODE_RC,
  465. PCIE_CLIENT_CONFIG);
  466. err = phy_power_on(rockchip->phy);
  467. if (err) {
  468. dev_err(dev, "fail to power on phy, err %d\n", err);
  469. return err;
  470. }
  471. /*
  472. * Please don't reorder the deassert sequence of the following
  473. * four reset pins.
  474. */
  475. err = reset_control_deassert(rockchip->mgmt_sticky_rst);
  476. if (err) {
  477. dev_err(dev, "deassert mgmt_sticky_rst err %d\n", err);
  478. return err;
  479. }
  480. err = reset_control_deassert(rockchip->core_rst);
  481. if (err) {
  482. dev_err(dev, "deassert core_rst err %d\n", err);
  483. return err;
  484. }
  485. err = reset_control_deassert(rockchip->mgmt_rst);
  486. if (err) {
  487. dev_err(dev, "deassert mgmt_rst err %d\n", err);
  488. return err;
  489. }
  490. err = reset_control_deassert(rockchip->pipe_rst);
  491. if (err) {
  492. dev_err(dev, "deassert pipe_rst err %d\n", err);
  493. return err;
  494. }
  495. /* Fix the transmitted FTS count desired to exit from L0s. */
  496. status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL_PLC1);
  497. status = (status & ~PCIE_CORE_CTRL_PLC1_FTS_MASK) |
  498. (PCIE_CORE_CTRL_PLC1_FTS_CNT << PCIE_CORE_CTRL_PLC1_FTS_SHIFT);
  499. rockchip_pcie_write(rockchip, status, PCIE_CORE_CTRL_PLC1);
  500. rockchip_pcie_set_power_limit(rockchip);
  501. /* Set RC's clock architecture as common clock */
  502. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  503. status |= PCI_EXP_LNKCTL_CCC;
  504. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  505. /* Enable Gen1 training */
  506. rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_ENABLE,
  507. PCIE_CLIENT_CONFIG);
  508. gpiod_set_value(rockchip->ep_gpio, 1);
  509. /* 500ms timeout value should be enough for Gen1/2 training */
  510. timeout = jiffies + msecs_to_jiffies(500);
  511. for (;;) {
  512. status = rockchip_pcie_read(rockchip,
  513. PCIE_CLIENT_BASIC_STATUS1);
  514. if ((status & PCIE_CLIENT_LINK_STATUS_MASK) ==
  515. PCIE_CLIENT_LINK_STATUS_UP) {
  516. dev_dbg(dev, "PCIe link training gen1 pass!\n");
  517. break;
  518. }
  519. if (time_after(jiffies, timeout)) {
  520. dev_err(dev, "PCIe link training gen1 timeout!\n");
  521. return -ETIMEDOUT;
  522. }
  523. msleep(20);
  524. }
  525. if (rockchip->link_gen == 2) {
  526. /*
  527. * Enable retrain for gen2. This should be configured only after
  528. * gen1 finished.
  529. */
  530. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  531. status |= PCI_EXP_LNKCTL_RL;
  532. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  533. timeout = jiffies + msecs_to_jiffies(500);
  534. for (;;) {
  535. status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL);
  536. if ((status & PCIE_CORE_PL_CONF_SPEED_MASK) ==
  537. PCIE_CORE_PL_CONF_SPEED_5G) {
  538. dev_dbg(dev, "PCIe link training gen2 pass!\n");
  539. break;
  540. }
  541. if (time_after(jiffies, timeout)) {
  542. dev_dbg(dev, "PCIe link training gen2 timeout, fall back to gen1!\n");
  543. break;
  544. }
  545. msleep(20);
  546. }
  547. }
  548. /* Check the final link width from negotiated lane counter from MGMT */
  549. status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL);
  550. status = 0x1 << ((status & PCIE_CORE_PL_CONF_LANE_MASK) >>
  551. PCIE_CORE_PL_CONF_LANE_SHIFT);
  552. dev_dbg(dev, "current link width is x%d\n", status);
  553. rockchip_pcie_write(rockchip, ROCKCHIP_VENDOR_ID,
  554. PCIE_RC_CONFIG_VENDOR);
  555. rockchip_pcie_write(rockchip,
  556. PCI_CLASS_BRIDGE_PCI << PCIE_RC_CONFIG_SCC_SHIFT,
  557. PCIE_RC_CONFIG_RID_CCR);
  558. /* Clear THP cap's next cap pointer to remove L1 substate cap */
  559. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_THP_CAP);
  560. status &= ~PCIE_RC_CONFIG_THP_CAP_NEXT_MASK;
  561. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_THP_CAP);
  562. rockchip_pcie_write(rockchip, 0x0, PCIE_RC_BAR_CONF);
  563. rockchip_pcie_write(rockchip,
  564. (RC_REGION_0_ADDR_TRANS_L + RC_REGION_0_PASS_BITS),
  565. PCIE_CORE_OB_REGION_ADDR0);
  566. rockchip_pcie_write(rockchip, RC_REGION_0_ADDR_TRANS_H,
  567. PCIE_CORE_OB_REGION_ADDR1);
  568. rockchip_pcie_write(rockchip, 0x0080000a, PCIE_CORE_OB_REGION_DESC0);
  569. rockchip_pcie_write(rockchip, 0x0, PCIE_CORE_OB_REGION_DESC1);
  570. return 0;
  571. }
  572. static irqreturn_t rockchip_pcie_subsys_irq_handler(int irq, void *arg)
  573. {
  574. struct rockchip_pcie *rockchip = arg;
  575. struct device *dev = rockchip->dev;
  576. u32 reg;
  577. u32 sub_reg;
  578. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  579. if (reg & PCIE_CLIENT_INT_LOCAL) {
  580. dev_dbg(dev, "local interrupt received\n");
  581. sub_reg = rockchip_pcie_read(rockchip, PCIE_CORE_INT_STATUS);
  582. if (sub_reg & PCIE_CORE_INT_PRFPE)
  583. dev_dbg(dev, "parity error detected while reading from the PNP receive FIFO RAM\n");
  584. if (sub_reg & PCIE_CORE_INT_CRFPE)
  585. dev_dbg(dev, "parity error detected while reading from the Completion Receive FIFO RAM\n");
  586. if (sub_reg & PCIE_CORE_INT_RRPE)
  587. dev_dbg(dev, "parity error detected while reading from replay buffer RAM\n");
  588. if (sub_reg & PCIE_CORE_INT_PRFO)
  589. dev_dbg(dev, "overflow occurred in the PNP receive FIFO\n");
  590. if (sub_reg & PCIE_CORE_INT_CRFO)
  591. dev_dbg(dev, "overflow occurred in the completion receive FIFO\n");
  592. if (sub_reg & PCIE_CORE_INT_RT)
  593. dev_dbg(dev, "replay timer timed out\n");
  594. if (sub_reg & PCIE_CORE_INT_RTR)
  595. dev_dbg(dev, "replay timer rolled over after 4 transmissions of the same TLP\n");
  596. if (sub_reg & PCIE_CORE_INT_PE)
  597. dev_dbg(dev, "phy error detected on receive side\n");
  598. if (sub_reg & PCIE_CORE_INT_MTR)
  599. dev_dbg(dev, "malformed TLP received from the link\n");
  600. if (sub_reg & PCIE_CORE_INT_UCR)
  601. dev_dbg(dev, "malformed TLP received from the link\n");
  602. if (sub_reg & PCIE_CORE_INT_FCE)
  603. dev_dbg(dev, "an error was observed in the flow control advertisements from the other side\n");
  604. if (sub_reg & PCIE_CORE_INT_CT)
  605. dev_dbg(dev, "a request timed out waiting for completion\n");
  606. if (sub_reg & PCIE_CORE_INT_UTC)
  607. dev_dbg(dev, "unmapped TC error\n");
  608. if (sub_reg & PCIE_CORE_INT_MMVC)
  609. dev_dbg(dev, "MSI mask register changes\n");
  610. rockchip_pcie_write(rockchip, sub_reg, PCIE_CORE_INT_STATUS);
  611. } else if (reg & PCIE_CLIENT_INT_PHY) {
  612. dev_dbg(dev, "phy link changes\n");
  613. rockchip_pcie_update_txcredit_mui(rockchip);
  614. rockchip_pcie_clr_bw_int(rockchip);
  615. }
  616. rockchip_pcie_write(rockchip, reg & PCIE_CLIENT_INT_LOCAL,
  617. PCIE_CLIENT_INT_STATUS);
  618. return IRQ_HANDLED;
  619. }
  620. static irqreturn_t rockchip_pcie_client_irq_handler(int irq, void *arg)
  621. {
  622. struct rockchip_pcie *rockchip = arg;
  623. struct device *dev = rockchip->dev;
  624. u32 reg;
  625. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  626. if (reg & PCIE_CLIENT_INT_LEGACY_DONE)
  627. dev_dbg(dev, "legacy done interrupt received\n");
  628. if (reg & PCIE_CLIENT_INT_MSG)
  629. dev_dbg(dev, "message done interrupt received\n");
  630. if (reg & PCIE_CLIENT_INT_HOT_RST)
  631. dev_dbg(dev, "hot reset interrupt received\n");
  632. if (reg & PCIE_CLIENT_INT_DPA)
  633. dev_dbg(dev, "dpa interrupt received\n");
  634. if (reg & PCIE_CLIENT_INT_FATAL_ERR)
  635. dev_dbg(dev, "fatal error interrupt received\n");
  636. if (reg & PCIE_CLIENT_INT_NFATAL_ERR)
  637. dev_dbg(dev, "no fatal error interrupt received\n");
  638. if (reg & PCIE_CLIENT_INT_CORR_ERR)
  639. dev_dbg(dev, "correctable error interrupt received\n");
  640. if (reg & PCIE_CLIENT_INT_PHY)
  641. dev_dbg(dev, "phy interrupt received\n");
  642. rockchip_pcie_write(rockchip, reg & (PCIE_CLIENT_INT_LEGACY_DONE |
  643. PCIE_CLIENT_INT_MSG | PCIE_CLIENT_INT_HOT_RST |
  644. PCIE_CLIENT_INT_DPA | PCIE_CLIENT_INT_FATAL_ERR |
  645. PCIE_CLIENT_INT_NFATAL_ERR |
  646. PCIE_CLIENT_INT_CORR_ERR |
  647. PCIE_CLIENT_INT_PHY),
  648. PCIE_CLIENT_INT_STATUS);
  649. return IRQ_HANDLED;
  650. }
  651. static void rockchip_pcie_legacy_int_handler(struct irq_desc *desc)
  652. {
  653. struct irq_chip *chip = irq_desc_get_chip(desc);
  654. struct rockchip_pcie *rockchip = irq_desc_get_handler_data(desc);
  655. struct device *dev = rockchip->dev;
  656. u32 reg;
  657. u32 hwirq;
  658. u32 virq;
  659. chained_irq_enter(chip, desc);
  660. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  661. reg = (reg & PCIE_CLIENT_INTR_MASK) >> PCIE_CLIENT_INTR_SHIFT;
  662. while (reg) {
  663. hwirq = ffs(reg) - 1;
  664. reg &= ~BIT(hwirq);
  665. virq = irq_find_mapping(rockchip->irq_domain, hwirq);
  666. if (virq)
  667. generic_handle_irq(virq);
  668. else
  669. dev_err(dev, "unexpected IRQ, INT%d\n", hwirq);
  670. }
  671. chained_irq_exit(chip, desc);
  672. }
  673. /**
  674. * rockchip_pcie_parse_dt - Parse Device Tree
  675. * @rockchip: PCIe port information
  676. *
  677. * Return: '0' on success and error value on failure
  678. */
  679. static int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
  680. {
  681. struct device *dev = rockchip->dev;
  682. struct platform_device *pdev = to_platform_device(dev);
  683. struct device_node *node = dev->of_node;
  684. struct resource *regs;
  685. int irq;
  686. int err;
  687. regs = platform_get_resource_byname(pdev,
  688. IORESOURCE_MEM,
  689. "axi-base");
  690. rockchip->reg_base = devm_ioremap_resource(dev, regs);
  691. if (IS_ERR(rockchip->reg_base))
  692. return PTR_ERR(rockchip->reg_base);
  693. regs = platform_get_resource_byname(pdev,
  694. IORESOURCE_MEM,
  695. "apb-base");
  696. rockchip->apb_base = devm_ioremap_resource(dev, regs);
  697. if (IS_ERR(rockchip->apb_base))
  698. return PTR_ERR(rockchip->apb_base);
  699. rockchip->phy = devm_phy_get(dev, "pcie-phy");
  700. if (IS_ERR(rockchip->phy)) {
  701. if (PTR_ERR(rockchip->phy) != -EPROBE_DEFER)
  702. dev_err(dev, "missing phy\n");
  703. return PTR_ERR(rockchip->phy);
  704. }
  705. rockchip->lanes = 1;
  706. err = of_property_read_u32(node, "num-lanes", &rockchip->lanes);
  707. if (!err && (rockchip->lanes == 0 ||
  708. rockchip->lanes == 3 ||
  709. rockchip->lanes > 4)) {
  710. dev_warn(dev, "invalid num-lanes, default to use one lane\n");
  711. rockchip->lanes = 1;
  712. }
  713. rockchip->link_gen = of_pci_get_max_link_speed(node);
  714. if (rockchip->link_gen < 0 || rockchip->link_gen > 2)
  715. rockchip->link_gen = 2;
  716. rockchip->core_rst = devm_reset_control_get(dev, "core");
  717. if (IS_ERR(rockchip->core_rst)) {
  718. if (PTR_ERR(rockchip->core_rst) != -EPROBE_DEFER)
  719. dev_err(dev, "missing core reset property in node\n");
  720. return PTR_ERR(rockchip->core_rst);
  721. }
  722. rockchip->mgmt_rst = devm_reset_control_get(dev, "mgmt");
  723. if (IS_ERR(rockchip->mgmt_rst)) {
  724. if (PTR_ERR(rockchip->mgmt_rst) != -EPROBE_DEFER)
  725. dev_err(dev, "missing mgmt reset property in node\n");
  726. return PTR_ERR(rockchip->mgmt_rst);
  727. }
  728. rockchip->mgmt_sticky_rst = devm_reset_control_get(dev, "mgmt-sticky");
  729. if (IS_ERR(rockchip->mgmt_sticky_rst)) {
  730. if (PTR_ERR(rockchip->mgmt_sticky_rst) != -EPROBE_DEFER)
  731. dev_err(dev, "missing mgmt-sticky reset property in node\n");
  732. return PTR_ERR(rockchip->mgmt_sticky_rst);
  733. }
  734. rockchip->pipe_rst = devm_reset_control_get(dev, "pipe");
  735. if (IS_ERR(rockchip->pipe_rst)) {
  736. if (PTR_ERR(rockchip->pipe_rst) != -EPROBE_DEFER)
  737. dev_err(dev, "missing pipe reset property in node\n");
  738. return PTR_ERR(rockchip->pipe_rst);
  739. }
  740. rockchip->pm_rst = devm_reset_control_get(dev, "pm");
  741. if (IS_ERR(rockchip->pm_rst)) {
  742. if (PTR_ERR(rockchip->pm_rst) != -EPROBE_DEFER)
  743. dev_err(dev, "missing pm reset property in node\n");
  744. return PTR_ERR(rockchip->pm_rst);
  745. }
  746. rockchip->pclk_rst = devm_reset_control_get(dev, "pclk");
  747. if (IS_ERR(rockchip->pclk_rst)) {
  748. if (PTR_ERR(rockchip->pclk_rst) != -EPROBE_DEFER)
  749. dev_err(dev, "missing pclk reset property in node\n");
  750. return PTR_ERR(rockchip->pclk_rst);
  751. }
  752. rockchip->aclk_rst = devm_reset_control_get(dev, "aclk");
  753. if (IS_ERR(rockchip->aclk_rst)) {
  754. if (PTR_ERR(rockchip->aclk_rst) != -EPROBE_DEFER)
  755. dev_err(dev, "missing aclk reset property in node\n");
  756. return PTR_ERR(rockchip->aclk_rst);
  757. }
  758. rockchip->ep_gpio = devm_gpiod_get(dev, "ep", GPIOD_OUT_HIGH);
  759. if (IS_ERR(rockchip->ep_gpio)) {
  760. dev_err(dev, "missing ep-gpios property in node\n");
  761. return PTR_ERR(rockchip->ep_gpio);
  762. }
  763. rockchip->aclk_pcie = devm_clk_get(dev, "aclk");
  764. if (IS_ERR(rockchip->aclk_pcie)) {
  765. dev_err(dev, "aclk clock not found\n");
  766. return PTR_ERR(rockchip->aclk_pcie);
  767. }
  768. rockchip->aclk_perf_pcie = devm_clk_get(dev, "aclk-perf");
  769. if (IS_ERR(rockchip->aclk_perf_pcie)) {
  770. dev_err(dev, "aclk_perf clock not found\n");
  771. return PTR_ERR(rockchip->aclk_perf_pcie);
  772. }
  773. rockchip->hclk_pcie = devm_clk_get(dev, "hclk");
  774. if (IS_ERR(rockchip->hclk_pcie)) {
  775. dev_err(dev, "hclk clock not found\n");
  776. return PTR_ERR(rockchip->hclk_pcie);
  777. }
  778. rockchip->clk_pcie_pm = devm_clk_get(dev, "pm");
  779. if (IS_ERR(rockchip->clk_pcie_pm)) {
  780. dev_err(dev, "pm clock not found\n");
  781. return PTR_ERR(rockchip->clk_pcie_pm);
  782. }
  783. irq = platform_get_irq_byname(pdev, "sys");
  784. if (irq < 0) {
  785. dev_err(dev, "missing sys IRQ resource\n");
  786. return -EINVAL;
  787. }
  788. err = devm_request_irq(dev, irq, rockchip_pcie_subsys_irq_handler,
  789. IRQF_SHARED, "pcie-sys", rockchip);
  790. if (err) {
  791. dev_err(dev, "failed to request PCIe subsystem IRQ\n");
  792. return err;
  793. }
  794. irq = platform_get_irq_byname(pdev, "legacy");
  795. if (irq < 0) {
  796. dev_err(dev, "missing legacy IRQ resource\n");
  797. return -EINVAL;
  798. }
  799. irq_set_chained_handler_and_data(irq,
  800. rockchip_pcie_legacy_int_handler,
  801. rockchip);
  802. irq = platform_get_irq_byname(pdev, "client");
  803. if (irq < 0) {
  804. dev_err(dev, "missing client IRQ resource\n");
  805. return -EINVAL;
  806. }
  807. err = devm_request_irq(dev, irq, rockchip_pcie_client_irq_handler,
  808. IRQF_SHARED, "pcie-client", rockchip);
  809. if (err) {
  810. dev_err(dev, "failed to request PCIe client IRQ\n");
  811. return err;
  812. }
  813. rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3");
  814. if (IS_ERR(rockchip->vpcie3v3)) {
  815. if (PTR_ERR(rockchip->vpcie3v3) == -EPROBE_DEFER)
  816. return -EPROBE_DEFER;
  817. dev_info(dev, "no vpcie3v3 regulator found\n");
  818. }
  819. rockchip->vpcie1v8 = devm_regulator_get_optional(dev, "vpcie1v8");
  820. if (IS_ERR(rockchip->vpcie1v8)) {
  821. if (PTR_ERR(rockchip->vpcie1v8) == -EPROBE_DEFER)
  822. return -EPROBE_DEFER;
  823. dev_info(dev, "no vpcie1v8 regulator found\n");
  824. }
  825. rockchip->vpcie0v9 = devm_regulator_get_optional(dev, "vpcie0v9");
  826. if (IS_ERR(rockchip->vpcie0v9)) {
  827. if (PTR_ERR(rockchip->vpcie0v9) == -EPROBE_DEFER)
  828. return -EPROBE_DEFER;
  829. dev_info(dev, "no vpcie0v9 regulator found\n");
  830. }
  831. return 0;
  832. }
  833. static int rockchip_pcie_set_vpcie(struct rockchip_pcie *rockchip)
  834. {
  835. struct device *dev = rockchip->dev;
  836. int err;
  837. if (!IS_ERR(rockchip->vpcie3v3)) {
  838. err = regulator_enable(rockchip->vpcie3v3);
  839. if (err) {
  840. dev_err(dev, "fail to enable vpcie3v3 regulator\n");
  841. goto err_out;
  842. }
  843. }
  844. if (!IS_ERR(rockchip->vpcie1v8)) {
  845. err = regulator_enable(rockchip->vpcie1v8);
  846. if (err) {
  847. dev_err(dev, "fail to enable vpcie1v8 regulator\n");
  848. goto err_disable_3v3;
  849. }
  850. }
  851. if (!IS_ERR(rockchip->vpcie0v9)) {
  852. err = regulator_enable(rockchip->vpcie0v9);
  853. if (err) {
  854. dev_err(dev, "fail to enable vpcie0v9 regulator\n");
  855. goto err_disable_1v8;
  856. }
  857. }
  858. return 0;
  859. err_disable_1v8:
  860. if (!IS_ERR(rockchip->vpcie1v8))
  861. regulator_disable(rockchip->vpcie1v8);
  862. err_disable_3v3:
  863. if (!IS_ERR(rockchip->vpcie3v3))
  864. regulator_disable(rockchip->vpcie3v3);
  865. err_out:
  866. return err;
  867. }
  868. static void rockchip_pcie_enable_interrupts(struct rockchip_pcie *rockchip)
  869. {
  870. rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) &
  871. (~PCIE_CLIENT_INT_CLI), PCIE_CLIENT_INT_MASK);
  872. rockchip_pcie_write(rockchip, (u32)(~PCIE_CORE_INT),
  873. PCIE_CORE_INT_MASK);
  874. rockchip_pcie_enable_bw_int(rockchip);
  875. }
  876. static int rockchip_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
  877. irq_hw_number_t hwirq)
  878. {
  879. irq_set_chip_and_handler(irq, &dummy_irq_chip, handle_simple_irq);
  880. irq_set_chip_data(irq, domain->host_data);
  881. return 0;
  882. }
  883. static const struct irq_domain_ops intx_domain_ops = {
  884. .map = rockchip_pcie_intx_map,
  885. };
  886. static int rockchip_pcie_init_irq_domain(struct rockchip_pcie *rockchip)
  887. {
  888. struct device *dev = rockchip->dev;
  889. struct device_node *intc = of_get_next_child(dev->of_node, NULL);
  890. if (!intc) {
  891. dev_err(dev, "missing child interrupt-controller node\n");
  892. return -EINVAL;
  893. }
  894. rockchip->irq_domain = irq_domain_add_linear(intc, 4,
  895. &intx_domain_ops, rockchip);
  896. if (!rockchip->irq_domain) {
  897. dev_err(dev, "failed to get a INTx IRQ domain\n");
  898. return -EINVAL;
  899. }
  900. return 0;
  901. }
  902. static int rockchip_pcie_prog_ob_atu(struct rockchip_pcie *rockchip,
  903. int region_no, int type, u8 num_pass_bits,
  904. u32 lower_addr, u32 upper_addr)
  905. {
  906. u32 ob_addr_0;
  907. u32 ob_addr_1;
  908. u32 ob_desc_0;
  909. u32 aw_offset;
  910. if (region_no >= MAX_AXI_WRAPPER_REGION_NUM)
  911. return -EINVAL;
  912. if (num_pass_bits + 1 < 8)
  913. return -EINVAL;
  914. if (num_pass_bits > 63)
  915. return -EINVAL;
  916. if (region_no == 0) {
  917. if (AXI_REGION_0_SIZE < (2ULL << num_pass_bits))
  918. return -EINVAL;
  919. }
  920. if (region_no != 0) {
  921. if (AXI_REGION_SIZE < (2ULL << num_pass_bits))
  922. return -EINVAL;
  923. }
  924. aw_offset = (region_no << OB_REG_SIZE_SHIFT);
  925. ob_addr_0 = num_pass_bits & PCIE_CORE_OB_REGION_ADDR0_NUM_BITS;
  926. ob_addr_0 |= lower_addr & PCIE_CORE_OB_REGION_ADDR0_LO_ADDR;
  927. ob_addr_1 = upper_addr;
  928. ob_desc_0 = (1 << 23 | type);
  929. rockchip_pcie_write(rockchip, ob_addr_0,
  930. PCIE_CORE_OB_REGION_ADDR0 + aw_offset);
  931. rockchip_pcie_write(rockchip, ob_addr_1,
  932. PCIE_CORE_OB_REGION_ADDR1 + aw_offset);
  933. rockchip_pcie_write(rockchip, ob_desc_0,
  934. PCIE_CORE_OB_REGION_DESC0 + aw_offset);
  935. rockchip_pcie_write(rockchip, 0,
  936. PCIE_CORE_OB_REGION_DESC1 + aw_offset);
  937. return 0;
  938. }
  939. static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip,
  940. int region_no, u8 num_pass_bits,
  941. u32 lower_addr, u32 upper_addr)
  942. {
  943. u32 ib_addr_0;
  944. u32 ib_addr_1;
  945. u32 aw_offset;
  946. if (region_no > MAX_AXI_IB_ROOTPORT_REGION_NUM)
  947. return -EINVAL;
  948. if (num_pass_bits + 1 < MIN_AXI_ADDR_BITS_PASSED)
  949. return -EINVAL;
  950. if (num_pass_bits > 63)
  951. return -EINVAL;
  952. aw_offset = (region_no << IB_ROOT_PORT_REG_SIZE_SHIFT);
  953. ib_addr_0 = num_pass_bits & PCIE_CORE_IB_REGION_ADDR0_NUM_BITS;
  954. ib_addr_0 |= (lower_addr << 8) & PCIE_CORE_IB_REGION_ADDR0_LO_ADDR;
  955. ib_addr_1 = upper_addr;
  956. rockchip_pcie_write(rockchip, ib_addr_0, PCIE_RP_IB_ADDR0 + aw_offset);
  957. rockchip_pcie_write(rockchip, ib_addr_1, PCIE_RP_IB_ADDR1 + aw_offset);
  958. return 0;
  959. }
  960. static int rockchip_cfg_atu(struct rockchip_pcie *rockchip)
  961. {
  962. struct device *dev = rockchip->dev;
  963. int offset;
  964. int err;
  965. int reg_no;
  966. for (reg_no = 0; reg_no < (rockchip->mem_size >> 20); reg_no++) {
  967. err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1,
  968. AXI_WRAPPER_MEM_WRITE,
  969. 20 - 1,
  970. rockchip->mem_bus_addr +
  971. (reg_no << 20),
  972. 0);
  973. if (err) {
  974. dev_err(dev, "program RC mem outbound ATU failed\n");
  975. return err;
  976. }
  977. }
  978. err = rockchip_pcie_prog_ib_atu(rockchip, 2, 32 - 1, 0x0, 0);
  979. if (err) {
  980. dev_err(dev, "program RC mem inbound ATU failed\n");
  981. return err;
  982. }
  983. offset = rockchip->mem_size >> 20;
  984. for (reg_no = 0; reg_no < (rockchip->io_size >> 20); reg_no++) {
  985. err = rockchip_pcie_prog_ob_atu(rockchip,
  986. reg_no + 1 + offset,
  987. AXI_WRAPPER_IO_WRITE,
  988. 20 - 1,
  989. rockchip->io_bus_addr +
  990. (reg_no << 20),
  991. 0);
  992. if (err) {
  993. dev_err(dev, "program RC io outbound ATU failed\n");
  994. return err;
  995. }
  996. }
  997. return 0;
  998. }
  999. static int rockchip_pcie_probe(struct platform_device *pdev)
  1000. {
  1001. struct rockchip_pcie *rockchip;
  1002. struct device *dev = &pdev->dev;
  1003. struct pci_bus *bus, *child;
  1004. struct resource_entry *win;
  1005. resource_size_t io_base;
  1006. struct resource *mem;
  1007. struct resource *io;
  1008. int err;
  1009. LIST_HEAD(res);
  1010. if (!dev->of_node)
  1011. return -ENODEV;
  1012. rockchip = devm_kzalloc(dev, sizeof(*rockchip), GFP_KERNEL);
  1013. if (!rockchip)
  1014. return -ENOMEM;
  1015. rockchip->dev = dev;
  1016. err = rockchip_pcie_parse_dt(rockchip);
  1017. if (err)
  1018. return err;
  1019. err = clk_prepare_enable(rockchip->aclk_pcie);
  1020. if (err) {
  1021. dev_err(dev, "unable to enable aclk_pcie clock\n");
  1022. goto err_aclk_pcie;
  1023. }
  1024. err = clk_prepare_enable(rockchip->aclk_perf_pcie);
  1025. if (err) {
  1026. dev_err(dev, "unable to enable aclk_perf_pcie clock\n");
  1027. goto err_aclk_perf_pcie;
  1028. }
  1029. err = clk_prepare_enable(rockchip->hclk_pcie);
  1030. if (err) {
  1031. dev_err(dev, "unable to enable hclk_pcie clock\n");
  1032. goto err_hclk_pcie;
  1033. }
  1034. err = clk_prepare_enable(rockchip->clk_pcie_pm);
  1035. if (err) {
  1036. dev_err(dev, "unable to enable hclk_pcie clock\n");
  1037. goto err_pcie_pm;
  1038. }
  1039. err = rockchip_pcie_set_vpcie(rockchip);
  1040. if (err) {
  1041. dev_err(dev, "failed to set vpcie regulator\n");
  1042. goto err_set_vpcie;
  1043. }
  1044. err = rockchip_pcie_init_port(rockchip);
  1045. if (err)
  1046. goto err_vpcie;
  1047. rockchip_pcie_enable_interrupts(rockchip);
  1048. err = rockchip_pcie_init_irq_domain(rockchip);
  1049. if (err < 0)
  1050. goto err_vpcie;
  1051. err = of_pci_get_host_bridge_resources(dev->of_node, 0, 0xff,
  1052. &res, &io_base);
  1053. if (err)
  1054. goto err_vpcie;
  1055. err = devm_request_pci_bus_resources(dev, &res);
  1056. if (err)
  1057. goto err_vpcie;
  1058. /* Get the I/O and memory ranges from DT */
  1059. resource_list_for_each_entry(win, &res) {
  1060. switch (resource_type(win->res)) {
  1061. case IORESOURCE_IO:
  1062. io = win->res;
  1063. io->name = "I/O";
  1064. rockchip->io_size = resource_size(io);
  1065. rockchip->io_bus_addr = io->start - win->offset;
  1066. err = pci_remap_iospace(io, io_base);
  1067. if (err) {
  1068. dev_warn(dev, "error %d: failed to map resource %pR\n",
  1069. err, io);
  1070. continue;
  1071. }
  1072. break;
  1073. case IORESOURCE_MEM:
  1074. mem = win->res;
  1075. mem->name = "MEM";
  1076. rockchip->mem_size = resource_size(mem);
  1077. rockchip->mem_bus_addr = mem->start - win->offset;
  1078. break;
  1079. case IORESOURCE_BUS:
  1080. rockchip->root_bus_nr = win->res->start;
  1081. break;
  1082. default:
  1083. continue;
  1084. }
  1085. }
  1086. err = rockchip_cfg_atu(rockchip);
  1087. if (err)
  1088. goto err_vpcie;
  1089. bus = pci_scan_root_bus(&pdev->dev, 0, &rockchip_pcie_ops, rockchip, &res);
  1090. if (!bus) {
  1091. err = -ENOMEM;
  1092. goto err_vpcie;
  1093. }
  1094. pci_bus_size_bridges(bus);
  1095. pci_bus_assign_resources(bus);
  1096. list_for_each_entry(child, &bus->children, node)
  1097. pcie_bus_configure_settings(child);
  1098. pci_bus_add_devices(bus);
  1099. return err;
  1100. err_vpcie:
  1101. if (!IS_ERR(rockchip->vpcie3v3))
  1102. regulator_disable(rockchip->vpcie3v3);
  1103. if (!IS_ERR(rockchip->vpcie1v8))
  1104. regulator_disable(rockchip->vpcie1v8);
  1105. if (!IS_ERR(rockchip->vpcie0v9))
  1106. regulator_disable(rockchip->vpcie0v9);
  1107. err_set_vpcie:
  1108. clk_disable_unprepare(rockchip->clk_pcie_pm);
  1109. err_pcie_pm:
  1110. clk_disable_unprepare(rockchip->hclk_pcie);
  1111. err_hclk_pcie:
  1112. clk_disable_unprepare(rockchip->aclk_perf_pcie);
  1113. err_aclk_perf_pcie:
  1114. clk_disable_unprepare(rockchip->aclk_pcie);
  1115. err_aclk_pcie:
  1116. return err;
  1117. }
  1118. static const struct of_device_id rockchip_pcie_of_match[] = {
  1119. { .compatible = "rockchip,rk3399-pcie", },
  1120. {}
  1121. };
  1122. static struct platform_driver rockchip_pcie_driver = {
  1123. .driver = {
  1124. .name = "rockchip-pcie",
  1125. .of_match_table = rockchip_pcie_of_match,
  1126. },
  1127. .probe = rockchip_pcie_probe,
  1128. };
  1129. builtin_platform_driver(rockchip_pcie_driver);