mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 08:07:32 -04:00
soc: qcom: Migrate SCM call to disable watchdog
Add support for SCM call to deactivate secure watchdog on Qualcomm devices. Change-Id: I4008792e45d2c264b98ca954ea37a94093ea771e Signed-off-by: Elliot Berman <eberman@codeaurora.org>
This commit is contained in:
parent
bbf72fdcb6
commit
f1624c54ae
5 changed files with 29 additions and 8 deletions
|
|
@ -651,6 +651,20 @@ void __qcom_scm_cpu_power_down(struct device *dev, u32 flags)
|
|||
qcom_scm_call_atomic(dev, &desc);
|
||||
}
|
||||
|
||||
int __qcom_scm_sec_wdog_deactivate(struct device *dev)
|
||||
{
|
||||
struct qcom_scm_desc desc = {
|
||||
.svc = QCOM_SCM_SVC_BOOT,
|
||||
.cmd = QCOM_SCM_BOOT_SEC_WDOG_DIS,
|
||||
.owner = ARM_SMCCC_OWNER_SIP
|
||||
};
|
||||
|
||||
desc.args[0] = 1;
|
||||
desc.arginfo = QCOM_SCM_ARGS(1);
|
||||
|
||||
return qcom_scm_call(dev, &desc);
|
||||
}
|
||||
|
||||
int __qcom_scm_set_remote_state(struct device *dev, u32 state, u32 id)
|
||||
{
|
||||
struct qcom_scm_desc desc = {
|
||||
|
|
|
|||
|
|
@ -128,6 +128,15 @@ void qcom_scm_cpu_power_down(u32 flags)
|
|||
}
|
||||
EXPORT_SYMBOL(qcom_scm_cpu_power_down);
|
||||
|
||||
/**
|
||||
* qcm_scm_sec_wdog_deactivate() - Deactivate secure watchdog
|
||||
*/
|
||||
int qcom_scm_sec_wdog_deactivate(void)
|
||||
{
|
||||
return __qcom_scm_sec_wdog_deactivate(__scm->dev);
|
||||
}
|
||||
EXPORT_SYMBOL(qcom_scm_sec_wdog_deactivate);
|
||||
|
||||
int qcom_scm_set_remote_state(u32 state, u32 id)
|
||||
{
|
||||
return __qcom_scm_set_remote_state(__scm->dev, state, id);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#define QCOM_SCM_SVC_BOOT 0x01
|
||||
#define QCOM_SCM_BOOT_SET_ADDR 0x01
|
||||
#define QCOM_SCM_BOOT_TERMINATE_PC 0x02
|
||||
#define QCOM_SCM_BOOT_SEC_WDOG_DIS 0x07
|
||||
#define QCOM_SCM_BOOT_SET_REMOTE_STATE 0x0a
|
||||
#define QCOM_SCM_BOOT_SET_DLOAD_MODE 0x10
|
||||
extern int __qcom_scm_set_cold_boot_addr(struct device *dev, void *entry,
|
||||
|
|
@ -14,6 +15,7 @@ extern int __qcom_scm_set_cold_boot_addr(struct device *dev, void *entry,
|
|||
extern int __qcom_scm_set_warm_boot_addr(struct device *dev, void *entry,
|
||||
const cpumask_t *cpus);
|
||||
extern void __qcom_scm_cpu_power_down(struct device *dev, u32 flags);
|
||||
extern int __qcom_scm_sec_wdog_deactivate(struct device *dev);
|
||||
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_FLUSH_FLAG_MASK 0x3
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
#include <linux/cpu_pm.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/wait.h>
|
||||
#include <soc/qcom/scm.h>
|
||||
#include <linux/qcom_scm.h>
|
||||
#include <soc/qcom/minidump.h>
|
||||
#include <soc/qcom/watchdog.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
|
@ -40,8 +40,6 @@
|
|||
#define UNMASKED_INT_EN 1
|
||||
|
||||
#define MASK_SIZE 32
|
||||
#define SCM_SET_REGSAVE_CMD 0x2
|
||||
#define SCM_SVC_SEC_WDOG_DIS 0x7
|
||||
#define MAX_CPU_CTX_SIZE 2048
|
||||
#define WDT_HZ 32765
|
||||
|
||||
|
|
@ -225,7 +223,6 @@ static ssize_t wdog_disable_set(struct device *dev,
|
|||
const char *buf, size_t count)
|
||||
{
|
||||
struct msm_watchdog_data *wdog_dd = dev_get_drvdata(dev);
|
||||
struct scm_desc desc = {0};
|
||||
u8 disable;
|
||||
int ret;
|
||||
|
||||
|
|
@ -243,10 +240,7 @@ static ssize_t wdog_disable_set(struct device *dev,
|
|||
}
|
||||
disable = 1;
|
||||
|
||||
desc.args[0] = 1;
|
||||
desc.arginfo = SCM_ARGS(1);
|
||||
ret = scm_call2(SCM_SIP_FNID(SCM_SVC_BOOT,
|
||||
SCM_SVC_SEC_WDOG_DIS), &desc);
|
||||
ret = qcom_scm_sec_wdog_deactivate();
|
||||
if (ret) {
|
||||
dev_err(wdog_dd->dev,
|
||||
"Failed to deactivate secure wdog\n");
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ struct qcom_scm_vmperm {
|
|||
extern int qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus);
|
||||
extern int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus);
|
||||
extern void qcom_scm_cpu_power_down(u32 flags);
|
||||
extern int qcom_scm_sec_wdog_deactivate(void);
|
||||
extern int qcom_scm_set_remote_state(u32 state, u32 id);
|
||||
extern bool qcom_scm_pas_supported(u32 peripheral);
|
||||
extern int qcom_scm_pas_init_image(u32 peripheral, const void *metadata,
|
||||
|
|
@ -71,6 +72,7 @@ static inline
|
|||
int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus)
|
||||
{ return -ENODEV; }
|
||||
static inline void qcom_scm_cpu_power_down(u32 flags) {}
|
||||
static inline int qcom_scm_sec_wdog_deactivate(void) { return -ENODEV; }
|
||||
static inline u32 qcom_scm_set_remote_state(u32 state, u32 id)
|
||||
{ return -ENODEV; }
|
||||
static inline bool qcom_scm_pas_supported(u32 peripheral) { return false; }
|
||||
|
|
|
|||
Loading…
Reference in a new issue