# Copyright (c) 2020 ARM Limited
# All rights reserved
#
# The license below extends only to copyright in the software and shall
# not be construed as granting a license to any other intellectual
# property including but not limited to intellectual property relating
# to a hardware implementation of the functionality of the software
# licensed hereunder.  You may use the software subject to the license
# terms below provided that you ensure that this notice is replicated
# unmodified and in its entirety in all distributions of the software,
# modified or unmodified, in source code or in binary form.
#
# Copyright 2019 Google, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

from m5.params import *
from m5.util.fdthelper import *
from m5.SimObject import SimObject

from m5.objects.FastModel import AmbaInitiatorSocket, AmbaTargetSocket
from m5.objects.Gic import BaseGic
from m5.objects.IntPin import VectorIntSourcePin
from m5.objects.ResetPort import ResetResponsePort
from m5.objects.SystemC import SystemC_ScModule

GICV3_COMMS_TARGET_ROLE = "GICV3 COMMS TARGET"
GICV3_COMMS_INITIATOR_ROLE = "GICV3 COMMS INITIATOR"

Port.compat(GICV3_COMMS_TARGET_ROLE, GICV3_COMMS_INITIATOR_ROLE)


class Gicv3CommsTargetSocket(Port):
    def __init__(self, desc):
        super().__init__(GICV3_COMMS_INITIATOR_ROLE, desc)


class Gicv3CommsInitiatorSocket(Port):
    def __init__(self, desc):
        super().__init__(GICV3_COMMS_TARGET_ROLE, desc, is_source=True)


class VectorGicv3CommsInitiatorSocket(VectorPort):
    def __init__(self, desc):
        super().__init__(GICV3_COMMS_TARGET_ROLE, desc, is_source=True)


class SCFastModelGIC(SystemC_ScModule):
    type = "SCFastModelGIC"
    cxx_class = "gem5::fastmodel::SCGIC"
    cxx_header = "arch/arm/fastmodel/GIC/gic.hh"

    enabled = Param.Bool(
        True,
        "Enable GICv3 functionality; when false the "
        "component is inactive. has_gicv3 will replace this when GIC_IRI "
        "replaces GICv3IRI.",
    )
    has_gicv3 = Param.Bool(
        False,
        "Enable GICv3 functionality; when false "
        'the component is inactive. This will replace "enabled" '
        "parameter.",
    )
    has_gicv4_1 = Param.Bool(
        False,
        "Enable GICv4.1 functionality; when "
        "false the component is inactive.",
    )
    vPEID_bits = Param.Unsigned(16, "Number of bits of vPEID with GICv4.1.")
    print_mmap = Param.Bool(False, "Print memory map to stdout")
    monolithic = Param.Bool(
        False, "Indicate that the implementation is not distributed"
    )
    direct_lpi_support = Param.Bool(
        False, "Enable support for LPI operations through GICR registers"
    )
    cpu_affinities = Param.String(
        "",
        "A comma separated list of dotted quads "
        "containing the affinities of all PEs connected to this IRI.",
    )
    non_ARE_core_count = Param.Unsigned(
        8,
        "Maximum number of non-ARE cores; "
        "normally used to pass the cluster-level NUM_CORES parameter to "
        "the top-level redistributor.",
    )
    reg_base = Param.Addr(0x2C010000, "Base for decoding GICv3 registers.")
    reg_base_per_redistributor = Param.String(
        "",
        "Base address for each "
        "redistributor in the form "
        "'0.0.0.0=0x2c010000, 0.0.0.1=0x2c020000'.  All redistributors "
        "must be specified and this overrides the reg-base parameter "
        "(except that reg-base will still be used for the top-level "
        "redistributor).",
    )
    gicd_alias = Param.Addr(
        0x0,
        "In GICv2 mode: the base address for a 4k "
        "page alias of the first 4k of the Distributor page, in GICv3 "
        "mode. the base address of a 64KB page containing message based "
        "SPI signalling register aliases(0:Disabled)",
    )
    has_two_security_states = Param.Bool(
        True, "If true, has two security states"
    )
    DS_fixed_to_zero = Param.Bool(
        False, "Enable/disable support of single security state"
    )
    IIDR = Param.UInt32(0x0, "GICD_IIDR and GICR_IIDR value")
    gicv2_only = Param.Bool(
        False,
        "If true, when using the GICv3 model, pretend to be a GICv2 system",
    )
    STATUSR_implemented = Param.Bool(
        True, "Determines whether the GICR_STATUSR register is implemented."
    )
    priority_bits_implemented = Param.Unsigned(
        5, "Number of implemented priority bits"
    )
    itargets_razwi = Param.Bool(
        False, "If true, the GICD_ITARGETS registers are RAZ/WI"
    )
    icfgr_sgi_mask = Param.UInt32(
        0x0, "Mask for writes to ICFGR registers that configure SGIs"
    )
    icfgr_ppi_mask = Param.UInt32(
        0xAAAAAAAA, "Mask for writes to ICFGR registers that configure PPIs"
    )
    icfgr_spi_mask = Param.UInt32(
        0xAAAAAAAA, "Mask for writes to ICFGR registers that configure SPIs"
    )
    icfgr_sgi_reset = Param.UInt32(
        0xAAAAAAAA, "Reset value for ICFGR registers that configure SGIs"
    )
    icfgr_ppi_reset = Param.UInt32(
        0x0, "Reset value for ICFGR regesters that configure PPIs"
    )
    icfgr_spi_reset = Param.UInt32(
        0x0, "Reset value for ICFGR regesters that configure SPIs"
    )
    icfgr_ppi_rsvd_bit = Param.Bool(
        False,
        "If ARE=0, the value of reserved "
        "bits i.e. bit 0,2,4..30 of ICFGRn for n>0",
    )
    igroup_sgi_mask = Param.UInt16(
        0xFFFF, "Mask for writes to SGI bits in IGROUP registers"
    )
    igroup_ppi_mask = Param.UInt16(
        0xFFFF, "Mask for writes to PPI bits in IGROUP registers"
    )
    igroup_sgi_reset = Param.UInt16(
        0x0, "Reset value for SGI bits in IGROUP registers"
    )
    igroup_ppi_reset = Param.UInt16(
        0x0, "Reset value for SGI bits in IGROUP registers"
    )
    ppi_implemented_mask = Param.UInt16(
        0xFFFF,
        "Mask of PPIs that are "
        "implemented. One bit per PPI bit 0 == PPI 16 (first PPI). This "
        "will affect other masks.",
    )
    spi_count = Param.UInt16(224, "Number of SPIs that are implemented.")
    lockable_spi_count = Param.Unsigned(
        0,
        "Number of SPIs that are locked "
        "down when CFGSDISABLE signal is asserted.  Only applies for "
        "GICv2.",
    )
    iri_id_bits = Param.Unsigned(
        16,
        "Number of bits used to represent "
        "interrupts IDs in the Distributor and Redistributors, forced to "
        "10 if LPIs are not supported",
    )
    delay_redistributor_accesses = Param.Bool(
        True,
        "Delay memory accesses "
        "from the redistributor until GICR_SYNCR is read.",
    )
    gicd_pidr = Param.UInt64(
        0x0,
        "The value for the GICD_PIDR registers, if "
        "non-zero. Note: fixed fields (device type etc.) will be "
        "overriden in this value.",
    )
    gicr_pidr = Param.UInt64(
        0x0,
        "The value for the GICR_PIDR registers, if "
        "non-zero. Note: fixed fields (device type etc.) will be "
        "overriden in this value.",
    )
    its_count = Param.Unsigned(
        0,
        "Number of Interrupt Translation Services "
        "to be instantiated (0=none)",
    )
    its0_base = Param.Addr(
        0, "Register base address for ITS0 (automatic if 0)."
    )
    its1_base = Param.Addr(
        0, "Register base address for ITS1 (automatic if 0)."
    )
    its2_base = Param.Addr(
        0, "Register base address for ITS2 (automatic if 0)."
    )
    its3_base = Param.Addr(
        0, "Register base address for ITS3 (automatic if 0)."
    )
    gits_pidr = Param.UInt64(
        0x0,
        "The value for the GITS_PIDR registers, if "
        "non-zero. Note: fixed fields (device type etc.) will be "
        "overriden in this value.",
    )
    gits_baser0_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER0 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser1_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER1 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser2_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER2 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser3_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER3 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser4_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER4 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser5_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER5 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser6_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER6 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser7_type = Param.Unsigned(
        0,
        "Type field for GITS_BASER7 "
        "register. 0 = Unimplemented; 1 = Devices; "
        "2 = Virtual Processors; 3 = Physical Processors; 4 = Collections",
    )
    gits_baser0_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER0 register."
    )
    gits_baser1_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER1 register."
    )
    gits_baser2_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER2 register."
    )
    gits_baser3_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER3 register."
    )
    gits_baser4_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER4 register."
    )
    gits_baser5_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER5 register."
    )
    gits_baser6_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER6 register."
    )
    gits_baser7_entry_bytes = Param.Unsigned(
        8, "Number of bytes required per entry for GITS_BASER7 register."
    )
    gits_baser0_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER0 register is RAZ/WI."
    )
    gits_baser1_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER1 register is RAZ/WI."
    )
    gits_baser2_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER2 register is RAZ/WI."
    )
    gits_baser3_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER3 register is RAZ/WI."
    )
    gits_baser4_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER4 register is RAZ/WI."
    )
    gits_baser5_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER5 register is RAZ/WI."
    )
    gits_baser6_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER6 register is RAZ/WI."
    )
    gits_baser7_indirect_raz = Param.Bool(
        False, "Indirect field for GITS_BASER7 register is RAZ/WI."
    )
    its_baser_force_page_alignement = Param.Bool(
        True,
        "Force alignement of "
        "address writen to a GITS_BASER register to the page size "
        "configured",
    )
    processor_numbers = Param.String(
        "",
        "Specify processor numbers (as "
        "appears in GICR_TYPER) in the form 0.0.0.0=0,0.0.0.1=1 etc.) If "
        "not specified, will number processors starting at 0.",
    )
    supports_shareability = Param.Bool(
        True,
        "Device supports shareability "
        "attributes on outgoing memory bus (i.e. is modelling an ACElite "
        "port rather than an AXI4 port).",
    )
    a3_affinity_supported = Param.Bool(
        False, "Device supports affinity level 3 values that are non-zero."
    )
    SGI_RSS_support = Param.Bool(
        False, "Device has support for the Range Selector feature for SGI"
    )
    gicr_propbaser_read_only = Param.Bool(
        False, "GICR_PROPBASER register is read-only."
    )
    gicr_propbaser_reset = Param.UInt64(
        0x0, "Value of GICR_PROPBASER on reset."
    )
    its_device_bits = Param.Unsigned(
        16, "Number of bits supported for ITS device IDs."
    )
    its_entry_size = Param.Unsigned(
        8, "Number of bytes required to store each entry in the ITT tables."
    )
    its_id_bits = Param.Unsigned(
        16, "Number of interrupt bits supported by ITS."
    )
    its_collection_id_bits = Param.Unsigned(
        0,
        "Number of collection bits "
        "supported by ITS (optional parameter, 0 => 16bits support and "
        "GITS_TYPER.CIL=0",
    )
    its_cumulative_collection_tables = Param.Bool(
        True,
        "When true, the "
        "supported amount of collections is the sum of GITS_TYPER.HCC and "
        "the number of collections supported in memory, otherwise, simply "
        "the number supported in memory only. Irrelevant when HCC=0",
    )
    delay_ITS_accesses = Param.Bool(
        True, "Delay accesses from the ITS until GICR_SYNCR is read."
    )
    local_SEIs = Param.Bool(False, "Generate SEI to signal internal issues")
    local_VSEIs = Param.Bool(False, "Generate VSEI to signal internal issues")
    ITS_use_physical_target_addresses = Param.Bool(
        True,
        "Use physical "
        "hardware adresses for targets in ITS commands -- must be true "
        "for distributed implementations",
    )
    ITS_hardware_collection_count = Param.Unsigned(
        0, "Number of hardware collections held exclusively in the ITS"
    )
    ITS_MOVALL_update_collections = Param.Bool(
        False, "Whether MOVALL command updates the collection entires"
    )
    ITS_TRANSLATE64R = Param.Bool(
        False,
        "Add an implementation specific "
        "register at 0x10008 supporting 64 bit TRANSLATER (dev[63:32], "
        "interupt[31:0])",
    )
    enable_protocol_checking = Param.Bool(
        False, "Enable/disable protocol checking at cpu interface"
    )
    fixed_routed_spis = Param.String(
        "",
        "Value of IROUTER[n] register in the "
        "form 'n=a.b.c.d, n=*'. The RM bit of IROUTER is 0 when n=a.b.c.d "
        "is used else 1 when n=* is used. n can be >= 32 and <= 1019",
    )
    irouter_default_mask = Param.String(
        "",
        "Default Mask value for "
        "IROUTER[32..1019] register in the form 'a.b.c.d'",
    )
    irouter_default_reset = Param.String(
        "",
        "Default Reset Value of "
        "IROUTER[32..1019] register in the form 'a.b.c.d' or *",
    )
    irouter_reset_values = Param.String(
        "",
        "Reset Value of IROUTER[n] "
        "register in the form 'n=a.b.c.d or n=*'.n can be >= 32 and "
        "<= 1019",
    )
    irouter_mask_values = Param.String(
        "",
        "Mask Value of IROUTER[n] register "
        "in the form 'n=a.b.c.d'.n can be >= 32 and <= 1019",
    )
    ITS_threaded_command_queue = Param.Bool(
        True,
        "Enable execution of ITS "
        "commands in a separate thread which is sometimes required for "
        "cosimulation",
    )
    ITS_legacy_iidr_typer_offset = Param.Bool(
        False,
        "Put the GITS_IIDR and "
        "GITS_TYPER registers at their older offset of 0x8 and 0x4 "
        "respectively",
    )
    redistributor_threaded_command_queue = Param.Bool(
        True,
        "Enable execution "
        "of redistributor delayed transactions in a separate thread which "
        "is sometimes required for cosimulation",
    )
    ignore_generate_sgi_when_no_are = Param.Bool(
        False,
        "Ignore GenerateSGI "
        "packets coming form the CPU interface if both ARE_S and ARE_NS "
        "are 0",
    )
    trace_speculative_lpi_property_updates = Param.Bool(
        False,
        "Trace LPI "
        "propery updates performed on speculative accesses (useful for "
        "debuging LPI)",
    )
    virtual_lpi_support = Param.Bool(
        False,
        "GICv4 Virtual LPIs and Direct injection of Virtual LPIs supported",
    )
    virtual_priority_bits = Param.Unsigned(
        5, "Number of implemented virtual priority bits"
    )
    LPI_cache_type = Param.Unsigned(
        1, "Cache type for LPIs, 0:No caching, 1:Full caching"
    )
    LPI_cache_check_data = Param.Bool(
        False,
        "Enable Cached LPI data against "
        "memory checking when available for cache type",
    )
    DPG_bits_implemented = Param.Bool(
        False,
        "Enable implementation of "
        "interrupt group participation bits or DPG bits in GICR_CTLR",
    )
    DPG_ARE_only = Param.Bool(
        False,
        "Limit application of DPG bits to interrupt groups for which ARE=1",
    )
    ARE_fixed_to_one = Param.Bool(
        False,
        "GICv2 compatibility is not "
        "supported and GICD_CTLR.ARE_* is always one",
    )
    legacy_sgi_enable_rao = Param.Bool(
        False, "Enables for SGI associated with an ARE=0 regime are RAO/WI"
    )
    pa_size = Param.Unsigned(48, "Number of valid bits in physical address")
    MSI_IIDR = Param.UInt32(0x0, "Value returned in MSI_IIDR registers.")
    MSI_NS_frame0_base = Param.Addr(
        0x0,
        "If non-zero, sets the base "
        "address used for non-secure MSI frame 0 registers.",
    )
    MSI_NS_frame0_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 0. Set to 0 to disable frame.",
    )
    MSI_NS_frame0_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 0. Set to 0 to disable frame.",
    )
    MSI_NS_frame1_base = Param.Addr(
        0x0,
        "If non-zero, sets the base "
        "address used for non-secure MSI frame 1 registers.",
    )
    MSI_NS_frame1_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 1. Set to 0 to disable frame.",
    )
    MSI_NS_frame1_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 1. Set to 0 to disable frame.",
    )
    MSI_NS_frame2_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 2 registers.",
    )
    MSI_NS_frame2_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 2. Set to 0 to disable frame.",
    )
    MSI_NS_frame2_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 2. Set to 0 to disable frame.",
    )
    MSI_NS_frame3_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 3 registers.",
    )
    MSI_NS_frame3_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 3. Set to 0 to disable frame.",
    )
    MSI_NS_frame3_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 3. Set to 0 to disable frame.",
    )
    MSI_NS_frame4_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 4 registers.",
    )
    MSI_NS_frame4_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 4. Set to 0 to disable frame.",
    )
    MSI_NS_frame4_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 4. Set to 0 to disable frame.",
    )
    MSI_NS_frame5_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 5 registers.",
    )
    MSI_NS_frame5_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 5. Set to 0 to disable frame.",
    )
    MSI_NS_frame5_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 5. Set to 0 to disable frame.",
    )
    MSI_NS_frame6_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 6 registers.",
    )
    MSI_NS_frame6_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 6. Set to 0 to disable frame.",
    )
    MSI_NS_frame6_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 6. Set to 0 to disable frame.",
    )
    MSI_NS_frame7_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for non-secure MSI frame 7 registers.",
    )
    MSI_NS_frame7_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "non-secure MSI frame 7. Set to 0 to disable frame.",
    )
    MSI_NS_frame7_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "non-secure MSI frame 7. Set to 0 to disable frame.",
    )
    MSI_PIDR = Param.UInt64(
        0x0,
        "The value for the MSI_PIDR registers, if "
        "non-zero and distributor supports GICv2m. Note: fixed fields "
        "(device type etc.) will be overriden in this value.",
    )
    MSI_S_frame0_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 0 registers.",
    )
    MSI_S_frame0_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 0. Set to 0 to disable frame.",
    )
    MSI_S_frame0_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 0. Set to 0 to disable frame.",
    )
    MSI_S_frame1_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 1 registers.",
    )
    MSI_S_frame1_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 1. Set to 0 to disable frame.",
    )
    MSI_S_frame1_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 1. Set to 0 to disable frame.",
    )
    MSI_S_frame2_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 2 registers.",
    )
    MSI_S_frame2_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 2. Set to 0 to disable frame.",
    )
    MSI_S_frame2_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 2. Set to 0 to disable frame.",
    )
    MSI_S_frame3_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 3 registers.",
    )
    MSI_S_frame3_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 3. Set to 0 to disable frame.",
    )
    MSI_S_frame3_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 3. Set to 0 to disable frame.",
    )
    MSI_S_frame4_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 4 registers.",
    )
    MSI_S_frame4_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 4. Set to 0 to disable frame.",
    )
    MSI_S_frame4_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 4. Set to 0 to disable frame.",
    )
    MSI_S_frame5_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 5 registers.",
    )
    MSI_S_frame5_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 5. Set to 0 to disable frame.",
    )
    MSI_S_frame5_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 5. Set to 0 to disable frame.",
    )
    MSI_S_frame6_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 6 registers.",
    )
    MSI_S_frame6_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 6. Set to 0 to disable frame.",
    )
    MSI_S_frame6_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 6. Set to 0 to disable frame.",
    )
    MSI_S_frame7_base = Param.Addr(
        0x0,
        "If non-zero, sets the base address "
        "used for secure MSI frame 7 registers.",
    )
    MSI_S_frame7_max_SPI = Param.UInt16(
        0,
        "Maximum SPI ID supported by "
        "secure MSI frame 7. Set to 0 to disable frame.",
    )
    MSI_S_frame7_min_SPI = Param.UInt16(
        0,
        "Minimum SPI ID supported by "
        "secure MSI frame 7. Set to 0 to disable frame.",
    )
    outer_cacheability_support = Param.Bool(
        False,
        "Allow configuration of "
        "outer cachability attributes in ITS and Redistributor",
    )
    wakeup_on_reset = Param.Bool(
        False,
        "Go against specification and start "
        "redistributors in woken-up state at reset. This allows software "
        "that was written for previous versions of the GICv3 "
        "specification to work correctly. This should not be used for "
        "production code or when the distributor is used separately from "
        "the core fast model.",
    )
    SPI_MBIS = Param.Bool(
        True, "Distributor supports meassage based signaling of SPI"
    )
    SPI_unimplemented = Param.String(
        "",
        "A comma spearated list of "
        "unimplemented SPIs ranges for sparse SPI defintion(for ex: "
        "'35, 39-42, 73)'",
    )
    irm_razwi = Param.Bool(
        False, "GICD_IROUTERn.InterruptRoutingMode is RAZ/WI"
    )
    common_LPI_configuration = Param.Unsigned(
        0,
        "Describes which "
        "re-distributors share (and must be configured with the same) "
        "LPI configuration table as described in GICR_TYPER( 0:All, "
        "1:A.x.x.x, 2:A.B.x.x, 3:A.B.C.x",
    )
    single_set_support = Param.Bool(
        False,
        "When true, forces redistributors "
        "to recall interrupts with a clear rather than issue a second Set "
        "command",
    )
    has_mpam = Param.Unsigned(
        0,
        "Implement ARMv8.4 MPAM Registers and "
        "associated functionality.\n\nPossible values of this parameter "
        "are:\n  - 0, feature is not enabled.\n  - 1, feature is "
        "implemented if ARMv8.4 is enabled.\n  - 2, feature is "
        "implemented.",
    )
    mpam_max_partid = Param.UInt16(0xFFFF, "MPAM Maximum PARTID Supported")
    mpam_max_pmg = Param.Unsigned(255, "MPAM Maximum PMG Supported")
    output_attributes = Param.String(
        "ExtendedID[62:55]=MPAM_PMG, "
        "ExtendedID[54:39]=MPAM_PARTID, ExtendedID[38]=MPAM_NS",
        "User-defined transform to be applied to bus attributes like "
        "RequestorID, ExtendedID or UserFlags. Currently, only works for "
        "MPAM Attributes encoding into bus attributes.",
    )
    has_DirtyVLPIOnLoad = Param.Bool(
        False,
        "GICR_VPENDBASER.Dirty reflects "
        "transient loading state when valid=1",
    )
    allow_LPIEN_clear = Param.Bool(
        False, "Allow RW behaviour on GICR_CTLR.LPIEN isntead of set once"
    )
    GICD_legacy_reg_reserved = Param.Bool(
        False,
        "When ARE is RAO/WI, makes "
        "superfluous registers in GICD reserved (including for the "
        "purpose of STATUSR updates)",
    )
    extended_spi_count = Param.Unsigned(0, "Number of extended SPI supported")
    extended_ppi_count = Param.Unsigned(0, "Number of extended PPI supported")
    consolidators = Param.String(
        "",
        "Specify consolidators' base addresses, "
        "interrupt line counts and base interrupt IDs, in the form "
        "'baseAddr0:itlineCount0:baseINTID0, "
        "baseAddr1:itlineCount1:baseINTID1, [etc]' "
        "(eg '0x3f100000:64:4096, 0x3f200000:64:4224'). The "
        "consolidators' count is inferred from the list (maximum of 4). "
        "If not specified, the component contains no consolidators.",
    )


class FastModelGIC(BaseGic):
    type = "FastModelGIC"
    cxx_class = "gem5::fastmodel::GIC"
    cxx_header = "arch/arm/fastmodel/GIC/gic.hh"

    sc_gic = Param.SCFastModelGIC(
        SCFastModelGIC(), "SystemC version of the GIC"
    )

    amba_m = AmbaInitiatorSocket(64, "Memory initiator socket")
    amba_s = AmbaTargetSocket(64, "Memory target socket")

    redistributor = VectorGicv3CommsInitiatorSocket(
        "GIC communication initiator"
    )

    wake_request = VectorIntSourcePin("GIC wake request initiator")

    reset = ResetResponsePort("Reset")
    po_reset = ResetResponsePort("Power on reset")

    # Used for DTB autogeneration
    _state = FdtState(addr_cells=2, size_cells=2, interrupt_cells=3)

    def get_redist_bases(self):
        """
        The format of reg_base_per_redistributor is
        '0.0.0.0=0x2c010000,0.0.0.1=0x2c020000...'
        Return an array of base addresses
        """
        redists = self.sc_gic.reg_base_per_redistributor.split(",")
        # make sure we have at least one redistributor
        assert len(redists) > 0 and "=" in redists[0]
        return [int(r.split("=")[1], 16) for r in redists]

    def get_addr_ranges(self):
        """Return address ranges that should be served by this GIC"""
        sc_gic = self.sc_gic
        gic_frame_size = 0x10000
        # Add range of distributor
        ranges = [AddrRange(sc_gic.reg_base, size=gic_frame_size)]
        # Add ranges of redistributors
        redist_frame_size = gic_frame_size * (4 if sc_gic.has_gicv4_1 else 2)
        ranges += [
            AddrRange(redist_base, size=redist_frame_size)
            for redist_base in self.get_redist_bases()
        ]
        # Add ranges of ITSs
        its_bases = [
            sc_gic.its0_base,
            sc_gic.its1_base,
            sc_gic.its2_base,
            sc_gic.its3_base,
        ]
        ranges += [
            AddrRange(its_bases[i], size=2 * gic_frame_size)
            for i in range(sc_gic.its_count)
        ]

        return ranges

    def interruptCells(self, int_type, int_num, int_trigger, int_affinity=0):
        """
        Interupt cells generation helper:
        Following specifications described in

        Documentation/devicetree/bindings/interrupt-controller/arm,gic-v3.txt
        """
        prop = self._state.interruptCells(0)
        assert len(prop) >= 3
        prop[0] = int_type
        prop[1] = int_num
        prop[2] = int_trigger
        return prop

    def generateDeviceTree(self, state):
        sc_gic = self.sc_gic

        node = FdtNode("interrupt-controller")
        node.appendCompatible(["arm,gic-v3"])
        node.append(self._state.interruptCellsProperty())
        node.append(self._state.addrCellsProperty())
        node.append(self._state.sizeCellsProperty())
        node.append(FdtProperty("ranges"))
        node.append(FdtProperty("interrupt-controller"))

        redist_stride = 0x40000 if sc_gic.has_gicv4_1 else 0x20000
        node.append(
            FdtPropertyWords(
                "redistributor-stride", state.sizeCells(redist_stride)
            )
        )

        regs = (
            state.addrCells(sc_gic.reg_base)
            + state.sizeCells(0x10000)
            + state.addrCells(self.get_redist_bases()[0])
            + state.sizeCells(0x2000000)
        )

        node.append(FdtPropertyWords("reg", regs))
        # Maintenance interrupt (PPI 25).
        node.append(
            FdtPropertyWords("interrupts", self.interruptCells(1, 9, 0x4))
        )

        node.appendPhandle(self)

        # Generate the ITS device tree
        its_frame_size = 0x10000
        its_bases = [
            sc_gic.its0_base,
            sc_gic.its1_base,
            sc_gic.its2_base,
            sc_gic.its3_base,
        ]
        for its_base in its_bases:
            its_node = self.generateBasicPioDeviceNode(
                state, "gic-its", its_base, 2 * its_frame_size
            )
            its_node.appendCompatible(["arm,gic-v3-its"])
            its_node.append(FdtProperty("msi-controller"))
            its_node.append(FdtPropertyWords("#msi-cells", [1]))
            node.append(its_node)

        yield node
