/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
 */
#ifndef __QCOM_SCM_INT_H
#define __QCOM_SCM_INT_H

#define QCOM_SCM_SVC_BOOT		0x1
#define QCOM_SCM_BOOT_ADDR		0x1
#define QCOM_SCM_SET_DLOAD_MODE		0x10
#define QCOM_SCM_BOOT_ADDR_MC		0x11
#define QCOM_SCM_SET_REMOTE_STATE	0xa
#define QCOM_SCM_IS_TZ_LOG_ENCRYPTED	0xb
#define QCOM_SCM_GET_TZ_LOG_ENCRYPTED	0xc
extern int __qcom_scm_set_remote_state(struct device *dev, u32 state, u32 id);
extern int __qcom_scm_set_dload_mode(struct device *dev, bool enable);

#define QCOM_SCM_FLAG_HLOS		0x01
#define QCOM_SCM_FLAG_COLDBOOT_MC	0x02
#define QCOM_SCM_FLAG_WARMBOOT_MC	0x04
extern int __qcom_scm_set_warm_boot_addr(struct device *dev, void *entry,
		const cpumask_t *cpus);
extern int __qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus);

#define QCOM_SCM_CMD_TERMINATE_PC	0x2
#define QCOM_SCM_FLUSH_FLAG_MASK	0x3
#define QCOM_SCM_CMD_CORE_HOTPLUGGED	0x10
extern void __qcom_scm_cpu_power_down(u32 flags);

#define QCOM_SCM_SVC_IO			0x5
#define QCOM_SCM_IO_READ		0x1
#define QCOM_SCM_IO_WRITE		0x2
extern int __qcom_scm_io_readl(struct device *dev, phys_addr_t addr, unsigned int *val);
extern int __qcom_scm_io_writel(struct device *dev, phys_addr_t addr, unsigned int val);

#define QCOM_SCM_SVC_INFO		0x6
#define QCOM_IS_CALL_AVAIL_CMD		0x1
#define QTI_SCM_TZ_DIAG_CMD		0x2
#define QTI_SCM_HVC_DIAG_CMD		0x7
#define QTI_SCM_SMMUSTATE_CMD		0x19

extern int __qcom_scm_is_call_available(struct device *dev, u32 svc_id,
		u32 cmd_id);

#define QCOM_SCM_SVC_HDCP		0x11
#define QCOM_SCM_CMD_HDCP		0x01
extern int __qcom_scm_hdcp_req(struct device *dev,
		struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp);

extern void __qcom_scm_init(void);

#define QCOM_SCM_SVC_PIL		0x2
#define QCOM_SCM_PAS_INIT_IMAGE_CMD	0x1
#define QCOM_SCM_PAS_MEM_SETUP_CMD	0x2
#define QCOM_SCM_PAS_AUTH_AND_RESET_CMD	0x5
#define QCOM_SCM_PAS_SHUTDOWN_CMD	0x6
#define QCOM_SCM_PAS_IS_SUPPORTED_CMD	0x7
#define QCOM_SCM_PAS_MSS_RESET		0xa

#define QTI_SCM_PARAM_BUF_RO		0x1
#define QTI_SCM_PARAM_VAL		0x0
#define QTI_SVC_ICE			23
#define QTI_SCM_ICE_CMD		0x1

extern bool __qcom_scm_pas_supported(struct device *dev, u32 peripheral);
extern int  __qcom_scm_pas_init_image(struct device *dev, u32 peripheral,
		dma_addr_t metadata_phys);
extern int  __qcom_scm_pas_mem_setup(struct device *dev, u32 peripheral,
		phys_addr_t addr, phys_addr_t size);
extern int  __qcom_scm_pas_auth_and_reset(struct device *dev, u32 peripheral,
		u32 debug, u32 reset_cmd_id);
extern int  __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral);
extern int  __qcom_scm_pas_mss_reset(struct device *dev, bool reset);
extern int  __qti_config_ice_sec(struct device *dev, void *confBuf, int size);
/* common error codes */
#define QCOM_SCM_V2_EBUSY	-12
#define QCOM_SCM_ENOMEM		-5
#define QCOM_SCM_EOPNOTSUPP	-4
#define QCOM_SCM_EINVAL_ADDR	-3
#define QCOM_SCM_EINVAL_ARG	-2
#define QCOM_SCM_ERROR		-1
#define QCOM_SCM_INTERRUPTED	1

static inline int qcom_scm_remap_error(int err)
{
	switch (err) {
	case QCOM_SCM_ERROR:
		return -EIO;
	case QCOM_SCM_EINVAL_ADDR:
	case QCOM_SCM_EINVAL_ARG:
		return -EINVAL;
	case QCOM_SCM_EOPNOTSUPP:
		return -EOPNOTSUPP;
	case QCOM_SCM_ENOMEM:
		return -ENOMEM;
	case QCOM_SCM_V2_EBUSY:
		return -EBUSY;
	}
	return -EINVAL;
}

#define QCOM_SCM_SVC_MP			0xc
#define QCOM_SCM_RESTORE_SEC_CFG	2
extern int __qcom_scm_restore_sec_cfg(struct device *dev, u32 device_id,
				      u32 spare);
#define QCOM_SCM_IOMMU_SECURE_PTBL_SIZE	3
#define QCOM_SCM_IOMMU_SECURE_PTBL_INIT	4
extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare,
					     size_t *size);
extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr,
					     u32 size, u32 spare);
#define QCOM_MEM_PROT_ASSIGN_ID	0x16
extern int  __qcom_scm_assign_mem(struct device *dev,
				  phys_addr_t mem_region, size_t mem_sz,
				  phys_addr_t src, size_t src_sz,
				  phys_addr_t dest, size_t dest_sz);

#define SCM_SIP_FNID(s, c) (((((s) & 0xFF) << 8) | ((c) & 0xFF)) | 0x02000000)
#define QTI_SMC_ATOMIC_MASK		0x80000000
#define SCM_ARGS_IMPL(num, a, b, c, d, e, f, g, h, i, j, ...) (\
			(((a) & 0xff) << 4) | \
			(((b) & 0xff) << 6) | \
			(((c) & 0xff) << 8) | \
			(((d) & 0xff) << 10) | \
			(((e) & 0xff) << 12) | \
			(((f) & 0xff) << 14) | \
			(((g) & 0xff) << 16) | \
			(((h) & 0xff) << 18) | \
			(((i) & 0xff) << 20) | \
			(((j) & 0xff) << 22) | \
			(num & 0xffff))

#define SCM_ARGS(...) SCM_ARGS_IMPL(__VA_ARGS__, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

#define MAX_QCOM_SCM_ARGS 10
#define MAX_QCOM_SCM_RETS 3

enum qcom_scm_arg_types {
	QCOM_SCM_VAL,
	QCOM_SCM_RO,
	QCOM_SCM_RW,
	QCOM_SCM_BUFVAL,
};


/**
 * struct scm_desc
 * @arginfo: Metadata describing the arguments in args[]
 * @args: The array of arguments for the secure syscall
 * @ret: The values returned by the secure syscall
 * @extra_arg_buf: The buffer containing extra arguments
		   (that don't fit in available registers)
 * @x5: The 4rd argument to the secure syscall or physical address of
	extra_arg_buf
 */
struct scm_desc {
	u32 arginfo;
	u64 args[MAX_QCOM_SCM_ARGS];
	u64 ret[MAX_QCOM_SCM_RETS];

	/* private */
	void *extra_arg_buf;
	u64 x5;
};

#define QCOM_SCM_EBUSY_WAIT_MS 30
#define QCOM_SCM_EBUSY_MAX_RETRY 20

#define QTI_SCM_SVC_FUSE		0x8
#define QTI_SCM_SVC_SEC_AUTH		0x1
#define QTI_QFPROM_IS_AUTHENTICATE_CMD	0x7
#define QTI_QFPROM_ROW_READ_CMD	0x8
#define QTI_QFPROM_ROW_WRITE_CMD	0x9
#define QTI_SCM_CMD_SEC_AUTH		0x15
extern int __qti_qfprom_show_authenticate(struct device *dev, char *buf);
extern int __qti_qfprom_write_version(struct device *dev, uint32_t sw_type,
				       uint32_t value, uint32_t qfprom_ret_ptr,
				       uint32_t size);
extern int __qti_qfprom_read_version(struct device *dev, uint32_t sw_type,
					uint32_t value,
					uint32_t qfprom_ret_ptr);
extern int __qti_sec_upgrade_auth(struct device *dev, unsigned int scm_cmd_id,
							unsigned int sw_type,
							unsigned int img_size,
							unsigned int load_addr);
extern int __qti_fuseipq_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
					void *cmd_buf, size_t size);

/*
 * SCM command ids used in qti_scm_dload / qti_scm_sdi calls
 *
 * SCM_CMD_TZ_FORCE_DLOAD_ID - Set the magic cookie(See Below)
 * SCM_CMD_TZ_CONFIG_HW_FOR_RAM_DUMP_ID - Used for SDI related calls
 * SCM_CMD_TZ_SET_DLOAD_FOR_SECURE_BOOT - Set the magic cookie in secure boot
 */
#define SCM_CMD_TZ_FORCE_DLOAD_ID		0x10
#define SCM_CMD_TZ_CONFIG_HW_FOR_RAM_DUMP_ID	0x9
#define SCM_CMD_TZ_SET_DLOAD_FOR_SECURE_BOOT	0x14

/*
 * TCSR_BOOT_MISC_REG - TCSR register where the magic cookie will be written
 *
 * Based on the magic cookies CLEAR_MAGIC, SET_MAGIC, SET_MAGIC_WARMRESET,
 * corresponding value DLOAD_MODE_DISABLE, DLOAD_MODE_ENABLE,
 * DLOAD_MODE_ENABLE_WARMRESET will be written into the TCSR register.
 *
 * SET_MAGIC_WARMRESET is a unique case, where IMEM content will be preserved
 * in the crash dump disabled case.
 */
#define TCSR_BOOT_MISC_REG			0x193d100ull
#define CLEAR_MAGIC				0x0
#define DLOAD_MODE_DISABLE			0x00ull
#define SET_MAGIC				0x1
#define DLOAD_MODE_ENABLE			0x10ull
#define SET_MAGIC_WARMRESET			0x2
#define DLOAD_MODE_ENABLE_WARMRESET		0x20ull
#define TCSR_Q6SS_BOOT_TRIG_REG			0x193d204ull

#define PD_LOAD_SVC_ID          0x2
#define PD_LOAD_CMD_ID          0x16
#define PD_LOAD_V2_CMD_ID       0x19
#define INT_RAD_PWR_UP_CMD_ID   0x17
#define INT_RAD_PWR_DN_CMD_ID   0x18
extern int __qti_scm_wcss_boot(struct device *, u32 svc_id, u32 cmd_id,
				void *cmd_buf);
extern int qti_scm_wcss_boot(u32 svc_id, u32 cmd_id, void *cmd_buf);
extern int __qti_scm_dload(struct device *dev, u32 svc_id, u32 cmd_id,
				void *cmd_buf);
extern int __qti_scm_pdseg_memcpy_v2(struct device *dev, u32 peripheral,
				int phno, dma_addr_t dma, int seg_cnt);
extern int qti_scm_pdseg_memcpy_v2(u32 peripheral, int phno, dma_addr_t dma,
							int seg_cnt);
extern int __qti_scm_pdseg_memcpy(struct device *dev, u32 peripheral,
				int phno, dma_addr_t dma, size_t size);
extern int qti_scm_pdseg_memcpy(u32 peripheral, int phno, dma_addr_t dma,
								size_t size);
extern int __qti_scm_int_radio_powerup(struct device *dev, u32 peripheral);
extern int qti_scm_int_radio_powerup(u32 peripheral);
extern int __qti_scm_int_radio_powerdown(struct device *dev, u32 peripheral);
extern int qti_scm_int_radio_powerdown(u32 peripheral);

extern int __qti_scm_sdi(struct device *dev, u32 svc_id, u32 cmd_id);
extern int __qti_scm_tz_hvc_log(struct device *dev, u32 svc_id, u32 cmd_id,
				void *ker_buf, u32 buf_len);
extern int  __qti_scm_get_smmustate(struct device *dev, u32 svc_id, u32 cmd_id);

int __qti_scm_regsave(struct device *dev, u32 svc_id, u32 cmd_id,
				void *scm_regsave, unsigned int buf_size);

/*
 * QCOM_SCM_QCE_SVC - commands related to secure key for secure nand
 */
#define QCOM_SCM_QCE_SVC		0x2
#define QCOM_SCM_QCE_CMD		0x3
#define QCOM_SCM_QCE_PARAM		0x2
#define QCOM_SCM_QCE_CRYPTO_SIP		0xA
#define QCOM_SCM_QCE_UNLOCK_CMD		0x4
extern int __qti_set_qcekey_sec(struct device *dev, void *confBuf, int size);
extern int __qti_qcekey_release_xpu_prot(struct device *dev);

extern int __qti_scm_qseecom_notify(struct device *dev,
				    struct qsee_notify_app *req,
				    size_t req_size,
				    struct qseecom_command_scm_resp *resp,
				    size_t resp_size);
extern int __qti_scm_qseecom_load(struct device *dev,
				  uint32_t smc_id, uint32_t cmd_id,
				  union qseecom_load_ireq *req,
				  size_t req_size,
				  struct qseecom_command_scm_resp *resp,
				  size_t resp_size);
extern int __qti_scm_qseecom_send_data(struct device *dev,
				       union qseecom_client_send_data_ireq *req,
				       size_t req_size,
				       struct qseecom_command_scm_resp *resp,
				       size_t resp_size);
extern int __qti_scm_qseecom_unload(struct device *dev,
				    uint32_t smc_id, uint32_t cmd_id,
				    struct qseecom_unload_ireq *req,
				    size_t req_size,
				    struct qseecom_command_scm_resp *resp,
				    size_t resp_size);
extern int __qti_scm_register_log_buf(struct device *dev,
					 struct qsee_reg_log_buf_req *request,
					 size_t req_size,
					 struct qseecom_command_scm_resp
					 *response, size_t resp_size);
extern int __qti_scm_tls_hardening(struct device *dev, uint32_t req_addr,
				   uint32_t req_size, uint32_t resp_addr,
				   uint32_t resp_size, u32 cmd_id);
extern int __qti_scm_aes(struct device *dev, uint32_t req_addr,
			 uint32_t req_size, uint32_t resp_addr,
			 uint32_t resp_size, u32 cmd_id);

#define QTI_SCM_SVC_RESETTYPE_CMD	0x18
extern int  __qti_scm_set_resettype(struct device *dev, u32 reset_type);

#define QTI_SCM_CMD_PSHOLD	0x16
extern int __qti_scm_pshold(struct device *);
#endif
#define QTI_SCM_EXTWDT_CMD            0x2
extern int __qti_scm_extwdt(struct device *, u32 svc_id, u32 cmd_id,
			     unsigned int regaddr, unsigned int val);
extern int __qti_scm_tcsr_reg_write(struct device *dev, u32 reg_addr, u32 value);

extern int __qti_scm_is_tz_log_encrypted(struct device *dev);
extern int __qti_scm_get_encrypted_tz_log(struct device *dev, void *ker_buf,
					  u32 buf_len, u32 log_id);

#define QTI_SCM_SVC_OTP	0x2
#define QTI_SCM_CMD_OTP	0x15
extern int  __qti_scm_load_otp(struct device *dev, u32 peripheral);

#define QTI_SCM_SVC_XO_TCXO 0x2
#define QTI_SCM_CMD_XO_TCXO 0x20
extern int __qti_scm_pil_cfg(struct device *dev, u32 peripheral, u32 arg);

#define QTI_SCM_SVC_BT_ECO 0x2
#define QTI_SCM_CMD_BT_ECO 0x21

extern int __qti_scm_toggle_bt_eco(struct device *dev, u32 peripheral,
							u32 arg);
