mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-28 16:11:49 +00:00

On i.MX8QM/i.MX8QX with system controller inside, the wakeup source is managed in SCFW(system controller firmware), if the wakeup source is belonged to system controller partition, then before Linux suspend, the wakeup source should be set to SC_PM_WAKE_SRC_SCU, and if the wakeup source is belonged to Cortex-A partition, the wakeup source should be set to SC_PM_WAKE_SRC_IRQSTEER, so need to add wakeup source SIP runtime service to get Linux kernel's wakeup source and set the correct wakeup source for system controller. Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
/*
|
|
* Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
#include <common/debug.h>
|
|
#include <common/runtime_svc.h>
|
|
#include <lib/pmf/pmf.h>
|
|
#include <tools_share/uuid.h>
|
|
#include <imx_sip_svc.h>
|
|
|
|
static int32_t imx_sip_setup(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static uintptr_t imx_sip_handler(unsigned int smc_fid,
|
|
u_register_t x1,
|
|
u_register_t x2,
|
|
u_register_t x3,
|
|
u_register_t x4,
|
|
void *cookie,
|
|
void *handle,
|
|
u_register_t flags)
|
|
{
|
|
switch (smc_fid) {
|
|
#if (defined(PLAT_IMX8QM) || defined(PLAT_IMX8QX))
|
|
case IMX_SIP_SRTC:
|
|
return imx_srtc_handler(smc_fid, handle, x1, x2, x3, x4);
|
|
case IMX_SIP_CPUFREQ:
|
|
SMC_RET1(handle, imx_cpufreq_handler(smc_fid, x1, x2, x3));
|
|
break;
|
|
case IMX_SIP_WAKEUP_SRC:
|
|
SMC_RET1(handle, imx_wakeup_src_handler(smc_fid, x1, x2, x3));
|
|
#endif
|
|
default:
|
|
WARN("Unimplemented i.MX SiP Service Call: 0x%x\n", smc_fid);
|
|
SMC_RET1(handle, SMC_UNK);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* Define a runtime service descriptor for fast SMC calls */
|
|
DECLARE_RT_SVC(
|
|
imx_sip_svc,
|
|
OEN_SIP_START,
|
|
OEN_SIP_END,
|
|
SMC_TYPE_FAST,
|
|
imx_sip_setup,
|
|
imx_sip_handler
|
|
);
|