pcie-rockchip.c 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712
  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/bitrev.h>
  18. #include <linux/clk.h>
  19. #include <linux/delay.h>
  20. #include <linux/gpio/consumer.h>
  21. #include <linux/init.h>
  22. #include <linux/interrupt.h>
  23. #include <linux/iopoll.h>
  24. #include <linux/irq.h>
  25. #include <linux/irqchip/chained_irq.h>
  26. #include <linux/irqdomain.h>
  27. #include <linux/kernel.h>
  28. #include <linux/mfd/syscon.h>
  29. #include <linux/module.h>
  30. #include <linux/of_address.h>
  31. #include <linux/of_device.h>
  32. #include <linux/of_pci.h>
  33. #include <linux/of_platform.h>
  34. #include <linux/of_irq.h>
  35. #include <linux/pci.h>
  36. #include <linux/pci_ids.h>
  37. #include <linux/phy/phy.h>
  38. #include <linux/platform_device.h>
  39. #include <linux/reset.h>
  40. #include <linux/regmap.h>
  41. /*
  42. * The upper 16 bits of PCIE_CLIENT_CONFIG are a write mask for the lower 16
  43. * bits. This allows atomic updates of the register without locking.
  44. */
  45. #define HIWORD_UPDATE(mask, val) (((mask) << 16) | (val))
  46. #define HIWORD_UPDATE_BIT(val) HIWORD_UPDATE(val, val)
  47. #define ENCODE_LANES(x) ((((x) >> 1) & 3) << 4)
  48. #define MAX_LANE_NUM 4
  49. #define PCIE_CLIENT_BASE 0x0
  50. #define PCIE_CLIENT_CONFIG (PCIE_CLIENT_BASE + 0x00)
  51. #define PCIE_CLIENT_CONF_ENABLE HIWORD_UPDATE_BIT(0x0001)
  52. #define PCIE_CLIENT_LINK_TRAIN_ENABLE HIWORD_UPDATE_BIT(0x0002)
  53. #define PCIE_CLIENT_ARI_ENABLE HIWORD_UPDATE_BIT(0x0008)
  54. #define PCIE_CLIENT_CONF_LANE_NUM(x) HIWORD_UPDATE(0x0030, ENCODE_LANES(x))
  55. #define PCIE_CLIENT_MODE_RC HIWORD_UPDATE_BIT(0x0040)
  56. #define PCIE_CLIENT_GEN_SEL_1 HIWORD_UPDATE(0x0080, 0)
  57. #define PCIE_CLIENT_GEN_SEL_2 HIWORD_UPDATE_BIT(0x0080)
  58. #define PCIE_CLIENT_DEBUG_OUT_0 (PCIE_CLIENT_BASE + 0x3c)
  59. #define PCIE_CLIENT_DEBUG_LTSSM_MASK GENMASK(5, 0)
  60. #define PCIE_CLIENT_DEBUG_LTSSM_L1 0x18
  61. #define PCIE_CLIENT_DEBUG_LTSSM_L2 0x19
  62. #define PCIE_CLIENT_BASIC_STATUS1 (PCIE_CLIENT_BASE + 0x48)
  63. #define PCIE_CLIENT_LINK_STATUS_UP 0x00300000
  64. #define PCIE_CLIENT_LINK_STATUS_MASK 0x00300000
  65. #define PCIE_CLIENT_INT_MASK (PCIE_CLIENT_BASE + 0x4c)
  66. #define PCIE_CLIENT_INT_STATUS (PCIE_CLIENT_BASE + 0x50)
  67. #define PCIE_CLIENT_INTR_MASK GENMASK(8, 5)
  68. #define PCIE_CLIENT_INTR_SHIFT 5
  69. #define PCIE_CLIENT_INT_LEGACY_DONE BIT(15)
  70. #define PCIE_CLIENT_INT_MSG BIT(14)
  71. #define PCIE_CLIENT_INT_HOT_RST BIT(13)
  72. #define PCIE_CLIENT_INT_DPA BIT(12)
  73. #define PCIE_CLIENT_INT_FATAL_ERR BIT(11)
  74. #define PCIE_CLIENT_INT_NFATAL_ERR BIT(10)
  75. #define PCIE_CLIENT_INT_CORR_ERR BIT(9)
  76. #define PCIE_CLIENT_INT_INTD BIT(8)
  77. #define PCIE_CLIENT_INT_INTC BIT(7)
  78. #define PCIE_CLIENT_INT_INTB BIT(6)
  79. #define PCIE_CLIENT_INT_INTA BIT(5)
  80. #define PCIE_CLIENT_INT_LOCAL BIT(4)
  81. #define PCIE_CLIENT_INT_UDMA BIT(3)
  82. #define PCIE_CLIENT_INT_PHY BIT(2)
  83. #define PCIE_CLIENT_INT_HOT_PLUG BIT(1)
  84. #define PCIE_CLIENT_INT_PWR_STCG BIT(0)
  85. #define PCIE_CLIENT_INT_LEGACY \
  86. (PCIE_CLIENT_INT_INTA | PCIE_CLIENT_INT_INTB | \
  87. PCIE_CLIENT_INT_INTC | PCIE_CLIENT_INT_INTD)
  88. #define PCIE_CLIENT_INT_CLI \
  89. (PCIE_CLIENT_INT_CORR_ERR | PCIE_CLIENT_INT_NFATAL_ERR | \
  90. PCIE_CLIENT_INT_FATAL_ERR | PCIE_CLIENT_INT_DPA | \
  91. PCIE_CLIENT_INT_HOT_RST | PCIE_CLIENT_INT_MSG | \
  92. PCIE_CLIENT_INT_LEGACY_DONE | PCIE_CLIENT_INT_LEGACY | \
  93. PCIE_CLIENT_INT_PHY)
  94. #define PCIE_CORE_CTRL_MGMT_BASE 0x900000
  95. #define PCIE_CORE_CTRL (PCIE_CORE_CTRL_MGMT_BASE + 0x000)
  96. #define PCIE_CORE_PL_CONF_SPEED_5G 0x00000008
  97. #define PCIE_CORE_PL_CONF_SPEED_MASK 0x00000018
  98. #define PCIE_CORE_PL_CONF_LANE_MASK 0x00000006
  99. #define PCIE_CORE_PL_CONF_LANE_SHIFT 1
  100. #define PCIE_CORE_CTRL_PLC1 (PCIE_CORE_CTRL_MGMT_BASE + 0x004)
  101. #define PCIE_CORE_CTRL_PLC1_FTS_MASK GENMASK(23, 8)
  102. #define PCIE_CORE_CTRL_PLC1_FTS_SHIFT 8
  103. #define PCIE_CORE_CTRL_PLC1_FTS_CNT 0xffff
  104. #define PCIE_CORE_TXCREDIT_CFG1 (PCIE_CORE_CTRL_MGMT_BASE + 0x020)
  105. #define PCIE_CORE_TXCREDIT_CFG1_MUI_MASK 0xFFFF0000
  106. #define PCIE_CORE_TXCREDIT_CFG1_MUI_SHIFT 16
  107. #define PCIE_CORE_TXCREDIT_CFG1_MUI_ENCODE(x) \
  108. (((x) >> 3) << PCIE_CORE_TXCREDIT_CFG1_MUI_SHIFT)
  109. #define PCIE_CORE_LANE_MAP (PCIE_CORE_CTRL_MGMT_BASE + 0x200)
  110. #define PCIE_CORE_LANE_MAP_MASK 0x0000000f
  111. #define PCIE_CORE_LANE_MAP_REVERSE BIT(16)
  112. #define PCIE_CORE_INT_STATUS (PCIE_CORE_CTRL_MGMT_BASE + 0x20c)
  113. #define PCIE_CORE_INT_PRFPE BIT(0)
  114. #define PCIE_CORE_INT_CRFPE BIT(1)
  115. #define PCIE_CORE_INT_RRPE BIT(2)
  116. #define PCIE_CORE_INT_PRFO BIT(3)
  117. #define PCIE_CORE_INT_CRFO BIT(4)
  118. #define PCIE_CORE_INT_RT BIT(5)
  119. #define PCIE_CORE_INT_RTR BIT(6)
  120. #define PCIE_CORE_INT_PE BIT(7)
  121. #define PCIE_CORE_INT_MTR BIT(8)
  122. #define PCIE_CORE_INT_UCR BIT(9)
  123. #define PCIE_CORE_INT_FCE BIT(10)
  124. #define PCIE_CORE_INT_CT BIT(11)
  125. #define PCIE_CORE_INT_UTC BIT(18)
  126. #define PCIE_CORE_INT_MMVC BIT(19)
  127. #define PCIE_CORE_CONFIG_VENDOR (PCIE_CORE_CTRL_MGMT_BASE + 0x44)
  128. #define PCIE_CORE_INT_MASK (PCIE_CORE_CTRL_MGMT_BASE + 0x210)
  129. #define PCIE_RC_BAR_CONF (PCIE_CORE_CTRL_MGMT_BASE + 0x300)
  130. #define PCIE_CORE_INT \
  131. (PCIE_CORE_INT_PRFPE | PCIE_CORE_INT_CRFPE | \
  132. PCIE_CORE_INT_RRPE | PCIE_CORE_INT_CRFO | \
  133. PCIE_CORE_INT_RT | PCIE_CORE_INT_RTR | \
  134. PCIE_CORE_INT_PE | PCIE_CORE_INT_MTR | \
  135. PCIE_CORE_INT_UCR | PCIE_CORE_INT_FCE | \
  136. PCIE_CORE_INT_CT | PCIE_CORE_INT_UTC | \
  137. PCIE_CORE_INT_MMVC)
  138. #define PCIE_RC_CONFIG_NORMAL_BASE 0x800000
  139. #define PCIE_RC_CONFIG_BASE 0xa00000
  140. #define PCIE_RC_CONFIG_RID_CCR (PCIE_RC_CONFIG_BASE + 0x08)
  141. #define PCIE_RC_CONFIG_SCC_SHIFT 16
  142. #define PCIE_RC_CONFIG_DCR (PCIE_RC_CONFIG_BASE + 0xc4)
  143. #define PCIE_RC_CONFIG_DCR_CSPL_SHIFT 18
  144. #define PCIE_RC_CONFIG_DCR_CSPL_LIMIT 0xff
  145. #define PCIE_RC_CONFIG_DCR_CPLS_SHIFT 26
  146. #define PCIE_RC_CONFIG_DCSR (PCIE_RC_CONFIG_BASE + 0xc8)
  147. #define PCIE_RC_CONFIG_DCSR_MPS_MASK GENMASK(7, 5)
  148. #define PCIE_RC_CONFIG_DCSR_MPS_256 (0x1 << 5)
  149. #define PCIE_RC_CONFIG_LINK_CAP (PCIE_RC_CONFIG_BASE + 0xcc)
  150. #define PCIE_RC_CONFIG_LINK_CAP_L0S BIT(10)
  151. #define PCIE_RC_CONFIG_LCS (PCIE_RC_CONFIG_BASE + 0xd0)
  152. #define PCIE_RC_CONFIG_L1_SUBSTATE_CTRL2 (PCIE_RC_CONFIG_BASE + 0x90c)
  153. #define PCIE_RC_CONFIG_THP_CAP (PCIE_RC_CONFIG_BASE + 0x274)
  154. #define PCIE_RC_CONFIG_THP_CAP_NEXT_MASK GENMASK(31, 20)
  155. #define PCIE_CORE_AXI_CONF_BASE 0xc00000
  156. #define PCIE_CORE_OB_REGION_ADDR0 (PCIE_CORE_AXI_CONF_BASE + 0x0)
  157. #define PCIE_CORE_OB_REGION_ADDR0_NUM_BITS 0x3f
  158. #define PCIE_CORE_OB_REGION_ADDR0_LO_ADDR 0xffffff00
  159. #define PCIE_CORE_OB_REGION_ADDR1 (PCIE_CORE_AXI_CONF_BASE + 0x4)
  160. #define PCIE_CORE_OB_REGION_DESC0 (PCIE_CORE_AXI_CONF_BASE + 0x8)
  161. #define PCIE_CORE_OB_REGION_DESC1 (PCIE_CORE_AXI_CONF_BASE + 0xc)
  162. #define PCIE_CORE_AXI_INBOUND_BASE 0xc00800
  163. #define PCIE_RP_IB_ADDR0 (PCIE_CORE_AXI_INBOUND_BASE + 0x0)
  164. #define PCIE_CORE_IB_REGION_ADDR0_NUM_BITS 0x3f
  165. #define PCIE_CORE_IB_REGION_ADDR0_LO_ADDR 0xffffff00
  166. #define PCIE_RP_IB_ADDR1 (PCIE_CORE_AXI_INBOUND_BASE + 0x4)
  167. /* Size of one AXI Region (not Region 0) */
  168. #define AXI_REGION_SIZE BIT(20)
  169. /* Size of Region 0, equal to sum of sizes of other regions */
  170. #define AXI_REGION_0_SIZE (32 * (0x1 << 20))
  171. #define OB_REG_SIZE_SHIFT 5
  172. #define IB_ROOT_PORT_REG_SIZE_SHIFT 3
  173. #define AXI_WRAPPER_IO_WRITE 0x6
  174. #define AXI_WRAPPER_MEM_WRITE 0x2
  175. #define AXI_WRAPPER_TYPE0_CFG 0xa
  176. #define AXI_WRAPPER_TYPE1_CFG 0xb
  177. #define AXI_WRAPPER_NOR_MSG 0xc
  178. #define MAX_AXI_IB_ROOTPORT_REGION_NUM 3
  179. #define MIN_AXI_ADDR_BITS_PASSED 8
  180. #define PCIE_RC_SEND_PME_OFF 0x11960
  181. #define ROCKCHIP_VENDOR_ID 0x1d87
  182. #define PCIE_ECAM_BUS(x) (((x) & 0xff) << 20)
  183. #define PCIE_ECAM_DEV(x) (((x) & 0x1f) << 15)
  184. #define PCIE_ECAM_FUNC(x) (((x) & 0x7) << 12)
  185. #define PCIE_ECAM_REG(x) (((x) & 0xfff) << 0)
  186. #define PCIE_ECAM_ADDR(bus, dev, func, reg) \
  187. (PCIE_ECAM_BUS(bus) | PCIE_ECAM_DEV(dev) | \
  188. PCIE_ECAM_FUNC(func) | PCIE_ECAM_REG(reg))
  189. #define PCIE_LINK_IS_L2(x) \
  190. (((x) & PCIE_CLIENT_DEBUG_LTSSM_MASK) == PCIE_CLIENT_DEBUG_LTSSM_L2)
  191. #define PCIE_LINK_UP(x) \
  192. (((x) & PCIE_CLIENT_LINK_STATUS_MASK) == PCIE_CLIENT_LINK_STATUS_UP)
  193. #define PCIE_LINK_IS_GEN2(x) \
  194. (((x) & PCIE_CORE_PL_CONF_SPEED_MASK) == PCIE_CORE_PL_CONF_SPEED_5G)
  195. #define RC_REGION_0_ADDR_TRANS_H 0x00000000
  196. #define RC_REGION_0_ADDR_TRANS_L 0x00000000
  197. #define RC_REGION_0_PASS_BITS (25 - 1)
  198. #define RC_REGION_0_TYPE_MASK GENMASK(3, 0)
  199. #define MAX_AXI_WRAPPER_REGION_NUM 33
  200. struct rockchip_pcie {
  201. void __iomem *reg_base; /* DT axi-base */
  202. void __iomem *apb_base; /* DT apb-base */
  203. bool legacy_phy;
  204. struct phy *phys[MAX_LANE_NUM];
  205. struct reset_control *core_rst;
  206. struct reset_control *mgmt_rst;
  207. struct reset_control *mgmt_sticky_rst;
  208. struct reset_control *pipe_rst;
  209. struct reset_control *pm_rst;
  210. struct reset_control *aclk_rst;
  211. struct reset_control *pclk_rst;
  212. struct clk *aclk_pcie;
  213. struct clk *aclk_perf_pcie;
  214. struct clk *hclk_pcie;
  215. struct clk *clk_pcie_pm;
  216. struct regulator *vpcie12v; /* 12V power supply */
  217. struct regulator *vpcie3v3; /* 3.3V power supply */
  218. struct regulator *vpcie1v8; /* 1.8V power supply */
  219. struct regulator *vpcie0v9; /* 0.9V power supply */
  220. struct gpio_desc *ep_gpio;
  221. u32 lanes;
  222. u8 lanes_map;
  223. u8 root_bus_nr;
  224. int link_gen;
  225. struct device *dev;
  226. struct irq_domain *irq_domain;
  227. int offset;
  228. struct pci_bus *root_bus;
  229. struct resource *io;
  230. phys_addr_t io_bus_addr;
  231. u32 io_size;
  232. void __iomem *msg_region;
  233. u32 mem_size;
  234. phys_addr_t msg_bus_addr;
  235. phys_addr_t mem_bus_addr;
  236. };
  237. static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg)
  238. {
  239. return readl(rockchip->apb_base + reg);
  240. }
  241. static void rockchip_pcie_write(struct rockchip_pcie *rockchip, u32 val,
  242. u32 reg)
  243. {
  244. writel(val, rockchip->apb_base + reg);
  245. }
  246. static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip)
  247. {
  248. u32 status;
  249. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  250. status |= (PCI_EXP_LNKCTL_LBMIE | PCI_EXP_LNKCTL_LABIE);
  251. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  252. }
  253. static void rockchip_pcie_clr_bw_int(struct rockchip_pcie *rockchip)
  254. {
  255. u32 status;
  256. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  257. status |= (PCI_EXP_LNKSTA_LBMS | PCI_EXP_LNKSTA_LABS) << 16;
  258. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  259. }
  260. static void rockchip_pcie_update_txcredit_mui(struct rockchip_pcie *rockchip)
  261. {
  262. u32 val;
  263. /* Update Tx credit maximum update interval */
  264. val = rockchip_pcie_read(rockchip, PCIE_CORE_TXCREDIT_CFG1);
  265. val &= ~PCIE_CORE_TXCREDIT_CFG1_MUI_MASK;
  266. val |= PCIE_CORE_TXCREDIT_CFG1_MUI_ENCODE(24000); /* ns */
  267. rockchip_pcie_write(rockchip, val, PCIE_CORE_TXCREDIT_CFG1);
  268. }
  269. static int rockchip_pcie_valid_device(struct rockchip_pcie *rockchip,
  270. struct pci_bus *bus, int dev)
  271. {
  272. /* access only one slot on each root port */
  273. if (bus->number == rockchip->root_bus_nr && dev > 0)
  274. return 0;
  275. /*
  276. * do not read more than one device on the bus directly attached
  277. * to RC's downstream side.
  278. */
  279. if (bus->primary == rockchip->root_bus_nr && dev > 0)
  280. return 0;
  281. return 1;
  282. }
  283. static u8 rockchip_pcie_lane_map(struct rockchip_pcie *rockchip)
  284. {
  285. u32 val;
  286. u8 map;
  287. if (rockchip->legacy_phy)
  288. return GENMASK(MAX_LANE_NUM - 1, 0);
  289. val = rockchip_pcie_read(rockchip, PCIE_CORE_LANE_MAP);
  290. map = val & PCIE_CORE_LANE_MAP_MASK;
  291. /* The link may be using a reverse-indexed mapping. */
  292. if (val & PCIE_CORE_LANE_MAP_REVERSE)
  293. map = bitrev8(map) >> 4;
  294. return map;
  295. }
  296. static int rockchip_pcie_rd_own_conf(struct rockchip_pcie *rockchip,
  297. int where, int size, u32 *val)
  298. {
  299. void __iomem *addr;
  300. addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + where;
  301. if (!IS_ALIGNED((uintptr_t)addr, size)) {
  302. *val = 0;
  303. return PCIBIOS_BAD_REGISTER_NUMBER;
  304. }
  305. if (size == 4) {
  306. *val = readl(addr);
  307. } else if (size == 2) {
  308. *val = readw(addr);
  309. } else if (size == 1) {
  310. *val = readb(addr);
  311. } else {
  312. *val = 0;
  313. return PCIBIOS_BAD_REGISTER_NUMBER;
  314. }
  315. return PCIBIOS_SUCCESSFUL;
  316. }
  317. static int rockchip_pcie_wr_own_conf(struct rockchip_pcie *rockchip,
  318. int where, int size, u32 val)
  319. {
  320. u32 mask, tmp, offset;
  321. void __iomem *addr;
  322. offset = where & ~0x3;
  323. addr = rockchip->apb_base + PCIE_RC_CONFIG_NORMAL_BASE + offset;
  324. if (size == 4) {
  325. writel(val, addr);
  326. return PCIBIOS_SUCCESSFUL;
  327. }
  328. mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
  329. /*
  330. * N.B. This read/modify/write isn't safe in general because it can
  331. * corrupt RW1C bits in adjacent registers. But the hardware
  332. * doesn't support smaller writes.
  333. */
  334. tmp = readl(addr) & mask;
  335. tmp |= val << ((where & 0x3) * 8);
  336. writel(tmp, addr);
  337. return PCIBIOS_SUCCESSFUL;
  338. }
  339. static void rockchip_pcie_cfg_configuration_accesses(
  340. struct rockchip_pcie *rockchip, u32 type)
  341. {
  342. u32 ob_desc_0;
  343. /* Configuration Accesses for region 0 */
  344. rockchip_pcie_write(rockchip, 0x0, PCIE_RC_BAR_CONF);
  345. rockchip_pcie_write(rockchip,
  346. (RC_REGION_0_ADDR_TRANS_L + RC_REGION_0_PASS_BITS),
  347. PCIE_CORE_OB_REGION_ADDR0);
  348. rockchip_pcie_write(rockchip, RC_REGION_0_ADDR_TRANS_H,
  349. PCIE_CORE_OB_REGION_ADDR1);
  350. ob_desc_0 = rockchip_pcie_read(rockchip, PCIE_CORE_OB_REGION_DESC0);
  351. ob_desc_0 &= ~(RC_REGION_0_TYPE_MASK);
  352. ob_desc_0 |= (type | (0x1 << 23));
  353. rockchip_pcie_write(rockchip, ob_desc_0, PCIE_CORE_OB_REGION_DESC0);
  354. rockchip_pcie_write(rockchip, 0x0, PCIE_CORE_OB_REGION_DESC1);
  355. }
  356. static int rockchip_pcie_rd_other_conf(struct rockchip_pcie *rockchip,
  357. struct pci_bus *bus, u32 devfn,
  358. int where, int size, u32 *val)
  359. {
  360. u32 busdev;
  361. busdev = PCIE_ECAM_ADDR(bus->number, PCI_SLOT(devfn),
  362. PCI_FUNC(devfn), where);
  363. if (!IS_ALIGNED(busdev, size)) {
  364. *val = 0;
  365. return PCIBIOS_BAD_REGISTER_NUMBER;
  366. }
  367. if (bus->parent->number == rockchip->root_bus_nr)
  368. rockchip_pcie_cfg_configuration_accesses(rockchip,
  369. AXI_WRAPPER_TYPE0_CFG);
  370. else
  371. rockchip_pcie_cfg_configuration_accesses(rockchip,
  372. AXI_WRAPPER_TYPE1_CFG);
  373. if (size == 4) {
  374. *val = readl(rockchip->reg_base + busdev);
  375. } else if (size == 2) {
  376. *val = readw(rockchip->reg_base + busdev);
  377. } else if (size == 1) {
  378. *val = readb(rockchip->reg_base + busdev);
  379. } else {
  380. *val = 0;
  381. return PCIBIOS_BAD_REGISTER_NUMBER;
  382. }
  383. return PCIBIOS_SUCCESSFUL;
  384. }
  385. static int rockchip_pcie_wr_other_conf(struct rockchip_pcie *rockchip,
  386. struct pci_bus *bus, u32 devfn,
  387. int where, int size, u32 val)
  388. {
  389. u32 busdev;
  390. busdev = PCIE_ECAM_ADDR(bus->number, PCI_SLOT(devfn),
  391. PCI_FUNC(devfn), where);
  392. if (!IS_ALIGNED(busdev, size))
  393. return PCIBIOS_BAD_REGISTER_NUMBER;
  394. if (bus->parent->number == rockchip->root_bus_nr)
  395. rockchip_pcie_cfg_configuration_accesses(rockchip,
  396. AXI_WRAPPER_TYPE0_CFG);
  397. else
  398. rockchip_pcie_cfg_configuration_accesses(rockchip,
  399. AXI_WRAPPER_TYPE1_CFG);
  400. if (size == 4)
  401. writel(val, rockchip->reg_base + busdev);
  402. else if (size == 2)
  403. writew(val, rockchip->reg_base + busdev);
  404. else if (size == 1)
  405. writeb(val, rockchip->reg_base + busdev);
  406. else
  407. return PCIBIOS_BAD_REGISTER_NUMBER;
  408. return PCIBIOS_SUCCESSFUL;
  409. }
  410. static int rockchip_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
  411. int size, u32 *val)
  412. {
  413. struct rockchip_pcie *rockchip = bus->sysdata;
  414. if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn))) {
  415. *val = 0xffffffff;
  416. return PCIBIOS_DEVICE_NOT_FOUND;
  417. }
  418. if (bus->number == rockchip->root_bus_nr)
  419. return rockchip_pcie_rd_own_conf(rockchip, where, size, val);
  420. return rockchip_pcie_rd_other_conf(rockchip, bus, devfn, where, size, val);
  421. }
  422. static int rockchip_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
  423. int where, int size, u32 val)
  424. {
  425. struct rockchip_pcie *rockchip = bus->sysdata;
  426. if (!rockchip_pcie_valid_device(rockchip, bus, PCI_SLOT(devfn)))
  427. return PCIBIOS_DEVICE_NOT_FOUND;
  428. if (bus->number == rockchip->root_bus_nr)
  429. return rockchip_pcie_wr_own_conf(rockchip, where, size, val);
  430. return rockchip_pcie_wr_other_conf(rockchip, bus, devfn, where, size, val);
  431. }
  432. static struct pci_ops rockchip_pcie_ops = {
  433. .read = rockchip_pcie_rd_conf,
  434. .write = rockchip_pcie_wr_conf,
  435. };
  436. static void rockchip_pcie_set_power_limit(struct rockchip_pcie *rockchip)
  437. {
  438. int curr;
  439. u32 status, scale, power;
  440. if (IS_ERR(rockchip->vpcie3v3))
  441. return;
  442. /*
  443. * Set RC's captured slot power limit and scale if
  444. * vpcie3v3 available. The default values are both zero
  445. * which means the software should set these two according
  446. * to the actual power supply.
  447. */
  448. curr = regulator_get_current_limit(rockchip->vpcie3v3);
  449. if (curr <= 0)
  450. return;
  451. scale = 3; /* 0.001x */
  452. curr = curr / 1000; /* convert to mA */
  453. power = (curr * 3300) / 1000; /* milliwatt */
  454. while (power > PCIE_RC_CONFIG_DCR_CSPL_LIMIT) {
  455. if (!scale) {
  456. dev_warn(rockchip->dev, "invalid power supply\n");
  457. return;
  458. }
  459. scale--;
  460. power = power / 10;
  461. }
  462. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCR);
  463. status |= (power << PCIE_RC_CONFIG_DCR_CSPL_SHIFT) |
  464. (scale << PCIE_RC_CONFIG_DCR_CPLS_SHIFT);
  465. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCR);
  466. }
  467. /**
  468. * rockchip_pcie_init_port - Initialize hardware
  469. * @rockchip: PCIe port information
  470. */
  471. static int rockchip_pcie_init_port(struct rockchip_pcie *rockchip)
  472. {
  473. struct device *dev = rockchip->dev;
  474. int err, i;
  475. u32 status;
  476. gpiod_set_value_cansleep(rockchip->ep_gpio, 0);
  477. err = reset_control_assert(rockchip->aclk_rst);
  478. if (err) {
  479. dev_err(dev, "assert aclk_rst err %d\n", err);
  480. return err;
  481. }
  482. err = reset_control_assert(rockchip->pclk_rst);
  483. if (err) {
  484. dev_err(dev, "assert pclk_rst err %d\n", err);
  485. return err;
  486. }
  487. err = reset_control_assert(rockchip->pm_rst);
  488. if (err) {
  489. dev_err(dev, "assert pm_rst err %d\n", err);
  490. return err;
  491. }
  492. for (i = 0; i < MAX_LANE_NUM; i++) {
  493. err = phy_init(rockchip->phys[i]);
  494. if (err) {
  495. dev_err(dev, "init phy%d err %d\n", i, err);
  496. goto err_exit_phy;
  497. }
  498. }
  499. err = reset_control_assert(rockchip->core_rst);
  500. if (err) {
  501. dev_err(dev, "assert core_rst err %d\n", err);
  502. goto err_exit_phy;
  503. }
  504. err = reset_control_assert(rockchip->mgmt_rst);
  505. if (err) {
  506. dev_err(dev, "assert mgmt_rst err %d\n", err);
  507. goto err_exit_phy;
  508. }
  509. err = reset_control_assert(rockchip->mgmt_sticky_rst);
  510. if (err) {
  511. dev_err(dev, "assert mgmt_sticky_rst err %d\n", err);
  512. goto err_exit_phy;
  513. }
  514. err = reset_control_assert(rockchip->pipe_rst);
  515. if (err) {
  516. dev_err(dev, "assert pipe_rst err %d\n", err);
  517. goto err_exit_phy;
  518. }
  519. udelay(10);
  520. err = reset_control_deassert(rockchip->pm_rst);
  521. if (err) {
  522. dev_err(dev, "deassert pm_rst err %d\n", err);
  523. goto err_exit_phy;
  524. }
  525. err = reset_control_deassert(rockchip->aclk_rst);
  526. if (err) {
  527. dev_err(dev, "deassert aclk_rst err %d\n", err);
  528. goto err_exit_phy;
  529. }
  530. err = reset_control_deassert(rockchip->pclk_rst);
  531. if (err) {
  532. dev_err(dev, "deassert pclk_rst err %d\n", err);
  533. goto err_exit_phy;
  534. }
  535. if (rockchip->link_gen == 2)
  536. rockchip_pcie_write(rockchip, PCIE_CLIENT_GEN_SEL_2,
  537. PCIE_CLIENT_CONFIG);
  538. else
  539. rockchip_pcie_write(rockchip, PCIE_CLIENT_GEN_SEL_1,
  540. PCIE_CLIENT_CONFIG);
  541. rockchip_pcie_write(rockchip,
  542. PCIE_CLIENT_CONF_ENABLE |
  543. PCIE_CLIENT_LINK_TRAIN_ENABLE |
  544. PCIE_CLIENT_ARI_ENABLE |
  545. PCIE_CLIENT_CONF_LANE_NUM(rockchip->lanes) |
  546. PCIE_CLIENT_MODE_RC,
  547. PCIE_CLIENT_CONFIG);
  548. for (i = 0; i < MAX_LANE_NUM; i++) {
  549. err = phy_power_on(rockchip->phys[i]);
  550. if (err) {
  551. dev_err(dev, "power on phy%d err %d\n", i, err);
  552. goto err_power_off_phy;
  553. }
  554. }
  555. /*
  556. * Please don't reorder the deassert sequence of the following
  557. * four reset pins.
  558. */
  559. err = reset_control_deassert(rockchip->mgmt_sticky_rst);
  560. if (err) {
  561. dev_err(dev, "deassert mgmt_sticky_rst err %d\n", err);
  562. goto err_power_off_phy;
  563. }
  564. err = reset_control_deassert(rockchip->core_rst);
  565. if (err) {
  566. dev_err(dev, "deassert core_rst err %d\n", err);
  567. goto err_power_off_phy;
  568. }
  569. err = reset_control_deassert(rockchip->mgmt_rst);
  570. if (err) {
  571. dev_err(dev, "deassert mgmt_rst err %d\n", err);
  572. goto err_power_off_phy;
  573. }
  574. err = reset_control_deassert(rockchip->pipe_rst);
  575. if (err) {
  576. dev_err(dev, "deassert pipe_rst err %d\n", err);
  577. goto err_power_off_phy;
  578. }
  579. /* Fix the transmitted FTS count desired to exit from L0s. */
  580. status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL_PLC1);
  581. status = (status & ~PCIE_CORE_CTRL_PLC1_FTS_MASK) |
  582. (PCIE_CORE_CTRL_PLC1_FTS_CNT << PCIE_CORE_CTRL_PLC1_FTS_SHIFT);
  583. rockchip_pcie_write(rockchip, status, PCIE_CORE_CTRL_PLC1);
  584. rockchip_pcie_set_power_limit(rockchip);
  585. /* Set RC's clock architecture as common clock */
  586. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  587. status |= PCI_EXP_LNKSTA_SLC << 16;
  588. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  589. /* Set RC's RCB to 128 */
  590. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  591. status |= PCI_EXP_LNKCTL_RCB;
  592. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  593. /* Enable Gen1 training */
  594. rockchip_pcie_write(rockchip, PCIE_CLIENT_LINK_TRAIN_ENABLE,
  595. PCIE_CLIENT_CONFIG);
  596. gpiod_set_value_cansleep(rockchip->ep_gpio, 1);
  597. /* 500ms timeout value should be enough for Gen1/2 training */
  598. err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_BASIC_STATUS1,
  599. status, PCIE_LINK_UP(status), 20,
  600. 500 * USEC_PER_MSEC);
  601. if (err) {
  602. dev_err(dev, "PCIe link training gen1 timeout!\n");
  603. goto err_power_off_phy;
  604. }
  605. if (rockchip->link_gen == 2) {
  606. /*
  607. * Enable retrain for gen2. This should be configured only after
  608. * gen1 finished.
  609. */
  610. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LCS);
  611. status |= PCI_EXP_LNKCTL_RL;
  612. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LCS);
  613. err = readl_poll_timeout(rockchip->apb_base + PCIE_CORE_CTRL,
  614. status, PCIE_LINK_IS_GEN2(status), 20,
  615. 500 * USEC_PER_MSEC);
  616. if (err)
  617. dev_dbg(dev, "PCIe link training gen2 timeout, fall back to gen1!\n");
  618. }
  619. /* Check the final link width from negotiated lane counter from MGMT */
  620. status = rockchip_pcie_read(rockchip, PCIE_CORE_CTRL);
  621. status = 0x1 << ((status & PCIE_CORE_PL_CONF_LANE_MASK) >>
  622. PCIE_CORE_PL_CONF_LANE_SHIFT);
  623. dev_dbg(dev, "current link width is x%d\n", status);
  624. /* Power off unused lane(s) */
  625. rockchip->lanes_map = rockchip_pcie_lane_map(rockchip);
  626. for (i = 0; i < MAX_LANE_NUM; i++) {
  627. if (!(rockchip->lanes_map & BIT(i))) {
  628. dev_dbg(dev, "idling lane %d\n", i);
  629. phy_power_off(rockchip->phys[i]);
  630. }
  631. }
  632. rockchip_pcie_write(rockchip, ROCKCHIP_VENDOR_ID,
  633. PCIE_CORE_CONFIG_VENDOR);
  634. rockchip_pcie_write(rockchip,
  635. PCI_CLASS_BRIDGE_PCI << PCIE_RC_CONFIG_SCC_SHIFT,
  636. PCIE_RC_CONFIG_RID_CCR);
  637. /* Clear THP cap's next cap pointer to remove L1 substate cap */
  638. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_THP_CAP);
  639. status &= ~PCIE_RC_CONFIG_THP_CAP_NEXT_MASK;
  640. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_THP_CAP);
  641. /* Clear L0s from RC's link cap */
  642. if (of_property_read_bool(dev->of_node, "aspm-no-l0s")) {
  643. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_LINK_CAP);
  644. status &= ~PCIE_RC_CONFIG_LINK_CAP_L0S;
  645. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_LINK_CAP);
  646. }
  647. status = rockchip_pcie_read(rockchip, PCIE_RC_CONFIG_DCSR);
  648. status &= ~PCIE_RC_CONFIG_DCSR_MPS_MASK;
  649. status |= PCIE_RC_CONFIG_DCSR_MPS_256;
  650. rockchip_pcie_write(rockchip, status, PCIE_RC_CONFIG_DCSR);
  651. return 0;
  652. err_power_off_phy:
  653. while (i--)
  654. phy_power_off(rockchip->phys[i]);
  655. i = MAX_LANE_NUM;
  656. err_exit_phy:
  657. while (i--)
  658. phy_exit(rockchip->phys[i]);
  659. return err;
  660. }
  661. static void rockchip_pcie_deinit_phys(struct rockchip_pcie *rockchip)
  662. {
  663. int i;
  664. for (i = 0; i < MAX_LANE_NUM; i++) {
  665. /* inactive lanes are already powered off */
  666. if (rockchip->lanes_map & BIT(i))
  667. phy_power_off(rockchip->phys[i]);
  668. phy_exit(rockchip->phys[i]);
  669. }
  670. }
  671. static irqreturn_t rockchip_pcie_subsys_irq_handler(int irq, void *arg)
  672. {
  673. struct rockchip_pcie *rockchip = arg;
  674. struct device *dev = rockchip->dev;
  675. u32 reg;
  676. u32 sub_reg;
  677. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  678. if (reg & PCIE_CLIENT_INT_LOCAL) {
  679. dev_dbg(dev, "local interrupt received\n");
  680. sub_reg = rockchip_pcie_read(rockchip, PCIE_CORE_INT_STATUS);
  681. if (sub_reg & PCIE_CORE_INT_PRFPE)
  682. dev_dbg(dev, "parity error detected while reading from the PNP receive FIFO RAM\n");
  683. if (sub_reg & PCIE_CORE_INT_CRFPE)
  684. dev_dbg(dev, "parity error detected while reading from the Completion Receive FIFO RAM\n");
  685. if (sub_reg & PCIE_CORE_INT_RRPE)
  686. dev_dbg(dev, "parity error detected while reading from replay buffer RAM\n");
  687. if (sub_reg & PCIE_CORE_INT_PRFO)
  688. dev_dbg(dev, "overflow occurred in the PNP receive FIFO\n");
  689. if (sub_reg & PCIE_CORE_INT_CRFO)
  690. dev_dbg(dev, "overflow occurred in the completion receive FIFO\n");
  691. if (sub_reg & PCIE_CORE_INT_RT)
  692. dev_dbg(dev, "replay timer timed out\n");
  693. if (sub_reg & PCIE_CORE_INT_RTR)
  694. dev_dbg(dev, "replay timer rolled over after 4 transmissions of the same TLP\n");
  695. if (sub_reg & PCIE_CORE_INT_PE)
  696. dev_dbg(dev, "phy error detected on receive side\n");
  697. if (sub_reg & PCIE_CORE_INT_MTR)
  698. dev_dbg(dev, "malformed TLP received from the link\n");
  699. if (sub_reg & PCIE_CORE_INT_UCR)
  700. dev_dbg(dev, "malformed TLP received from the link\n");
  701. if (sub_reg & PCIE_CORE_INT_FCE)
  702. dev_dbg(dev, "an error was observed in the flow control advertisements from the other side\n");
  703. if (sub_reg & PCIE_CORE_INT_CT)
  704. dev_dbg(dev, "a request timed out waiting for completion\n");
  705. if (sub_reg & PCIE_CORE_INT_UTC)
  706. dev_dbg(dev, "unmapped TC error\n");
  707. if (sub_reg & PCIE_CORE_INT_MMVC)
  708. dev_dbg(dev, "MSI mask register changes\n");
  709. rockchip_pcie_write(rockchip, sub_reg, PCIE_CORE_INT_STATUS);
  710. } else if (reg & PCIE_CLIENT_INT_PHY) {
  711. dev_dbg(dev, "phy link changes\n");
  712. rockchip_pcie_update_txcredit_mui(rockchip);
  713. rockchip_pcie_clr_bw_int(rockchip);
  714. }
  715. rockchip_pcie_write(rockchip, reg & PCIE_CLIENT_INT_LOCAL,
  716. PCIE_CLIENT_INT_STATUS);
  717. return IRQ_HANDLED;
  718. }
  719. static irqreturn_t rockchip_pcie_client_irq_handler(int irq, void *arg)
  720. {
  721. struct rockchip_pcie *rockchip = arg;
  722. struct device *dev = rockchip->dev;
  723. u32 reg;
  724. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  725. if (reg & PCIE_CLIENT_INT_LEGACY_DONE)
  726. dev_dbg(dev, "legacy done interrupt received\n");
  727. if (reg & PCIE_CLIENT_INT_MSG)
  728. dev_dbg(dev, "message done interrupt received\n");
  729. if (reg & PCIE_CLIENT_INT_HOT_RST)
  730. dev_dbg(dev, "hot reset interrupt received\n");
  731. if (reg & PCIE_CLIENT_INT_DPA)
  732. dev_dbg(dev, "dpa interrupt received\n");
  733. if (reg & PCIE_CLIENT_INT_FATAL_ERR)
  734. dev_dbg(dev, "fatal error interrupt received\n");
  735. if (reg & PCIE_CLIENT_INT_NFATAL_ERR)
  736. dev_dbg(dev, "no fatal error interrupt received\n");
  737. if (reg & PCIE_CLIENT_INT_CORR_ERR)
  738. dev_dbg(dev, "correctable error interrupt received\n");
  739. if (reg & PCIE_CLIENT_INT_PHY)
  740. dev_dbg(dev, "phy interrupt received\n");
  741. rockchip_pcie_write(rockchip, reg & (PCIE_CLIENT_INT_LEGACY_DONE |
  742. PCIE_CLIENT_INT_MSG | PCIE_CLIENT_INT_HOT_RST |
  743. PCIE_CLIENT_INT_DPA | PCIE_CLIENT_INT_FATAL_ERR |
  744. PCIE_CLIENT_INT_NFATAL_ERR |
  745. PCIE_CLIENT_INT_CORR_ERR |
  746. PCIE_CLIENT_INT_PHY),
  747. PCIE_CLIENT_INT_STATUS);
  748. return IRQ_HANDLED;
  749. }
  750. static void rockchip_pcie_legacy_int_handler(struct irq_desc *desc)
  751. {
  752. struct irq_chip *chip = irq_desc_get_chip(desc);
  753. struct rockchip_pcie *rockchip = irq_desc_get_handler_data(desc);
  754. struct device *dev = rockchip->dev;
  755. u32 reg;
  756. u32 hwirq;
  757. u32 virq;
  758. chained_irq_enter(chip, desc);
  759. reg = rockchip_pcie_read(rockchip, PCIE_CLIENT_INT_STATUS);
  760. reg = (reg & PCIE_CLIENT_INTR_MASK) >> PCIE_CLIENT_INTR_SHIFT;
  761. while (reg) {
  762. hwirq = ffs(reg) - 1;
  763. reg &= ~BIT(hwirq);
  764. virq = irq_find_mapping(rockchip->irq_domain, hwirq);
  765. if (virq)
  766. generic_handle_irq(virq);
  767. else
  768. dev_err(dev, "unexpected IRQ, INT%d\n", hwirq);
  769. }
  770. chained_irq_exit(chip, desc);
  771. }
  772. static int rockchip_pcie_get_phys(struct rockchip_pcie *rockchip)
  773. {
  774. struct device *dev = rockchip->dev;
  775. struct phy *phy;
  776. char *name;
  777. u32 i;
  778. phy = devm_phy_get(dev, "pcie-phy");
  779. if (!IS_ERR(phy)) {
  780. rockchip->legacy_phy = true;
  781. rockchip->phys[0] = phy;
  782. dev_warn(dev, "legacy phy model is deprecated!\n");
  783. return 0;
  784. }
  785. if (PTR_ERR(phy) == -EPROBE_DEFER)
  786. return PTR_ERR(phy);
  787. dev_dbg(dev, "missing legacy phy; search for per-lane PHY\n");
  788. for (i = 0; i < MAX_LANE_NUM; i++) {
  789. name = kasprintf(GFP_KERNEL, "pcie-phy-%u", i);
  790. if (!name)
  791. return -ENOMEM;
  792. phy = devm_of_phy_get(dev, dev->of_node, name);
  793. kfree(name);
  794. if (IS_ERR(phy)) {
  795. if (PTR_ERR(phy) != -EPROBE_DEFER)
  796. dev_err(dev, "missing phy for lane %d: %ld\n",
  797. i, PTR_ERR(phy));
  798. return PTR_ERR(phy);
  799. }
  800. rockchip->phys[i] = phy;
  801. }
  802. return 0;
  803. }
  804. static int rockchip_pcie_setup_irq(struct rockchip_pcie *rockchip)
  805. {
  806. int irq, err;
  807. struct device *dev = rockchip->dev;
  808. struct platform_device *pdev = to_platform_device(dev);
  809. irq = platform_get_irq_byname(pdev, "sys");
  810. if (irq < 0) {
  811. dev_err(dev, "missing sys IRQ resource\n");
  812. return irq;
  813. }
  814. err = devm_request_irq(dev, irq, rockchip_pcie_subsys_irq_handler,
  815. IRQF_SHARED, "pcie-sys", rockchip);
  816. if (err) {
  817. dev_err(dev, "failed to request PCIe subsystem IRQ\n");
  818. return err;
  819. }
  820. irq = platform_get_irq_byname(pdev, "legacy");
  821. if (irq < 0) {
  822. dev_err(dev, "missing legacy IRQ resource\n");
  823. return irq;
  824. }
  825. irq_set_chained_handler_and_data(irq,
  826. rockchip_pcie_legacy_int_handler,
  827. rockchip);
  828. irq = platform_get_irq_byname(pdev, "client");
  829. if (irq < 0) {
  830. dev_err(dev, "missing client IRQ resource\n");
  831. return irq;
  832. }
  833. err = devm_request_irq(dev, irq, rockchip_pcie_client_irq_handler,
  834. IRQF_SHARED, "pcie-client", rockchip);
  835. if (err) {
  836. dev_err(dev, "failed to request PCIe client IRQ\n");
  837. return err;
  838. }
  839. return 0;
  840. }
  841. /**
  842. * rockchip_pcie_parse_dt - Parse Device Tree
  843. * @rockchip: PCIe port information
  844. *
  845. * Return: '0' on success and error value on failure
  846. */
  847. static int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip)
  848. {
  849. struct device *dev = rockchip->dev;
  850. struct platform_device *pdev = to_platform_device(dev);
  851. struct device_node *node = dev->of_node;
  852. struct resource *regs;
  853. int err;
  854. regs = platform_get_resource_byname(pdev,
  855. IORESOURCE_MEM,
  856. "axi-base");
  857. rockchip->reg_base = devm_pci_remap_cfg_resource(dev, regs);
  858. if (IS_ERR(rockchip->reg_base))
  859. return PTR_ERR(rockchip->reg_base);
  860. regs = platform_get_resource_byname(pdev,
  861. IORESOURCE_MEM,
  862. "apb-base");
  863. rockchip->apb_base = devm_ioremap_resource(dev, regs);
  864. if (IS_ERR(rockchip->apb_base))
  865. return PTR_ERR(rockchip->apb_base);
  866. err = rockchip_pcie_get_phys(rockchip);
  867. if (err)
  868. return err;
  869. rockchip->lanes = 1;
  870. err = of_property_read_u32(node, "num-lanes", &rockchip->lanes);
  871. if (!err && (rockchip->lanes == 0 ||
  872. rockchip->lanes == 3 ||
  873. rockchip->lanes > 4)) {
  874. dev_warn(dev, "invalid num-lanes, default to use one lane\n");
  875. rockchip->lanes = 1;
  876. }
  877. rockchip->link_gen = of_pci_get_max_link_speed(node);
  878. if (rockchip->link_gen < 0 || rockchip->link_gen > 2)
  879. rockchip->link_gen = 2;
  880. rockchip->core_rst = devm_reset_control_get_exclusive(dev, "core");
  881. if (IS_ERR(rockchip->core_rst)) {
  882. if (PTR_ERR(rockchip->core_rst) != -EPROBE_DEFER)
  883. dev_err(dev, "missing core reset property in node\n");
  884. return PTR_ERR(rockchip->core_rst);
  885. }
  886. rockchip->mgmt_rst = devm_reset_control_get_exclusive(dev, "mgmt");
  887. if (IS_ERR(rockchip->mgmt_rst)) {
  888. if (PTR_ERR(rockchip->mgmt_rst) != -EPROBE_DEFER)
  889. dev_err(dev, "missing mgmt reset property in node\n");
  890. return PTR_ERR(rockchip->mgmt_rst);
  891. }
  892. rockchip->mgmt_sticky_rst = devm_reset_control_get_exclusive(dev,
  893. "mgmt-sticky");
  894. if (IS_ERR(rockchip->mgmt_sticky_rst)) {
  895. if (PTR_ERR(rockchip->mgmt_sticky_rst) != -EPROBE_DEFER)
  896. dev_err(dev, "missing mgmt-sticky reset property in node\n");
  897. return PTR_ERR(rockchip->mgmt_sticky_rst);
  898. }
  899. rockchip->pipe_rst = devm_reset_control_get_exclusive(dev, "pipe");
  900. if (IS_ERR(rockchip->pipe_rst)) {
  901. if (PTR_ERR(rockchip->pipe_rst) != -EPROBE_DEFER)
  902. dev_err(dev, "missing pipe reset property in node\n");
  903. return PTR_ERR(rockchip->pipe_rst);
  904. }
  905. rockchip->pm_rst = devm_reset_control_get_exclusive(dev, "pm");
  906. if (IS_ERR(rockchip->pm_rst)) {
  907. if (PTR_ERR(rockchip->pm_rst) != -EPROBE_DEFER)
  908. dev_err(dev, "missing pm reset property in node\n");
  909. return PTR_ERR(rockchip->pm_rst);
  910. }
  911. rockchip->pclk_rst = devm_reset_control_get_exclusive(dev, "pclk");
  912. if (IS_ERR(rockchip->pclk_rst)) {
  913. if (PTR_ERR(rockchip->pclk_rst) != -EPROBE_DEFER)
  914. dev_err(dev, "missing pclk reset property in node\n");
  915. return PTR_ERR(rockchip->pclk_rst);
  916. }
  917. rockchip->aclk_rst = devm_reset_control_get_exclusive(dev, "aclk");
  918. if (IS_ERR(rockchip->aclk_rst)) {
  919. if (PTR_ERR(rockchip->aclk_rst) != -EPROBE_DEFER)
  920. dev_err(dev, "missing aclk reset property in node\n");
  921. return PTR_ERR(rockchip->aclk_rst);
  922. }
  923. rockchip->ep_gpio = devm_gpiod_get(dev, "ep", GPIOD_OUT_HIGH);
  924. if (IS_ERR(rockchip->ep_gpio)) {
  925. dev_err(dev, "missing ep-gpios property in node\n");
  926. return PTR_ERR(rockchip->ep_gpio);
  927. }
  928. rockchip->aclk_pcie = devm_clk_get(dev, "aclk");
  929. if (IS_ERR(rockchip->aclk_pcie)) {
  930. dev_err(dev, "aclk clock not found\n");
  931. return PTR_ERR(rockchip->aclk_pcie);
  932. }
  933. rockchip->aclk_perf_pcie = devm_clk_get(dev, "aclk-perf");
  934. if (IS_ERR(rockchip->aclk_perf_pcie)) {
  935. dev_err(dev, "aclk_perf clock not found\n");
  936. return PTR_ERR(rockchip->aclk_perf_pcie);
  937. }
  938. rockchip->hclk_pcie = devm_clk_get(dev, "hclk");
  939. if (IS_ERR(rockchip->hclk_pcie)) {
  940. dev_err(dev, "hclk clock not found\n");
  941. return PTR_ERR(rockchip->hclk_pcie);
  942. }
  943. rockchip->clk_pcie_pm = devm_clk_get(dev, "pm");
  944. if (IS_ERR(rockchip->clk_pcie_pm)) {
  945. dev_err(dev, "pm clock not found\n");
  946. return PTR_ERR(rockchip->clk_pcie_pm);
  947. }
  948. err = rockchip_pcie_setup_irq(rockchip);
  949. if (err)
  950. return err;
  951. rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v");
  952. if (IS_ERR(rockchip->vpcie12v)) {
  953. if (PTR_ERR(rockchip->vpcie12v) == -EPROBE_DEFER)
  954. return -EPROBE_DEFER;
  955. dev_info(dev, "no vpcie12v regulator found\n");
  956. }
  957. rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3");
  958. if (IS_ERR(rockchip->vpcie3v3)) {
  959. if (PTR_ERR(rockchip->vpcie3v3) == -EPROBE_DEFER)
  960. return -EPROBE_DEFER;
  961. dev_info(dev, "no vpcie3v3 regulator found\n");
  962. }
  963. rockchip->vpcie1v8 = devm_regulator_get_optional(dev, "vpcie1v8");
  964. if (IS_ERR(rockchip->vpcie1v8)) {
  965. if (PTR_ERR(rockchip->vpcie1v8) == -EPROBE_DEFER)
  966. return -EPROBE_DEFER;
  967. dev_info(dev, "no vpcie1v8 regulator found\n");
  968. }
  969. rockchip->vpcie0v9 = devm_regulator_get_optional(dev, "vpcie0v9");
  970. if (IS_ERR(rockchip->vpcie0v9)) {
  971. if (PTR_ERR(rockchip->vpcie0v9) == -EPROBE_DEFER)
  972. return -EPROBE_DEFER;
  973. dev_info(dev, "no vpcie0v9 regulator found\n");
  974. }
  975. return 0;
  976. }
  977. static int rockchip_pcie_set_vpcie(struct rockchip_pcie *rockchip)
  978. {
  979. struct device *dev = rockchip->dev;
  980. int err;
  981. if (!IS_ERR(rockchip->vpcie12v)) {
  982. err = regulator_enable(rockchip->vpcie12v);
  983. if (err) {
  984. dev_err(dev, "fail to enable vpcie12v regulator\n");
  985. goto err_out;
  986. }
  987. }
  988. if (!IS_ERR(rockchip->vpcie3v3)) {
  989. err = regulator_enable(rockchip->vpcie3v3);
  990. if (err) {
  991. dev_err(dev, "fail to enable vpcie3v3 regulator\n");
  992. goto err_disable_12v;
  993. }
  994. }
  995. if (!IS_ERR(rockchip->vpcie1v8)) {
  996. err = regulator_enable(rockchip->vpcie1v8);
  997. if (err) {
  998. dev_err(dev, "fail to enable vpcie1v8 regulator\n");
  999. goto err_disable_3v3;
  1000. }
  1001. }
  1002. if (!IS_ERR(rockchip->vpcie0v9)) {
  1003. err = regulator_enable(rockchip->vpcie0v9);
  1004. if (err) {
  1005. dev_err(dev, "fail to enable vpcie0v9 regulator\n");
  1006. goto err_disable_1v8;
  1007. }
  1008. }
  1009. return 0;
  1010. err_disable_1v8:
  1011. if (!IS_ERR(rockchip->vpcie1v8))
  1012. regulator_disable(rockchip->vpcie1v8);
  1013. err_disable_3v3:
  1014. if (!IS_ERR(rockchip->vpcie3v3))
  1015. regulator_disable(rockchip->vpcie3v3);
  1016. err_disable_12v:
  1017. if (!IS_ERR(rockchip->vpcie12v))
  1018. regulator_disable(rockchip->vpcie12v);
  1019. err_out:
  1020. return err;
  1021. }
  1022. static void rockchip_pcie_enable_interrupts(struct rockchip_pcie *rockchip)
  1023. {
  1024. rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) &
  1025. (~PCIE_CLIENT_INT_CLI), PCIE_CLIENT_INT_MASK);
  1026. rockchip_pcie_write(rockchip, (u32)(~PCIE_CORE_INT),
  1027. PCIE_CORE_INT_MASK);
  1028. rockchip_pcie_enable_bw_int(rockchip);
  1029. }
  1030. static int rockchip_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
  1031. irq_hw_number_t hwirq)
  1032. {
  1033. irq_set_chip_and_handler(irq, &dummy_irq_chip, handle_simple_irq);
  1034. irq_set_chip_data(irq, domain->host_data);
  1035. return 0;
  1036. }
  1037. static const struct irq_domain_ops intx_domain_ops = {
  1038. .map = rockchip_pcie_intx_map,
  1039. };
  1040. static int rockchip_pcie_init_irq_domain(struct rockchip_pcie *rockchip)
  1041. {
  1042. struct device *dev = rockchip->dev;
  1043. struct device_node *intc = of_get_next_child(dev->of_node, NULL);
  1044. if (!intc) {
  1045. dev_err(dev, "missing child interrupt-controller node\n");
  1046. return -EINVAL;
  1047. }
  1048. rockchip->irq_domain = irq_domain_add_linear(intc, PCI_NUM_INTX,
  1049. &intx_domain_ops, rockchip);
  1050. if (!rockchip->irq_domain) {
  1051. dev_err(dev, "failed to get a INTx IRQ domain\n");
  1052. return -EINVAL;
  1053. }
  1054. return 0;
  1055. }
  1056. static int rockchip_pcie_prog_ob_atu(struct rockchip_pcie *rockchip,
  1057. int region_no, int type, u8 num_pass_bits,
  1058. u32 lower_addr, u32 upper_addr)
  1059. {
  1060. u32 ob_addr_0;
  1061. u32 ob_addr_1;
  1062. u32 ob_desc_0;
  1063. u32 aw_offset;
  1064. if (region_no >= MAX_AXI_WRAPPER_REGION_NUM)
  1065. return -EINVAL;
  1066. if (num_pass_bits + 1 < 8)
  1067. return -EINVAL;
  1068. if (num_pass_bits > 63)
  1069. return -EINVAL;
  1070. if (region_no == 0) {
  1071. if (AXI_REGION_0_SIZE < (2ULL << num_pass_bits))
  1072. return -EINVAL;
  1073. }
  1074. if (region_no != 0) {
  1075. if (AXI_REGION_SIZE < (2ULL << num_pass_bits))
  1076. return -EINVAL;
  1077. }
  1078. aw_offset = (region_no << OB_REG_SIZE_SHIFT);
  1079. ob_addr_0 = num_pass_bits & PCIE_CORE_OB_REGION_ADDR0_NUM_BITS;
  1080. ob_addr_0 |= lower_addr & PCIE_CORE_OB_REGION_ADDR0_LO_ADDR;
  1081. ob_addr_1 = upper_addr;
  1082. ob_desc_0 = (1 << 23 | type);
  1083. rockchip_pcie_write(rockchip, ob_addr_0,
  1084. PCIE_CORE_OB_REGION_ADDR0 + aw_offset);
  1085. rockchip_pcie_write(rockchip, ob_addr_1,
  1086. PCIE_CORE_OB_REGION_ADDR1 + aw_offset);
  1087. rockchip_pcie_write(rockchip, ob_desc_0,
  1088. PCIE_CORE_OB_REGION_DESC0 + aw_offset);
  1089. rockchip_pcie_write(rockchip, 0,
  1090. PCIE_CORE_OB_REGION_DESC1 + aw_offset);
  1091. return 0;
  1092. }
  1093. static int rockchip_pcie_prog_ib_atu(struct rockchip_pcie *rockchip,
  1094. int region_no, u8 num_pass_bits,
  1095. u32 lower_addr, u32 upper_addr)
  1096. {
  1097. u32 ib_addr_0;
  1098. u32 ib_addr_1;
  1099. u32 aw_offset;
  1100. if (region_no > MAX_AXI_IB_ROOTPORT_REGION_NUM)
  1101. return -EINVAL;
  1102. if (num_pass_bits + 1 < MIN_AXI_ADDR_BITS_PASSED)
  1103. return -EINVAL;
  1104. if (num_pass_bits > 63)
  1105. return -EINVAL;
  1106. aw_offset = (region_no << IB_ROOT_PORT_REG_SIZE_SHIFT);
  1107. ib_addr_0 = num_pass_bits & PCIE_CORE_IB_REGION_ADDR0_NUM_BITS;
  1108. ib_addr_0 |= (lower_addr << 8) & PCIE_CORE_IB_REGION_ADDR0_LO_ADDR;
  1109. ib_addr_1 = upper_addr;
  1110. rockchip_pcie_write(rockchip, ib_addr_0, PCIE_RP_IB_ADDR0 + aw_offset);
  1111. rockchip_pcie_write(rockchip, ib_addr_1, PCIE_RP_IB_ADDR1 + aw_offset);
  1112. return 0;
  1113. }
  1114. static int rockchip_pcie_cfg_atu(struct rockchip_pcie *rockchip)
  1115. {
  1116. struct device *dev = rockchip->dev;
  1117. int offset;
  1118. int err;
  1119. int reg_no;
  1120. rockchip_pcie_cfg_configuration_accesses(rockchip,
  1121. AXI_WRAPPER_TYPE0_CFG);
  1122. for (reg_no = 0; reg_no < (rockchip->mem_size >> 20); reg_no++) {
  1123. err = rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1,
  1124. AXI_WRAPPER_MEM_WRITE,
  1125. 20 - 1,
  1126. rockchip->mem_bus_addr +
  1127. (reg_no << 20),
  1128. 0);
  1129. if (err) {
  1130. dev_err(dev, "program RC mem outbound ATU failed\n");
  1131. return err;
  1132. }
  1133. }
  1134. err = rockchip_pcie_prog_ib_atu(rockchip, 2, 32 - 1, 0x0, 0);
  1135. if (err) {
  1136. dev_err(dev, "program RC mem inbound ATU failed\n");
  1137. return err;
  1138. }
  1139. offset = rockchip->mem_size >> 20;
  1140. for (reg_no = 0; reg_no < (rockchip->io_size >> 20); reg_no++) {
  1141. err = rockchip_pcie_prog_ob_atu(rockchip,
  1142. reg_no + 1 + offset,
  1143. AXI_WRAPPER_IO_WRITE,
  1144. 20 - 1,
  1145. rockchip->io_bus_addr +
  1146. (reg_no << 20),
  1147. 0);
  1148. if (err) {
  1149. dev_err(dev, "program RC io outbound ATU failed\n");
  1150. return err;
  1151. }
  1152. }
  1153. /* assign message regions */
  1154. rockchip_pcie_prog_ob_atu(rockchip, reg_no + 1 + offset,
  1155. AXI_WRAPPER_NOR_MSG,
  1156. 20 - 1, 0, 0);
  1157. rockchip->msg_bus_addr = rockchip->mem_bus_addr +
  1158. ((reg_no + offset) << 20);
  1159. return err;
  1160. }
  1161. static int rockchip_pcie_wait_l2(struct rockchip_pcie *rockchip)
  1162. {
  1163. u32 value;
  1164. int err;
  1165. /* send PME_TURN_OFF message */
  1166. writel(0x0, rockchip->msg_region + PCIE_RC_SEND_PME_OFF);
  1167. /* read LTSSM and wait for falling into L2 link state */
  1168. err = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_DEBUG_OUT_0,
  1169. value, PCIE_LINK_IS_L2(value), 20,
  1170. jiffies_to_usecs(5 * HZ));
  1171. if (err) {
  1172. dev_err(rockchip->dev, "PCIe link enter L2 timeout!\n");
  1173. return err;
  1174. }
  1175. return 0;
  1176. }
  1177. static int rockchip_pcie_enable_clocks(struct rockchip_pcie *rockchip)
  1178. {
  1179. struct device *dev = rockchip->dev;
  1180. int err;
  1181. err = clk_prepare_enable(rockchip->aclk_pcie);
  1182. if (err) {
  1183. dev_err(dev, "unable to enable aclk_pcie clock\n");
  1184. return err;
  1185. }
  1186. err = clk_prepare_enable(rockchip->aclk_perf_pcie);
  1187. if (err) {
  1188. dev_err(dev, "unable to enable aclk_perf_pcie clock\n");
  1189. goto err_aclk_perf_pcie;
  1190. }
  1191. err = clk_prepare_enable(rockchip->hclk_pcie);
  1192. if (err) {
  1193. dev_err(dev, "unable to enable hclk_pcie clock\n");
  1194. goto err_hclk_pcie;
  1195. }
  1196. err = clk_prepare_enable(rockchip->clk_pcie_pm);
  1197. if (err) {
  1198. dev_err(dev, "unable to enable clk_pcie_pm clock\n");
  1199. goto err_clk_pcie_pm;
  1200. }
  1201. return 0;
  1202. err_clk_pcie_pm:
  1203. clk_disable_unprepare(rockchip->hclk_pcie);
  1204. err_hclk_pcie:
  1205. clk_disable_unprepare(rockchip->aclk_perf_pcie);
  1206. err_aclk_perf_pcie:
  1207. clk_disable_unprepare(rockchip->aclk_pcie);
  1208. return err;
  1209. }
  1210. static void rockchip_pcie_disable_clocks(void *data)
  1211. {
  1212. struct rockchip_pcie *rockchip = data;
  1213. clk_disable_unprepare(rockchip->clk_pcie_pm);
  1214. clk_disable_unprepare(rockchip->hclk_pcie);
  1215. clk_disable_unprepare(rockchip->aclk_perf_pcie);
  1216. clk_disable_unprepare(rockchip->aclk_pcie);
  1217. }
  1218. static int __maybe_unused rockchip_pcie_suspend_noirq(struct device *dev)
  1219. {
  1220. struct rockchip_pcie *rockchip = dev_get_drvdata(dev);
  1221. int ret;
  1222. /* disable core and cli int since we don't need to ack PME_ACK */
  1223. rockchip_pcie_write(rockchip, (PCIE_CLIENT_INT_CLI << 16) |
  1224. PCIE_CLIENT_INT_CLI, PCIE_CLIENT_INT_MASK);
  1225. rockchip_pcie_write(rockchip, (u32)PCIE_CORE_INT, PCIE_CORE_INT_MASK);
  1226. ret = rockchip_pcie_wait_l2(rockchip);
  1227. if (ret) {
  1228. rockchip_pcie_enable_interrupts(rockchip);
  1229. return ret;
  1230. }
  1231. rockchip_pcie_deinit_phys(rockchip);
  1232. rockchip_pcie_disable_clocks(rockchip);
  1233. if (!IS_ERR(rockchip->vpcie0v9))
  1234. regulator_disable(rockchip->vpcie0v9);
  1235. return ret;
  1236. }
  1237. static int __maybe_unused rockchip_pcie_resume_noirq(struct device *dev)
  1238. {
  1239. struct rockchip_pcie *rockchip = dev_get_drvdata(dev);
  1240. int err;
  1241. if (!IS_ERR(rockchip->vpcie0v9)) {
  1242. err = regulator_enable(rockchip->vpcie0v9);
  1243. if (err) {
  1244. dev_err(dev, "fail to enable vpcie0v9 regulator\n");
  1245. return err;
  1246. }
  1247. }
  1248. err = rockchip_pcie_enable_clocks(rockchip);
  1249. if (err)
  1250. goto err_disable_0v9;
  1251. err = rockchip_pcie_init_port(rockchip);
  1252. if (err)
  1253. goto err_pcie_resume;
  1254. err = rockchip_pcie_cfg_atu(rockchip);
  1255. if (err)
  1256. goto err_err_deinit_port;
  1257. /* Need this to enter L1 again */
  1258. rockchip_pcie_update_txcredit_mui(rockchip);
  1259. rockchip_pcie_enable_interrupts(rockchip);
  1260. return 0;
  1261. err_err_deinit_port:
  1262. rockchip_pcie_deinit_phys(rockchip);
  1263. err_pcie_resume:
  1264. rockchip_pcie_disable_clocks(rockchip);
  1265. err_disable_0v9:
  1266. if (!IS_ERR(rockchip->vpcie0v9))
  1267. regulator_disable(rockchip->vpcie0v9);
  1268. return err;
  1269. }
  1270. static int rockchip_pcie_probe(struct platform_device *pdev)
  1271. {
  1272. struct rockchip_pcie *rockchip;
  1273. struct device *dev = &pdev->dev;
  1274. struct pci_bus *bus, *child;
  1275. struct pci_host_bridge *bridge;
  1276. struct resource_entry *win;
  1277. resource_size_t io_base;
  1278. struct resource *mem;
  1279. struct resource *io;
  1280. int err;
  1281. LIST_HEAD(res);
  1282. if (!dev->of_node)
  1283. return -ENODEV;
  1284. bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rockchip));
  1285. if (!bridge)
  1286. return -ENOMEM;
  1287. rockchip = pci_host_bridge_priv(bridge);
  1288. platform_set_drvdata(pdev, rockchip);
  1289. rockchip->dev = dev;
  1290. err = rockchip_pcie_parse_dt(rockchip);
  1291. if (err)
  1292. return err;
  1293. err = rockchip_pcie_enable_clocks(rockchip);
  1294. if (err)
  1295. return err;
  1296. err = rockchip_pcie_set_vpcie(rockchip);
  1297. if (err) {
  1298. dev_err(dev, "failed to set vpcie regulator\n");
  1299. goto err_set_vpcie;
  1300. }
  1301. err = rockchip_pcie_init_port(rockchip);
  1302. if (err)
  1303. goto err_vpcie;
  1304. rockchip_pcie_enable_interrupts(rockchip);
  1305. err = rockchip_pcie_init_irq_domain(rockchip);
  1306. if (err < 0)
  1307. goto err_deinit_port;
  1308. err = of_pci_get_host_bridge_resources(dev->of_node, 0, 0xff,
  1309. &res, &io_base);
  1310. if (err)
  1311. goto err_remove_irq_domain;
  1312. err = devm_request_pci_bus_resources(dev, &res);
  1313. if (err)
  1314. goto err_free_res;
  1315. /* Get the I/O and memory ranges from DT */
  1316. resource_list_for_each_entry(win, &res) {
  1317. switch (resource_type(win->res)) {
  1318. case IORESOURCE_IO:
  1319. io = win->res;
  1320. io->name = "I/O";
  1321. rockchip->io_size = resource_size(io);
  1322. rockchip->io_bus_addr = io->start - win->offset;
  1323. err = pci_remap_iospace(io, io_base);
  1324. if (err) {
  1325. dev_warn(dev, "error %d: failed to map resource %pR\n",
  1326. err, io);
  1327. continue;
  1328. }
  1329. rockchip->io = io;
  1330. break;
  1331. case IORESOURCE_MEM:
  1332. mem = win->res;
  1333. mem->name = "MEM";
  1334. rockchip->mem_size = resource_size(mem);
  1335. rockchip->mem_bus_addr = mem->start - win->offset;
  1336. break;
  1337. case IORESOURCE_BUS:
  1338. rockchip->root_bus_nr = win->res->start;
  1339. break;
  1340. default:
  1341. continue;
  1342. }
  1343. }
  1344. err = rockchip_pcie_cfg_atu(rockchip);
  1345. if (err)
  1346. goto err_unmap_iospace;
  1347. rockchip->msg_region = devm_ioremap(dev, rockchip->msg_bus_addr, SZ_1M);
  1348. if (!rockchip->msg_region) {
  1349. err = -ENOMEM;
  1350. goto err_unmap_iospace;
  1351. }
  1352. list_splice_init(&res, &bridge->windows);
  1353. bridge->dev.parent = dev;
  1354. bridge->sysdata = rockchip;
  1355. bridge->busnr = 0;
  1356. bridge->ops = &rockchip_pcie_ops;
  1357. bridge->map_irq = of_irq_parse_and_map_pci;
  1358. bridge->swizzle_irq = pci_common_swizzle;
  1359. err = pci_scan_root_bus_bridge(bridge);
  1360. if (err < 0)
  1361. goto err_unmap_iospace;
  1362. bus = bridge->bus;
  1363. rockchip->root_bus = bus;
  1364. pci_bus_size_bridges(bus);
  1365. pci_bus_assign_resources(bus);
  1366. list_for_each_entry(child, &bus->children, node)
  1367. pcie_bus_configure_settings(child);
  1368. pci_bus_add_devices(bus);
  1369. return 0;
  1370. err_unmap_iospace:
  1371. pci_unmap_iospace(rockchip->io);
  1372. err_free_res:
  1373. pci_free_resource_list(&res);
  1374. err_remove_irq_domain:
  1375. irq_domain_remove(rockchip->irq_domain);
  1376. err_deinit_port:
  1377. rockchip_pcie_deinit_phys(rockchip);
  1378. err_vpcie:
  1379. if (!IS_ERR(rockchip->vpcie12v))
  1380. regulator_disable(rockchip->vpcie12v);
  1381. if (!IS_ERR(rockchip->vpcie3v3))
  1382. regulator_disable(rockchip->vpcie3v3);
  1383. if (!IS_ERR(rockchip->vpcie1v8))
  1384. regulator_disable(rockchip->vpcie1v8);
  1385. if (!IS_ERR(rockchip->vpcie0v9))
  1386. regulator_disable(rockchip->vpcie0v9);
  1387. err_set_vpcie:
  1388. rockchip_pcie_disable_clocks(rockchip);
  1389. return err;
  1390. }
  1391. static int rockchip_pcie_remove(struct platform_device *pdev)
  1392. {
  1393. struct device *dev = &pdev->dev;
  1394. struct rockchip_pcie *rockchip = dev_get_drvdata(dev);
  1395. pci_stop_root_bus(rockchip->root_bus);
  1396. pci_remove_root_bus(rockchip->root_bus);
  1397. pci_unmap_iospace(rockchip->io);
  1398. irq_domain_remove(rockchip->irq_domain);
  1399. rockchip_pcie_deinit_phys(rockchip);
  1400. rockchip_pcie_disable_clocks(rockchip);
  1401. if (!IS_ERR(rockchip->vpcie12v))
  1402. regulator_disable(rockchip->vpcie12v);
  1403. if (!IS_ERR(rockchip->vpcie3v3))
  1404. regulator_disable(rockchip->vpcie3v3);
  1405. if (!IS_ERR(rockchip->vpcie1v8))
  1406. regulator_disable(rockchip->vpcie1v8);
  1407. if (!IS_ERR(rockchip->vpcie0v9))
  1408. regulator_disable(rockchip->vpcie0v9);
  1409. return 0;
  1410. }
  1411. static const struct dev_pm_ops rockchip_pcie_pm_ops = {
  1412. SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(rockchip_pcie_suspend_noirq,
  1413. rockchip_pcie_resume_noirq)
  1414. };
  1415. static const struct of_device_id rockchip_pcie_of_match[] = {
  1416. { .compatible = "rockchip,rk3399-pcie", },
  1417. {}
  1418. };
  1419. MODULE_DEVICE_TABLE(of, rockchip_pcie_of_match);
  1420. static struct platform_driver rockchip_pcie_driver = {
  1421. .driver = {
  1422. .name = "rockchip-pcie",
  1423. .of_match_table = rockchip_pcie_of_match,
  1424. .pm = &rockchip_pcie_pm_ops,
  1425. },
  1426. .probe = rockchip_pcie_probe,
  1427. .remove = rockchip_pcie_remove,
  1428. };
  1429. module_platform_driver(rockchip_pcie_driver);
  1430. MODULE_AUTHOR("Rockchip Inc");
  1431. MODULE_DESCRIPTION("Rockchip AXI PCIe driver");
  1432. MODULE_LICENSE("GPL v2");