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
6 * Copyright (C) 2003 Keith M Wesolowski
7 * Copyright (C) 2005 Ilya A. Volynets (Total Knowledge)
9 #include <linux/types.h>
10 #include <linux/init.h>
11 #include <linux/kernel.h>
12 #include <linux/memblock.h>
15 #include <asm/ip32/crime.h>
16 #include <asm/bootinfo.h>
19 extern void crime_init(void);
21 void __init
prom_meminit(void)
28 for (bank
=0; bank
< CRIME_MAXBANKS
; bank
++) {
29 u64 bankctl
= crime
->bank_ctrl
[bank
];
30 base
= (bankctl
& CRIME_MEM_BANK_CONTROL_ADDR
) << 25;
31 if (bank
!= 0 && base
== 0)
33 size
= (bankctl
& CRIME_MEM_BANK_CONTROL_SDRAM_SIZE
) ? 128 : 32;
35 if (base
+ size
> (256 << 20))
36 base
+= CRIME_HI_MEM_BASE
;
38 printk("CRIME MC: bank %u base 0x%016Lx size %LuMiB\n",
39 bank
, base
, size
>> 20);
40 memblock_add(base
, size
);
45 void __init
prom_free_prom_memory(void)