From 9895d446ae947c2c3d060808bcb66870afaeb659 Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Tue, 22 Jan 2019 14:47:03 +0530 Subject: [PATCH] lib: Remove target_hart and hartid parameter from TIMER callbacks The target_hart and hartid paramter of TIMER callbacks is not required because it always current hartid which can be obtained using sbi_current_hartid() API. Signed-off-by: Anup Patel --- include/sbi/sbi_platform.h | 21 ++++++++------------- include/sbi/sbi_timer.h | 10 ++++------ lib/sbi_ecall.c | 4 ++-- lib/sbi_init.c | 4 ++-- lib/sbi_timer.c | 16 +++++++--------- lib/sbi_trap.c | 2 +- platform/common/include/plat/sys/clint.h | 6 +++--- platform/common/sys/clint.c | 12 +++++++++--- platform/kendryte/k210/platform.c | 4 ++-- platform/qemu/sifive_u/platform.c | 4 ++-- platform/qemu/virt/platform.c | 4 ++-- platform/sifive/fu540/platform.c | 4 ++-- 12 files changed, 44 insertions(+), 47 deletions(-) diff --git a/include/sbi/sbi_platform.h b/include/sbi/sbi_platform.h index 648b953..be70903 100644 --- a/include/sbi/sbi_platform.h +++ b/include/sbi/sbi_platform.h @@ -96,11 +96,11 @@ struct sbi_platform { /** Get MMIO timer value */ u64 (*timer_value)(void); /** Start MMIO timer event for a target HART */ - void (*timer_event_start)(u32 target_hart, u64 next_event); + void (*timer_event_start)(u64 next_event); /** Stop MMIO timer event for a target HART */ - void (*timer_event_stop)(u32 target_hart); + void (*timer_event_stop)(void); /** Initialize MMIO timer for given HART */ - int (*timer_init)(u32 hartid, bool cold_boot); + int (*timer_init)(bool cold_boot); /** Reboot the platform */ int (*system_reboot)(u32 type); @@ -393,44 +393,39 @@ static inline u64 sbi_platform_timer_value(struct sbi_platform *plat) * Start MMIO timer event for a target HART * * @param plat pointer to struct struct sbi_platform - * @param target_hart HART ID of timer event target * @param next_event timer value when timer event will happen */ static inline void sbi_platform_timer_event_start(struct sbi_platform *plat, - u32 target_hart, u64 next_event) { if (plat && plat->timer_event_start) - plat->timer_event_start(target_hart, next_event); + plat->timer_event_start(next_event); } /** * Stop MMIO timer event for a target HART * * @param plat pointer to struct sbi_platform - * @param target_hart HART ID of timer event target */ -static inline void sbi_platform_timer_event_stop(struct sbi_platform *plat, - u32 target_hart) +static inline void sbi_platform_timer_event_stop(struct sbi_platform *plat) { if (plat && plat->timer_event_stop) - plat->timer_event_stop(target_hart); + plat->timer_event_stop(); } /** * Initialize the platform MMIO timer for given HART * * @param plat pointer to struct sbi_platform - * @param hartid HART ID * @param cold_boot whether cold boot (TRUE) or warm_boot (FALSE) * * @return 0 on success and negative error code on failure */ static inline int sbi_platform_timer_init(struct sbi_platform *plat, - u32 hartid, bool cold_boot) + bool cold_boot) { if (plat && plat->timer_init) - return plat->timer_init(hartid, cold_boot); + return plat->timer_init(cold_boot); return 0; } diff --git a/include/sbi/sbi_timer.h b/include/sbi/sbi_timer.h index 601c27c..37e1c79 100644 --- a/include/sbi/sbi_timer.h +++ b/include/sbi/sbi_timer.h @@ -16,14 +16,12 @@ struct sbi_scratch; u64 sbi_timer_value(struct sbi_scratch *scratch); -void sbi_timer_event_stop(struct sbi_scratch *scratch, u32 hartid); +void sbi_timer_event_stop(struct sbi_scratch *scratch); -void sbi_timer_event_start(struct sbi_scratch *scratch, u32 hartid, - u64 next_event); +void sbi_timer_event_start(struct sbi_scratch *scratch, u64 next_event); -void sbi_timer_process(struct sbi_scratch *scratch, u32 hartid); +void sbi_timer_process(struct sbi_scratch *scratch); -int sbi_timer_init(struct sbi_scratch *scratch, u32 hartid, - bool cold_boot); +int sbi_timer_init(struct sbi_scratch *scratch, bool cold_boot); #endif diff --git a/lib/sbi_ecall.c b/lib/sbi_ecall.c index dc90488..9341ea8 100644 --- a/lib/sbi_ecall.c +++ b/lib/sbi_ecall.c @@ -38,10 +38,10 @@ int sbi_ecall_handler(u32 hartid, ulong mcause, switch (regs->a7) { case SBI_ECALL_SET_TIMER: #if __riscv_xlen == 32 - sbi_timer_event_start(scratch, hartid, + sbi_timer_event_start(scratch, (((u64)regs->a1 << 32) || (u64)regs->a0)); #else - sbi_timer_event_start(scratch, hartid, (u64)regs->a0); + sbi_timer_event_start(scratch, (u64)regs->a0); #endif ret = 0; break; diff --git a/lib/sbi_init.c b/lib/sbi_init.c index f783992..3e5de51 100644 --- a/lib/sbi_init.c +++ b/lib/sbi_init.c @@ -53,7 +53,7 @@ static void __noreturn init_coldboot(struct sbi_scratch *scratch, u32 hartid) if (rc) sbi_hart_hang(); - rc = sbi_timer_init(scratch, hartid, TRUE); + rc = sbi_timer_init(scratch, TRUE); if (rc) sbi_hart_hang(); @@ -119,7 +119,7 @@ static void __noreturn init_warmboot(struct sbi_scratch *scratch, u32 hartid) if (rc) sbi_hart_hang(); - rc = sbi_timer_init(scratch, hartid, FALSE); + rc = sbi_timer_init(scratch, FALSE); if (rc) sbi_hart_hang(); diff --git a/lib/sbi_timer.c b/lib/sbi_timer.c index 8dfc753..93b4d7e 100644 --- a/lib/sbi_timer.c +++ b/lib/sbi_timer.c @@ -47,29 +47,27 @@ u64 sbi_timer_value(struct sbi_scratch *scratch) return get_ticks(); } -void sbi_timer_event_stop(struct sbi_scratch *scratch, u32 hartid) +void sbi_timer_event_stop(struct sbi_scratch *scratch) { - sbi_platform_timer_event_stop(sbi_platform_ptr(scratch), hartid); + sbi_platform_timer_event_stop(sbi_platform_ptr(scratch)); } -void sbi_timer_event_start(struct sbi_scratch *scratch, u32 hartid, - u64 next_event) +void sbi_timer_event_start(struct sbi_scratch *scratch, u64 next_event) { sbi_platform_timer_event_start(sbi_platform_ptr(scratch), - hartid, next_event); + next_event); csr_clear(mip, MIP_STIP); csr_set(mie, MIP_MTIP); } -void sbi_timer_process(struct sbi_scratch *scratch, u32 hartid) +void sbi_timer_process(struct sbi_scratch *scratch) { csr_clear(mie, MIP_MTIP); csr_set(mip, MIP_STIP); } -int sbi_timer_init(struct sbi_scratch *scratch, u32 hartid, - bool cold_boot) +int sbi_timer_init(struct sbi_scratch *scratch, bool cold_boot) { return sbi_platform_timer_init(sbi_platform_ptr(scratch), - hartid, cold_boot); + cold_boot); } diff --git a/lib/sbi_trap.c b/lib/sbi_trap.c index d628c4c..c6a6b3f 100644 --- a/lib/sbi_trap.c +++ b/lib/sbi_trap.c @@ -147,7 +147,7 @@ void sbi_trap_handler(struct sbi_trap_regs *regs, mcause &= ~(1UL << (__riscv_xlen - 1)); switch (mcause) { case IRQ_M_TIMER: - sbi_timer_process(scratch, hartid); + sbi_timer_process(scratch); break; case IRQ_M_SOFT: sbi_ipi_process(scratch); diff --git a/platform/common/include/plat/sys/clint.h b/platform/common/include/plat/sys/clint.h index 2e8fdcd..8c67d94 100644 --- a/platform/common/include/plat/sys/clint.h +++ b/platform/common/include/plat/sys/clint.h @@ -24,11 +24,11 @@ int clint_cold_ipi_init(unsigned long base, u32 hart_count); u64 clint_timer_value(void); -void clint_timer_event_stop(u32 target_hart); +void clint_timer_event_stop(void); -void clint_timer_event_start(u32 target_hart, u64 next_event); +void clint_timer_event_start(u64 next_event); -int clint_warm_timer_init(u32 target_hart); +int clint_warm_timer_init(void); int clint_cold_timer_init(unsigned long base, u32 hart_count); diff --git a/platform/common/sys/clint.c b/platform/common/sys/clint.c index fc95fd3..0f53076 100644 --- a/platform/common/sys/clint.c +++ b/platform/common/sys/clint.c @@ -90,8 +90,10 @@ u64 clint_timer_value(void) return readq_relaxed(clint_time_val); } -void clint_timer_event_stop(u32 target_hart) +void clint_timer_event_stop(void) { + u32 target_hart = sbi_current_hartid(); + if (clint_time_hart_count <= target_hart) return; @@ -99,8 +101,10 @@ void clint_timer_event_stop(u32 target_hart) writeq_relaxed(-1ULL, &clint_time_cmp[target_hart]); } -void clint_timer_event_start(u32 target_hart, u64 next_event) +void clint_timer_event_start(u64 next_event) { + u32 target_hart = sbi_current_hartid(); + if (clint_time_hart_count <= target_hart) return; @@ -108,8 +112,10 @@ void clint_timer_event_start(u32 target_hart, u64 next_event) writeq_relaxed(next_event, &clint_time_cmp[target_hart]); } -int clint_warm_timer_init(u32 target_hart) +int clint_warm_timer_init(void) { + u32 target_hart = sbi_current_hartid(); + if (clint_time_hart_count <= target_hart || !clint_time_base) return -1; diff --git a/platform/kendryte/k210/platform.c b/platform/kendryte/k210/platform.c index 55e8d90..0b944be 100644 --- a/platform/kendryte/k210/platform.c +++ b/platform/kendryte/k210/platform.c @@ -68,7 +68,7 @@ static int k210_ipi_init(bool cold_boot) return clint_warm_ipi_init(); } -static int k210_timer_init(u32 hartid, bool cold_boot) +static int k210_timer_init(bool cold_boot) { int rc; @@ -79,7 +79,7 @@ static int k210_timer_init(u32 hartid, bool cold_boot) return rc; } - return clint_warm_timer_init(hartid); + return clint_warm_timer_init(); } static int k210_system_reboot(u32 type) diff --git a/platform/qemu/sifive_u/platform.c b/platform/qemu/sifive_u/platform.c index 281b265..e93554f 100644 --- a/platform/qemu/sifive_u/platform.c +++ b/platform/qemu/sifive_u/platform.c @@ -105,7 +105,7 @@ static int sifive_u_ipi_init(bool cold_boot) return clint_warm_ipi_init(); } -static int sifive_u_timer_init(u32 hartid, bool cold_boot) +static int sifive_u_timer_init(bool cold_boot) { int rc; @@ -116,7 +116,7 @@ static int sifive_u_timer_init(u32 hartid, bool cold_boot) return rc; } - return clint_warm_timer_init(hartid); + return clint_warm_timer_init(); } static int sifive_u_system_down(u32 type) diff --git a/platform/qemu/virt/platform.c b/platform/qemu/virt/platform.c index 65b36a2..c55b5fc 100644 --- a/platform/qemu/virt/platform.c +++ b/platform/qemu/virt/platform.c @@ -106,7 +106,7 @@ static int virt_ipi_init(bool cold_boot) return clint_warm_ipi_init(); } -static int virt_timer_init(u32 hartid, bool cold_boot) +static int virt_timer_init(bool cold_boot) { int rc; @@ -117,7 +117,7 @@ static int virt_timer_init(u32 hartid, bool cold_boot) return rc; } - return clint_warm_timer_init(hartid); + return clint_warm_timer_init(); } static int virt_system_down(u32 type) diff --git a/platform/sifive/fu540/platform.c b/platform/sifive/fu540/platform.c index c9bdf41..266a191 100644 --- a/platform/sifive/fu540/platform.c +++ b/platform/sifive/fu540/platform.c @@ -158,7 +158,7 @@ static int fu540_ipi_init(bool cold_boot) return clint_warm_ipi_init(); } -static int fu540_timer_init(u32 hartid, bool cold_boot) +static int fu540_timer_init(bool cold_boot) { int rc; @@ -169,7 +169,7 @@ static int fu540_timer_init(u32 hartid, bool cold_boot) return rc; } - return clint_warm_timer_init(hartid); + return clint_warm_timer_init(); } static int fu540_system_down(u32 type) -- 2.7.4