1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2020-2023 Intel Corporation 4 */ 5 6#ifndef __IVPU_MMU_H__ 7#define __IVPU_MMU_H__ 8 9struct ivpu_device; 10 11struct ivpu_mmu_cdtab { 12 void *base; 13 dma_addr_t dma; 14}; 15 16struct ivpu_mmu_strtab { 17 void *base; 18 dma_addr_t dma; 19 u64 dma_q; 20 u32 base_cfg; 21}; 22 23struct ivpu_mmu_queue { 24 void *base; 25 dma_addr_t dma; 26 u64 dma_q; 27 u32 prod; 28 u32 cons; 29}; 30 31struct ivpu_mmu_info { 32 struct mutex lock; /* Protects cdtab, strtab, cmdq, on */ 33 struct ivpu_mmu_cdtab cdtab; 34 struct ivpu_mmu_strtab strtab; 35 struct ivpu_mmu_queue cmdq; 36 struct ivpu_mmu_queue evtq; 37 bool on; 38}; 39 40int ivpu_mmu_init(struct ivpu_device *vdev); 41void ivpu_mmu_disable(struct ivpu_device *vdev); 42int ivpu_mmu_enable(struct ivpu_device *vdev); 43int ivpu_mmu_set_pgtable(struct ivpu_device *vdev, int ssid, struct ivpu_mmu_pgtable *pgtable); 44void ivpu_mmu_clear_pgtable(struct ivpu_device *vdev, int ssid); 45int ivpu_mmu_invalidate_tlb(struct ivpu_device *vdev, u16 ssid); 46 47void ivpu_mmu_irq_evtq_handler(struct ivpu_device *vdev); 48void ivpu_mmu_irq_gerr_handler(struct ivpu_device *vdev); 49void ivpu_mmu_evtq_dump(struct ivpu_device *vdev); 50 51#endif /* __IVPU_MMU_H__ */ 52