Deleted Added
full compact
armreg.h (289581) armreg.h (292954)
1/*-
2 * Copyright (c) 2013, 2014 Andrew Turner
3 * Copyright (c) 2015 The FreeBSD Foundation
4 * All rights reserved.
5 *
6 * This software was developed by Andrew Turner under
7 * sponsorship from the FreeBSD Foundation.
8 *

--- 13 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
1/*-
2 * Copyright (c) 2013, 2014 Andrew Turner
3 * Copyright (c) 2015 The FreeBSD Foundation
4 * All rights reserved.
5 *
6 * This software was developed by Andrew Turner under
7 * sponsorship from the FreeBSD Foundation.
8 *

--- 13 unchanged lines hidden (view full) ---

22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/arm64/include/armreg.h 289581 2015-10-19 13:20:23Z andrew $
30 * $FreeBSD: head/sys/arm64/include/armreg.h 292954 2015-12-30 17:36:34Z andrew $
31 */
32
33#ifndef _MACHINE_ARMREG_H_
34#define _MACHINE_ARMREG_H_
35
36#define READ_SPECIALREG(reg) \
37({ uint64_t val; \
38 __asm __volatile("mrs %0, " __STRING(reg) : "=&r" (val)); \

--- 77 unchanged lines hidden (view full) ---

116#define ICC_PMR_EL1_PRIO_MASK (0xFFUL)
117
118/* ICC_SRE_EL1 */
119#define ICC_SRE_EL1_SRE (1U << 0)
120
121/* ICC_SRE_EL2 */
122#define ICC_SRE_EL2_EN (1U << 3)
123
31 */
32
33#ifndef _MACHINE_ARMREG_H_
34#define _MACHINE_ARMREG_H_
35
36#define READ_SPECIALREG(reg) \
37({ uint64_t val; \
38 __asm __volatile("mrs %0, " __STRING(reg) : "=&r" (val)); \

--- 77 unchanged lines hidden (view full) ---

116#define ICC_PMR_EL1_PRIO_MASK (0xFFUL)
117
118/* ICC_SRE_EL1 */
119#define ICC_SRE_EL1_SRE (1U << 0)
120
121/* ICC_SRE_EL2 */
122#define ICC_SRE_EL2_EN (1U << 3)
123
124/* ID_AA64DFR0_EL1 */
125#define ID_AA64DFR0_MASK 0xf0f0ffff
126#define ID_AA64DFR0_DEBUG_VER_SHIFT 0
127#define ID_AA64DFR0_DEBUG_VER_MASK (0xf << ID_AA64DFR0_DEBUG_VER_SHIFT)
128#define ID_AA64DFR0_DEBUG_VER(x) ((x) & ID_AA64DFR0_DEBUG_VER_MASK)
129#define ID_AA64DFR0_DEBUG_VER_8 (0x6 << ID_AA64DFR0_DEBUG_VER_SHIFT)
130#define ID_AA64DFR0_TRACE_VER_SHIFT 4
131#define ID_AA64DFR0_TRACE_VER_MASK (0xf << ID_AA64DFR0_TRACE_VER_SHIFT)
132#define ID_AA64DFR0_TRACE_VER(x) ((x) & ID_AA64DFR0_TRACE_VER_MASK)
133#define ID_AA64DFR0_TRACE_VER_NONE (0x0 << ID_AA64DFR0_TRACE_VER_SHIFT)
134#define ID_AA64DFR0_TRACE_VER_IMPL (0x1 << ID_AA64DFR0_TRACE_VER_SHIFT)
135#define ID_AA64DFR0_PMU_VER_SHIFT 8
136#define ID_AA64DFR0_PMU_VER_MASK (0xf << ID_AA64DFR0_PMU_VER_SHIFT)
137#define ID_AA64DFR0_PMU_VER(x) ((x) & ID_AA64DFR0_PMU_VER_MASK)
138#define ID_AA64DFR0_PMU_VER_NONE (0x0 << ID_AA64DFR0_PMU_VER_SHIFT)
139#define ID_AA64DFR0_PMU_VER_3 (0x1 << ID_AA64DFR0_PMU_VER_SHIFT)
140#define ID_AA64DFR0_PMU_VER_IMPL (0xf << ID_AA64DFR0_PMU_VER_SHIFT)
141#define ID_AA64DFR0_BRPS_SHIFT 12
142#define ID_AA64DFR0_BRPS_MASK (0xf << ID_AA64DFR0_BRPS_SHIFT)
143#define ID_AA64DFR0_BRPS(x) \
144 ((((x) >> ID_AA64DFR0_BRPS_SHIFT) & 0xf) + 1)
145#define ID_AA64DFR0_WRPS_SHIFT 20
146#define ID_AA64DFR0_WRPS_MASK (0xf << ID_AA64DFR0_WRPS_SHIFT)
147#define ID_AA64DFR0_WRPS(x) \
148 ((((x) >> ID_AA64DFR0_WRPS_SHIFT) & 0xf) + 1)
149#define ID_AA64DFR0_CTX_CMPS_SHIFT 28
150#define ID_AA64DFR0_CTX_CMPS_MASK (0xf << ID_AA64DFR0_CTX_CMPS_SHIFT)
151#define ID_AA64DFR0_CTX_CMPS(x) \
152 ((((x) >> ID_AA64DFR0_CTX_CMPS_SHIFT) & 0xf) + 1)
153
154/* ID_AA64ISAR0_EL1 */
155#define ID_AA64ISAR0_MASK 0x000ffff0
156#define ID_AA64ISAR0_AES_SHIFT 4
157#define ID_AA64ISAR0_AES_MASK (0xf << ID_AA64ISAR0_AES_SHIFT)
158#define ID_AA64ISAR0_AES(x) ((x) & ID_AA64ISAR0_AES_MASK)
159#define ID_AA64ISAR0_AES_NONE (0x0 << ID_AA64ISAR0_AES_SHIFT)
160#define ID_AA64ISAR0_AES_BASE (0x1 << ID_AA64ISAR0_AES_SHIFT)
161#define ID_AA64ISAR0_AES_PMULL (0x2 << ID_AA64ISAR0_AES_SHIFT)
162#define ID_AA64ISAR0_SHA1_SHIFT 8
163#define ID_AA64ISAR0_SHA1_MASK (0xf << ID_AA64ISAR0_SHA1_SHIFT)
164#define ID_AA64ISAR0_SHA1(x) ((x) & ID_AA64ISAR0_SHA1_MASK)
165#define ID_AA64ISAR0_SHA1_NONE (0x0 << ID_AA64ISAR0_SHA1_SHIFT)
166#define ID_AA64ISAR0_SHA1_BASE (0x1 << ID_AA64ISAR0_SHA1_SHIFT)
167#define ID_AA64ISAR0_SHA2_SHIFT 12
168#define ID_AA64ISAR0_SHA2_MASK (0xf << ID_AA64ISAR0_SHA2_SHIFT)
169#define ID_AA64ISAR0_SHA2(x) ((x) & ID_AA64ISAR0_SHA2_MASK)
170#define ID_AA64ISAR0_SHA2_NONE (0x0 << ID_AA64ISAR0_SHA2_SHIFT)
171#define ID_AA64ISAR0_SHA2_BASE (0x1 << ID_AA64ISAR0_SHA2_SHIFT)
172#define ID_AA64ISAR0_CRC32_SHIFT 16
173#define ID_AA64ISAR0_CRC32_MASK (0xf << ID_AA64ISAR0_CRC32_SHIFT)
174#define ID_AA64ISAR0_CRC32(x) ((x) & ID_AA64ISAR0_CRC32_MASK)
175#define ID_AA64ISAR0_CRC32_NONE (0x0 << ID_AA64ISAR0_CRC32_SHIFT)
176#define ID_AA64ISAR0_CRC32_BASE (0x1 << ID_AA64ISAR0_CRC32_SHIFT)
177
178/* ID_AA64MMFR0_EL1 */
179#define ID_AA64MMFR0_MASK 0xffffffff
180#define ID_AA64MMFR0_PA_RANGE_SHIFT 0
181#define ID_AA64MMFR0_PA_RANGE_MASK (0xf << ID_AA64MMFR0_PA_RANGE_SHIFT)
182#define ID_AA64MMFR0_PA_RANGE(x) ((x) & ID_AA64MMFR0_PA_RANGE_MASK)
183#define ID_AA64MMFR0_PA_RANGE_4G (0x0 << ID_AA64MMFR0_PA_RANGE_SHIFT)
184#define ID_AA64MMFR0_PA_RANGE_64G (0x1 << ID_AA64MMFR0_PA_RANGE_SHIFT)
185#define ID_AA64MMFR0_PA_RANGE_1T (0x2 << ID_AA64MMFR0_PA_RANGE_SHIFT)
186#define ID_AA64MMFR0_PA_RANGE_4T (0x3 << ID_AA64MMFR0_PA_RANGE_SHIFT)
187#define ID_AA64MMFR0_PA_RANGE_16T (0x4 << ID_AA64MMFR0_PA_RANGE_SHIFT)
188#define ID_AA64MMFR0_PA_RANGE_256T (0x5 << ID_AA64MMFR0_PA_RANGE_SHIFT)
189#define ID_AA64MMFR0_ASID_BITS_SHIFT 4
190#define ID_AA64MMFR0_ASID_BITS_MASK (0xf << ID_AA64MMFR0_ASID_BITS_SHIFT)
191#define ID_AA64MMFR0_ASID_BITS(x) ((x) & ID_AA64MMFR0_ASID_BITS_MASK)
192#define ID_AA64MMFR0_ASID_BITS_8 (0x0 << ID_AA64MMFR0_ASID_BITS_SHIFT)
193#define ID_AA64MMFR0_ASID_BITS_16 (0x2 << ID_AA64MMFR0_ASID_BITS_SHIFT)
194#define ID_AA64MMFR0_BIGEND_SHIFT 8
195#define ID_AA64MMFR0_BIGEND_MASK (0xf << ID_AA64MMFR0_BIGEND_SHIFT)
196#define ID_AA64MMFR0_BIGEND(x) ((x) & ID_AA64MMFR0_BIGEND_MASK)
197#define ID_AA64MMFR0_BIGEND_FIXED (0x0 << ID_AA64MMFR0_BIGEND_SHIFT)
198#define ID_AA64MMFR0_BIGEND_MIXED (0x1 << ID_AA64MMFR0_BIGEND_SHIFT)
199#define ID_AA64MMFR0_S_NS_MEM_SHIFT 12
200#define ID_AA64MMFR0_S_NS_MEM_MASK (0xf << ID_AA64MMFR0_S_NS_MEM_SHIFT)
201#define ID_AA64MMFR0_S_NS_MEM(x) ((x) & ID_AA64MMFR0_S_NS_MEM_MASK)
202#define ID_AA64MMFR0_S_NS_MEM_NONE (0x0 << ID_AA64MMFR0_S_NS_MEM_SHIFT)
203#define ID_AA64MMFR0_S_NS_MEM_DISTINCT (0x1 << ID_AA64MMFR0_S_NS_MEM_SHIFT)
204#define ID_AA64MMFR0_BIGEND_EL0_SHIFT 16
205#define ID_AA64MMFR0_BIGEND_EL0_MASK (0xf << ID_AA64MMFR0_BIGEND_EL0_SHIFT)
206#define ID_AA64MMFR0_BIGEND_EL0(x) ((x) & ID_AA64MMFR0_BIGEND_EL0_MASK)
207#define ID_AA64MMFR0_BIGEND_EL0_FIXED (0x0 << ID_AA64MMFR0_BIGEND_EL0_SHIFT)
208#define ID_AA64MMFR0_BIGEND_EL0_MIXED (0x1 << ID_AA64MMFR0_BIGEND_EL0_SHIFT)
209#define ID_AA64MMFR0_TGRAN16_SHIFT 20
210#define ID_AA64MMFR0_TGRAN16_MASK (0xf << ID_AA64MMFR0_TGRAN16_SHIFT)
211#define ID_AA64MMFR0_TGRAN16(x) ((x) & ID_AA64MMFR0_TGRAN16_MASK)
212#define ID_AA64MMFR0_TGRAN16_NONE (0x0 << ID_AA64MMFR0_TGRAN16_SHIFT)
213#define ID_AA64MMFR0_TGRAN16_IMPL (0x1 << ID_AA64MMFR0_TGRAN16_SHIFT)
214#define ID_AA64MMFR0_TGRAN64_SHIFT 24
215#define ID_AA64MMFR0_TGRAN64_MASK (0xf << ID_AA64MMFR0_TGRAN64_SHIFT)
216#define ID_AA64MMFR0_TGRAN64(x) ((x) & ID_AA64MMFR0_TGRAN64_MASK)
217#define ID_AA64MMFR0_TGRAN64_IMPL (0x0 << ID_AA64MMFR0_TGRAN64_SHIFT)
218#define ID_AA64MMFR0_TGRAN64_NONE (0xf << ID_AA64MMFR0_TGRAN64_SHIFT)
219#define ID_AA64MMFR0_TGRAN4_SHIFT 28
220#define ID_AA64MMFR0_TGRAN4_MASK (0xf << ID_AA64MMFR0_TGRAN4_SHIFT)
221#define ID_AA64MMFR0_TGRAN4(x) ((x) & ID_AA64MMFR0_TGRAN4_MASK)
222#define ID_AA64MMFR0_TGRAN4_IMPL (0x0 << ID_AA64MMFR0_TGRAN4_SHIFT)
223#define ID_AA64MMFR0_TGRAN4_NONE (0xf << ID_AA64MMFR0_TGRAN4_SHIFT)
224
124/* ID_AA64PFR0_EL1 */
225/* ID_AA64PFR0_EL1 */
125#define ID_AA64PFR0_EL0_MASK (0xf << 0)
126#define ID_AA64PFR0_EL1_MASK (0xf << 4)
127#define ID_AA64PFR0_EL2_MASK (0xf << 8)
128#define ID_AA64PFR0_EL3_MASK (0xf << 12)
129#define ID_AA64PFR0_FP_MASK (0xf << 16)
130#define ID_AA64PFR0_FP_IMPL (0x0 << 16) /* Floating-point implemented */
131#define ID_AA64PFR0_FP_NONE (0xf << 16) /* Floating-point not implemented */
132#define ID_AA64PFR0_ADV_SIMD_MASK (0xf << 20)
133#define ID_AA64PFR0_GIC_SHIFT (24)
134#define ID_AA64PFR0_GIC_BITS (0x4) /* Number of bits in GIC field */
135#define ID_AA64PFR0_GIC_MASK (0xf << ID_AA64PFR0_GIC_SHIFT)
136#define ID_AA64PFR0_GIC_CPUIF_EN (0x1 << ID_AA64PFR0_GIC_SHIFT)
226#define ID_AA64PFR0_MASK 0x0fffffff
227#define ID_AA64PFR0_EL0_SHIFT 0
228#define ID_AA64PFR0_EL0_MASK (0xf << ID_AA64PFR0_EL0_SHIFT)
229#define ID_AA64PFR0_EL0(x) ((x) & ID_AA64PFR0_EL0_MASK)
230#define ID_AA64PFR0_EL0_64 (1 << ID_AA64PFR0_EL0_SHIFT)
231#define ID_AA64PFR0_EL0_64_32 (2 << ID_AA64PFR0_EL0_SHIFT)
232#define ID_AA64PFR0_EL1_SHIFT 4
233#define ID_AA64PFR0_EL1_MASK (0xf << ID_AA64PFR0_EL1_SHIFT)
234#define ID_AA64PFR0_EL1(x) ((x) & ID_AA64PFR0_EL1_MASK)
235#define ID_AA64PFR0_EL1_64 (1 << ID_AA64PFR0_EL1_SHIFT)
236#define ID_AA64PFR0_EL1_64_32 (2 << ID_AA64PFR0_EL1_SHIFT)
237#define ID_AA64PFR0_EL2_SHIFT 8
238#define ID_AA64PFR0_EL2_MASK (0xf << ID_AA64PFR0_EL2_SHIFT)
239#define ID_AA64PFR0_EL2(x) ((x) & ID_AA64PFR0_EL2_MASK)
240#define ID_AA64PFR0_EL2_NONE (0 << ID_AA64PFR0_EL2_SHIFT)
241#define ID_AA64PFR0_EL2_64 (1 << ID_AA64PFR0_EL2_SHIFT)
242#define ID_AA64PFR0_EL2_64_32 (2 << ID_AA64PFR0_EL2_SHIFT)
243#define ID_AA64PFR0_EL3_SHIFT 12
244#define ID_AA64PFR0_EL3_MASK (0xf << ID_AA64PFR0_EL3_SHIFT)
245#define ID_AA64PFR0_EL3(x) ((x) & ID_AA64PFR0_EL3_MASK)
246#define ID_AA64PFR0_EL3_NONE (0 << ID_AA64PFR0_EL3_SHIFT)
247#define ID_AA64PFR0_EL3_64 (1 << ID_AA64PFR0_EL3_SHIFT)
248#define ID_AA64PFR0_EL3_64_32 (2 << ID_AA64PFR0_EL3_SHIFT)
249#define ID_AA64PFR0_FP_SHIFT 16
250#define ID_AA64PFR0_FP_MASK (0xf << ID_AA64PFR0_FP_SHIFT)
251#define ID_AA64PFR0_FP(x) ((x) & ID_AA64PFR0_FP_MASK)
252#define ID_AA64PFR0_FP_IMPL (0x0 << ID_AA64PFR0_FP_SHIFT)
253#define ID_AA64PFR0_FP_NONE (0xf << ID_AA64PFR0_FP_SHIFT)
254#define ID_AA64PFR0_ADV_SIMD_SHIFT 20
255#define ID_AA64PFR0_ADV_SIMD_MASK (0xf << ID_AA64PFR0_ADV_SIMD_SHIFT)
256#define ID_AA64PFR0_ADV_SIMD(x) ((x) & ID_AA64PFR0_ADV_SIMD_MASK)
257#define ID_AA64PFR0_ADV_SIMD_IMPL (0x0 << ID_AA64PFR0_ADV_SIMD_SHIFT)
258#define ID_AA64PFR0_ADV_SIMD_NONE (0xf << ID_AA64PFR0_ADV_SIMD_SHIFT)
259#define ID_AA64PFR0_GIC_BITS 0x4 /* Number of bits in GIC field */
260#define ID_AA64PFR0_GIC_SHIFT 24
261#define ID_AA64PFR0_GIC_MASK (0xf << ID_AA64PFR0_GIC_SHIFT)
262#define ID_AA64PFR0_GIC(x) ((x) & ID_AA64PFR0_GIC_MASK)
263#define ID_AA64PFR0_GIC_CPUIF_NONE (0x0 << ID_AA64PFR0_GIC_SHIFT)
264#define ID_AA64PFR0_GIC_CPUIF_EN (0x1 << ID_AA64PFR0_GIC_SHIFT)
137
138/* MAIR_EL1 - Memory Attribute Indirection Register */
139#define MAIR_ATTR_MASK(idx) (0xff << ((n)* 8))
140#define MAIR_ATTR(attr, idx) ((attr) << ((idx) * 8))
141
142/* SCTLR_EL1 - System Control Register */
143#define SCTLR_RES0 0xc8222400 /* Reserved, write 0 */
144#define SCTLR_RES1 0x30d00800 /* Reserved, write 1 */

--- 120 unchanged lines hidden ---
265
266/* MAIR_EL1 - Memory Attribute Indirection Register */
267#define MAIR_ATTR_MASK(idx) (0xff << ((n)* 8))
268#define MAIR_ATTR(attr, idx) ((attr) << ((idx) * 8))
269
270/* SCTLR_EL1 - System Control Register */
271#define SCTLR_RES0 0xc8222400 /* Reserved, write 0 */
272#define SCTLR_RES1 0x30d00800 /* Reserved, write 1 */

--- 120 unchanged lines hidden ---