mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 22:51:37 +00:00
x86: qemu: Support getting high memory size
At present only size of memory that is below 4GiB is retrieved from QEMU. Add a function that gets size of memory that is above 4GiB. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Aiden Park <aiden.park@intel.com>
This commit is contained in:
parent
f4c0030074
commit
ea67d549b8
2 changed files with 36 additions and 2 deletions
|
@ -22,9 +22,24 @@ u32 qemu_get_low_memory_size(void)
|
|||
return ram * 1024;
|
||||
}
|
||||
|
||||
u64 qemu_get_high_memory_size(void)
|
||||
{
|
||||
u64 ram;
|
||||
|
||||
outb(HIGH_HIGHRAM_ADDR, CMOS_ADDR_PORT);
|
||||
ram = ((u64)inb(CMOS_DATA_PORT)) << 22;
|
||||
outb(MID_HIGHRAM_ADDR, CMOS_ADDR_PORT);
|
||||
ram |= ((u64)inb(CMOS_DATA_PORT)) << 14;
|
||||
outb(LOW_HIGHRAM_ADDR, CMOS_ADDR_PORT);
|
||||
ram |= ((u64)inb(CMOS_DATA_PORT)) << 6;
|
||||
|
||||
return ram * 1024;
|
||||
}
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
gd->ram_size = qemu_get_low_memory_size();
|
||||
gd->ram_size += qemu_get_high_memory_size();
|
||||
post_code(POST_DRAM);
|
||||
|
||||
return 0;
|
||||
|
@ -32,8 +47,16 @@ int dram_init(void)
|
|||
|
||||
int dram_init_banksize(void)
|
||||
{
|
||||
u64 high_mem_size;
|
||||
|
||||
gd->bd->bi_dram[0].start = 0;
|
||||
gd->bd->bi_dram[0].size = gd->ram_size;
|
||||
gd->bd->bi_dram[0].size = qemu_get_low_memory_size();
|
||||
|
||||
high_mem_size = qemu_get_high_memory_size();
|
||||
if (high_mem_size) {
|
||||
gd->bd->bi_dram[1].start = SZ_4G;
|
||||
gd->bd->bi_dram[1].size = high_mem_size;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -48,5 +71,5 @@ int dram_init_banksize(void)
|
|||
*/
|
||||
ulong board_get_usable_ram_top(ulong total_size)
|
||||
{
|
||||
return gd->ram_size;
|
||||
return qemu_get_low_memory_size();
|
||||
}
|
||||
|
|
|
@ -32,6 +32,10 @@
|
|||
#define LOW_RAM_ADDR 0x34
|
||||
#define HIGH_RAM_ADDR 0x35
|
||||
|
||||
#define LOW_HIGHRAM_ADDR 0x5b
|
||||
#define MID_HIGHRAM_ADDR 0x5c
|
||||
#define HIGH_HIGHRAM_ADDR 0x5d
|
||||
|
||||
/* PM registers */
|
||||
#define PMBA 0x40
|
||||
#define PMREGMISC 0x80
|
||||
|
@ -44,4 +48,11 @@
|
|||
*/
|
||||
u32 qemu_get_low_memory_size(void);
|
||||
|
||||
/**
|
||||
* qemu_get_high_memory_size() - Get high memory size
|
||||
*
|
||||
* @return: size of memory above 4GiB
|
||||
*/
|
||||
u64 qemu_get_high_memory_size(void);
|
||||
|
||||
#endif /* _ARCH_QEMU_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue