forked from Mirrors/opensbi
lib: sbi_hsm: Call a device hook during hart resume
Non-retentive suspend states may require platform-specific actions during resume. For example, firmware may need to save and restore the values of custom CSRs. Add a hook to support this. Reviewed-by: Anup Patel <anup@brainfault.org> Signed-off-by: Samuel Holland <samuel@sholland.org>
This commit is contained in:

committed by
Anup Patel

parent
ce1d6188a2
commit
b20ed9febe
@@ -37,6 +37,14 @@ struct sbi_hsm_device {
|
||||
* specified resume address
|
||||
*/
|
||||
int (*hart_suspend)(u32 suspend_type, ulong raddr);
|
||||
|
||||
/**
|
||||
* Perform platform-specific actions to resume from a suspended state.
|
||||
*
|
||||
* This includes restoring any platform state that was lost during
|
||||
* non-retentive suspend.
|
||||
*/
|
||||
void (*hart_resume)(void);
|
||||
};
|
||||
|
||||
struct sbi_domain;
|
||||
|
@@ -178,6 +178,12 @@ static int hsm_device_hart_suspend(u32 suspend_type, ulong raddr)
|
||||
return SBI_ENOTSUPP;
|
||||
}
|
||||
|
||||
static void hsm_device_hart_resume(void)
|
||||
{
|
||||
if (hsm_dev && hsm_dev->hart_resume)
|
||||
hsm_dev->hart_resume();
|
||||
}
|
||||
|
||||
int sbi_hsm_init(struct sbi_scratch *scratch, u32 hartid, bool cold_boot)
|
||||
{
|
||||
u32 i;
|
||||
@@ -384,6 +390,8 @@ void sbi_hsm_hart_resume_start(struct sbi_scratch *scratch)
|
||||
__func__, oldstate);
|
||||
sbi_hart_hang();
|
||||
}
|
||||
|
||||
hsm_device_hart_resume();
|
||||
}
|
||||
|
||||
void sbi_hsm_hart_resume_finish(struct sbi_scratch *scratch)
|
||||
|
Reference in New Issue
Block a user