Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame^] | 1 | /* |
| 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 |
| 4 | * for more details. |
| 5 | * |
| 6 | * Copyright (C) 2003 Keith M Wesolowski |
| 7 | * Copyright (C) 2005 Ilya A. Volynets (Total Knowledge) |
| 8 | */ |
| 9 | #include <linux/types.h> |
| 10 | #include <linux/init.h> |
| 11 | #include <linux/kernel.h> |
| 12 | #include <linux/mm.h> |
| 13 | |
| 14 | #include <asm/ip32/crime.h> |
| 15 | #include <asm/bootinfo.h> |
| 16 | #include <asm/page.h> |
| 17 | #include <asm/pgtable.h> |
| 18 | #include <asm/pgalloc.h> |
| 19 | |
| 20 | extern void crime_init(void); |
| 21 | |
| 22 | void __init prom_meminit (void) |
| 23 | { |
| 24 | u64 base, size; |
| 25 | int bank; |
| 26 | |
| 27 | crime_init(); |
| 28 | |
| 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) |
| 33 | continue; |
| 34 | size = (bankctl & CRIME_MEM_BANK_CONTROL_SDRAM_SIZE) ? 128 : 32; |
| 35 | size <<= 20; |
| 36 | if (base + size > (256 << 20)) |
| 37 | base += CRIME_HI_MEM_BASE; |
| 38 | |
| 39 | printk("CRIME MC: bank %u base 0x%016lx size %luMB\n", |
| 40 | bank, base, size); |
| 41 | add_memory_region (base, size, BOOT_MEM_RAM); |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | |
| 46 | unsigned long __init prom_free_prom_memory (void) |
| 47 | { |
| 48 | return 0; |
| 49 | } |