| // SPDX-License-Identifier: GPL-2.0-or-later | |
| /* | |
| */ | |
| #include <linux/fs.h> | |
| #include <linux/fcntl.h> | |
| #include <linux/memblock.h> | |
| #include <linux/mm.h> | |
| #include <asm/bootinfo.h> | |
| #include <loongson.h> | |
| #include <mem.h> | |
| #include <pci.h> | |
| u32 memsize, highmemsize; | |
| void __init prom_init_memory(void) | |
| { | |
| memblock_add(0x0, (memsize << 20)); | |
| #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG | |
| { | |
| int bit; | |
| bit = fls(memsize + highmemsize); | |
| if (bit != ffs(memsize + highmemsize)) | |
| bit += 20; | |
| else | |
| bit = bit + 20 - 1; | |
| /* set cpu window3 to map CPU to DDR: 2G -> 2G */ | |
| LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul, | |
| 0x80000000ul, (1 << bit)); | |
| mmiowb(); | |
| } | |
| #endif /* !CONFIG_CPU_SUPPORTS_ADDRWINCFG */ | |
| #ifdef CONFIG_64BIT | |
| if (highmemsize > 0) | |
| memblock_add(LOONGSON_HIGHMEM_START, highmemsize << 20); | |
| #endif /* !CONFIG_64BIT */ | |
| } |