Skip to content

Commit

Permalink
hw/misc: Add an iBT device model
Browse files Browse the repository at this point in the history
Implement an IPMI BT interface model using a chardev backend to
communicate with an external PowerNV machine. It uses the OpenIPMI
simulator protocol for virtual machines described in :

    https://github.com/cminyard/openipmi/blob/master/lanserv/README.vm

and implemented by the 'ipmi-bmc-extern' model on the host side.

To use, start the Aspeed BMC machine with :

    -chardev socket,id=ipmi0,host=localhost,port=9002,ipv4,server,nowait \
    -global driver=aspeed.ibt,property=chardev,value=ipmi0

and the PowerNV machine with :

    -chardev socket,id=ipmi0,host=localhost,port=9002,reconnect=10 \
    -device ipmi-bmc-extern,id=bmc0,chardev=ipmi0 \
    -device isa-ipmi-bt,bmc=bmc0,irq=10 -nodefaults

Cc: Hao Wu <wuhaotsh@google.com>
Cc: Corey Minyard <cminyard@mvista.com>
Reviewed-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20210407171637.777743-20-clg@kaod.org>
Signed-off-by: Cédric Le Goater <clg@kaod.org>
  • Loading branch information
legoater committed Sep 27, 2021
1 parent 8e2bd4e commit c6b6796
Show file tree
Hide file tree
Showing 7 changed files with 677 additions and 0 deletions.
12 changes: 12 additions & 0 deletions hw/arm/aspeed_ast2600.c
Expand Up @@ -217,6 +217,8 @@ static void aspeed_soc_ast2600_init(Object *obj)

object_initialize_child(obj, "lpc", &s->lpc, TYPE_ASPEED_LPC);

object_initialize_child(obj, "ibt", &s->ibt, TYPE_ASPEED_IBT);

snprintf(typename, sizeof(typename), "aspeed.hace-%s", socname);
object_initialize_child(obj, "hace", &s->hace, typename);

Expand Down Expand Up @@ -510,6 +512,16 @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
qdev_get_gpio_in(DEVICE(&s->a7mpcore),
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));

/* iBT */
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ibt), errp)) {
return;
}
memory_region_add_subregion(&s->lpc.iomem,
sc->memmap[ASPEED_DEV_IBT] - sc->memmap[ASPEED_DEV_LPC],
&s->ibt.iomem);
sysbus_connect_irq(SYS_BUS_DEVICE(&s->ibt), 0,
aspeed_soc_get_irq(s, ASPEED_DEV_IBT));

/* HACE */
object_property_set_link(OBJECT(&s->hace), "dram", OBJECT(s->dram_mr),
&error_abort);
Expand Down
12 changes: 12 additions & 0 deletions hw/arm/aspeed_soc.c
Expand Up @@ -217,6 +217,8 @@ static void aspeed_soc_init(Object *obj)

object_initialize_child(obj, "lpc", &s->lpc, TYPE_ASPEED_LPC);

object_initialize_child(obj, "ibt", &s->ibt, TYPE_ASPEED_IBT);

snprintf(typename, sizeof(typename), "aspeed.hace-%s", socname);
object_initialize_child(obj, "hace", &s->hace, typename);

Expand Down Expand Up @@ -439,6 +441,16 @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_4,
qdev_get_gpio_in(DEVICE(&s->lpc), aspeed_lpc_kcs_4));

/* iBT */
if (!sysbus_realize(SYS_BUS_DEVICE(&s->ibt), errp)) {
return;
}
memory_region_add_subregion(&s->lpc.iomem,
sc->memmap[ASPEED_DEV_IBT] - sc->memmap[ASPEED_DEV_LPC],
&s->ibt.iomem);
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_ibt,
qdev_get_gpio_in(DEVICE(&s->lpc), aspeed_lpc_ibt));

/* HACE */
object_property_set_link(OBJECT(&s->hace), "dram", OBJECT(s->dram_mr),
&error_abort);
Expand Down

0 comments on commit c6b6796

Please sign in to comment.