gic_v3_cpu_interface.hh revision 13531
113531Sjairo.balart@metempsy.com/* 213531Sjairo.balart@metempsy.com * Copyright (c) 2018 Metempsy Technology Consulting 313531Sjairo.balart@metempsy.com * All rights reserved. 413531Sjairo.balart@metempsy.com * 513531Sjairo.balart@metempsy.com * Redistribution and use in source and binary forms, with or without 613531Sjairo.balart@metempsy.com * modification, are permitted provided that the following conditions are 713531Sjairo.balart@metempsy.com * met: redistributions of source code must retain the above copyright 813531Sjairo.balart@metempsy.com * notice, this list of conditions and the following disclaimer; 913531Sjairo.balart@metempsy.com * redistributions in binary form must reproduce the above copyright 1013531Sjairo.balart@metempsy.com * notice, this list of conditions and the following disclaimer in the 1113531Sjairo.balart@metempsy.com * documentation and/or other materials provided with the distribution; 1213531Sjairo.balart@metempsy.com * neither the name of the copyright holders nor the names of its 1313531Sjairo.balart@metempsy.com * contributors may be used to endorse or promote products derived from 1413531Sjairo.balart@metempsy.com * this software without specific prior written permission. 1513531Sjairo.balart@metempsy.com * 1613531Sjairo.balart@metempsy.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1713531Sjairo.balart@metempsy.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1813531Sjairo.balart@metempsy.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1913531Sjairo.balart@metempsy.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2013531Sjairo.balart@metempsy.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2113531Sjairo.balart@metempsy.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2213531Sjairo.balart@metempsy.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2313531Sjairo.balart@metempsy.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2413531Sjairo.balart@metempsy.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2513531Sjairo.balart@metempsy.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2613531Sjairo.balart@metempsy.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2713531Sjairo.balart@metempsy.com * 2813531Sjairo.balart@metempsy.com * Authors: Jairo Balart 2913531Sjairo.balart@metempsy.com */ 3013531Sjairo.balart@metempsy.com 3113531Sjairo.balart@metempsy.com#ifndef __DEV_ARM_GICV3_CPU_INTERFACE_H__ 3213531Sjairo.balart@metempsy.com#define __DEV_ARM_GICV3_CPU_INTERFACE_H__ 3313531Sjairo.balart@metempsy.com 3413531Sjairo.balart@metempsy.com#include "arch/arm/isa_device.hh" 3513531Sjairo.balart@metempsy.com#include "dev/arm/gic_v3.hh" 3613531Sjairo.balart@metempsy.com 3713531Sjairo.balart@metempsy.comclass Gicv3Redistributor; 3813531Sjairo.balart@metempsy.comclass Gicv3Distributor; 3913531Sjairo.balart@metempsy.com 4013531Sjairo.balart@metempsy.comclass Gicv3CPUInterface : public ArmISA::BaseISADevice, public Serializable 4113531Sjairo.balart@metempsy.com{ 4213531Sjairo.balart@metempsy.com private: 4313531Sjairo.balart@metempsy.com 4413531Sjairo.balart@metempsy.com friend class Gicv3Redistributor; 4513531Sjairo.balart@metempsy.com friend class Gicv3Distributor; 4613531Sjairo.balart@metempsy.com 4713531Sjairo.balart@metempsy.com protected: 4813531Sjairo.balart@metempsy.com 4913531Sjairo.balart@metempsy.com Gicv3 * gic; 5013531Sjairo.balart@metempsy.com Gicv3Redistributor * redistributor; 5113531Sjairo.balart@metempsy.com Gicv3Distributor * distributor; 5213531Sjairo.balart@metempsy.com uint32_t cpuId; 5313531Sjairo.balart@metempsy.com 5413531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL1_SRE = 1 << 0; 5513531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL1_DFB = 1 << 1; 5613531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL1_DIB = 1 << 2; 5713531Sjairo.balart@metempsy.com 5813531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL2_SRE = 1 << 0; 5913531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL2_DFB = 1 << 1; 6013531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL2_DIB = 1 << 2; 6113531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL2_ENABLE = 1 << 3; 6213531Sjairo.balart@metempsy.com 6313531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL3_SRE = 1 << 0; 6413531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL3_DFB = 1 << 1; 6513531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL3_DIB = 1 << 2; 6613531Sjairo.balart@metempsy.com static const uint32_t ICC_SRE_EL3_ENABLE = 1 << 3; 6713531Sjairo.balart@metempsy.com 6813531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_CBPR_EL1S = 1 << 0; 6913531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_CBPR_EL1NS = 1 << 1; 7013531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_EOIMODE_EL3 = 1 << 2; 7113531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_EOIMODE_EL1S = 1 << 3; 7213531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_EOIMODE_EL1NS = 1 << 4; 7313531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_RM = 1 << 5; 7413531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_PMHE = 1 << 6; 7513531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_PRIBITS_SHIFT = 8; 7613531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_IDBITS_SHIFT = 11; 7713531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_SEIS = 1 << 14; 7813531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_A3V = 1 << 15; 7913531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_nDS = 1 << 17; 8013531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL3_RSS = 1 << 18; 8113531Sjairo.balart@metempsy.com 8213531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_CBPR = 1 << 0; 8313531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_EOIMODE = 1 << 1; 8413531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_PMHE = 1 << 6; 8513531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_SEIS = 1 << 14; 8613531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_A3V = 1 << 15; 8713531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_RSS = 1 << 18; 8813531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_PRIBITS_SHIFT = 8; 8913531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_PRIBITS_MASK = 9013531Sjairo.balart@metempsy.com 7U << ICC_CTLR_EL1_PRIBITS_SHIFT; 9113531Sjairo.balart@metempsy.com static const uint32_t ICC_CTLR_EL1_IDBITS_SHIFT = 11; 9213531Sjairo.balart@metempsy.com 9313531Sjairo.balart@metempsy.com static const uint32_t ICC_IGRPEN0_EL1_ENABLE = 1 << 0; 9413531Sjairo.balart@metempsy.com static const uint32_t ICC_IGRPEN1_EL1_ENABLE = 1 << 0; 9513531Sjairo.balart@metempsy.com 9613531Sjairo.balart@metempsy.com static const uint32_t ICC_IGRPEN1_EL3_ENABLEGRP1NS = 1 << 0; 9713531Sjairo.balart@metempsy.com static const uint32_t ICC_IGRPEN1_EL3_ENABLEGRP1S = 1 << 1; 9813531Sjairo.balart@metempsy.com 9913531Sjairo.balart@metempsy.com static const uint8_t PRIORITY_BITS = 5; 10013531Sjairo.balart@metempsy.com 10113531Sjairo.balart@metempsy.com /* Minimum BPR for Secure, or when security not enabled */ 10213531Sjairo.balart@metempsy.com static const uint8_t GIC_MIN_BPR = 2; 10313531Sjairo.balart@metempsy.com /* Minimum BPR for Nonsecure when security is enabled */ 10413531Sjairo.balart@metempsy.com static const uint8_t GIC_MIN_BPR_NS = GIC_MIN_BPR + 1; 10513531Sjairo.balart@metempsy.com 10613531Sjairo.balart@metempsy.com static const uint8_t VIRTUAL_PRIORITY_BITS = 5; 10713531Sjairo.balart@metempsy.com static const uint8_t VIRTUAL_PREEMPTION_BITS = 5; 10813531Sjairo.balart@metempsy.com static const uint8_t VIRTUAL_NUM_LIST_REGS = 16; 10913531Sjairo.balart@metempsy.com 11013531Sjairo.balart@metempsy.com static const uint8_t GIC_MIN_VBPR = 7 - VIRTUAL_PREEMPTION_BITS; 11113531Sjairo.balart@metempsy.com 11213531Sjairo.balart@metempsy.com typedef struct { 11313531Sjairo.balart@metempsy.com uint32_t intid; 11413531Sjairo.balart@metempsy.com uint8_t prio; 11513531Sjairo.balart@metempsy.com Gicv3::GroupId group; 11613531Sjairo.balart@metempsy.com } hppi_t; 11713531Sjairo.balart@metempsy.com 11813531Sjairo.balart@metempsy.com hppi_t hppi; 11913531Sjairo.balart@metempsy.com 12013531Sjairo.balart@metempsy.com // GIC CPU interface memory mapped control registers (legacy) 12113531Sjairo.balart@metempsy.com enum { 12213531Sjairo.balart@metempsy.com GICC_CTLR = 0x0000, 12313531Sjairo.balart@metempsy.com GICC_PMR = 0x0004, 12413531Sjairo.balart@metempsy.com GICC_BPR = 0x0008, 12513531Sjairo.balart@metempsy.com GICC_IAR = 0x000C, 12613531Sjairo.balart@metempsy.com GICC_EOIR = 0x0010, 12713531Sjairo.balart@metempsy.com GICC_RPR = 0x0014, 12813531Sjairo.balart@metempsy.com GICC_HPPI = 0x0018, 12913531Sjairo.balart@metempsy.com GICC_ABPR = 0x001C, 13013531Sjairo.balart@metempsy.com GICC_AIAR = 0x0020, 13113531Sjairo.balart@metempsy.com GICC_AEOIR = 0x0024, 13213531Sjairo.balart@metempsy.com GICC_AHPPIR = 0x0028, 13313531Sjairo.balart@metempsy.com GICC_STATUSR = 0x002C, 13413531Sjairo.balart@metempsy.com GICC_IIDR = 0x00FC, 13513531Sjairo.balart@metempsy.com }; 13613531Sjairo.balart@metempsy.com 13713531Sjairo.balart@metempsy.com static const AddrRange GICC_APR; 13813531Sjairo.balart@metempsy.com static const AddrRange GICC_NSAPR; 13913531Sjairo.balart@metempsy.com 14013531Sjairo.balart@metempsy.com // GIC CPU virtual interface memory mapped control registers (legacy) 14113531Sjairo.balart@metempsy.com enum { 14213531Sjairo.balart@metempsy.com GICH_HCR = 0x0000, 14313531Sjairo.balart@metempsy.com GICH_VTR = 0x0004, 14413531Sjairo.balart@metempsy.com GICH_VMCR = 0x0008, 14513531Sjairo.balart@metempsy.com GICH_MISR = 0x0010, 14613531Sjairo.balart@metempsy.com GICH_EISR = 0x0020, 14713531Sjairo.balart@metempsy.com GICH_ELRSR = 0x0030, 14813531Sjairo.balart@metempsy.com }; 14913531Sjairo.balart@metempsy.com 15013531Sjairo.balart@metempsy.com static const AddrRange GICH_APR; 15113531Sjairo.balart@metempsy.com static const AddrRange GICH_LR; 15213531Sjairo.balart@metempsy.com 15313531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_EN = 1 << 0; 15413531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_UIE = 1 << 1; 15513531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_LRENPIE = 1 << 2; 15613531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_NPIE = 1 << 3; 15713531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_VGRP0EIE = 1 << 4; 15813531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_VGRP0DIE = 1 << 5; 15913531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_VGRP1EIE = 1 << 6; 16013531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_VGRP1DIE = 1 << 7; 16113531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_TC = 1 << 10; 16213531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_TALL0 = 1 << 11; 16313531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_TALL1 = 1 << 12; 16413531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_TSEI = 1 << 13; 16513531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_TDIR = 1 << 14; 16613531Sjairo.balart@metempsy.com static const uint32_t ICH_HCR_EL2_EOICOUNT_MASK = 0x1fU << 27; 16713531Sjairo.balart@metempsy.com 16813531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_VINTID_SHIFT = 0; 16913531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_VINTID_LENGTH = 32; 17013531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_VINTID_MASK = 17113531Sjairo.balart@metempsy.com (0xffffffffULL << ICH_LR_EL2_VINTID_SHIFT); 17213531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PINTID_SHIFT = 32; 17313531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PINTID_LENGTH = 10; 17413531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PINTID_MASK = 17513531Sjairo.balart@metempsy.com (0x3ffULL << ICH_LR_EL2_PINTID_SHIFT); 17613531Sjairo.balart@metempsy.com /* Note that EOI shares with the top bit of the pINTID field */ 17713531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_EOI = (1ULL << 41); 17813531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PRIORITY_SHIFT = 48; 17913531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PRIORITY_LENGTH = 8; 18013531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_PRIORITY_MASK = 18113531Sjairo.balart@metempsy.com (0xffULL << ICH_LR_EL2_PRIORITY_SHIFT); 18213531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_GROUP = (1ULL << 60); 18313531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_HW = (1ULL << 61); 18413531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_SHIFT = 62; 18513531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_LENGTH = 2; 18613531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_MASK = 18713531Sjairo.balart@metempsy.com (3ULL << ICH_LR_EL2_STATE_SHIFT); 18813531Sjairo.balart@metempsy.com /* values for the state field: */ 18913531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_INVALID = 0; 19013531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_PENDING = 1; 19113531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_ACTIVE = 2; 19213531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_ACTIVE_PENDING = 3; 19313531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_PENDING_BIT = 19413531Sjairo.balart@metempsy.com (1ULL << ICH_LR_EL2_STATE_SHIFT); 19513531Sjairo.balart@metempsy.com static const uint64_t ICH_LR_EL2_STATE_ACTIVE_BIT = 19613531Sjairo.balart@metempsy.com (2ULL << ICH_LR_EL2_STATE_SHIFT); 19713531Sjairo.balart@metempsy.com 19813531Sjairo.balart@metempsy.com static const uint64_t ICH_LRC_PRIORITY_SHIFT = 19913531Sjairo.balart@metempsy.com ICH_LR_EL2_PRIORITY_SHIFT - 32; 20013531Sjairo.balart@metempsy.com static const uint64_t ICH_LRC_PRIORITY_LENGTH = 20113531Sjairo.balart@metempsy.com ICH_LR_EL2_PRIORITY_LENGTH; 20213531Sjairo.balart@metempsy.com 20313531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_EOI = (1 << 0); 20413531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_U = (1 << 1); 20513531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_LRENP = (1 << 2); 20613531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_NP = (1 << 3); 20713531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_VGRP0E = (1 << 4); 20813531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_VGRP0D = (1 << 5); 20913531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_VGRP1E = (1 << 6); 21013531Sjairo.balart@metempsy.com static const uint32_t ICH_MISR_EL2_VGRP1D = (1 << 7); 21113531Sjairo.balart@metempsy.com 21213531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VENG0_SHIFT = 0; 21313531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VENG0 = 21413531Sjairo.balart@metempsy.com (1 << ICH_VMCR_EL2_VENG0_SHIFT); 21513531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VENG1_SHIFT = 1; 21613531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VENG1 = 21713531Sjairo.balart@metempsy.com (1 << ICH_VMCR_EL2_VENG1_SHIFT); 21813531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VACKCTL = (1 << 2); 21913531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VFIQEN = (1 << 3); 22013531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VCBPR_SHIFT = 4; 22113531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VCBPR = 22213531Sjairo.balart@metempsy.com (1 << ICH_VMCR_EL2_VCBPR_SHIFT); 22313531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VEOIM_SHIFT = 9; 22413531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VEOIM = 22513531Sjairo.balart@metempsy.com (1 << ICH_VMCR_EL2_VEOIM_SHIFT); 22613531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR1_SHIFT = 18; 22713531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR1_LENGTH = 3; 22813531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR1_MASK = 22913531Sjairo.balart@metempsy.com (0x7U << ICH_VMCR_EL2_VBPR1_SHIFT); 23013531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR0_SHIFT = 21; 23113531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR0_LENGTH = 3; 23213531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VBPR0_MASK = 23313531Sjairo.balart@metempsy.com (0x7U << ICH_VMCR_EL2_VBPR0_SHIFT); 23413531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VPMR_SHIFT = 24; 23513531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VPMR_LENGTH = 8; 23613531Sjairo.balart@metempsy.com static const uint32_t ICH_VMCR_EL2_VPMR_MASK = 23713531Sjairo.balart@metempsy.com (0xffU << ICH_VMCR_EL2_VPMR_SHIFT); 23813531Sjairo.balart@metempsy.com 23913531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_LISTREGS_SHIFT = 0; 24013531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_TDS = 1 << 19; 24113531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_NV4 = 1 << 20; 24213531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_A3V = 1 << 21; 24313531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_SEIS = 1 << 22; 24413531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_IDBITS_SHIFT = 23; 24513531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_PREBITS_SHIFT = 26; 24613531Sjairo.balart@metempsy.com static const uint32_t ICH_VTR_EL2_PRIBITS_SHIFT = 29; 24713531Sjairo.balart@metempsy.com 24813531Sjairo.balart@metempsy.com public: 24913531Sjairo.balart@metempsy.com 25013531Sjairo.balart@metempsy.com Gicv3CPUInterface(Gicv3 * gic, uint32_t cpu_id); 25113531Sjairo.balart@metempsy.com ~Gicv3CPUInterface(); 25213531Sjairo.balart@metempsy.com void init(); 25313531Sjairo.balart@metempsy.com void initState(); 25413531Sjairo.balart@metempsy.com 25513531Sjairo.balart@metempsy.com ArmISA::MiscReg readMiscReg(int misc_reg) override; 25613531Sjairo.balart@metempsy.com void setMiscReg(int misc_reg, ArmISA::MiscReg val) override; 25713531Sjairo.balart@metempsy.com void update(); 25813531Sjairo.balart@metempsy.com void virtualUpdate(); 25913531Sjairo.balart@metempsy.com 26013531Sjairo.balart@metempsy.com void serialize(CheckpointOut & cp) const override; 26113531Sjairo.balart@metempsy.com void unserialize(CheckpointIn & cp) override; 26213531Sjairo.balart@metempsy.com 26313531Sjairo.balart@metempsy.com protected: 26413531Sjairo.balart@metempsy.com 26513531Sjairo.balart@metempsy.com void reset(); 26613531Sjairo.balart@metempsy.com bool hppiCanPreempt(); 26713531Sjairo.balart@metempsy.com bool hppviCanPreempt(int lrIdx); 26813531Sjairo.balart@metempsy.com bool groupEnabled(Gicv3::GroupId group); 26913531Sjairo.balart@metempsy.com uint8_t highestActivePriority(); 27013531Sjairo.balart@metempsy.com uint8_t virtualHighestActivePriority(); 27113531Sjairo.balart@metempsy.com bool inSecureState(); 27213531Sjairo.balart@metempsy.com int currEL(); 27313531Sjairo.balart@metempsy.com bool haveEL(ArmISA::ExceptionLevel el); 27413531Sjairo.balart@metempsy.com void activateIRQ(uint32_t intid, Gicv3::GroupId group); 27513531Sjairo.balart@metempsy.com void virtualActivateIRQ(uint32_t lrIdx); 27613531Sjairo.balart@metempsy.com void deactivateIRQ(uint32_t intid, Gicv3::GroupId group); 27713531Sjairo.balart@metempsy.com void virtualDeactivateIRQ(int lrIdx); 27813531Sjairo.balart@metempsy.com uint32_t groupPriorityMask(Gicv3::GroupId group); 27913531Sjairo.balart@metempsy.com uint32_t virtualGroupPriorityMask(Gicv3::GroupId group); 28013531Sjairo.balart@metempsy.com void dropPriority(Gicv3::GroupId group); 28113531Sjairo.balart@metempsy.com uint8_t virtualDropPriority(); 28213531Sjairo.balart@metempsy.com ArmISA::InterruptTypes intSignalType(Gicv3::GroupId group); 28313531Sjairo.balart@metempsy.com bool isEOISplitMode(); 28413531Sjairo.balart@metempsy.com bool virtualIsEOISplitMode(); 28513531Sjairo.balart@metempsy.com bool isSecureBelowEL3(); 28613531Sjairo.balart@metempsy.com bool inSecureState2(); 28713531Sjairo.balart@metempsy.com uint32_t eoiMaintenanceInterruptStatus(uint32_t * misr); 28813531Sjairo.balart@metempsy.com uint32_t maintenanceInterruptStatus(); 28913531Sjairo.balart@metempsy.com int highestActiveGroup(); 29013531Sjairo.balart@metempsy.com bool getHCREL2FMO(); 29113531Sjairo.balart@metempsy.com bool getHCREL2IMO(); 29213531Sjairo.balart@metempsy.com uint32_t getHPPIR1(); 29313531Sjairo.balart@metempsy.com uint32_t getHPPIR0(); 29413531Sjairo.balart@metempsy.com int getHPPVILR(); 29513531Sjairo.balart@metempsy.com int virtualFindActive(uint32_t intid); 29613531Sjairo.balart@metempsy.com void virtualIncrementEOICount(); 29713531Sjairo.balart@metempsy.com bool isEL3OrMon(); 29813531Sjairo.balart@metempsy.com bool isAA64(); 29913531Sjairo.balart@metempsy.com}; 30013531Sjairo.balart@metempsy.com 30113531Sjairo.balart@metempsy.com#endif //__DEV_ARM_GICV3_CPU_INTERFACE_H__ 302