util: Add scripts to recreate amdgpu ROM and MMIOs
Although the binary ROM blob and MMIO trace will be placed in gem5-resources later as 'golden' versions, the scripts are added to provide instructions for power users of Full System amdgpu that may want to recreate the files themselves or use a GPU other than the Vega10 GPU currently modeled. Change-Id: Ica7ef3b9820b30be32a148ce6cf1d2f81dc2adf9 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/46162 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
This commit is contained in:
38
util/amdgpu/fs_files/README.md
Normal file
38
util/amdgpu/fs_files/README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
The utility scripts provided in this directly can be used to recreate the
|
||||
files needed to run Full System amdgpu. Golden versions of these files are
|
||||
provided in the gem5-resources repository.
|
||||
|
||||
These scripts are intended to be run on a Linux system with a discrete AMD
|
||||
GPU card running the same kernel version as the disk image which will be used
|
||||
for Full System simulations. To ensure the kernel versions match, it is
|
||||
recommended that the user uses the `dd` utility to make a copy of the disk
|
||||
image to a secondary physical disk and then boot from that disk image.
|
||||
|
||||
# MMIO Trace collection
|
||||
|
||||
The script `collect_mmio_trace.sh` collects an MMIO trace. For this to work,
|
||||
MMIO tracing must be enabled in the kernel. Using the disk image approach
|
||||
above and/or using recent kernel versions based on Ubuntu, this is enabled
|
||||
by default.
|
||||
|
||||
Before collecting the trace, the amdgpu module must be blacklisted such that
|
||||
we can enable tracing before the modprobe occurs and disabled once modprobe
|
||||
is complete.
|
||||
|
||||
This can be done using either:
|
||||
`echo 'blacklist amdgpu' >> /etc/modprobe.d/blacklist.conf`
|
||||
or
|
||||
add `modprobe.blacklist=amdgpu` to kernel boot command (e.g., in grub)
|
||||
And then reboot.
|
||||
|
||||
The script will take care of the proper options and run the mmiotrace
|
||||
commands. The output trace will likely contain unrelated from other MMIOs
|
||||
and therefore will be around 500MB in size. You will want to reboot again
|
||||
as mmiotrace disables SMP.
|
||||
|
||||
# GPU ROM Dump
|
||||
|
||||
The script `dump_gpu_rom.sh` dumps the GPU ROM. The GPU ROM on x86 resides
|
||||
in the memory range 0xC0000 - 0xDFFFF. The script simply uses the `dd`
|
||||
command to copy this range from /dev/mem. The amdgpu driver must be loaded
|
||||
in order for the ROM to be written to this region, so run `modprobe` first.
|
||||
67
util/amdgpu/fs_files/collect_mmio_trace.sh
Executable file
67
util/amdgpu/fs_files/collect_mmio_trace.sh
Executable file
@@ -0,0 +1,67 @@
|
||||
# Copyright (c) 2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
# This script collects the MMIO trace during initialization of GPU driver.
|
||||
# Before running this, we need to disable the drm module in use.
|
||||
# For AMD GPUs do either:
|
||||
# echo 'blacklist amdgpu' >> /etc/modprobe.d/blacklist.conf
|
||||
# or
|
||||
# add 'modprobe.blacklist=amdgpu' to your kernel command
|
||||
# And then reboot.
|
||||
|
||||
# First load the drm_kms_helper with fbdev_emulation=0
|
||||
modprobe drm_kms_helper fbdev_emulation=0
|
||||
|
||||
# Path to store the trace
|
||||
TRACE_PATH="MMIO.trace"
|
||||
|
||||
# Choose propoer size to make sure you won’t miss any events
|
||||
BUFFER_SIZE=8000
|
||||
|
||||
DRM_MODULE="amdgpu"
|
||||
DRM_MODULE_ARGS="ip_block_mask=0xff"
|
||||
|
||||
# Setup MMIO tracer
|
||||
echo $BUFFER_SIZE > /sys/kernel/debug/tracing/buffer_size_kb
|
||||
echo mmiotrace > /sys/kernel/debug/tracing/current_tracer
|
||||
|
||||
# Re-direct the output to a file, process in background
|
||||
cat /sys/kernel/debug/tracing/trace_pipe > $TRACE_PATH &
|
||||
# Save the process ID, as we need to kill it later on
|
||||
PID=$!
|
||||
|
||||
# Insert the module, start driver initialization
|
||||
echo "Running: modprobe -v $DRM_MODULE $DRM_MODULE_ARGS"
|
||||
modprobe -v $DRM_MODULE $DRM_MODULE_ARGS
|
||||
|
||||
# Kill the background process after module is loaded
|
||||
kill $PID
|
||||
43
util/amdgpu/fs_files/dump_gpu_rom.sh
Executable file
43
util/amdgpu/fs_files/dump_gpu_rom.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
# Copyright (c) 2021 Advanced Micro Devices, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# For use for simulation and test purposes only
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
BLOCK_SIZE="1k"
|
||||
# By default (no expansion enabled), the vga ROM is mapped at 0xc0000 (768kB)
|
||||
ROM_OFFSET=768
|
||||
# 128kB ROM
|
||||
ROM_SIZE=128
|
||||
|
||||
# Path to store the ROM image
|
||||
ROM_PATH="ROM.bin"
|
||||
|
||||
echo "Running: dd if=/dev/mem of=$ROM_PATH bs=$BLOCK_SIZE skip=$ROM_OFFSET count=$ROM_SIZE"
|
||||
dd if=/dev/mem of=$ROM_PATH bs=$BLOCK_SIZE skip=$ROM_OFFSET count=$ROM_SIZE
|
||||
Reference in New Issue
Block a user