64 lines
1.7 KiB
C
64 lines
1.7 KiB
C
/*
|
|
* Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <arch.h>
|
|
#include <arch_helpers.h>
|
|
#include <assert.h>
|
|
#include <common/bl_common.h>
|
|
#include <lib/el3_runtime/context_mgmt.h>
|
|
#include <common/debug.h>
|
|
#include <errno.h>
|
|
#include <mce.h>
|
|
#include <memctrl.h>
|
|
#include <common/runtime_svc.h>
|
|
#include <tegra_private.h>
|
|
#include <tegra_platform.h>
|
|
#include <stdbool.h>
|
|
|
|
extern bool tegra_fake_system_suspend;
|
|
|
|
/*******************************************************************************
|
|
* Tegra194 SiP SMCs
|
|
******************************************************************************/
|
|
#define TEGRA_SIP_ENABLE_FAKE_SYSTEM_SUSPEND 0xC2FFFE03U
|
|
|
|
/*******************************************************************************
|
|
* This function is responsible for handling all T194 SiP calls
|
|
******************************************************************************/
|
|
int32_t plat_sip_handler(uint32_t smc_fid,
|
|
uint64_t x1,
|
|
uint64_t x2,
|
|
uint64_t x3,
|
|
uint64_t x4,
|
|
const void *cookie,
|
|
void *handle,
|
|
uint64_t flags)
|
|
{
|
|
int32_t ret = -ENOTSUP;
|
|
|
|
(void)x1;
|
|
(void)x4;
|
|
(void)cookie;
|
|
(void)flags;
|
|
|
|
if (smc_fid == TEGRA_SIP_ENABLE_FAKE_SYSTEM_SUSPEND) {
|
|
/*
|
|
* System suspend mode is set if the platform ATF is
|
|
* running on VDK and there is a debug SIP call. This mode
|
|
* ensures that the debug path is exercised, instead of
|
|
* regular code path to suit the pre-silicon platform needs.
|
|
* This includes replacing the call to WFI, with calls to
|
|
* system suspend exit procedures.
|
|
*/
|
|
if (tegra_platform_is_virt_dev_kit()) {
|
|
tegra_fake_system_suspend = true;
|
|
ret = 0;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|