All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Jeffery <andrew@aj.id.au>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "Alexey Kardashevskiy" <aik@ozlabs.ru>,
	qemu-devel@nongnu.org, qemu-arm@nongnu.org,
	"Cédric Le Goater" <clg@kaod.org>, "Jeremy Kerr" <jk@ozlabs.org>
Subject: [Qemu-devel] [PATCH v4 4/4] hw/arm: Add opbmc2400, an AST2400 OpenPOWER BMC machine
Date: Mon, 14 Mar 2016 14:43:52 +1030	[thread overview]
Message-ID: <1457928832-31026-5-git-send-email-andrew@aj.id.au> (raw)
In-Reply-To: <1457928832-31026-1-git-send-email-andrew@aj.id.au>

The new machine, opbmc2400, is a thin layer over the AST2400
ARM926-based SoC[1]. Between the minimal machine and the current SoC
implementation there is enough functionality to boot an aspeed_defconfig
Linux kernel to userspace.

The machine name is a pragmatic choice, as there doesn't appear to be a
common, formal name for the hardware configuration that isn't generic
(e.g. 'BMC' or 'AST2400').

[1] http://www.aspeedtech.com/products.php?fPath=20&rId=376

Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
---
Since v3:

  * Split the machine from the SoC implementation

I've gone the route of inventing a machine name as it seemed there are very few
cases of appending _soc to the chip name or beginning a machine name with mach_
as an outlet for a lack of creativity. It seems only fair to leave the 'ast2400'
namespace to the SoC itself, as it's unlikely that the OpenPOWER BMC is the
SoC's only consumer. I feel that 'opbmc2400' is a reasonable choice; it's not
overly long, and appending the SoC's marketing number leaves the door open to
future OpenPOWER BMC machines with e.g. the AST2500 series SoC.

Since v2:
  * Implement a SOC model to move code out from the machine definition
  * Rework the machine to better use QOM
  * Include qemu/osdep.h
  * Revert back to qemu_log_mask(LOG_UNIMP, ...) in IO handlers

 hw/arm/Makefile.objs |  2 +-
 hw/arm/opbmc2400.c   | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 1 deletion(-)
 create mode 100644 hw/arm/opbmc2400.c

diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
index f333b7f..7b80460 100644
--- a/hw/arm/Makefile.objs
+++ b/hw/arm/Makefile.objs
@@ -16,4 +16,4 @@ obj-$(CONFIG_STM32F205_SOC) += stm32f205_soc.o
 obj-$(CONFIG_XLNX_ZYNQMP) += xlnx-zynqmp.o xlnx-ep108.o
 obj-$(CONFIG_FSL_IMX25) += fsl-imx25.o imx25_pdk.o
 obj-$(CONFIG_FSL_IMX31) += fsl-imx31.o kzm.o
-obj-$(CONFIG_ASPEED_SOC) += ast2400.o
+obj-$(CONFIG_ASPEED_SOC) += ast2400.o opbmc2400.o
diff --git a/hw/arm/opbmc2400.c b/hw/arm/opbmc2400.c
new file mode 100644
index 0000000..a428364
--- /dev/null
+++ b/hw/arm/opbmc2400.c
@@ -0,0 +1,66 @@
+/*
+ * OpenPOWER BMC with AST2400 SoC
+ *
+ * Andrew Jeffery <andrew@aj.id.au>
+ *
+ * Copyright 2016 IBM Corp.
+ *
+ * This code is licensed under the GPL version 2 or later.  See
+ * the COPYING file in the top-level directory.
+ */
+
+#include "qemu/osdep.h"
+#include "exec/address-spaces.h"
+#include "hw/arm/arm.h"
+#include "hw/arm/ast2400.h"
+#include "hw/boards.h"
+
+static struct arm_boot_info opbmc2400_binfo = {
+    .loader_start = AST2400_SDRAM_BASE,
+    .board_id = 0,
+    .nb_cpus = 1,
+};
+
+typedef struct OPBMC2400State {
+    AST2400State soc;
+    MemoryRegion ram;
+} OPBMC2400State;
+
+static void opbmc2400_init(MachineState *machine)
+{
+    OPBMC2400State *opbmc2400;
+
+    opbmc2400 = g_new0(OPBMC2400State, 1);
+    object_initialize(&opbmc2400->soc, (sizeof(opbmc2400->soc)), TYPE_AST2400);
+    object_property_add_child(OBJECT(machine), "soc", OBJECT(&opbmc2400->soc),
+                              &error_abort);
+
+    memory_region_allocate_system_memory(&opbmc2400->ram, NULL, "ram",
+                                         ram_size);
+    memory_region_add_subregion(get_system_memory(), AST2400_SDRAM_BASE,
+                                &opbmc2400->ram);
+    object_property_add_const_link(OBJECT(&opbmc2400->soc), "ram",
+                                   OBJECT(&opbmc2400->ram), &error_abort);
+    object_property_set_bool(OBJECT(&opbmc2400->soc), true, "realized",
+                             &error_abort);
+
+    opbmc2400_binfo.kernel_filename = machine->kernel_filename;
+    opbmc2400_binfo.initrd_filename = machine->initrd_filename;
+    opbmc2400_binfo.kernel_cmdline = machine->kernel_cmdline;
+    opbmc2400_binfo.ram_size = ram_size;
+    arm_load_kernel(ARM_CPU(first_cpu), &opbmc2400_binfo);
+}
+
+static void opbmc2400_machine_init(MachineClass *mc)
+{
+    mc->desc = "OpenPOWER AST2400 BMC (ARM926EJ-S)";
+    mc->init = opbmc2400_init;
+    mc->max_cpus = 1;
+    mc->no_sdcard = 1;
+    mc->no_floppy = 1;
+    mc->no_cdrom = 1;
+    mc->no_sdcard = 1;
+    mc->no_parallel = 1;
+}
+
+DEFINE_MACHINE("opbmc2400", opbmc2400_machine_init);
-- 
2.5.0

  parent reply	other threads:[~2016-03-14  4:14 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-14  4:13 [Qemu-devel] [PATCH v4 0/4] Add ASPEED AST2400 SoC and OpenPower BMC machine Andrew Jeffery
2016-03-14  4:13 ` [Qemu-devel] [PATCH v4 1/4] hw/timer: Add ASPEED timer device model Andrew Jeffery
2016-03-15 13:14   ` Cédric Le Goater
2016-03-15 23:06     ` Andrew Jeffery
2016-03-15 18:14   ` Dmitry Osipenko
2016-03-15 22:48     ` Andrew Jeffery
2016-03-14  4:13 ` [Qemu-devel] [PATCH v4 2/4] hw/intc: Add (new) ASPEED VIC " Andrew Jeffery
2016-03-14  4:13 ` [Qemu-devel] [PATCH v4 3/4] hw/arm: Add ASPEED AST2400 SoC model Andrew Jeffery
2016-03-14  4:13 ` Andrew Jeffery [this message]
2016-03-15  4:34 ` [Qemu-devel] [PATCH v4 0/4] Add ASPEED AST2400 SoC and OpenPower BMC machine Jeremy Kerr
2016-03-15  5:01   ` Andrew Jeffery
2016-03-15 10:25     ` Cédric Le Goater
2016-03-15 23:09       ` Andrew Jeffery

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=1457928832-31026-5-git-send-email-andrew@aj.id.au \
    --to=andrew@aj.id.au \
    --cc=aik@ozlabs.ru \
    --cc=clg@kaod.org \
    --cc=jk@ozlabs.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.