[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 63/79] ppc/ppc405_boards: add RAM size checks
From: |
Igor Mammedov |
Subject: |
[PATCH v6 63/79] ppc/ppc405_boards: add RAM size checks |
Date: |
Wed, 19 Feb 2020 11:09:37 -0500 |
If user provided non-sense RAM size, board will ignore it
and continue running with fixed RAM size.
Also RAM is going to be allocated by generic code, so it
won't be possible for board to fix CLI.
Make it error message and exit to force user fix CLI,
instead of accepting non-sense CLI values.
PS:
move fixed RAM size into mc->default_ram_size, so that
generic code will know how much to allocate.
Signed-off-by: Igor Mammedov <address@hidden>
Acked-by: David Gibson <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
---
v2:
* fix format string causing build failure on 32-bit host
(Philippe Mathieu-Daudé <address@hidden>)
v3:
* use size_to_str() to pretty print size in MiB
(Philippe Mathieu-Daudé <address@hidden>/
BALATON Zoltan <address@hidden>)
---
hw/ppc/ppc405_boards.c | 39 ++++++++++++++++++++++++++-------------
1 file changed, 26 insertions(+), 13 deletions(-)
diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
index 1f721feed6..057882a5d2 100644
--- a/hw/ppc/ppc405_boards.c
+++ b/hw/ppc/ppc405_boards.c
@@ -40,6 +40,7 @@
#include "qemu/error-report.h"
#include "hw/loader.h"
#include "exec/address-spaces.h"
+#include "qemu/cutils.h"
#define BIOS_FILENAME "ppc405_rom.bin"
#define BIOS_SIZE (2 * MiB)
@@ -137,7 +138,7 @@ static void ref405ep_fpga_init(MemoryRegion *sysmem,
uint32_t base)
static void ref405ep_init(MachineState *machine)
{
- ram_addr_t ram_size = machine->ram_size;
+ MachineClass *mc = MACHINE_GET_CLASS(machine);
const char *kernel_filename = machine->kernel_filename;
const char *kernel_cmdline = machine->kernel_cmdline;
const char *initrd_filename = machine->initrd_filename;
@@ -161,15 +162,21 @@ static void ref405ep_init(MachineState *machine)
DriveInfo *dinfo;
MemoryRegion *sysmem = get_system_memory();
+ if (machine->ram_size != mc->default_ram_size) {
+ char *sz = size_to_str(mc->default_ram_size);
+ error_report("Invalid RAM size, should be %s", sz);
+ g_free(sz);
+ exit(EXIT_FAILURE);
+ }
+
/* XXX: fix this */
memory_region_allocate_system_memory(&ram_memories[0], NULL, "ef405ep.ram",
- 0x08000000);
+ machine->ram_size);
ram_bases[0] = 0;
- ram_sizes[0] = 0x08000000;
+ ram_sizes[0] = machine->ram_size;
memory_region_init(&ram_memories[1], NULL, "ef405ep.ram1", 0);
ram_bases[1] = 0x00000000;
ram_sizes[1] = 0x00000000;
- ram_size = 128 * MiB;
env = ppc405ep_init(sysmem, ram_memories, ram_bases, ram_sizes,
33333333, &pic, kernel_filename == NULL ? 0 : 1);
/* allocate SRAM */
@@ -227,7 +234,7 @@ static void ref405ep_init(MachineState *machine)
if (linux_boot) {
memset(&bd, 0, sizeof(bd));
bd.bi_memstart = 0x00000000;
- bd.bi_memsize = ram_size;
+ bd.bi_memsize = machine->ram_size;
bd.bi_flashstart = -bios_size;
bd.bi_flashsize = -bios_size;
bd.bi_flashoffset = 0;
@@ -255,7 +262,7 @@ static void ref405ep_init(MachineState *machine)
kernel_base = KERNEL_LOAD_ADDR;
/* now we can load the kernel */
kernel_size = load_image_targphys(kernel_filename, kernel_base,
- ram_size - kernel_base);
+ machine->ram_size - kernel_base);
if (kernel_size < 0) {
error_report("could not load kernel '%s'", kernel_filename);
exit(1);
@@ -266,7 +273,7 @@ static void ref405ep_init(MachineState *machine)
if (initrd_filename) {
initrd_base = INITRD_LOAD_ADDR;
initrd_size = load_image_targphys(initrd_filename, initrd_base,
- ram_size - initrd_base);
+ machine->ram_size - initrd_base);
if (initrd_size < 0) {
error_report("could not load initial ram disk '%s'",
initrd_filename);
@@ -304,6 +311,7 @@ static void ref405ep_class_init(ObjectClass *oc, void *data)
mc->desc = "ref405ep";
mc->init = ref405ep_init;
+ mc->default_ram_size = 0x08000000;
}
static const TypeInfo ref405ep_type = {
@@ -408,7 +416,7 @@ static void taihu_cpld_init(MemoryRegion *sysmem, uint32_t
base)
static void taihu_405ep_init(MachineState *machine)
{
- ram_addr_t ram_size = machine->ram_size;
+ MachineClass *mc = MACHINE_GET_CLASS(machine);
const char *kernel_filename = machine->kernel_filename;
const char *initrd_filename = machine->initrd_filename;
char *filename;
@@ -425,10 +433,14 @@ static void taihu_405ep_init(MachineState *machine)
int fl_idx;
DriveInfo *dinfo;
- /* RAM is soldered to the board so the size cannot be changed */
- ram_size = 0x08000000;
+ if (machine->ram_size != mc->default_ram_size) {
+ char *sz = size_to_str(mc->default_ram_size);
+ error_report("Invalid RAM size, should be %s", sz);
+ g_free(sz);
+ exit(EXIT_FAILURE);
+ }
memory_region_allocate_system_memory(ram, NULL, "taihu_405ep.ram",
- ram_size);
+ machine->ram_size);
ram_bases[0] = 0;
ram_sizes[0] = 0x04000000;
@@ -500,7 +512,7 @@ static void taihu_405ep_init(MachineState *machine)
kernel_base = KERNEL_LOAD_ADDR;
/* now we can load the kernel */
kernel_size = load_image_targphys(kernel_filename, kernel_base,
- ram_size - kernel_base);
+ machine->ram_size - kernel_base);
if (kernel_size < 0) {
error_report("could not load kernel '%s'", kernel_filename);
exit(1);
@@ -509,7 +521,7 @@ static void taihu_405ep_init(MachineState *machine)
if (initrd_filename) {
initrd_base = INITRD_LOAD_ADDR;
initrd_size = load_image_targphys(initrd_filename, initrd_base,
- ram_size - initrd_base);
+ machine->ram_size - initrd_base);
if (initrd_size < 0) {
error_report("could not load initial ram disk '%s'",
initrd_filename);
@@ -533,6 +545,7 @@ static void taihu_class_init(ObjectClass *oc, void *data)
mc->desc = "taihu";
mc->init = taihu_405ep_init;
+ mc->default_ram_size = 0x08000000;
}
static const TypeInfo taihu_type = {
--
2.18.1
- [PATCH v6 53/79] mips/mips_jazz: use memdev for RAM, (continued)
- [PATCH v6 53/79] mips/mips_jazz: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 51/79] mips/mips_fulong2e: drop RAM size fixup, Igor Mammedov, 2020/02/19
- [PATCH v6 55/79] mips/mips_malta: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 56/79] mips/mips_mipssim: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 54/79] mips/mips_jazz: add max ram size check, Igor Mammedov, 2020/02/19
- [PATCH v6 59/79] ppc/e500: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 61/79] ppc/mac_oldworld: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 57/79] mips/mips_r4k: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 58/79] ppc/e500: drop RAM size fixup, Igor Mammedov, 2020/02/19
- [PATCH v6 52/79] mips/mips_fulong2e: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 63/79] ppc/ppc405_boards: add RAM size checks,
Igor Mammedov <=
- [PATCH v6 67/79] ppc/spapr: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 65/79] ppc/{ppc440_bamboo, sam460ex}: drop RAM size fixup, Igor Mammedov, 2020/02/19
- [PATCH v6 66/79] ppc/{ppc440_bamboo, sam460ex}: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 60/79] ppc/mac_newworld: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 69/79] sparc/leon3: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 68/79] ppc/virtex_ml507: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 71/79] sparc/niagara: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 62/79] ppc/pnv: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 64/79] ppc/ppc405_boards: use memdev for RAM, Igor Mammedov, 2020/02/19
- [PATCH v6 70/79] sparc/sun4m: use memdev for RAM, Igor Mammedov, 2020/02/19