blob: 3ea9441df5cb4e6b4e8a8e6c922d9ffe7bf3ec99 [file] [log] [blame]
/*
*
* Copyright ARM Ltd 2007. All rights reserved.
*
* Public header file for the MPCore Interrupt Distributor.
* This file contains definitions of the CT11MPCore primary GIC registers.
*/
#ifndef __MP_GIC_H__
#define __MP_GIC_H__
#define PERIPHBASE MEMMAP_CPU_PMR_REG_BASE // Default, hard-wired test chip internal peripheral base address
// Macro to construct code for GIC register accesses, from definitions below
#define GIC_REGISTER(offset) (*((volatile unsigned int*)(PERIPHBASE + offset)))
// CPU Interface registers
#define GIC_CPUControl GIC_REGISTER(0x0100)
#define GIC_PriorityMask GIC_REGISTER(0x0104)
#define GIC_BinaryPoint GIC_REGISTER(0x0108)
#define GIC_Acknowledge GIC_REGISTER(0x010C)
#define GIC_EndInterrupt GIC_REGISTER(0x0110)
#define GIC_Running GIC_REGISTER(0x0114)
#define GIC_Pending GIC_REGISTER(0x0118)
// Aliases of CPU 1,2,3 registers for CPU0
#define GIC_Priority1 GIC_REGISTER(0x0304)
#define GIC_Priority2 GIC_REGISTER(0x0404)
#define GIC_Priority3 GIC_REGISTER(0x0504)
// Distribution registers
#define GIC_Control GIC_REGISTER(0x1000)
#define GIC_Type GIC_REGISTER(0x1004)
#define GIC_SetEnable0_31 GIC_REGISTER(0x1100)
#define GIC_SetEnable32_63 GIC_REGISTER(0x1104)
#define GIC_SetEnable0_31_offset 0x1100
#define GIC_ClearEnable0_31 GIC_REGISTER(0x1180)
#define GIC_ClearEnable32_63 GIC_REGISTER(0x1184)
#define GIC_ClearEnable0_31_offset 0x1180
#define GIC_SetPending0_31 GIC_REGISTER(0x1200)
#define GIC_SetPending32_63 GIC_REGISTER(0x1204)
#define GIC_ClearPending0_31 GIC_REGISTER(0x1280)
#define GIC_ClearPending32_63 GIC_REGISTER(0x1284)
#define GIC_Active0_31 GIC_REGISTER(0x1300)
#define GIC_Active32_63 GIC_REGISTER(0x1304)
#define GIC_Priority0_3 GIC_REGISTER(0x1400) // ARM11 MPCore GIC IDs 16 - 28 and 48 are not used
#define GIC_Priority4_7 GIC_REGISTER(0x1404)
#define GIC_Priority8_11 GIC_REGISTER(0x1408)
#define GIC_Priority12_15 GIC_REGISTER(0x140C)
#define GIC_Priority28_31 GIC_REGISTER(0x141C)
#define GIC_Priority32_35 GIC_REGISTER(0x1420)
#define GIC_Priority36_39 GIC_REGISTER(0x1424)
#define GIC_Priority40_43 GIC_REGISTER(0x1428)
#define GIC_Priority44_47 GIC_REGISTER(0x142C)
#define GIC_Priority48_51 GIC_REGISTER(0x1430)
#define GIC_Priority52_55 GIC_REGISTER(0x1434)
#define GIC_Priority56_59 GIC_REGISTER(0x1438)
#define GIC_Priority60_63 GIC_REGISTER(0x143C)
#define GIC_Priority0_3_offset 0x1400
#define GIC_Priority60_63_offset 0x143C
#define GIC_CPUTarget0_3 GIC_REGISTER(0x1800) // ARM11 MPCore GIC IDs 16 - 28 and 48 are not used
#define GIC_CPUTarget4_7 GIC_REGISTER(0x1804)
#define GIC_CPUTarget8_11 GIC_REGISTER(0x1808)
#define GIC_CPUTarget12_15 GIC_REGISTER(0x180C)
#define GIC_CPUTarget28_31 GIC_REGISTER(0x181C)
#define GIC_CPUTarget32_35 GIC_REGISTER(0x1820)
#define GIC_CPUTarget36_39 GIC_REGISTER(0x1824)
#define GIC_CPUTarget40_43 GIC_REGISTER(0x1828)
#define GIC_CPUTarget44_47 GIC_REGISTER(0x182C)
#define GIC_CPUTarget48_51 GIC_REGISTER(0x1830)
#define GIC_CPUTarget52_55 GIC_REGISTER(0x1834)
#define GIC_CPUTarget56_59 GIC_REGISTER(0x1838)
#define GIC_CPUTarget60_63 GIC_REGISTER(0x183C)
#define GIC_CPUTarget0_3_offset 0x1800
#define GIC_CPUTarget60_63_offset 0x183C
#define GIC_Configuration0_15 GIC_REGISTER(0x1C00)
#define GIC_Configuration16_31 GIC_REGISTER(0x1C04)
#define GIC_Configuration32_47 GIC_REGISTER(0x1C08)
#define GIC_Configuration48_63 GIC_REGISTER(0x1C0C)
#define GIC_SoftInt GIC_REGISTER(0x1F00)
#define GIC_GICPeriphID GIC_REGISTER(0x1FD0)
#define GIC_GICPCellID GIC_REGISTER(0x1FFC)
#define GIC1_Priority32_35_offset 0x1420
#define GIC1_Priority92_95_offset 0x145C
// CPU interface values
#define GIC_CPU_CONTROL_DISABLE 0
#define GIC_CPU_CONTROL_ENABLE 1
#define GIC_PREEMPT_ALL 3
#define GIC_INT_ACK_MASK 0x000003FF
#define GIC_INT_ACK_CPUID_LSB 10
#define GIC_INT_ACK_CPUID_MASK (0x7<<GIC_INT_ACK_CPUID_LSB)
// Distribution values
#define GIC_CONTROL_DISABLE 0
#define GIC_CONTROL_ENABLE 1
#define GIC_CLEAR_ENABLE_ALL 0xFFFFFFFF
#define GIC_SET_ENABLE_ALL 0xFFFFFFFF
#define GIC_CLEAR_PENDING_ALL 0xFFFFFFFF
#define GIC_INTERRUPTS_PER_WORD 32
#define GIC_BYTES_PER_WORD 4
#define GIC_PRIORITY_HIGHEST_ALL 0x00000000
#define GIC_PRIORITIES_PER_WORD 4
#define GIC_CPU_TARGETS_PER_WORD 4
#define GIC_CPU_TARGETS_ALL_CPU0_1 0x03030303
#define GIC_CPU_TARGETS_NONE 0x00000000
#define GIC_CONFIG_ALL_LEVEL_1N 0x55555555
#define GIC_PRIORITY_MASK_LOWEST 0xFF
#define GIC_SGI_CPULIST_LSB 16
#define GIC_SGI_ID_LSB 0
// MPCore GIC interrupt IDs
#define MP_BERLIN_INTR_ID(id) (id + 32) // berlin interrupts starts from ID 32
#define INT_ENABLE 1
#define INT_DISABLE 0
#endif // __MP_GIC_H__