The PowerNV machine can be run with an external IPMI BMC device
connected to a remote QEMU machine acting as BMC, using these options :
-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
In that case, some aspects of the BMC initialization should be
skipped, since they rely on the simulator interface.
Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
hw/ppc/pnv_bmc.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
index 86d16b493539..b9bf5735ea0f 100644
--- a/hw/ppc/pnv_bmc.c
+++ b/hw/ppc/pnv_bmc.c
@@ -51,6 +51,11 @@ typedef struct OemSel {
#define SOFT_OFF 0x00
#define SOFT_REBOOT 0x01
+static bool pnv_bmc_is_simulator(IPMIBmc *bmc)
+{
+ return object_dynamic_cast(OBJECT(bmc), TYPE_IPMI_BMC_SIMULATOR);
+}
+
static void pnv_gen_oem_sel(IPMIBmc *bmc, uint8_t reboot)
{
/* IPMI SEL Event are 16 bytes long */
@@ -79,6 +84,10 @@ void pnv_dt_bmc_sensors(IPMIBmc *bmc, void *fdt)
const struct ipmi_sdr_compact *sdr;
uint16_t nextrec;
+ if (!pnv_bmc_is_simulator(bmc)) {
+ return;
+ }
+
offset = fdt_add_subnode(fdt, 0, "bmc");
_FDT(offset);
@@ -243,6 +252,10 @@ static const IPMINetfn hiomap_netfn = {
void pnv_bmc_set_pnor(IPMIBmc *bmc, PnvPnor *pnor)
{
+ if (!pnv_bmc_is_simulator(bmc)) {
+ return;
+ }
+
object_ref(OBJECT(pnor));
object_property_add_const_link(OBJECT(bmc), "pnor", OBJECT(pnor));
@@ -286,7 +299,7 @@ static int bmc_find(Object *child, void *opaque)
IPMIBmc *pnv_bmc_find(Error **errp)
{
- ForeachArgs args = { TYPE_IPMI_BMC_SIMULATOR, NULL };
+ ForeachArgs args = { TYPE_IPMI_BMC, NULL };
int ret;
ret = object_child_foreach_recursive(object_get_root(), bmc_find, &args);
--
2.26.2
On Tue, 26 Jan 2021 at 17:11, Cédric Le Goater <clg@kaod.org> wrote:
>
> The PowerNV machine can be run with an external IPMI BMC device
> connected to a remote QEMU machine acting as BMC, using these options :
>
> -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
Should this information also go in docs/system/ppc similar to the
descriptions we have in docs/system/arm?
>
> In that case, some aspects of the BMC initialization should be
> skipped, since they rely on the simulator interface.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Joel Stanley <joel@jms.id.au>
> ---
> hw/ppc/pnv_bmc.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
> index 86d16b493539..b9bf5735ea0f 100644
> --- a/hw/ppc/pnv_bmc.c
> +++ b/hw/ppc/pnv_bmc.c
> @@ -51,6 +51,11 @@ typedef struct OemSel {
> #define SOFT_OFF 0x00
> #define SOFT_REBOOT 0x01
>
> +static bool pnv_bmc_is_simulator(IPMIBmc *bmc)
> +{
> + return object_dynamic_cast(OBJECT(bmc), TYPE_IPMI_BMC_SIMULATOR);
> +}
> +
> static void pnv_gen_oem_sel(IPMIBmc *bmc, uint8_t reboot)
> {
> /* IPMI SEL Event are 16 bytes long */
> @@ -79,6 +84,10 @@ void pnv_dt_bmc_sensors(IPMIBmc *bmc, void *fdt)
> const struct ipmi_sdr_compact *sdr;
> uint16_t nextrec;
>
> + if (!pnv_bmc_is_simulator(bmc)) {
> + return;
> + }
> +
> offset = fdt_add_subnode(fdt, 0, "bmc");
> _FDT(offset);
>
> @@ -243,6 +252,10 @@ static const IPMINetfn hiomap_netfn = {
>
> void pnv_bmc_set_pnor(IPMIBmc *bmc, PnvPnor *pnor)
> {
> + if (!pnv_bmc_is_simulator(bmc)) {
> + return;
> + }
> +
> object_ref(OBJECT(pnor));
> object_property_add_const_link(OBJECT(bmc), "pnor", OBJECT(pnor));
>
> @@ -286,7 +299,7 @@ static int bmc_find(Object *child, void *opaque)
>
> IPMIBmc *pnv_bmc_find(Error **errp)
> {
> - ForeachArgs args = { TYPE_IPMI_BMC_SIMULATOR, NULL };
> + ForeachArgs args = { TYPE_IPMI_BMC, NULL };
> int ret;
>
> ret = object_child_foreach_recursive(object_get_root(), bmc_find, &args);
> --
> 2.26.2
>
>
On 1/28/21 1:48 AM, Joel Stanley wrote:
> On Tue, 26 Jan 2021 at 17:11, Cédric Le Goater <clg@kaod.org> wrote:
>>
>> The PowerNV machine can be run with an external IPMI BMC device
>> connected to a remote QEMU machine acting as BMC, using these options :
>>
>> -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
>
> Should this information also go in docs/system/ppc similar to the
> descriptions we have in docs/system/arm?
yes.
Do you think we could reference :
https://openpower.xyz/job/openpower/job/openpower-op-build/
?
Thanks,
C.
>>
>> In that case, some aspects of the BMC initialization should be
>> skipped, since they rely on the simulator interface.
>>
>> Signed-off-by: Cédric Le Goater <clg@kaod.org>
>
> Reviewed-by: Joel Stanley <joel@jms.id.au>
>
>
>> ---
>> hw/ppc/pnv_bmc.c | 15 ++++++++++++++-
>> 1 file changed, 14 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
>> index 86d16b493539..b9bf5735ea0f 100644
>> --- a/hw/ppc/pnv_bmc.c
>> +++ b/hw/ppc/pnv_bmc.c
>> @@ -51,6 +51,11 @@ typedef struct OemSel {
>> #define SOFT_OFF 0x00
>> #define SOFT_REBOOT 0x01
>>
>> +static bool pnv_bmc_is_simulator(IPMIBmc *bmc)
>> +{
>> + return object_dynamic_cast(OBJECT(bmc), TYPE_IPMI_BMC_SIMULATOR);
>> +}
>> +
>> static void pnv_gen_oem_sel(IPMIBmc *bmc, uint8_t reboot)
>> {
>> /* IPMI SEL Event are 16 bytes long */
>> @@ -79,6 +84,10 @@ void pnv_dt_bmc_sensors(IPMIBmc *bmc, void *fdt)
>> const struct ipmi_sdr_compact *sdr;
>> uint16_t nextrec;
>>
>> + if (!pnv_bmc_is_simulator(bmc)) {
>> + return;
>> + }
>> +
>> offset = fdt_add_subnode(fdt, 0, "bmc");
>> _FDT(offset);
>>
>> @@ -243,6 +252,10 @@ static const IPMINetfn hiomap_netfn = {
>>
>> void pnv_bmc_set_pnor(IPMIBmc *bmc, PnvPnor *pnor)
>> {
>> + if (!pnv_bmc_is_simulator(bmc)) {
>> + return;
>> + }
>> +
>> object_ref(OBJECT(pnor));
>> object_property_add_const_link(OBJECT(bmc), "pnor", OBJECT(pnor));
>>
>> @@ -286,7 +299,7 @@ static int bmc_find(Object *child, void *opaque)
>>
>> IPMIBmc *pnv_bmc_find(Error **errp)
>> {
>> - ForeachArgs args = { TYPE_IPMI_BMC_SIMULATOR, NULL };
>> + ForeachArgs args = { TYPE_IPMI_BMC, NULL };
>> int ret;
>>
>> ret = object_child_foreach_recursive(object_get_root(), bmc_find, &args);
>> --
>> 2.26.2
>>
>>
On Thu, 28 Jan 2021 at 07:13, Cédric Le Goater <clg@kaod.org> wrote: > > On 1/28/21 1:48 AM, Joel Stanley wrote: > > On Tue, 26 Jan 2021 at 17:11, Cédric Le Goater <clg@kaod.org> wrote: > >> > >> The PowerNV machine can be run with an external IPMI BMC device > >> connected to a remote QEMU machine acting as BMC, using these options : > >> > >> -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 > > > > Should this information also go in docs/system/ppc similar to the > > descriptions we have in docs/system/arm? > > yes. > > Do you think we could reference : > > https://openpower.xyz/job/openpower/job/openpower-op-build/ I'm not sure how long into the future it will stay up. Hosting some images somewhere else would be ideal. Perhaps include that URL for now, and we can update it once we have a better location. Cheers, Joel
On Tue, Jan 26, 2021 at 06:10:57PM +0100, Cédric Le Goater wrote:
> The PowerNV machine can be run with an external IPMI BMC device
> connected to a remote QEMU machine acting as BMC, using these options :
>
> -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
>
> In that case, some aspects of the BMC initialization should be
> skipped, since they rely on the simulator interface.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
Applied to ppc-for-6.0, thanks.
> ---
> hw/ppc/pnv_bmc.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/hw/ppc/pnv_bmc.c b/hw/ppc/pnv_bmc.c
> index 86d16b493539..b9bf5735ea0f 100644
> --- a/hw/ppc/pnv_bmc.c
> +++ b/hw/ppc/pnv_bmc.c
> @@ -51,6 +51,11 @@ typedef struct OemSel {
> #define SOFT_OFF 0x00
> #define SOFT_REBOOT 0x01
>
> +static bool pnv_bmc_is_simulator(IPMIBmc *bmc)
> +{
> + return object_dynamic_cast(OBJECT(bmc), TYPE_IPMI_BMC_SIMULATOR);
> +}
> +
> static void pnv_gen_oem_sel(IPMIBmc *bmc, uint8_t reboot)
> {
> /* IPMI SEL Event are 16 bytes long */
> @@ -79,6 +84,10 @@ void pnv_dt_bmc_sensors(IPMIBmc *bmc, void *fdt)
> const struct ipmi_sdr_compact *sdr;
> uint16_t nextrec;
>
> + if (!pnv_bmc_is_simulator(bmc)) {
> + return;
> + }
> +
> offset = fdt_add_subnode(fdt, 0, "bmc");
> _FDT(offset);
>
> @@ -243,6 +252,10 @@ static const IPMINetfn hiomap_netfn = {
>
> void pnv_bmc_set_pnor(IPMIBmc *bmc, PnvPnor *pnor)
> {
> + if (!pnv_bmc_is_simulator(bmc)) {
> + return;
> + }
> +
> object_ref(OBJECT(pnor));
> object_property_add_const_link(OBJECT(bmc), "pnor", OBJECT(pnor));
>
> @@ -286,7 +299,7 @@ static int bmc_find(Object *child, void *opaque)
>
> IPMIBmc *pnv_bmc_find(Error **errp)
> {
> - ForeachArgs args = { TYPE_IPMI_BMC_SIMULATOR, NULL };
> + ForeachArgs args = { TYPE_IPMI_BMC, NULL };
> int ret;
>
> ret = object_child_foreach_recursive(object_get_root(), bmc_find, &args);
--
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
© 2016 - 2026 Red Hat, Inc.