1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef GICV2_PRIVATE_H 8*91f16700Schasinglulu #define GICV2_PRIVATE_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <drivers/arm/gicv2.h> 13*91f16700Schasinglulu #include <lib/mmio.h> 14*91f16700Schasinglulu 15*91f16700Schasinglulu /******************************************************************************* 16*91f16700Schasinglulu * Private function prototypes 17*91f16700Schasinglulu ******************************************************************************/ 18*91f16700Schasinglulu void gicv2_spis_configure_defaults(uintptr_t gicd_base); 19*91f16700Schasinglulu void gicv2_secure_spis_configure_props(uintptr_t gicd_base, 20*91f16700Schasinglulu const interrupt_prop_t *interrupt_props, 21*91f16700Schasinglulu unsigned int interrupt_props_num); 22*91f16700Schasinglulu void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base, 23*91f16700Schasinglulu const interrupt_prop_t *interrupt_props, 24*91f16700Schasinglulu unsigned int interrupt_props_num); 25*91f16700Schasinglulu unsigned int gicv2_get_cpuif_id(uintptr_t base); 26*91f16700Schasinglulu 27*91f16700Schasinglulu /******************************************************************************* 28*91f16700Schasinglulu * GIC Distributor interface accessors for reading entire registers 29*91f16700Schasinglulu ******************************************************************************/ 30*91f16700Schasinglulu static inline unsigned int gicd_read_pidr2(uintptr_t base) 31*91f16700Schasinglulu { 32*91f16700Schasinglulu return mmio_read_32(base + GICD_PIDR2_GICV2); 33*91f16700Schasinglulu } 34*91f16700Schasinglulu 35*91f16700Schasinglulu /******************************************************************************* 36*91f16700Schasinglulu * GIC Distributor interface accessors for writing entire registers 37*91f16700Schasinglulu ******************************************************************************/ 38*91f16700Schasinglulu static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id) 39*91f16700Schasinglulu { 40*91f16700Schasinglulu return mmio_read_8(base + GICD_ITARGETSR + id); 41*91f16700Schasinglulu } 42*91f16700Schasinglulu 43*91f16700Schasinglulu static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id, 44*91f16700Schasinglulu unsigned int target) 45*91f16700Schasinglulu { 46*91f16700Schasinglulu uint8_t val = target & GIC_TARGET_CPU_MASK; 47*91f16700Schasinglulu 48*91f16700Schasinglulu mmio_write_8(base + GICD_ITARGETSR + id, val); 49*91f16700Schasinglulu } 50*91f16700Schasinglulu 51*91f16700Schasinglulu static inline void gicd_write_sgir(uintptr_t base, unsigned int val) 52*91f16700Schasinglulu { 53*91f16700Schasinglulu mmio_write_32(base + GICD_SGIR, val); 54*91f16700Schasinglulu } 55*91f16700Schasinglulu 56*91f16700Schasinglulu /******************************************************************************* 57*91f16700Schasinglulu * GIC CPU interface accessors for reading entire registers 58*91f16700Schasinglulu ******************************************************************************/ 59*91f16700Schasinglulu 60*91f16700Schasinglulu static inline unsigned int gicc_read_ctlr(uintptr_t base) 61*91f16700Schasinglulu { 62*91f16700Schasinglulu return mmio_read_32(base + GICC_CTLR); 63*91f16700Schasinglulu } 64*91f16700Schasinglulu 65*91f16700Schasinglulu static inline unsigned int gicc_read_pmr(uintptr_t base) 66*91f16700Schasinglulu { 67*91f16700Schasinglulu return mmio_read_32(base + GICC_PMR); 68*91f16700Schasinglulu } 69*91f16700Schasinglulu 70*91f16700Schasinglulu static inline unsigned int gicc_read_BPR(uintptr_t base) 71*91f16700Schasinglulu { 72*91f16700Schasinglulu return mmio_read_32(base + GICC_BPR); 73*91f16700Schasinglulu } 74*91f16700Schasinglulu 75*91f16700Schasinglulu static inline unsigned int gicc_read_IAR(uintptr_t base) 76*91f16700Schasinglulu { 77*91f16700Schasinglulu return mmio_read_32(base + GICC_IAR); 78*91f16700Schasinglulu } 79*91f16700Schasinglulu 80*91f16700Schasinglulu static inline unsigned int gicc_read_EOIR(uintptr_t base) 81*91f16700Schasinglulu { 82*91f16700Schasinglulu return mmio_read_32(base + GICC_EOIR); 83*91f16700Schasinglulu } 84*91f16700Schasinglulu 85*91f16700Schasinglulu static inline unsigned int gicc_read_hppir(uintptr_t base) 86*91f16700Schasinglulu { 87*91f16700Schasinglulu return mmio_read_32(base + GICC_HPPIR); 88*91f16700Schasinglulu } 89*91f16700Schasinglulu 90*91f16700Schasinglulu static inline unsigned int gicc_read_ahppir(uintptr_t base) 91*91f16700Schasinglulu { 92*91f16700Schasinglulu return mmio_read_32(base + GICC_AHPPIR); 93*91f16700Schasinglulu } 94*91f16700Schasinglulu 95*91f16700Schasinglulu static inline unsigned int gicc_read_dir(uintptr_t base) 96*91f16700Schasinglulu { 97*91f16700Schasinglulu return mmio_read_32(base + GICC_DIR); 98*91f16700Schasinglulu } 99*91f16700Schasinglulu 100*91f16700Schasinglulu static inline unsigned int gicc_read_iidr(uintptr_t base) 101*91f16700Schasinglulu { 102*91f16700Schasinglulu return mmio_read_32(base + GICC_IIDR); 103*91f16700Schasinglulu } 104*91f16700Schasinglulu 105*91f16700Schasinglulu static inline unsigned int gicc_read_rpr(uintptr_t base) 106*91f16700Schasinglulu { 107*91f16700Schasinglulu return mmio_read_32(base + GICC_RPR); 108*91f16700Schasinglulu } 109*91f16700Schasinglulu 110*91f16700Schasinglulu /******************************************************************************* 111*91f16700Schasinglulu * GIC CPU interface accessors for writing entire registers 112*91f16700Schasinglulu ******************************************************************************/ 113*91f16700Schasinglulu 114*91f16700Schasinglulu static inline void gicc_write_ctlr(uintptr_t base, unsigned int val) 115*91f16700Schasinglulu { 116*91f16700Schasinglulu mmio_write_32(base + GICC_CTLR, val); 117*91f16700Schasinglulu } 118*91f16700Schasinglulu 119*91f16700Schasinglulu static inline void gicc_write_pmr(uintptr_t base, unsigned int val) 120*91f16700Schasinglulu { 121*91f16700Schasinglulu mmio_write_32(base + GICC_PMR, val); 122*91f16700Schasinglulu } 123*91f16700Schasinglulu 124*91f16700Schasinglulu static inline void gicc_write_BPR(uintptr_t base, unsigned int val) 125*91f16700Schasinglulu { 126*91f16700Schasinglulu mmio_write_32(base + GICC_BPR, val); 127*91f16700Schasinglulu } 128*91f16700Schasinglulu 129*91f16700Schasinglulu 130*91f16700Schasinglulu static inline void gicc_write_IAR(uintptr_t base, unsigned int val) 131*91f16700Schasinglulu { 132*91f16700Schasinglulu mmio_write_32(base + GICC_IAR, val); 133*91f16700Schasinglulu } 134*91f16700Schasinglulu 135*91f16700Schasinglulu static inline void gicc_write_EOIR(uintptr_t base, unsigned int val) 136*91f16700Schasinglulu { 137*91f16700Schasinglulu mmio_write_32(base + GICC_EOIR, val); 138*91f16700Schasinglulu } 139*91f16700Schasinglulu 140*91f16700Schasinglulu static inline void gicc_write_hppir(uintptr_t base, unsigned int val) 141*91f16700Schasinglulu { 142*91f16700Schasinglulu mmio_write_32(base + GICC_HPPIR, val); 143*91f16700Schasinglulu } 144*91f16700Schasinglulu 145*91f16700Schasinglulu static inline void gicc_write_dir(uintptr_t base, unsigned int val) 146*91f16700Schasinglulu { 147*91f16700Schasinglulu mmio_write_32(base + GICC_DIR, val); 148*91f16700Schasinglulu } 149*91f16700Schasinglulu 150*91f16700Schasinglulu #endif /* GICV2_PRIVATE_H */ 151