dma-mapping.c 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903
  1. /*
  2. * SWIOTLB-based DMA API implementation
  3. *
  4. * Copyright (C) 2012 ARM Ltd.
  5. * Author: Catalin Marinas <catalin.marinas@arm.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License version 2 as
  9. * published by the Free Software Foundation.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. #include <linux/gfp.h>
  20. #include <linux/acpi.h>
  21. #include <linux/bootmem.h>
  22. #include <linux/cache.h>
  23. #include <linux/export.h>
  24. #include <linux/slab.h>
  25. #include <linux/genalloc.h>
  26. #include <linux/dma-direct.h>
  27. #include <linux/dma-contiguous.h>
  28. #include <linux/vmalloc.h>
  29. #include <linux/swiotlb.h>
  30. #include <linux/pci.h>
  31. #include <asm/cacheflush.h>
  32. static int swiotlb __ro_after_init;
  33. static pgprot_t __get_dma_pgprot(unsigned long attrs, pgprot_t prot,
  34. bool coherent)
  35. {
  36. if (!coherent || (attrs & DMA_ATTR_WRITE_COMBINE))
  37. return pgprot_writecombine(prot);
  38. return prot;
  39. }
  40. static struct gen_pool *atomic_pool __ro_after_init;
  41. #define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
  42. static size_t atomic_pool_size __initdata = DEFAULT_DMA_COHERENT_POOL_SIZE;
  43. static int __init early_coherent_pool(char *p)
  44. {
  45. atomic_pool_size = memparse(p, &p);
  46. return 0;
  47. }
  48. early_param("coherent_pool", early_coherent_pool);
  49. static void *__alloc_from_pool(size_t size, struct page **ret_page, gfp_t flags)
  50. {
  51. unsigned long val;
  52. void *ptr = NULL;
  53. if (!atomic_pool) {
  54. WARN(1, "coherent pool not initialised!\n");
  55. return NULL;
  56. }
  57. val = gen_pool_alloc(atomic_pool, size);
  58. if (val) {
  59. phys_addr_t phys = gen_pool_virt_to_phys(atomic_pool, val);
  60. *ret_page = phys_to_page(phys);
  61. ptr = (void *)val;
  62. memset(ptr, 0, size);
  63. }
  64. return ptr;
  65. }
  66. static bool __in_atomic_pool(void *start, size_t size)
  67. {
  68. return addr_in_gen_pool(atomic_pool, (unsigned long)start, size);
  69. }
  70. static int __free_from_pool(void *start, size_t size)
  71. {
  72. if (!__in_atomic_pool(start, size))
  73. return 0;
  74. gen_pool_free(atomic_pool, (unsigned long)start, size);
  75. return 1;
  76. }
  77. static void *__dma_alloc(struct device *dev, size_t size,
  78. dma_addr_t *dma_handle, gfp_t flags,
  79. unsigned long attrs)
  80. {
  81. struct page *page;
  82. void *ptr, *coherent_ptr;
  83. bool coherent = is_device_dma_coherent(dev);
  84. pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL, false);
  85. size = PAGE_ALIGN(size);
  86. if (!coherent && !gfpflags_allow_blocking(flags)) {
  87. struct page *page = NULL;
  88. void *addr = __alloc_from_pool(size, &page, flags);
  89. if (addr)
  90. *dma_handle = phys_to_dma(dev, page_to_phys(page));
  91. return addr;
  92. }
  93. ptr = swiotlb_alloc(dev, size, dma_handle, flags, attrs);
  94. if (!ptr)
  95. goto no_mem;
  96. /* no need for non-cacheable mapping if coherent */
  97. if (coherent)
  98. return ptr;
  99. /* remove any dirty cache lines on the kernel alias */
  100. __dma_flush_area(ptr, size);
  101. /* create a coherent mapping */
  102. page = virt_to_page(ptr);
  103. coherent_ptr = dma_common_contiguous_remap(page, size, VM_USERMAP,
  104. prot, __builtin_return_address(0));
  105. if (!coherent_ptr)
  106. goto no_map;
  107. return coherent_ptr;
  108. no_map:
  109. swiotlb_free(dev, size, ptr, *dma_handle, attrs);
  110. no_mem:
  111. return NULL;
  112. }
  113. static void __dma_free(struct device *dev, size_t size,
  114. void *vaddr, dma_addr_t dma_handle,
  115. unsigned long attrs)
  116. {
  117. void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle));
  118. size = PAGE_ALIGN(size);
  119. if (!is_device_dma_coherent(dev)) {
  120. if (__free_from_pool(vaddr, size))
  121. return;
  122. vunmap(vaddr);
  123. }
  124. swiotlb_free(dev, size, swiotlb_addr, dma_handle, attrs);
  125. }
  126. static dma_addr_t __swiotlb_map_page(struct device *dev, struct page *page,
  127. unsigned long offset, size_t size,
  128. enum dma_data_direction dir,
  129. unsigned long attrs)
  130. {
  131. dma_addr_t dev_addr;
  132. dev_addr = swiotlb_map_page(dev, page, offset, size, dir, attrs);
  133. if (!is_device_dma_coherent(dev) &&
  134. (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  135. __dma_map_area(phys_to_virt(dma_to_phys(dev, dev_addr)), size, dir);
  136. return dev_addr;
  137. }
  138. static void __swiotlb_unmap_page(struct device *dev, dma_addr_t dev_addr,
  139. size_t size, enum dma_data_direction dir,
  140. unsigned long attrs)
  141. {
  142. if (!is_device_dma_coherent(dev) &&
  143. (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  144. __dma_unmap_area(phys_to_virt(dma_to_phys(dev, dev_addr)), size, dir);
  145. swiotlb_unmap_page(dev, dev_addr, size, dir, attrs);
  146. }
  147. static int __swiotlb_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
  148. int nelems, enum dma_data_direction dir,
  149. unsigned long attrs)
  150. {
  151. struct scatterlist *sg;
  152. int i, ret;
  153. ret = swiotlb_map_sg_attrs(dev, sgl, nelems, dir, attrs);
  154. if (!is_device_dma_coherent(dev) &&
  155. (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  156. for_each_sg(sgl, sg, ret, i)
  157. __dma_map_area(phys_to_virt(dma_to_phys(dev, sg->dma_address)),
  158. sg->length, dir);
  159. return ret;
  160. }
  161. static void __swiotlb_unmap_sg_attrs(struct device *dev,
  162. struct scatterlist *sgl, int nelems,
  163. enum dma_data_direction dir,
  164. unsigned long attrs)
  165. {
  166. struct scatterlist *sg;
  167. int i;
  168. if (!is_device_dma_coherent(dev) &&
  169. (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  170. for_each_sg(sgl, sg, nelems, i)
  171. __dma_unmap_area(phys_to_virt(dma_to_phys(dev, sg->dma_address)),
  172. sg->length, dir);
  173. swiotlb_unmap_sg_attrs(dev, sgl, nelems, dir, attrs);
  174. }
  175. static void __swiotlb_sync_single_for_cpu(struct device *dev,
  176. dma_addr_t dev_addr, size_t size,
  177. enum dma_data_direction dir)
  178. {
  179. if (!is_device_dma_coherent(dev))
  180. __dma_unmap_area(phys_to_virt(dma_to_phys(dev, dev_addr)), size, dir);
  181. swiotlb_sync_single_for_cpu(dev, dev_addr, size, dir);
  182. }
  183. static void __swiotlb_sync_single_for_device(struct device *dev,
  184. dma_addr_t dev_addr, size_t size,
  185. enum dma_data_direction dir)
  186. {
  187. swiotlb_sync_single_for_device(dev, dev_addr, size, dir);
  188. if (!is_device_dma_coherent(dev))
  189. __dma_map_area(phys_to_virt(dma_to_phys(dev, dev_addr)), size, dir);
  190. }
  191. static void __swiotlb_sync_sg_for_cpu(struct device *dev,
  192. struct scatterlist *sgl, int nelems,
  193. enum dma_data_direction dir)
  194. {
  195. struct scatterlist *sg;
  196. int i;
  197. if (!is_device_dma_coherent(dev))
  198. for_each_sg(sgl, sg, nelems, i)
  199. __dma_unmap_area(phys_to_virt(dma_to_phys(dev, sg->dma_address)),
  200. sg->length, dir);
  201. swiotlb_sync_sg_for_cpu(dev, sgl, nelems, dir);
  202. }
  203. static void __swiotlb_sync_sg_for_device(struct device *dev,
  204. struct scatterlist *sgl, int nelems,
  205. enum dma_data_direction dir)
  206. {
  207. struct scatterlist *sg;
  208. int i;
  209. swiotlb_sync_sg_for_device(dev, sgl, nelems, dir);
  210. if (!is_device_dma_coherent(dev))
  211. for_each_sg(sgl, sg, nelems, i)
  212. __dma_map_area(phys_to_virt(dma_to_phys(dev, sg->dma_address)),
  213. sg->length, dir);
  214. }
  215. static int __swiotlb_mmap_pfn(struct vm_area_struct *vma,
  216. unsigned long pfn, size_t size)
  217. {
  218. int ret = -ENXIO;
  219. unsigned long nr_vma_pages = vma_pages(vma);
  220. unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT;
  221. unsigned long off = vma->vm_pgoff;
  222. if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) {
  223. ret = remap_pfn_range(vma, vma->vm_start,
  224. pfn + off,
  225. vma->vm_end - vma->vm_start,
  226. vma->vm_page_prot);
  227. }
  228. return ret;
  229. }
  230. static int __swiotlb_mmap(struct device *dev,
  231. struct vm_area_struct *vma,
  232. void *cpu_addr, dma_addr_t dma_addr, size_t size,
  233. unsigned long attrs)
  234. {
  235. int ret;
  236. unsigned long pfn = dma_to_phys(dev, dma_addr) >> PAGE_SHIFT;
  237. vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
  238. is_device_dma_coherent(dev));
  239. if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
  240. return ret;
  241. return __swiotlb_mmap_pfn(vma, pfn, size);
  242. }
  243. static int __swiotlb_get_sgtable_page(struct sg_table *sgt,
  244. struct page *page, size_t size)
  245. {
  246. int ret = sg_alloc_table(sgt, 1, GFP_KERNEL);
  247. if (!ret)
  248. sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
  249. return ret;
  250. }
  251. static int __swiotlb_get_sgtable(struct device *dev, struct sg_table *sgt,
  252. void *cpu_addr, dma_addr_t handle, size_t size,
  253. unsigned long attrs)
  254. {
  255. struct page *page = phys_to_page(dma_to_phys(dev, handle));
  256. return __swiotlb_get_sgtable_page(sgt, page, size);
  257. }
  258. static int __swiotlb_dma_supported(struct device *hwdev, u64 mask)
  259. {
  260. if (swiotlb)
  261. return swiotlb_dma_supported(hwdev, mask);
  262. return 1;
  263. }
  264. static int __swiotlb_dma_mapping_error(struct device *hwdev, dma_addr_t addr)
  265. {
  266. if (swiotlb)
  267. return swiotlb_dma_mapping_error(hwdev, addr);
  268. return 0;
  269. }
  270. static const struct dma_map_ops arm64_swiotlb_dma_ops = {
  271. .alloc = __dma_alloc,
  272. .free = __dma_free,
  273. .mmap = __swiotlb_mmap,
  274. .get_sgtable = __swiotlb_get_sgtable,
  275. .map_page = __swiotlb_map_page,
  276. .unmap_page = __swiotlb_unmap_page,
  277. .map_sg = __swiotlb_map_sg_attrs,
  278. .unmap_sg = __swiotlb_unmap_sg_attrs,
  279. .sync_single_for_cpu = __swiotlb_sync_single_for_cpu,
  280. .sync_single_for_device = __swiotlb_sync_single_for_device,
  281. .sync_sg_for_cpu = __swiotlb_sync_sg_for_cpu,
  282. .sync_sg_for_device = __swiotlb_sync_sg_for_device,
  283. .dma_supported = __swiotlb_dma_supported,
  284. .mapping_error = __swiotlb_dma_mapping_error,
  285. };
  286. static int __init atomic_pool_init(void)
  287. {
  288. pgprot_t prot = __pgprot(PROT_NORMAL_NC);
  289. unsigned long nr_pages = atomic_pool_size >> PAGE_SHIFT;
  290. struct page *page;
  291. void *addr;
  292. unsigned int pool_size_order = get_order(atomic_pool_size);
  293. if (dev_get_cma_area(NULL))
  294. page = dma_alloc_from_contiguous(NULL, nr_pages,
  295. pool_size_order, false);
  296. else
  297. page = alloc_pages(GFP_DMA32, pool_size_order);
  298. if (page) {
  299. int ret;
  300. void *page_addr = page_address(page);
  301. memset(page_addr, 0, atomic_pool_size);
  302. __dma_flush_area(page_addr, atomic_pool_size);
  303. atomic_pool = gen_pool_create(PAGE_SHIFT, -1);
  304. if (!atomic_pool)
  305. goto free_page;
  306. addr = dma_common_contiguous_remap(page, atomic_pool_size,
  307. VM_USERMAP, prot, atomic_pool_init);
  308. if (!addr)
  309. goto destroy_genpool;
  310. ret = gen_pool_add_virt(atomic_pool, (unsigned long)addr,
  311. page_to_phys(page),
  312. atomic_pool_size, -1);
  313. if (ret)
  314. goto remove_mapping;
  315. gen_pool_set_algo(atomic_pool,
  316. gen_pool_first_fit_order_align,
  317. NULL);
  318. pr_info("DMA: preallocated %zu KiB pool for atomic allocations\n",
  319. atomic_pool_size / 1024);
  320. return 0;
  321. }
  322. goto out;
  323. remove_mapping:
  324. dma_common_free_remap(addr, atomic_pool_size, VM_USERMAP);
  325. destroy_genpool:
  326. gen_pool_destroy(atomic_pool);
  327. atomic_pool = NULL;
  328. free_page:
  329. if (!dma_release_from_contiguous(NULL, page, nr_pages))
  330. __free_pages(page, pool_size_order);
  331. out:
  332. pr_err("DMA: failed to allocate %zu KiB pool for atomic coherent allocation\n",
  333. atomic_pool_size / 1024);
  334. return -ENOMEM;
  335. }
  336. /********************************************
  337. * The following APIs are for dummy DMA ops *
  338. ********************************************/
  339. static void *__dummy_alloc(struct device *dev, size_t size,
  340. dma_addr_t *dma_handle, gfp_t flags,
  341. unsigned long attrs)
  342. {
  343. return NULL;
  344. }
  345. static void __dummy_free(struct device *dev, size_t size,
  346. void *vaddr, dma_addr_t dma_handle,
  347. unsigned long attrs)
  348. {
  349. }
  350. static int __dummy_mmap(struct device *dev,
  351. struct vm_area_struct *vma,
  352. void *cpu_addr, dma_addr_t dma_addr, size_t size,
  353. unsigned long attrs)
  354. {
  355. return -ENXIO;
  356. }
  357. static dma_addr_t __dummy_map_page(struct device *dev, struct page *page,
  358. unsigned long offset, size_t size,
  359. enum dma_data_direction dir,
  360. unsigned long attrs)
  361. {
  362. return 0;
  363. }
  364. static void __dummy_unmap_page(struct device *dev, dma_addr_t dev_addr,
  365. size_t size, enum dma_data_direction dir,
  366. unsigned long attrs)
  367. {
  368. }
  369. static int __dummy_map_sg(struct device *dev, struct scatterlist *sgl,
  370. int nelems, enum dma_data_direction dir,
  371. unsigned long attrs)
  372. {
  373. return 0;
  374. }
  375. static void __dummy_unmap_sg(struct device *dev,
  376. struct scatterlist *sgl, int nelems,
  377. enum dma_data_direction dir,
  378. unsigned long attrs)
  379. {
  380. }
  381. static void __dummy_sync_single(struct device *dev,
  382. dma_addr_t dev_addr, size_t size,
  383. enum dma_data_direction dir)
  384. {
  385. }
  386. static void __dummy_sync_sg(struct device *dev,
  387. struct scatterlist *sgl, int nelems,
  388. enum dma_data_direction dir)
  389. {
  390. }
  391. static int __dummy_mapping_error(struct device *hwdev, dma_addr_t dma_addr)
  392. {
  393. return 1;
  394. }
  395. static int __dummy_dma_supported(struct device *hwdev, u64 mask)
  396. {
  397. return 0;
  398. }
  399. const struct dma_map_ops dummy_dma_ops = {
  400. .alloc = __dummy_alloc,
  401. .free = __dummy_free,
  402. .mmap = __dummy_mmap,
  403. .map_page = __dummy_map_page,
  404. .unmap_page = __dummy_unmap_page,
  405. .map_sg = __dummy_map_sg,
  406. .unmap_sg = __dummy_unmap_sg,
  407. .sync_single_for_cpu = __dummy_sync_single,
  408. .sync_single_for_device = __dummy_sync_single,
  409. .sync_sg_for_cpu = __dummy_sync_sg,
  410. .sync_sg_for_device = __dummy_sync_sg,
  411. .mapping_error = __dummy_mapping_error,
  412. .dma_supported = __dummy_dma_supported,
  413. };
  414. EXPORT_SYMBOL(dummy_dma_ops);
  415. static int __init arm64_dma_init(void)
  416. {
  417. if (swiotlb_force == SWIOTLB_FORCE ||
  418. max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT))
  419. swiotlb = 1;
  420. WARN_TAINT(ARCH_DMA_MINALIGN < cache_line_size(),
  421. TAINT_CPU_OUT_OF_SPEC,
  422. "ARCH_DMA_MINALIGN smaller than CTR_EL0.CWG (%d < %d)",
  423. ARCH_DMA_MINALIGN, cache_line_size());
  424. return atomic_pool_init();
  425. }
  426. arch_initcall(arm64_dma_init);
  427. #ifdef CONFIG_IOMMU_DMA
  428. #include <linux/dma-iommu.h>
  429. #include <linux/platform_device.h>
  430. #include <linux/amba/bus.h>
  431. /* Thankfully, all cache ops are by VA so we can ignore phys here */
  432. static void flush_page(struct device *dev, const void *virt, phys_addr_t phys)
  433. {
  434. __dma_flush_area(virt, PAGE_SIZE);
  435. }
  436. static void *__iommu_alloc_attrs(struct device *dev, size_t size,
  437. dma_addr_t *handle, gfp_t gfp,
  438. unsigned long attrs)
  439. {
  440. bool coherent = is_device_dma_coherent(dev);
  441. int ioprot = dma_info_to_prot(DMA_BIDIRECTIONAL, coherent, attrs);
  442. size_t iosize = size;
  443. void *addr;
  444. if (WARN(!dev, "cannot create IOMMU mapping for unknown device\n"))
  445. return NULL;
  446. size = PAGE_ALIGN(size);
  447. /*
  448. * Some drivers rely on this, and we probably don't want the
  449. * possibility of stale kernel data being read by devices anyway.
  450. */
  451. gfp |= __GFP_ZERO;
  452. if (!gfpflags_allow_blocking(gfp)) {
  453. struct page *page;
  454. /*
  455. * In atomic context we can't remap anything, so we'll only
  456. * get the virtually contiguous buffer we need by way of a
  457. * physically contiguous allocation.
  458. */
  459. if (coherent) {
  460. page = alloc_pages(gfp, get_order(size));
  461. addr = page ? page_address(page) : NULL;
  462. } else {
  463. addr = __alloc_from_pool(size, &page, gfp);
  464. }
  465. if (!addr)
  466. return NULL;
  467. *handle = iommu_dma_map_page(dev, page, 0, iosize, ioprot);
  468. if (iommu_dma_mapping_error(dev, *handle)) {
  469. if (coherent)
  470. __free_pages(page, get_order(size));
  471. else
  472. __free_from_pool(addr, size);
  473. addr = NULL;
  474. }
  475. } else if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
  476. pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL, coherent);
  477. struct page *page;
  478. page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
  479. get_order(size), gfp & __GFP_NOWARN);
  480. if (!page)
  481. return NULL;
  482. *handle = iommu_dma_map_page(dev, page, 0, iosize, ioprot);
  483. if (iommu_dma_mapping_error(dev, *handle)) {
  484. dma_release_from_contiguous(dev, page,
  485. size >> PAGE_SHIFT);
  486. return NULL;
  487. }
  488. addr = dma_common_contiguous_remap(page, size, VM_USERMAP,
  489. prot,
  490. __builtin_return_address(0));
  491. if (addr) {
  492. if (!coherent)
  493. __dma_flush_area(page_to_virt(page), iosize);
  494. memset(addr, 0, size);
  495. } else {
  496. iommu_dma_unmap_page(dev, *handle, iosize, 0, attrs);
  497. dma_release_from_contiguous(dev, page,
  498. size >> PAGE_SHIFT);
  499. }
  500. } else {
  501. pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL, coherent);
  502. struct page **pages;
  503. pages = iommu_dma_alloc(dev, iosize, gfp, attrs, ioprot,
  504. handle, flush_page);
  505. if (!pages)
  506. return NULL;
  507. addr = dma_common_pages_remap(pages, size, VM_USERMAP, prot,
  508. __builtin_return_address(0));
  509. if (!addr)
  510. iommu_dma_free(dev, pages, iosize, handle);
  511. }
  512. return addr;
  513. }
  514. static void __iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr,
  515. dma_addr_t handle, unsigned long attrs)
  516. {
  517. size_t iosize = size;
  518. size = PAGE_ALIGN(size);
  519. /*
  520. * @cpu_addr will be one of 4 things depending on how it was allocated:
  521. * - A remapped array of pages for contiguous allocations.
  522. * - A remapped array of pages from iommu_dma_alloc(), for all
  523. * non-atomic allocations.
  524. * - A non-cacheable alias from the atomic pool, for atomic
  525. * allocations by non-coherent devices.
  526. * - A normal lowmem address, for atomic allocations by
  527. * coherent devices.
  528. * Hence how dodgy the below logic looks...
  529. */
  530. if (__in_atomic_pool(cpu_addr, size)) {
  531. iommu_dma_unmap_page(dev, handle, iosize, 0, 0);
  532. __free_from_pool(cpu_addr, size);
  533. } else if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
  534. struct page *page = vmalloc_to_page(cpu_addr);
  535. iommu_dma_unmap_page(dev, handle, iosize, 0, attrs);
  536. dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT);
  537. dma_common_free_remap(cpu_addr, size, VM_USERMAP);
  538. } else if (is_vmalloc_addr(cpu_addr)){
  539. struct vm_struct *area = find_vm_area(cpu_addr);
  540. if (WARN_ON(!area || !area->pages))
  541. return;
  542. iommu_dma_free(dev, area->pages, iosize, &handle);
  543. dma_common_free_remap(cpu_addr, size, VM_USERMAP);
  544. } else {
  545. iommu_dma_unmap_page(dev, handle, iosize, 0, 0);
  546. __free_pages(virt_to_page(cpu_addr), get_order(size));
  547. }
  548. }
  549. static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma,
  550. void *cpu_addr, dma_addr_t dma_addr, size_t size,
  551. unsigned long attrs)
  552. {
  553. struct vm_struct *area;
  554. int ret;
  555. vma->vm_page_prot = __get_dma_pgprot(attrs, vma->vm_page_prot,
  556. is_device_dma_coherent(dev));
  557. if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret))
  558. return ret;
  559. if (!is_vmalloc_addr(cpu_addr)) {
  560. unsigned long pfn = page_to_pfn(virt_to_page(cpu_addr));
  561. return __swiotlb_mmap_pfn(vma, pfn, size);
  562. }
  563. if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
  564. /*
  565. * DMA_ATTR_FORCE_CONTIGUOUS allocations are always remapped,
  566. * hence in the vmalloc space.
  567. */
  568. unsigned long pfn = vmalloc_to_pfn(cpu_addr);
  569. return __swiotlb_mmap_pfn(vma, pfn, size);
  570. }
  571. area = find_vm_area(cpu_addr);
  572. if (WARN_ON(!area || !area->pages))
  573. return -ENXIO;
  574. return iommu_dma_mmap(area->pages, size, vma);
  575. }
  576. static int __iommu_get_sgtable(struct device *dev, struct sg_table *sgt,
  577. void *cpu_addr, dma_addr_t dma_addr,
  578. size_t size, unsigned long attrs)
  579. {
  580. unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
  581. struct vm_struct *area = find_vm_area(cpu_addr);
  582. if (!is_vmalloc_addr(cpu_addr)) {
  583. struct page *page = virt_to_page(cpu_addr);
  584. return __swiotlb_get_sgtable_page(sgt, page, size);
  585. }
  586. if (attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
  587. /*
  588. * DMA_ATTR_FORCE_CONTIGUOUS allocations are always remapped,
  589. * hence in the vmalloc space.
  590. */
  591. struct page *page = vmalloc_to_page(cpu_addr);
  592. return __swiotlb_get_sgtable_page(sgt, page, size);
  593. }
  594. if (WARN_ON(!area || !area->pages))
  595. return -ENXIO;
  596. return sg_alloc_table_from_pages(sgt, area->pages, count, 0, size,
  597. GFP_KERNEL);
  598. }
  599. static void __iommu_sync_single_for_cpu(struct device *dev,
  600. dma_addr_t dev_addr, size_t size,
  601. enum dma_data_direction dir)
  602. {
  603. phys_addr_t phys;
  604. if (is_device_dma_coherent(dev))
  605. return;
  606. phys = iommu_iova_to_phys(iommu_get_domain_for_dev(dev), dev_addr);
  607. __dma_unmap_area(phys_to_virt(phys), size, dir);
  608. }
  609. static void __iommu_sync_single_for_device(struct device *dev,
  610. dma_addr_t dev_addr, size_t size,
  611. enum dma_data_direction dir)
  612. {
  613. phys_addr_t phys;
  614. if (is_device_dma_coherent(dev))
  615. return;
  616. phys = iommu_iova_to_phys(iommu_get_domain_for_dev(dev), dev_addr);
  617. __dma_map_area(phys_to_virt(phys), size, dir);
  618. }
  619. static dma_addr_t __iommu_map_page(struct device *dev, struct page *page,
  620. unsigned long offset, size_t size,
  621. enum dma_data_direction dir,
  622. unsigned long attrs)
  623. {
  624. bool coherent = is_device_dma_coherent(dev);
  625. int prot = dma_info_to_prot(dir, coherent, attrs);
  626. dma_addr_t dev_addr = iommu_dma_map_page(dev, page, offset, size, prot);
  627. if (!iommu_dma_mapping_error(dev, dev_addr) &&
  628. (attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  629. __iommu_sync_single_for_device(dev, dev_addr, size, dir);
  630. return dev_addr;
  631. }
  632. static void __iommu_unmap_page(struct device *dev, dma_addr_t dev_addr,
  633. size_t size, enum dma_data_direction dir,
  634. unsigned long attrs)
  635. {
  636. if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  637. __iommu_sync_single_for_cpu(dev, dev_addr, size, dir);
  638. iommu_dma_unmap_page(dev, dev_addr, size, dir, attrs);
  639. }
  640. static void __iommu_sync_sg_for_cpu(struct device *dev,
  641. struct scatterlist *sgl, int nelems,
  642. enum dma_data_direction dir)
  643. {
  644. struct scatterlist *sg;
  645. int i;
  646. if (is_device_dma_coherent(dev))
  647. return;
  648. for_each_sg(sgl, sg, nelems, i)
  649. __dma_unmap_area(sg_virt(sg), sg->length, dir);
  650. }
  651. static void __iommu_sync_sg_for_device(struct device *dev,
  652. struct scatterlist *sgl, int nelems,
  653. enum dma_data_direction dir)
  654. {
  655. struct scatterlist *sg;
  656. int i;
  657. if (is_device_dma_coherent(dev))
  658. return;
  659. for_each_sg(sgl, sg, nelems, i)
  660. __dma_map_area(sg_virt(sg), sg->length, dir);
  661. }
  662. static int __iommu_map_sg_attrs(struct device *dev, struct scatterlist *sgl,
  663. int nelems, enum dma_data_direction dir,
  664. unsigned long attrs)
  665. {
  666. bool coherent = is_device_dma_coherent(dev);
  667. if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  668. __iommu_sync_sg_for_device(dev, sgl, nelems, dir);
  669. return iommu_dma_map_sg(dev, sgl, nelems,
  670. dma_info_to_prot(dir, coherent, attrs));
  671. }
  672. static void __iommu_unmap_sg_attrs(struct device *dev,
  673. struct scatterlist *sgl, int nelems,
  674. enum dma_data_direction dir,
  675. unsigned long attrs)
  676. {
  677. if ((attrs & DMA_ATTR_SKIP_CPU_SYNC) == 0)
  678. __iommu_sync_sg_for_cpu(dev, sgl, nelems, dir);
  679. iommu_dma_unmap_sg(dev, sgl, nelems, dir, attrs);
  680. }
  681. static const struct dma_map_ops iommu_dma_ops = {
  682. .alloc = __iommu_alloc_attrs,
  683. .free = __iommu_free_attrs,
  684. .mmap = __iommu_mmap_attrs,
  685. .get_sgtable = __iommu_get_sgtable,
  686. .map_page = __iommu_map_page,
  687. .unmap_page = __iommu_unmap_page,
  688. .map_sg = __iommu_map_sg_attrs,
  689. .unmap_sg = __iommu_unmap_sg_attrs,
  690. .sync_single_for_cpu = __iommu_sync_single_for_cpu,
  691. .sync_single_for_device = __iommu_sync_single_for_device,
  692. .sync_sg_for_cpu = __iommu_sync_sg_for_cpu,
  693. .sync_sg_for_device = __iommu_sync_sg_for_device,
  694. .map_resource = iommu_dma_map_resource,
  695. .unmap_resource = iommu_dma_unmap_resource,
  696. .mapping_error = iommu_dma_mapping_error,
  697. };
  698. static int __init __iommu_dma_init(void)
  699. {
  700. return iommu_dma_init();
  701. }
  702. arch_initcall(__iommu_dma_init);
  703. static void __iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
  704. const struct iommu_ops *ops)
  705. {
  706. struct iommu_domain *domain;
  707. if (!ops)
  708. return;
  709. /*
  710. * The IOMMU core code allocates the default DMA domain, which the
  711. * underlying IOMMU driver needs to support via the dma-iommu layer.
  712. */
  713. domain = iommu_get_domain_for_dev(dev);
  714. if (!domain)
  715. goto out_err;
  716. if (domain->type == IOMMU_DOMAIN_DMA) {
  717. if (iommu_dma_init_domain(domain, dma_base, size, dev))
  718. goto out_err;
  719. dev->dma_ops = &iommu_dma_ops;
  720. }
  721. return;
  722. out_err:
  723. pr_warn("Failed to set up IOMMU for device %s; retaining platform DMA ops\n",
  724. dev_name(dev));
  725. }
  726. void arch_teardown_dma_ops(struct device *dev)
  727. {
  728. dev->dma_ops = NULL;
  729. }
  730. #else
  731. static void __iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
  732. const struct iommu_ops *iommu)
  733. { }
  734. #endif /* CONFIG_IOMMU_DMA */
  735. void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size,
  736. const struct iommu_ops *iommu, bool coherent)
  737. {
  738. if (!dev->dma_ops)
  739. dev->dma_ops = &arm64_swiotlb_dma_ops;
  740. dev->archdata.dma_coherent = coherent;
  741. __iommu_setup_dma_ops(dev, dma_base, size, iommu);
  742. #ifdef CONFIG_XEN
  743. if (xen_initial_domain()) {
  744. dev->archdata.dev_dma_ops = dev->dma_ops;
  745. dev->dma_ops = xen_dma_ops;
  746. }
  747. #endif
  748. }