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 
9 #include <soc/rockchip/rockchip_iommu.h>
10 
11 #include <linux/clk.h>
12 #include <linux/compiler.h>
13 #include <linux/delay.h>
14 #include <linux/device.h>
15 #include <linux/dma-iommu.h>
16 #include <linux/dma-mapping.h>
17 #include <linux/errno.h>
18 #include <linux/interrupt.h>
19 #include <linux/io.h>
20 #include <linux/iommu.h>
21 #include <linux/iopoll.h>
22 #include <linux/list.h>
23 #include <linux/mm.h>
24 #include <linux/module.h>
25 #include <linux/init.h>
26 #include <linux/of.h>
27 #include <linux/of_iommu.h>
28 #include <linux/of_platform.h>
29 #include <linux/platform_device.h>
30 #include <linux/pm_runtime.h>
31 #include <linux/slab.h>
32 #include <linux/spinlock.h>
33 
34 /** MMU register offsets */
35 #define RK_MMU_DTE_ADDR 0x00 /* Directory table address */
36 #define RK_MMU_STATUS 0x04
37 #define RK_MMU_COMMAND 0x08
38 #define RK_MMU_PAGE_FAULT_ADDR 0x0C /* IOVA of last page fault */
39 #define RK_MMU_ZAP_ONE_LINE 0x10    /* Shootdown one IOTLB entry */
40 #define RK_MMU_INT_RAWSTAT 0x14     /* IRQ status ignoring mask */
41 #define RK_MMU_INT_CLEAR 0x18       /* Acknowledge and re-arm irq */
42 #define RK_MMU_INT_MASK 0x1C        /* IRQ enable */
43 #define RK_MMU_INT_STATUS 0x20      /* IRQ status after masking */
44 #define RK_MMU_AUTO_GATING 0x24
45 
46 #define DTE_ADDR_DUMMY 0xCAFEBABE
47 
48 #define RK_MMU_POLL_PERIOD_US 100
49 #define RK_MMU_FORCE_RESET_TIMEOUT_US 100000
50 #define RK_MMU_POLL_TIMEOUT_US 1000
51 
52 /* RK_MMU_STATUS fields */
53 #define RK_MMU_STATUS_PAGING_ENABLED BIT(0)
54 #define RK_MMU_STATUS_PAGE_FAULT_ACTIVE BIT(1)
55 #define RK_MMU_STATUS_STALL_ACTIVE BIT(2)
56 #define RK_MMU_STATUS_IDLE BIT(3)
57 #define RK_MMU_STATUS_REPLAY_BUFFER_EMPTY BIT(4)
58 #define RK_MMU_STATUS_PAGE_FAULT_IS_WRITE BIT(5)
59 #define RK_MMU_STATUS_STALL_NOT_ACTIVE BIT(31)
60 
61 /* RK_MMU_COMMAND command values */
62 #define RK_MMU_CMD_ENABLE_PAGING 0   /* Enable memory translation */
63 #define RK_MMU_CMD_DISABLE_PAGING 1  /* Disable memory translation */
64 #define RK_MMU_CMD_ENABLE_STALL 2    /* Stall paging to allow other cmds */
65 #define RK_MMU_CMD_DISABLE_STALL 3   /* Stop stall re-enables paging */
66 #define RK_MMU_CMD_ZAP_CACHE 4       /* Shoot down entire IOTLB */
67 #define RK_MMU_CMD_PAGE_FAULT_DONE 5 /* Clear page fault */
68 #define RK_MMU_CMD_FORCE_RESET 6     /* Reset all registers */
69 
70 /* RK_MMU_INT_* register fields */
71 #define RK_MMU_IRQ_PAGE_FAULT 0x01 /* page fault */
72 #define RK_MMU_IRQ_BUS_ERROR 0x02  /* bus read error */
73 #define RK_MMU_IRQ_MASK (RK_MMU_IRQ_PAGE_FAULT | RK_MMU_IRQ_BUS_ERROR)
74 
75 #define NUM_DT_ENTRIES 1024
76 #define NUM_PT_ENTRIES 1024
77 
78 #define SPAGE_ORDER 12
79 #define SPAGE_SIZE (1 << SPAGE_ORDER)
80 
81 #define DISABLE_FETCH_DTE_TIME_LIMIT BIT(31)
82 
83 #define CMD_RETRY_COUNT 10
84 
85 /*
86  * Support mapping any size that fits in one page table:
87  *   4 KiB to 4 MiB
88  */
89 #define RK_IOMMU_PGSIZE_BITMAP 0x007ff000
90 
91 #define DT_LO_MASK 0xfffff000
92 #define DT_HI_MASK GENMASK_ULL(39, 32)
93 #define DT_SHIFT 28
94 
95 #define DTE_BASE_HI_MASK GENMASK(11, 4)
96 
97 #define PAGE_DESC_LO_MASK 0xfffff000
98 #define PAGE_DESC_HI1_LOWER 32
99 #define PAGE_DESC_HI1_UPPER 35
100 #define PAGE_DESC_HI2_LOWER 36
101 #define PAGE_DESC_HI2_UPPER 39
102 #define PAGE_DESC_HI_MASK1 GENMASK_ULL(PAGE_DESC_HI1_UPPER, PAGE_DESC_HI1_LOWER)
103 #define PAGE_DESC_HI_MASK2 GENMASK_ULL(PAGE_DESC_HI2_UPPER, PAGE_DESC_HI2_LOWER)
104 
105 #define DTE_HI1_LOWER 8
106 #define DTE_HI1_UPPER 11
107 #define DTE_HI2_LOWER 4
108 #define DTE_HI2_UPPER 7
109 #define DTE_HI_MASK1 GENMASK(DTE_HI1_UPPER, DTE_HI1_LOWER)
110 #define DTE_HI_MASK2 GENMASK(DTE_HI2_UPPER, DTE_HI2_LOWER)
111 
112 #define PAGE_DESC_HI_SHIFT1 (PAGE_DESC_HI1_LOWER - DTE_HI1_LOWER)
113 #define PAGE_DESC_HI_SHIFT2 (PAGE_DESC_HI2_LOWER - DTE_HI2_LOWER)
114 
115 #define RK_IOMMU_VERSION_CMP 0x02
116 #define RK_ADDR_PHYS_MUL 4
117 #define RK_DMA_BIT_MASK 32
118 
119 struct rk_iommu_domain {
120     struct list_head iommus;
121     u32 *dt; /* page directory table */
122     dma_addr_t dt_dma;
123     spinlock_t iommus_lock; /* lock for iommus list */
124     spinlock_t dt_lock;     /* lock for modifying page directory table */
125     bool shootdown_entire;
126 
127     struct iommu_domain domain;
128 };
129 
130 struct rockchip_iommu_data {
131     u32 version;
132 };
133 
134 struct rk_iommu {
135     struct device *dev;
136     void __iomem **bases;
137     int num_mmu;
138     int num_irq;
139     struct clk_bulk_data *clocks;
140     int num_clocks;
141     bool reset_disabled;
142     bool skip_read;   /* rk3126/rk3128 can't read vop iommu registers */
143     bool dlr_disable; /* avoid access iommu when runtime ops called */
144     bool cmd_retry;
145     struct iommu_device iommu;
146     struct list_head node;       /* entry in rk_iommu_domain.iommus */
147     struct iommu_domain *domain; /* domain to which iommu is attached */
148     struct iommu_group *group;
149     u32 version;
150     bool shootdown_entire;
151 };
152 
153 struct rk_iommudata {
154     struct device_link *link; /* runtime PM link from IOMMU to master */
155     struct rk_iommu *iommu;
156     bool defer_attach;
157 };
158 
159 static struct device *dma_dev;
160 
rk_table_flush(struct rk_iommu_domain *dom, dma_addr_t dma, unsigned int count)161 static inline void rk_table_flush(struct rk_iommu_domain *dom, dma_addr_t dma, unsigned int count)
162 {
163     size_t size = count * sizeof(u32); /* count of u32 entry */
164 
165     dma_sync_single_for_device(dma_dev, dma, size, DMA_TO_DEVICE);
166 }
167 
to_rk_domain(struct iommu_domain *dom)168 static struct rk_iommu_domain *to_rk_domain(struct iommu_domain *dom)
169 {
170     return container_of(dom, struct rk_iommu_domain, domain);
171 }
172 
173 /*
174  * The Rockchip rk3288 iommu uses a 2-level page table.
175  * The first level is the "Directory Table" (DT).
176  * The DT consists of 1024 4-byte Directory Table Entries (DTEs), each pointing
177  * to a "Page Table".
178  * The second level is the 1024 Page Tables (PT).
179  * Each PT consists of 1024 4-byte Page Table Entries (PTEs), each pointing to
180  * a 4 KB page of physical memory.
181  *
182  * The DT and each PT fits in a single 4 KB page (4-bytes * 1024 entries).
183  * Each iommu device has a MMU_DTE_ADDR register that contains the physical
184  * address of the start of the DT page.
185  *
186  * The structure of the page table is as follows:
187  *
188  *                   DT
189  * MMU_DTE_ADDR -> +-----+
190  *                 |     |
191  *                 +-----+     PT
192  *                 | DTE | -> +-----+
193  *                 +-----+    |     |     Memory
194  *                 |     |    +-----+     Page
195  *                 |     |    | PTE | -> +-----+
196  *                 +-----+    +-----+    |     |
197  *                            |     |    |     |
198  *                            |     |    |     |
199  *                            +-----+    |     |
200  *                                       |     |
201  *                                       |     |
202  *                                       +-----+
203  */
204 
205 /*
206  * Each DTE has a PT address and a valid bit:
207  * +---------------------+-----------+-+
208  * | PT address          | Reserved  |V|
209  * +---------------------+-----------+-+
210  *  31:12 - PT address (PTs always starts on a 4 KB boundary)
211  *  11: 1 - Reserved
212  *      0 - 1 if PT @ PT address is valid
213  */
214 #define RK_DTE_PT_ADDRESS_MASK 0xfffff000
215 #define RK_DTE_PT_VALID BIT(0)
216 
217 /*
218  * In v2:
219  * 31:12 - PT address bit 31:0
220  * 11: 8 - PT address bit 35:32
221  *  7: 4 - PT address bit 39:36
222  *  3: 1 - Reserved
223  *     0 - 1 if PT @ PT address is valid
224  */
225 #define RK_DTE_PT_ADDRESS_MASK_V2 0xfffffff0
226 
rk_dte_pt_address(u32 dte)227 static inline phys_addr_t rk_dte_pt_address(u32 dte)
228 {
229     return (phys_addr_t)dte & RK_DTE_PT_ADDRESS_MASK;
230 }
231 
rk_dte_pt_address_v2(u32 dte)232 static inline phys_addr_t rk_dte_pt_address_v2(u32 dte)
233 {
234     u64 dte_v2 = dte;
235 
236     dte_v2 = ((dte_v2 & DTE_HI_MASK2) << PAGE_DESC_HI_SHIFT2) | ((dte_v2 & DTE_HI_MASK1) << PAGE_DESC_HI_SHIFT1) |
237              (dte_v2 & PAGE_DESC_LO_MASK);
238 
239     return (phys_addr_t)dte_v2;
240 }
241 
rk_dte_is_pt_valid(u32 dte)242 static inline bool rk_dte_is_pt_valid(u32 dte)
243 {
244     return dte & RK_DTE_PT_VALID;
245 }
246 
rk_mk_dte(dma_addr_t pt_dma)247 static inline u32 rk_mk_dte(dma_addr_t pt_dma)
248 {
249     return (pt_dma & RK_DTE_PT_ADDRESS_MASK) | RK_DTE_PT_VALID;
250 }
251 
rk_mk_dte_v2(dma_addr_t pt_dma)252 static inline u32 rk_mk_dte_v2(dma_addr_t pt_dma)
253 {
254     pt_dma = (pt_dma & PAGE_DESC_LO_MASK) | ((pt_dma & PAGE_DESC_HI_MASK1) >> PAGE_DESC_HI_SHIFT1) |
255              ((pt_dma & PAGE_DESC_HI_MASK2) >> PAGE_DESC_HI_SHIFT2);
256 
257     return (pt_dma & RK_DTE_PT_ADDRESS_MASK_V2) | RK_DTE_PT_VALID;
258 }
259 
260 /*
261  * Each PTE has a Page address, some flags and a valid bit:
262  * +---------------------+---+-------+-+
263  * | Page address        |Rsv| Flags |V|
264  * +---------------------+---+-------+-+
265  *  31:12 - Page address (Pages always start on a 4 KB boundary)
266  *  11: 9 - Reserved
267  *   8: 1 - Flags
268  *      8 - Read allocate - allocate cache space on read misses
269  *      7 - Read cache - enable cache & prefetch of data
270  *      6 - Write buffer - enable delaying writes on their way to memory
271  *      5 - Write allocate - allocate cache space on write misses
272  *      4 - Write cache - different writes can be merged together
273  *      3 - Override cache attributes
274  *          if 1, bits 4-8 control cache attributes
275  *          if 0, the system bus defaults are used
276  *      2 - Writable
277  *      1 - Readable
278  *      0 - 1 if Page @ Page address is valid
279  */
280 #define RK_PTE_PAGE_ADDRESS_MASK 0xfffff000
281 #define RK_PTE_PAGE_FLAGS_MASK 0x000001fe
282 #define RK_PTE_PAGE_WRITABLE BIT(2)
283 #define RK_PTE_PAGE_READABLE BIT(1)
284 #define RK_PTE_PAGE_VALID BIT(0)
285 
286 /*
287  * In v2:
288  * 31:12 - Page address bit 31:0
289  *  11:9 - Page address bit 34:32
290  *   8:4 - Page address bit 39:35
291  *     3 - Security
292  *     2 - Writable
293  *     1 - Readable
294  *     0 - 1 if Page @ Page address is valid
295  */
296 #define RK_PTE_PAGE_ADDRESS_MASK_V2 0xfffffff0
297 #define RK_PTE_PAGE_FLAGS_MASK_V2 0x0000000e
298 #define RK_PTE_PAGE_READABLE_V2 BIT(1)
299 #define RK_PTE_PAGE_WRITABLE_V2 BIT(2)
300 
rk_pte_page_address(u32 pte)301 static inline phys_addr_t rk_pte_page_address(u32 pte)
302 {
303     return (phys_addr_t)pte & RK_PTE_PAGE_ADDRESS_MASK;
304 }
305 
rk_pte_page_address_v2(u32 pte)306 static inline phys_addr_t rk_pte_page_address_v2(u32 pte)
307 {
308     u64 pte_v2 = pte;
309 
310     pte_v2 = ((pte_v2 & DTE_HI_MASK2) << PAGE_DESC_HI_SHIFT2) | ((pte_v2 & DTE_HI_MASK1) << PAGE_DESC_HI_SHIFT1) |
311              (pte_v2 & PAGE_DESC_LO_MASK);
312 
313     return (phys_addr_t)pte_v2;
314 }
315 
rk_pte_is_page_valid(u32 pte)316 static inline bool rk_pte_is_page_valid(u32 pte)
317 {
318     return pte & RK_PTE_PAGE_VALID;
319 }
320 
321 /* set cache flags per prot IOMMU_CACHE */
rk_mk_pte(phys_addr_t page, int prot)322 static u32 rk_mk_pte(phys_addr_t page, int prot)
323 {
324     u32 flags = 0;
325     flags |= (prot & IOMMU_READ) ? RK_PTE_PAGE_READABLE : 0;
326     flags |= (prot & IOMMU_WRITE) ? RK_PTE_PAGE_WRITABLE : 0;
327     page &= RK_PTE_PAGE_ADDRESS_MASK;
328     return page | flags | RK_PTE_PAGE_VALID;
329 }
330 
rk_mk_pte_v2(phys_addr_t page, int prot)331 static u32 rk_mk_pte_v2(phys_addr_t page, int prot)
332 {
333     u32 flags = 0;
334 
335     flags |= (prot & IOMMU_READ) ? RK_PTE_PAGE_READABLE_V2 : 0;
336     flags |= (prot & IOMMU_WRITE) ? RK_PTE_PAGE_WRITABLE_V2 : 0;
337     page = (page & PAGE_DESC_LO_MASK) | ((page & PAGE_DESC_HI_MASK1) >> PAGE_DESC_HI_SHIFT1) |
338            ((page & PAGE_DESC_HI_MASK2) >> PAGE_DESC_HI_SHIFT2);
339     page &= RK_PTE_PAGE_ADDRESS_MASK_V2;
340 
341     return page | flags | RK_PTE_PAGE_VALID;
342 }
343 
rk_mk_pte_invalid(u32 pte)344 static u32 rk_mk_pte_invalid(u32 pte)
345 {
346     return pte & ~RK_PTE_PAGE_VALID;
347 }
348 
349 /*
350  * rk3288 iova (IOMMU Virtual Address) format
351  *  31       22.21       12.11          0
352  * +-----------+-----------+-------------+
353  * | DTE index | PTE index | Page offset |
354  * +-----------+-----------+-------------+
355  *  31:22 - DTE index   - index of DTE in DT
356  *  21:12 - PTE index   - index of PTE in PT @ DTE.pt_address
357  *  11: 0 - Page offset - offset into page @ PTE.page_address
358  */
359 #define RK_IOVA_DTE_MASK 0xffc00000
360 #define RK_IOVA_DTE_SHIFT 22
361 #define RK_IOVA_PTE_MASK 0x003ff000
362 #define RK_IOVA_PTE_SHIFT 12
363 #define RK_IOVA_PAGE_MASK 0x00000fff
364 #define RK_IOVA_PAGE_SHIFT 0
365 
rk_iova_dte_index(dma_addr_t iova)366 static u32 rk_iova_dte_index(dma_addr_t iova)
367 {
368     return (u32)(iova & RK_IOVA_DTE_MASK) >> RK_IOVA_DTE_SHIFT;
369 }
370 
rk_iova_pte_index(dma_addr_t iova)371 static u32 rk_iova_pte_index(dma_addr_t iova)
372 {
373     return (u32)(iova & RK_IOVA_PTE_MASK) >> RK_IOVA_PTE_SHIFT;
374 }
375 
rk_iova_page_offset(dma_addr_t iova)376 static u32 rk_iova_page_offset(dma_addr_t iova)
377 {
378     return (u32)(iova & RK_IOVA_PAGE_MASK) >> RK_IOVA_PAGE_SHIFT;
379 }
380 
rk_iommu_read(void __iomem *base, u32 offset)381 static u32 rk_iommu_read(void __iomem *base, u32 offset)
382 {
383     return readl(base + offset);
384 }
385 
rk_iommu_write(void __iomem *base, u32 offset, u32 value)386 static void rk_iommu_write(void __iomem *base, u32 offset, u32 value)
387 {
388     writel(value, base + offset);
389 }
390 
rk_iommu_command(struct rk_iommu *iommu, u32 command)391 static void rk_iommu_command(struct rk_iommu *iommu, u32 command)
392 {
393     int i;
394 
395     for (i = 0; i < iommu->num_mmu; i++) {
396         writel(command, iommu->bases[i] + RK_MMU_COMMAND);
397     }
398 }
399 
rk_iommu_base_command(void __iomem *base, u32 command)400 static void rk_iommu_base_command(void __iomem *base, u32 command)
401 {
402     writel(command, base + RK_MMU_COMMAND);
403 }
rk_iommu_zap_lines(struct rk_iommu *iommu, dma_addr_t iova_start, size_t size)404 static void rk_iommu_zap_lines(struct rk_iommu *iommu, dma_addr_t iova_start, size_t size)
405 {
406     int i;
407     dma_addr_t iova_end = iova_start + size;
408     /*
409      * (djkurtz): Figure out when it is more efficient to shootdown the
410      * entire iotlb rather than iterate over individual iovas.
411      */
412     for (i = 0; i < iommu->num_mmu; i++) {
413         dma_addr_t iova;
414 
415         for (iova = iova_start; iova < iova_end; iova += SPAGE_SIZE) {
416             rk_iommu_write(iommu->bases[i], RK_MMU_ZAP_ONE_LINE, iova);
417         }
418     }
419 }
420 
rk_iommu_is_stall_active(struct rk_iommu *iommu)421 static bool rk_iommu_is_stall_active(struct rk_iommu *iommu)
422 {
423     bool active = true;
424     int i;
425 
426     for (i = 0; i < iommu->num_mmu; i++) {
427         active &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & RK_MMU_STATUS_STALL_ACTIVE);
428     }
429 
430     return active;
431 }
432 
rk_iommu_is_paging_enabled(struct rk_iommu *iommu)433 static bool rk_iommu_is_paging_enabled(struct rk_iommu *iommu)
434 {
435     bool enable = true;
436     int i;
437 
438     for (i = 0; i < iommu->num_mmu; i++) {
439         enable &= !!(rk_iommu_read(iommu->bases[i], RK_MMU_STATUS) & RK_MMU_STATUS_PAGING_ENABLED);
440     }
441 
442     return enable;
443 }
444 
rk_iommu_is_reset_done(struct rk_iommu *iommu)445 static bool rk_iommu_is_reset_done(struct rk_iommu *iommu)
446 {
447     bool done = true;
448     int i;
449 
450     for (i = 0; i < iommu->num_mmu; i++) {
451         done &= rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR) == 0;
452     }
453 
454     return done;
455 }
456 
rk_iommu_enable_stall(struct rk_iommu *iommu)457 static int rk_iommu_enable_stall(struct rk_iommu *iommu)
458 {
459     int ret, i;
460     bool val;
461     int retry_count = 0;
462 
463     if (iommu->skip_read) {
464         goto read_wa;
465     }
466 
467     if (rk_iommu_is_stall_active(iommu)) {
468         return 0;
469     }
470 
471     /* Stall can only be enabled if paging is enabled */
472     if (!rk_iommu_is_paging_enabled(iommu)) {
473         return 0;
474     }
475 
476 read_wa:
477     while (1) {
478         rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_STALL);
479         if (iommu->skip_read) {
480             return 0;
481         }
482 
483         ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, val, RK_MMU_POLL_PERIOD_US,
484                                  RK_MMU_POLL_TIMEOUT_US);
485         if (ret) {
486             for (i = 0; i < iommu->num_mmu; i++) {
487                 dev_err(iommu->dev, "Enable stall request timed out, retry_count = %d, status: %#08x\n", retry_count,
488                         rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
489             }
490             if (iommu->cmd_retry && (retry_count++ < CMD_RETRY_COUNT)) {
491                 continue;
492             }
493         }
494         break;
495     }
496     return ret;
497 }
498 
rk_iommu_disable_stall(struct rk_iommu *iommu)499 static int rk_iommu_disable_stall(struct rk_iommu *iommu)
500 {
501     int ret, i;
502     bool val;
503     int retry_count = 0;
504 
505     if (iommu->skip_read) {
506         goto read_wa;
507     }
508 
509     if (!rk_iommu_is_stall_active(iommu)) {
510         return 0;
511     }
512 
513 read_wa:
514     while (1) {
515         rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_STALL);
516         if (iommu->skip_read) {
517             return 0;
518         }
519 
520         ret = readx_poll_timeout(rk_iommu_is_stall_active, iommu, val, !val, RK_MMU_POLL_PERIOD_US,
521                                  RK_MMU_POLL_TIMEOUT_US);
522         if (ret) {
523             for (i = 0; i < iommu->num_mmu; i++) {
524                 dev_err(iommu->dev, "Disable stall request timed out, retry_count = %d, status: %#08x\n", retry_count,
525                         rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
526             }
527             if (iommu->cmd_retry && (retry_count++ < CMD_RETRY_COUNT)) {
528                 continue;
529             }
530         }
531         break;
532     }
533     return ret;
534 }
535 
rk_iommu_enable_paging(struct rk_iommu *iommu)536 static int rk_iommu_enable_paging(struct rk_iommu *iommu)
537 {
538     int ret, i;
539     bool val;
540     int retry_count = 0;
541 
542     if (iommu->skip_read) {
543         goto read_wa;
544     }
545 
546     if (rk_iommu_is_paging_enabled(iommu)) {
547         return 0;
548     }
549 
550 read_wa:
551     while (1) {
552         rk_iommu_command(iommu, RK_MMU_CMD_ENABLE_PAGING);
553         if (iommu->skip_read) {
554             return 0;
555         }
556 
557         ret = readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val, val, RK_MMU_POLL_PERIOD_US,
558                                  RK_MMU_POLL_TIMEOUT_US);
559         if (ret) {
560             for (i = 0; i < iommu->num_mmu; i++) {
561                 dev_err(iommu->dev, "Enable paging request timed out, retry_count = %d, status: %#08x\n", retry_count,
562                         rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
563             }
564             if (iommu->cmd_retry && (retry_count++ < CMD_RETRY_COUNT)) {
565                 continue;
566             }
567         }
568         break;
569     }
570     return ret;
571 }
572 
rk_iommu_disable_paging(struct rk_iommu *iommu)573 static int rk_iommu_disable_paging(struct rk_iommu *iommu)
574 {
575     int ret, i;
576     bool val;
577     int retry_count = 0;
578 
579     if (iommu->skip_read) {
580         goto read_wa;
581     }
582 
583     if (!rk_iommu_is_paging_enabled(iommu)) {
584         return 0;
585     }
586 
587 read_wa:
588     while (1) {
589         rk_iommu_command(iommu, RK_MMU_CMD_DISABLE_PAGING);
590         if (iommu->skip_read) {
591             return 0;
592         }
593 
594         ret =
595             readx_poll_timeout(rk_iommu_is_paging_enabled, iommu, val, !val, RK_MMU_POLL_PERIOD_US,
596                 RK_MMU_POLL_TIMEOUT_US);
597         if (ret) {
598             for (i = 0; i < iommu->num_mmu; i++) {
599                 dev_err(iommu->dev, "Disable paging request timed out, retry_count = %d, status: %#08x\n", retry_count,
600                         rk_iommu_read(iommu->bases[i], RK_MMU_STATUS));
601             }
602             if (iommu->cmd_retry && (retry_count++ < CMD_RETRY_COUNT)) {
603                 continue;
604             }
605         }
606         break;
607     }
608     return ret;
609 }
610 
rk_iommu_force_reset(struct rk_iommu *iommu)611 static int rk_iommu_force_reset(struct rk_iommu *iommu)
612 {
613     int ret, i;
614     u32 dte_addr;
615     bool val;
616     u32 address_mask;
617 
618     if (iommu->reset_disabled) {
619         return 0;
620     }
621 
622     if (iommu->skip_read) {
623         goto read_wa;
624     }
625 
626     /*
627      * Check if register DTE_ADDR is working by writing DTE_ADDR_DUMMY
628      * and verifying that upper 5 nybbles are read back.
629      */
630 
631     /*
632      * In v2: upper 7 nybbles are read back.
633      */
634     for (i = 0; i < iommu->num_mmu; i++) {
635         rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, DTE_ADDR_DUMMY);
636 
637         if (iommu->version >= 0x2) {
638             address_mask = RK_DTE_PT_ADDRESS_MASK_V2;
639         } else {
640             address_mask = RK_DTE_PT_ADDRESS_MASK;
641         }
642         dte_addr = rk_iommu_read(iommu->bases[i], RK_MMU_DTE_ADDR);
643         if (dte_addr != (DTE_ADDR_DUMMY & address_mask)) {
644             dev_err(iommu->dev, "Error during raw reset. MMU_DTE_ADDR is not functioning\n");
645             return -EFAULT;
646         }
647     }
648 
649 read_wa:
650     rk_iommu_command(iommu, RK_MMU_CMD_FORCE_RESET);
651     if (iommu->skip_read) {
652         return 0;
653     }
654 
655     ret = readx_poll_timeout(rk_iommu_is_reset_done, iommu, val, val, RK_MMU_FORCE_RESET_TIMEOUT_US,
656                              RK_MMU_POLL_TIMEOUT_US);
657     if (ret) {
658         dev_err(iommu->dev, "FORCE_RESET command timed out\n");
659         return ret;
660     }
661 
662     return 0;
663 }
664 
log_iova(struct rk_iommu *iommu, int index, dma_addr_t iova)665 static void log_iova(struct rk_iommu *iommu, int index, dma_addr_t iova)
666 {
667     void __iomem *base = iommu->bases[index];
668     u32 dte_index, pte_index, page_offset;
669     u32 mmu_dte_addr;
670     phys_addr_t mmu_dte_addr_phys, dte_addr_phys;
671     u32 *dte_addr;
672     u32 dte;
673     phys_addr_t pte_addr_phys = 0;
674     u32 *pte_addr = NULL;
675     u32 pte = 0;
676     phys_addr_t page_addr_phys = 0;
677     u32 page_flags = 0;
678 
679     dte_index = rk_iova_dte_index(iova);
680     pte_index = rk_iova_pte_index(iova);
681     page_offset = rk_iova_page_offset(iova);
682 
683     mmu_dte_addr = rk_iommu_read(base, RK_MMU_DTE_ADDR);
684     mmu_dte_addr_phys = (phys_addr_t)mmu_dte_addr;
685     if (iommu->version >= RK_IOMMU_VERSION_CMP) {
686         mmu_dte_addr_phys = (mmu_dte_addr_phys & DT_LO_MASK) | ((mmu_dte_addr_phys & DTE_BASE_HI_MASK) << DT_SHIFT);
687     }
688 
689     dte_addr_phys = mmu_dte_addr_phys + (RK_ADDR_PHYS_MUL * dte_index);
690     dte_addr = phys_to_virt(dte_addr_phys);
691     dte = *dte_addr;
692 
693     if (!rk_dte_is_pt_valid(dte)) {
694         goto print_it;
695     }
696 
697     if (iommu->version >= RK_IOMMU_VERSION_CMP) {
698         pte_addr_phys = rk_dte_pt_address_v2(dte) + (pte_index * RK_ADDR_PHYS_MUL);
699     } else {
700         pte_addr_phys = rk_dte_pt_address(dte) + (pte_index * RK_ADDR_PHYS_MUL);
701     }
702     pte_addr = phys_to_virt(pte_addr_phys);
703     pte = *pte_addr;
704 
705     if (!rk_pte_is_page_valid(pte)) {
706         goto print_it;
707     }
708 
709     if (iommu->version >= RK_IOMMU_VERSION_CMP) {
710         page_addr_phys = rk_pte_page_address_v2(pte) + page_offset;
711     } else {
712         page_addr_phys = rk_pte_page_address(pte) + page_offset;
713     }
714     page_flags = pte & RK_PTE_PAGE_FLAGS_MASK;
715 
716 print_it:
717     dev_err(iommu->dev, "iova = %pad: dte_index: %#03x pte_index: %#03x page_offset: %#03x\n", &iova, dte_index,
718             pte_index, page_offset);
719     dev_err(iommu->dev, "mmu_dte_addr: %pa dte@%pa: %#08x valid: %u pte@%pa: %#08x valid: %u page@%pa flags: %#03x\n",
720             &mmu_dte_addr_phys, &dte_addr_phys, dte, rk_dte_is_pt_valid(dte), &pte_addr_phys, pte,
721             rk_pte_is_page_valid(pte), &page_addr_phys, page_flags);
722 }
723 
rk_iommu_irq(int irq, void *dev_id)724 static irqreturn_t rk_iommu_irq(int irq, void *dev_id)
725 {
726     struct rk_iommu *iommu = dev_id;
727     u32 status;
728     u32 int_status;
729     u32 int_mask;
730     dma_addr_t iova;
731     irqreturn_t ret = IRQ_NONE;
732     int i, err;
733 
734     err = pm_runtime_get_if_in_use(iommu->dev);
735     if (!err || WARN_ON_ONCE(err < 0)) {
736         return ret;
737     }
738 
739     if (WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks))) {
740         goto out;
741     }
742 
743     for (i = 0; i < iommu->num_mmu; i++) {
744         int_status = rk_iommu_read(iommu->bases[i], RK_MMU_INT_STATUS);
745         if (int_status == 0) {
746             continue;
747         }
748 
749         ret = IRQ_HANDLED;
750         iova = rk_iommu_read(iommu->bases[i], RK_MMU_PAGE_FAULT_ADDR);
751 
752         if (int_status & RK_MMU_IRQ_PAGE_FAULT) {
753             int flags;
754 
755             status = rk_iommu_read(iommu->bases[i], RK_MMU_STATUS);
756             flags = (status & RK_MMU_STATUS_PAGE_FAULT_IS_WRITE) ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ;
757 
758             dev_err(iommu->dev, "Page fault at %pad of type %s\n", &iova,
759                     (flags == IOMMU_FAULT_WRITE) ? "write" : "read");
760 
761             log_iova(iommu, i, iova);
762 
763             /*
764              * Report page fault to any installed handlers.
765              * Ignore the return code, though, since we always zap cache
766              * and clear the page fault anyway.
767              */
768             if (iommu->domain) {
769                 report_iommu_fault(iommu->domain, iommu->dev, iova, status);
770             } else {
771                 dev_err(iommu->dev, "Page fault while iommu not attached to domain?\n");
772             }
773 
774             rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
775 
776             /*
777              * Master may clear the int_mask to prevent iommu
778              * re-enter interrupt when mapping. So we postpone
779              * sending PAGE_FAULT_DONE command to mapping finished.
780              */
781             int_mask = rk_iommu_read(iommu->bases[i], RK_MMU_INT_MASK);
782             if (int_mask != 0x0) {
783                 rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_PAGE_FAULT_DONE);
784             }
785         }
786 
787         if (int_status & RK_MMU_IRQ_BUS_ERROR) {
788             dev_err(iommu->dev, "BUS_ERROR occurred at %pad\n", &iova);
789         }
790 
791         if (int_status & ~RK_MMU_IRQ_MASK) {
792             dev_err(iommu->dev, "unexpected int_status: %#08x\n", int_status);
793         }
794 
795         rk_iommu_write(iommu->bases[i], RK_MMU_INT_CLEAR, int_status);
796     }
797 
798     clk_bulk_disable(iommu->num_clocks, iommu->clocks);
799 
800 out:
801     pm_runtime_put(iommu->dev);
802     return ret;
803 }
804 
rk_iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)805 static phys_addr_t rk_iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
806 {
807     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
808     unsigned long flags;
809     phys_addr_t pt_phys, phys = 0;
810     u32 dte, pte;
811     u32 *page_table;
812 
813     spin_lock_irqsave(&rk_domain->dt_lock, flags);
814 
815     dte = rk_domain->dt[rk_iova_dte_index(iova)];
816     if (!rk_dte_is_pt_valid(dte)) {
817         goto out;
818     }
819 
820     pt_phys = rk_dte_pt_address(dte);
821     page_table = (u32 *)phys_to_virt(pt_phys);
822     pte = page_table[rk_iova_pte_index(iova)];
823     if (!rk_pte_is_page_valid(pte)) {
824         goto out;
825     }
826 
827     phys = rk_pte_page_address(pte) + rk_iova_page_offset(iova);
828 out:
829     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
830 
831     return phys;
832 }
833 
rk_iommu_iova_to_phys_v2(struct iommu_domain *domain, dma_addr_t iova)834 static phys_addr_t rk_iommu_iova_to_phys_v2(struct iommu_domain *domain, dma_addr_t iova)
835 {
836     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
837     unsigned long flags;
838     phys_addr_t pt_phys, phys = 0;
839     u32 dte, pte;
840     u32 *page_table;
841 
842     spin_lock_irqsave(&rk_domain->dt_lock, flags);
843 
844     dte = rk_domain->dt[rk_iova_dte_index(iova)];
845     if (!rk_dte_is_pt_valid(dte)) {
846         goto out;
847     }
848 
849     pt_phys = rk_dte_pt_address_v2(dte);
850     page_table = (u32 *)phys_to_virt(pt_phys);
851     pte = page_table[rk_iova_pte_index(iova)];
852     if (!rk_pte_is_page_valid(pte)) {
853         goto out;
854     }
855 
856     phys = rk_pte_page_address_v2(pte) + rk_iova_page_offset(iova);
857 out:
858     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
859 
860     return phys;
861 }
862 
rk_iommu_zap_iova(struct rk_iommu_domain *rk_domain, dma_addr_t iova, size_t size)863 static void rk_iommu_zap_iova(struct rk_iommu_domain *rk_domain, dma_addr_t iova, size_t size)
864 {
865     struct list_head *pos;
866     unsigned long flags;
867 
868     /* shootdown these iova from all iommus using this domain */
869     spin_lock_irqsave(&rk_domain->iommus_lock, flags);
870     list_for_each(pos, &rk_domain->iommus)
871     {
872         struct rk_iommu *iommu;
873         int ret;
874 
875         iommu = list_entry(pos, struct rk_iommu, node);
876 
877         /* Only zap TLBs of IOMMUs that are powered on. */
878         ret = pm_runtime_get_if_in_use(iommu->dev);
879         if (WARN_ON_ONCE(ret < 0)) {
880             continue;
881         }
882         if (ret) {
883             WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks));
884             rk_iommu_zap_lines(iommu, iova, size);
885             clk_bulk_disable(iommu->num_clocks, iommu->clocks);
886             pm_runtime_put(iommu->dev);
887         }
888     }
889     spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
890 }
891 
rk_iommu_zap_iova_first_last(struct rk_iommu_domain *rk_domain, dma_addr_t iova, size_t size)892 static void rk_iommu_zap_iova_first_last(struct rk_iommu_domain *rk_domain, dma_addr_t iova, size_t size)
893 {
894     rk_iommu_zap_iova(rk_domain, iova, SPAGE_SIZE);
895     if (size > SPAGE_SIZE) {
896         rk_iommu_zap_iova(rk_domain, iova + size - SPAGE_SIZE, SPAGE_SIZE);
897     }
898 }
899 
rk_dte_get_page_table(struct rk_iommu_domain *rk_domain, dma_addr_t iova)900 static u32 *rk_dte_get_page_table(struct rk_iommu_domain *rk_domain, dma_addr_t iova)
901 {
902     u32 *page_table, *dte_addr;
903     u32 dte_index, dte;
904     phys_addr_t pt_phys;
905     dma_addr_t pt_dma;
906 
907     assert_spin_locked(&rk_domain->dt_lock);
908 
909     dte_index = rk_iova_dte_index(iova);
910     dte_addr = &rk_domain->dt[dte_index];
911     dte = *dte_addr;
912     if (rk_dte_is_pt_valid(dte)) {
913         goto done;
914     }
915 
916     page_table = (u32 *)get_zeroed_page(GFP_ATOMIC | GFP_DMA32);
917     if (!page_table) {
918         return ERR_PTR(-ENOMEM);
919     }
920 
921     pt_dma = dma_map_single(dma_dev, page_table, SPAGE_SIZE, DMA_TO_DEVICE);
922     if (dma_mapping_error(dma_dev, pt_dma)) {
923         dev_err(dma_dev, "DMA mapping error while allocating page table\n");
924         free_page((unsigned long)page_table);
925         return ERR_PTR(-ENOMEM);
926     }
927 
928     dte = rk_mk_dte(pt_dma);
929     *dte_addr = dte;
930 
931     rk_table_flush(rk_domain, pt_dma, NUM_PT_ENTRIES);
932     rk_table_flush(rk_domain, rk_domain->dt_dma + dte_index * sizeof(u32), 1);
933 done:
934     pt_phys = rk_dte_pt_address(dte);
935     return (u32 *)phys_to_virt(pt_phys);
936 }
937 
rk_dte_get_page_table_v2(struct rk_iommu_domain *rk_domain, dma_addr_t iova)938 static u32 *rk_dte_get_page_table_v2(struct rk_iommu_domain *rk_domain, dma_addr_t iova)
939 {
940     u32 *page_table, *dte_addr;
941     u32 dte_index, dte;
942     phys_addr_t pt_phys;
943     dma_addr_t pt_dma;
944 
945     assert_spin_locked(&rk_domain->dt_lock);
946 
947     dte_index = rk_iova_dte_index(iova);
948     dte_addr = &rk_domain->dt[dte_index];
949     dte = *dte_addr;
950     if (rk_dte_is_pt_valid(dte)) {
951         goto done;
952     }
953 
954     page_table = (u32 *)get_zeroed_page(GFP_ATOMIC | GFP_DMA32);
955     if (!page_table) {
956         return ERR_PTR(-ENOMEM);
957     }
958 
959     pt_dma = dma_map_single(dma_dev, page_table, SPAGE_SIZE, DMA_TO_DEVICE);
960     if (dma_mapping_error(dma_dev, pt_dma)) {
961         dev_err(dma_dev, "DMA mapping error while allocating page table\n");
962         free_page((unsigned long)page_table);
963         return ERR_PTR(-ENOMEM);
964     }
965 
966     dte = rk_mk_dte_v2(pt_dma);
967     *dte_addr = dte;
968 
969     rk_table_flush(rk_domain, pt_dma, NUM_PT_ENTRIES);
970     rk_table_flush(rk_domain, rk_domain->dt_dma + dte_index * sizeof(u32), 1);
971 done:
972     pt_phys = rk_dte_pt_address_v2(dte);
973     return (u32 *)phys_to_virt(pt_phys);
974 }
975 
rk_iommu_unmap_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, size_t size)976 static size_t rk_iommu_unmap_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, size_t size)
977 {
978     unsigned int pte_count;
979     unsigned int pte_total = size / SPAGE_SIZE;
980 
981     assert_spin_locked(&rk_domain->dt_lock);
982 
983     for (pte_count = 0; pte_count < pte_total; pte_count++) {
984         u32 pte = pte_addr[pte_count];
985         if (!rk_pte_is_page_valid(pte)) {
986             break;
987         }
988 
989         pte_addr[pte_count] = rk_mk_pte_invalid(pte);
990     }
991 
992     rk_table_flush(rk_domain, pte_dma, pte_count);
993 
994     return pte_count * SPAGE_SIZE;
995 }
996 
rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, dma_addr_t iova, phys_addr_t paddr, size_t size, int prot)997 static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, dma_addr_t iova,
998                              phys_addr_t paddr, size_t size, int prot)
999 {
1000     unsigned int pte_count;
1001     unsigned int pte_total = size / SPAGE_SIZE;
1002     phys_addr_t page_phys;
1003 
1004     assert_spin_locked(&rk_domain->dt_lock);
1005 
1006     for (pte_count = 0; pte_count < pte_total; pte_count++) {
1007         u32 pte = pte_addr[pte_count];
1008 
1009         if (rk_pte_is_page_valid(pte)) {
1010             goto unwind;
1011         }
1012 
1013         pte_addr[pte_count] = rk_mk_pte(paddr, prot);
1014 
1015         paddr += SPAGE_SIZE;
1016     }
1017 
1018     rk_table_flush(rk_domain, pte_dma, pte_total);
1019 
1020     /*
1021      * Zap the first and last iova to evict from iotlb any previously
1022      * mapped cachelines holding stale values for its dte and pte.
1023      * We only zap the first and last iova, since only they could have
1024      * dte or pte shared with an existing mapping.
1025      */
1026     /* Do not zap tlb cache line if shootdown_entire set */
1027     if (!rk_domain->shootdown_entire) {
1028         rk_iommu_zap_iova_first_last(rk_domain, iova, size);
1029     }
1030 
1031     return 0;
1032 unwind:
1033     /* Unmap the range of iovas that we just mapped */
1034     rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, pte_count * SPAGE_SIZE);
1035 
1036     iova += pte_count * SPAGE_SIZE;
1037     page_phys = rk_pte_page_address(pte_addr[pte_count]);
1038     pr_err("iova: %pad already mapped to %pa cannot remap to phys: %pa prot: %#x\n", &iova, &page_phys, &paddr, prot);
1039 
1040     return -EADDRINUSE;
1041 }
1042 
rk_iommu_map_iova_v2(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, dma_addr_t iova, phys_addr_t paddr, size_t size, int prot)1043 static int rk_iommu_map_iova_v2(struct rk_iommu_domain *rk_domain, u32 *pte_addr, dma_addr_t pte_dma, dma_addr_t iova,
1044                                 phys_addr_t paddr, size_t size, int prot)
1045 {
1046     unsigned int pte_count;
1047     unsigned int pte_total = size / SPAGE_SIZE;
1048     phys_addr_t page_phys;
1049 
1050     assert_spin_locked(&rk_domain->dt_lock);
1051 
1052     for (pte_count = 0; pte_count < pte_total; pte_count++) {
1053         u32 pte = pte_addr[pte_count];
1054 
1055         if (rk_pte_is_page_valid(pte)) {
1056             goto unwind;
1057         }
1058 
1059         pte_addr[pte_count] = rk_mk_pte_v2(paddr, prot);
1060 
1061         paddr += SPAGE_SIZE;
1062     }
1063 
1064     rk_table_flush(rk_domain, pte_dma, pte_total);
1065 
1066     /*
1067      * Zap the first and last iova to evict from iotlb any previously
1068      * mapped cachelines holding stale values for its dte and pte.
1069      * We only zap the first and last iova, since only they could have
1070      * dte or pte shared with an existing mapping.
1071      */
1072     /* Do not zap tlb cache line if shootdown_entire set */
1073     if (!rk_domain->shootdown_entire) {
1074         rk_iommu_zap_iova_first_last(rk_domain, iova, size);
1075     }
1076 
1077     return 0;
1078 unwind:
1079     /* Unmap the range of iovas that we just mapped */
1080     rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, pte_count * SPAGE_SIZE);
1081 
1082     iova += pte_count * SPAGE_SIZE;
1083     page_phys = rk_pte_page_address_v2(pte_addr[pte_count]);
1084     pr_err("iova: %pad already mapped to %pa cannot remap to phys: %pa prot: %#x\n", &iova, &page_phys, &paddr, prot);
1085 
1086     return -EADDRINUSE;
1087 }
1088 
rk_iommu_map(struct iommu_domain *domain, unsigned long _iova, phys_addr_t paddr, size_t size, int prot, gfp_t gfp)1089 static int rk_iommu_map(struct iommu_domain *domain, unsigned long _iova, phys_addr_t paddr, size_t size, int prot,
1090                         gfp_t gfp)
1091 {
1092     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1093     unsigned long flags;
1094     dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
1095     u32 *page_table, *pte_addr;
1096     u32 dte, pte_index;
1097     int ret;
1098 
1099     spin_lock_irqsave(&rk_domain->dt_lock, flags);
1100 
1101     /*
1102      * pgsize_bitmap specifies iova sizes that fit in one page table
1103      * (1024 4-KiB pages = 4 MiB).
1104      * So, size will always be 4096 <= size <= 4194304.
1105      * Since iommu_map() guarantees that both iova and size will be
1106      * aligned, we will always only be mapping from a single dte here.
1107      */
1108     page_table = rk_dte_get_page_table(rk_domain, iova);
1109     if (IS_ERR(page_table)) {
1110         spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1111         return PTR_ERR(page_table);
1112     }
1113 
1114     dte = rk_domain->dt[rk_iova_dte_index(iova)];
1115     pte_index = rk_iova_pte_index(iova);
1116     pte_addr = &page_table[pte_index];
1117     pte_dma = rk_dte_pt_address(dte) + pte_index * sizeof(u32);
1118     ret = rk_iommu_map_iova(rk_domain, pte_addr, pte_dma, iova, paddr, size, prot);
1119 
1120     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1121 
1122     return ret;
1123 }
1124 
rk_iommu_map_v2(struct iommu_domain *domain, unsigned long _iova, phys_addr_t paddr, size_t size, int prot, gfp_t gfp)1125 static int rk_iommu_map_v2(struct iommu_domain *domain, unsigned long _iova, phys_addr_t paddr, size_t size, int prot,
1126                            gfp_t gfp)
1127 {
1128     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1129     unsigned long flags;
1130     dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
1131     u32 *page_table, *pte_addr;
1132     u32 dte, pte_index;
1133     int ret;
1134 
1135     spin_lock_irqsave(&rk_domain->dt_lock, flags);
1136 
1137     /*
1138      * pgsize_bitmap specifies iova sizes that fit in one page table
1139      * (1024 4-KiB pages = 4 MiB).
1140      * So, size will always be 4096 <= size <= 4194304.
1141      * Since iommu_map() guarantees that both iova and size will be
1142      * aligned, we will always only be mapping from a single dte here.
1143      */
1144     page_table = rk_dte_get_page_table_v2(rk_domain, iova);
1145     if (IS_ERR(page_table)) {
1146         spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1147         return PTR_ERR(page_table);
1148     }
1149 
1150     dte = rk_domain->dt[rk_iova_dte_index(iova)];
1151     pte_index = rk_iova_pte_index(iova);
1152     pte_addr = &page_table[pte_index];
1153     pte_dma = rk_dte_pt_address_v2(dte) + pte_index * sizeof(u32);
1154     ret = rk_iommu_map_iova_v2(rk_domain, pte_addr, pte_dma, iova, paddr, size, prot);
1155 
1156     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1157 
1158     return ret;
1159 }
1160 
rk_iommu_unmap(struct iommu_domain *domain, unsigned long _iova, size_t size, struct iommu_iotlb_gather *gather)1161 static size_t rk_iommu_unmap(struct iommu_domain *domain, unsigned long _iova, size_t size,
1162                              struct iommu_iotlb_gather *gather)
1163 {
1164     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1165     unsigned long flags;
1166     dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
1167     phys_addr_t pt_phys;
1168     u32 dte;
1169     u32 *pte_addr;
1170     size_t unmap_size;
1171 
1172     spin_lock_irqsave(&rk_domain->dt_lock, flags);
1173 
1174     /*
1175      * pgsize_bitmap specifies iova sizes that fit in one page table
1176      * (1024 4-KiB pages = 4 MiB).
1177      * So, size will always be 4096 <= size <= 4194304.
1178      * Since iommu_unmap() guarantees that both iova and size will be
1179      * aligned, we will always only be unmapping from a single dte here.
1180      */
1181     dte = rk_domain->dt[rk_iova_dte_index(iova)];
1182     /* Just return 0 if iova is unmapped */
1183     if (!rk_dte_is_pt_valid(dte)) {
1184         spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1185         return 0;
1186     }
1187 
1188     pt_phys = rk_dte_pt_address(dte);
1189     pte_addr = (u32 *)phys_to_virt(pt_phys) + rk_iova_pte_index(iova);
1190     pte_dma = pt_phys + rk_iova_pte_index(iova) * sizeof(u32);
1191     unmap_size = rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, size);
1192 
1193     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1194 
1195     /* Shootdown iotlb entries for iova range that was just unmapped */
1196     rk_iommu_zap_iova(rk_domain, iova, unmap_size);
1197 
1198     return unmap_size;
1199 }
1200 
rk_iommu_unmap_v2(struct iommu_domain *domain, unsigned long _iova, size_t size, struct iommu_iotlb_gather *gather)1201 static size_t rk_iommu_unmap_v2(struct iommu_domain *domain, unsigned long _iova, size_t size,
1202                                 struct iommu_iotlb_gather *gather)
1203 {
1204     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1205     unsigned long flags;
1206     dma_addr_t pte_dma, iova = (dma_addr_t)_iova;
1207     phys_addr_t pt_phys;
1208     u32 dte;
1209     u32 *pte_addr;
1210     size_t unmap_size;
1211 
1212     spin_lock_irqsave(&rk_domain->dt_lock, flags);
1213 
1214     /*
1215      * pgsize_bitmap specifies iova sizes that fit in one page table
1216      * (1024 4-KiB pages = 4 MiB).
1217      * So, size will always be 4096 <= size <= 4194304.
1218      * Since iommu_unmap() guarantees that both iova and size will be
1219      * aligned, we will always only be unmapping from a single dte here.
1220      */
1221     dte = rk_domain->dt[rk_iova_dte_index(iova)];
1222     /* Just return 0 if iova is unmapped */
1223     if (!rk_dte_is_pt_valid(dte)) {
1224         spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1225         return 0;
1226     }
1227 
1228     pt_phys = rk_dte_pt_address_v2(dte);
1229     pte_addr = (u32 *)phys_to_virt(pt_phys) + rk_iova_pte_index(iova);
1230     pte_dma = pt_phys + rk_iova_pte_index(iova) * sizeof(u32);
1231     unmap_size = rk_iommu_unmap_iova(rk_domain, pte_addr, pte_dma, size);
1232 
1233     spin_unlock_irqrestore(&rk_domain->dt_lock, flags);
1234 
1235     /* Shootdown iotlb entries for iova range that was just unmapped */
1236     /* Do not zap tlb cache line if shootdown_entire set */
1237     if (!rk_domain->shootdown_entire) {
1238         rk_iommu_zap_iova(rk_domain, iova, unmap_size);
1239     }
1240 
1241     return unmap_size;
1242 }
1243 
rk_iommu_flush_tlb_all(struct iommu_domain *domain)1244 static void rk_iommu_flush_tlb_all(struct iommu_domain *domain)
1245 {
1246     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1247     struct list_head *pos;
1248     unsigned long flags;
1249     int i;
1250 
1251     spin_lock_irqsave(&rk_domain->iommus_lock, flags);
1252     list_for_each(pos, &rk_domain->iommus)
1253     {
1254         struct rk_iommu *iommu;
1255         int ret;
1256 
1257         iommu = list_entry(pos, struct rk_iommu, node);
1258 
1259         ret = pm_runtime_get_if_in_use(iommu->dev);
1260         if (WARN_ON_ONCE(ret < 0)) {
1261             continue;
1262         }
1263         if (ret) {
1264             WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks));
1265             for (i = 0; i < iommu->num_mmu; i++) {
1266                 rk_iommu_write(iommu->bases[i], RK_MMU_COMMAND, RK_MMU_CMD_ZAP_CACHE);
1267             }
1268             clk_bulk_disable(iommu->num_clocks, iommu->clocks);
1269             pm_runtime_put(iommu->dev);
1270         }
1271     }
1272     spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
1273 }
1274 
rk_iommu_from_dev(struct device *dev)1275 static struct rk_iommu *rk_iommu_from_dev(struct device *dev)
1276 {
1277     struct rk_iommudata *data = dev_iommu_priv_get(dev);
1278 
1279     return data ? data->iommu : NULL;
1280 }
1281 
1282 /* Must be called with iommu powered on and attached */
rk_iommu_disable(struct rk_iommu *iommu)1283 static void rk_iommu_disable(struct rk_iommu *iommu)
1284 {
1285     int i;
1286 
1287     /* Ignore error while disabling, just keep going */
1288     WARN_ON(clk_bulk_enable(iommu->num_clocks, iommu->clocks));
1289     rk_iommu_enable_stall(iommu);
1290     rk_iommu_disable_paging(iommu);
1291     for (i = 0; i < iommu->num_mmu; i++) {
1292         rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, 0);
1293         rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, 0);
1294     }
1295     rk_iommu_disable_stall(iommu);
1296     clk_bulk_disable(iommu->num_clocks, iommu->clocks);
1297 }
1298 
rockchip_iommu_disable(struct device *dev)1299 int rockchip_iommu_disable(struct device *dev)
1300 {
1301     struct rk_iommu *iommu;
1302 
1303     iommu = rk_iommu_from_dev(dev);
1304     if (!iommu) {
1305         return -ENODEV;
1306     }
1307 
1308     rk_iommu_disable(iommu);
1309 
1310     return 0;
1311 }
1312 EXPORT_SYMBOL(rockchip_iommu_disable);
1313 
1314 /* Must be called with iommu powered on and attached */
rk_iommu_enable(struct rk_iommu *iommu)1315 static int rk_iommu_enable(struct rk_iommu *iommu)
1316 {
1317     struct iommu_domain *domain = iommu->domain;
1318     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1319     int ret, i;
1320     u32 dt_v2;
1321     u32 auto_gate;
1322 
1323     ret = clk_bulk_enable(iommu->num_clocks, iommu->clocks);
1324     if (ret) {
1325         return ret;
1326     }
1327 
1328     ret = rk_iommu_enable_stall(iommu);
1329     if (ret) {
1330         goto out_disable_clocks;
1331     }
1332 
1333     ret = rk_iommu_force_reset(iommu);
1334     if (ret) {
1335         goto out_disable_stall;
1336     }
1337 
1338     for (i = 0; i < iommu->num_mmu; i++) {
1339         if (iommu->version >= 0x2) {
1340             dt_v2 = (rk_domain->dt_dma & DT_LO_MASK) | ((rk_domain->dt_dma & DT_HI_MASK) >> DT_SHIFT);
1341             rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, dt_v2);
1342         } else {
1343             rk_iommu_write(iommu->bases[i], RK_MMU_DTE_ADDR, rk_domain->dt_dma);
1344         }
1345         rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
1346         rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK);
1347 
1348         /* Workaround for iommu blocked, BIT(31) default to 1 */
1349         auto_gate = rk_iommu_read(iommu->bases[i], RK_MMU_AUTO_GATING);
1350         auto_gate |= DISABLE_FETCH_DTE_TIME_LIMIT;
1351         rk_iommu_write(iommu->bases[i], RK_MMU_AUTO_GATING, auto_gate);
1352     }
1353 
1354     ret = rk_iommu_enable_paging(iommu);
1355 
1356 out_disable_stall:
1357     rk_iommu_disable_stall(iommu);
1358 out_disable_clocks:
1359     clk_bulk_disable(iommu->num_clocks, iommu->clocks);
1360     return ret;
1361 }
1362 
rockchip_iommu_enable(struct device *dev)1363 int rockchip_iommu_enable(struct device *dev)
1364 {
1365     struct rk_iommu *iommu;
1366 
1367     iommu = rk_iommu_from_dev(dev);
1368     if (!iommu) {
1369         return -ENODEV;
1370     }
1371 
1372     return rk_iommu_enable(iommu);
1373 }
1374 EXPORT_SYMBOL(rockchip_iommu_enable);
1375 
rk_iommu_detach_device(struct iommu_domain *domain, struct device *dev)1376 static void rk_iommu_detach_device(struct iommu_domain *domain, struct device *dev)
1377 {
1378     struct rk_iommu *iommu;
1379     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1380     unsigned long flags;
1381     int ret;
1382 
1383     /* Allow 'virtual devices' (eg drm) to detach from domain */
1384     iommu = rk_iommu_from_dev(dev);
1385     if (!iommu) {
1386         return;
1387     }
1388 
1389     dev_dbg(dev, "Detaching from iommu domain\n");
1390 
1391     if (!iommu->domain) {
1392         return;
1393     }
1394 
1395     iommu->domain = NULL;
1396 
1397     spin_lock_irqsave(&rk_domain->iommus_lock, flags);
1398     list_del_init(&iommu->node);
1399     spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
1400 
1401     ret = pm_runtime_get_if_in_use(iommu->dev);
1402     WARN_ON_ONCE(ret < 0);
1403     if (ret > 0) {
1404         rk_iommu_disable(iommu);
1405         pm_runtime_put(iommu->dev);
1406     }
1407 }
1408 
rk_iommu_attach_device(struct iommu_domain *domain, struct device *dev)1409 static int rk_iommu_attach_device(struct iommu_domain *domain, struct device *dev)
1410 {
1411     struct rk_iommu *iommu;
1412     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1413     unsigned long flags;
1414     int ret;
1415 
1416     /*
1417      * Allow 'virtual devices' (e.g., drm) to attach to domain.
1418      * Such a device does not belong to an iommu group.
1419      */
1420     iommu = rk_iommu_from_dev(dev);
1421     if (!iommu) {
1422         return 0;
1423     }
1424 
1425     dev_dbg(dev, "Attaching to iommu domain\n");
1426 
1427     if (iommu->domain) {
1428         rk_iommu_detach_device(iommu->domain, dev);
1429     }
1430 
1431     iommu->domain = domain;
1432 
1433     /* Attach NULL for disable iommu */
1434     if (!domain) {
1435         return 0;
1436     }
1437 
1438     spin_lock_irqsave(&rk_domain->iommus_lock, flags);
1439     list_add_tail(&iommu->node, &rk_domain->iommus);
1440     spin_unlock_irqrestore(&rk_domain->iommus_lock, flags);
1441 
1442     rk_domain->shootdown_entire = iommu->shootdown_entire;
1443     ret = pm_runtime_get_if_in_use(iommu->dev);
1444     if (!ret || WARN_ON_ONCE(ret < 0)) {
1445         return 0;
1446     }
1447 
1448     ret = rk_iommu_enable(iommu);
1449     if (ret) {
1450         rk_iommu_detach_device(iommu->domain, dev);
1451     }
1452 
1453     pm_runtime_put(iommu->dev);
1454 
1455     return ret;
1456 }
1457 
rk_iommu_domain_alloc(unsigned type)1458 static struct iommu_domain *rk_iommu_domain_alloc(unsigned type)
1459 {
1460     struct rk_iommu_domain *rk_domain;
1461 
1462     if (type != IOMMU_DOMAIN_UNMANAGED && type != IOMMU_DOMAIN_DMA) {
1463         return NULL;
1464     }
1465 
1466     if (!dma_dev) {
1467         return NULL;
1468     }
1469 
1470     rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL);
1471     if (!rk_domain) {
1472         return NULL;
1473     }
1474 
1475     if (type == IOMMU_DOMAIN_DMA && iommu_get_dma_cookie(&rk_domain->domain)) {
1476         goto err_free_domain;
1477     }
1478 
1479     /*
1480      * rk32xx iommus use a 2 level pagetable.
1481      * Each level1 (dt) and level2 (pt) table has 1024 4-byte entries.
1482      * Allocate one 4 KiB page for each table.
1483      */
1484     rk_domain->dt = (u32 *)get_zeroed_page(GFP_KERNEL | GFP_DMA32);
1485     if (!rk_domain->dt) {
1486         goto err_put_cookie;
1487     }
1488 
1489     rk_domain->dt_dma = dma_map_single(dma_dev, rk_domain->dt, SPAGE_SIZE, DMA_TO_DEVICE);
1490     if (dma_mapping_error(dma_dev, rk_domain->dt_dma)) {
1491         dev_err(dma_dev, "DMA map error for DT\n");
1492         goto err_free_dt;
1493     }
1494 
1495     rk_table_flush(rk_domain, rk_domain->dt_dma, NUM_DT_ENTRIES);
1496 
1497     spin_lock_init(&rk_domain->iommus_lock);
1498     spin_lock_init(&rk_domain->dt_lock);
1499     INIT_LIST_HEAD(&rk_domain->iommus);
1500 
1501     rk_domain->domain.geometry.aperture_start = 0;
1502     rk_domain->domain.geometry.aperture_end = DMA_BIT_MASK(RK_DMA_BIT_MASK);
1503     rk_domain->domain.geometry.force_aperture = true;
1504 
1505     return &rk_domain->domain;
1506 
1507 err_free_dt:
1508     free_page((unsigned long)rk_domain->dt);
1509 err_put_cookie:
1510     if (type == IOMMU_DOMAIN_DMA) {
1511         iommu_put_dma_cookie(&rk_domain->domain);
1512     }
1513 err_free_domain:
1514     kfree(rk_domain);
1515 
1516     return NULL;
1517 }
1518 
rk_iommu_domain_free(struct iommu_domain *domain)1519 static void rk_iommu_domain_free(struct iommu_domain *domain)
1520 {
1521     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1522     int i;
1523 
1524     WARN_ON(!list_empty(&rk_domain->iommus));
1525 
1526     for (i = 0; i < NUM_DT_ENTRIES; i++) {
1527         u32 dte = rk_domain->dt[i];
1528         if (rk_dte_is_pt_valid(dte)) {
1529             phys_addr_t pt_phys = rk_dte_pt_address(dte);
1530             u32 *page_table = phys_to_virt(pt_phys);
1531             dma_unmap_single(dma_dev, pt_phys, SPAGE_SIZE, DMA_TO_DEVICE);
1532             free_page((unsigned long)page_table);
1533         }
1534     }
1535 
1536     dma_unmap_single(dma_dev, rk_domain->dt_dma, SPAGE_SIZE, DMA_TO_DEVICE);
1537     free_page((unsigned long)rk_domain->dt);
1538 
1539     if (domain->type == IOMMU_DOMAIN_DMA) {
1540         iommu_put_dma_cookie(&rk_domain->domain);
1541     }
1542     kfree(rk_domain);
1543 }
1544 
rk_iommu_domain_free_v2(struct iommu_domain *domain)1545 static void rk_iommu_domain_free_v2(struct iommu_domain *domain)
1546 {
1547     struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
1548     int i;
1549 
1550     WARN_ON(!list_empty(&rk_domain->iommus));
1551 
1552     for (i = 0; i < NUM_DT_ENTRIES; i++) {
1553         u32 dte = rk_domain->dt[i];
1554 
1555         if (rk_dte_is_pt_valid(dte)) {
1556             phys_addr_t pt_phys = rk_dte_pt_address_v2(dte);
1557             u32 *page_table = phys_to_virt(pt_phys);
1558 
1559             dma_unmap_single(dma_dev, pt_phys, SPAGE_SIZE, DMA_TO_DEVICE);
1560             free_page((unsigned long)page_table);
1561         }
1562     }
1563 
1564     dma_unmap_single(dma_dev, rk_domain->dt_dma, SPAGE_SIZE, DMA_TO_DEVICE);
1565     free_page((unsigned long)rk_domain->dt);
1566 
1567     if (domain->type == IOMMU_DOMAIN_DMA) {
1568         iommu_put_dma_cookie(&rk_domain->domain);
1569     }
1570     kfree(rk_domain);
1571 }
1572 
rk_iommu_probe_device(struct device *dev)1573 static struct iommu_device *rk_iommu_probe_device(struct device *dev)
1574 {
1575     struct rk_iommudata *data;
1576     struct rk_iommu *iommu;
1577 
1578     data = dev_iommu_priv_get(dev);
1579     if (!data) {
1580         return ERR_PTR(-ENODEV);
1581     }
1582 
1583     iommu = rk_iommu_from_dev(dev);
1584 
1585     data->link = device_link_add(dev, iommu->dev, DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME);
1586 
1587     data->defer_attach = false;
1588 
1589     /* set max segment size for dev, needed for single chunk map */
1590     if (!dev->dma_parms) {
1591         dev->dma_parms = kzalloc(sizeof(*dev->dma_parms), GFP_KERNEL);
1592     }
1593     if (!dev->dma_parms) {
1594         return ERR_PTR(-ENOMEM);
1595     }
1596 
1597     dma_set_max_seg_size(dev, DMA_BIT_MASK(RK_DMA_BIT_MASK));
1598 
1599     return &iommu->iommu;
1600 }
1601 
rk_iommu_release_device(struct device *dev)1602 static void rk_iommu_release_device(struct device *dev)
1603 {
1604     struct rk_iommudata *data = dev_iommu_priv_get(dev);
1605 
1606     device_link_del(data->link);
1607 }
1608 
rk_iommu_device_group(struct device *dev)1609 static struct iommu_group *rk_iommu_device_group(struct device *dev)
1610 {
1611     struct rk_iommu *iommu;
1612 
1613     iommu = rk_iommu_from_dev(dev);
1614 
1615     return iommu_group_ref_get(iommu->group);
1616 }
1617 
rk_iommu_is_attach_deferred(struct iommu_domain *domain, struct device *dev)1618 static bool rk_iommu_is_attach_deferred(struct iommu_domain *domain, struct device *dev)
1619 {
1620     struct rk_iommudata *data = dev_iommu_priv_get(dev);
1621 
1622     return data->defer_attach;
1623 }
1624 
rk_iommu_of_xlate(struct device *dev, struct of_phandle_args *args)1625 static int rk_iommu_of_xlate(struct device *dev, struct of_phandle_args *args)
1626 {
1627     struct platform_device *iommu_dev;
1628     struct rk_iommudata *data;
1629 
1630     data = devm_kzalloc(dma_dev, sizeof(*data), GFP_KERNEL);
1631     if (!data) {
1632         return -ENOMEM;
1633     }
1634 
1635     iommu_dev = of_find_device_by_node(args->np);
1636 
1637     data->iommu = platform_get_drvdata(iommu_dev);
1638 
1639     if (strstr(dev_name(dev), "vop")) {
1640         data->defer_attach = true;
1641     }
1642 
1643     dev_iommu_priv_set(dev, data);
1644 
1645     platform_device_put(iommu_dev);
1646 
1647     return 0;
1648 }
1649 
rk_iommu_mask_irq(struct device *dev)1650 void rk_iommu_mask_irq(struct device *dev)
1651 {
1652     struct rk_iommu *iommu = rk_iommu_from_dev(dev);
1653     int i;
1654 
1655     if (!iommu) {
1656         return;
1657     }
1658 
1659     for (i = 0; i < iommu->num_mmu; i++) {
1660         rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, 0);
1661     }
1662 }
1663 EXPORT_SYMBOL(rk_iommu_mask_irq);
1664 
rk_iommu_unmask_irq(struct device *dev)1665 void rk_iommu_unmask_irq(struct device *dev)
1666 {
1667     struct rk_iommu *iommu = rk_iommu_from_dev(dev);
1668     int i;
1669 
1670     if (!iommu) {
1671         return;
1672     }
1673 
1674     for (i = 0; i < iommu->num_mmu; i++) {
1675         /* Need to zap tlb in case of mapping during pagefault */
1676         rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_ZAP_CACHE);
1677         rk_iommu_write(iommu->bases[i], RK_MMU_INT_MASK, RK_MMU_IRQ_MASK);
1678         /* Leave iommu in pagefault state until mapping finished */
1679         rk_iommu_base_command(iommu->bases[i], RK_MMU_CMD_PAGE_FAULT_DONE);
1680     }
1681 }
1682 EXPORT_SYMBOL(rk_iommu_unmask_irq);
1683 
1684 static struct iommu_ops rk_iommu_ops = {
1685     .domain_alloc = rk_iommu_domain_alloc,
1686     .domain_free = rk_iommu_domain_free,
1687     .attach_dev = rk_iommu_attach_device,
1688     .detach_dev = rk_iommu_detach_device,
1689     .map = rk_iommu_map,
1690     .unmap = rk_iommu_unmap,
1691     .flush_iotlb_all = rk_iommu_flush_tlb_all,
1692     .probe_device = rk_iommu_probe_device,
1693     .release_device = rk_iommu_release_device,
1694     .iova_to_phys = rk_iommu_iova_to_phys,
1695     .is_attach_deferred = rk_iommu_is_attach_deferred,
1696     .device_group = rk_iommu_device_group,
1697     .pgsize_bitmap = RK_IOMMU_PGSIZE_BITMAP,
1698     .of_xlate = rk_iommu_of_xlate,
1699 };
1700 
1701 static struct iommu_ops rk_iommu_ops_v2 = {
1702     .domain_alloc = rk_iommu_domain_alloc,
1703     .domain_free = rk_iommu_domain_free_v2,
1704     .attach_dev = rk_iommu_attach_device,
1705     .detach_dev = rk_iommu_detach_device,
1706     .map = rk_iommu_map_v2,
1707     .unmap = rk_iommu_unmap_v2,
1708     .flush_iotlb_all = rk_iommu_flush_tlb_all,
1709     .probe_device = rk_iommu_probe_device,
1710     .release_device = rk_iommu_release_device,
1711     .iova_to_phys = rk_iommu_iova_to_phys_v2,
1712     .is_attach_deferred = rk_iommu_is_attach_deferred,
1713     .device_group = rk_iommu_device_group,
1714     .pgsize_bitmap = RK_IOMMU_PGSIZE_BITMAP,
1715     .of_xlate = rk_iommu_of_xlate,
1716 };
1717 
1718 static const struct rockchip_iommu_data iommu_data_v1 = {
1719     .version = 0x1,
1720 };
1721 
1722 static const struct rockchip_iommu_data iommu_data_v2 = {
1723     .version = 0x2,
1724 };
1725 
1726 static const struct of_device_id rk_iommu_dt_ids[] = {
1727     {
1728         .compatible = "rockchip,iommu",
1729         .data = &iommu_data_v1,
1730     },
1731     {
1732         .compatible = "rockchip,iommu-v2",
1733         .data = &iommu_data_v2,
1734     },
1735     {}
1736 };
1737 
rk_iommu_probe(struct platform_device *pdev)1738 static int rk_iommu_probe(struct platform_device *pdev)
1739 {
1740     struct device *dev = &pdev->dev;
1741     struct rk_iommu *iommu;
1742     struct resource *res;
1743     int num_res = pdev->num_resources;
1744     int err, i;
1745     const struct of_device_id *match;
1746     struct rockchip_iommu_data *data;
1747 
1748     iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL);
1749     if (!iommu) {
1750         return -ENOMEM;
1751     }
1752 
1753     match = of_match_device(rk_iommu_dt_ids, dev);
1754     if (!match) {
1755         return -EINVAL;
1756     }
1757 
1758     data = (struct rockchip_iommu_data *)match->data;
1759     iommu->version = data->version;
1760     dev_info(dev, "version = %x\n", iommu->version);
1761 
1762     platform_set_drvdata(pdev, iommu);
1763     iommu->dev = dev;
1764     iommu->num_mmu = 0;
1765 
1766     iommu->bases = devm_kcalloc(dev, num_res, sizeof(*iommu->bases), GFP_KERNEL);
1767     if (!iommu->bases) {
1768         return -ENOMEM;
1769     }
1770 
1771     for (i = 0; i < num_res; i++) {
1772         res = platform_get_resource(pdev, IORESOURCE_MEM, i);
1773         if (!res) {
1774             continue;
1775         }
1776         iommu->bases[i] = devm_ioremap_resource(&pdev->dev, res);
1777         if (IS_ERR(iommu->bases[i])) {
1778             continue;
1779         }
1780         iommu->num_mmu++;
1781     }
1782     if (iommu->num_mmu == 0) {
1783         return PTR_ERR(iommu->bases[0]);
1784     }
1785 
1786     iommu->num_irq = platform_irq_count(pdev);
1787     if (iommu->num_irq < 0) {
1788         return iommu->num_irq;
1789     }
1790 
1791     iommu->reset_disabled = device_property_read_bool(dev, "rockchip,disable-mmu-reset");
1792     iommu->skip_read = device_property_read_bool(dev, "rockchip,skip-mmu-read");
1793     iommu->dlr_disable = device_property_read_bool(dev, "rockchip,disable-device-link-resume");
1794     iommu->shootdown_entire = device_property_read_bool(dev, "rockchip,shootdown-entire");
1795 
1796     if (of_machine_is_compatible("rockchip,rv1126") || of_machine_is_compatible("rockchip,rv1109")) {
1797         iommu->cmd_retry = device_property_read_bool(dev, "rockchip,enable-cmd-retry");
1798     }
1799 
1800     /*
1801      * iommu clocks should be present for all new devices and devicetrees
1802      * but there are older devicetrees without clocks out in the wild.
1803      * So clocks as optional for the time being.
1804      */
1805     err = devm_clk_bulk_get_all(dev, &iommu->clocks);
1806     if (err == -ENOENT) {
1807         iommu->num_clocks = 0;
1808     } else if (err < 0) {
1809         return err;
1810     } else {
1811         iommu->num_clocks = err;
1812     }
1813 
1814     err = clk_bulk_prepare(iommu->num_clocks, iommu->clocks);
1815     if (err) {
1816         return err;
1817     }
1818 
1819     iommu->group = iommu_group_alloc();
1820     if (IS_ERR(iommu->group)) {
1821         err = PTR_ERR(iommu->group);
1822         goto err_unprepare_clocks;
1823     }
1824 
1825     err = iommu_device_sysfs_add(&iommu->iommu, dev, NULL, dev_name(dev));
1826     if (err) {
1827         goto err_put_group;
1828     }
1829 
1830     if (iommu->version >= 0x2) {
1831         iommu_device_set_ops(&iommu->iommu, &rk_iommu_ops_v2);
1832     } else {
1833         iommu_device_set_ops(&iommu->iommu, &rk_iommu_ops);
1834     }
1835     iommu_device_set_fwnode(&iommu->iommu, &dev->of_node->fwnode);
1836 
1837     err = iommu_device_register(&iommu->iommu);
1838     if (err) {
1839         goto err_remove_sysfs;
1840     }
1841 
1842     /*
1843      * Use the first registered IOMMU device for domain to use with DMA
1844      * API, since a domain might not physically correspond to a single
1845      * IOMMU device..
1846      */
1847     if (!dma_dev) {
1848         dma_dev = &pdev->dev;
1849     }
1850 
1851     if (iommu->version >= 0x2) {
1852         bus_set_iommu(&platform_bus_type, &rk_iommu_ops_v2);
1853     } else {
1854         bus_set_iommu(&platform_bus_type, &rk_iommu_ops);
1855     }
1856 
1857     pm_runtime_enable(dev);
1858 
1859     if (iommu->skip_read) {
1860         goto skip_request_irq;
1861     }
1862 
1863     for (i = 0; i < iommu->num_irq; i++) {
1864         int irq = platform_get_irq(pdev, i);
1865         if (irq < 0) {
1866             return irq;
1867         }
1868 
1869         err = devm_request_irq(iommu->dev, irq, rk_iommu_irq, IRQF_SHARED, dev_name(dev), iommu);
1870         if (err) {
1871             pm_runtime_disable(dev);
1872             goto err_remove_sysfs;
1873         }
1874     }
1875 
1876 skip_request_irq:
1877     return 0;
1878 err_remove_sysfs:
1879     iommu_device_sysfs_remove(&iommu->iommu);
1880 err_put_group:
1881     iommu_group_put(iommu->group);
1882 err_unprepare_clocks:
1883     clk_bulk_unprepare(iommu->num_clocks, iommu->clocks);
1884     return err;
1885 }
1886 
rk_iommu_shutdown(struct platform_device *pdev)1887 static void rk_iommu_shutdown(struct platform_device *pdev)
1888 {
1889     struct rk_iommu *iommu = platform_get_drvdata(pdev);
1890     int i;
1891 
1892     for (i = 0; i < iommu->num_irq; i++) {
1893         int irq = platform_get_irq(pdev, i);
1894 
1895         devm_free_irq(iommu->dev, irq, iommu);
1896     }
1897 
1898     pm_runtime_force_suspend(&pdev->dev);
1899 }
1900 
rk_iommu_suspend(struct device *dev)1901 static int __maybe_unused rk_iommu_suspend(struct device *dev)
1902 {
1903     struct rk_iommu *iommu = dev_get_drvdata(dev);
1904 
1905     if (!iommu->domain) {
1906         return 0;
1907     }
1908 
1909     if (iommu->dlr_disable) {
1910         return 0;
1911     }
1912 
1913     rk_iommu_disable(iommu);
1914     return 0;
1915 }
1916 
rk_iommu_resume(struct device *dev)1917 static int __maybe_unused rk_iommu_resume(struct device *dev)
1918 {
1919     struct rk_iommu *iommu = dev_get_drvdata(dev);
1920 
1921     if (!iommu->domain) {
1922         return 0;
1923     }
1924 
1925     if (iommu->dlr_disable) {
1926         return 0;
1927     }
1928 
1929     return rk_iommu_enable(iommu);
1930 }
1931 
1932 static const struct dev_pm_ops rk_iommu_pm_ops = {
1933     SET_RUNTIME_PM_OPS(rk_iommu_suspend, rk_iommu_resume, NULL)
1934         SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)};
1935 
1936 static struct platform_driver rk_iommu_driver = {
1937     .probe = rk_iommu_probe,
1938     .shutdown = rk_iommu_shutdown,
1939     .driver =
1940         {
1941             .name = "rk_iommu",
1942             .of_match_table = rk_iommu_dt_ids,
1943             .pm = &rk_iommu_pm_ops,
1944             .suppress_bind_attrs = true,
1945         },
1946 };
1947 
rk_iommu_init(void)1948 static int __init rk_iommu_init(void)
1949 {
1950     return platform_driver_register(&rk_iommu_driver);
1951 }
1952 subsys_initcall(rk_iommu_init);
1953 
1954 MODULE_DESCRIPTION("IOMMU API for Rockchip");
1955 MODULE_AUTHOR("Simon Xue <xxm@rock-chips.com> and Daniel Kurtz <djkurtz@chromium.org>");
1956 MODULE_ALIAS("platform:rockchip-iommu");
1957 MODULE_LICENSE("GPL v2");
1958