GNU Linux-libre 4.19.263-gnu1
[releases.git] / arch / powerpc / mm / dump_linuxpagetables-book3s64.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * From split of dump_linuxpagetables.c
4  * Copyright 2016, Rashmica Gupta, IBM Corp.
5  *
6  */
7 #include <linux/kernel.h>
8 #include <asm/pgtable.h>
9
10 #include "dump_linuxpagetables.h"
11
12 static const struct flag_info flag_array[] = {
13         {
14                 .mask   = _PAGE_PRIVILEGED,
15                 .val    = 0,
16                 .set    = "user",
17                 .clear  = "    ",
18         }, {
19                 .mask   = _PAGE_READ,
20                 .val    = _PAGE_READ,
21                 .set    = "r",
22                 .clear  = " ",
23         }, {
24                 .mask   = _PAGE_WRITE,
25                 .val    = _PAGE_WRITE,
26                 .set    = "w",
27                 .clear  = " ",
28         }, {
29                 .mask   = _PAGE_EXEC,
30                 .val    = _PAGE_EXEC,
31                 .set    = " X ",
32                 .clear  = "   ",
33         }, {
34                 .mask   = _PAGE_PTE,
35                 .val    = _PAGE_PTE,
36                 .set    = "pte",
37                 .clear  = "   ",
38         }, {
39                 .mask   = _PAGE_PRESENT,
40                 .val    = _PAGE_PRESENT,
41                 .set    = "present",
42                 .clear  = "       ",
43         }, {
44                 .mask   = H_PAGE_HASHPTE,
45                 .val    = H_PAGE_HASHPTE,
46                 .set    = "hpte",
47                 .clear  = "    ",
48         }, {
49                 .mask   = _PAGE_DIRTY,
50                 .val    = _PAGE_DIRTY,
51                 .set    = "dirty",
52                 .clear  = "     ",
53         }, {
54                 .mask   = _PAGE_ACCESSED,
55                 .val    = _PAGE_ACCESSED,
56                 .set    = "accessed",
57                 .clear  = "        ",
58         }, {
59                 .mask   = _PAGE_NON_IDEMPOTENT,
60                 .val    = _PAGE_NON_IDEMPOTENT,
61                 .set    = "non-idempotent",
62                 .clear  = "              ",
63         }, {
64                 .mask   = _PAGE_TOLERANT,
65                 .val    = _PAGE_TOLERANT,
66                 .set    = "tolerant",
67                 .clear  = "        ",
68         }, {
69                 .mask   = H_PAGE_BUSY,
70                 .val    = H_PAGE_BUSY,
71                 .set    = "busy",
72         }, {
73 #ifdef CONFIG_PPC_64K_PAGES
74                 .mask   = H_PAGE_COMBO,
75                 .val    = H_PAGE_COMBO,
76                 .set    = "combo",
77         }, {
78                 .mask   = H_PAGE_4K_PFN,
79                 .val    = H_PAGE_4K_PFN,
80                 .set    = "4K_pfn",
81         }, {
82 #else /* CONFIG_PPC_64K_PAGES */
83                 .mask   = H_PAGE_F_GIX,
84                 .val    = H_PAGE_F_GIX,
85                 .set    = "f_gix",
86                 .is_val = true,
87                 .shift  = H_PAGE_F_GIX_SHIFT,
88         }, {
89                 .mask   = H_PAGE_F_SECOND,
90                 .val    = H_PAGE_F_SECOND,
91                 .set    = "f_second",
92         }, {
93 #endif /* CONFIG_PPC_64K_PAGES */
94                 .mask   = _PAGE_SPECIAL,
95                 .val    = _PAGE_SPECIAL,
96                 .set    = "special",
97         }
98 };
99
100 struct pgtable_level pg_level[5] = {
101         {
102         }, { /* pgd */
103                 .flag   = flag_array,
104                 .num    = ARRAY_SIZE(flag_array),
105         }, { /* pud */
106                 .flag   = flag_array,
107                 .num    = ARRAY_SIZE(flag_array),
108         }, { /* pmd */
109                 .flag   = flag_array,
110                 .num    = ARRAY_SIZE(flag_array),
111         }, { /* pte */
112                 .flag   = flag_array,
113                 .num    = ARRAY_SIZE(flag_array),
114         },
115 };