dma.c 709 B

123456789101112131415161718192021222324252627282930
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  4. */
  5. #include <linux/acpi.h>
  6. #include <linux/dma-direct.h>
  7. void acpi_arch_dma_setup(struct device *dev)
  8. {
  9. int ret;
  10. u64 mask, end = 0;
  11. const struct bus_dma_region *map = NULL;
  12. ret = acpi_dma_get_range(dev, &map);
  13. if (!ret && map) {
  14. const struct bus_dma_region *r = map;
  15. for (end = 0; r->size; r++) {
  16. if (r->dma_start + r->size - 1 > end)
  17. end = r->dma_start + r->size - 1;
  18. }
  19. mask = DMA_BIT_MASK(ilog2(end) + 1);
  20. dev->bus_dma_limit = end;
  21. dev->dma_range_map = map;
  22. dev->coherent_dma_mask = min(dev->coherent_dma_mask, mask);
  23. *dev->dma_mask = min(*dev->dma_mask, mask);
  24. }
  25. }