# Copyright (c) 2021 Advanced Micro Devices, Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. 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.
#
# 3. Neither the name of the copyright holder 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 HOLDER 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.defines import buildEnv
from m5.params import *
from m5.proxy import *

from m5.objects.ClockedObject import ClockedObject
from m5.objects.AMDGPU import AMDGPUDevice
from m5.SimObject import SimObject


class VegaPagetableWalker(ClockedObject):
    type = "VegaPagetableWalker"
    cxx_class = "gem5::VegaISA::Walker"
    cxx_header = "arch/amdgpu/vega/pagetable_walker.hh"
    port = RequestPort("Port for the hardware table walker")
    system = Param.System(Parent.any, "system object")


class VegaGPUTLB(ClockedObject):
    type = "VegaGPUTLB"
    cxx_class = "gem5::VegaISA::GpuTLB"
    cxx_header = "arch/amdgpu/vega/tlb.hh"
    size = Param.Int(64, "TLB size (number of entries)")
    assoc = Param.Int(64, "TLB associativity")

    walker = Param.VegaPagetableWalker(
        VegaPagetableWalker(), "page table walker"
    )
    gpu_device = Param.AMDGPUDevice(NULL, "GPU Device")

    hitLatency = Param.Int(2, "Latency of a TLB hit")
    missLatency1 = Param.Int(5, "Latency #1 of a TLB miss")
    missLatency2 = Param.Int(100, "Latency #2 of a TLB miss")
    maxOutstandingReqs = Param.Int(64, "# of maximum outstanding requests")
    cpu_side_ports = VectorResponsePort("Port on side closer to CPU/CU")
    mem_side_ports = VectorRequestPort("Port on side closer to memory")
    allocationPolicy = Param.Bool(True, "Allocate on an access")


class VegaTLBCoalescer(ClockedObject):
    type = "VegaTLBCoalescer"
    cxx_class = "gem5::VegaTLBCoalescer"
    cxx_header = "arch/amdgpu/vega/tlb_coalescer.hh"
    tlb_level = Param.Int(64, "tlb level")
    maxDownstream = Param.Int(64, "max downstream @ this level")
    probesPerCycle = Param.Int(2, "Number of TLB probes per cycle")
    coalescingWindow = Param.Int(1, "Permit coalescing across that many ticks")
    cpu_side_ports = VectorResponsePort("Port on side closer to CPU/CU")
    mem_side_ports = VectorRequestPort("Port on side closer to memory")
    disableCoalescing = Param.Bool(False, "Dispable Coalescing")
