diff options
Diffstat (limited to 'include/linux/firmware')
| -rw-r--r-- | include/linux/firmware/imx/sci.h | 5 | ||||
| -rw-r--r-- | include/linux/firmware/intel/stratix10-smc.h | 19 | ||||
| -rw-r--r-- | include/linux/firmware/meson/meson_sm.h | 8 | ||||
| -rw-r--r-- | include/linux/firmware/trusted_foundations.h | 87 | ||||
| -rw-r--r-- | include/linux/firmware/xlnx-zynqmp.h | 14 | 
5 files changed, 125 insertions, 8 deletions
| diff --git a/include/linux/firmware/imx/sci.h b/include/linux/firmware/imx/sci.h index ebc55098faee..17ba4e405129 100644 --- a/include/linux/firmware/imx/sci.h +++ b/include/linux/firmware/imx/sci.h @@ -15,4 +15,9 @@  #include <linux/firmware/imx/svc/misc.h>  #include <linux/firmware/imx/svc/pm.h> + +int imx_scu_enable_general_irq_channel(struct device *dev); +int imx_scu_irq_register_notifier(struct notifier_block *nb); +int imx_scu_irq_unregister_notifier(struct notifier_block *nb); +int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable);  #endif /* _SC_SCI_H */ diff --git a/include/linux/firmware/intel/stratix10-smc.h b/include/linux/firmware/intel/stratix10-smc.h index 5be5dab50b13..01684d935580 100644 --- a/include/linux/firmware/intel/stratix10-smc.h +++ b/include/linux/firmware/intel/stratix10-smc.h @@ -309,4 +309,23 @@ INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)  #define INTEL_SIP_SMC_FUNCID_RSU_UPDATE 12  #define INTEL_SIP_SMC_RSU_UPDATE \  	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_UPDATE) + +/* + * Request INTEL_SIP_SMC_ECC_DBE + * + * Sync call used by service driver at EL1 to alert EL3 that a Double + * Bit ECC error has occurred. + * + * Call register usage: + * a0 INTEL_SIP_SMC_ECC_DBE + * a1 SysManager Double Bit Error value + * a2-7 not used + * + * Return status + * a0 INTEL_SIP_SMC_STATUS_OK + */ +#define INTEL_SIP_SMC_FUNCID_ECC_DBE 13 +#define INTEL_SIP_SMC_ECC_DBE \ +	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECC_DBE) +  #endif diff --git a/include/linux/firmware/meson/meson_sm.h b/include/linux/firmware/meson/meson_sm.h index f98c20dd266e..7613bf7c9442 100644 --- a/include/linux/firmware/meson/meson_sm.h +++ b/include/linux/firmware/meson/meson_sm.h @@ -1,13 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0-only */  /*   * Copyright (C) 2016 Endless Mobile, Inc.   * Author: Carlo Caione <[email protected]> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>.   */  #ifndef _MESON_SM_FW_H_ diff --git a/include/linux/firmware/trusted_foundations.h b/include/linux/firmware/trusted_foundations.h new file mode 100644 index 000000000000..2549a2db56aa --- /dev/null +++ b/include/linux/firmware/trusted_foundations.h @@ -0,0 +1,87 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (c) 2013, NVIDIA Corporation. + */ + +/* + * Support for the Trusted Foundations secure monitor. + * + * Trusted Foundation comes active on some ARM consumer devices (most + * Tegra-based devices sold on the market are concerned). Such devices can only + * perform some basic operations, like setting the CPU reset vector, through + * SMC calls to the secure monitor. The calls are completely specific to + * Trusted Foundations, and do *not* follow the SMC calling convention or the + * PSCI standard. + */ + +#ifndef __FIRMWARE_TRUSTED_FOUNDATIONS_H +#define __FIRMWARE_TRUSTED_FOUNDATIONS_H + +#include <linux/printk.h> +#include <linux/bug.h> +#include <linux/of.h> +#include <linux/cpu.h> +#include <linux/smp.h> +#include <linux/types.h> + +#include <asm/hardware/cache-l2x0.h> +#include <asm/outercache.h> + +#define TF_PM_MODE_LP0			0 +#define TF_PM_MODE_LP1			1 +#define TF_PM_MODE_LP1_NO_MC_CLK	2 +#define TF_PM_MODE_LP2			3 +#define TF_PM_MODE_LP2_NOFLUSH_L2	4 + +struct trusted_foundations_platform_data { +	unsigned int version_major; +	unsigned int version_minor; +}; + +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS) + +void register_trusted_foundations(struct trusted_foundations_platform_data *pd); +void of_register_trusted_foundations(void); +bool trusted_foundations_registered(void); + +#else /* CONFIG_TRUSTED_FOUNDATIONS */ +static inline void tf_dummy_write_sec(unsigned long val, unsigned int reg) +{ +} + +static inline void register_trusted_foundations( +				   struct trusted_foundations_platform_data *pd) +{ +	/* +	 * If the system requires TF and we cannot provide it, continue booting +	 * but disable features that cannot be provided. +	 */ +	pr_err("No support for Trusted Foundations, continuing in degraded mode.\n"); +	pr_err("Secondary processors as well as CPU PM will be disabled.\n"); +#if IS_ENABLED(CONFIG_CACHE_L2X0) +	pr_err("L2X0 cache will be kept disabled.\n"); +	outer_cache.write_sec = tf_dummy_write_sec; +#endif +#if IS_ENABLED(CONFIG_SMP) +	setup_max_cpus = 0; +#endif +	cpu_idle_poll_ctrl(true); +} + +static inline void of_register_trusted_foundations(void) +{ +	/* +	 * If we find the target should enable TF but does not support it, +	 * fail as the system won't be able to do much anyway +	 */ +	if (of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations")) +		register_trusted_foundations(NULL); +} + +static inline bool trusted_foundations_registered(void) +{ +	return false; +} +#endif /* CONFIG_TRUSTED_FOUNDATIONS */ + +#endif diff --git a/include/linux/firmware/xlnx-zynqmp.h b/include/linux/firmware/xlnx-zynqmp.h index 642dab10f65d..1262ea6a1f4b 100644 --- a/include/linux/firmware/xlnx-zynqmp.h +++ b/include/linux/firmware/xlnx-zynqmp.h @@ -48,6 +48,14 @@  #define	ZYNQMP_PM_CAPABILITY_WAKEUP	0x4U  #define	ZYNQMP_PM_CAPABILITY_POWER	0x8U +/* + * Firmware FPGA Manager flags + * XILINX_ZYNQMP_PM_FPGA_FULL:	FPGA full reconfiguration + * XILINX_ZYNQMP_PM_FPGA_PARTIAL: FPGA partial reconfiguration + */ +#define XILINX_ZYNQMP_PM_FPGA_FULL	0x0U +#define XILINX_ZYNQMP_PM_FPGA_PARTIAL	BIT(0) +  enum pm_api_id {  	PM_GET_API_VERSION = 1,  	PM_REQUEST_NODE = 13, @@ -56,6 +64,8 @@ enum pm_api_id {  	PM_RESET_ASSERT = 17,  	PM_RESET_GET_STATUS,  	PM_PM_INIT_FINALIZE = 21, +	PM_FPGA_LOAD, +	PM_FPGA_GET_STATUS,  	PM_GET_CHIPID = 24,  	PM_IOCTL = 34,  	PM_QUERY_DATA, @@ -258,6 +268,8 @@ struct zynqmp_pm_query_data {  struct zynqmp_eemi_ops {  	int (*get_api_version)(u32 *version);  	int (*get_chipid)(u32 *idcode, u32 *version); +	int (*fpga_load)(const u64 address, const u32 size, const u32 flags); +	int (*fpga_get_status)(u32 *value);  	int (*query_data)(struct zynqmp_pm_query_data qdata, u32 *out);  	int (*clock_enable)(u32 clock_id);  	int (*clock_disable)(u32 clock_id); @@ -293,7 +305,7 @@ const struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void);  #else  static inline struct zynqmp_eemi_ops *zynqmp_pm_get_eemi_ops(void)  { -	return NULL; +	return ERR_PTR(-ENODEV);  }  #endif |