/* linux/arch/arm/mach-s5pv310/include/mach/sysmmu.h * * Copyright (c) 2010 Samsung Electronics Co., Ltd. * http://www.samsung.com/ * * Samsung sysmmu driver for S5PV310 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __ASM_ARM_ARCH_SYSMMU_H #define __ASM_ARM_ARCH_SYSMMU_H __FILE__ #define S5PV310_SYSMMU_TOTAL_IPNUM 16 #define S5P_SYSMMU_TOTAL_IPNUM S5PV310_SYSMMU_TOTAL_IPNUM enum s5pv310_sysmmu_ips { SYSMMU_MDMA, SYSMMU_SSS, SYSMMU_FIMC0, SYSMMU_FIMC1, SYSMMU_FIMC2, SYSMMU_FIMC3, SYSMMU_JPEG, SYSMMU_FIMD0, SYSMMU_FIMD1, SYSMMU_PCIe, SYSMMU_G2D, SYSMMU_ROTATOR, SYSMMU_MDMA2, SYSMMU_TV, SYSMMU_MFC_L, SYSMMU_MFC_R, }; static char *sysmmu_ips_name[S5PV310_SYSMMU_TOTAL_IPNUM] = { "SYSMMU_MDMA" , "SYSMMU_SSS" , "SYSMMU_FIMC0" , "SYSMMU_FIMC1" , "SYSMMU_FIMC2" , "SYSMMU_FIMC3" , "SYSMMU_JPEG" , "SYSMMU_FIMD0" , "SYSMMU_FIMD1" , "SYSMMU_PCIe" , "SYSMMU_G2D" , "SYSMMU_ROTATOR", "SYSMMU_MDMA2" , "SYSMMU_TV" , "SYSMMU_MFC_L" , "SYSMMU_MFC_R" , }; typedef enum s5pv310_sysmmu_ips sysmmu_ips; struct sysmmu_tt_info { unsigned long *pgd; unsigned long pgd_paddr; unsigned long *pte; }; struct sysmmu_controller { const char *name; /* channels registers */ void __iomem *regs; /* channel irq */ unsigned int irq; sysmmu_ips ips; /* Translation Table Info. */ struct sysmmu_tt_info *tt_info; struct resource *mem; struct device *dev; /* SysMMU controller enable - true : enable */ bool enable; }; /** * s5p_sysmmu_enable() - enable system mmu of ip * @ips: The ip connected system mmu. * * This function enable system mmu to transfer address * from virtual address to physical address */ int s5p_sysmmu_enable(sysmmu_ips ips); /** * s5p_sysmmu_disable() - disable sysmmu mmu of ip * @ips: The ip connected system mmu. * * This function disable system mmu to transfer address * from virtual address to physical address */ int s5p_sysmmu_disable(sysmmu_ips ips); /** * s5p_sysmmu_set_tablebase_pgd() - set page table base address to refer page table * @ips: The ip connected system mmu. * @pgd: The page table base address. * * This function set page table base address * When system mmu transfer address from virtaul address to physical address, * system mmu refer address information from page table */ int s5p_sysmmu_set_tablebase_pgd(sysmmu_ips ips, unsigned long pgd); /** * s5p_sysmmu_tlb_invalidate() - flush all TLB entry in system mmu * @ips: The ip connected system mmu. * * This function flush all TLB entry in system mmu */ int s5p_sysmmu_tlb_invalidate(sysmmu_ips ips); #endif /* __ASM_ARM_ARCH_SYSMMU_H */