coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
acp.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <acpi/acpi_device.h>
4 #include <acpi/acpigen.h>
5 #include <amdblocks/acp.h>
6 #include <amdblocks/acpimmio.h>
7 #include <amdblocks/chip.h>
8 #include <device/device.h>
9 #include <device/pci.h>
10 #include <device/pci_ids.h>
11 #include <device/pci_ops.h>
12 #include <commonlib/helpers.h>
13 #include "acp_def.h"
14 
15 _Static_assert(!(CONFIG(SOC_AMD_COMMON_BLOCK_ACP_GEN1) && CONFIG(SOC_AMD_COMMON_BLOCK_ACP_GEN2)),
16  "Cannot select both ACP_GEN1 and ACP_GEN2 - check your config");
17 
18 static const char *acp_acpi_name(const struct device *dev)
19 {
20  return "ACPD";
21 }
22 
23 static void acp_fill_wov_method(const struct device *dev)
24 {
25  const struct soc_amd_common_config *cfg = soc_get_common_config();
26  const char *scope = acpi_device_path(dev);
27 
28  if (!cfg->acp_config.dmic_present || !scope)
29  return;
30 
31  /* For ACP DMIC hardware runtime detection on the platform, _WOV method is populated. */
32  acpigen_write_scope(scope); /* Scope */
33  acpigen_write_method("_WOV", 0);
37 }
38 
39 static void acp_fill_ssdt(const struct device *dev)
40 {
43 }
44 
45 static struct device_operations acp_ops = {
47  .set_resources = pci_dev_set_resources,
48  .enable_resources = pci_dev_enable_resources,
49  .init = acp_init,
50  .ops_pci = &pci_dev_ops_pci,
51  .scan_bus = scan_static_bus,
52  .acpi_name = acp_acpi_name,
53  .acpi_fill_ssdt = acp_fill_ssdt,
54 };
55 
56 static const struct pci_driver acp_driver __pci_driver = {
57  .ops = &acp_ops,
58  .vendor = PCI_VID_AMD,
59  .device = PCI_DID_AMD_FAM17H_ACP,
60 };
static const char * acp_acpi_name(const struct device *dev)
Definition: acp.c:18
static void acp_fill_ssdt(const struct device *dev)
Definition: acp.c:39
static void acp_fill_wov_method(const struct device *dev)
Definition: acp.c:23
static struct device_operations acp_ops
Definition: acp.c:45
static const struct pci_driver acp_driver __pci_driver
Definition: acp.c:56
_Static_assert(!(CONFIG(SOC_AMD_COMMON_BLOCK_ACP_GEN1) &&CONFIG(SOC_AMD_COMMON_BLOCK_ACP_GEN2)), "Cannot select both ACP_GEN1 and ACP_GEN2 - check your config")
void acp_init(struct device *dev)
Definition: acp_gen1.c:23
const char * acpi_device_path(const struct device *dev)
Definition: device.c:144
void acpi_device_write_pci_dev(const struct device *dev)
Definition: device.c:1168
void acpigen_write_return_integer(uint64_t arg)
Definition: acpigen.c:1583
void acpigen_write_scope(const char *name)
Definition: acpigen.c:326
void acpigen_write_method(const char *name, int nargs)
Definition: acpigen.c:758
const struct soc_amd_common_config * soc_get_common_config(void)
Definition: config.c:7
@ CONFIG
Definition: dsi_common.h:201
void acpigen_write_method_end(void)
Definition: acpigen.h:349
void acpigen_write_scope_end(void)
Definition: acpigen.h:343
void pci_dev_enable_resources(struct device *dev)
Definition: pci_device.c:721
void pci_dev_read_resources(struct device *dev)
Definition: pci_device.c:534
struct pci_operations pci_dev_ops_pci
Default device operation for PCI devices.
Definition: pci_device.c:911
void pci_dev_set_resources(struct device *dev)
Definition: pci_device.c:691
#define PCI_VID_AMD
Definition: pci_ids.h:496
#define PCI_DID_AMD_FAM17H_ACP
Definition: pci_ids.h:594
void scan_static_bus(struct device *bus)
Definition: root_device.c:89
bool dmic_present
Definition: acp.h:44
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107
struct acp_config acp_config
Definition: chip.h:42