static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { static const guid_t intel_dsm_guid = GUID_INIT(0xac340cb7, 0xe901, 0x45bf, 0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23); union acpi_object *obj; obj = acpi_evaluate_dsm(ACPI_HANDLE(&dev->dev), &intel_dsm_guid, 3, 1, NULL); ACPI_FREE(obj); }
#include <linux/pci.h> #include <linux/msi.h> #include <linux/pci_hotplug.h> #include <linux/module.h> #include <linux/pci-aspm.h> #include <linux/pci-acpi.h> #include <linux/pm_runtime.h> #include <linux/pm_qos.h> #include "pci.h" /* * The GUID is defined in the PCI Firmware Specification available here: * https://www.pcisig.com/members/downloads/pcifw_r3_1_13Dec10.pdf */ const guid_t pci_acpi_dsm_guid = GUID_INIT(0xe5c937d0, 0x3553, 0x4d7a, 0x91, 0x17, 0xea, 0x4d, 0x19, 0xc3, 0x43, 0x4d); #if defined(CONFIG_PCI_QUIRKS) && defined(CONFIG_ARM64) static int acpi_get_rc_addr(struct acpi_device *adev, struct resource *res) { struct device *dev = &adev->dev; struct resource_entry *entry; struct list_head list; unsigned long flags; int ret; INIT_LIST_HEAD(&list); flags = IORESOURCE_MEM; ret = acpi_dev_get_resources(adev, &list, acpi_dev_filter_resource_type_cb, (void *) flags);
* * LOADER_XFER_MODE_DIRECT_DMA - firmware loading is a bit different * from the sensor data streaming. Here we download a large (300+ Kb) * image directly to ISH SRAM memory. There is limited benefit of * DMA'ing 300 Kb image in 4 Kb chucks limit. Hence, we introduce * this "direct dma" mode, where we do not use ISH-TP for DMA, but * instead manage the DMA directly in kernel driver and Shim firmware * loader (allocate buffer, break in chucks and transfer). This allows * to overcome 4 Kb limit, and optimize the data flow path in firmware. */ #define LOADER_XFER_MODE_DIRECT_DMA BIT(0) #define LOADER_XFER_MODE_ISHTP BIT(1) /* ISH Transport Loader client unique GUID */ static const guid_t loader_ishtp_guid = GUID_INIT(0xc804d06a, 0x55bd, 0x4ea7, 0xad, 0xed, 0x1e, 0x31, 0x22, 0x8c, 0x76, 0xdc); #define FILENAME_SIZE 256 /* * The firmware loading latency will be minimum if we can DMA the * entire ISH firmware image in one go. This requires that we allocate * a large DMA buffer in kernel, which could be problematic on some * platforms. So here we limit the DMA buffer size via a module_param. * We default to 4 pages, but a customer can set it to higher limit if * deemed appropriate for his platform. */ static int dma_buf_size_limit = 4 * PAGE_SIZE; /** * struct loader_msg_hdr - Header for ISH Loader commands.
* This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * */ #include <linux/pci.h> #include "skl.h" #define NHLT_ACPI_HEADER_SIG "NHLT" /* Unique identification for getting NHLT blobs */ static guid_t osc_guid = GUID_INIT(0xA69F886E, 0x6CEB, 0x4594, 0xA4, 0x1F, 0x7B, 0x5D, 0xCE, 0x24, 0xC5, 0x53); struct nhlt_acpi_table *skl_nhlt_init(struct device *dev) { acpi_handle handle; union acpi_object *obj; struct nhlt_resource_desc *nhlt_ptr = NULL; struct nhlt_acpi_table *nhlt_table = NULL; handle = ACPI_HANDLE(dev); if (!handle) { dev_err(dev, "Didn't find ACPI_HANDLE\n"); return NULL; } obj = acpi_evaluate_dsm(handle, &osc_guid, 1, 1, NULL);
*/ #include <linux/acpi.h> #include <linux/highmem.h> #include <linux/rculist.h> #include <linux/module.h> #include <linux/pm_runtime.h> #ifdef CONFIG_ARM64 #include <linux/arm-smccc.h> #endif #include "tpm.h" #define ACPI_SIG_TPM2 "TPM2" static const guid_t crb_acpi_start_guid = GUID_INIT(0x6BBF6CAB, 0x5463, 0x4714, 0xB7, 0xCD, 0xF0, 0x20, 0x3C, 0x03, 0x68, 0xD4); enum crb_defaults { CRB_ACPI_START_REVISION_ID = 1, CRB_ACPI_START_INDEX = 1, }; enum crb_loc_ctrl { CRB_LOC_CTRL_REQUEST_ACCESS = BIT(0), CRB_LOC_CTRL_RELINQUISH = BIT(1), }; enum crb_loc_state { CRB_LOC_STATE_LOC_ASSIGNED = BIT(1), CRB_LOC_STATE_TPM_REG_VALID_STS = BIT(7), };