summaryrefslogtreecommitdiff
path: root/drivers/edgetpu/edgetpu-mmu.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/edgetpu/edgetpu-mmu.h')
-rw-r--r--drivers/edgetpu/edgetpu-mmu.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/edgetpu/edgetpu-mmu.h b/drivers/edgetpu/edgetpu-mmu.h
index 7cc9ffa..812a05c 100644
--- a/drivers/edgetpu/edgetpu-mmu.h
+++ b/drivers/edgetpu/edgetpu-mmu.h
@@ -37,6 +37,8 @@
#define EDGETPU_MMU_DEVICE (1 << 2)
#define EDGETPU_MMU_DMABUF (2 << 2)
+#define EDGETPU_MMU_COHERENT (1 << 4)
+
/*
* The max possible value of token is (EDGETPU_DOMAIN_TOKEN_END - 1), which
* shouldn't equal or exceed the bit mask EDGETPU_CONTEXT_DOMAIN_TOKEN.
@@ -75,6 +77,11 @@ edgetpu_host_dma_dir(enum dma_data_direction target_dir)
}
}
+static inline enum dma_data_direction map_flag_to_host_dma_dir(edgetpu_map_flag_t flags)
+{
+ return edgetpu_host_dma_dir(flags & EDGETPU_MAP_DIR_MASK);
+}
+
static inline u32 map_to_mmu_flags(edgetpu_map_flag_t flags)
{
u32 ret = 0;
@@ -82,6 +89,7 @@ static inline u32 map_to_mmu_flags(edgetpu_map_flag_t flags)
ret |= IS_MIRRORED(flags) ? EDGETPU_MMU_VDG : EDGETPU_MMU_DIE;
ret |= (flags & EDGETPU_MAP_CPU_NONACCESSIBLE) ? EDGETPU_MMU_64 :
EDGETPU_MMU_32;
+ ret |= (flags & EDGETPU_MAP_COHERENT) ? EDGETPU_MMU_COHERENT : 0;
return ret;
}
@@ -145,7 +153,7 @@ void edgetpu_mmu_unmap(struct edgetpu_dev *dev, struct edgetpu_mapping *map,
*/
int edgetpu_mmu_map_iova_sgt(struct edgetpu_dev *etdev, tpu_addr_t iova,
struct sg_table *sgt, enum dma_data_direction dir,
- enum edgetpu_context_id context_id);
+ u32 mmu_flags, enum edgetpu_context_id context_id);
void edgetpu_mmu_unmap_iova_sgt_attrs(struct edgetpu_dev *etdev,
tpu_addr_t iova, struct sg_table *sgt,
enum dma_data_direction dir,