1464ce2bbSSoby Mathew /* 2eb68ea9bSJeenu Viswambharan * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. 3464ce2bbSSoby Mathew * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 5464ce2bbSSoby Mathew */ 6464ce2bbSSoby Mathew 7464ce2bbSSoby Mathew #ifndef __GICV2_PRIVATE_H__ 8464ce2bbSSoby Mathew #define __GICV2_PRIVATE_H__ 9464ce2bbSSoby Mathew 10464ce2bbSSoby Mathew #include <gicv2.h> 11464ce2bbSSoby Mathew #include <mmio.h> 12464ce2bbSSoby Mathew #include <stdint.h> 13464ce2bbSSoby Mathew 14464ce2bbSSoby Mathew /******************************************************************************* 15464ce2bbSSoby Mathew * Private function prototypes 16464ce2bbSSoby Mathew ******************************************************************************/ 17464ce2bbSSoby Mathew void gicv2_spis_configure_defaults(uintptr_t gicd_base); 18c639e8ebSJeenu Viswambharan #if !ERROR_DEPRECATED 19464ce2bbSSoby Mathew void gicv2_secure_spis_configure(uintptr_t gicd_base, 20464ce2bbSSoby Mathew unsigned int num_ints, 21464ce2bbSSoby Mathew const unsigned int *sec_intr_list); 22464ce2bbSSoby Mathew void gicv2_secure_ppi_sgi_setup(uintptr_t gicd_base, 23464ce2bbSSoby Mathew unsigned int num_ints, 24464ce2bbSSoby Mathew const unsigned int *sec_intr_list); 25c639e8ebSJeenu Viswambharan #endif 26c639e8ebSJeenu Viswambharan void gicv2_secure_spis_configure_props(uintptr_t gicd_base, 27c639e8ebSJeenu Viswambharan const interrupt_prop_t *interrupt_props, 28c639e8ebSJeenu Viswambharan unsigned int interrupt_props_num); 29c639e8ebSJeenu Viswambharan void gicv2_secure_ppi_sgi_setup_props(uintptr_t gicd_base, 30c639e8ebSJeenu Viswambharan const interrupt_prop_t *interrupt_props, 31c639e8ebSJeenu Viswambharan unsigned int interrupt_props_num); 32464ce2bbSSoby Mathew unsigned int gicv2_get_cpuif_id(uintptr_t base); 33464ce2bbSSoby Mathew 34464ce2bbSSoby Mathew /******************************************************************************* 35464ce2bbSSoby Mathew * GIC Distributor interface accessors for reading entire registers 36464ce2bbSSoby Mathew ******************************************************************************/ 37464ce2bbSSoby Mathew static inline unsigned int gicd_read_pidr2(uintptr_t base) 38464ce2bbSSoby Mathew { 39464ce2bbSSoby Mathew return mmio_read_32(base + GICD_PIDR2_GICV2); 40464ce2bbSSoby Mathew } 41464ce2bbSSoby Mathew 42464ce2bbSSoby Mathew /******************************************************************************* 438db978b5SJeenu Viswambharan * GIC Distributor interface accessors for writing entire registers 448db978b5SJeenu Viswambharan ******************************************************************************/ 45fc529feeSJeenu Viswambharan static inline unsigned int gicd_get_itargetsr(uintptr_t base, unsigned int id) 46fc529feeSJeenu Viswambharan { 47fc529feeSJeenu Viswambharan return mmio_read_8(base + GICD_ITARGETSR + id); 48fc529feeSJeenu Viswambharan } 49fc529feeSJeenu Viswambharan 50fc529feeSJeenu Viswambharan static inline void gicd_set_itargetsr(uintptr_t base, unsigned int id, 51fc529feeSJeenu Viswambharan unsigned int target) 52fc529feeSJeenu Viswambharan { 53*3fea9c8bSAntonio Nino Diaz uint8_t val = target & GIC_TARGET_CPU_MASK; 54*3fea9c8bSAntonio Nino Diaz 55*3fea9c8bSAntonio Nino Diaz mmio_write_8(base + GICD_ITARGETSR + id, val); 56fc529feeSJeenu Viswambharan } 57fc529feeSJeenu Viswambharan 588db978b5SJeenu Viswambharan static inline void gicd_write_sgir(uintptr_t base, unsigned int val) 598db978b5SJeenu Viswambharan { 608db978b5SJeenu Viswambharan mmio_write_32(base + GICD_SGIR, val); 618db978b5SJeenu Viswambharan } 628db978b5SJeenu Viswambharan 638db978b5SJeenu Viswambharan /******************************************************************************* 64464ce2bbSSoby Mathew * GIC CPU interface accessors for reading entire registers 65464ce2bbSSoby Mathew ******************************************************************************/ 66464ce2bbSSoby Mathew 67464ce2bbSSoby Mathew static inline unsigned int gicc_read_ctlr(uintptr_t base) 68464ce2bbSSoby Mathew { 69464ce2bbSSoby Mathew return mmio_read_32(base + GICC_CTLR); 70464ce2bbSSoby Mathew } 71464ce2bbSSoby Mathew 72464ce2bbSSoby Mathew static inline unsigned int gicc_read_pmr(uintptr_t base) 73464ce2bbSSoby Mathew { 74464ce2bbSSoby Mathew return mmio_read_32(base + GICC_PMR); 75464ce2bbSSoby Mathew } 76464ce2bbSSoby Mathew 77464ce2bbSSoby Mathew static inline unsigned int gicc_read_BPR(uintptr_t base) 78464ce2bbSSoby Mathew { 79464ce2bbSSoby Mathew return mmio_read_32(base + GICC_BPR); 80464ce2bbSSoby Mathew } 81464ce2bbSSoby Mathew 82464ce2bbSSoby Mathew static inline unsigned int gicc_read_IAR(uintptr_t base) 83464ce2bbSSoby Mathew { 84464ce2bbSSoby Mathew return mmio_read_32(base + GICC_IAR); 85464ce2bbSSoby Mathew } 86464ce2bbSSoby Mathew 87464ce2bbSSoby Mathew static inline unsigned int gicc_read_EOIR(uintptr_t base) 88464ce2bbSSoby Mathew { 89464ce2bbSSoby Mathew return mmio_read_32(base + GICC_EOIR); 90464ce2bbSSoby Mathew } 91464ce2bbSSoby Mathew 92464ce2bbSSoby Mathew static inline unsigned int gicc_read_hppir(uintptr_t base) 93464ce2bbSSoby Mathew { 94464ce2bbSSoby Mathew return mmio_read_32(base + GICC_HPPIR); 95464ce2bbSSoby Mathew } 96464ce2bbSSoby Mathew 97464ce2bbSSoby Mathew static inline unsigned int gicc_read_ahppir(uintptr_t base) 98464ce2bbSSoby Mathew { 99464ce2bbSSoby Mathew return mmio_read_32(base + GICC_AHPPIR); 100464ce2bbSSoby Mathew } 101464ce2bbSSoby Mathew 102464ce2bbSSoby Mathew static inline unsigned int gicc_read_dir(uintptr_t base) 103464ce2bbSSoby Mathew { 104464ce2bbSSoby Mathew return mmio_read_32(base + GICC_DIR); 105464ce2bbSSoby Mathew } 106464ce2bbSSoby Mathew 107464ce2bbSSoby Mathew static inline unsigned int gicc_read_iidr(uintptr_t base) 108464ce2bbSSoby Mathew { 109464ce2bbSSoby Mathew return mmio_read_32(base + GICC_IIDR); 110464ce2bbSSoby Mathew } 111464ce2bbSSoby Mathew 112eb68ea9bSJeenu Viswambharan static inline unsigned int gicc_read_rpr(uintptr_t base) 113eb68ea9bSJeenu Viswambharan { 114eb68ea9bSJeenu Viswambharan return mmio_read_32(base + GICC_RPR); 115eb68ea9bSJeenu Viswambharan } 116eb68ea9bSJeenu Viswambharan 117464ce2bbSSoby Mathew /******************************************************************************* 118464ce2bbSSoby Mathew * GIC CPU interface accessors for writing entire registers 119464ce2bbSSoby Mathew ******************************************************************************/ 120464ce2bbSSoby Mathew 121464ce2bbSSoby Mathew static inline void gicc_write_ctlr(uintptr_t base, unsigned int val) 122464ce2bbSSoby Mathew { 123464ce2bbSSoby Mathew mmio_write_32(base + GICC_CTLR, val); 124464ce2bbSSoby Mathew } 125464ce2bbSSoby Mathew 126464ce2bbSSoby Mathew static inline void gicc_write_pmr(uintptr_t base, unsigned int val) 127464ce2bbSSoby Mathew { 128464ce2bbSSoby Mathew mmio_write_32(base + GICC_PMR, val); 129464ce2bbSSoby Mathew } 130464ce2bbSSoby Mathew 131464ce2bbSSoby Mathew static inline void gicc_write_BPR(uintptr_t base, unsigned int val) 132464ce2bbSSoby Mathew { 133464ce2bbSSoby Mathew mmio_write_32(base + GICC_BPR, val); 134464ce2bbSSoby Mathew } 135464ce2bbSSoby Mathew 136464ce2bbSSoby Mathew 137464ce2bbSSoby Mathew static inline void gicc_write_IAR(uintptr_t base, unsigned int val) 138464ce2bbSSoby Mathew { 139464ce2bbSSoby Mathew mmio_write_32(base + GICC_IAR, val); 140464ce2bbSSoby Mathew } 141464ce2bbSSoby Mathew 142464ce2bbSSoby Mathew static inline void gicc_write_EOIR(uintptr_t base, unsigned int val) 143464ce2bbSSoby Mathew { 144464ce2bbSSoby Mathew mmio_write_32(base + GICC_EOIR, val); 145464ce2bbSSoby Mathew } 146464ce2bbSSoby Mathew 147464ce2bbSSoby Mathew static inline void gicc_write_hppir(uintptr_t base, unsigned int val) 148464ce2bbSSoby Mathew { 149464ce2bbSSoby Mathew mmio_write_32(base + GICC_HPPIR, val); 150464ce2bbSSoby Mathew } 151464ce2bbSSoby Mathew 152464ce2bbSSoby Mathew static inline void gicc_write_dir(uintptr_t base, unsigned int val) 153464ce2bbSSoby Mathew { 154464ce2bbSSoby Mathew mmio_write_32(base + GICC_DIR, val); 155464ce2bbSSoby Mathew } 156464ce2bbSSoby Mathew 157464ce2bbSSoby Mathew #endif /* __GICV2_PRIVATE_H__ */ 158