include: sbi: Add hart_suspend() platform callback

We add hart_suspend() callback in platform operations which will
be used by HSM implementation to enter retentive or non-retentive
suspend state.

Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
Anup Patel
2021-02-05 17:47:48 +05:30
committed by Anup Patel
parent 4b05df6700
commit 807d71c4ff

View File

@@ -139,6 +139,11 @@ struct sbi_platform_operations {
* return if success.
*/
int (*hart_stop)(void);
/**
* Put the current hart in platform specific suspend (or low-power)
* state.
*/
int (*hart_suspend)(u32 suspend_type, ulong raddr);
/* Check whether reset type and reason supported by the platform */
int (*system_reset_check)(u32 reset_type, u32 reset_reason);
@@ -370,6 +375,31 @@ static inline int sbi_platform_hart_stop(const struct sbi_platform *plat)
return SBI_ENOTSUPP;
}
/**
* Put the current hart in platform specific suspend (or low-power) state.
*
* For successful retentive suspend, the call will return 0 when the hart
* resumes normal execution.
*
* For successful non-retentive suspend, the hart will resume from specified
* resume address
*
* @param plat pointer to struct sbi_platform
* @param suspend_type the type of suspend
* @param raddr physical address where the hart can resume in M-mode after
* non-retantive suspend
*
* @return 0 if successful and negative error code on failure
*/
static inline int sbi_platform_hart_suspend(const struct sbi_platform *plat,
u32 suspend_type, ulong raddr)
{
if (plat && sbi_platform_ops(plat)->hart_suspend)
return sbi_platform_ops(plat)->hart_suspend(suspend_type,
raddr);
return SBI_ENOTSUPP;
}
/**
* Early initialization for current HART
*