| From fa98668b2dbe8becf9167177378e0c2681bc0846 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 23 Apr 2022 21:11:41 +0200 |
| Subject: openrisc: start CPU timer early in boot |
| |
| From: Jason A. Donenfeld <Jason@zx2c4.com> |
| |
| [ Upstream commit 516dd4aacd67a0f27da94f3fe63fe0f4dbab6e2b ] |
| |
| In order to measure the boot process, the timer should be switched on as |
| early in boot as possible. As well, the commit defines the get_cycles |
| macro, like the previous patches in this series, so that generic code is |
| aware that it's implemented by the platform, as is done on other archs. |
| |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Cc: Jonas Bonn <jonas@southpole.se> |
| Cc: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi> |
| Acked-by: Stafford Horne <shorne@gmail.com> |
| Reported-by: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/openrisc/include/asm/timex.h | 1 + |
| arch/openrisc/kernel/head.S | 9 +++++++++ |
| 2 files changed, 10 insertions(+) |
| |
| diff --git a/arch/openrisc/include/asm/timex.h b/arch/openrisc/include/asm/timex.h |
| index 9935cad1b9b9..34d015bf0462 100644 |
| --- a/arch/openrisc/include/asm/timex.h |
| +++ b/arch/openrisc/include/asm/timex.h |
| @@ -27,6 +27,7 @@ static inline cycles_t get_cycles(void) |
| { |
| return mfspr(SPR_TTCR); |
| } |
| +#define get_cycles get_cycles |
| |
| /* This isn't really used any more */ |
| #define CLOCK_TICK_RATE 1000 |
| diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S |
| index 98dd6860bc0b..0b6be5b3522b 100644 |
| --- a/arch/openrisc/kernel/head.S |
| +++ b/arch/openrisc/kernel/head.S |
| @@ -452,6 +452,15 @@ _start: |
| l.ori r3,r0,0x1 |
| l.mtspr r0,r3,SPR_SR |
| |
| + /* |
| + * Start the TTCR as early as possible, so that the RNG can make use of |
| + * measurements of boot time from the earliest opportunity. Especially |
| + * important is that the TTCR does not return zero by the time we reach |
| + * rand_initialize(). |
| + */ |
| + l.movhi r3,hi(SPR_TTMR_CR) |
| + l.mtspr r0,r3,SPR_TTMR |
| + |
| CLEAR_GPR(r1) |
| CLEAR_GPR(r2) |
| CLEAR_GPR(r3) |
| -- |
| 2.35.1 |
| |