mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-25 07:41:42 +01:00
lib: Introduce sbi_ipi_send_halt() API
Instead of directly calling sbi_ipi_send_many(), we introduce sbi_ipi_send_halt() for halting a set of HARTs. This way in future we can assign any IPI event number for HART halting within sbi_ipi.c only. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
@@ -29,6 +29,8 @@ int sbi_ipi_send_smode(struct sbi_scratch *scratch, ulong hmask, ulong hbase);
|
|||||||
|
|
||||||
void sbi_ipi_clear_smode(struct sbi_scratch *scratch);
|
void sbi_ipi_clear_smode(struct sbi_scratch *scratch);
|
||||||
|
|
||||||
|
int sbi_ipi_send_halt(struct sbi_scratch *scratch, ulong hmask, ulong hbase);
|
||||||
|
|
||||||
void sbi_ipi_process(struct sbi_scratch *scratch);
|
void sbi_ipi_process(struct sbi_scratch *scratch);
|
||||||
|
|
||||||
int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot);
|
int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot);
|
||||||
|
@@ -112,6 +112,12 @@ void sbi_ipi_clear_smode(struct sbi_scratch *scratch)
|
|||||||
csr_clear(CSR_MIP, MIP_SSIP);
|
csr_clear(CSR_MIP, MIP_SSIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sbi_ipi_send_halt(struct sbi_scratch *scratch, ulong hmask, ulong hbase)
|
||||||
|
{
|
||||||
|
return sbi_ipi_send_many(scratch, hmask, hbase,
|
||||||
|
SBI_IPI_EVENT_HALT, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
void sbi_ipi_process(struct sbi_scratch *scratch)
|
void sbi_ipi_process(struct sbi_scratch *scratch)
|
||||||
{
|
{
|
||||||
unsigned long ipi_type;
|
unsigned long ipi_type;
|
||||||
|
@@ -39,9 +39,8 @@ void __noreturn sbi_system_reboot(struct sbi_scratch *scratch, u32 type)
|
|||||||
u32 current_hartid_mask = 1UL << sbi_current_hartid();
|
u32 current_hartid_mask = 1UL << sbi_current_hartid();
|
||||||
|
|
||||||
/* Send HALT IPI to every hart other than the current hart */
|
/* Send HALT IPI to every hart other than the current hart */
|
||||||
sbi_ipi_send_many(scratch,
|
sbi_ipi_send_halt(scratch,
|
||||||
sbi_hart_available_mask() & ~current_hartid_mask,
|
sbi_hart_available_mask() & ~current_hartid_mask, 0);
|
||||||
0, SBI_IPI_EVENT_HALT, NULL);
|
|
||||||
|
|
||||||
/* Platform specific reooot */
|
/* Platform specific reooot */
|
||||||
sbi_platform_system_reboot(sbi_platform_ptr(scratch), type);
|
sbi_platform_system_reboot(sbi_platform_ptr(scratch), type);
|
||||||
@@ -55,9 +54,8 @@ void __noreturn sbi_system_shutdown(struct sbi_scratch *scratch, u32 type)
|
|||||||
u32 current_hartid_mask = 1UL << sbi_current_hartid();
|
u32 current_hartid_mask = 1UL << sbi_current_hartid();
|
||||||
|
|
||||||
/* Send HALT IPI to every hart other than the current hart */
|
/* Send HALT IPI to every hart other than the current hart */
|
||||||
sbi_ipi_send_many(scratch,
|
sbi_ipi_send_halt(scratch,
|
||||||
sbi_hart_available_mask() & ~current_hartid_mask,
|
sbi_hart_available_mask() & ~current_hartid_mask, 0);
|
||||||
0, SBI_IPI_EVENT_HALT, NULL);
|
|
||||||
|
|
||||||
/* Platform specific shutdown */
|
/* Platform specific shutdown */
|
||||||
sbi_platform_system_shutdown(sbi_platform_ptr(scratch), type);
|
sbi_platform_system_shutdown(sbi_platform_ptr(scratch), type);
|
||||||
|
Reference in New Issue
Block a user