Skip to content

Commit

Permalink
ipmi: Fix SSIF ACPI handling to use the right CRS
Browse files Browse the repository at this point in the history
Pass in the CRS so that it can be set to the SMBus for IPMI later.

Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Corey Minyard <cminyard@mvista.com>
  • Loading branch information
cminyard committed Sep 20, 2019
1 parent ef48a8c commit 576d05b
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 9 deletions.
2 changes: 1 addition & 1 deletion hw/acpi/ipmi-stub.c
Expand Up @@ -10,6 +10,6 @@
#include "qemu/osdep.h"
#include "hw/acpi/ipmi.h"

void build_acpi_ipmi_devices(Aml *table, BusState *bus)
void build_acpi_ipmi_devices(Aml *table, BusState *bus, const char *resource)
{
}
13 changes: 7 additions & 6 deletions hw/acpi/ipmi.c
Expand Up @@ -13,7 +13,7 @@
#include "hw/acpi/acpi.h"
#include "hw/acpi/ipmi.h"

static Aml *aml_ipmi_crs(IPMIFwInfo *info)
static Aml *aml_ipmi_crs(IPMIFwInfo *info, const char *resource)
{
Aml *crs = aml_resource_template();

Expand Down Expand Up @@ -48,7 +48,8 @@ static Aml *aml_ipmi_crs(IPMIFwInfo *info)
info->register_spacing, info->register_length));
break;
case IPMI_MEMSPACE_SMBUS:
aml_append(crs, aml_return(aml_int(info->base_address)));
aml_append(crs, aml_i2c_serial_bus_device(info->base_address,
resource));
break;
default:
abort();
Expand All @@ -61,7 +62,7 @@ static Aml *aml_ipmi_crs(IPMIFwInfo *info)
return crs;
}

static Aml *aml_ipmi_device(IPMIFwInfo *info)
static Aml *aml_ipmi_device(IPMIFwInfo *info, const char *resource)
{
Aml *dev;
uint16_t version = ((info->ipmi_spec_major_revision << 8)
Expand All @@ -74,14 +75,14 @@ static Aml *aml_ipmi_device(IPMIFwInfo *info)
aml_append(dev, aml_name_decl("_STR", aml_string("ipmi_%s",
info->interface_name)));
aml_append(dev, aml_name_decl("_UID", aml_int(info->uuid)));
aml_append(dev, aml_name_decl("_CRS", aml_ipmi_crs(info)));
aml_append(dev, aml_name_decl("_CRS", aml_ipmi_crs(info, resource)));
aml_append(dev, aml_name_decl("_IFT", aml_int(info->interface_type)));
aml_append(dev, aml_name_decl("_SRV", aml_int(version)));

return dev;
}

void build_acpi_ipmi_devices(Aml *scope, BusState *bus)
void build_acpi_ipmi_devices(Aml *scope, BusState *bus, const char *resource)
{

BusChild *kid;
Expand All @@ -101,6 +102,6 @@ void build_acpi_ipmi_devices(Aml *scope, BusState *bus)
iic = IPMI_INTERFACE_GET_CLASS(obj);
memset(&info, 0, sizeof(info));
iic->get_fwinfo(ii, &info);
aml_append(scope, aml_ipmi_device(&info));
aml_append(scope, aml_ipmi_device(&info, resource));
}
}
2 changes: 1 addition & 1 deletion hw/i386/acpi-build.c
Expand Up @@ -1290,7 +1290,7 @@ static void build_isa_devices_aml(Aml *table)
} else if (!obj) {
error_report("No ISA bus, unable to define IPMI ACPI data");
} else {
build_acpi_ipmi_devices(scope, BUS(obj));
build_acpi_ipmi_devices(scope, BUS(obj), "\\_SB.PCI0.ISA");
}

aml_append(table, scope);
Expand Down
2 changes: 1 addition & 1 deletion include/hw/acpi/ipmi.h
Expand Up @@ -16,6 +16,6 @@
* bus matches the given bus. The resource is the ACPI resource that
* contains the IPMI device, this is required for the I2C CRS.
*/
void build_acpi_ipmi_devices(Aml *table, BusState *bus);
void build_acpi_ipmi_devices(Aml *table, BusState *bus, const char *resource);

#endif /* HW_ACPI_IPMI_H */

0 comments on commit 576d05b

Please sign in to comment.