summaryrefslogtreecommitdiffstats
path: root/arch/kvx/include/asm/sys_arch.h
blob: 9df32c4e72fdb3a147cef5e0679e1c630b955b72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2019 Kalray Inc.
 */

#ifndef _ASM_KVX_SYS_ARCH_H
#define _ASM_KVX_SYS_ARCH_H

#include <asm/sfr_defs.h>

#define EXCEPTION_STRIDE	0x40
#define EXCEPTION_ALIGNMENT	0x100

#define KVX_SFR_START(__sfr_reg) \
	(KVX_SFR_## __sfr_reg ## _SHIFT)

#define KVX_SFR_END(__sfr_reg) \
	(KVX_SFR_## __sfr_reg ## _SHIFT + KVX_SFR_## __sfr_reg ## _WIDTH - 1)

/**
 * Get the value to clear a sfr
 */
#define SFR_CLEAR(__sfr, __field, __lm) \
	KVX_SFR_## __sfr ## _ ## __field ## _ ## __lm ## _CLEAR

#define SFR_CLEAR_WFXL(__sfr, __field)  SFR_CLEAR(__sfr, __field, WFXL)
#define SFR_CLEAR_WFXM(__sfr, __field)  SFR_CLEAR(__sfr, __field, WFXM)

/**
 * Get the value to set a sfr.
 */
#define SFR_SET_WFXL(__sfr, __field, __val) \
	(__val << (KVX_SFR_ ## __sfr ## _ ## __field ## _SHIFT + 32))

#define SFR_SET_WFXM(__sfr, __field, __val) \
	(__val << (KVX_SFR_ ## __sfr ## _ ## __field ## _SHIFT))

/**
 * Generate the mask to clear and set a value using wfx{m|l}.
 */
#define SFR_SET_VAL_WFXL(__sfr, __field, __val) \
	(SFR_SET_WFXL(__sfr, __field, __val) | SFR_CLEAR_WFXL(__sfr, __field))
#define SFR_SET_VAL_WFXM(__sfr, __field, __val) \
	(SFR_SET_WFXM(__sfr, __field, __val) | SFR_CLEAR_WFXM(__sfr, __field))

#endif /* _ASM_KVX_SYS_ARCH_H */