From: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
To: qemu-devel@nongnu.org, Yunqiang Su <ysu@wavecomp.com>,
Aurelien Jarno <aurelien@aurel32.net>
Cc: "Aleksandar Rikalo" <aleksandar.rikalo@syrmia.com>,
qemu-trivial@nongnu.org, "Laurent Vivier" <laurent@vivier.eu>,
"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Aleksandar Markovic" <aleksandar.qemu.devel@gmail.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: [PATCH v3 3/5] hw/mips/malta: Introduce MaltaMachineClass::max_ramsize
Date: Tue, 30 Jun 2020 21:57:21 +0200 [thread overview]
Message-ID: <20200630195723.1359-4-f4bug@amsat.org> (raw)
In-Reply-To: <20200630195723.1359-1-f4bug@amsat.org>
The maximum RAM size is tied to the machine. First add the
MaltaMachineClass, and add 'max_ramsize' to it. Set it to
the current value of 2 GB, and adapt the code checking for
the requested RAM is usable by the machine.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/mips/malta.c | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/hw/mips/malta.c b/hw/mips/malta.c
index 2c363fe099..fd4964e8b0 100644
--- a/hw/mips/malta.c
+++ b/hw/mips/malta.c
@@ -56,6 +56,7 @@
#include "sysemu/kvm.h"
#include "hw/semihosting/semihost.h"
#include "hw/mips/cps.h"
+#include "qemu/cutils.h"
#define ENVP_ADDR 0x80002000l
#define ENVP_NB_ENTRIES 16
@@ -71,6 +72,17 @@
#define MAX_IDE_BUS 2
#define TYPE_MALTA_MACHINE MACHINE_TYPE_NAME("malta-base")
+#define MALTA_MACHINE_CLASS(klass) \
+ OBJECT_CLASS_CHECK(MaltaMachineClass, (klass), TYPE_MALTA_MACHINE)
+#define MALTA_MACHINE_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(MaltaMachineClass, (obj), TYPE_MALTA_MACHINE)
+
+typedef struct MaltaMachineClass {
+ /* Private */
+ MachineClass parent_obj;
+ /* Public */
+ ram_addr_t max_ramsize;
+} MaltaMachineClass;
typedef struct {
MemoryRegion iomem;
@@ -1232,7 +1244,7 @@ void mips_malta_init(MachineState *machine)
DriveInfo *dinfo;
int fl_idx = 0;
int be;
-
+ MaltaMachineClass *mmc = MALTA_MACHINE_GET_CLASS(machine);
DeviceState *dev = qdev_new(TYPE_MIPS_MALTA);
MaltaState *s = MIPS_MALTA(dev);
@@ -1248,10 +1260,16 @@ void mips_malta_init(MachineState *machine)
/* create CPU */
mips_create_cpu(machine, s, &cbus_irq, &i8259_irq);
- /* allocate RAM */
- if (ram_size > 2 * GiB) {
- error_report("Too much memory for this machine: %" PRId64 "MB,"
- " maximum 2048MB", ram_size / MiB);
+ /*
+ * The GT-64120A north bridge accepts at most 256 MiB per SCS for
+ * address decoding, so we have a maximum of 1 GiB. We deliberately
+ * ignore this physical limitation.
+ */
+ if (ram_size > mmc->max_ramsize) {
+ char *maxsize_str = size_to_str(mmc->max_ramsize);
+ error_report("Too much memory for this machine: %" PRId64 " MiB,"
+ " maximum %s", ram_size / MiB, maxsize_str);
+ g_free(maxsize_str);
exit(1);
}
@@ -1446,6 +1464,7 @@ static void malta_machine_common_class_init(ObjectClass *oc, void *data)
static void malta_machine_default_class_init(ObjectClass *oc, void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
+ MaltaMachineClass *mmc = MALTA_MACHINE_CLASS(oc);
mc->desc = "MIPS Malta Core LV";
mc->block_default_type = IF_IDE;
@@ -1456,6 +1475,7 @@ static void malta_machine_default_class_init(ObjectClass *oc, void *data)
#else
mc->default_cpu_type = MIPS_CPU_TYPE_NAME("24Kf");
#endif
+ mmc->max_ramsize = 2 * GiB;
}
static const TypeInfo malta_machine_types[] = {
@@ -1468,6 +1488,7 @@ static const TypeInfo malta_machine_types[] = {
.name = TYPE_MALTA_MACHINE,
.parent = TYPE_MACHINE,
.class_init = malta_machine_common_class_init,
+ .class_size = sizeof(MaltaMachineClass),
.abstract = true,
}
};
--
2.21.3
next prev parent reply other threads:[~2020-06-30 20:00 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-30 19:57 [PATCH v3 0/5] hw/mips/malta: Add the 'malta-strict' machine, matching Malta hardware Philippe Mathieu-Daudé
2020-06-30 19:57 ` [PATCH v3 1/5] hw/mips/malta: Trivial code movement Philippe Mathieu-Daudé
2020-06-30 19:57 ` [PATCH v3 2/5] hw/mips/malta: Register the machine as a TypeInfo Philippe Mathieu-Daudé
2020-06-30 19:57 ` Philippe Mathieu-Daudé [this message]
2020-06-30 19:57 ` [PATCH v3 4/5] hw/mips/malta: Introduce the 'malta-strict' machine Philippe Mathieu-Daudé
2020-06-30 19:57 ` [PATCH v3 5/5] hw/mips/malta: Verify malta-strict machine uses correct DIMM sizes Philippe Mathieu-Daudé
2020-06-30 21:54 ` [PATCH v3 0/5] hw/mips/malta: Add the 'malta-strict' machine, matching Malta hardware Aleksandar Markovic
2020-07-01 1:13 ` BALATON Zoltan
2020-07-01 17:39 ` Aurelien Jarno
2020-07-01 18:51 ` Aleksandar Markovic
2020-07-01 21:17 ` Aurelien Jarno
2020-07-02 7:45 ` Thomas Huth
2020-07-01 1:35 ` Jiaxun Yang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200630195723.1359-4-f4bug@amsat.org \
--to=f4bug@amsat.org \
--cc=aleksandar.qemu.devel@gmail.com \
--cc=aleksandar.rikalo@syrmia.com \
--cc=aurelien@aurel32.net \
--cc=imammedo@redhat.com \
--cc=jiaxun.yang@flygoat.com \
--cc=laurent@vivier.eu \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-trivial@nongnu.org \
--cc=ysu@wavecomp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).