mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-22 15:11:33 +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;
|
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)
|
int dram_init(void)
|
||||||
{
|
{
|
||||||
gd->ram_size = qemu_get_low_memory_size();
|
gd->ram_size = qemu_get_low_memory_size();
|
||||||
|
gd->ram_size += qemu_get_high_memory_size();
|
||||||
post_code(POST_DRAM);
|
post_code(POST_DRAM);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -32,8 +47,16 @@ int dram_init(void)
|
||||||
|
|
||||||
int dram_init_banksize(void)
|
int dram_init_banksize(void)
|
||||||
{
|
{
|
||||||
|
u64 high_mem_size;
|
||||||
|
|
||||||
gd->bd->bi_dram[0].start = 0;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -48,5 +71,5 @@ int dram_init_banksize(void)
|
||||||
*/
|
*/
|
||||||
ulong board_get_usable_ram_top(ulong total_size)
|
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 LOW_RAM_ADDR 0x34
|
||||||
#define HIGH_RAM_ADDR 0x35
|
#define HIGH_RAM_ADDR 0x35
|
||||||
|
|
||||||
|
#define LOW_HIGHRAM_ADDR 0x5b
|
||||||
|
#define MID_HIGHRAM_ADDR 0x5c
|
||||||
|
#define HIGH_HIGHRAM_ADDR 0x5d
|
||||||
|
|
||||||
/* PM registers */
|
/* PM registers */
|
||||||
#define PMBA 0x40
|
#define PMBA 0x40
|
||||||
#define PMREGMISC 0x80
|
#define PMREGMISC 0x80
|
||||||
|
@ -44,4 +48,11 @@
|
||||||
*/
|
*/
|
||||||
u32 qemu_get_low_memory_size(void);
|
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_ */
|
#endif /* _ARCH_QEMU_H_ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue