nt9856x/loader/Include/gic.h

196 lines
5.8 KiB
C
Executable File

#ifndef _ASM_ARMV8_GIC_H_
#define _ASM_ARMV8_GIC_H_
//#include "FLibARM.h"
#define UART_INTID 43
#define GIC_UART_INTID (UART_INTID + 32)
#if 0
/*
* Distributor layout
*/
#define GICD_CTLR 0x0000
#define GICD_TYPER 0x0004
#define GICD_IIDR 0x0008
#define GICD_IGROUP 0x0080
#define GICD_ISENABLE 0x0100
#define GICD_ICENABLE 0x0180
#define GICD_ISPEND 0x0200
#define GICD_ICPEND 0x0280
#define GICD_ISACTIVE 0x0300
#define GICD_ICACTIVE 0x0380
#define GICD_IPRIORITY 0x0400
#define GICD_ITARGETS 0x0800
#define GICD_ICFG 0x0c00
#define GICD_PPISR 0x0d00
#define GICD_SPISR 0x0d04
#define GICD_SGIR 0x0f00
#define GICD_CPENDSGI 0x0f10
#define GICD_SPENDSGI 0x0f20
#define GICD_PIDR4 0x0fd0
#define GICD_PIDR5 0x0fd4
#define GICD_PIDR6 0x0fd8
#define GICD_PIDR7 0x0fdc
#define GICD_PIDR0 0x0fe0
#define GICD_PIDR1 0x0fe4
#define GICD_PIDR2 0x0fe8
#define GICD_PIDR3 0x0fec
#define GICD_CIDR0 0x0ff0
#define GICD_CIDR1 0x0ff4
#define GICD_CIDR2 0x0ff8
#define GICD_CIDR3 0x0ffc
/*
* CPU Interface layout
*/
#define GICC_CTLR 0x0000
#define GICC_PMR 0x0004
#define GICC_BPR 0x0008
#define GICC_IAR 0x000c
#define GICC_EOIR 0x0010
#define GICC_RPR 0x0014
#define GICC_HPPIR 0x0018
#define GICC_ABPR 0x001c
#define GICC_AIAR 0x0020
#define GICC_AEOIR 0x0024
#define GICC_AHPPIR 0x0028
#define GICC_APR0 0x00d0
#define GICC_NSAPR0 0x00e0
#define GICC_IIDR 0x00fc
#define GICC_DIR 0x1000
#endif
#define MAX_SPIS 480
#define MAX_PPIS 14
#define MAX_SGIS 16
#define MIN_SGI_ID 0
#define MIN_PPI_ID 16
#define MIN_SPI_ID 32
#define GRP0 0
#define GRP1 1
#define _GICD_ 0x1000
#define _GICC_ 0x2000
#define _GICH_ 0x4000
#define _GICV_ 0x6000
#define GIC_PRI_MASK 0xff
#define GIC_HIGHEST_SEC_PRIORITY 0
#define GIC_LOWEST_SEC_PRIORITY 127
#define GIC_HIGHEST_NS_PRIORITY 128
#define GIC_LOWEST_NS_PRIORITY 254 /* 255 would disable an interrupt */
#define GIC_SPURIOUS_INTERRUPT 1023
#define GIC_TARGET_CPU_MASK 0xff
/* Distributor interface definitions */
#define GICD_CTLR _GICD_ + 0x0
#define GICD_TYPER _GICD_ + 0x4
#define GICD_IGROUPR _GICD_ + 0x80
#define GICD_ISENABLER _GICD_ + 0x100
#define GICD_ICENABLER _GICD_ + 0x180
#define GICD_ISPENDR _GICD_ + 0x200
#define GICD_ICPENDR _GICD_ + 0x280
#define GICD_ISACTIVER _GICD_ + 0x300
#define GICD_ICACTIVER _GICD_ + 0x380
#define GICD_IPRIORITYR _GICD_ + 0x400
#define GICD_ITARGETSR _GICD_ + 0x800
#define GICD_ICFGR _GICD_ + 0xC00
#define GICD_SGIR _GICD_ + 0xF00
#define GICD_CPENDSGIR _GICD_ + 0xF10
#define GICD_SPENDSGIR _GICD_ + 0xF20
#define IGROUPR_SHIFT 5
#define ISENABLER_SHIFT 5
#define ICENABLER_SHIFT ISENABLER_SHIFT
#define ISPENDR_SHIFT 5
#define ICPENDR_SHIFT ISPENDR_SHIFT
#define ISACTIVER_SHIFT 5
#define ICACTIVER_SHIFT ISACTIVER_SHIFT
#define IPRIORITYR_SHIFT 2
#define ITARGETSR_SHIFT 2
#define ICFGR_SHIFT 4
#define CPENDSGIR_SHIFT 2
#define SPENDSGIR_SHIFT CPENDSGIR_SHIFT
/* GICD_TYPER bit definitions */
#define IT_LINES_NO_MASK 0x1f
/* GICD_ICFGR bit definitions */
#define LEVEL_SENSITIVE 0x0
#define TRIGGER_SENSITIVE 0x1
/* Physical CPU Interface registers */
#define GICC_CTLR _GICC_ + 0x0
#define GICC_PMR _GICC_ + 0x4
#define GICC_BPR _GICC_ + 0x8
#define GICC_IAR _GICC_ + 0xC
#define GICC_EOIR _GICC_ + 0x10
#define GICC_RPR _GICC_ + 0x14
#define GICC_HPPIR _GICC_ + 0x18
#define GICC_AHPPIR _GICC_ + 0x28
#define GICC_IIDR _GICC_ + 0xFC
#define GICC_DIR _GICC_ + 0x1000
#define GICC_PRIODROP _GICC_ + GICC_EOIR
/* GICC_CTLR bit definitions */
#define EOI_MODE_NS (1 << 10)
#define EOI_MODE_S (1 << 9)
#define IRQ_BYP_DIS_GRP1 (1 << 8)
#define FIQ_BYP_DIS_GRP1 (1 << 7)
#define IRQ_BYP_DIS_GRP0 (1 << 6)
#define FIQ_BYP_DIS_GRP0 (1 << 5)
#define CBPR (1 << 4)
#define FIQ_EN (1 << 3)
#define ACK_CTL (1 << 2)
#define ENABLE_GRP1 (1 << 1)
#define ENABLE_GRP0 (1 << 0)
/* GICC_IIDR bit masks and shifts */
#define GICC_IIDR_PID_SHIFT 20
#define GICC_IIDR_ARCH_SHIFT 16
#define GICC_IIDR_REV_SHIFT 12
#define GICC_IIDR_IMP_SHIFT 0
#define GICC_IIDR_PID_MASK 0xfff
#define GICC_IIDR_ARCH_MASK 0xf
#define GICC_IIDR_REV_MASK 0xf
#define GICC_IIDR_IMP_MASK 0xfff
/* HYP view virtual CPU Interface registers */
#define GICH_CTL 0x0
#define GICH_VTR 0x4
#define GICH_ELRSR0 0x30
#define GICH_ELRSR1 0x34
#define GICH_APR0 0xF0
#define GICH_LR_BASE 0x100
/* Virtual CPU Interface registers */
#define GICV_CTL 0x0
#define GICV_PRIMASK 0x4
#define GICV_BP 0x8
#define GICV_INTACK 0xC
#define GICV_EOI 0x10
#define GICV_RUNNINGPRI 0x14
#define GICV_HIGHESTPEND 0x18
#define GICV_DEACTIVATE 0x1000
extern void nvt_enable_irq(int number);
extern void nvt_disable_irq(int number);
extern void arm_gic_cpuif_setup(void);
extern void arm_gic_distif_setup(void);
extern void gicd_write_igroupr(UINT32 id, UINT32 val);
extern void gicd_write_ipriorityr(UINT32 id, UINT32 val);
extern UINT32 gicc_get_IAR(void);
extern void gicc_set_EOIR(UINT32 val);
#endif /* _ASM_ARMV8_GIC_H_ */