forked from Mirrors/opensbi
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:
@@ -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
|
||||
*
|
||||
|
Reference in New Issue
Block a user