diff options
Diffstat (limited to 'arch/mips/mti-malta/malta-memory.c')
-rw-r--r-- | arch/mips/mti-malta/malta-memory.c | 104 |
1 files changed, 33 insertions, 71 deletions
diff --git a/arch/mips/mti-malta/malta-memory.c b/arch/mips/mti-malta/malta-memory.c index f3d43aa023a9..1f73d63e92a7 100644 --- a/arch/mips/mti-malta/malta-memory.c +++ b/arch/mips/mti-malta/malta-memory.c | |||
@@ -1,73 +1,45 @@ | |||
1 | /* | 1 | /* |
2 | * Carsten Langgaard, carstenl@mips.com | 2 | * This file is subject to the terms and conditions of the GNU General Public |
3 | * Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved. | 3 | * License. See the file "COPYING" in the main directory of this archive |
4 | * | 4 | * for more details. |
5 | * This program is free software; you can distribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License (Version 2) as | ||
7 | * published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
12 | * for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along | ||
15 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. | ||
17 | * | 5 | * |
18 | * PROM library functions for acquiring/using memory descriptors given to | 6 | * PROM library functions for acquiring/using memory descriptors given to |
19 | * us from the YAMON. | 7 | * us from the YAMON. |
8 | * | ||
9 | * Copyright (C) 1999,2000,2012 MIPS Technologies, Inc. | ||
10 | * All rights reserved. | ||
11 | * Authors: Carsten Langgaard <carstenl@mips.com> | ||
12 | * Steven J. Hill <sjhill@mips.com> | ||
20 | */ | 13 | */ |
21 | #include <linux/init.h> | 14 | #include <linux/init.h> |
22 | #include <linux/mm.h> | ||
23 | #include <linux/bootmem.h> | 15 | #include <linux/bootmem.h> |
24 | #include <linux/pfn.h> | ||
25 | #include <linux/string.h> | 16 | #include <linux/string.h> |
26 | 17 | ||
27 | #include <asm/bootinfo.h> | 18 | #include <asm/bootinfo.h> |
28 | #include <asm/page.h> | ||
29 | #include <asm/sections.h> | 19 | #include <asm/sections.h> |
20 | #include <asm/fw/fw.h> | ||
30 | 21 | ||
31 | #include <asm/mips-boards/prom.h> | 22 | static fw_memblock_t mdesc[FW_MAX_MEMBLOCKS]; |
32 | |||
33 | /*#define DEBUG*/ | ||
34 | |||
35 | enum yamon_memtypes { | ||
36 | yamon_dontuse, | ||
37 | yamon_prom, | ||
38 | yamon_free, | ||
39 | }; | ||
40 | static struct prom_pmemblock mdesc[PROM_MAX_PMEMBLOCKS]; | ||
41 | |||
42 | #ifdef DEBUG | ||
43 | static char *mtypes[3] = { | ||
44 | "Dont use memory", | ||
45 | "YAMON PROM memory", | ||
46 | "Free memory", | ||
47 | }; | ||
48 | #endif | ||
49 | 23 | ||
50 | /* determined physical memory size, not overridden by command line args */ | 24 | /* determined physical memory size, not overridden by command line args */ |
51 | unsigned long physical_memsize = 0L; | 25 | unsigned long physical_memsize = 0L; |
52 | 26 | ||
53 | static struct prom_pmemblock * __init prom_getmdesc(void) | 27 | fw_memblock_t * __init fw_getmdesc(void) |
54 | { | 28 | { |
55 | char *memsize_str; | 29 | char *memsize_str, *ptr; |
56 | unsigned int memsize; | 30 | unsigned int memsize; |
57 | char *ptr; | ||
58 | static char cmdline[COMMAND_LINE_SIZE] __initdata; | 31 | static char cmdline[COMMAND_LINE_SIZE] __initdata; |
32 | long val; | ||
33 | int tmp; | ||
59 | 34 | ||
60 | /* otherwise look in the environment */ | 35 | /* otherwise look in the environment */ |
61 | memsize_str = prom_getenv("memsize"); | 36 | memsize_str = fw_getenv("memsize"); |
62 | if (!memsize_str) { | 37 | if (!memsize_str) { |
63 | printk(KERN_WARNING | 38 | pr_warn("memsize not set in YAMON, set to default (32Mb)\n"); |
64 | "memsize not set in boot prom, set to default (32Mb)\n"); | ||
65 | physical_memsize = 0x02000000; | 39 | physical_memsize = 0x02000000; |
66 | } else { | 40 | } else { |
67 | #ifdef DEBUG | 41 | tmp = kstrtol(memsize_str, 0, &val); |
68 | pr_debug("prom_memsize = %s\n", memsize_str); | 42 | physical_memsize = (unsigned long)val; |
69 | #endif | ||
70 | physical_memsize = simple_strtol(memsize_str, NULL, 0); | ||
71 | } | 43 | } |
72 | 44 | ||
73 | #ifdef CONFIG_CPU_BIG_ENDIAN | 45 | #ifdef CONFIG_CPU_BIG_ENDIAN |
@@ -90,11 +62,11 @@ static struct prom_pmemblock * __init prom_getmdesc(void) | |||
90 | 62 | ||
91 | memset(mdesc, 0, sizeof(mdesc)); | 63 | memset(mdesc, 0, sizeof(mdesc)); |
92 | 64 | ||
93 | mdesc[0].type = yamon_dontuse; | 65 | mdesc[0].type = fw_dontuse; |
94 | mdesc[0].base = 0x00000000; | 66 | mdesc[0].base = 0x00000000; |
95 | mdesc[0].size = 0x00001000; | 67 | mdesc[0].size = 0x00001000; |
96 | 68 | ||
97 | mdesc[1].type = yamon_prom; | 69 | mdesc[1].type = fw_code; |
98 | mdesc[1].base = 0x00001000; | 70 | mdesc[1].base = 0x00001000; |
99 | mdesc[1].size = 0x000ef000; | 71 | mdesc[1].size = 0x000ef000; |
100 | 72 | ||
@@ -105,55 +77,45 @@ static struct prom_pmemblock * __init prom_getmdesc(void) | |||
105 | * This mean that this area can't be used as DMA memory for PCI | 77 | * This mean that this area can't be used as DMA memory for PCI |
106 | * devices. | 78 | * devices. |
107 | */ | 79 | */ |
108 | mdesc[2].type = yamon_dontuse; | 80 | mdesc[2].type = fw_dontuse; |
109 | mdesc[2].base = 0x000f0000; | 81 | mdesc[2].base = 0x000f0000; |
110 | mdesc[2].size = 0x00010000; | 82 | mdesc[2].size = 0x00010000; |
111 | 83 | ||
112 | mdesc[3].type = yamon_dontuse; | 84 | mdesc[3].type = fw_dontuse; |
113 | mdesc[3].base = 0x00100000; | 85 | mdesc[3].base = 0x00100000; |
114 | mdesc[3].size = CPHYSADDR(PFN_ALIGN((unsigned long)&_end)) - mdesc[3].base; | 86 | mdesc[3].size = CPHYSADDR(PFN_ALIGN((unsigned long)&_end)) - |
87 | mdesc[3].base; | ||
115 | 88 | ||
116 | mdesc[4].type = yamon_free; | 89 | mdesc[4].type = fw_free; |
117 | mdesc[4].base = CPHYSADDR(PFN_ALIGN(&_end)); | 90 | mdesc[4].base = CPHYSADDR(PFN_ALIGN(&_end)); |
118 | mdesc[4].size = memsize - mdesc[4].base; | 91 | mdesc[4].size = memsize - mdesc[4].base; |
119 | 92 | ||
120 | return &mdesc[0]; | 93 | return &mdesc[0]; |
121 | } | 94 | } |
122 | 95 | ||
123 | static int __init prom_memtype_classify(unsigned int type) | 96 | static int __init fw_memtype_classify(unsigned int type) |
124 | { | 97 | { |
125 | switch (type) { | 98 | switch (type) { |
126 | case yamon_free: | 99 | case fw_free: |
127 | return BOOT_MEM_RAM; | 100 | return BOOT_MEM_RAM; |
128 | case yamon_prom: | 101 | case fw_code: |
129 | return BOOT_MEM_ROM_DATA; | 102 | return BOOT_MEM_ROM_DATA; |
130 | default: | 103 | default: |
131 | return BOOT_MEM_RESERVED; | 104 | return BOOT_MEM_RESERVED; |
132 | } | 105 | } |
133 | } | 106 | } |
134 | 107 | ||
135 | void __init prom_meminit(void) | 108 | void __init fw_meminit(void) |
136 | { | 109 | { |
137 | struct prom_pmemblock *p; | 110 | fw_memblock_t *p; |
138 | 111 | ||
139 | #ifdef DEBUG | 112 | p = fw_getmdesc(); |
140 | pr_debug("YAMON MEMORY DESCRIPTOR dump:\n"); | ||
141 | p = prom_getmdesc(); | ||
142 | while (p->size) { | ||
143 | int i = 0; | ||
144 | pr_debug("[%d,%p]: base<%08lx> size<%08lx> type<%s>\n", | ||
145 | i, p, p->base, p->size, mtypes[p->type]); | ||
146 | p++; | ||
147 | i++; | ||
148 | } | ||
149 | #endif | ||
150 | p = prom_getmdesc(); | ||
151 | 113 | ||
152 | while (p->size) { | 114 | while (p->size) { |
153 | long type; | 115 | long type; |
154 | unsigned long base, size; | 116 | unsigned long base, size; |
155 | 117 | ||
156 | type = prom_memtype_classify(p->type); | 118 | type = fw_memtype_classify(p->type); |
157 | base = p->base; | 119 | base = p->base; |
158 | size = p->size; | 120 | size = p->size; |
159 | 121 | ||
@@ -172,7 +134,7 @@ void __init prom_free_prom_memory(void) | |||
172 | continue; | 134 | continue; |
173 | 135 | ||
174 | addr = boot_mem_map.map[i].addr; | 136 | addr = boot_mem_map.map[i].addr; |
175 | free_init_pages("prom memory", | 137 | free_init_pages("YAMON memory", |
176 | addr, addr + boot_mem_map.map[i].size); | 138 | addr, addr + boot_mem_map.map[i].size); |
177 | } | 139 | } |
178 | } | 140 | } |