Blame view

arch/mips/mipssim/sim_mem.c 2.51 KB
c78cbf49c   Ralf Baechle   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   Ralf Baechle   [MIPS] Fixup dama...
21
  #include <linux/pfn.h>
c78cbf49c   Ralf Baechle   Support for MIPSs...
22
23
24
  
  #include <asm/bootinfo.h>
  #include <asm/page.h>
9c1f1257a   Ralf Baechle   [MIPS] Replace re...
25
  #include <asm/sections.h>
c78cbf49c   Ralf Baechle   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   Ralf Baechle   Support for MIPSs...
43
44
45
46
47
  struct prom_pmemblock * __init prom_getmdesc(void)
  {
  	unsigned int memsize;
  
  	memsize = 0x02000000;
36a885306   Ralf Baechle   [MIPS] Fix and cl...
48
49
  	pr_info("Setting default memory size 0x%08x
  ", memsize);
c78cbf49c   Ralf Baechle   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   Ralf Baechle   [MIPS] Fixup dama...
63
  	mdesc[2].size = CPHYSADDR(PFN_ALIGN(&_end)) - mdesc[2].base;
c78cbf49c   Ralf Baechle   Support for MIPSs...
64
65
  
  	mdesc[3].type = simmem_free;
fde3505c6   Ralf Baechle   [MIPS] Fixup dama...
66
  	mdesc[3].base = CPHYSADDR(PFN_ALIGN(&_end));
c78cbf49c   Ralf Baechle   Support for MIPSs...
67
68
69
70
  	mdesc[3].size = memsize - mdesc[3].base;
  
  	return &mdesc[0];
  }
49a89efbb   Ralf Baechle   [MIPS] Fix "no sp...
71
  static int __init prom_memtype_classify(unsigned int type)
c78cbf49c   Ralf Baechle   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   Ralf Baechle   [MIPS] Fix "no sp...
91
  		type = prom_memtype_classify(p->type);
c78cbf49c   Ralf Baechle   Support for MIPSs...
92
93
94
95
  		base = p->base;
  		size = p->size;
  
  		add_memory_region(base, size, type);
f6e2373ad   Ralf Baechle   [MIPS] MIPSsim: M...
96
  		p++;
c78cbf49c   Ralf Baechle   Support for MIPSs...
97
98
  	}
  }
c44e8d5e4   Atsushi Nemoto   [MIPS] prom_free_...
99
  void __init prom_free_prom_memory(void)
c78cbf49c   Ralf Baechle   Support for MIPSs...
100
101
  {
  	int i;
c78cbf49c   Ralf Baechle   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   Atsushi Nemoto   [MIPS] prom_free_...
109
110
  		free_init_pages("prom memory",
  				addr, addr + boot_mem_map.map[i].size);
c78cbf49c   Ralf Baechle   Support for MIPSs...
111
  	}
c78cbf49c   Ralf Baechle   Support for MIPSs...
112
  }