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:
Anup Patel
2020-01-15 11:16:54 +05:30
committed by Anup Patel
parent 3d2aaac69a
commit da9b76b957
3 changed files with 12 additions and 6 deletions

View File

@@ -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);
int sbi_ipi_send_halt(struct sbi_scratch *scratch, ulong hmask, ulong hbase);
void sbi_ipi_process(struct sbi_scratch *scratch);
int sbi_ipi_init(struct sbi_scratch *scratch, bool cold_boot);

View File

@@ -112,6 +112,12 @@ void sbi_ipi_clear_smode(struct sbi_scratch *scratch)
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)
{
unsigned long ipi_type;

View File

@@ -39,9 +39,8 @@ void __noreturn sbi_system_reboot(struct sbi_scratch *scratch, u32 type)
u32 current_hartid_mask = 1UL << sbi_current_hartid();
/* Send HALT IPI to every hart other than the current hart */
sbi_ipi_send_many(scratch,
sbi_hart_available_mask() & ~current_hartid_mask,
0, SBI_IPI_EVENT_HALT, NULL);
sbi_ipi_send_halt(scratch,
sbi_hart_available_mask() & ~current_hartid_mask, 0);
/* Platform specific reooot */
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();
/* Send HALT IPI to every hart other than the current hart */
sbi_ipi_send_many(scratch,
sbi_hart_available_mask() & ~current_hartid_mask,
0, SBI_IPI_EVENT_HALT, NULL);
sbi_ipi_send_halt(scratch,
sbi_hart_available_mask() & ~current_hartid_mask, 0);
/* Platform specific shutdown */
sbi_platform_system_shutdown(sbi_platform_ptr(scratch), type);