Merge branches 'pm-cpuidle', 'pm-core' and 'pm-sleep'
[linux-block.git] / arch / riscv / include / asm / vdso / processor.h
CommitLineData
ad5d1122
VC
1/* SPDX-License-Identifier: GPL-2.0-only */
2#ifndef __ASM_VDSO_PROCESSOR_H
3#define __ASM_VDSO_PROCESSOR_H
4
5#ifndef __ASSEMBLY__
6
30aca1ba
RD
7#include <asm/barrier.h>
8
ad5d1122
VC
9static inline void cpu_relax(void)
10{
11#ifdef __riscv_muldiv
0b1d60d6
SH
12 int dummy;
13 /* In lieu of a halt instruction, induce a long-latency stall. */
14 __asm__ __volatile__ ("div %0, %0, zero" : "=r" (dummy));
ad5d1122 15#endif
3c349eac
PD
16
17#ifdef __riscv_zihintpause
0b1d60d6
SH
18 /*
19 * Reduce instruction retirement.
20 * This assumes the PC changes.
21 */
0b1d60d6 22 __asm__ __volatile__ ("pause");
8eb060e1 23#else
0b1d60d6
SH
24 /* Encoding of the pause instruction */
25 __asm__ __volatile__ (".4byte 0x100000F");
8eb060e1 26#endif
ad5d1122
VC
27 barrier();
28}
29
30#endif /* __ASSEMBLY__ */
31
32#endif /* __ASM_VDSO_PROCESSOR_H */