diff options
Diffstat (limited to 'arch/score/mm/pgtable.c')
-rw-r--r-- | arch/score/mm/pgtable.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/arch/score/mm/pgtable.c b/arch/score/mm/pgtable.c new file mode 100644 index 000000000000..10b0962f83d4 --- /dev/null +++ b/arch/score/mm/pgtable.c | |||
@@ -0,0 +1,60 @@ | |||
1 | /* | ||
2 | * arch/score/mm/pgtable-32.c | ||
3 | * | ||
4 | * Score Processor version. | ||
5 | * | ||
6 | * Copyright (C) 2009 Sunplus Core Technology Co., Ltd. | ||
7 | * Lennox Wu <lennox.wu@sunplusct.com> | ||
8 | * Chen Liqin <liqin.chen@sunplusct.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, see the file COPYING, or write | ||
22 | * to the Free Software Foundation, Inc., | ||
23 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
24 | */ | ||
25 | |||
26 | #include <linux/bootmem.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/pfn.h> | ||
29 | #include <linux/mm.h> | ||
30 | |||
31 | void pgd_init(unsigned long page) | ||
32 | { | ||
33 | unsigned long *p = (unsigned long *) page; | ||
34 | int i; | ||
35 | |||
36 | for (i = 0; i < USER_PTRS_PER_PGD; i += 8) { | ||
37 | p[i + 0] = (unsigned long) invalid_pte_table; | ||
38 | p[i + 1] = (unsigned long) invalid_pte_table; | ||
39 | p[i + 2] = (unsigned long) invalid_pte_table; | ||
40 | p[i + 3] = (unsigned long) invalid_pte_table; | ||
41 | p[i + 4] = (unsigned long) invalid_pte_table; | ||
42 | p[i + 5] = (unsigned long) invalid_pte_table; | ||
43 | p[i + 6] = (unsigned long) invalid_pte_table; | ||
44 | p[i + 7] = (unsigned long) invalid_pte_table; | ||
45 | } | ||
46 | } | ||
47 | |||
48 | void __init pagetable_init(void) | ||
49 | { | ||
50 | unsigned long vaddr; | ||
51 | pgd_t *pgd_base; | ||
52 | |||
53 | /* Initialize the entire pgd. */ | ||
54 | pgd_init((unsigned long) swapper_pg_dir); | ||
55 | pgd_init((unsigned long) swapper_pg_dir | ||
56 | + sizeof(pgd_t) * USER_PTRS_PER_PGD); | ||
57 | |||
58 | pgd_base = swapper_pg_dir; | ||
59 | vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; | ||
60 | } | ||