From: David Gibson <david@gibson.dropbear.id.au>
To: "Cédric Le Goater" <clg@kaod.org>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 16/21] ppc/pnv: generate an OEM SEL event on shutdown
Date: Mon, 10 Apr 2017 15:32:22 +1000 [thread overview]
Message-ID: <20170410053222.GO27571@umbus> (raw)
In-Reply-To: <1491396106-26376-17-git-send-email-clg@kaod.org>
[-- Attachment #1: Type: text/plain, Size: 3971 bytes --]
On Wed, Apr 05, 2017 at 02:41:41PM +0200, Cédric Le Goater wrote:
> OpenPOWER systems expect to be notified with such an event before a
> shutdown or a reboot. An OEM SEL message is sent with specific
> identifiers and a user data containing the request : OFF or REBOOT.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
> ---
> hw/ppc/pnv.c | 14 ++++++++++++++
> hw/ppc/pnv_bmc.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> include/hw/ppc/pnv.h | 3 +++
> 3 files changed, 59 insertions(+)
>
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index c7caecad0aa6..df0a88c3e252 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -467,6 +467,15 @@ static void *powernv_create_fdt(MachineState *machine)
> return fdt;
> }
>
> +static void pnv_powerdown_notify(Notifier *n, void *opaque)
> +{
> + PnvMachineState *pnv = POWERNV_MACHINE(qdev_get_machine());
> +
> + if (pnv->bmc) {
> + pnv_bmc_powerdown(pnv->bmc);
> + }
> +}
> +
> static void ppc_powernv_reset(void)
> {
> MachineState *machine = MACHINE(qdev_get_machine());
> @@ -662,6 +671,11 @@ static void ppc_powernv_init(MachineState *machine)
>
> /* Create an RTC ISA device too */
> rtc_init(pnv->isa_bus, 2000, NULL);
> +
> + /* OpenPOWER systems use a IPMI SEL Event message to notify the
> + * host to powerdown */
> + pnv->powerdown_notifier.notify = pnv_powerdown_notify;
> + qemu_register_powerdown_notifier(&pnv->powerdown_notifier);
> }
>
> /*
> diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
> index 2998530dc4c0..d9ed774acbac 100644
> --- a/hw/ppc/pnv_bmc.c
> +++ b/hw/ppc/pnv_bmc.c
> @@ -32,6 +32,48 @@
> /* TODO: include definition in ipmi.h */
> #define IPMI_SDR_FULL_TYPE 1
>
> +/*
> + * OEM SEL Event data packet sent by BMC in response of a Read Event
> + * Message Buffer command
> + */
> +typedef struct OemSel {
> + /* SEL header */
> + uint8_t id[2];
> + uint8_t type;
> + uint8_t timestamp[4];
> + uint8_t manuf_id[3];
> +
> + /* OEM SEL data (6 bytes) follows */
> + uint8_t netfun;
> + uint8_t cmd;
> + uint8_t data[4];
> +} OemSel;
> +
> +#define SOFT_OFF 0x00
> +#define SOFT_REBOOT 0x01
> +
> +static void pnv_gen_oem_sel(Object *obj, uint8_t reboot)
> +{
> + /* IPMI SEL Event are 16 bytes long */
> + OemSel sel = {
> + .id = { 0x55 , 0x55 },
> + .type = 0xC0, /* OEM */
> + .manuf_id = { 0x0, 0x0, 0x0 },
> + .timestamp = { 0x0, 0x0, 0x0, 0x0 },
> + .netfun = 0x3A, /* IBM */
> + .cmd = 0x04, /* AMI OEM SEL Power Notification */
> + .data = { reboot, 0xFF, 0xFF, 0xFF },
> + };
> +
> + ipmi_bmc_gen_event(IPMI_BMC(obj), (uint8_t *) &sel,
> + 0 /* do not log the event */);
> +}
> +
> +void pnv_bmc_powerdown(Object *obj)
> +{
> + pnv_gen_oem_sel(obj, SOFT_OFF);
> +}
> +
> void pnv_bmc_populate_sensors(Object *bmc, void *fdt)
> {
> int offset;
> diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
> index 050763f6cf54..b70a13bd4175 100644
> --- a/include/hw/ppc/pnv.h
> +++ b/include/hw/ppc/pnv.h
> @@ -132,6 +132,8 @@ typedef struct PnvMachineState {
> uint32_t cpld_irqstate;
>
> Object *bmc;
> +
> + Notifier powerdown_notifier;
> } PnvMachineState;
>
> #define PNV_FDT_ADDR 0x01000000
> @@ -141,6 +143,7 @@ typedef struct PnvMachineState {
> * BMC helpers
> */
> void pnv_bmc_populate_sensors(Object *objbmc, void *fdt);
> +void pnv_bmc_powerdown(Object *objbmc);
>
> /*
> * POWER8 MMIO base addresses
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2017-04-10 5:41 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-05 12:41 [Qemu-devel] [PATCH 00/21] pnv: PSI, OCC, IPMI and PCI models Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 01/21] ppc/pnv: Add cut down PSI bridge model and hookup external interrupt Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 02/21] ppc/pnv: Add OCC model stub with interrupt support Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 03/21] ppc/pnv: Add support for POWER8+ LPC Controller Cédric Le Goater
2017-04-06 2:02 ` David Gibson
2017-04-06 12:27 ` Cédric Le Goater
2017-04-06 12:44 ` Cédric Le Goater
2017-04-06 21:54 ` Benjamin Herrenschmidt
2017-04-07 6:12 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 04/21] ppc/pnv: enable only one LPC bus Cédric Le Goater
2017-04-06 4:23 ` David Gibson
2017-04-06 9:06 ` Cédric Le Goater
2017-04-06 9:16 ` Benjamin Herrenschmidt
2017-04-06 11:50 ` Cédric Le Goater
2017-04-06 12:01 ` Benjamin Herrenschmidt
2017-04-06 12:35 ` Cédric Le Goater
2017-04-06 21:53 ` Benjamin Herrenschmidt
2017-04-07 6:14 ` Cédric Le Goater
2017-04-08 2:14 ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 05/21] ppc: add IPMI support Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 06/21] ipmi: use a file to load SDRs Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 07/21] ipmi: provide support for FRUs Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 08/21] ipmi: introduce an ipmi_bmc_sdr_find() API Cédric Le Goater
2017-04-06 5:36 ` David Gibson
2017-04-06 7:36 ` Cédric Le Goater
2017-04-06 7:38 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 09/21] ipmi: introduce an ipmi_bmc_gen_event() API Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 10/21] ipmi: add SET_SENSOR_READING command Cédric Le Goater
2017-04-05 14:41 ` Corey Minyard
2017-04-06 7:29 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 11/21] ppc/pnv: scan ISA bus to populate device tree Cédric Le Goater
2017-04-10 5:17 ` David Gibson
2017-04-10 9:08 ` Cédric Le Goater
2017-04-10 13:16 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2017-04-10 13:21 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 12/21] ppc/pnv: populate device tree for RTC devices Cédric Le Goater
2017-04-10 5:18 ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 13/21] ppc/pnv: populate device tree for serial devices Cédric Le Goater
2017-04-10 5:19 ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 14/21] ppc/pnv: populate device tree for IPMI BT devices Cédric Le Goater
2017-04-10 5:23 ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 15/21] ppc/pnv: add initial IPMI sensors for the BMC simulator Cédric Le Goater
2017-04-10 5:31 ` David Gibson
2017-04-10 9:25 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 16/21] ppc/pnv: generate an OEM SEL event on shutdown Cédric Le Goater
2017-04-10 5:32 ` David Gibson [this message]
2017-04-05 12:41 ` [Qemu-devel] [PATCH 17/21] qdev: Add a hook for a bus to device if it can add devices Cédric Le Goater
2017-04-10 5:36 ` David Gibson
2017-04-05 12:41 ` [Qemu-devel] [PATCH 18/21] pci: Use the new pci_can_add_device() to enforce devfn_min/max Cédric Le Goater
2017-04-10 5:41 ` David Gibson
2017-04-10 19:48 ` Michael S. Tsirkin
2017-04-05 12:41 ` [Qemu-devel] [PATCH 19/21] pci: Don't call pci_irq_handler() for a negative intx Cédric Le Goater
2017-04-10 5:59 ` David Gibson
2017-04-11 15:41 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 20/21] ppc/pnv: Add model for Power8 PHB3 PCIe Host bridge Cédric Le Goater
2017-04-10 8:14 ` David Gibson
2017-04-11 3:05 ` Benjamin Herrenschmidt
2017-04-11 6:06 ` David Gibson
2017-04-11 16:03 ` Cédric Le Goater
2017-04-11 16:35 ` Cédric Le Goater
2017-04-05 12:41 ` [Qemu-devel] [PATCH 21/21] ppc/pnv: Create a default PCI layout Cédric Le Goater
2017-04-10 8:16 ` David Gibson
2017-04-11 11:10 ` [Qemu-devel] [Qemu-ppc] " Andrea Bolognani
2017-04-11 16:50 ` Cédric Le Goater
2017-04-12 8:02 ` Andrea Bolognani
2017-04-12 9:01 ` Cédric Le Goater
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=20170410053222.GO27571@umbus \
--to=david@gibson.dropbear.id.au \
--cc=clg@kaod.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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.