# 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.params import *
from m5.proxy import *
from m5.objects.PciDevice import PciDevice
from m5.objects.PciDevice import PciMemBar, PciMemUpperBar, PciLegacyIoBar
from m5.objects.Device import DmaDevice, DmaVirtDevice
from m5.objects.ClockedObject import ClockedObject

# PCI device model for an AMD Vega 10 based GPU. The PCI codes and BARs
# correspond to a Vega Frontier Edition hardware device. None of the PCI
# related values in this class should be changed.
#
# This class requires a ROM binary and an MMIO trace to initialize the
# device registers and memory. It is intended only to be used in full-system
# simulation under Linux where the amdgpu driver is modprobed.
class AMDGPUDevice(PciDevice):
    type = 'AMDGPUDevice'
    cxx_header = "dev/amdgpu/amdgpu_device.hh"
    cxx_class = 'gem5::AMDGPUDevice'

    # IDs for AMD Vega 10
    VendorID = 0x1002
    DeviceID = 0x6863
    # Command 0x3 never gets sent indicating IO and Mem bars are enabled. Hard
    # code the command here and deal unassigned BARs on C++ side.
    Command = 0x3
    Status = 0x0280
    Revision = 0x0
    ClassCode = 0x03
    SubClassCode = 0x00
    ProgIF = 0x00

    # Use max possible BAR size for Vega 10. We can override with driver param
    BAR0 = PciMemBar(size='16GiB')
    BAR1 = PciMemUpperBar()
    BAR2 = PciMemBar(size='2MiB')
    BAR3 = PciMemUpperBar()
    BAR4 = PciLegacyIoBar(addr=0xf000, size='256B')
    BAR5 = PciMemBar(size='512KiB')

    InterruptLine = 14
    InterruptPin = 2
    ExpansionROM = 0

    rom_binary = Param.String("ROM binary dumped from hardware")
    trace_file = Param.String("MMIO trace collected on hardware")
    checkpoint_before_mmios = Param.Bool(False, "Take a checkpoint before the"
                                                " device begins sending MMIOs")

    # Specific to Vega10: Vega10 has two SDMA engines these do not have any
    # assigned function and are referenced by ID so they are given the generic
    # names sdma0, sdma1, ... sdmaN.
    sdma0 = Param.SDMAEngine("SDMA Engine 0")
    sdma1 = Param.SDMAEngine("SDMA Engine 1")

    # The cp is needed here to handle certain packets the device may receive.
    # The config script should not create a new cp here but rather assign the
    # same cp that is assigned to the Shader SimObject.
    cp = Param.GPUCommandProcessor(NULL, "Command Processor")
    pm4_pkt_proc = Param.PM4PacketProcessor("PM4 Packet Processor")
    memory_manager = Param.AMDGPUMemoryManager("GPU Memory Manager")
    memories = VectorParam.AbstractMemory([], "All memories in the device")
    device_ih = Param.AMDGPUInterruptHandler("GPU Interrupt handler")

class SDMAEngine(DmaVirtDevice):
    type = 'SDMAEngine'
    cxx_header = "dev/amdgpu/sdma_engine.hh"
    cxx_class = 'gem5::SDMAEngine'

    gpu_device = Param.AMDGPUDevice(NULL, 'GPU Controller')
    walker = Param.VegaPagetableWalker("Page table walker")

class PM4PacketProcessor(DmaVirtDevice):
    type = 'PM4PacketProcessor'
    cxx_header = "dev/amdgpu/pm4_packet_processor.hh"
    cxx_class = 'gem5::PM4PacketProcessor'

class AMDGPUMemoryManager(ClockedObject):
    type = 'AMDGPUMemoryManager'
    cxx_header = 'dev/amdgpu/memory_manager.hh'
    cxx_class = 'gem5::AMDGPUMemoryManager'

    port = RequestPort('Memory Port to access VRAM (device memory)')
    system = Param.System(Parent.any, 'System the dGPU belongs to')

class AMDGPUInterruptHandler(DmaDevice):
    type = 'AMDGPUInterruptHandler'
    cxx_header = "dev/amdgpu/interrupt_handler.hh"
    cxx_class = 'gem5::AMDGPUInterruptHandler'

class AMDGPUSystemHub(DmaDevice):
    type = 'AMDGPUSystemHub'
    cxx_class = 'gem5::AMDGPUSystemHub'
    cxx_header = "dev/amdgpu/system_hub.hh"
