openrisc: start CPU timer early in boot
authorJason A. Donenfeld <Jason@zx2c4.com>
Sat, 23 Apr 2022 19:11:41 +0000 (21:11 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 13 May 2022 21:59:23 +0000 (23:59 +0200)
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>
arch/openrisc/include/asm/timex.h
arch/openrisc/kernel/head.S

index d52b4e5..5487fa9 100644 (file)
@@ -23,6 +23,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
index 15f1b38..871f4c8 100644 (file)
@@ -521,6 +521,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)