summaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block/usb4/pcie.c
diff options
context:
space:
mode:
authorDuncan Laurie <dlaurie@google.com>2020-10-18 15:01:22 -0700
committerDuncan Laurie <dlaurie@chromium.org>2020-10-21 15:35:50 +0000
commit389cb30ceddba90ce2d7dd0fa0cec1ff54ff1ae4 (patch)
treedacb62202cee354d2bd5c8658439778546829f6b /src/soc/intel/common/block/usb4/pcie.c
parentfcbf18c5df6013c31e99662887be5c4e8bb2cf24 (diff)
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>
Diffstat (limited to 'src/soc/intel/common/block/usb4/pcie.c')
-rw-r--r--src/soc/intel/common/block/usb4/pcie.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/src/soc/intel/common/block/usb4/pcie.c b/src/soc/intel/common/block/usb4/pcie.c
index e37d5f4125..eae9027511 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 @@ static void usb4_pcie_fill_ssdt(const struct device *dev)
/* 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 @@ static void usb4_pcie_fill_ssdt(const struct device *dev)
/* 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
};