mirror of https://gitee.com/openkylin/linux.git
123 lines
2.7 KiB
C
123 lines
2.7 KiB
C
/* 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 */
|