OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-mips/] [pgtable-bits.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/*
2
 * This file is subject to the terms and conditions of the GNU General Public
3
 * License.  See the file "COPYING" in the main directory of this archive
4
 * for more details.
5
 *
6
 * Copyright (C) 1994 - 2002 by Ralf Baechle
7
 * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
8
 * Copyright (C) 2002  Maciej W. Rozycki
9
 */
10
#ifndef _ASM_PGTABLE_BITS_H
11
#define _ASM_PGTABLE_BITS_H
12
 
13
#include <linux/config.h>
14
 
15
/*
16
 * Note that we shift the lower 32bits of each EntryLo[01] entry
17
 * 6 bits to the left. That way we can convert the PFN into the
18
 * physical address by a single 'and' operation and gain 6 additional
19
 * bits for storing information which isn't present in a normal
20
 * MIPS page table.
21
 *
22
 * Similar to the Alpha port, we need to keep track of the ref
23
 * and mod bits in software.  We have a software "yeah you can read
24
 * from this page" bit, and a hardware one which actually lets the
25
 * process read from the page.  On the same token we have a software
26
 * writable bit and the real hardware one which actually lets the
27
 * process write to the page, this keeps a mod bit via the hardware
28
 * dirty bit.
29
 *
30
 * Certain revisions of the R4000 and R5000 have a bug where if a
31
 * certain sequence occurs in the last 3 instructions of an executable
32
 * page, and the following page is not mapped, the cpu can do
33
 * unpredictable things.  The code (when it is written) to deal with
34
 * this problem will be in the update_mmu_cache() code for the r4k.
35
 */
36
#if defined(CONFIG_CPU_MIPS32) && defined(CONFIG_64BIT_PHYS_ADDR)
37
 
38
#define _PAGE_PRESENT               (1<<6)  /* implemented in software */
39
#define _PAGE_READ                  (1<<7)  /* implemented in software */
40
#define _PAGE_WRITE                 (1<<8)  /* implemented in software */
41
#define _PAGE_ACCESSED              (1<<9)  /* implemented in software */
42
#define _PAGE_MODIFIED              (1<<10) /* implemented in software */
43
 
44
#define _PAGE_R4KBUG                (1<<0)  /* workaround for r4k bug  */
45
#define _PAGE_GLOBAL                (1<<0)
46
#define _PAGE_VALID                 (1<<1)
47
#define _PAGE_SILENT_READ           (1<<1)  /* synonym                 */
48
#define _PAGE_DIRTY                 (1<<2)  /* The MIPS dirty bit      */
49
#define _PAGE_SILENT_WRITE          (1<<2)
50
#define _CACHE_MASK                 (7<<3)
51
 
52
/* MIPS32 defines only values 2 and 3. The rest are implementation
53
 * dependent.
54
 */
55
#define _CACHE_UNCACHED             (2<<3)  
56
#define _CACHE_CACHABLE_NONCOHERENT (3<<3) 
57
 
58
#else
59
 
60
#define _PAGE_PRESENT               (1<<0)  /* implemented in software */
61
#define _PAGE_READ                  (1<<1)  /* implemented in software */
62
#define _PAGE_WRITE                 (1<<2)  /* implemented in software */
63
#define _PAGE_ACCESSED              (1<<3)  /* implemented in software */
64
#define _PAGE_MODIFIED              (1<<4)  /* implemented in software */
65
 
66
#if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
67
 
68
#define _PAGE_GLOBAL                (1<<8)
69
#define _PAGE_VALID                 (1<<9)
70
#define _PAGE_SILENT_READ           (1<<9)  /* synonym                 */
71
#define _PAGE_DIRTY                 (1<<10) /* The MIPS dirty bit      */
72
#define _PAGE_SILENT_WRITE          (1<<10)
73
#define _CACHE_UNCACHED             (1<<11)
74
#define _CACHE_MASK                 (1<<11)
75
#define _CACHE_CACHABLE_NONCOHERENT 0
76
 
77
#else
78
#define _PAGE_R4KBUG                (1<<5)  /* workaround for r4k bug  */
79
#define _PAGE_GLOBAL                (1<<6)
80
#define _PAGE_VALID                 (1<<7)
81
#define _PAGE_SILENT_READ           (1<<7)  /* synonym                 */
82
#define _PAGE_DIRTY                 (1<<8)  /* The MIPS dirty bit      */
83
#define _PAGE_SILENT_WRITE          (1<<8)
84
#define _CACHE_MASK                 (7<<9)
85
 
86
#if defined(CONFIG_CPU_SB1)
87
 
88
/* No penalty for being coherent on the SB1, so just
89
   use it for "noncoherent" spaces, too.  Shouldn't hurt. */
90
 
91
#define _CACHE_UNCACHED             (2<<9)
92
#define _CACHE_CACHABLE_COW         (5<<9)
93
#define _CACHE_CACHABLE_NONCOHERENT (5<<9)
94
#define _CACHE_UNCACHED_ACCELERATED (7<<9)
95
 
96
#else
97
 
98
#define _CACHE_CACHABLE_NO_WA       (0<<9)  /* R4600 only              */
99
#define _CACHE_CACHABLE_WA          (1<<9)  /* R4600 only              */
100
#define _CACHE_UNCACHED             (2<<9)  /* R4[0246]00              */
101
#define _CACHE_CACHABLE_NONCOHERENT (3<<9)  /* R4[0246]00              */
102
#define _CACHE_CACHABLE_CE          (4<<9)  /* R4[04]00MC only         */
103
#define _CACHE_CACHABLE_COW         (5<<9)  /* R4[04]00MC only         */
104
#define _CACHE_CACHABLE_CUW         (6<<9)  /* R4[04]00MC only         */
105
#define _CACHE_UNCACHED_ACCELERATED (7<<9)  /* R10000 only             */
106
 
107
#endif
108
#endif
109
#endif /* defined(CONFIG_CPU_MIPS32) && defined(CONFIG_64BIT_PHYS_ADDR) */
110
 
111
#define __READABLE      (_PAGE_READ | _PAGE_SILENT_READ | _PAGE_ACCESSED)
112
#define __WRITEABLE     (_PAGE_WRITE | _PAGE_SILENT_WRITE | _PAGE_MODIFIED)
113
 
114
#define _PAGE_CHG_MASK  (PAGE_MASK | _PAGE_ACCESSED | _PAGE_MODIFIED | _CACHE_MASK)
115
 
116
#ifdef CONFIG_MIPS_UNCACHED
117
#define PAGE_CACHABLE_DEFAULT   _CACHE_UNCACHED
118
#elif defined(CONFIG_NONCOHERENT_IO)
119
#define PAGE_CACHABLE_DEFAULT   _CACHE_CACHABLE_NONCOHERENT
120
#else
121
#define PAGE_CACHABLE_DEFAULT   _CACHE_CACHABLE_COW
122
#endif
123
 
124
#if defined(CONFIG_CPU_MIPS32) && defined(CONFIG_64BIT_PHYS_ADDR)
125
#define CONF_CM_DEFAULT         (PAGE_CACHABLE_DEFAULT >> 3)
126
#else
127
#define CONF_CM_DEFAULT         (PAGE_CACHABLE_DEFAULT >> 9)
128
#endif
129
 
130
#endif /* _ASM_PGTABLE_BITS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.