mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-19 16:31:27 +01:00
This protocol allows an agent to start, stop a CPU or set reset vector. It is used to manage auxiliary CPUs in an LM (e.g. additional cores in an AP cluster). Signed-off-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Alice Guo <alice.guo@nxp.com>
123 lines
3.3 KiB
C
123 lines
3.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
|
/*
|
|
* Copyright 2025 NXP
|
|
*/
|
|
|
|
#ifndef _SCMI_NXP_PROTOCOLS_H
|
|
#define _SCMI_NXP_PROTOCOLS_H
|
|
|
|
#include <asm/types.h>
|
|
#include <linux/bitops.h>
|
|
|
|
#define SCMI_PROTOCOL_ID_IMX_LMM 0x80
|
|
#define SCMI_PROTOCOL_ID_IMX_CPU 0x82
|
|
#define SCMI_PROTOCOL_ID_IMX_MISC 0x84
|
|
|
|
#define SCMI_PAYLOAD_LEN 100
|
|
|
|
#define SCMI_ARRAY(X, Y) ((SCMI_PAYLOAD_LEN - (X)) / sizeof(Y))
|
|
|
|
#define SCMI_IMX_MISC_RESET_REASON 0xA
|
|
|
|
struct scmi_imx_misc_reset_reason_in {
|
|
#define MISC_REASON_FLAG_SYSTEM BIT(0)
|
|
u32 flags;
|
|
};
|
|
|
|
struct scmi_imx_misc_reset_reason_out {
|
|
s32 status;
|
|
/* Boot reason flags */
|
|
#define MISC_BOOT_FLAG_VLD BIT(31)
|
|
#define MISC_BOOT_FLAG_ORG_VLD BIT(28)
|
|
#define MISC_BOOT_FLAG_ORIGIN GENMASK(27, 24)
|
|
#define MISC_BOOT_FLAG_O_SHIFT 24
|
|
#define MISC_BOOT_FLAG_ERR_VLD BIT(23)
|
|
#define MISC_BOOT_FLAG_ERR_ID GENMASK(22, 8)
|
|
#define MISC_BOOT_FLAG_E_SHIFT 8
|
|
#define MISC_BOOT_FLAG_REASON GENMASK(7, 0)
|
|
u32 bootflags;
|
|
/* Shutdown reason flags */
|
|
#define MISC_SHUTDOWN_FLAG_VLD BIT(31)
|
|
#define MISC_SHUTDOWN_FLAG_EXT_LEN GENMASK(30, 29)
|
|
#define MISC_SHUTDOWN_FLAG_ORG_VLD BIT(28)
|
|
#define MISC_SHUTDOWN_FLAG_ORIGIN GENMASK(27, 24)
|
|
#define MISC_SHUTDOWN_FLAG_O_SHIFT 24
|
|
#define MISC_SHUTDOWN_FLAG_ERR_VLD BIT(23)
|
|
#define MISC_SHUTDOWN_FLAG_ERR_ID GENMASK(22, 8)
|
|
#define MISC_SHUTDOWN_FLAG_E_SHIFT 8
|
|
#define MISC_SHUTDOWN_FLAG_REASON GENMASK(7, 0)
|
|
u32 shutdownflags;
|
|
/* Array of extended info words */
|
|
#define MISC_MAX_EXTINFO SCMI_ARRAY(16, u32)
|
|
u32 extInfo[MISC_MAX_EXTINFO];
|
|
};
|
|
|
|
#define LMM_ID_DISCOVER 0xFFFFFFFFU
|
|
#define LMM_MAX_NAME 16
|
|
|
|
enum scmi_imx_lmm_state {
|
|
LMM_STATE_LM_OFF,
|
|
LMM_STATE_LM_ON,
|
|
LMM_STATE_LM_SUSPEND,
|
|
LMM_STATE_LM_POWERED,
|
|
};
|
|
|
|
struct scmi_imx_lmm_info {
|
|
u32 lmid;
|
|
enum scmi_imx_lmm_state state;
|
|
u32 errstatus;
|
|
u8 name[LMM_MAX_NAME];
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_IMX_SM_LMM)
|
|
int scmi_imx_lmm_info(struct udevice *dev, u32 lmid, struct scmi_imx_lmm_info *info);
|
|
int scmi_imx_lmm_power_boot(struct udevice *dev, u32 lmid, bool boot);
|
|
int scmi_imx_lmm_reset_vector_set(struct udevice *dev, u32 lmid, u32 cpuid, u32 flags, u64 vector);
|
|
int scmi_imx_lmm_shutdown(struct udevice *dev, u32 lmid, bool flags);
|
|
#else
|
|
static inline int scmi_imx_lmm_info(struct udevice *dev, u32 lmid, struct scmi_imx_lmm_info *info)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int scmi_imx_lmm_power_boot(struct udevice *dev, u32 lmid, bool boot)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int
|
|
scmi_imx_lmm_reset_vector_set(struct udevice *dev, u32 lmid, u32 cpuid, u32 flags, u64 vector)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int scmi_imx_lmm_shutdown(struct udevice *dev, u32 lmid, bool flags)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
#endif
|
|
|
|
#if IS_ENABLED(CONFIG_IMX_SM_CPU)
|
|
int scmi_imx_cpu_started(struct udevice *dev, u32 cpuid, bool *started);
|
|
int scmi_imx_cpu_reset_vector_set(struct udevice *dev, u32 cpuid, u32 flags, u64 vector,
|
|
bool start, bool boot, bool resume);
|
|
int scmi_imx_cpu_start(struct udevice *dev, u32 cpuid, bool start);
|
|
#else
|
|
static inline int scmi_imx_cpu_started(struct udevice *dev, u32 cpuid, bool *started)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int scmi_imx_cpu_reset_vector_set(struct udevice *dev, u32 cpuid, u32 flags,
|
|
u64 vector, bool start, bool boot, bool resume)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int scmi_imx_cpu_start(struct udevice *dev, u32 cpuid, bool start)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
#endif
|
|
#endif
|