On Wed, Sep 4, 2019 at 12:55 AM Park, Aiden <[email protected]> wrote: > > > > > -----Original Message----- > > From: Bin Meng [mailto:[email protected]] > > Sent: Thursday, August 29, 2019 2:53 AM > > To: Simon Glass <[email protected]>; Park, Aiden <[email protected]>; > > U-Boot Mailing List <[email protected]> > > Cc: Heinrich Schuchardt <[email protected]> > > Subject: [PATCH 3/4] 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 <[email protected]> > > --- > > > > arch/x86/cpu/qemu/dram.c | 27 +++++++++++++++++++++++++-- > > arch/x86/include/asm/arch-qemu/qemu.h | 11 +++++++++++ > > 2 files changed, 36 insertions(+), 2 deletions(-) > > > > diff --git a/arch/x86/cpu/qemu/dram.c b/arch/x86/cpu/qemu/dram.c index > > c29b073..6707b7b 100644 > > --- a/arch/x86/cpu/qemu/dram.c > > +++ b/arch/x86/cpu/qemu/dram.c > > @@ -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(); > > } > > diff --git a/arch/x86/include/asm/arch-qemu/qemu.h > > b/arch/x86/include/asm/arch-qemu/qemu.h > > index c98deb2..061735b 100644 > > --- a/arch/x86/include/asm/arch-qemu/qemu.h > > +++ b/arch/x86/include/asm/arch-qemu/qemu.h > > @@ -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_ */ > > -- > > 2.7.4 > > Reviewed-by: Aiden Park <[email protected]>
applied to u-boot-x86, thanks! _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

