4f88bd23ba
This adds an interface for configuring Qualcomm's "secure SMMU" and adds support for booting the modem Hexagon on MSM8996. Two new debugfs entries are added in the remoteproc core to introspect the list of memory carveouts and the loaded resource table. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJaD26iAAoJEAsfOT8Nma3FUp0QAL/WZhL8QsvVFbAlv/Aa6NKm z8blXscD0GKdQWDWGaGPtpbnpOWOYhJs9WxstiB2q9ooSa9brIdjG5ukr4DTgtRs 12If5tfkVFIjlBhAdYYK+biNSQtZE+37jb7aJ+j4N3Po3O72pxekcLMLhAdvY6yk zHnhDZ8N7KBxAa0eOg7PJz7AGRF6BHhPxkqgJm0FzBj4HLQ/lwrv6iYJRrZgw6CT OhIHgPwCSHmt2fTO2QDLOWJtbVMSFhunHbuYlzPwvhMAGCT87VmXCIkW8iVhcD24 uJMrFbQoBoWVMB68JgGUKd7SSs8pV7DMrGfJll1kBEQfMLynn8Omre7WDAfwjUEn ACasSDWdWEPABJoIRVkGhS+2BnfCehdvDC7QxFFPAf8oc49O3t6DyXcCQdcVkzzE f1r/G2JKsoNQxjklFJewU5r0EjWgvV/78Dmpi7tuUtjgMSyEqkYORmInbbFIqZrU 9bHCqrmlxuRFSklxoG2u7F2SVYgMVlqM4rmj8QqR85SeIfyZtcCx5i5yAj8dZsI1 JVjucOCROHFqs/3SYFKlo6x4XHIchJD4p64QOXPCVhw7R1NXTPRTFBCQ75PKdiD1 d7kcGhdaz2cMeN1WRhIQ00lh/uiDNd4Ez7sDuU8MnWiEcIs1/ZP1LCHZTNttoljH rWZp4XlrhT+Vx91zV5u5 =lnNj -----END PGP SIGNATURE----- Merge tag 'rproc-v4.15' of git://github.com/andersson/remoteproc Pull remoteproc updates from Bjorn Andersson: "This adds an interface for configuring Qualcomm's "secure SMMU" and adds support for booting the modem Hexagon on MSM8996. Two new debugfs entries are added in the remoteproc core to introspect the list of memory carveouts and the loaded resource table" * tag 'rproc-v4.15' of git://github.com/andersson/remoteproc: remoteproc: qcom: Fix error handling paths in order to avoid memory leaks remoteproc: qcom: Drop pr_err in q6v5_xfer_mem_ownership() remoteproc: debug: add carveouts list dump feature remoteproc: debug: add resource table dump feature remoteproc: qcom: Add support for mss remoteproc on msm8996 remoteproc: qcom: Make secure world call for mem ownership switch remoteproc: qcom: refactor mss fw image loading sequence firmware: scm: Add new SCM call API for switching memory ownership
112 lines
3.9 KiB
C
112 lines
3.9 KiB
C
/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* 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.
|
|
*/
|
|
#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
|
|
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
|
|
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
|
|
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);
|
|
extern int __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral);
|
|
extern int __qcom_scm_pas_mss_reset(struct device *dev, bool reset);
|
|
|
|
/* 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);
|
|
|
|
#endif
|