soc/intel: Add a driver for CNVi WiFi/BT controllers

This change adds a common block driver for CNVi WiFi/BT controllers in
Intel SoCs. This driver uses the common PCI dev operations in addition
to generating ACPI device node and returning ACPI name for the
controller device.

This change also selects this driver for CML, GLK, ICL, JSL and TGL.

Change-Id: I69a832be918d4b9f4fbe3a40913d4542a457a77c
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46864
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
This commit is contained in:
Furquan Shaikh 2020-10-08 23:44:20 -07:00 committed by Patrick Georgi
parent 9e1fab0076
commit 23e88135bb
8 changed files with 84 additions and 0 deletions

View File

@ -7,6 +7,7 @@ config SOC_INTEL_GEMINILAKE
bool bool
default n default n
select SOC_INTEL_APOLLOLAKE select SOC_INTEL_APOLLOLAKE
select SOC_INTEL_COMMON_BLOCK_CNVI
select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT
select SOC_INTEL_COMMON_BLOCK_SGX select SOC_INTEL_COMMON_BLOCK_SGX
select SOC_INTEL_COMMON_BLOCK_GSPI_VERSION_2 select SOC_INTEL_COMMON_BLOCK_GSPI_VERSION_2

View File

@ -103,6 +103,7 @@ config CPU_SPECIFIC_OPTIONS
select SOC_INTEL_COMMON_BLOCK select SOC_INTEL_COMMON_BLOCK
select SOC_INTEL_COMMON_BLOCK_ACPI select SOC_INTEL_COMMON_BLOCK_ACPI
select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG
select SOC_INTEL_COMMON_BLOCK_CNVI
select SOC_INTEL_COMMON_BLOCK_CPU select SOC_INTEL_COMMON_BLOCK_CPU
select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT
select SOC_INTEL_COMMON_BLOCK_GPIO_DUAL_ROUTE_SUPPORT select SOC_INTEL_COMMON_BLOCK_GPIO_DUAL_ROUTE_SUPPORT

View File

@ -0,0 +1,4 @@
config SOC_INTEL_COMMON_BLOCK_CNVI
bool
help
Common CNVI module for Intel PCH

View File

@ -0,0 +1 @@
ramstage-$(CONFIG_SOC_INTEL_COMMON_BLOCK_CNVI) += cnvi.c

View File

@ -0,0 +1,74 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <acpi/acpi_device.h>
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ids.h>
static const char *cnvi_wifi_acpi_name(const struct device *dev)
{
return "CNVW";
}
static struct device_operations cnvi_wifi_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
.ops_pci = &pci_dev_ops_pci,
.scan_bus = scan_static_bus,
.acpi_name = cnvi_wifi_acpi_name,
.acpi_fill_ssdt = acpi_device_write_pci_dev,
};
static const unsigned short wifi_pci_device_ids[] = {
PCI_DEVICE_ID_INTEL_CML_LP_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_CML_H_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_CNL_LP_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_CNL_H_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_GLK_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_ICL_CNVI_WIFI,
PCI_DEVICE_ID_INTEL_JSL_CNVI_WIFI_0,
PCI_DEVICE_ID_INTEL_JSL_CNVI_WIFI_1,
PCI_DEVICE_ID_INTEL_JSL_CNVI_WIFI_2,
PCI_DEVICE_ID_INTEL_JSL_CNVI_WIFI_3,
PCI_DEVICE_ID_INTEL_TGL_CNVI_WIFI_0,
PCI_DEVICE_ID_INTEL_TGL_CNVI_WIFI_1,
PCI_DEVICE_ID_INTEL_TGL_CNVI_WIFI_2,
PCI_DEVICE_ID_INTEL_TGL_CNVI_WIFI_3,
0
};
static const struct pci_driver pch_cnvi_wifi __pci_driver = {
.ops = &cnvi_wifi_ops,
.vendor = PCI_VENDOR_ID_INTEL,
.devices = wifi_pci_device_ids,
};
static const char *cnvi_bt_acpi_name(const struct device *dev)
{
return "CNVB";
}
static struct device_operations cnvi_bt_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
.ops_pci = &pci_dev_ops_pci,
.scan_bus = scan_static_bus,
.acpi_name = cnvi_bt_acpi_name,
.acpi_fill_ssdt = acpi_device_write_pci_dev,
};
static const unsigned short bt_pci_device_ids[] = {
PCI_DEVICE_ID_INTEL_TGL_CNVI_BT_0,
PCI_DEVICE_ID_INTEL_TGL_CNVI_BT_1,
PCI_DEVICE_ID_INTEL_TGL_CNVI_BT_2,
PCI_DEVICE_ID_INTEL_TGL_CNVI_BT_3,
0
};
static const struct pci_driver pch_cnvi_bt __pci_driver = {
.ops = &cnvi_bt_ops,
.vendor = PCI_VENDOR_ID_INTEL,
.devices = bt_pci_device_ids,
};

View File

@ -41,6 +41,7 @@ config CPU_SPECIFIC_OPTIONS
select SOC_INTEL_COMMON_BLOCK select SOC_INTEL_COMMON_BLOCK
select SOC_INTEL_COMMON_BLOCK_ACPI select SOC_INTEL_COMMON_BLOCK_ACPI
select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG
select SOC_INTEL_COMMON_BLOCK_CNVI
select SOC_INTEL_COMMON_BLOCK_CPU select SOC_INTEL_COMMON_BLOCK_CPU
select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT
select SOC_INTEL_COMMON_BLOCK_GSPI_VERSION_2 select SOC_INTEL_COMMON_BLOCK_GSPI_VERSION_2

View File

@ -39,6 +39,7 @@ config CPU_SPECIFIC_OPTIONS
select SOC_INTEL_COMMON_BLOCK select SOC_INTEL_COMMON_BLOCK
select SOC_INTEL_COMMON_BLOCK_ACPI select SOC_INTEL_COMMON_BLOCK_ACPI
select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG
select SOC_INTEL_COMMON_BLOCK_CNVI
select SOC_INTEL_COMMON_BLOCK_CPU select SOC_INTEL_COMMON_BLOCK_CPU
select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT
select SOC_INTEL_COMMON_BLOCK_GPIO_DUAL_ROUTE_SUPPORT select SOC_INTEL_COMMON_BLOCK_GPIO_DUAL_ROUTE_SUPPORT

View File

@ -40,6 +40,7 @@ config CPU_SPECIFIC_OPTIONS
select SOC_INTEL_COMMON_BLOCK select SOC_INTEL_COMMON_BLOCK
select SOC_INTEL_COMMON_BLOCK_ACPI select SOC_INTEL_COMMON_BLOCK_ACPI
select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG select SOC_INTEL_COMMON_BLOCK_CHIP_CONFIG
select SOC_INTEL_COMMON_BLOCK_CNVI
select SOC_INTEL_COMMON_BLOCK_CPU select SOC_INTEL_COMMON_BLOCK_CPU
select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT select SOC_INTEL_COMMON_BLOCK_CPU_MPINIT
select SOC_INTEL_COMMON_BLOCK_DTT select SOC_INTEL_COMMON_BLOCK_DTT