blob: 00cbd1d924d258fc2a19837d494684b572325b0c [file] [log] [blame]
Achin Gupta92712a52015-09-03 14:18:02 +01001/*
Jeenu Viswambharanb6982c02018-03-22 08:57:52 +00002 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
Achin Gupta92712a52015-09-03 14:18:02 +01003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Achin Gupta92712a52015-09-03 14:18:02 +01005 */
6
7#ifndef __GIC_COMMON_H__
8#define __GIC_COMMON_H__
9
Jeenu Viswambharan837cc9c2018-08-02 10:14:12 +010010#include <utils_def.h>
11
Achin Gupta92712a52015-09-03 14:18:02 +010012/*******************************************************************************
13 * GIC Distributor interface general definitions
14 ******************************************************************************/
15/* Constants to categorise interrupts */
16#define MIN_SGI_ID 0
Jeenu Viswambharan522a4652017-09-22 08:32:09 +010017#define MIN_SEC_SGI_ID 8
Achin Gupta92712a52015-09-03 14:18:02 +010018#define MIN_PPI_ID 16
19#define MIN_SPI_ID 32
Soby Mathew327548c2017-07-13 15:19:51 +010020#define MAX_SPI_ID 1019
21
22#define TOTAL_SPI_INTR_NUM (MAX_SPI_ID - MIN_SPI_ID + 1)
23#define TOTAL_PCPU_INTR_NUM (MIN_SPI_ID - MIN_SGI_ID)
Achin Gupta92712a52015-09-03 14:18:02 +010024
25/* Mask for the priority field common to all GIC interfaces */
26#define GIC_PRI_MASK 0xff
27
Jeenu Viswambharan4684bce2017-09-22 08:32:09 +010028/* Mask for the configuration field common to all GIC interfaces */
29#define GIC_CFG_MASK 0x3
30
Achin Gupta92712a52015-09-03 14:18:02 +010031/* Constant to indicate a spurious interrupt in all GIC versions */
32#define GIC_SPURIOUS_INTERRUPT 1023
33
Jeenu Viswambharanb6982c02018-03-22 08:57:52 +000034/* Interrupt configurations: 2-bit fields with LSB reserved */
35#define GIC_INTR_CFG_LEVEL (0 << 1)
36#define GIC_INTR_CFG_EDGE (1 << 1)
Jeenu Viswambharanaeb267c2017-09-22 08:32:09 +010037
Achin Gupta92712a52015-09-03 14:18:02 +010038/* Constants to categorise priorities */
Jeenu Viswambharan837cc9c2018-08-02 10:14:12 +010039#define GIC_HIGHEST_SEC_PRIORITY U(0x00)
40#define GIC_LOWEST_SEC_PRIORITY U(0x7f)
41#define GIC_HIGHEST_NS_PRIORITY U(0x80)
42#define GIC_LOWEST_NS_PRIORITY U(0xfe) /* 0xff would disable all interrupts */
Achin Gupta92712a52015-09-03 14:18:02 +010043
44/*******************************************************************************
45 * GIC Distributor interface register offsets that are common to GICv3 & GICv2
46 ******************************************************************************/
47#define GICD_CTLR 0x0
48#define GICD_TYPER 0x4
49#define GICD_IIDR 0x8
50#define GICD_IGROUPR 0x80
51#define GICD_ISENABLER 0x100
52#define GICD_ICENABLER 0x180
53#define GICD_ISPENDR 0x200
54#define GICD_ICPENDR 0x280
55#define GICD_ISACTIVER 0x300
56#define GICD_ICACTIVER 0x380
57#define GICD_IPRIORITYR 0x400
58#define GICD_ICFGR 0xc00
59#define GICD_NSACR 0xe00
60
61/* GICD_CTLR bit definitions */
62#define CTLR_ENABLE_G0_SHIFT 0
63#define CTLR_ENABLE_G0_MASK 0x1
64#define CTLR_ENABLE_G0_BIT (1 << CTLR_ENABLE_G0_SHIFT)
65
66
67/*******************************************************************************
68 * GIC Distributor interface register constants that are common to GICv3 & GICv2
69 ******************************************************************************/
70#define PIDR2_ARCH_REV_SHIFT 4
71#define PIDR2_ARCH_REV_MASK 0xf
72
73/* GICv3 revision as reported by the PIDR2 register */
74#define ARCH_REV_GICV3 0x3
75/* GICv2 revision as reported by the PIDR2 register */
76#define ARCH_REV_GICV2 0x2
Etienne Carriere0a8c3532017-11-05 22:57:38 +010077/* GICv1 revision as reported by the PIDR2 register */
78#define ARCH_REV_GICV1 0x1
Achin Gupta92712a52015-09-03 14:18:02 +010079
80#define IGROUPR_SHIFT 5
81#define ISENABLER_SHIFT 5
82#define ICENABLER_SHIFT ISENABLER_SHIFT
83#define ISPENDR_SHIFT 5
84#define ICPENDR_SHIFT ISPENDR_SHIFT
85#define ISACTIVER_SHIFT 5
86#define ICACTIVER_SHIFT ISACTIVER_SHIFT
87#define IPRIORITYR_SHIFT 2
Jeenu Viswambharandce70b32017-09-22 08:32:09 +010088#define ITARGETSR_SHIFT 2
Achin Gupta92712a52015-09-03 14:18:02 +010089#define ICFGR_SHIFT 4
90#define NSACR_SHIFT 4
91
92/* GICD_TYPER shifts and masks */
93#define TYPER_IT_LINES_NO_SHIFT 0
94#define TYPER_IT_LINES_NO_MASK 0x1f
95
96/* Value used to initialize Normal world interrupt priorities four at a time */
97#define GICD_IPRIORITYR_DEF_VAL \
98 (GIC_HIGHEST_NS_PRIORITY | \
99 (GIC_HIGHEST_NS_PRIORITY << 8) | \
100 (GIC_HIGHEST_NS_PRIORITY << 16) | \
101 (GIC_HIGHEST_NS_PRIORITY << 24))
102
Achin Gupta92712a52015-09-03 14:18:02 +0100103#endif /* __GIC_COMMON_H__ */