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