Commit | Line | Data |
---|---|---|
b55f685e DR |
1 | /* linux/arch/arm/mach-s5pv310/include/mach/sysmmu.h |
2 | * | |
3 | * Copyright (c) 2010 Samsung Electronics Co., Ltd. | |
4 | * http://www.samsung.com/ | |
5 | * | |
6 | * Samsung sysmmu driver for S5PV310 | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License version 2 as | |
10 | * published by the Free Software Foundation. | |
11 | */ | |
12 | ||
13 | #ifndef __ASM_ARM_ARCH_SYSMMU_H | |
14 | #define __ASM_ARM_ARCH_SYSMMU_H __FILE__ | |
15 | ||
40194521 KK |
16 | #define S5PV310_SYSMMU_TOTAL_IPNUM 16 |
17 | #define S5P_SYSMMU_TOTAL_IPNUM S5PV310_SYSMMU_TOTAL_IPNUM | |
18 | ||
b55f685e DR |
19 | enum s5pv310_sysmmu_ips { |
20 | SYSMMU_MDMA, | |
21 | SYSMMU_SSS, | |
22 | SYSMMU_FIMC0, | |
23 | SYSMMU_FIMC1, | |
24 | SYSMMU_FIMC2, | |
25 | SYSMMU_FIMC3, | |
26 | SYSMMU_JPEG, | |
27 | SYSMMU_FIMD0, | |
28 | SYSMMU_FIMD1, | |
29 | SYSMMU_PCIe, | |
30 | SYSMMU_G2D, | |
31 | SYSMMU_ROTATOR, | |
32 | SYSMMU_MDMA2, | |
33 | SYSMMU_TV, | |
34 | SYSMMU_MFC_L, | |
35 | SYSMMU_MFC_R, | |
36 | }; | |
37 | ||
40194521 | 38 | static char *sysmmu_ips_name[S5PV310_SYSMMU_TOTAL_IPNUM] = { |
b55f685e DR |
39 | "SYSMMU_MDMA" , |
40 | "SYSMMU_SSS" , | |
41 | "SYSMMU_FIMC0" , | |
42 | "SYSMMU_FIMC1" , | |
43 | "SYSMMU_FIMC2" , | |
44 | "SYSMMU_FIMC3" , | |
45 | "SYSMMU_JPEG" , | |
46 | "SYSMMU_FIMD0" , | |
47 | "SYSMMU_FIMD1" , | |
48 | "SYSMMU_PCIe" , | |
49 | "SYSMMU_G2D" , | |
50 | "SYSMMU_ROTATOR", | |
51 | "SYSMMU_MDMA2" , | |
52 | "SYSMMU_TV" , | |
53 | "SYSMMU_MFC_L" , | |
54 | "SYSMMU_MFC_R" , | |
55 | }; | |
56 | ||
57 | typedef enum s5pv310_sysmmu_ips sysmmu_ips; | |
58 | ||
59 | struct sysmmu_tt_info { | |
60 | unsigned long *pgd; | |
61 | unsigned long pgd_paddr; | |
62 | unsigned long *pte; | |
63 | }; | |
64 | ||
65 | struct sysmmu_controller { | |
66 | const char *name; | |
67 | ||
68 | /* channels registers */ | |
69 | void __iomem *regs; | |
70 | ||
71 | /* channel irq */ | |
72 | unsigned int irq; | |
73 | ||
74 | sysmmu_ips ips; | |
75 | ||
76 | /* Translation Table Info. */ | |
77 | struct sysmmu_tt_info *tt_info; | |
78 | ||
79 | struct resource *mem; | |
80 | struct device *dev; | |
81 | ||
82 | /* SysMMU controller enable - true : enable */ | |
83 | bool enable; | |
84 | }; | |
85 | ||
86 | /** | |
87 | * s5p_sysmmu_enable() - enable system mmu of ip | |
88 | * @ips: The ip connected system mmu. | |
89 | * | |
90 | * This function enable system mmu to transfer address | |
91 | * from virtual address to physical address | |
92 | */ | |
93 | int s5p_sysmmu_enable(sysmmu_ips ips); | |
94 | ||
95 | /** | |
96 | * s5p_sysmmu_disable() - disable sysmmu mmu of ip | |
97 | * @ips: The ip connected system mmu. | |
98 | * | |
99 | * This function disable system mmu to transfer address | |
100 | * from virtual address to physical address | |
101 | */ | |
102 | int s5p_sysmmu_disable(sysmmu_ips ips); | |
103 | ||
104 | /** | |
105 | * s5p_sysmmu_set_tablebase_pgd() - set page table base address to refer page table | |
106 | * @ips: The ip connected system mmu. | |
107 | * @pgd: The page table base address. | |
108 | * | |
109 | * This function set page table base address | |
110 | * When system mmu transfer address from virtaul address to physical address, | |
111 | * system mmu refer address information from page table | |
112 | */ | |
113 | int s5p_sysmmu_set_tablebase_pgd(sysmmu_ips ips, unsigned long pgd); | |
114 | ||
115 | /** | |
116 | * s5p_sysmmu_tlb_invalidate() - flush all TLB entry in system mmu | |
117 | * @ips: The ip connected system mmu. | |
118 | * | |
119 | * This function flush all TLB entry in system mmu | |
120 | */ | |
121 | int s5p_sysmmu_tlb_invalidate(sysmmu_ips ips); | |
122 | #endif /* __ASM_ARM_ARCH_SYSMMU_H */ |