12966Swollman/* SPDX-License-Identifier: GPL-2.0 */
250477Speter
31590Srgrimes#ifndef __ASM_CSKY_IRQFLAGS_H
4156813Sru#define __ASM_CSKY_IRQFLAGS_H
5156813Sru#include <abi/reg_ops.h>
64699Sjkh
734706Sbdestatic inline unsigned long arch_local_irq_save(void)
897128Sjmallett{
91930Swollman	unsigned long flags;
101930Swollman
11106717Smarcel	flags = mfcr("psr");
12100200Swollman	asm volatile("psrclr ie\n":::"memory");
13100200Swollman	return flags;
14176457Sru}
1596630Stjr#define arch_local_irq_save arch_local_irq_save
16183242Ssam
17121666Shartistatic inline void arch_local_irq_enable(void)
1891706Sobrien{
1938653Sgpalmer	asm volatile("psrset ee, ie\n":::"memory");
2038653Sgpalmer}
21183242Ssam#define arch_local_irq_enable arch_local_irq_enable
22124587Sru
2357013Sobrienstatic inline void arch_local_irq_disable(void)
24148771Scperciva{
2578562Sobrien	asm volatile("psrclr ie\n":::"memory");
26108667Sobrien}
27119553Sphk#define arch_local_irq_disable arch_local_irq_disable
28119553Sphk
29148677Sphkstatic inline unsigned long arch_local_save_flags(void)
3038653Sgpalmer{
31148741Sphk	return mfcr("psr");
3238653Sgpalmer}
33183242Ssam#define arch_local_save_flags arch_local_save_flags
34124587Sru
3538653Sgpalmerstatic inline void arch_local_irq_restore(unsigned long flags)
3638653Sgpalmer{
3738653Sgpalmer	mtcr("psr", flags);
3838653Sgpalmer}
39183242Ssam#define arch_local_irq_restore arch_local_irq_restore
4038653Sgpalmer
4138653Sgpalmerstatic inline int arch_irqs_disabled_flags(unsigned long flags)
4238653Sgpalmer{
4338653Sgpalmer	return !(flags & (1<<6));
44183242Ssam}
4538653Sgpalmer#define arch_irqs_disabled_flags arch_irqs_disabled_flags
46179813Sdougb
47176733Sjeff#include <asm-generic/irqflags.h>
4895926Stjr
49156256Smux#endif /* __ASM_CSKY_IRQFLAGS_H */
50183242Ssam