Blame view
arch/mips/mipssim/sim_mem.c
2.51 KB
c78cbf49c Support for MIPSs... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* * Copyright (C) 2005 MIPS Technologies, Inc. All rights reserved. * * This program is free software; you can distribute it and/or modify it * under the terms of the GNU General Public License (Version 2) as * published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. * */ #include <linux/init.h> #include <linux/mm.h> #include <linux/bootmem.h> |
fde3505c6 [MIPS] Fixup dama... |
21 |
#include <linux/pfn.h> |
c78cbf49c Support for MIPSs... |
22 23 24 |
#include <asm/bootinfo.h> #include <asm/page.h> |
9c1f1257a [MIPS] Replace re... |
25 |
#include <asm/sections.h> |
c78cbf49c Support for MIPSs... |
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <asm/mips-boards/prom.h> /*#define DEBUG*/ enum simmem_memtypes { simmem_reserved = 0, simmem_free, }; struct prom_pmemblock mdesc[PROM_MAX_PMEMBLOCKS]; #ifdef DEBUG static char *mtypes[3] = { "SIM reserved memory", "SIM free memory", }; #endif |
c78cbf49c Support for MIPSs... |
43 44 45 46 47 |
struct prom_pmemblock * __init prom_getmdesc(void) { unsigned int memsize; memsize = 0x02000000; |
36a885306 [MIPS] Fix and cl... |
48 49 |
pr_info("Setting default memory size 0x%08x ", memsize); |
c78cbf49c Support for MIPSs... |
50 51 52 53 54 55 56 57 58 59 60 61 62 |
memset(mdesc, 0, sizeof(mdesc)); mdesc[0].type = simmem_reserved; mdesc[0].base = 0x00000000; mdesc[0].size = 0x00001000; mdesc[1].type = simmem_free; mdesc[1].base = 0x00001000; mdesc[1].size = 0x000ff000; mdesc[2].type = simmem_reserved; mdesc[2].base = 0x00100000; |
fde3505c6 [MIPS] Fixup dama... |
63 |
mdesc[2].size = CPHYSADDR(PFN_ALIGN(&_end)) - mdesc[2].base; |
c78cbf49c Support for MIPSs... |
64 65 |
mdesc[3].type = simmem_free; |
fde3505c6 [MIPS] Fixup dama... |
66 |
mdesc[3].base = CPHYSADDR(PFN_ALIGN(&_end)); |
c78cbf49c Support for MIPSs... |
67 68 69 70 |
mdesc[3].size = memsize - mdesc[3].base; return &mdesc[0]; } |
49a89efbb [MIPS] Fix "no sp... |
71 |
static int __init prom_memtype_classify(unsigned int type) |
c78cbf49c Support for MIPSs... |
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
{ switch (type) { case simmem_free: return BOOT_MEM_RAM; case simmem_reserved: default: return BOOT_MEM_RESERVED; } } void __init prom_meminit(void) { struct prom_pmemblock *p; p = prom_getmdesc(); while (p->size) { long type; unsigned long base, size; |
49a89efbb [MIPS] Fix "no sp... |
91 |
type = prom_memtype_classify(p->type); |
c78cbf49c Support for MIPSs... |
92 93 94 95 |
base = p->base; size = p->size; add_memory_region(base, size, type); |
f6e2373ad [MIPS] MIPSsim: M... |
96 |
p++; |
c78cbf49c Support for MIPSs... |
97 98 |
} } |
c44e8d5e4 [MIPS] prom_free_... |
99 |
void __init prom_free_prom_memory(void) |
c78cbf49c Support for MIPSs... |
100 101 |
{ int i; |
c78cbf49c Support for MIPSs... |
102 103 104 105 106 107 108 |
unsigned long addr; for (i = 0; i < boot_mem_map.nr_map; i++) { if (boot_mem_map.map[i].type != BOOT_MEM_ROM_DATA) continue; addr = boot_mem_map.map[i].addr; |
c44e8d5e4 [MIPS] prom_free_... |
109 110 |
free_init_pages("prom memory", addr, addr + boot_mem_map.map[i].size); |
c78cbf49c Support for MIPSs... |
111 |
} |
c78cbf49c Support for MIPSs... |
112 |
} |