Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux...
[sfrench/cifs-2.6.git] / arch / riscv / include / asm / timex.h
index c7ef131b9e4cbdd76f79687dac40dce4b922f93e..bad2a7c2cda52ee352daa2d954389429bdf3ec28 100644 (file)
@@ -7,12 +7,25 @@
 #define _ASM_RISCV_TIMEX_H
 
 #include <asm/csr.h>
+#include <asm/mmio.h>
 
 typedef unsigned long cycles_t;
 
+extern u64 __iomem *riscv_time_val;
+extern u64 __iomem *riscv_time_cmp;
+
+#ifdef CONFIG_64BIT
+#define mmio_get_cycles()      readq_relaxed(riscv_time_val)
+#else
+#define mmio_get_cycles()      readl_relaxed(riscv_time_val)
+#define mmio_get_cycles_hi()   readl_relaxed(((u32 *)riscv_time_val) + 1)
+#endif
+
 static inline cycles_t get_cycles(void)
 {
-       return csr_read(CSR_TIME);
+       if (IS_ENABLED(CONFIG_RISCV_SBI))
+               return csr_read(CSR_TIME);
+       return mmio_get_cycles();
 }
 #define get_cycles get_cycles
 
@@ -24,7 +37,9 @@ static inline u64 get_cycles64(void)
 #else /* CONFIG_64BIT */
 static inline u32 get_cycles_hi(void)
 {
-       return csr_read(CSR_TIMEH);
+       if (IS_ENABLED(CONFIG_RISCV_SBI))
+               return csr_read(CSR_TIMEH);
+       return mmio_get_cycles_hi();
 }
 
 static inline u64 get_cycles64(void)