// SPDX-License-Identifier: GPL-2.0-only /* * Author: Sudeep Holla <[email protected]> * Copyright 2021 Arm Limited * * The PCC Address Space also referred as PCC Operation Region pertains to the * region of PCC subspace that succeeds the PCC signature. The PCC Operation * Region works in conjunction with the PCC Table(Platform Communications * Channel Table). PCC subspaces that are marked for use as PCC Operation * Regions must not be used as PCC subspaces for the standard ACPI features * such as CPPC, RASF, PDTT and MPST. These standard features must always use * the PCC Table instead. * * This driver sets up the PCC Address Space and installs an handler to enable * handling of PCC OpRegion in the firmware. * */ #include <linux/kernel.h> #include <linux/acpi.h> #include <linux/completion.h> #include <linux/idr.h> #include <linux/io.h> #include <acpi/pcc.h> /* * Arbitrary retries in case the remote processor is slow to respond * to PCC commands */ #define PCC_CMD_WAIT_RETRIES_NUM … struct pcc_data { … }; static struct acpi_pcc_info pcc_ctx; static void pcc_rx_callback(struct mbox_client *cl, void *m) { … } static acpi_status acpi_pcc_address_space_setup(acpi_handle region_handle, u32 function, void *handler_context, void **region_context) { … } static acpi_status acpi_pcc_address_space_handler(u32 function, acpi_physical_address addr, u32 bits, acpi_integer *value, void *handler_context, void *region_context) { … } void __init acpi_init_pcc(void) { … }