summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/soc/intel/alderlake/fsp_params.c25
-rw-r--r--src/soc/intel/cannonlake/fsp_params.c25
-rw-r--r--src/soc/intel/meteorlake/fsp_params.c25
-rw-r--r--src/soc/intel/tigerlake/fsp_params.c26
4 files changed, 101 insertions, 0 deletions
diff --git a/src/soc/intel/alderlake/fsp_params.c b/src/soc/intel/alderlake/fsp_params.c
index 79fa893c72..41d048b68f 100644
--- a/src/soc/intel/alderlake/fsp_params.c
+++ b/src/soc/intel/alderlake/fsp_params.c
@@ -11,6 +11,7 @@
#include <device/pci_ids.h>
#include <device/pci_ops.h>
#include <drivers/intel/gma/i915_reg.h>
+#include <drivers/usb/acpi/chip.h>
#include <fsp/api.h>
#include <fsp/fsp_debug_event.h>
#include <fsp/fsp_gop_blt.h>
@@ -895,6 +896,23 @@ static void fill_fsps_lan_params(FSP_S_CONFIG *s_cfg,
static void fill_fsps_cnvi_params(FSP_S_CONFIG *s_cfg,
const struct soc_intel_alderlake_config *config)
{
+ struct device *port = NULL;
+ struct drivers_usb_acpi_config *usb_cfg;
+ bool usb_audio_offload = false;
+
+ /* Search through the devicetree for matching USB devices */
+ while ((port = dev_find_path(port, DEVICE_PATH_USB)) != NULL) {
+ /* Skip ports that are not enabled or not of USB type */
+ if (!port->enabled || port->path.type != DEVICE_PATH_USB)
+ continue;
+
+ usb_cfg = port->chip_info;
+ if (usb_cfg && usb_cfg->cnvi_bt_audio_offload) {
+ usb_audio_offload = true;
+ break;
+ }
+ }
+
/* CNVi */
s_cfg->CnviWifiCore = is_devfn_enabled(PCH_DEVFN_CNVI_WIFI);
s_cfg->CnviMode = is_devfn_enabled(PCH_DEVFN_CNVI_WIFI);
@@ -910,6 +928,13 @@ static void fill_fsps_cnvi_params(FSP_S_CONFIG *s_cfg,
s_cfg->CnviBtCore = 0;
s_cfg->CnviBtAudioOffload = 0;
}
+ if (s_cfg->CnviBtAudioOffload && !usb_audio_offload) {
+ printk(BIOS_WARNING, "CNVi BT Audio offload enabled but not in USB driver.\n");
+ }
+ if (!s_cfg->CnviBtAudioOffload && usb_audio_offload) {
+ printk(BIOS_ERR, "USB BT Audio offload enabled but CNVi BT offload disabled\n");
+ usb_cfg->cnvi_bt_audio_offload = 0;
+ }
}
static void fill_fsps_vmd_params(FSP_S_CONFIG *s_cfg,
diff --git a/src/soc/intel/cannonlake/fsp_params.c b/src/soc/intel/cannonlake/fsp_params.c
index bce1eeb369..bd3d1495fe 100644
--- a/src/soc/intel/cannonlake/fsp_params.c
+++ b/src/soc/intel/cannonlake/fsp_params.c
@@ -4,6 +4,7 @@
#include <console/console.h>
#include <device/device.h>
#include <device/pci.h>
+#include <drivers/usb/acpi/chip.h>
#include <fsp/api.h>
#include <fsp/util.h>
#include <option.h>
@@ -529,6 +530,23 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
/* Enable CNVi Wifi if enabled in device tree */
#if CONFIG(SOC_INTEL_COMETLAKE)
+ struct device *port = NULL;
+ struct drivers_usb_acpi_config *usb_cfg;
+ bool usb_audio_offload = false;
+
+ /* Search through the devicetree for matching USB devices */
+ while ((port = dev_find_path(port, DEVICE_PATH_USB)) != NULL) {
+ /* Skip ports that are not enabled or not of USB type */
+ if (!port->enabled || port->path.type != DEVICE_PATH_USB)
+ continue;
+
+ usb_cfg = port->chip_info;
+ if (usb_cfg && usb_cfg->cnvi_bt_audio_offload) {
+ usb_audio_offload = true;
+ break;
+ }
+ }
+
/* CNVi */
s_cfg->CnviMode = is_devfn_enabled(PCH_DEVFN_CNViWIFI);
s_cfg->CnviBtCore = config->CnviBtCore;
@@ -543,6 +561,13 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
s_cfg->CnviBtCore = 0;
s_cfg->CnviBtAudioOffload = 0;
}
+ if (s_cfg->CnviBtAudioOffload && !usb_audio_offload) {
+ printk(BIOS_WARNING, "CNVi BT Audio offload enabled but not in USB driver.\n");
+ }
+ if (!s_cfg->CnviBtAudioOffload && usb_audio_offload) {
+ printk(BIOS_ERR, "USB BT Audio offload enabled but CNVi BT offload disabled\n");
+ usb_cfg->cnvi_bt_audio_offload = 0;
+ }
#else
s_cfg->PchCnviMode = is_devfn_enabled(PCH_DEVFN_CNViWIFI);
#endif
diff --git a/src/soc/intel/meteorlake/fsp_params.c b/src/soc/intel/meteorlake/fsp_params.c
index 702820a788..c2770e630c 100644
--- a/src/soc/intel/meteorlake/fsp_params.c
+++ b/src/soc/intel/meteorlake/fsp_params.c
@@ -9,6 +9,7 @@
#include <cpu/intel/microcode.h>
#include <device/device.h>
#include <device/pci.h>
+#include <drivers/usb/acpi/chip.h>
#include <fsp/api.h>
#include <fsp/fsp_debug_event.h>
#include <fsp/fsp_gop_blt.h>
@@ -576,6 +577,23 @@ static void fill_fsps_lan_params(FSP_S_CONFIG *s_cfg,
static void fill_fsps_cnvi_params(FSP_S_CONFIG *s_cfg,
const struct soc_intel_meteorlake_config *config)
{
+ struct device *port = NULL;
+ struct drivers_usb_acpi_config *usb_cfg;
+ bool usb_audio_offload = false;
+
+ /* Search through the devicetree for matching USB devices */
+ while ((port = dev_find_path(port, DEVICE_PATH_USB)) != NULL) {
+ /* Skip ports that are not enabled or not of USB type */
+ if (!port->enabled || port->path.type != DEVICE_PATH_USB)
+ continue;
+
+ usb_cfg = port->chip_info;
+ if (usb_cfg && usb_cfg->cnvi_bt_audio_offload) {
+ usb_audio_offload = true;
+ break;
+ }
+ }
+
/* CNVi */
s_cfg->CnviMode = is_devfn_enabled(PCI_DEVFN_CNVI_WIFI);
s_cfg->CnviWifiCore = config->cnvi_wifi_core;
@@ -594,6 +612,13 @@ static void fill_fsps_cnvi_params(FSP_S_CONFIG *s_cfg,
s_cfg->CnviBtCore = 0;
s_cfg->CnviBtAudioOffload = 0;
}
+ if (s_cfg->CnviBtAudioOffload && !usb_audio_offload) {
+ printk(BIOS_WARNING, "CNVi BT Audio offload enabled but not in USB driver\n");
+ }
+ if (!s_cfg->CnviBtAudioOffload && usb_audio_offload) {
+ printk(BIOS_ERR, "USB BT Audio offload enabled but CNVi BT offload disabled\n");
+ usb_cfg->cnvi_bt_audio_offload = 0;
+ }
}
static void fill_fsps_vmd_params(FSP_S_CONFIG *s_cfg,
diff --git a/src/soc/intel/tigerlake/fsp_params.c b/src/soc/intel/tigerlake/fsp_params.c
index fa5a549e7e..9706ac6d62 100644
--- a/src/soc/intel/tigerlake/fsp_params.c
+++ b/src/soc/intel/tigerlake/fsp_params.c
@@ -7,6 +7,7 @@
#include <device/pci_ops.h>
#include <device/pci.h>
#include <device/pci_ids.h>
+#include <drivers/usb/acpi/chip.h>
#include <fsp/api.h>
#include <fsp/ppi/mp_service_ppi.h>
#include <fsp/util.h>
@@ -493,6 +494,24 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
params->PchLanEnable = is_devfn_enabled(PCH_DEVFN_GBE);
/* CNVi */
+ struct device *port = NULL;
+ struct drivers_usb_acpi_config *usb_cfg;
+ bool usb_audio_offload = false;
+
+ /* Search through the devicetree for matching USB devices */
+ while ((port = dev_find_path(port, DEVICE_PATH_USB)) != NULL) {
+ /* Skip ports that are not enabled or not of USB type */
+ if (!port->enabled || port->path.type != DEVICE_PATH_USB)
+ continue;
+
+ usb_cfg = port->chip_info;
+ if (usb_cfg && usb_cfg->cnvi_bt_audio_offload) {
+ usb_audio_offload = true;
+ break;
+ }
+
+ }
+
params->CnviMode = is_devfn_enabled(PCH_DEVFN_CNVI_WIFI);
params->CnviBtCore = config->CnviBtCore;
params->CnviBtAudioOffload = config->CnviBtAudioOffload;
@@ -506,6 +525,13 @@ void platform_fsp_silicon_init_params_cb(FSPS_UPD *supd)
params->CnviBtCore = 0;
params->CnviBtAudioOffload = 0;
}
+ if (params->CnviBtAudioOffload && !usb_audio_offload) {
+ printk(BIOS_WARNING, "CNVi BT Audio offload enabled but not in USB driver.\n");
+ }
+ if (!params->CnviBtAudioOffload && usb_audio_offload) {
+ printk(BIOS_ERR, "USB BT Audio offload enabled but CNVi BT offload disabled\n");
+ usb_cfg->cnvi_bt_audio_offload = 0;
+ }
/* VMD */
params->VmdEnable = is_devfn_enabled(SA_DEVFN_VMD);