soc/intel/common: Fix/clean up USB4 PCIe virtual/generic driver
This driver is for the root port device and needs to reference the
parent device for its ACPI scope. Similarly for the debug output it
needs to use the parent device, and fall back to the chip name if
config->desc is not provided in the devicetree.
The UID property is removed. This value is not the same as the port
number; according to some docs it should be unique but it is not fully
clear what it should be tied to. Regardless, it is not used by the
Thunderbolt driver in the kernel.
I also renamed some functions/structures to be clear that this is just
an ACPI driver for the PCIe root port and not a driver for the root port
itself. As part of this I removed the PCI based resource operations and
the scan bus function since this device does not have children itself.
Finally I added a detailed comment with an example describing what the
driver is for and what properties it generates.
TEST=boot on volteer and ensure the USB4 root port device and properties
are added to the SSDT as described by the comment in chip.h.
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Change-Id: Id6069a0fb7a0fc6836ddff1dbeca5915e444ee18
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46544
Reviewed-by: Furquan Shaikh <furquan@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/soc/intel/common/block/usb4/pcie.c b/src/soc/intel/common/block/usb4/pcie.c
index e37d5f4..eae9027 100644
--- a/src/soc/intel/common/block/usb4/pcie.c
+++ b/src/soc/intel/common/block/usb4/pcie.c
@@ -4,19 +4,14 @@
#include <console/console.h>
#include <device/device.h>
#include <device/path.h>
-#include <device/pci.h>
-#include <device/pci_def.h>
-#include <device/pci_ids.h>
-#include <stdlib.h>
#include <string.h>
-#include <types.h>
#include "chip.h"
#define PCI_HOTPLUG_IN_D3_UUID "6211E2C0-58A3-4AF3-90E1-927A4E0C55A4"
#define PCI_EXTERNAL_PORT_UUID "EFCC06CC-73AC-4BC3-BFF0-76143807C389"
#if CONFIG(HAVE_ACPI_TABLES)
-static void usb4_pcie_fill_ssdt(const struct device *dev)
+static void usb4_pcie_acpi_fill_ssdt(const struct device *dev)
{
const struct soc_intel_common_block_usb4_config *config;
const struct device *parent;
@@ -43,14 +38,15 @@
/* Get ACPI path to USB4 device. */
usb4_path = acpi_device_path(config->usb4_port);
if (!usb4_path) {
- printk(BIOS_ERR, "%s: Unable to find ACPI path for usb4_port\n", __func__);
+ printk(BIOS_ERR, "%s: Unable to find ACPI path for usb4_port %s\n",
+ __func__, dev_path(config->usb4_port));
return;
}
usb4_path = strdup(usb4_path);
port_id = dev->path.generic.id;
- acpigen_write_scope(acpi_device_path(dev));
+ acpigen_write_scope(acpi_device_path(parent));
/* Add pointer to USB4 port controller. */
dsd = acpi_dp_new_table("_DSD");
@@ -65,33 +61,31 @@
/* Indicate that port is external. */
pkg = acpi_dp_new_table(PCI_EXTERNAL_PORT_UUID);
acpi_dp_add_integer(pkg, "ExternalFacingPort", 1);
- acpi_dp_add_integer(pkg, "UID", port_id);
acpi_dp_add_package(dsd, pkg);
acpi_dp_write(dsd);
acpigen_pop_len(); /* Scope */
- printk(BIOS_INFO, "%s: %s at %s\n", acpi_device_path(dev), config->desc, dev_path(dev));
+ printk(BIOS_INFO, "%s: %s at %s\n", acpi_device_path(parent),
+ config->desc ? : dev->chip_ops->name, dev_path(parent));
}
#endif
-static struct device_operations usb4_dev_ops = {
- .read_resources = pci_dev_read_resources,
- .set_resources = pci_dev_set_resources,
- .enable_resources = pci_dev_enable_resources,
- .scan_bus = scan_static_bus,
+static struct device_operations usb4_pcie_acpi_dev_ops = {
+ .read_resources = noop_read_resources,
+ .set_resources = noop_set_resources,
#if CONFIG(HAVE_ACPI_TABLES)
- .acpi_fill_ssdt = usb4_pcie_fill_ssdt,
+ .acpi_fill_ssdt = usb4_pcie_acpi_fill_ssdt,
#endif
};
-static void pcie_enable(struct device *dev)
+static void usb4_pcie_acpi_enable(struct device *dev)
{
- dev->ops = &usb4_dev_ops;
+ dev->ops = &usb4_pcie_acpi_dev_ops;
}
struct chip_operations soc_intel_common_block_usb4_ops = {
- CHIP_NAME("Intel USB4 Root Port")
- .enable_dev = pcie_enable
+ CHIP_NAME("Intel USB4 PCIe Root Port")
+ .enable_dev = usb4_pcie_acpi_enable
};