rockchip-iommu.c 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * IOMMU API for Rockchip
  4. *
  5. * Module Authors: Simon Xue <xxm@rock-chips.com>
  6. * Daniel Kurtz <djkurtz@chromium.org>
  7. */
  8. #include <linux/clk.h>
  9. #include <linux/compiler.h>
  10. #include <linux/delay.h>
  11. #include <linux/device.h>
  12. #include <linux/dma-mapping.h>
  13. #include <linux/errno.h>
  14. #include <linux/interrupt.h>
  15. #include <linux/io.h>
  16. #include <linux/iommu.h>
  17. #include <linux/iopoll.h>
  18. #include <linux/list.h>
  19. #include <linux/mm.h>
  20. #include <linux/init.h>
  21. #include <linux/of.h>
  22. #include <linux/of_platform.h>
  23. #include <linux/platform_device.h>
  24. #include <linux/pm_runtime.h>
  25. #include <linux/slab.h>
  26. #include <linux/spinlock.h>
  27. #include "iommu-pages.h"
  28. /** MMU register offsets */
  29. #define RK_MMU_DTE_ADDR 0x00 /* Directory table address */
  30. #define RK_MMU_STATUS 0x04
  31. #define RK_MMU_COMMAND 0x08
  32. #define RK_MMU_PAGE_FAULT_ADDR 0x0C /* IOVA of last page fault */
  33. #define RK_MMU_ZAP_ONE_LINE 0x10 /* Shootdown one IOTLB entry */
  34. #define RK_MMU_INT_RAWSTAT 0x14 /* IRQ status ignoring mask */
  35. #define RK_MMU_INT_CLEAR 0x18 /* Acknowledge and re-arm irq */
  36. #define RK_MMU_INT_MASK 0x1C /* IRQ enable */
  37. #define RK_MMU_INT_STATUS 0x20 /* IRQ status after masking */
  38. #define RK_MMU_AUTO_GATING 0x24
  39. #define DTE_ADDR_DUMMY 0xCAFEBABE
  40. #define RK_MMU_POLL_PERIOD_US 100
  41. #define RK_MMU_FORCE_RESET_TIMEOUT_US 100000
  42. #define RK_MMU_POLL_TIMEOUT_US 1000
  43. /* RK_MMU_STATUS fields */
  44. #define RK_MMU_STATUS_PAGING_ENABLED BIT(0)
  45. #define RK_MMU_STATUS_PAGE_FAULT_ACTIVE BIT(1)
  46. #define RK_MMU_STATUS_STALL_ACTIVE BIT(2)
  47. #define RK_MMU_STATUS_IDLE BIT(3)
  48. #define RK_MMU_STATUS_REPLAY_BUFFER_EMPTY BIT(4)
  49. #define RK_MMU_STATUS_PAGE_FAULT_IS_WRITE BIT(5)
  50. #define RK_MMU_STATUS_STALL_NOT_ACTIVE BIT(31)
  51. /* RK_MMU_COMMAND command values */
  52. #define RK_MMU_CMD_ENABLE_PAGING 0 /* Enable memory translation */
  53. #define RK_MMU_CMD_DISABLE_PAGING 1 /* Disable memory translation */
  54. #define RK_MMU_CMD_ENABLE_STALL 2 /* Stall paging to allow other cmds */
  55. #define RK_MMU_CMD_DISABLE_STALL 3 /* Stop stall re-enables paging */
  56. #define RK_MMU_CMD_ZAP_CACHE 4 /* Shoot down entire IOTLB */
  57. #define RK_MMU_CMD_PAGE_FAULT_DONE 5 /* Clear page fault */
  58. #define RK_MMU_CMD_FORCE_RESET 6 /* Reset all registers */
  59. /* RK_MMU_INT_* register fields */
  60. #define RK_MMU_IRQ_PAGE_FAULT 0x01 /* page fault */
  61. #define RK_MMU_IRQ_BUS_ERROR 0x02 /* bus read error */
  62. #define RK_MMU_IRQ_MASK (RK_MMU_IRQ_PAGE_FAULT | RK_MMU_IRQ_BUS_ERROR)
  63. #define NUM_DT_ENTRIES 1024
  64. #define NUM_PT_ENTRIES 1024
  65. #define SPAGE_ORDER 12
  66. #define SPAGE_SIZE (1 << SPAGE_ORDER)
  67. /*
  68. * Support mapping any size that fits in one page table:
  69. * 4 KiB to 4 MiB
  70. */
  71. #define RK_IOMMU_PGSIZE_BITMAP 0x007ff000
  72. struct rk_iommu_domain {
  73. struct list_head iommus;
  74. u32 *dt; /* page directory table */
  75. dma_addr_t dt_dma;
  76. spinlock_t iommus_lock; /* lock for iommus list */
  77. spinlock_t dt_lock; /* lock for modifying page directory table */
  78. struct iommu_domain domain;
  79. };
  80. /* list of clocks required by IOMMU */
  81. static const char * const rk_iommu_clocks[] = {
  82. "aclk", "iface",
  83. };
  84. struct rk_iommu_ops {
  85. phys_addr_t (*pt_address)(u32 dte);
  86. u32 (*mk_dtentries)(dma_addr_t pt_dma);
  87. u32 (*mk_ptentries)(phys_addr_t page, int prot);
  88. u64 dma_bit_mask;
  89. gfp_t gfp_flags;
  90. };
  91. struct rk_iommu {
  92. struct device *dev;
  93. void __iomem **bases;
  94. int num_mmu;
  95. int num_irq;
  96. struct clk_bulk_data *clocks;
  97. int num_clocks;
  98. bool reset_disabled;
  99. struct iommu_device iommu;
  100. struct list_head node; /* entry in rk_iommu_domain.iommus */
  101. struct iommu_domain *domain; /* domain to which iommu is attached */
  102. };
  103. struct rk_iommudata {
  104. struct device_link *link; /* runtime PM link from IOMMU to master */
  105. struct rk_iommu *iommu;
  106. };
  107. static struct device *dma_dev;
  108. static const struct rk_iommu_ops *rk_ops;
  109. static struct iommu_domain rk_identity_domain;
  110. static inline void rk_table_flush(struct rk_iommu_domain *dom, dma_addr_t dma,
  111. unsigned int count)
  112. {
  113. size_t size = count * sizeof(u32); /* count of u32 entry */
  114. dma_sync_single_for_device(dma_dev, dma, size, DMA_TO_DEVICE);
  115. }
  116. static struct rk_iommu_domain *to_rk_domain(struct iommu_domain *dom)
  117. {
  118. return container_of(dom, struct rk_iommu_domain, domain);
  119. }
  120. /*
  121. * The Rockchip rk3288 iommu uses a 2-level page table.
  122. * The first level is the "Directory Table" (DT).
  123. * The DT consists of 1024 4-byte Directory Table Entries (DTEs), each pointing
  124. * to a "Page Table".
  125. * The second level is the 1024 Page Tables (PT).
  126. * Each PT consists of 1024 4-byte Page Table Entries (PTEs), each pointing to
  127. * a 4 KB page of physical memory.
  128. *
  129. * The DT and each PT fits in a single 4 KB page (4-bytes * 1024 entries).
  130. * Each iommu device has a MMU_DTE_ADDR register that contains the physical
  131. * address of the start of the DT page.
  132. *
  133. * The structure of the page table is as follows:
  134. *
  135. * DT
  136. * MMU_DTE_ADDR -> +-----+
  137. * | |
  138. * +-----+ PT
  139. * | DTE | -> +-----+
  140. * +-----+ | | Memory
  141. * | | +-----+ Page
  142. * | | | PTE | -> +-----+
  143. * +-----+ +-----+ | |
  144. * | | | |
  145. * | | | |
  146. * +-----+ | |
  147. * | |
  148. * | |
  149. * +-----+
  150. */
  151. /*
  152. * Each DTE has a PT address and a valid bit:
  153. * +---------------------+-----------+-+
  154. * | PT address | Reserved |V|
  155. * +---------------------+-----------+-+
  156. * 31:12 - PT address (PTs always starts on a 4 KB boundary)
  157. * 11: 1 - Reserved
  158. * 0 - 1 if PT @ PT address is valid
  159. */
  160. #define RK_DTE_PT_ADDRESS_MASK 0xfffff000
  161. #define RK_DTE_PT_VALID BIT(0)
  162. static inline phys_addr_t rk_dte_pt_address(u32 dte)
  163. {
  164. return (phys_addr_t)dte & RK_DTE_PT_ADDRESS_MASK;
  165. }
  166. /*
  167. * In v2:
  168. * 31:12 - PT address bit 31:0
  169. * 11: 8 - PT address bit 35:32
  170. * 7: 4 - PT address bit 39:36
  171. * 3: 1 - Reserved
  172. * 0 - 1 if PT @ PT address is valid
  173. */
  174. #define RK_DTE_PT_ADDRESS_MASK_V2 GENMASK_ULL(31, 4)
  175. #define DTE_HI_MASK1 GENMASK(11, 8)
  176. #define DTE_HI_MASK2 GENMASK(7, 4)
  177. #define DTE_HI_SHIFT1 24 /* shift bit 8 to bit 32 */
  178. #define DTE_HI_SHIFT2 32 /* shift bit 4 to bit 36 */
  179. #define PAGE_DESC_HI_MASK1 GENMASK_ULL(35, 32)
  180. #define PAGE_DESC_HI_MASK2 GENMASK_ULL(39, 36)
  181. static inline phys_addr_t rk_dte_pt_address_v2(u32 dte)
  182. {
  183. u64 dte_v2 = dte;
  184. dte_v2 = ((dte_v2 & DTE_HI_MASK2) << DTE_HI_SHIFT2) |
  185. ((dte_v2 & DTE_HI_MASK1) << DTE_HI_SHIFT1) |
  186. (dte_v2 & RK_DTE_PT_ADDRESS_MASK);
  187. return (phys_addr_t)dte_v2;
  188. }
  189. static inline bool rk_dte_is_pt_valid(u32 dte)
  190. {
  191. return dte & RK_DTE_PT_VALID;
  192. }
  193. static inline u32 rk_mk_dte(dma_addr_t pt_dma)
  194. {
  195. return (pt_dma & RK_DTE_PT_ADDRESS_MASK) | RK_DTE_PT_VALID;
  196. }
  197. static inline u32 rk_mk_dte_v2(dma_addr_t pt_dma)
  198. {
  199. pt_dma = (pt_dma & RK_DTE_PT_ADDRESS_MASK) |
  200. ((pt_dma & PAGE_DESC_HI_MASK1) >> DTE_HI_SHIFT1) |
  201. (pt_dma & PAGE_DESC_HI_MASK2) >> DTE_HI_SHIFT2;
  202. return (pt_dma & RK_DTE_PT_ADDRESS_MASK_V2) | RK_DTE_PT_VALID;
  203. }
  204. /*
  205. * Each PTE has a Page address, some flags and a valid bit:
  206. * +---------------------+---+-------+-+
  207. * | Page address |Rsv| Flags |V|
  208. * +---------------------+---+-------+-+
  209. * 31:12 - Page address (Pages always start on a 4 KB boundary)
  210. * 11: 9 - Reserved
  211. * 8: 1 - Flags
  212. * 8 - Read allocate - allocate cache space on read misses
  213. * 7 - Read cache - enable cache & prefetch of data
  214. * 6 - Write buffer - enable delaying writes on their way to memory
  215. * 5 - Write allocate - allocate cache space on write misses
  216. * 4 - Write cache - different writes can be merged together
  217. * 3 - Override cache attributes
  218. * if 1, bits 4-8 control cache attributes
  219. * if 0, the system bus defaults are used
  220. * 2 - Writable
  221. * 1 - Readable
  222. * 0 - 1 if Page @ Page address is valid
  223. */
  224. #define RK_PTE_PAGE_ADDRESS_MASK 0xfffff000
  225. #define RK_PTE_PAGE_FLAGS_MASK 0x000001fe
  226. #define RK_PTE_PAGE_WRITABLE BIT(2)
  227. #define RK_PTE_PAGE_READABLE BIT(1)
  228. #define RK_PTE_PAGE_VALID BIT(0)
  229. static inline bool rk_pte_is_page_valid(u32 pte)
  230. {
  231. return pte & RK_PTE_PAGE_VALID;
  232. }
  233. /* TODO: set cache flags per prot IOMMU_CACHE */
  234. static u32 rk_mk_pte(phys_addr_t page, int prot)
  235. {
  236. u32 flags = 0;
  237. flags |= (prot & IOMMU_READ) ? RK_PTE_PAGE_READABLE : 0;
  238. flags |= (prot & IOMMU_WRITE) ? RK_PTE_PAGE_WRITABLE : 0;
  239. page &= RK_PTE_PAGE_ADDRESS_MASK;
  240. return page | flags | RK_PTE_PAGE_VALID;
  241. }
  242. /*
  243. * In v2:
  244. * 31:12 - Page address bit 31:0
  245. * 11: 8 - Page address bit 35:32
  246. * 7: 4 - Page address bit 39:36
  247. * 3 - Security
  248. * 2 - Writable
  249. * 1 - Readable
  250. * 0 - 1 if Page @ Page address is valid
  251. */
  252. static u32 rk_mk_pte_v2(phys_addr_t page, int prot)
  253. {
  254. u32 flags = 0;
  255. flags |= (prot & IOMMU_READ) ? RK_PTE_PAGE_READABLE : 0;
  256. flags |= (prot & IOMMU_WRITE) ? RK_PTE_PAGE_WRITABLE : 0;
  257. return rk_mk_dte_v2(page) | flags;
  258. }
  259. static u32 rk_mk_pte_invalid(u32 pte)
  260. {
  261. return pte & ~RK_PTE_PAGE_VALID;
  262. }
  263. /*
  264. * rk3288 iova (IOMMU Virtual Address) format
  265. * 31 22.21 12.11 0
  266. * +-----------+-----------+-------------+
  267. * | DTE index | PTE index | Page offset |
  268. * +-----------+-----------+-------------+
  269. * 31:22 - DTE index - index of DTE in DT
  270. * 21:12 - PTE index - index of PTE in PT @ DTE.pt_address
  271. * 11: 0 - Page offset - offset into page @ PTE.page_address
  272. */
  273. #define RK_IOVA_DTE_MASK 0xffc00000
  274. #define RK_IOVA_DTE_SHIFT 22
  275. #define RK_IOVA_PTE_MASK 0x003ff000
  276. #define RK_IOVA_PTE_SHIFT 12
  277. #define RK_IOVA_PAGE_MASK 0x00000fff
  278. #define RK_IOVA_PAGE_SHIFT 0
  279. static u32 rk_iova_dte_index(dma_addr_t iova)
  280. {
  281. return (u32)(iova & RK_IOVA_DTE_MASK) >> RK_IOVA_DTE_SHIFT;
  282. }
  283. static u32 rk_iova_pte_index(dma_addr_t iova)
  284. {
  285. return (u32)(iova & RK_IOVA_PTE_MASK) >> RK_IOVA_PTE_SHIFT;
  286. }
  287. static u32 rk_iova_page_offset(dma_addr_t iova)
  288. {
  289. return (u32)(iova & RK_IOVA_PAGE_MASK) >> RK_IOVA_PAGE_SHIFT;
  290. }
  291. static u32 rk_iommu_read(void __iomem *base, u32 offset)
  292. {
  293. return readl(base + offset);
  294. }
  295. static void rk_iommu_write(void __iomem *base, u32 offset, u32 value)
  296. {
  297. writel(value, base + offset);
  298. }
  299. static void rk_iommu_command(struct rk_iommu *iommu, u32 command)
  300. {
  301. int i;
  302. for (i = 0; i < iommu->num_mmu; i++)
  303. writel(command, iommu->bases[i] + RK_MMU_COMMAND);
  304. }
  305. static void rk_iommu_base_command(void __iomem *base, u32 command)
  306. {
  307. writel(command, base + RK_MMU_COMMAND);
  308. }
  309. static void rk_iommu_zap_lines(struct rk_iommu *iommu, dma_addr_t iova_start,
  310. size_t size)
  311. {
  312. int i;
  313. dma_addr_t iova_end = iova_start + size;
  314. /*
  315. * TODO(djkurtz): Figure out when it is more efficient to shootdown the
  316. * entire iotlb rather than iterate over individual iovas.
  317. */
  318. for (i = 0; i < iommu->num_mmu; i++) {
  319. dma_addr_t iova;
  320. for (iova = iova_start; iova < iova_end; iova += SPAGE_SIZE)
  321. rk_iommu_write(iommu->bases[i], RK_MMU_ZAP_ONE_LINE, iova);
  322. }
  323. }
  324. static bool rk_iommu_is_stall_active(struct rk_iommu *iommu)
  325. {
  326. bool active = true;
  327. int i;
  328. for (i = 0; i < iommu->num_mmu; i++)
  329. active &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) &
  330. RK_MMU_STATUS_STALL_ACTIVE);
  331. return active;
  332. }
  333. static bool rk_iommu_is_paging_enabled(struct rk_iommu *iommu)
  334. {
  335. bool enable = true;
  336. int i;
  337. for (i = 0; i < iommu->num_mmu; i++)
  338. enable &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) &
  339. RK_MMU_STATUS_PAGING_ENABLED);
  340. return enable;
  341. }
  342. static bool rk_iommu_is_reset_done(struct rk_iommu *iommu)
  343. {
  344. bool done = true;
  345. int i;
  346. for (i = 0; i < iommu->num_mmu; i++)
  347. done &= rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR) == 0;
  348. return done;
  349. }
  350. static int rk_iommu_enable_stall(struct rk_iommu *iommu)
  351. {
  352. int ret, i;
  353. bool val;
  354. if (rk_iommu_is_stall_active(iommu))
  355. return 0;
  356. /* Stall can only be enabled if paging is enabled */
  357. if (!rk_iommu_is_paging_enabled(iommu))
  358. return 0;
  359. rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_STALL);
  360. ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val,
  361. val, RK_MMU_POLL_PERIOD_US,
  362. RK_MMU_POLL_TIMEOUT_US);
  363. if (ret)
  364. for (i = 0; i < iommu->num_mmu; i++)
  365. dev_err(iommu->dev, "Enable stall request timed out, status: %#08x\n",
  366. rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
  367. return ret;
  368. }
  369. static int rk_iommu_disable_stall(struct rk_iommu *iommu)
  370. {
  371. int ret, i;
  372. bool val;
  373. if (!rk_iommu_is_stall_active(iommu))
  374. return 0;
  375. rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_STALL);
  376. ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val,
  377. !val, RK_MMU_POLL_PERIOD_US,
  378. RK_MMU_POLL_TIMEOUT_US);
  379. if (ret)
  380. for (i = 0; i < iommu->num_mmu; i++)
  381. dev_err(iommu->dev, "Disable stall request timed out, status: %#08x\n",
  382. rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
  383. return ret;
  384. }
  385. static int rk_iommu_enable_paging(struct rk_iommu *iommu)
  386. {
  387. int ret, i;
  388. bool val;
  389. if (rk_iommu_is_paging_enabled(iommu))
  390. return 0;
  391. rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_PAGING);
  392. ret = readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val,
  393. val, RK_MMU_POLL_PERIOD_US,
  394. RK_MMU_POLL_TIMEOUT_US);
  395. if (ret)
  396. for (i = 0; i < iommu->num_mmu; i++)
  397. dev_err(iommu->dev, "Enable paging request timed out, status: %#08x\n",
  398. rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
  399. return ret;
  400. }
  401. static int rk_iommu_disable_paging(struct rk_iommu *iommu)
  402. {
  403. int ret, i;
  404. bool val;
  405. if (!rk_iommu_is_paging_enabled(iommu))
  406. return 0;
  407. rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_PAGING);
  408. ret = readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val,
  409. !val, RK_MMU_POLL_PERIOD_US,
  410. RK_MMU_POLL_TIMEOUT_US);
  411. if (ret)
  412. for (i = 0; i < iommu->num_mmu; i++)
  413. dev_err(iommu->dev, "Disable paging request timed out, status: %#08x\n",
  414. rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
  415. return ret;
  416. }
  417. static int rk_iommu_force_reset(struct rk_iommu *iommu)
  418. {
  419. int ret, i;
  420. u32 dte_addr;
  421. bool val;
  422. if (iommu->reset_disabled)
  423. return 0;
  424. /*
  425. * Check if register DTE_ADDR is working by writing DTE_ADDR_DUMMY
  426. * and verifying that upper 5 (v1) or 7 (v2) nybbles are read back.
  427. */
  428. for (i = 0; i < iommu->num_mmu; i++) {
  429. dte_addr = rk_ops->pt_address(DTE_ADDR_DUMMY);
  430. rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, dte_addr);
  431. if (dte_addr != rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR)) {
  432. dev_err(iommu->dev, "Error during raw reset. MMU_DTE_ADDR is not functioning\n");
  433. return -EFAULT;
  434. }
  435. }
  436. rk_iommu_command(iommu, RK_MMU_CMD_FORCE_RESET);
  437. ret = readx_poll_timeout(rk_iommu_is_reset_done, iommu, val,
  438. val, RK_MMU_FORCE_RESET_TIMEOUT_US,
  439. RK_MMU_POLL_TIMEOUT_US);
  440. if (ret) {
  441. dev_err(iommu->dev, "FORCE_RESET command timed out\n");
  442. return ret;
  443. }
  444. return 0;
  445. }
  446. static void log_iova(struct rk_iommu *iommu, int index, dma_addr_t iova)
  447. {
  448. void __iomem *base = iommu->bases[index];
  449. u32 dte_index, pte_index, page_offset;
  450. u32 mmu_dte_addr;
  451. phys_addr_t mmu_dte_addr_phys, dte_addr_phys;
  452. u32 *dte_addr;
  453. u32 dte;
  454. phys_addr_t pte_addr_phys = 0;
  455. u32 *pte_addr = NULL;
  456. u32 pte = 0;
  457. phys_addr_t page_addr_phys = 0;
  458. u32 page_flags = 0;
  459. dte_index = rk_iova_dte_index(iova);
  460. pte_index = rk_iova_pte_index(iova);
  461. page_offset = rk_iova_page_offset(iova);
  462. mmu_dte_addr = rk_iommu_read(base, RK_MMU_DTE_ADDR);
  463. mmu_dte_addr_phys = rk_ops->pt_address(mmu_dte_addr);
  464. dte_addr_phys = mmu_dte_addr_phys + (4 * dte_index);
  465. dte_addr = phys_to_virt(dte_addr_phys);
  466. dte = *dte_addr;
  467. if (!rk_dte_is_pt_valid(dte))
  468. goto print_it;
  469. pte_addr_phys = rk_ops->pt_address(dte) + (pte_index * 4);
  470. pte_addr = phys_to_virt(pte_addr_phys);
  471. pte = *pte_addr;
  472. if (!rk_pte_is_page_valid(pte))
  473. goto print_it;
  474. page_addr_phys = rk_ops->pt_address(pte) + page_offset;
  475. page_flags = pte & RK_PTE_PAGE_FLAGS_MASK;
  476. print_it:
  477. dev_err(iommu->dev, "iova = %pad: dte_index: %#03x pte_index: %#03x page_offset: %#03x\n",
  478. &iova, dte_index, pte_index, page_offset);
  479. dev_err(iommu->dev, "mmu_dte_addr: %pa dte@%pa: %#08x valid: %u pte@%pa: %#08x valid: %u page@%pa flags: %#03x\n",
  480. &mmu_dte_addr_phys, &dte_addr_phys, dte,
  481. rk_dte_is_pt_valid(dte), &pte_addr_phys, pte,
  482. rk_pte_is_page_valid(pte), &page_addr_phys, page_flags);
  483. }
  484. static irqreturn_t rk_iommu_irq(int irq, void *dev_id)
  485. {
  486. struct rk_iommu *iommu = dev_id;
  487. u32 status;
  488. u32 int_status;
  489. dma_addr_t iova;
  490. irqreturn_t ret = IRQ_NONE;
  491. int i, err;
  492. err = pm_runtime_get_if_in_use(iommu->dev);
  493. if (!err || WARN_ON_ONCE(err < 0))
  494. return ret;
  495. if (WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks)))
  496. goto out;
  497. for (i = 0; i < iommu->num_mmu; i++) {
  498. int_status = rk_iommu_read(iommu->bases[i], RK_MMU_INT_STATUS);
  499. if (int_status == 0)
  500. continue;
  501. ret = IRQ_HANDLED;
  502. iova = rk_iommu_read(iommu->bases[i], RK_MMU_PAGE_FAULT_ADDR);
  503. if (int_status & RK_MMU_IRQ_PAGE_FAULT) {
  504. int flags;
  505. status = rk_iommu_read(iommu->bases[i], RK_MMU_STATUS);
  506. flags = (status & RK_MMU_STATUS_PAGE_FAULT_IS_WRITE) ?
  507. IOMMU_FAULT_WRITE : IOMMU_FAULT_READ;
  508. dev_err(iommu->dev, "Page fault at %pad of type %s\n",
  509. &iova,
  510. (flags == IOMMU_FAULT_WRITE) ? "write" : "read");
  511. log_iova(iommu, i, iova);
  512. /*
  513. * Report page fault to any installed handlers.
  514. * Ignore the return code, though, since we always zap cache
  515. * and clear the page fault anyway.
  516. */
  517. if (iommu->domain != &rk_identity_domain)
  518. report_iommu_fault(iommu->domain, iommu->dev, iova,
  519. flags);
  520. else
  521. dev_err(iommu->dev, "Page fault while iommu not attached to domain?\n");
  522. rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
  523. rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_PAGE_FAULT_DONE);
  524. }
  525. if (int_status & RK_MMU_IRQ_BUS_ERROR)
  526. dev_err(iommu->dev, "BUS_ERROR occurred at %pad\n", &iova);
  527. if (int_status & ~RK_MMU_IRQ_MASK)
  528. dev_err(iommu->dev, "unexpected int_status: %#08x\n",
  529. int_status);
  530. rk_iommu_write(iommu->bases[i], RK_MMU_INT_CLEAR, int_status);
  531. }
  532. clk_bulk_disable(iommu->num_clocks, iommu->clocks);
  533. out:
  534. pm_runtime_put(iommu->dev);
  535. return ret;
  536. }
  537. static phys_addr_t rk_iommu_iova_to_phys(struct iommu_domain *domain,
  538. dma_addr_t iova)
  539. {
  540. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  541. unsigned long flags;
  542. phys_addr_t pt_phys, phys = 0;
  543. u32 dte, pte;
  544. u32 *page_table;
  545. spin_lock_irqsave(&rk_domain->dt_lock, flags);
  546. dte = rk_domain->dt[rk_iova_dte_index(iova)];
  547. if (!rk_dte_is_pt_valid(dte))
  548. goto out;
  549. pt_phys = rk_ops->pt_address(dte);
  550. page_table = (u32 *)phys_to_virt(pt_phys);
  551. pte = page_table[rk_iova_pte_index(iova)];
  552. if (!rk_pte_is_page_valid(pte))
  553. goto out;
  554. phys = rk_ops->pt_address(pte) + rk_iova_page_offset(iova);
  555. out:
  556. spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
  557. return phys;
  558. }
  559. static void rk_iommu_zap_iova(struct rk_iommu_domain *rk_domain,
  560. dma_addr_t iova, size_t size)
  561. {
  562. struct list_head *pos;
  563. unsigned long flags;
  564. /* shootdown these iova from all iommus using this domain */
  565. spin_lock_irqsave(&rk_domain->iommus_lock, flags);
  566. list_for_each(pos, &rk_domain->iommus) {
  567. struct rk_iommu *iommu;
  568. int ret;
  569. iommu = list_entry(pos, struct rk_iommu, node);
  570. /* Only zap TLBs of IOMMUs that are powered on. */
  571. ret = pm_runtime_get_if_in_use(iommu->dev);
  572. if (WARN_ON_ONCE(ret < 0))
  573. continue;
  574. if (ret) {
  575. WARN_ON(clk_bulk_enable(iommu->num_clocks,
  576. iommu->clocks));
  577. rk_iommu_zap_lines(iommu, iova, size);
  578. clk_bulk_disable(iommu->num_clocks, iommu->clocks);
  579. pm_runtime_put(iommu->dev);
  580. }
  581. }
  582. spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
  583. }
  584. static void rk_iommu_zap_iova_first_last(struct rk_iommu_domain *rk_domain,
  585. dma_addr_t iova, size_t size)
  586. {
  587. rk_iommu_zap_iova(rk_domain, iova, SPAGE_SIZE);
  588. if (size > SPAGE_SIZE)
  589. rk_iommu_zap_iova(rk_domain, iova + size - SPAGE_SIZE,
  590. SPAGE_SIZE);
  591. }
  592. static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain,
  593. dma_addr_t iova)
  594. {
  595. u32 *page_table, *dte_addr;
  596. u32 dte_index, dte;
  597. phys_addr_t pt_phys;
  598. dma_addr_t pt_dma;
  599. assert_spin_locked(&rk_domain->dt_lock);
  600. dte_index = rk_iova_dte_index(iova);
  601. dte_addr = &rk_domain->dt[dte_index];
  602. dte = *dte_addr;
  603. if (rk_dte_is_pt_valid(dte))
  604. goto done;
  605. page_table = iommu_alloc_page(GFP_ATOMIC | rk_ops->gfp_flags);
  606. if (!page_table)
  607. return ERR_PTR(-ENOMEM);
  608. pt_dma = dma_map_single(dma_dev, page_table, SPAGE_SIZE, DMA_TO_DEVICE);
  609. if (dma_mapping_error(dma_dev, pt_dma)) {
  610. dev_err(dma_dev, "DMA mapping error while allocating page table\n");
  611. iommu_free_page(page_table);
  612. return ERR_PTR(-ENOMEM);
  613. }
  614. dte = rk_ops->mk_dtentries(pt_dma);
  615. *dte_addr = dte;
  616. rk_table_flush(rk_domain,
  617. rk_domain->dt_dma + dte_index * sizeof(u32), 1);
  618. done:
  619. pt_phys = rk_ops->pt_address(dte);
  620. return (u32 *)phys_to_virt(pt_phys);
  621. }
  622. static size_t rk_iommu_unmap_iova(struct rk_iommu_domain *rk_domain,
  623. u32 *pte_addr, dma_addr_t pte_dma,
  624. size_t size)
  625. {
  626. unsigned int pte_count;
  627. unsigned int pte_total = size / SPAGE_SIZE;
  628. assert_spin_locked(&rk_domain->dt_lock);
  629. for (pte_count = 0; pte_count < pte_total; pte_count++) {
  630. u32 pte = pte_addr[pte_count];
  631. if (!rk_pte_is_page_valid(pte))
  632. break;
  633. pte_addr[pte_count] = rk_mk_pte_invalid(pte);
  634. }
  635. rk_table_flush(rk_domain, pte_dma, pte_count);
  636. return pte_count * SPAGE_SIZE;
  637. }
  638. static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr,
  639. dma_addr_t pte_dma, dma_addr_t iova,
  640. phys_addr_t paddr, size_t size, int prot)
  641. {
  642. unsigned int pte_count;
  643. unsigned int pte_total = size / SPAGE_SIZE;
  644. phys_addr_t page_phys;
  645. assert_spin_locked(&rk_domain->dt_lock);
  646. for (pte_count = 0; pte_count < pte_total; pte_count++) {
  647. u32 pte = pte_addr[pte_count];
  648. if (rk_pte_is_page_valid(pte))
  649. goto unwind;
  650. pte_addr[pte_count] = rk_ops->mk_ptentries(paddr, prot);
  651. paddr += SPAGE_SIZE;
  652. }
  653. rk_table_flush(rk_domain, pte_dma, pte_total);
  654. /*
  655. * Zap the first and last iova to evict from iotlb any previously
  656. * mapped cachelines holding stale values for its dte and pte.
  657. * We only zap the first and last iova, since only they could have
  658. * dte or pte shared with an existing mapping.
  659. */
  660. rk_iommu_zap_iova_first_last(rk_domain, iova, size);
  661. return 0;
  662. unwind:
  663. /* Unmap the range of iovas that we just mapped */
  664. rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma,
  665. pte_count * SPAGE_SIZE);
  666. iova += pte_count * SPAGE_SIZE;
  667. page_phys = rk_ops->pt_address(pte_addr[pte_count]);
  668. pr_err("iova: %pad already mapped to %pa cannot remap to phys: %pa prot: %#x\n",
  669. &iova, &page_phys, &paddr, prot);
  670. return -EADDRINUSE;
  671. }
  672. static int rk_iommu_map(struct iommu_domain *domain, unsigned long _iova,
  673. phys_addr_t paddr, size_t size, size_t count,
  674. int prot, gfp_t gfp, size_t *mapped)
  675. {
  676. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  677. unsigned long flags;
  678. dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
  679. u32 *page_table, *pte_addr;
  680. u32 dte_index, pte_index;
  681. int ret;
  682. spin_lock_irqsave(&rk_domain->dt_lock, flags);
  683. /*
  684. * pgsize_bitmap specifies iova sizes that fit in one page table
  685. * (1024 4-KiB pages = 4 MiB).
  686. * So, size will always be 4096 <= size <= 4194304.
  687. * Since iommu_map() guarantees that both iova and size will be
  688. * aligned, we will always only be mapping from a single dte here.
  689. */
  690. page_table = rk_dte_get_page_table(rk_domain, iova);
  691. if (IS_ERR(page_table)) {
  692. spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
  693. return PTR_ERR(page_table);
  694. }
  695. dte_index = rk_domain->dt[rk_iova_dte_index(iova)];
  696. pte_index = rk_iova_pte_index(iova);
  697. pte_addr = &page_table[pte_index];
  698. pte_dma = rk_ops->pt_address(dte_index) + pte_index * sizeof(u32);
  699. ret = rk_iommu_map_iova(rk_domain, pte_addr, pte_dma, iova,
  700. paddr, size, prot);
  701. spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
  702. if (!ret)
  703. *mapped = size;
  704. return ret;
  705. }
  706. static size_t rk_iommu_unmap(struct iommu_domain *domain, unsigned long _iova,
  707. size_t size, size_t count, struct iommu_iotlb_gather *gather)
  708. {
  709. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  710. unsigned long flags;
  711. dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
  712. phys_addr_t pt_phys;
  713. u32 dte;
  714. u32 *pte_addr;
  715. size_t unmap_size;
  716. spin_lock_irqsave(&rk_domain->dt_lock, flags);
  717. /*
  718. * pgsize_bitmap specifies iova sizes that fit in one page table
  719. * (1024 4-KiB pages = 4 MiB).
  720. * So, size will always be 4096 <= size <= 4194304.
  721. * Since iommu_unmap() guarantees that both iova and size will be
  722. * aligned, we will always only be unmapping from a single dte here.
  723. */
  724. dte = rk_domain->dt[rk_iova_dte_index(iova)];
  725. /* Just return 0 if iova is unmapped */
  726. if (!rk_dte_is_pt_valid(dte)) {
  727. spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
  728. return 0;
  729. }
  730. pt_phys = rk_ops->pt_address(dte);
  731. pte_addr = (u32 *)phys_to_virt(pt_phys) + rk_iova_pte_index(iova);
  732. pte_dma = pt_phys + rk_iova_pte_index(iova) * sizeof(u32);
  733. unmap_size = rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, size);
  734. spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
  735. /* Shootdown iotlb entries for iova range that was just unmapped */
  736. rk_iommu_zap_iova(rk_domain, iova, unmap_size);
  737. return unmap_size;
  738. }
  739. static struct rk_iommu *rk_iommu_from_dev(struct device *dev)
  740. {
  741. struct rk_iommudata *data = dev_iommu_priv_get(dev);
  742. return data ? data->iommu : NULL;
  743. }
  744. /* Must be called with iommu powered on and attached */
  745. static void rk_iommu_disable(struct rk_iommu *iommu)
  746. {
  747. int i;
  748. /* Ignore error while disabling, just keep going */
  749. WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks));
  750. rk_iommu_enable_stall(iommu);
  751. rk_iommu_disable_paging(iommu);
  752. for (i = 0; i < iommu->num_mmu; i++) {
  753. rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, 0);
  754. rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, 0);
  755. }
  756. rk_iommu_disable_stall(iommu);
  757. clk_bulk_disable(iommu->num_clocks, iommu->clocks);
  758. }
  759. /* Must be called with iommu powered on and attached */
  760. static int rk_iommu_enable(struct rk_iommu *iommu)
  761. {
  762. struct iommu_domain *domain = iommu->domain;
  763. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  764. int ret, i;
  765. ret = clk_bulk_enable(iommu->num_clocks, iommu->clocks);
  766. if (ret)
  767. return ret;
  768. ret = rk_iommu_enable_stall(iommu);
  769. if (ret)
  770. goto out_disable_clocks;
  771. ret = rk_iommu_force_reset(iommu);
  772. if (ret)
  773. goto out_disable_stall;
  774. for (i = 0; i < iommu->num_mmu; i++) {
  775. rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR,
  776. rk_ops->mk_dtentries(rk_domain->dt_dma));
  777. rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
  778. rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK);
  779. }
  780. ret = rk_iommu_enable_paging(iommu);
  781. out_disable_stall:
  782. rk_iommu_disable_stall(iommu);
  783. out_disable_clocks:
  784. clk_bulk_disable(iommu->num_clocks, iommu->clocks);
  785. return ret;
  786. }
  787. static int rk_iommu_identity_attach(struct iommu_domain *identity_domain,
  788. struct device *dev)
  789. {
  790. struct rk_iommu *iommu;
  791. struct rk_iommu_domain *rk_domain;
  792. unsigned long flags;
  793. int ret;
  794. /* Allow 'virtual devices' (eg drm) to detach from domain */
  795. iommu = rk_iommu_from_dev(dev);
  796. if (!iommu)
  797. return -ENODEV;
  798. rk_domain = to_rk_domain(iommu->domain);
  799. dev_dbg(dev, "Detaching from iommu domain\n");
  800. if (iommu->domain == identity_domain)
  801. return 0;
  802. iommu->domain = identity_domain;
  803. spin_lock_irqsave(&rk_domain->iommus_lock, flags);
  804. list_del_init(&iommu->node);
  805. spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
  806. ret = pm_runtime_get_if_in_use(iommu->dev);
  807. WARN_ON_ONCE(ret < 0);
  808. if (ret > 0) {
  809. rk_iommu_disable(iommu);
  810. pm_runtime_put(iommu->dev);
  811. }
  812. return 0;
  813. }
  814. static struct iommu_domain_ops rk_identity_ops = {
  815. .attach_dev = rk_iommu_identity_attach,
  816. };
  817. static struct iommu_domain rk_identity_domain = {
  818. .type = IOMMU_DOMAIN_IDENTITY,
  819. .ops = &rk_identity_ops,
  820. };
  821. static int rk_iommu_attach_device(struct iommu_domain *domain,
  822. struct device *dev)
  823. {
  824. struct rk_iommu *iommu;
  825. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  826. unsigned long flags;
  827. int ret;
  828. /*
  829. * Allow 'virtual devices' (e.g., drm) to attach to domain.
  830. * Such a device does not belong to an iommu group.
  831. */
  832. iommu = rk_iommu_from_dev(dev);
  833. if (!iommu)
  834. return 0;
  835. dev_dbg(dev, "Attaching to iommu domain\n");
  836. /* iommu already attached */
  837. if (iommu->domain == domain)
  838. return 0;
  839. ret = rk_iommu_identity_attach(&rk_identity_domain, dev);
  840. if (ret)
  841. return ret;
  842. iommu->domain = domain;
  843. spin_lock_irqsave(&rk_domain->iommus_lock, flags);
  844. list_add_tail(&iommu->node, &rk_domain->iommus);
  845. spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
  846. ret = pm_runtime_get_if_in_use(iommu->dev);
  847. if (!ret || WARN_ON_ONCE(ret < 0))
  848. return 0;
  849. ret = rk_iommu_enable(iommu);
  850. if (ret)
  851. WARN_ON(rk_iommu_identity_attach(&rk_identity_domain, dev));
  852. pm_runtime_put(iommu->dev);
  853. return ret;
  854. }
  855. static struct iommu_domain *rk_iommu_domain_alloc_paging(struct device *dev)
  856. {
  857. struct rk_iommu_domain *rk_domain;
  858. if (!dma_dev)
  859. return NULL;
  860. rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL);
  861. if (!rk_domain)
  862. return NULL;
  863. /*
  864. * rk32xx iommus use a 2 level pagetable.
  865. * Each level1 (dt) and level2 (pt) table has 1024 4-byte entries.
  866. * Allocate one 4 KiB page for each table.
  867. */
  868. rk_domain->dt = iommu_alloc_page(GFP_KERNEL | rk_ops->gfp_flags);
  869. if (!rk_domain->dt)
  870. goto err_free_domain;
  871. rk_domain->dt_dma = dma_map_single(dma_dev, rk_domain->dt,
  872. SPAGE_SIZE, DMA_TO_DEVICE);
  873. if (dma_mapping_error(dma_dev, rk_domain->dt_dma)) {
  874. dev_err(dma_dev, "DMA map error for DT\n");
  875. goto err_free_dt;
  876. }
  877. spin_lock_init(&rk_domain->iommus_lock);
  878. spin_lock_init(&rk_domain->dt_lock);
  879. INIT_LIST_HEAD(&rk_domain->iommus);
  880. rk_domain->domain.geometry.aperture_start = 0;
  881. rk_domain->domain.geometry.aperture_end = DMA_BIT_MASK(32);
  882. rk_domain->domain.geometry.force_aperture = true;
  883. return &rk_domain->domain;
  884. err_free_dt:
  885. iommu_free_page(rk_domain->dt);
  886. err_free_domain:
  887. kfree(rk_domain);
  888. return NULL;
  889. }
  890. static void rk_iommu_domain_free(struct iommu_domain *domain)
  891. {
  892. struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
  893. int i;
  894. WARN_ON(!list_empty(&rk_domain->iommus));
  895. for (i = 0; i < NUM_DT_ENTRIES; i++) {
  896. u32 dte = rk_domain->dt[i];
  897. if (rk_dte_is_pt_valid(dte)) {
  898. phys_addr_t pt_phys = rk_ops->pt_address(dte);
  899. u32 *page_table = phys_to_virt(pt_phys);
  900. dma_unmap_single(dma_dev, pt_phys,
  901. SPAGE_SIZE, DMA_TO_DEVICE);
  902. iommu_free_page(page_table);
  903. }
  904. }
  905. dma_unmap_single(dma_dev, rk_domain->dt_dma,
  906. SPAGE_SIZE, DMA_TO_DEVICE);
  907. iommu_free_page(rk_domain->dt);
  908. kfree(rk_domain);
  909. }
  910. static struct iommu_device *rk_iommu_probe_device(struct device *dev)
  911. {
  912. struct rk_iommudata *data;
  913. struct rk_iommu *iommu;
  914. data = dev_iommu_priv_get(dev);
  915. if (!data)
  916. return ERR_PTR(-ENODEV);
  917. iommu = rk_iommu_from_dev(dev);
  918. data->link = device_link_add(dev, iommu->dev,
  919. DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
  920. return &iommu->iommu;
  921. }
  922. static void rk_iommu_release_device(struct device *dev)
  923. {
  924. struct rk_iommudata *data = dev_iommu_priv_get(dev);
  925. device_link_del(data->link);
  926. }
  927. static int rk_iommu_of_xlate(struct device *dev,
  928. const struct of_phandle_args *args)
  929. {
  930. struct platform_device *iommu_dev;
  931. struct rk_iommudata *data;
  932. data = devm_kzalloc(dma_dev, sizeof(*data), GFP_KERNEL);
  933. if (!data)
  934. return -ENOMEM;
  935. iommu_dev = of_find_device_by_node(args->np);
  936. data->iommu = platform_get_drvdata(iommu_dev);
  937. dev_iommu_priv_set(dev, data);
  938. platform_device_put(iommu_dev);
  939. return 0;
  940. }
  941. static const struct iommu_ops rk_iommu_ops = {
  942. .identity_domain = &rk_identity_domain,
  943. .domain_alloc_paging = rk_iommu_domain_alloc_paging,
  944. .probe_device = rk_iommu_probe_device,
  945. .release_device = rk_iommu_release_device,
  946. .device_group = generic_single_device_group,
  947. .pgsize_bitmap = RK_IOMMU_PGSIZE_BITMAP,
  948. .of_xlate = rk_iommu_of_xlate,
  949. .default_domain_ops = &(const struct iommu_domain_ops) {
  950. .attach_dev = rk_iommu_attach_device,
  951. .map_pages = rk_iommu_map,
  952. .unmap_pages = rk_iommu_unmap,
  953. .iova_to_phys = rk_iommu_iova_to_phys,
  954. .free = rk_iommu_domain_free,
  955. }
  956. };
  957. static int rk_iommu_probe(struct platform_device *pdev)
  958. {
  959. struct device *dev = &pdev->dev;
  960. struct rk_iommu *iommu;
  961. struct resource *res;
  962. const struct rk_iommu_ops *ops;
  963. int num_res = pdev->num_resources;
  964. int err, i;
  965. iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL);
  966. if (!iommu)
  967. return -ENOMEM;
  968. iommu->domain = &rk_identity_domain;
  969. platform_set_drvdata(pdev, iommu);
  970. iommu->dev = dev;
  971. iommu->num_mmu = 0;
  972. ops = of_device_get_match_data(dev);
  973. if (!rk_ops)
  974. rk_ops = ops;
  975. /*
  976. * That should not happen unless different versions of the
  977. * hardware block are embedded the same SoC
  978. */
  979. if (WARN_ON(rk_ops != ops))
  980. return -EINVAL;
  981. iommu->bases = devm_kcalloc(dev, num_res, sizeof(*iommu->bases),
  982. GFP_KERNEL);
  983. if (!iommu->bases)
  984. return -ENOMEM;
  985. for (i = 0; i < num_res; i++) {
  986. res = platform_get_resource(pdev, IORESOURCE_MEM, i);
  987. if (!res)
  988. continue;
  989. iommu->bases[i] = devm_ioremap_resource(&pdev->dev, res);
  990. if (IS_ERR(iommu->bases[i]))
  991. continue;
  992. iommu->num_mmu++;
  993. }
  994. if (iommu->num_mmu == 0)
  995. return PTR_ERR(iommu->bases[0]);
  996. iommu->num_irq = platform_irq_count(pdev);
  997. if (iommu->num_irq < 0)
  998. return iommu->num_irq;
  999. iommu->reset_disabled = device_property_read_bool(dev,
  1000. "rockchip,disable-mmu-reset");
  1001. iommu->num_clocks = ARRAY_SIZE(rk_iommu_clocks);
  1002. iommu->clocks = devm_kcalloc(iommu->dev, iommu->num_clocks,
  1003. sizeof(*iommu->clocks), GFP_KERNEL);
  1004. if (!iommu->clocks)
  1005. return -ENOMEM;
  1006. for (i = 0; i < iommu->num_clocks; ++i)
  1007. iommu->clocks[i].id = rk_iommu_clocks[i];
  1008. /*
  1009. * iommu clocks should be present for all new devices and devicetrees
  1010. * but there are older devicetrees without clocks out in the wild.
  1011. * So clocks as optional for the time being.
  1012. */
  1013. err = devm_clk_bulk_get(iommu->dev, iommu->num_clocks, iommu->clocks);
  1014. if (err == -ENOENT)
  1015. iommu->num_clocks = 0;
  1016. else if (err)
  1017. return err;
  1018. err = clk_bulk_prepare(iommu->num_clocks, iommu->clocks);
  1019. if (err)
  1020. return err;
  1021. err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev));
  1022. if (err)
  1023. goto err_unprepare_clocks;
  1024. err = iommu_device_register(&iommu->iommu, &rk_iommu_ops, dev);
  1025. if (err)
  1026. goto err_remove_sysfs;
  1027. /*
  1028. * Use the first registered IOMMU device for domain to use with DMA
  1029. * API, since a domain might not physically correspond to a single
  1030. * IOMMU device..
  1031. */
  1032. if (!dma_dev)
  1033. dma_dev = &pdev->dev;
  1034. pm_runtime_enable(dev);
  1035. for (i = 0; i < iommu->num_irq; i++) {
  1036. int irq = platform_get_irq(pdev, i);
  1037. if (irq < 0) {
  1038. err = irq;
  1039. goto err_pm_disable;
  1040. }
  1041. err = devm_request_irq(iommu->dev, irq, rk_iommu_irq,
  1042. IRQF_SHARED, dev_name(dev), iommu);
  1043. if (err)
  1044. goto err_pm_disable;
  1045. }
  1046. dma_set_mask_and_coherent(dev, rk_ops->dma_bit_mask);
  1047. return 0;
  1048. err_pm_disable:
  1049. pm_runtime_disable(dev);
  1050. err_remove_sysfs:
  1051. iommu_device_sysfs_remove(&iommu->iommu);
  1052. err_unprepare_clocks:
  1053. clk_bulk_unprepare(iommu->num_clocks, iommu->clocks);
  1054. return err;
  1055. }
  1056. static void rk_iommu_shutdown(struct platform_device *pdev)
  1057. {
  1058. struct rk_iommu *iommu = platform_get_drvdata(pdev);
  1059. int i;
  1060. for (i = 0; i < iommu->num_irq; i++) {
  1061. int irq = platform_get_irq(pdev, i);
  1062. devm_free_irq(iommu->dev, irq, iommu);
  1063. }
  1064. pm_runtime_force_suspend(&pdev->dev);
  1065. }
  1066. static int __maybe_unused rk_iommu_suspend(struct device *dev)
  1067. {
  1068. struct rk_iommu *iommu = dev_get_drvdata(dev);
  1069. if (iommu->domain == &rk_identity_domain)
  1070. return 0;
  1071. rk_iommu_disable(iommu);
  1072. return 0;
  1073. }
  1074. static int __maybe_unused rk_iommu_resume(struct device *dev)
  1075. {
  1076. struct rk_iommu *iommu = dev_get_drvdata(dev);
  1077. if (iommu->domain == &rk_identity_domain)
  1078. return 0;
  1079. return rk_iommu_enable(iommu);
  1080. }
  1081. static const struct dev_pm_ops rk_iommu_pm_ops = {
  1082. SET_RUNTIME_PM_OPS(rk_iommu_suspend, rk_iommu_resume, NULL)
  1083. SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
  1084. pm_runtime_force_resume)
  1085. };
  1086. static struct rk_iommu_ops iommu_data_ops_v1 = {
  1087. .pt_address = &rk_dte_pt_address,
  1088. .mk_dtentries = &rk_mk_dte,
  1089. .mk_ptentries = &rk_mk_pte,
  1090. .dma_bit_mask = DMA_BIT_MASK(32),
  1091. .gfp_flags = GFP_DMA32,
  1092. };
  1093. static struct rk_iommu_ops iommu_data_ops_v2 = {
  1094. .pt_address = &rk_dte_pt_address_v2,
  1095. .mk_dtentries = &rk_mk_dte_v2,
  1096. .mk_ptentries = &rk_mk_pte_v2,
  1097. .dma_bit_mask = DMA_BIT_MASK(40),
  1098. .gfp_flags = 0,
  1099. };
  1100. static const struct of_device_id rk_iommu_dt_ids[] = {
  1101. { .compatible = "rockchip,iommu",
  1102. .data = &iommu_data_ops_v1,
  1103. },
  1104. { .compatible = "rockchip,rk3568-iommu",
  1105. .data = &iommu_data_ops_v2,
  1106. },
  1107. { /* sentinel */ }
  1108. };
  1109. static struct platform_driver rk_iommu_driver = {
  1110. .probe = rk_iommu_probe,
  1111. .shutdown = rk_iommu_shutdown,
  1112. .driver = {
  1113. .name = "rk_iommu",
  1114. .of_match_table = rk_iommu_dt_ids,
  1115. .pm = &rk_iommu_pm_ops,
  1116. .suppress_bind_attrs = true,
  1117. },
  1118. };
  1119. builtin_platform_driver(rk_iommu_driver);