diff options
Diffstat (limited to 'lib/utils')
| -rw-r--r-- | lib/utils/ipi/aclint_mswi.c | 14 | ||||
| -rw-r--r-- | lib/utils/ipi/andes_plicsw.c | 8 | ||||
| -rw-r--r-- | lib/utils/irqchip/imsic.c | 4 |
3 files changed, 16 insertions, 10 deletions
diff --git a/lib/utils/ipi/aclint_mswi.c b/lib/utils/ipi/aclint_mswi.c index 140a49b5..a3bfb4a9 100644 --- a/lib/utils/ipi/aclint_mswi.c +++ b/lib/utils/ipi/aclint_mswi.c @@ -25,13 +25,13 @@ static unsigned long mswi_ptr_offset; #define mswi_set_hart_data_ptr(__scratch, __mswi) \ sbi_scratch_write_type((__scratch), void *, mswi_ptr_offset, (__mswi)) -static void mswi_ipi_send(u32 target_hart) +static void mswi_ipi_send(u32 hart_index) { u32 *msip; struct sbi_scratch *scratch; struct aclint_mswi_data *mswi; - scratch = sbi_hartid_to_scratch(target_hart); + scratch = sbi_hartindex_to_scratch(hart_index); if (!scratch) return; @@ -41,16 +41,17 @@ static void mswi_ipi_send(u32 target_hart) /* Set ACLINT IPI */ msip = (void *)mswi->addr; - writel(1, &msip[target_hart - mswi->first_hartid]); + writel(1, &msip[sbi_hartindex_to_hartid(hart_index) - + mswi->first_hartid]); } -static void mswi_ipi_clear(u32 target_hart) +static void mswi_ipi_clear(u32 hart_index) { u32 *msip; struct sbi_scratch *scratch; struct aclint_mswi_data *mswi; - scratch = sbi_hartid_to_scratch(target_hart); + scratch = sbi_hartindex_to_scratch(hart_index); if (!scratch) return; @@ -60,7 +61,8 @@ static void mswi_ipi_clear(u32 target_hart) /* Clear ACLINT IPI */ msip = (void *)mswi->addr; - writel(0, &msip[target_hart - mswi->first_hartid]); + writel(0, &msip[sbi_hartindex_to_hartid(hart_index) - + mswi->first_hartid]); } static struct sbi_ipi_device aclint_mswi = { diff --git a/lib/utils/ipi/andes_plicsw.c b/lib/utils/ipi/andes_plicsw.c index db25ae23..dde39c04 100644 --- a/lib/utils/ipi/andes_plicsw.c +++ b/lib/utils/ipi/andes_plicsw.c @@ -68,8 +68,10 @@ static inline void plic_sw_pending(u32 target_hart) writel(val, (void *)plicsw.addr + PLICSW_PENDING_BASE + word_index * 4); } -static void plicsw_ipi_send(u32 target_hart) +static void plicsw_ipi_send(u32 hart_index) { + u32 target_hart = sbi_hartindex_to_hartid(hart_index); + if (plicsw.hart_count <= target_hart) ebreak(); @@ -77,8 +79,10 @@ static void plicsw_ipi_send(u32 target_hart) plic_sw_pending(target_hart); } -static void plicsw_ipi_clear(u32 target_hart) +static void plicsw_ipi_clear(u32 hart_index) { + u32 target_hart = sbi_hartindex_to_hartid(hart_index); + if (plicsw.hart_count <= target_hart) ebreak(); diff --git a/lib/utils/irqchip/imsic.c b/lib/utils/irqchip/imsic.c index 7fc61d9e..78f5895a 100644 --- a/lib/utils/irqchip/imsic.c +++ b/lib/utils/irqchip/imsic.c @@ -161,7 +161,7 @@ static int imsic_external_irqfn(struct sbi_trap_regs *regs) return 0; } -static void imsic_ipi_send(u32 target_hart) +static void imsic_ipi_send(u32 hart_index) { unsigned long reloff; struct imsic_regs *regs; @@ -169,7 +169,7 @@ static void imsic_ipi_send(u32 target_hart) struct sbi_scratch *scratch; int file; - scratch = sbi_hartid_to_scratch(target_hart); + scratch = sbi_hartindex_to_scratch(hart_index); if (!scratch) return; |
