acpi: enumerate SMB bridge automatically along with other PCI devices
to make that happen (bridge sits at _ADR: 0x001F0003), relax PCI enumeration logic to include devices with *function* > 0 if device has something to say about itself (i.e. has build_dev_aml callback set). Signed-off-by: Igor Mammedov <imammedo@redhat.com> Message-Id: <20221017102146.2254096-8-imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
5dbad0af10
commit
6d2146147b
@ -448,9 +448,10 @@ static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus,
|
|||||||
/*
|
/*
|
||||||
* allow describing coldplugged bridges in ACPI even if they are not
|
* allow describing coldplugged bridges in ACPI even if they are not
|
||||||
* on function 0, as they are not unpluggable, for all other devices
|
* on function 0, as they are not unpluggable, for all other devices
|
||||||
* generate description only for function 0 per slot
|
* generate description only for function 0 per slot, and for other
|
||||||
|
* functions if device on function provides its own AML
|
||||||
*/
|
*/
|
||||||
if (func && !bridge_in_acpi) {
|
if (func && !bridge_in_acpi && !get_dev_aml_func(DEVICE(pdev))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1319,25 +1320,6 @@ static Aml *build_q35_osc_method(bool enable_native_pcie_hotplug)
|
|||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void build_smb0(Aml *table, int devnr, int func)
|
|
||||||
{
|
|
||||||
Aml *scope = aml_scope("_SB.PCI0");
|
|
||||||
Aml *dev = aml_device("SMB0");
|
|
||||||
bool ambiguous;
|
|
||||||
Object *obj;
|
|
||||||
/*
|
|
||||||
* temporarily fish out device hosting SMBUS, build_smb0 will be gone once
|
|
||||||
* PCI enumeration will be switched to call_dev_aml_func()
|
|
||||||
*/
|
|
||||||
obj = object_resolve_path_type("", TYPE_ICH9_SMB_DEVICE, &ambiguous);
|
|
||||||
assert(obj && !ambiguous);
|
|
||||||
|
|
||||||
aml_append(dev, aml_name_decl("_ADR", aml_int(devnr << 16 | func)));
|
|
||||||
call_dev_aml_func(DEVICE(obj), dev);
|
|
||||||
aml_append(scope, dev);
|
|
||||||
aml_append(table, scope);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void build_acpi0017(Aml *table)
|
static void build_acpi0017(Aml *table)
|
||||||
{
|
{
|
||||||
Aml *dev, *scope, *method;
|
Aml *dev, *scope, *method;
|
||||||
@ -1440,9 +1422,6 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
|
|||||||
build_x86_acpi_pci_hotplug(dsdt, pm->pcihp_io_base);
|
build_x86_acpi_pci_hotplug(dsdt, pm->pcihp_io_base);
|
||||||
}
|
}
|
||||||
build_q35_pci0_int(dsdt);
|
build_q35_pci0_int(dsdt);
|
||||||
if (pcms->smbus) {
|
|
||||||
build_smb0(dsdt, ICH9_SMB_DEV, ICH9_SMB_FUNC);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (misc->has_hpet) {
|
if (misc->has_hpet) {
|
||||||
|
Loading…
Reference in New Issue
Block a user