When malta is coupled with MIPS64 cpu which have 64bit
address space, it is possible to have more than 2G RAM.
So we removed ram_size check and overwrite memory
layout for these targets.
Signed-off-by: Jiaxun Yang <address@hidden>
Suggested-by: Yunqiang Su <address@hidden>
--
v1: Do not overwrite cmdline when we don't have highmem.
---
hw/mips/mips_malta.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
index 6e7ba9235d..4267958f35 100644
--- a/hw/mips/mips_malta.c
+++ b/hw/mips/mips_malta.c
@@ -98,7 +98,8 @@ typedef struct {
} MaltaState;
static struct _loaderparams {
- int ram_size, ram_low_size;
+ unsigned int ram_low_size;
+ ram_addr_t ram_size;
const char *kernel_filename;
const char *kernel_cmdline;
const char *initrd_filename;
@@ -1023,6 +1024,7 @@ static int64_t load_kernel(void)
{
int64_t kernel_entry, kernel_high, initrd_size;
long kernel_size;
+ char mem_cmdline[128];
ram_addr_t initrd_offset;
int big_endian;
uint32_t *prom_buf;
@@ -1099,20 +1101,33 @@ static int64_t load_kernel(void)
prom_buf = g_malloc(prom_size);
prom_set(prom_buf, prom_index++, "%s", loaderparams.kernel_filename);
+
+ memset(&mem_cmdline[0], 0, sizeof(mem_cmdline));
+ if (loaderparams.ram_size > 0x10000000) {
+ }
+
if (initrd_size > 0) {
prom_set(prom_buf, prom_index++,
- "rd_start=0x%" PRIx64 " rd_size=%" PRId64 " %s",
- xlate_to_kseg0(NULL, initrd_offset),
+ "%s rd_start=0x%" PRIx64 " rd_size=%" PRId64 " %s",
+ &mem_cmdline[0], xlate_to_kseg0(NULL, initrd_offset),
initrd_size, loaderparams.kernel_cmdline);
} else {
- prom_set(prom_buf, prom_index++, "%s", loaderparams.kernel_cmdline);
+ prom_set(prom_buf, prom_index++, "%s %s", &mem_cmdline[0],
+ loaderparams.kernel_cmdline);
}
prom_set(prom_buf, prom_index++, "memsize");
prom_set(prom_buf, prom_index++, "%u", loaderparams.ram_low_size);
prom_set(prom_buf, prom_index++, "ememsize");
- prom_set(prom_buf, prom_index++, "%u", loaderparams.ram_size);
+ prom_set(prom_buf, prom_index++, "%lu", loaderparams.ram_size);
prom_set(prom_buf, prom_index++, "modetty0");
prom_set(prom_buf, prom_index++, "38400n8r");
@@ -1253,12 +1268,14 @@ void mips_malta_init(MachineState *machine)
/* create CPU */
mips_create_cpu(machine, s, &cbus_irq, &i8259_irq);
- /* allocate RAM */
+#ifdef TARGET_MIPS32
+ /* MIPS32 won't accept more than 2GiB RAM due to limited address space */