From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [PATCH v3 19/57] x86: acpi: Add a common routine to write WiFi info
Date: Sun, 6 Sep 2020 15:43:27 -0600 [thread overview]
Message-ID: <20200906214405.71632-7-sjg@chromium.org> (raw)
In-Reply-To: <20200906214405.71632-1-sjg@chromium.org>
Intel WiFi chips can use a common routine to write the information needed
by linux. Add an implementation of this.
Enable it for coral.
Signed-off-by: Simon Glass <sjg@chromium.org>
---
(no changes since v1)
Changes in v1:
- Capitalise ACPI_OPS_PTR
- Use acpi,ddn instead of acpi,desc
arch/x86/Kconfig | 8 ++
arch/x86/cpu/intel_common/Makefile | 1 +
arch/x86/cpu/intel_common/generic_wifi.c | 120 +++++++++++++++++++++++
configs/chromebook_coral_defconfig | 1 +
4 files changed, 130 insertions(+)
create mode 100644 arch/x86/cpu/intel_common/generic_wifi.c
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 675a43e3b60..495629d32ed 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1009,4 +1009,12 @@ config INTEL_GMA_ACPI
connected to the device. Enable this option to create this
table so that graphics works correctly.
+config INTEL_GENERIC_WIFI
+ bool "Enable generation of ACPI tables for Intel WiFi"
+ help
+ Select this option to provide code to a build generic WiFi ACPI table
+ for Intel WiFi devices. This is not a WiFi driver and offers no
+ network functionality. It is only here to generate the ACPI tables
+ required by Linux.
+
endmenu
diff --git a/arch/x86/cpu/intel_common/Makefile b/arch/x86/cpu/intel_common/Makefile
index 207d5413965..f1d1513a981 100644
--- a/arch/x86/cpu/intel_common/Makefile
+++ b/arch/x86/cpu/intel_common/Makefile
@@ -24,6 +24,7 @@ obj-y += cpu.o
obj-y += fast_spi.o
obj-y += lpc.o
obj-y += lpss.o
+obj-$(CONFIG_INTEL_GENERIC_WIFI) += generic_wifi.o
ifndef CONFIG_TARGET_EFI_APP
obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += microcode.o
ifndef CONFIG_$(SPL_)X86_64
diff --git a/arch/x86/cpu/intel_common/generic_wifi.c b/arch/x86/cpu/intel_common/generic_wifi.c
new file mode 100644
index 00000000000..61ec5391b09
--- /dev/null
+++ b/arch/x86/cpu/intel_common/generic_wifi.c
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Generic WiFi ACPI info
+ *
+ * Copyright 2019 Google LLC
+ * Modified from coreboot src/drivers/wifi/generic.c
+ */
+
+#include <common.h>
+#include <log.h>
+#include <acpi/acpigen.h>
+#include <acpi/acpi_device.h>
+#include <dm.h>
+#include <dm/acpi.h>
+
+/* WRDS Spec Revision */
+#define WRDS_REVISION 0x0
+
+/* EWRD Spec Revision */
+#define EWRD_REVISION 0x0
+
+/* WRDS Domain type */
+#define WRDS_DOMAIN_TYPE_WIFI 0x7
+
+/* EWRD Domain type */
+#define EWRD_DOMAIN_TYPE_WIFI 0x7
+
+/* WGDS Domain type */
+#define WGDS_DOMAIN_TYPE_WIFI 0x7
+
+/*
+ * WIFI ACPI NAME = "WF" + hex value of last 8 bits of dev_path_encode + '\0'
+ * The above representation returns unique and consistent name every time
+ * generate_wifi_acpi_name is invoked. The last 8 bits of dev_path_encode is
+ * chosen since it contains the bus address of the device.
+ */
+#define WIFI_ACPI_NAME_MAX_LEN 5
+
+/**
+ * struct generic_wifi_config - Data structure to contain common wifi config
+ * @wake: Wake pin for ACPI _PRW
+ * @maxsleep: Maximum sleep state to wake from
+ */
+struct generic_wifi_config {
+ unsigned int wake;
+ unsigned int maxsleep;
+};
+
+static int generic_wifi_fill_ssdt(struct acpi_ctx *ctx,
+ const struct udevice *dev,
+ const struct generic_wifi_config *config)
+{
+ char name[ACPI_NAME_MAX];
+ char path[ACPI_PATH_MAX];
+ pci_dev_t bdf;
+ u32 address;
+ int ret;
+
+ ret = acpi_device_path(dev_get_parent(dev), path, sizeof(path));
+ if (ret)
+ return log_msg_ret("path", ret);
+ ret = acpi_get_name(dev, name);
+ if (ret)
+ return log_msg_ret("name", ret);
+
+ /* Device */
+ acpigen_write_scope(ctx, path);
+ acpigen_write_device(ctx, name);
+ acpigen_write_name_integer(ctx, "_UID", 0);
+ acpigen_write_name_string(ctx, "_DDN",
+ dev_read_string(dev, "acpi,ddn"));
+
+ /* Address */
+ bdf = dm_pci_get_bdf(dev);
+ address = (PCI_DEV(bdf) << 16) | PCI_FUNC(bdf);
+ acpigen_write_name_dword(ctx, "_ADR", address);
+
+ /* Wake capabilities */
+ if (config)
+ acpigen_write_prw(ctx, config->wake, config->maxsleep);
+
+ acpigen_pop_len(ctx); /* Device */
+ acpigen_pop_len(ctx); /* Scope */
+
+ return 0;
+}
+
+static int intel_wifi_acpi_fill_ssdt(const struct udevice *dev,
+ struct acpi_ctx *ctx)
+{
+ struct generic_wifi_config config;
+ bool have_config;
+ int ret;
+
+ ret = dev_read_u32(dev, "acpi,wake", &config.wake);
+ have_config = !ret;
+ /* By default, all intel wifi chips wake from S3 */
+ config.maxsleep = 3;
+ ret = generic_wifi_fill_ssdt(ctx, dev, have_config ? &config : NULL);
+ if (ret)
+ return log_msg_ret("wifi", ret);
+
+ return 0;
+}
+
+struct acpi_ops wifi_acpi_ops = {
+ .fill_ssdt = intel_wifi_acpi_fill_ssdt,
+};
+
+static const struct udevice_id intel_wifi_ids[] = {
+ { .compatible = "intel,generic-wifi" },
+ { }
+};
+
+U_BOOT_DRIVER(intel_wifi) = {
+ .name = "intel_wifi",
+ .id = UCLASS_MISC,
+ .of_match = intel_wifi_ids,
+ ACPI_OPS_PTR(&wifi_acpi_ops)
+};
diff --git a/configs/chromebook_coral_defconfig b/configs/chromebook_coral_defconfig
index e1d0749239b..c9006e2f934 100644
--- a/configs/chromebook_coral_defconfig
+++ b/configs/chromebook_coral_defconfig
@@ -18,6 +18,7 @@ CONFIG_HAVE_ACPI_RESUME=y
CONFIG_INTEL_CAR_CQOS=y
CONFIG_X86_OFFSET_U_BOOT=0xffe00000
CONFIG_X86_OFFSET_SPL=0xffe80000
+CONFIG_INTEL_GENERIC_WIFI=y
CONFIG_BOOTSTAGE=y
CONFIG_SPL_BOOTSTAGE=y
CONFIG_TPL_BOOTSTAGE=y
--
2.28.0.526.ge36021eeef-goog
next prev parent reply other threads:[~2020-09-06 21:43 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-06 21:43 [PATCH v3 00/57] dm: Add programatic generation of ACPI tables (part D) Simon Glass
2020-09-06 21:43 ` [PATCH v3 01/57] x86: acpi: Add cros_ec tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 02/57] x86: acpi: Add base asl files for common x86 devices Simon Glass
2020-09-21 13:50 ` Wolfgang Wallner
2020-09-22 13:51 ` Simon Glass
2020-09-22 14:19 ` Wolfgang Wallner
2020-09-22 14:30 ` Bin Meng
2020-09-22 14:47 ` Wolfgang Wallner
2020-09-22 14:52 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 03/57] x86: acpi: apl: Add asl files for Apollo Lake Simon Glass
2020-09-06 21:43 ` [PATCH v3 04/57] x86: acpi: Add DPTF asl files Simon Glass
2020-09-06 21:43 ` [PATCH v3 05/57] x86: apl: Correct PCIE_ECAM_BASE Simon Glass
2020-09-22 7:30 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 06/57] x86: Add a config for the systemagent PCIEX regions size Simon Glass
2020-09-06 21:43 ` [PATCH v3 07/57] x86: Add a common global NVS structure Simon Glass
2020-09-06 21:43 ` [PATCH v3 08/57] x86: acpi: Support external GNVS tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 09/57] x86: acpi: Expand the GNVS Simon Glass
2020-09-06 21:43 ` [PATCH v3 10/57] x86: coral: Add ACPI tables for coral Simon Glass
2020-09-06 21:43 ` [PATCH v3 11/57] acpi: Add support for writing a _PRW Simon Glass
2020-09-06 21:43 ` [PATCH v3 12/57] acpi: Add support for conditions and return values Simon Glass
2020-09-06 21:43 ` [PATCH v3 13/57] acpi: Support generating a multi-function _DSM for devices Simon Glass
2020-09-06 21:43 ` [PATCH v3 14/57] dm: acpi: Use correct GPIO polarity type in acpi_dp_add_gpio() Simon Glass
2020-09-06 21:43 ` [PATCH v3 15/57] x86: link: Allow more space for U-Boot Simon Glass
2020-09-22 7:44 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 16/57] i2c: Add a generic driver to generate ACPI info Simon Glass
2020-09-06 21:43 ` [PATCH v3 17/57] x86: Add wake sources for the acpi_gpe driver Simon Glass
2020-09-06 21:43 ` [PATCH v3 18/57] x86: apl: Support writing the IntelGraphicsMem table Simon Glass
2020-09-06 21:43 ` Simon Glass [this message]
2020-09-06 21:43 ` [PATCH v3 20/57] x86: Add some definitions for SMM Simon Glass
2020-09-06 21:43 ` [PATCH v3 21/57] x86: apl: Add power-management definitions Simon Glass
2020-09-06 21:43 ` [PATCH v3 22/57] x86: apl: Update iomap for ACPI Simon Glass
2020-09-06 21:43 ` [PATCH v3 23/57] x86: Add a few common Intel CPU functions Simon Glass
2020-09-06 21:43 ` [PATCH v3 24/57] x86: acpi: Support generation of the HPET table Simon Glass
2020-09-06 21:43 ` [PATCH v3 25/57] x86: acpi: Support generation of the DBG2 table Simon Glass
2020-09-06 21:43 ` [PATCH v3 26/57] acpi: Add support for generating processor tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 27/57] x86: acpi: Add PCT and PTC tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 28/57] acpi: Add more support for generating processor tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 29/57] x86: acpi: Add common Intel ACPI tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 30/57] x86: Support Atom SoCs using SWSMISCI rather than the SWSCI Simon Glass
2020-09-06 21:43 ` [PATCH v3 31/57] x86: acpi: Add support for additional Intel tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 32/57] x86: apl: Allow reading hostbridge base addresses Simon Glass
2020-09-06 21:43 ` [PATCH v3 33/57] p2sb: Add some definitions used for ACPI Simon Glass
2020-09-06 21:43 ` [PATCH v3 34/57] x86: apl: Generate required ACPI tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 35/57] x86: apl: Add support for hostbridge ACPI generation Simon Glass
2020-09-06 21:43 ` [PATCH v3 36/57] x86: apl: Generate CPU tables Simon Glass
2020-09-06 21:43 ` [PATCH v3 37/57] x86: apl: Generate ACPI table for LPC Simon Glass
2020-09-06 21:43 ` [PATCH v3 38/57] x86: apl: Drop unnecessary code in PMC driver Simon Glass
2020-09-06 21:43 ` [PATCH v3 39/57] tpm: cr50: Add ACPI support Simon Glass
2020-09-21 11:50 ` Andy Shevchenko
2020-09-21 11:53 ` Andy Shevchenko
2020-09-22 8:15 ` Bin Meng
2020-09-22 8:27 ` Andy Shevchenko
2020-09-06 21:43 ` [PATCH v3 40/57] x86: fsp: Update the FSP API with the end-firmware method Simon Glass
2020-09-22 7:58 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 41/57] x86: cpu: Report address width from cpu_get_info() Simon Glass
2020-09-06 21:43 ` [PATCH v3 42/57] x86: Sort the MTRR table Simon Glass
2020-09-06 21:43 ` [PATCH v3 43/57] x86: Notify the FSP of the 'end firmware' event Simon Glass
2020-09-06 21:43 ` [PATCH v3 44/57] x86: Correct the assembly guard in e820.h Simon Glass
2020-09-22 8:02 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 45/57] x86: Add a header guard to asm/acpi_table.h Simon Glass
2020-09-22 8:03 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 46/57] x86: Correct handling of MADT table CPUs Simon Glass
2020-09-06 21:43 ` [PATCH v3 47/57] acpi: tpm: Add a TPM2 table Simon Glass
2020-09-06 21:43 ` [PATCH v3 48/57] acpi: tpm: Add a TPM1 table Simon Glass
2020-09-06 21:43 ` [PATCH v3 49/57] x86: acpi: Set the log category for x86 table generation Simon Glass
2020-09-22 8:04 ` Bin Meng
2020-09-06 21:43 ` [PATCH v3 50/57] x86: coral: Add audio descriptor files Simon Glass
2020-09-06 21:43 ` [PATCH v3 51/57] x86: apl: Check low-level init in FSP-S pre-init Simon Glass
2020-09-06 21:44 ` [PATCH v3 52/57] x86: fsp: Add more debugging for silicon init Simon Glass
2020-09-22 8:06 ` Bin Meng
2020-09-06 21:44 ` [PATCH v3 53/57] x86: fsp: Show FSP-S or FSP-M address in fsp_get_header() Simon Glass
2020-09-22 8:06 ` Bin Meng
2020-09-06 21:44 ` [PATCH v3 54/57] acpi: Use defines for field lengths Simon Glass
2020-09-22 8:07 ` Bin Meng
2020-09-06 21:44 ` [PATCH v3 55/57] x86: Add a way to add to the e820 memory table Simon Glass
2020-09-22 8:09 ` Bin Meng
2020-09-06 21:44 ` [PATCH v3 56/57] x86: Move include of bitops out of ACPI region Simon Glass
2020-09-22 8:09 ` Bin Meng
2020-09-06 21:44 ` [PATCH v3 57/57] x86: coral: Update config and device tree for ACPI Simon Glass
2020-09-22 8:16 ` [PATCH v3 00/57] dm: Add programatic generation of ACPI tables (part D) Bin Meng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200906214405.71632-7-sjg@chromium.org \
--to=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox