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>
18 #include <asm/sgialib.h>
20 extern void crime_init(void);
22 void __init
prom_meminit(void)
29 for (bank
=0; bank
< CRIME_MAXBANKS
; bank
++) {
30 u64 bankctl
= crime
->bank_ctrl
[bank
];
31 base
= (bankctl
& CRIME_MEM_BANK_CONTROL_ADDR
) << 25;
32 if (bank
!= 0 && base
== 0)
34 size
= (bankctl
& CRIME_MEM_BANK_CONTROL_SDRAM_SIZE
) ? 128 : 32;
36 if (base
+ size
> (256 << 20))
37 base
+= CRIME_HI_MEM_BASE
;
39 printk("CRIME MC: bank %u base 0x%016Lx size %LuMiB\n",
40 bank
, base
, size
>> 20);
41 memblock_add(base
, size
);