Adding rocprofilerv2
Change-Id: Ic0cc280ba207d2b8f6ccae1cd4ac3184152fc1ad
[ROCm/rocprofiler commit: 8032adb64f]
This commit is contained in:
1 parent
b23a2f3029
commit
de4abd0d0f
263 files changed
+607729
-307
No files matched your search
@@ -0,0 +1,12 @@
|
||||
# ROCmtools PC sampling
|
||||
|
||||
## Known issues
|
||||
|
||||
* Abnormal process termination with running GPU kernels while PC sampling is
|
||||
active may leak resources, eventually necessitating a GPU reset or system
|
||||
reboot. This is a consequence of the current userspace PC sampling
|
||||
implementation, which must coexist with AMD GPU driver activity in the Linux
|
||||
kernel.
|
||||
|
||||
* The `ioctl` used to synchronize with kfd (part of the AMD GPU driver) may pose
|
||||
a bottleneck on systems with multiple HSA GPU agents.
|
||||
@@ -0,0 +1,119 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include <cassert>
|
||||
#include <atomic>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <hsa/hsa.h>
|
||||
#include <pciaccess.h>
|
||||
|
||||
#include "src/api/rocmtool.h"
|
||||
#include "src/pcsampler/session/pc_sampler.h"
|
||||
#include "src/pcsampler/gfxip/gfxip.h"
|
||||
#include "src/core/hsa/hsa_common.h"
|
||||
#include "src/core/hsa/hsa_support.h"
|
||||
|
||||
namespace rocmtools::pc_sampler {
|
||||
|
||||
PCSampler::PCSampler(
|
||||
rocprofiler_buffer_id_t buffer_id,
|
||||
rocprofiler_filter_id_t filter_id,
|
||||
rocprofiler_session_id_t session_id)
|
||||
: buffer_id_(buffer_id)
|
||||
, filter_id_(filter_id)
|
||||
, session_id_(session_id)
|
||||
, pci_system_initialized_(pci_system_init() == 0)
|
||||
{}
|
||||
|
||||
PCSampler::~PCSampler() {
|
||||
if (pci_system_initialized_) {
|
||||
pci_system_cleanup();
|
||||
pci_system_initialized_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PCSampler::Start() {
|
||||
if (sampler_thread_.joinable()) { return; }
|
||||
|
||||
devices_.clear();
|
||||
|
||||
using agents_t = std::vector<hsa_agent_t>;
|
||||
|
||||
agents_t agents;
|
||||
rocmtools::hsa_support::GetCoreApiTable().hsa_iterate_agents_fn(
|
||||
[](hsa_agent_t agent, void *arg){
|
||||
auto &agents = *reinterpret_cast<agents_t *>(arg);
|
||||
agents.emplace_back(agent);
|
||||
return HSA_STATUS_SUCCESS;
|
||||
},
|
||||
&agents);
|
||||
|
||||
for (const auto &agent : agents) {
|
||||
const auto &ai = rocmtools::hsa_support::GetAgentInfo(agent.handle);
|
||||
if (ai.getType() != HSA_DEVICE_TYPE_GPU) {
|
||||
continue;
|
||||
}
|
||||
devices_.emplace(agent.handle, gfxip::device_t{pci_system_initialized_, ai});
|
||||
}
|
||||
|
||||
keep_running_ = true;
|
||||
sampler_thread_ = std::thread([this]() { SamplerLoop(); });
|
||||
}
|
||||
|
||||
void PCSampler::Stop() {
|
||||
if (!sampler_thread_.joinable()) { return; }
|
||||
|
||||
keep_running_ = false;
|
||||
sampler_thread_.join();
|
||||
}
|
||||
|
||||
void PCSampler::AddRecord(rocprofiler_record_pc_sample_t &record) {
|
||||
const auto tool = rocmtools::GetROCMToolObj();
|
||||
const auto session = tool->GetSession(session_id_);
|
||||
const auto buffer = session->GetBuffer(buffer_id_);
|
||||
|
||||
std::lock_guard<std::mutex> lk(session->GetSessionLock());
|
||||
|
||||
record.header = {
|
||||
ROCPROFILER_PC_SAMPLING_RECORD,
|
||||
{ tool->GetUniqueRecordId() }
|
||||
};
|
||||
buffer->AddRecord(record);
|
||||
}
|
||||
|
||||
void PCSampler::SamplerLoop() {
|
||||
while (keep_running_) {
|
||||
auto next_tick = std::chrono::steady_clock::now() + std::chrono::milliseconds(10);
|
||||
for (auto &agent : devices_) {
|
||||
auto &device = agent.second;
|
||||
if (device.fd_.mmio2.get() >= 0) {
|
||||
gfxip::read_pc_samples_v9_ioctl(device, this);
|
||||
} else {
|
||||
gfxip::read_pc_samples_v9(device, this);
|
||||
}
|
||||
}
|
||||
std::this_thread::sleep_until(next_tick);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include "gfxip.h"
|
||||
#include "aldebaran_ip_offset.h"
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
void aldebaran_reg_offset_init(device_t& dev) {
|
||||
for (int i = 0; i < MAX_INSTANCE; ++i) {
|
||||
dev.reg_offset_[GC_HWIP][i] = (uint32_t*)(&(GC_BASE.instance[i]));
|
||||
dev.reg_offset_[OSSSYS_HWIP][i] = (uint32_t*)(&(OSSSYS_BASE.instance[i]));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include "gfxip.h"
|
||||
#include "arct_ip_offset.h"
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
void arct_reg_offset_init(device_t& dev) {
|
||||
for (int i = 0; i < MAX_INSTANCE; ++i) {
|
||||
dev.reg_offset_[GC_HWIP][i] = (uint32_t*)(&(GC_BASE.instance[i]));
|
||||
dev.reg_offset_[OSSSYS_HWIP][i] = (uint32_t*)(&(OSSSYS_BASE.instance[i]));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,266 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#ifndef _gc_9_4_1_OFFSET_HEADER
|
||||
#define _gc_9_4_1_OFFSET_HEADER
|
||||
|
||||
// addressBlock: gc_grbmdec
|
||||
// base address: 0x8000
|
||||
#define mmGRBM_CNTL 0x0000
|
||||
#define mmGRBM_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_SKEW_CNTL 0x0001
|
||||
#define mmGRBM_SKEW_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_STATUS2 0x0002
|
||||
#define mmGRBM_STATUS2_BASE_IDX 0
|
||||
#define mmGRBM_PWR_CNTL 0x0003
|
||||
#define mmGRBM_PWR_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_STATUS 0x0004
|
||||
#define mmGRBM_STATUS_BASE_IDX 0
|
||||
#define mmGRBM_STATUS_SE0 0x0005
|
||||
#define mmGRBM_STATUS_SE0_BASE_IDX 0
|
||||
#define mmGRBM_STATUS_SE1 0x0006
|
||||
#define mmGRBM_STATUS_SE1_BASE_IDX 0
|
||||
#define mmGRBM_SOFT_RESET 0x0008
|
||||
#define mmGRBM_SOFT_RESET_BASE_IDX 0
|
||||
#define mmGRBM_GFX_CLKEN_CNTL 0x000c
|
||||
#define mmGRBM_GFX_CLKEN_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_WAIT_IDLE_CLOCKS 0x000d
|
||||
#define mmGRBM_WAIT_IDLE_CLOCKS_BASE_IDX 0
|
||||
#define mmGRBM_STATUS_SE2 0x000e
|
||||
#define mmGRBM_STATUS_SE2_BASE_IDX 0
|
||||
#define mmGRBM_STATUS_SE3 0x000f
|
||||
#define mmGRBM_STATUS_SE3_BASE_IDX 0
|
||||
#define mmGRBM_READ_ERROR 0x0016
|
||||
#define mmGRBM_READ_ERROR_BASE_IDX 0
|
||||
#define mmGRBM_READ_ERROR2 0x0017
|
||||
#define mmGRBM_READ_ERROR2_BASE_IDX 0
|
||||
#define mmGRBM_INT_CNTL 0x0018
|
||||
#define mmGRBM_INT_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_TRAP_OP 0x0019
|
||||
#define mmGRBM_TRAP_OP_BASE_IDX 0
|
||||
#define mmGRBM_TRAP_ADDR 0x001a
|
||||
#define mmGRBM_TRAP_ADDR_BASE_IDX 0
|
||||
#define mmGRBM_TRAP_ADDR_MSK 0x001b
|
||||
#define mmGRBM_TRAP_ADDR_MSK_BASE_IDX 0
|
||||
#define mmGRBM_TRAP_WD 0x001c
|
||||
#define mmGRBM_TRAP_WD_BASE_IDX 0
|
||||
#define mmGRBM_TRAP_WD_MSK 0x001d
|
||||
#define mmGRBM_TRAP_WD_MSK_BASE_IDX 0
|
||||
#define mmGRBM_DSM_BYPASS 0x001e
|
||||
#define mmGRBM_DSM_BYPASS_BASE_IDX 0
|
||||
#define mmGRBM_WRITE_ERROR 0x001f
|
||||
#define mmGRBM_WRITE_ERROR_BASE_IDX 0
|
||||
#define mmGRBM_IOV_ERROR 0x0020
|
||||
#define mmGRBM_IOV_ERROR_BASE_IDX 0
|
||||
#define mmGRBM_CHIP_REVISION 0x0021
|
||||
#define mmGRBM_CHIP_REVISION_BASE_IDX 0
|
||||
#define mmGRBM_GFX_CNTL 0x0022
|
||||
#define mmGRBM_GFX_CNTL_BASE_IDX 0
|
||||
#define mmGRBM_RSMU_CFG 0x0023
|
||||
#define mmGRBM_RSMU_CFG_BASE_IDX 0
|
||||
#define mmGRBM_IH_CREDIT 0x0024
|
||||
#define mmGRBM_IH_CREDIT_BASE_IDX 0
|
||||
#define mmGRBM_PWR_CNTL2 0x0025
|
||||
#define mmGRBM_PWR_CNTL2_BASE_IDX 0
|
||||
#define mmGRBM_UTCL2_INVAL_RANGE_START 0x0026
|
||||
#define mmGRBM_UTCL2_INVAL_RANGE_START_BASE_IDX 0
|
||||
#define mmGRBM_UTCL2_INVAL_RANGE_END 0x0027
|
||||
#define mmGRBM_UTCL2_INVAL_RANGE_END_BASE_IDX 0
|
||||
#define mmGRBM_RSMU_READ_ERROR 0x0028
|
||||
#define mmGRBM_RSMU_READ_ERROR_BASE_IDX 0
|
||||
#define mmGRBM_CHICKEN_BITS 0x0029
|
||||
#define mmGRBM_CHICKEN_BITS_BASE_IDX 0
|
||||
#define mmGRBM_FENCE_RANGE0 0x002a
|
||||
#define mmGRBM_FENCE_RANGE0_BASE_IDX 0
|
||||
#define mmGRBM_FENCE_RANGE1 0x002b
|
||||
#define mmGRBM_FENCE_RANGE1_BASE_IDX 0
|
||||
#define mmGRBM_NOWHERE 0x003f
|
||||
#define mmGRBM_NOWHERE_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG0 0x0040
|
||||
#define mmGRBM_SCRATCH_REG0_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG1 0x0041
|
||||
#define mmGRBM_SCRATCH_REG1_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG2 0x0042
|
||||
#define mmGRBM_SCRATCH_REG2_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG3 0x0043
|
||||
#define mmGRBM_SCRATCH_REG3_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG4 0x0044
|
||||
#define mmGRBM_SCRATCH_REG4_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG5 0x0045
|
||||
#define mmGRBM_SCRATCH_REG5_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG6 0x0046
|
||||
#define mmGRBM_SCRATCH_REG6_BASE_IDX 0
|
||||
#define mmGRBM_SCRATCH_REG7 0x0047
|
||||
#define mmGRBM_SCRATCH_REG7_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_cppdec2
|
||||
// base address: 0xc600
|
||||
#define mmCPF_EDC_TAG_CNT 0x1189
|
||||
#define mmCPF_EDC_TAG_CNT_BASE_IDX 0
|
||||
#define mmCPF_EDC_ROQ_CNT 0x118a
|
||||
#define mmCPF_EDC_ROQ_CNT_BASE_IDX 0
|
||||
#define mmCPG_EDC_TAG_CNT 0x118b
|
||||
#define mmCPG_EDC_TAG_CNT_BASE_IDX 0
|
||||
#define mmCPG_EDC_DMA_CNT 0x118d
|
||||
#define mmCPG_EDC_DMA_CNT_BASE_IDX 0
|
||||
#define mmCPC_EDC_SCRATCH_CNT 0x118e
|
||||
#define mmCPC_EDC_SCRATCH_CNT_BASE_IDX 0
|
||||
#define mmCPC_EDC_UCODE_CNT 0x118f
|
||||
#define mmCPC_EDC_UCODE_CNT_BASE_IDX 0
|
||||
#define mmDC_EDC_STATE_CNT 0x1191
|
||||
#define mmDC_EDC_STATE_CNT_BASE_IDX 0
|
||||
#define mmDC_EDC_CSINVOC_CNT 0x1192
|
||||
#define mmDC_EDC_CSINVOC_CNT_BASE_IDX 0
|
||||
#define mmDC_EDC_RESTORE_CNT 0x1193
|
||||
#define mmDC_EDC_RESTORE_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_gdsdec
|
||||
// base address: 0x9700
|
||||
#define mmGDS_EDC_CNT 0x05c5
|
||||
#define mmGDS_EDC_CNT_BASE_IDX 0
|
||||
#define mmGDS_EDC_GRBM_CNT 0x05c6
|
||||
#define mmGDS_EDC_GRBM_CNT_BASE_IDX 0
|
||||
#define mmGDS_EDC_OA_DED 0x05c7
|
||||
#define mmGDS_EDC_OA_DED_BASE_IDX 0
|
||||
#define mmGDS_EDC_OA_PHY_CNT 0x05cb
|
||||
#define mmGDS_EDC_OA_PHY_CNT_BASE_IDX 0
|
||||
#define mmGDS_EDC_OA_PIPE_CNT 0x05cc
|
||||
#define mmGDS_EDC_OA_PIPE_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_shsdec
|
||||
// base address: 0x9000
|
||||
#define mmSPI_EDC_CNT 0x0445
|
||||
#define mmSPI_EDC_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_sqdec
|
||||
// base address: 0x8c00
|
||||
#define mmSQC_EDC_CNT2 0x032c
|
||||
#define mmSQC_EDC_CNT2_BASE_IDX 0
|
||||
#define mmSQC_EDC_CNT3 0x032d
|
||||
#define mmSQC_EDC_CNT3_BASE_IDX 0
|
||||
#define mmSQC_EDC_PARITY_CNT3 0x032e
|
||||
#define mmSQC_EDC_PARITY_CNT3_BASE_IDX 0
|
||||
#define mmSQC_EDC_CNT 0x03a2
|
||||
#define mmSQC_EDC_CNT_BASE_IDX 0
|
||||
#define mmSQ_EDC_SEC_CNT 0x03a3
|
||||
#define mmSQ_EDC_SEC_CNT_BASE_IDX 0
|
||||
#define mmSQ_EDC_DED_CNT 0x03a4
|
||||
#define mmSQ_EDC_DED_CNT_BASE_IDX 0
|
||||
#define mmSQ_EDC_INFO 0x03a5
|
||||
#define mmSQ_EDC_INFO_BASE_IDX 0
|
||||
#define mmSQ_EDC_CNT 0x03a6
|
||||
#define mmSQ_EDC_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_tpdec
|
||||
// base address: 0x9400
|
||||
#define mmTA_EDC_CNT 0x0586
|
||||
#define mmTA_EDC_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_tcdec
|
||||
// base address: 0xac00
|
||||
#define mmTCP_EDC_CNT 0x0b17
|
||||
#define mmTCP_EDC_CNT_BASE_IDX 0
|
||||
#define mmTCP_EDC_CNT_NEW 0x0b18
|
||||
#define mmTCP_EDC_CNT_NEW_BASE_IDX 0
|
||||
#define mmTCP_ATC_EDC_GATCL1_CNT 0x12b1
|
||||
#define mmTCP_ATC_EDC_GATCL1_CNT_BASE_IDX 0
|
||||
#define mmTCI_EDC_CNT 0x0b60
|
||||
#define mmTCI_EDC_CNT_BASE_IDX 0
|
||||
#define mmTCC_EDC_CNT 0x0b82
|
||||
#define mmTCC_EDC_CNT_BASE_IDX 0
|
||||
#define mmTCC_EDC_CNT2 0x0b83
|
||||
#define mmTCC_EDC_CNT2_BASE_IDX 0
|
||||
#define mmTCA_EDC_CNT 0x0bc5
|
||||
#define mmTCA_EDC_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_tpdec
|
||||
// base address: 0x9400
|
||||
#define mmTD_EDC_CNT 0x052e
|
||||
#define mmTD_EDC_CNT_BASE_IDX 0
|
||||
#define mmTA_EDC_CNT 0x0586
|
||||
#define mmTA_EDC_CNT_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_ea_gceadec2
|
||||
// base address: 0x9c00
|
||||
#define mmGCEA_EDC_CNT 0x0706
|
||||
#define mmGCEA_EDC_CNT_BASE_IDX 0
|
||||
#define mmGCEA_EDC_CNT2 0x0707
|
||||
#define mmGCEA_EDC_CNT2_BASE_IDX 0
|
||||
#define mmGCEA_EDC_CNT3 0x071b
|
||||
#define mmGCEA_EDC_CNT3_BASE_IDX 0
|
||||
#define mmGCEA_ERR_STATUS 0x0712
|
||||
#define mmGCEA_ERR_STATUS_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_gfxudec
|
||||
// base address: 0x30000
|
||||
#define mmSCRATCH_REG0 0x2040
|
||||
#define mmSCRATCH_REG0_BASE_IDX 1
|
||||
#define mmSCRATCH_REG1 0x2041
|
||||
#define mmSCRATCH_REG1_BASE_IDX 1
|
||||
#define mmSCRATCH_REG2 0x2042
|
||||
#define mmSCRATCH_REG2_BASE_IDX 1
|
||||
#define mmSCRATCH_REG3 0x2043
|
||||
#define mmSCRATCH_REG3_BASE_IDX 1
|
||||
#define mmSCRATCH_REG4 0x2044
|
||||
#define mmSCRATCH_REG4_BASE_IDX 1
|
||||
#define mmSCRATCH_REG5 0x2045
|
||||
#define mmSCRATCH_REG5_BASE_IDX 1
|
||||
#define mmSCRATCH_REG6 0x2046
|
||||
#define mmSCRATCH_REG6_BASE_IDX 1
|
||||
#define mmSCRATCH_REG7 0x2047
|
||||
#define mmSCRATCH_REG7_BASE_IDX 1
|
||||
#define mmGRBM_GFX_INDEX 0x2200
|
||||
#define mmGRBM_GFX_INDEX_BASE_IDX 1
|
||||
|
||||
// addressBlock: gc_utcl2_atcl2dec
|
||||
// base address: 0xa000
|
||||
#define mmATC_L2_CACHE_4K_DSM_INDEX 0x080e
|
||||
#define mmATC_L2_CACHE_4K_DSM_INDEX_BASE_IDX 0
|
||||
#define mmATC_L2_CACHE_2M_DSM_INDEX 0x080f
|
||||
#define mmATC_L2_CACHE_2M_DSM_INDEX_BASE_IDX 0
|
||||
#define mmATC_L2_CACHE_4K_DSM_CNTL 0x0810
|
||||
#define mmATC_L2_CACHE_4K_DSM_CNTL_BASE_IDX 0
|
||||
#define mmATC_L2_CACHE_2M_DSM_CNTL 0x0811
|
||||
#define mmATC_L2_CACHE_2M_DSM_CNTL_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_utcl2_vml2pfdec
|
||||
// base address: 0xa100
|
||||
#define mmVML2_MEM_ECC_INDEX 0x0860
|
||||
#define mmVML2_MEM_ECC_INDEX_BASE_IDX 0
|
||||
#define mmVML2_WALKER_MEM_ECC_INDEX 0x0861
|
||||
#define mmVML2_WALKER_MEM_ECC_INDEX_BASE_IDX 0
|
||||
#define mmUTCL2_MEM_ECC_INDEX 0x0862
|
||||
#define mmUTCL2_MEM_ECC_INDEX_BASE_IDX 0
|
||||
|
||||
#define mmVML2_MEM_ECC_CNTL 0x0863
|
||||
#define mmVML2_MEM_ECC_CNTL_BASE_IDX 0
|
||||
#define mmVML2_WALKER_MEM_ECC_CNTL 0x0864
|
||||
#define mmVML2_WALKER_MEM_ECC_CNTL_BASE_IDX 0
|
||||
#define mmUTCL2_MEM_ECC_CNTL 0x0865
|
||||
#define mmUTCL2_MEM_ECC_CNTL_BASE_IDX 0
|
||||
|
||||
// addressBlock: gc_rlcpdec
|
||||
// base address: 0x3b000
|
||||
#define mmRLC_EDC_CNT 0x4d40
|
||||
#define mmRLC_EDC_CNT_BASE_IDX 1
|
||||
#define mmRLC_EDC_CNT2 0x4d41
|
||||
#define mmRLC_EDC_CNT2_BASE_IDX 1
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,764 @@
|
||||
/*
|
||||
* Copyright (C) 2020 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#ifndef _gc_9_4_1_SH_MASK_HEADER
|
||||
#define _gc_9_4_1_SH_MASK_HEADER
|
||||
|
||||
// addressBlock: gc_cppdec2
|
||||
//CPF_EDC_TAG_CNT
|
||||
#define CPF_EDC_TAG_CNT__DED_COUNT__SHIFT 0x0
|
||||
#define CPF_EDC_TAG_CNT__SEC_COUNT__SHIFT 0x2
|
||||
#define CPF_EDC_TAG_CNT__DED_COUNT_MASK 0x00000003L
|
||||
#define CPF_EDC_TAG_CNT__SEC_COUNT_MASK 0x0000000CL
|
||||
//CPF_EDC_ROQ_CNT
|
||||
#define CPF_EDC_ROQ_CNT__DED_COUNT_ME1__SHIFT 0x0
|
||||
#define CPF_EDC_ROQ_CNT__SEC_COUNT_ME1__SHIFT 0x2
|
||||
#define CPF_EDC_ROQ_CNT__DED_COUNT_ME2__SHIFT 0x4
|
||||
#define CPF_EDC_ROQ_CNT__SEC_COUNT_ME2__SHIFT 0x6
|
||||
#define CPF_EDC_ROQ_CNT__DED_COUNT_ME1_MASK 0x00000003L
|
||||
#define CPF_EDC_ROQ_CNT__SEC_COUNT_ME1_MASK 0x0000000CL
|
||||
#define CPF_EDC_ROQ_CNT__DED_COUNT_ME2_MASK 0x00000030L
|
||||
#define CPF_EDC_ROQ_CNT__SEC_COUNT_ME2_MASK 0x000000C0L
|
||||
//CPG_EDC_TAG_CNT
|
||||
#define CPG_EDC_TAG_CNT__DED_COUNT__SHIFT 0x0
|
||||
#define CPG_EDC_TAG_CNT__SEC_COUNT__SHIFT 0x2
|
||||
#define CPG_EDC_TAG_CNT__DED_COUNT_MASK 0x00000003L
|
||||
#define CPG_EDC_TAG_CNT__SEC_COUNT_MASK 0x0000000CL
|
||||
//CPG_EDC_DMA_CNT
|
||||
#define CPG_EDC_DMA_CNT__ROQ_DED_COUNT__SHIFT 0x0
|
||||
#define CPG_EDC_DMA_CNT__ROQ_SEC_COUNT__SHIFT 0x2
|
||||
#define CPG_EDC_DMA_CNT__TAG_DED_COUNT__SHIFT 0x4
|
||||
#define CPG_EDC_DMA_CNT__TAG_SEC_COUNT__SHIFT 0x6
|
||||
#define CPG_EDC_DMA_CNT__ROQ_DED_COUNT_MASK 0x00000003L
|
||||
#define CPG_EDC_DMA_CNT__ROQ_SEC_COUNT_MASK 0x0000000CL
|
||||
#define CPG_EDC_DMA_CNT__TAG_DED_COUNT_MASK 0x00000030L
|
||||
#define CPG_EDC_DMA_CNT__TAG_SEC_COUNT_MASK 0x000000C0L
|
||||
//CPC_EDC_SCRATCH_CNT
|
||||
#define CPC_EDC_SCRATCH_CNT__DED_COUNT__SHIFT 0x0
|
||||
#define CPC_EDC_SCRATCH_CNT__SEC_COUNT__SHIFT 0x2
|
||||
#define CPC_EDC_SCRATCH_CNT__DED_COUNT_MASK 0x00000003L
|
||||
#define CPC_EDC_SCRATCH_CNT__SEC_COUNT_MASK 0x0000000CL
|
||||
//CPC_EDC_UCODE_CNT
|
||||
#define CPC_EDC_UCODE_CNT__DED_COUNT__SHIFT 0x0
|
||||
#define CPC_EDC_UCODE_CNT__SEC_COUNT__SHIFT 0x2
|
||||
#define CPC_EDC_UCODE_CNT__DED_COUNT_MASK 0x00000003L
|
||||
#define CPC_EDC_UCODE_CNT__SEC_COUNT_MASK 0x0000000CL
|
||||
//DC_EDC_STATE_CNT
|
||||
#define DC_EDC_STATE_CNT__DED_COUNT_ME1__SHIFT 0x0
|
||||
#define DC_EDC_STATE_CNT__SEC_COUNT_ME1__SHIFT 0x2
|
||||
#define DC_EDC_STATE_CNT__DED_COUNT_ME1_MASK 0x00000003L
|
||||
#define DC_EDC_STATE_CNT__SEC_COUNT_ME1_MASK 0x0000000CL
|
||||
//DC_EDC_CSINVOC_CNT
|
||||
#define DC_EDC_CSINVOC_CNT__DED_COUNT_ME1__SHIFT 0x0
|
||||
#define DC_EDC_CSINVOC_CNT__SEC_COUNT_ME1__SHIFT 0x2
|
||||
#define DC_EDC_CSINVOC_CNT__DED_COUNT1_ME1__SHIFT 0x4
|
||||
#define DC_EDC_CSINVOC_CNT__SEC_COUNT1_ME1__SHIFT 0x6
|
||||
#define DC_EDC_CSINVOC_CNT__DED_COUNT_ME1_MASK 0x00000003L
|
||||
#define DC_EDC_CSINVOC_CNT__SEC_COUNT_ME1_MASK 0x0000000CL
|
||||
#define DC_EDC_CSINVOC_CNT__DED_COUNT1_ME1_MASK 0x00000030L
|
||||
#define DC_EDC_CSINVOC_CNT__SEC_COUNT1_ME1_MASK 0x000000C0L
|
||||
//DC_EDC_RESTORE_CNT
|
||||
#define DC_EDC_RESTORE_CNT__DED_COUNT_ME1__SHIFT 0x0
|
||||
#define DC_EDC_RESTORE_CNT__SEC_COUNT_ME1__SHIFT 0x2
|
||||
#define DC_EDC_RESTORE_CNT__DED_COUNT1_ME1__SHIFT 0x4
|
||||
#define DC_EDC_RESTORE_CNT__SEC_COUNT1_ME1__SHIFT 0x6
|
||||
#define DC_EDC_RESTORE_CNT__DED_COUNT_ME1_MASK 0x00000003L
|
||||
#define DC_EDC_RESTORE_CNT__SEC_COUNT_ME1_MASK 0x0000000CL
|
||||
#define DC_EDC_RESTORE_CNT__DED_COUNT1_ME1_MASK 0x00000030L
|
||||
#define DC_EDC_RESTORE_CNT__SEC_COUNT1_ME1_MASK 0x000000C0L
|
||||
|
||||
// addressBlock: gc_gdsdec
|
||||
//GDS_EDC_CNT
|
||||
#define GDS_EDC_CNT__GDS_MEM_DED__SHIFT 0x0
|
||||
#define GDS_EDC_CNT__GDS_MEM_SEC__SHIFT 0x4
|
||||
#define GDS_EDC_CNT__UNUSED__SHIFT 0x6
|
||||
#define GDS_EDC_CNT__GDS_MEM_DED_MASK 0x00000003L
|
||||
#define GDS_EDC_CNT__GDS_MEM_SEC_MASK 0x00000030L
|
||||
#define GDS_EDC_CNT__UNUSED_MASK 0xFFFFFFC0L
|
||||
//GDS_EDC_GRBM_CNT
|
||||
#define GDS_EDC_GRBM_CNT__DED__SHIFT 0x0
|
||||
#define GDS_EDC_GRBM_CNT__SEC__SHIFT 0x2
|
||||
#define GDS_EDC_GRBM_CNT__UNUSED__SHIFT 0x4
|
||||
#define GDS_EDC_GRBM_CNT__DED_MASK 0x00000003L
|
||||
#define GDS_EDC_GRBM_CNT__SEC_MASK 0x0000000CL
|
||||
#define GDS_EDC_GRBM_CNT__UNUSED_MASK 0xFFFFFFF0L
|
||||
//GDS_EDC_OA_DED
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_PIX_DED__SHIFT 0x0
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_VTX_DED__SHIFT 0x1
|
||||
#define GDS_EDC_OA_DED__ME0_CS_DED__SHIFT 0x2
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_GS_DED__SHIFT 0x3
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE0_DED__SHIFT 0x4
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE1_DED__SHIFT 0x5
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE2_DED__SHIFT 0x6
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE3_DED__SHIFT 0x7
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE0_DED__SHIFT 0x8
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE1_DED__SHIFT 0x9
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE2_DED__SHIFT 0xa
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE3_DED__SHIFT 0xb
|
||||
#define GDS_EDC_OA_DED__UNUSED1__SHIFT 0xc
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_PIX_DED_MASK 0x00000001L
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_VTX_DED_MASK 0x00000002L
|
||||
#define GDS_EDC_OA_DED__ME0_CS_DED_MASK 0x00000004L
|
||||
#define GDS_EDC_OA_DED__ME0_GFXHP3D_GS_DED_MASK 0x00000008L
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE0_DED_MASK 0x00000010L
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE1_DED_MASK 0x00000020L
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE2_DED_MASK 0x00000040L
|
||||
#define GDS_EDC_OA_DED__ME1_PIPE3_DED_MASK 0x00000080L
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE0_DED_MASK 0x00000100L
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE1_DED_MASK 0x00000200L
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE2_DED_MASK 0x00000400L
|
||||
#define GDS_EDC_OA_DED__ME2_PIPE3_DED_MASK 0x00000800L
|
||||
#define GDS_EDC_OA_DED__UNUSED1_MASK 0xFFFFF000L
|
||||
//GDS_EDC_OA_PHY_CNT
|
||||
#define GDS_EDC_OA_PHY_CNT__ME0_CS_PIPE_MEM_SEC__SHIFT 0x0
|
||||
#define GDS_EDC_OA_PHY_CNT__ME0_CS_PIPE_MEM_DED__SHIFT 0x2
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_CMD_RAM_MEM_SEC__SHIFT 0x4
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_CMD_RAM_MEM_DED__SHIFT 0x6
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_DATA_RAM_MEM_SEC__SHIFT 0x8
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_DATA_RAM_MEM_DED__SHIFT 0xa
|
||||
#define GDS_EDC_OA_PHY_CNT__UNUSED1__SHIFT 0xc
|
||||
#define GDS_EDC_OA_PHY_CNT__ME0_CS_PIPE_MEM_SEC_MASK 0x00000003L
|
||||
#define GDS_EDC_OA_PHY_CNT__ME0_CS_PIPE_MEM_DED_MASK 0x0000000CL
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_CMD_RAM_MEM_SEC_MASK 0x00000030L
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_CMD_RAM_MEM_DED_MASK 0x000000C0L
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_DATA_RAM_MEM_SEC_MASK 0x00000300L
|
||||
#define GDS_EDC_OA_PHY_CNT__PHY_DATA_RAM_MEM_DED_MASK 0x00000C00L
|
||||
#define GDS_EDC_OA_PHY_CNT__UNUSED1_MASK 0xFFFFF000L
|
||||
//GDS_EDC_OA_PIPE_CNT
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE0_PIPE_MEM_SEC__SHIFT 0x0
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE0_PIPE_MEM_DED__SHIFT 0x2
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE1_PIPE_MEM_SEC__SHIFT 0x4
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE1_PIPE_MEM_DED__SHIFT 0x6
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE2_PIPE_MEM_SEC__SHIFT 0x8
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE2_PIPE_MEM_DED__SHIFT 0xa
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE3_PIPE_MEM_SEC__SHIFT 0xc
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE3_PIPE_MEM_DED__SHIFT 0xe
|
||||
#define GDS_EDC_OA_PIPE_CNT__UNUSED__SHIFT 0x10
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE0_PIPE_MEM_SEC_MASK 0x00000003L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE0_PIPE_MEM_DED_MASK 0x0000000CL
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE1_PIPE_MEM_SEC_MASK 0x00000030L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE1_PIPE_MEM_DED_MASK 0x000000C0L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE2_PIPE_MEM_SEC_MASK 0x00000300L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE2_PIPE_MEM_DED_MASK 0x00000C00L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE3_PIPE_MEM_SEC_MASK 0x00003000L
|
||||
#define GDS_EDC_OA_PIPE_CNT__ME1_PIPE3_PIPE_MEM_DED_MASK 0x0000C000L
|
||||
#define GDS_EDC_OA_PIPE_CNT__UNUSED_MASK 0xFFFF0000L
|
||||
|
||||
// addressBlock: gc_shsdec
|
||||
//SPI_EDC_CNT
|
||||
#define SPI_EDC_CNT__SPI_SR_MEM_SEC_COUNT__SHIFT 0x0
|
||||
#define SPI_EDC_CNT__SPI_SR_MEM_DED_COUNT__SHIFT 0x2
|
||||
#define SPI_EDC_CNT__SPI_GDS_EXPREQ_SEC_COUNT__SHIFT 0x4
|
||||
#define SPI_EDC_CNT__SPI_GDS_EXPREQ_DED_COUNT__SHIFT 0x6
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_30_SEC_COUNT__SHIFT 0x8
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_30_DED_COUNT__SHIFT 0xa
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_61_SEC_COUNT__SHIFT 0xc
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_61_DED_COUNT__SHIFT 0xe
|
||||
#define SPI_EDC_CNT__SPI_LIFE_CNT_SEC_COUNT__SHIFT 0x10
|
||||
#define SPI_EDC_CNT__SPI_LIFE_CNT_DED_COUNT__SHIFT 0x12
|
||||
#define SPI_EDC_CNT__SPI_SR_MEM_SEC_COUNT_MASK 0x00000003L
|
||||
#define SPI_EDC_CNT__SPI_SR_MEM_DED_COUNT_MASK 0x0000000CL
|
||||
#define SPI_EDC_CNT__SPI_GDS_EXPREQ_SEC_COUNT_MASK 0x00000030L
|
||||
#define SPI_EDC_CNT__SPI_GDS_EXPREQ_DED_COUNT_MASK 0x000000C0L
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_30_SEC_COUNT_MASK 0x00000300L
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_30_DED_COUNT_MASK 0x00000C00L
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_61_SEC_COUNT_MASK 0x00003000L
|
||||
#define SPI_EDC_CNT__SPI_WB_GRANT_61_DED_COUNT_MASK 0x0000C000L
|
||||
#define SPI_EDC_CNT__SPI_LIFE_CNT_SEC_COUNT_MASK 0x00030000L
|
||||
#define SPI_EDC_CNT__SPI_LIFE_CNT_DED_COUNT_MASK 0x000C0000L
|
||||
|
||||
// addressBlock: gc_sqdec
|
||||
//SQC_EDC_CNT2
|
||||
#define SQC_EDC_CNT2__INST_BANKA_TAG_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define SQC_EDC_CNT2__INST_BANKA_TAG_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define SQC_EDC_CNT2__INST_BANKA_BANK_RAM_SEC_COUNT__SHIFT 0x4
|
||||
#define SQC_EDC_CNT2__INST_BANKA_BANK_RAM_DED_COUNT__SHIFT 0x6
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_TAG_RAM_SEC_COUNT__SHIFT 0x8
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_TAG_RAM_DED_COUNT__SHIFT 0xa
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_BANK_RAM_SEC_COUNT__SHIFT 0xc
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_BANK_RAM_DED_COUNT__SHIFT 0xe
|
||||
#define SQC_EDC_CNT2__INST_UTCL1_LFIFO_SEC_COUNT__SHIFT 0x10
|
||||
#define SQC_EDC_CNT2__INST_UTCL1_LFIFO_DED_COUNT__SHIFT 0x12
|
||||
#define SQC_EDC_CNT2__INST_BANKA_TAG_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define SQC_EDC_CNT2__INST_BANKA_TAG_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
#define SQC_EDC_CNT2__INST_BANKA_BANK_RAM_SEC_COUNT_MASK 0x00000030L
|
||||
#define SQC_EDC_CNT2__INST_BANKA_BANK_RAM_DED_COUNT_MASK 0x000000C0L
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_TAG_RAM_SEC_COUNT_MASK 0x00000300L
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_TAG_RAM_DED_COUNT_MASK 0x00000C00L
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_BANK_RAM_SEC_COUNT_MASK 0x00003000L
|
||||
#define SQC_EDC_CNT2__DATA_BANKA_BANK_RAM_DED_COUNT_MASK 0x0000C000L
|
||||
#define SQC_EDC_CNT2__INST_UTCL1_LFIFO_SEC_COUNT_MASK 0x00030000L
|
||||
#define SQC_EDC_CNT2__INST_UTCL1_LFIFO_DED_COUNT_MASK 0x000C0000L
|
||||
//SQC_EDC_CNT3
|
||||
#define SQC_EDC_CNT3__INST_BANKB_TAG_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define SQC_EDC_CNT3__INST_BANKB_TAG_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define SQC_EDC_CNT3__INST_BANKB_BANK_RAM_SEC_COUNT__SHIFT 0x4
|
||||
#define SQC_EDC_CNT3__INST_BANKB_BANK_RAM_DED_COUNT__SHIFT 0x6
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_TAG_RAM_SEC_COUNT__SHIFT 0x8
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_TAG_RAM_DED_COUNT__SHIFT 0xa
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_BANK_RAM_SEC_COUNT__SHIFT 0xc
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_BANK_RAM_DED_COUNT__SHIFT 0xe
|
||||
#define SQC_EDC_CNT3__INST_BANKB_TAG_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define SQC_EDC_CNT3__INST_BANKB_TAG_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
#define SQC_EDC_CNT3__INST_BANKB_BANK_RAM_SEC_COUNT_MASK 0x00000030L
|
||||
#define SQC_EDC_CNT3__INST_BANKB_BANK_RAM_DED_COUNT_MASK 0x000000C0L
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_TAG_RAM_SEC_COUNT_MASK 0x00000300L
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_TAG_RAM_DED_COUNT_MASK 0x00000C00L
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_BANK_RAM_SEC_COUNT_MASK 0x00003000L
|
||||
#define SQC_EDC_CNT3__DATA_BANKB_BANK_RAM_DED_COUNT_MASK 0x0000C000L
|
||||
//SQC_EDC_PARITY_CNT3
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_UTCL1_MISS_FIFO_SEC_COUNT__SHIFT 0x0
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_UTCL1_MISS_FIFO_DED_COUNT__SHIFT 0x2
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_MISS_FIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_MISS_FIFO_DED_COUNT__SHIFT 0x6
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_HIT_FIFO_SEC_COUNT__SHIFT 0x8
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_HIT_FIFO_DED_COUNT__SHIFT 0xa
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_MISS_FIFO_SEC_COUNT__SHIFT 0xc
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_MISS_FIFO_DED_COUNT__SHIFT 0xe
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_UTCL1_MISS_FIFO_SEC_COUNT__SHIFT 0x10
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_UTCL1_MISS_FIFO_DED_COUNT__SHIFT 0x12
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_MISS_FIFO_SEC_COUNT__SHIFT 0x14
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_MISS_FIFO_DED_COUNT__SHIFT 0x16
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_HIT_FIFO_SEC_COUNT__SHIFT 0x18
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_HIT_FIFO_DED_COUNT__SHIFT 0x1a
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_MISS_FIFO_SEC_COUNT__SHIFT 0x1c
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_MISS_FIFO_DED_COUNT__SHIFT 0x1e
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_UTCL1_MISS_FIFO_SEC_COUNT_MASK 0x00000003L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_UTCL1_MISS_FIFO_DED_COUNT_MASK 0x0000000CL
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_MISS_FIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKA_MISS_FIFO_DED_COUNT_MASK 0x000000C0L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_HIT_FIFO_SEC_COUNT_MASK 0x00000300L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_HIT_FIFO_DED_COUNT_MASK 0x00000C00L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_MISS_FIFO_SEC_COUNT_MASK 0x00003000L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKA_MISS_FIFO_DED_COUNT_MASK 0x0000C000L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_UTCL1_MISS_FIFO_SEC_COUNT_MASK 0x00030000L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_UTCL1_MISS_FIFO_DED_COUNT_MASK 0x000C0000L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_MISS_FIFO_SEC_COUNT_MASK 0x00300000L
|
||||
#define SQC_EDC_PARITY_CNT3__INST_BANKB_MISS_FIFO_DED_COUNT_MASK 0x00C00000L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_HIT_FIFO_SEC_COUNT_MASK 0x03000000L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_HIT_FIFO_DED_COUNT_MASK 0x0C000000L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_MISS_FIFO_SEC_COUNT_MASK 0x30000000L
|
||||
#define SQC_EDC_PARITY_CNT3__DATA_BANKB_MISS_FIFO_DED_COUNT_MASK 0xC0000000L
|
||||
//SQC_EDC_CNT
|
||||
#define SQC_EDC_CNT__DATA_CU0_WRITE_DATA_BUF_SEC_COUNT__SHIFT 0x0
|
||||
#define SQC_EDC_CNT__DATA_CU0_WRITE_DATA_BUF_DED_COUNT__SHIFT 0x2
|
||||
#define SQC_EDC_CNT__DATA_CU0_UTCL1_LFIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define SQC_EDC_CNT__DATA_CU0_UTCL1_LFIFO_DED_COUNT__SHIFT 0x6
|
||||
#define SQC_EDC_CNT__DATA_CU1_WRITE_DATA_BUF_SEC_COUNT__SHIFT 0x8
|
||||
#define SQC_EDC_CNT__DATA_CU1_WRITE_DATA_BUF_DED_COUNT__SHIFT 0xa
|
||||
#define SQC_EDC_CNT__DATA_CU1_UTCL1_LFIFO_SEC_COUNT__SHIFT 0xc
|
||||
#define SQC_EDC_CNT__DATA_CU1_UTCL1_LFIFO_DED_COUNT__SHIFT 0xe
|
||||
#define SQC_EDC_CNT__DATA_CU2_WRITE_DATA_BUF_SEC_COUNT__SHIFT 0x10
|
||||
#define SQC_EDC_CNT__DATA_CU2_WRITE_DATA_BUF_DED_COUNT__SHIFT 0x12
|
||||
#define SQC_EDC_CNT__DATA_CU2_UTCL1_LFIFO_SEC_COUNT__SHIFT 0x14
|
||||
#define SQC_EDC_CNT__DATA_CU2_UTCL1_LFIFO_DED_COUNT__SHIFT 0x16
|
||||
#define SQC_EDC_CNT__DATA_CU3_WRITE_DATA_BUF_SEC_COUNT__SHIFT 0x18
|
||||
#define SQC_EDC_CNT__DATA_CU3_WRITE_DATA_BUF_DED_COUNT__SHIFT 0x1a
|
||||
#define SQC_EDC_CNT__DATA_CU3_UTCL1_LFIFO_SEC_COUNT__SHIFT 0x1c
|
||||
#define SQC_EDC_CNT__DATA_CU3_UTCL1_LFIFO_DED_COUNT__SHIFT 0x1e
|
||||
#define SQC_EDC_CNT__DATA_CU0_WRITE_DATA_BUF_SEC_COUNT_MASK 0x00000003L
|
||||
#define SQC_EDC_CNT__DATA_CU0_WRITE_DATA_BUF_DED_COUNT_MASK 0x0000000CL
|
||||
#define SQC_EDC_CNT__DATA_CU0_UTCL1_LFIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define SQC_EDC_CNT__DATA_CU0_UTCL1_LFIFO_DED_COUNT_MASK 0x000000C0L
|
||||
#define SQC_EDC_CNT__DATA_CU1_WRITE_DATA_BUF_SEC_COUNT_MASK 0x00000300L
|
||||
#define SQC_EDC_CNT__DATA_CU1_WRITE_DATA_BUF_DED_COUNT_MASK 0x00000C00L
|
||||
#define SQC_EDC_CNT__DATA_CU1_UTCL1_LFIFO_SEC_COUNT_MASK 0x00003000L
|
||||
#define SQC_EDC_CNT__DATA_CU1_UTCL1_LFIFO_DED_COUNT_MASK 0x0000C000L
|
||||
#define SQC_EDC_CNT__DATA_CU2_WRITE_DATA_BUF_SEC_COUNT_MASK 0x00030000L
|
||||
#define SQC_EDC_CNT__DATA_CU2_WRITE_DATA_BUF_DED_COUNT_MASK 0x000C0000L
|
||||
#define SQC_EDC_CNT__DATA_CU2_UTCL1_LFIFO_SEC_COUNT_MASK 0x00300000L
|
||||
#define SQC_EDC_CNT__DATA_CU2_UTCL1_LFIFO_DED_COUNT_MASK 0x00C00000L
|
||||
#define SQC_EDC_CNT__DATA_CU3_WRITE_DATA_BUF_SEC_COUNT_MASK 0x03000000L
|
||||
#define SQC_EDC_CNT__DATA_CU3_WRITE_DATA_BUF_DED_COUNT_MASK 0x0C000000L
|
||||
#define SQC_EDC_CNT__DATA_CU3_UTCL1_LFIFO_SEC_COUNT_MASK 0x30000000L
|
||||
#define SQC_EDC_CNT__DATA_CU3_UTCL1_LFIFO_DED_COUNT_MASK 0xC0000000L
|
||||
//SQ_EDC_SEC_CNT
|
||||
#define SQ_EDC_SEC_CNT__LDS_SEC__SHIFT 0x0
|
||||
#define SQ_EDC_SEC_CNT__SGPR_SEC__SHIFT 0x8
|
||||
#define SQ_EDC_SEC_CNT__VGPR_SEC__SHIFT 0x10
|
||||
#define SQ_EDC_SEC_CNT__LDS_SEC_MASK 0x000000FFL
|
||||
#define SQ_EDC_SEC_CNT__SGPR_SEC_MASK 0x0000FF00L
|
||||
#define SQ_EDC_SEC_CNT__VGPR_SEC_MASK 0x00FF0000L
|
||||
//SQ_EDC_DED_CNT
|
||||
#define SQ_EDC_DED_CNT__LDS_DED__SHIFT 0x0
|
||||
#define SQ_EDC_DED_CNT__SGPR_DED__SHIFT 0x8
|
||||
#define SQ_EDC_DED_CNT__VGPR_DED__SHIFT 0x10
|
||||
#define SQ_EDC_DED_CNT__LDS_DED_MASK 0x000000FFL
|
||||
#define SQ_EDC_DED_CNT__SGPR_DED_MASK 0x0000FF00L
|
||||
#define SQ_EDC_DED_CNT__VGPR_DED_MASK 0x00FF0000L
|
||||
//SQ_EDC_INFO
|
||||
#define SQ_EDC_INFO__WAVE_ID__SHIFT 0x0
|
||||
#define SQ_EDC_INFO__SIMD_ID__SHIFT 0x4
|
||||
#define SQ_EDC_INFO__SOURCE__SHIFT 0x6
|
||||
#define SQ_EDC_INFO__VM_ID__SHIFT 0x9
|
||||
#define SQ_EDC_INFO__WAVE_ID_MASK 0x0000000FL
|
||||
#define SQ_EDC_INFO__SIMD_ID_MASK 0x00000030L
|
||||
#define SQ_EDC_INFO__SOURCE_MASK 0x000001C0L
|
||||
#define SQ_EDC_INFO__VM_ID_MASK 0x00001E00L
|
||||
//SQ_EDC_CNT
|
||||
#define SQ_EDC_CNT__LDS_D_SEC_COUNT__SHIFT 0x0
|
||||
#define SQ_EDC_CNT__LDS_D_DED_COUNT__SHIFT 0x2
|
||||
#define SQ_EDC_CNT__LDS_I_SEC_COUNT__SHIFT 0x4
|
||||
#define SQ_EDC_CNT__LDS_I_DED_COUNT__SHIFT 0x6
|
||||
#define SQ_EDC_CNT__SGPR_SEC_COUNT__SHIFT 0x8
|
||||
#define SQ_EDC_CNT__SGPR_DED_COUNT__SHIFT 0xa
|
||||
#define SQ_EDC_CNT__VGPR0_SEC_COUNT__SHIFT 0xc
|
||||
#define SQ_EDC_CNT__VGPR0_DED_COUNT__SHIFT 0xe
|
||||
#define SQ_EDC_CNT__VGPR1_SEC_COUNT__SHIFT 0x10
|
||||
#define SQ_EDC_CNT__VGPR1_DED_COUNT__SHIFT 0x12
|
||||
#define SQ_EDC_CNT__VGPR2_SEC_COUNT__SHIFT 0x14
|
||||
#define SQ_EDC_CNT__VGPR2_DED_COUNT__SHIFT 0x16
|
||||
#define SQ_EDC_CNT__VGPR3_SEC_COUNT__SHIFT 0x18
|
||||
#define SQ_EDC_CNT__VGPR3_DED_COUNT__SHIFT 0x1a
|
||||
#define SQ_EDC_CNT__LDS_D_SEC_COUNT_MASK 0x00000003L
|
||||
#define SQ_EDC_CNT__LDS_D_DED_COUNT_MASK 0x0000000CL
|
||||
#define SQ_EDC_CNT__LDS_I_SEC_COUNT_MASK 0x00000030L
|
||||
#define SQ_EDC_CNT__LDS_I_DED_COUNT_MASK 0x000000C0L
|
||||
#define SQ_EDC_CNT__SGPR_SEC_COUNT_MASK 0x00000300L
|
||||
#define SQ_EDC_CNT__SGPR_DED_COUNT_MASK 0x00000C00L
|
||||
#define SQ_EDC_CNT__VGPR0_SEC_COUNT_MASK 0x00003000L
|
||||
#define SQ_EDC_CNT__VGPR0_DED_COUNT_MASK 0x0000C000L
|
||||
#define SQ_EDC_CNT__VGPR1_SEC_COUNT_MASK 0x00030000L
|
||||
#define SQ_EDC_CNT__VGPR1_DED_COUNT_MASK 0x000C0000L
|
||||
#define SQ_EDC_CNT__VGPR2_SEC_COUNT_MASK 0x00300000L
|
||||
#define SQ_EDC_CNT__VGPR2_DED_COUNT_MASK 0x00C00000L
|
||||
#define SQ_EDC_CNT__VGPR3_SEC_COUNT_MASK 0x03000000L
|
||||
#define SQ_EDC_CNT__VGPR3_DED_COUNT_MASK 0x0C000000L
|
||||
|
||||
// addressBlock: gc_tpdec
|
||||
//TA_EDC_CNT
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_SEC_COUNT__SHIFT 0x0
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_DED_COUNT__SHIFT 0x2
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_DED_COUNT__SHIFT 0x6
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_SEC_COUNT__SHIFT 0x8
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_DED_COUNT__SHIFT 0xa
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_SEC_COUNT__SHIFT 0xc
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_DED_COUNT__SHIFT 0xe
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_SEC_COUNT__SHIFT 0x10
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_DED_COUNT__SHIFT 0x12
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_SEC_COUNT_MASK 0x00000003L
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_DED_COUNT_MASK 0x0000000CL
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_DED_COUNT_MASK 0x000000C0L
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_SEC_COUNT_MASK 0x00000300L
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_DED_COUNT_MASK 0x00000C00L
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_SEC_COUNT_MASK 0x00003000L
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_DED_COUNT_MASK 0x0000C000L
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_SEC_COUNT_MASK 0x00030000L
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_DED_COUNT_MASK 0x000C0000L
|
||||
|
||||
// addressBlock: gc_tcdec
|
||||
//TCP_EDC_CNT
|
||||
#define TCP_EDC_CNT__SEC_COUNT__SHIFT 0x0
|
||||
#define TCP_EDC_CNT__LFIFO_SED_COUNT__SHIFT 0x8
|
||||
#define TCP_EDC_CNT__DED_COUNT__SHIFT 0x10
|
||||
#define TCP_EDC_CNT__SEC_COUNT_MASK 0x000000FFL
|
||||
#define TCP_EDC_CNT__LFIFO_SED_COUNT_MASK 0x0000FF00L
|
||||
#define TCP_EDC_CNT__DED_COUNT_MASK 0x00FF0000L
|
||||
//TCP_EDC_CNT_NEW
|
||||
#define TCP_EDC_CNT_NEW__CACHE_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define TCP_EDC_CNT_NEW__CACHE_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define TCP_EDC_CNT_NEW__LFIFO_RAM_SEC_COUNT__SHIFT 0x4
|
||||
#define TCP_EDC_CNT_NEW__LFIFO_RAM_DED_COUNT__SHIFT 0x6
|
||||
#define TCP_EDC_CNT_NEW__CMD_FIFO_SEC_COUNT__SHIFT 0x8
|
||||
#define TCP_EDC_CNT_NEW__CMD_FIFO_DED_COUNT__SHIFT 0xa
|
||||
#define TCP_EDC_CNT_NEW__VM_FIFO_SEC_COUNT__SHIFT 0xc
|
||||
#define TCP_EDC_CNT_NEW__VM_FIFO_DED_COUNT__SHIFT 0xe
|
||||
#define TCP_EDC_CNT_NEW__DB_RAM_SED_COUNT__SHIFT 0x10
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO0_SEC_COUNT__SHIFT 0x12
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO0_DED_COUNT__SHIFT 0x14
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO1_SEC_COUNT__SHIFT 0x16
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO1_DED_COUNT__SHIFT 0x18
|
||||
#define TCP_EDC_CNT_NEW__CACHE_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define TCP_EDC_CNT_NEW__CACHE_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
#define TCP_EDC_CNT_NEW__LFIFO_RAM_SEC_COUNT_MASK 0x00000030L
|
||||
#define TCP_EDC_CNT_NEW__LFIFO_RAM_DED_COUNT_MASK 0x000000C0L
|
||||
#define TCP_EDC_CNT_NEW__CMD_FIFO_SEC_COUNT_MASK 0x00000300L
|
||||
#define TCP_EDC_CNT_NEW__CMD_FIFO_DED_COUNT_MASK 0x00000C00L
|
||||
#define TCP_EDC_CNT_NEW__VM_FIFO_SEC_COUNT_MASK 0x00003000L
|
||||
#define TCP_EDC_CNT_NEW__VM_FIFO_DED_COUNT_MASK 0x0000C000L
|
||||
#define TCP_EDC_CNT_NEW__DB_RAM_SED_COUNT_MASK 0x00030000L
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO0_SEC_COUNT_MASK 0x000C0000L
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO0_DED_COUNT_MASK 0x00300000L
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO1_SEC_COUNT_MASK 0x00C00000L
|
||||
#define TCP_EDC_CNT_NEW__UTCL1_LFIFO1_DED_COUNT_MASK 0x03000000L
|
||||
//TCP_ATC_EDC_GATCL1_CNT
|
||||
#define TCP_ATC_EDC_GATCL1_CNT__DATA_SEC__SHIFT 0x0
|
||||
#define TCP_ATC_EDC_GATCL1_CNT__DATA_SEC_MASK 0x000000FFL
|
||||
//TCI_EDC_CNT
|
||||
#define TCI_EDC_CNT__WRITE_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define TCI_EDC_CNT__WRITE_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define TCI_EDC_CNT__WRITE_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define TCI_EDC_CNT__WRITE_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
//TCA_EDC_CNT
|
||||
#define TCA_EDC_CNT__HOLE_FIFO_SEC_COUNT__SHIFT 0x0
|
||||
#define TCA_EDC_CNT__HOLE_FIFO_DED_COUNT__SHIFT 0x2
|
||||
#define TCA_EDC_CNT__REQ_FIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define TCA_EDC_CNT__REQ_FIFO_DED_COUNT__SHIFT 0x6
|
||||
#define TCA_EDC_CNT__HOLE_FIFO_SEC_COUNT_MASK 0x00000003L
|
||||
#define TCA_EDC_CNT__HOLE_FIFO_DED_COUNT_MASK 0x0000000CL
|
||||
#define TCA_EDC_CNT__REQ_FIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define TCA_EDC_CNT__REQ_FIFO_DED_COUNT_MASK 0x000000C0L
|
||||
//TCC_EDC_CNT
|
||||
#define TCC_EDC_CNT__CACHE_DATA_SEC_COUNT__SHIFT 0x0
|
||||
#define TCC_EDC_CNT__CACHE_DATA_DED_COUNT__SHIFT 0x2
|
||||
#define TCC_EDC_CNT__CACHE_DIRTY_SEC_COUNT__SHIFT 0x4
|
||||
#define TCC_EDC_CNT__CACHE_DIRTY_DED_COUNT__SHIFT 0x6
|
||||
#define TCC_EDC_CNT__HIGH_RATE_TAG_SEC_COUNT__SHIFT 0x8
|
||||
#define TCC_EDC_CNT__HIGH_RATE_TAG_DED_COUNT__SHIFT 0xa
|
||||
#define TCC_EDC_CNT__LOW_RATE_TAG_SEC_COUNT__SHIFT 0xc
|
||||
#define TCC_EDC_CNT__LOW_RATE_TAG_DED_COUNT__SHIFT 0xe
|
||||
#define TCC_EDC_CNT__SRC_FIFO_SEC_COUNT__SHIFT 0x10
|
||||
#define TCC_EDC_CNT__SRC_FIFO_DED_COUNT__SHIFT 0x12
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_SEC_COUNT__SHIFT 0x14
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_DED_COUNT__SHIFT 0x16
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_NEXT_RAM_SEC_COUNT__SHIFT 0x18
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_NEXT_RAM_DED_COUNT__SHIFT 0x1a
|
||||
#define TCC_EDC_CNT__CACHE_DATA_SEC_COUNT_MASK 0x00000003L
|
||||
#define TCC_EDC_CNT__CACHE_DATA_DED_COUNT_MASK 0x0000000CL
|
||||
#define TCC_EDC_CNT__CACHE_DIRTY_SEC_COUNT_MASK 0x00000030L
|
||||
#define TCC_EDC_CNT__CACHE_DIRTY_DED_COUNT_MASK 0x000000C0L
|
||||
#define TCC_EDC_CNT__HIGH_RATE_TAG_SEC_COUNT_MASK 0x00000300L
|
||||
#define TCC_EDC_CNT__HIGH_RATE_TAG_DED_COUNT_MASK 0x00000C00L
|
||||
#define TCC_EDC_CNT__LOW_RATE_TAG_SEC_COUNT_MASK 0x00003000L
|
||||
#define TCC_EDC_CNT__LOW_RATE_TAG_DED_COUNT_MASK 0x0000C000L
|
||||
#define TCC_EDC_CNT__SRC_FIFO_SEC_COUNT_MASK 0x00030000L
|
||||
#define TCC_EDC_CNT__SRC_FIFO_DED_COUNT_MASK 0x000C0000L
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_SEC_COUNT_MASK 0x00300000L
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_DED_COUNT_MASK 0x00C00000L
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_NEXT_RAM_SEC_COUNT_MASK 0x03000000L
|
||||
#define TCC_EDC_CNT__LATENCY_FIFO_NEXT_RAM_DED_COUNT_MASK 0x0C000000L
|
||||
//TCC_EDC_CNT2
|
||||
#define TCC_EDC_CNT2__CACHE_TAG_PROBE_FIFO_SEC_COUNT__SHIFT 0x0
|
||||
#define TCC_EDC_CNT2__CACHE_TAG_PROBE_FIFO_DED_COUNT__SHIFT 0x2
|
||||
#define TCC_EDC_CNT2__UC_ATOMIC_FIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define TCC_EDC_CNT2__UC_ATOMIC_FIFO_DED_COUNT__SHIFT 0x6
|
||||
#define TCC_EDC_CNT2__WRITE_CACHE_READ_SEC_COUNT__SHIFT 0x8
|
||||
#define TCC_EDC_CNT2__WRITE_CACHE_READ_DED_COUNT__SHIFT 0xa
|
||||
#define TCC_EDC_CNT2__RETURN_CONTROL_SEC_COUNT__SHIFT 0xc
|
||||
#define TCC_EDC_CNT2__RETURN_CONTROL_DED_COUNT__SHIFT 0xe
|
||||
#define TCC_EDC_CNT2__IN_USE_TRANSFER_SEC_COUNT__SHIFT 0x10
|
||||
#define TCC_EDC_CNT2__IN_USE_TRANSFER_DED_COUNT__SHIFT 0x12
|
||||
#define TCC_EDC_CNT2__IN_USE_DEC_SEC_COUNT__SHIFT 0x14
|
||||
#define TCC_EDC_CNT2__IN_USE_DEC_DED_COUNT__SHIFT 0x16
|
||||
#define TCC_EDC_CNT2__WRITE_RETURN_SEC_COUNT__SHIFT 0x18
|
||||
#define TCC_EDC_CNT2__WRITE_RETURN_DED_COUNT__SHIFT 0x1a
|
||||
#define TCC_EDC_CNT2__RETURN_DATA_SEC_COUNT__SHIFT 0x1c
|
||||
#define TCC_EDC_CNT2__RETURN_DATA_DED_COUNT__SHIFT 0x1e
|
||||
#define TCC_EDC_CNT2__CACHE_TAG_PROBE_FIFO_SEC_COUNT_MASK 0x00000003L
|
||||
#define TCC_EDC_CNT2__CACHE_TAG_PROBE_FIFO_DED_COUNT_MASK 0x0000000CL
|
||||
#define TCC_EDC_CNT2__UC_ATOMIC_FIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define TCC_EDC_CNT2__UC_ATOMIC_FIFO_DED_COUNT_MASK 0x000000C0L
|
||||
#define TCC_EDC_CNT2__WRITE_CACHE_READ_SEC_COUNT_MASK 0x00000300L
|
||||
#define TCC_EDC_CNT2__WRITE_CACHE_READ_DED_COUNT_MASK 0x00000C00L
|
||||
#define TCC_EDC_CNT2__RETURN_CONTROL_SEC_COUNT_MASK 0x00003000L
|
||||
#define TCC_EDC_CNT2__RETURN_CONTROL_DED_COUNT_MASK 0x0000C000L
|
||||
#define TCC_EDC_CNT2__IN_USE_TRANSFER_SEC_COUNT_MASK 0x00030000L
|
||||
#define TCC_EDC_CNT2__IN_USE_TRANSFER_DED_COUNT_MASK 0x000C0000L
|
||||
#define TCC_EDC_CNT2__IN_USE_DEC_SEC_COUNT_MASK 0x00300000L
|
||||
#define TCC_EDC_CNT2__IN_USE_DEC_DED_COUNT_MASK 0x00C00000L
|
||||
#define TCC_EDC_CNT2__WRITE_RETURN_SEC_COUNT_MASK 0x03000000L
|
||||
#define TCC_EDC_CNT2__WRITE_RETURN_DED_COUNT_MASK 0x0C000000L
|
||||
#define TCC_EDC_CNT2__RETURN_DATA_SEC_COUNT_MASK 0x30000000L
|
||||
#define TCC_EDC_CNT2__RETURN_DATA_DED_COUNT_MASK 0xC0000000L
|
||||
|
||||
// addressBlock: gc_tpdec
|
||||
//TD_EDC_CNT
|
||||
#define TD_EDC_CNT__SS_FIFO_LO_SEC_COUNT__SHIFT 0x0
|
||||
#define TD_EDC_CNT__SS_FIFO_LO_DED_COUNT__SHIFT 0x2
|
||||
#define TD_EDC_CNT__SS_FIFO_HI_SEC_COUNT__SHIFT 0x4
|
||||
#define TD_EDC_CNT__SS_FIFO_HI_DED_COUNT__SHIFT 0x6
|
||||
#define TD_EDC_CNT__CS_FIFO_SEC_COUNT__SHIFT 0x8
|
||||
#define TD_EDC_CNT__CS_FIFO_DED_COUNT__SHIFT 0xa
|
||||
#define TD_EDC_CNT__SS_FIFO_LO_SEC_COUNT_MASK 0x00000003L
|
||||
#define TD_EDC_CNT__SS_FIFO_LO_DED_COUNT_MASK 0x0000000CL
|
||||
#define TD_EDC_CNT__SS_FIFO_HI_SEC_COUNT_MASK 0x00000030L
|
||||
#define TD_EDC_CNT__SS_FIFO_HI_DED_COUNT_MASK 0x000000C0L
|
||||
#define TD_EDC_CNT__CS_FIFO_SEC_COUNT_MASK 0x00000300L
|
||||
#define TD_EDC_CNT__CS_FIFO_DED_COUNT_MASK 0x00000C00L
|
||||
//TA_EDC_CNT
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_SEC_COUNT__SHIFT 0x0
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_DED_COUNT__SHIFT 0x2
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_SEC_COUNT__SHIFT 0x4
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_DED_COUNT__SHIFT 0x6
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_SEC_COUNT__SHIFT 0x8
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_DED_COUNT__SHIFT 0xa
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_SEC_COUNT__SHIFT 0xc
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_DED_COUNT__SHIFT 0xe
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_SEC_COUNT__SHIFT 0x10
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_DED_COUNT__SHIFT 0x12
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_SEC_COUNT_MASK 0x00000003L
|
||||
#define TA_EDC_CNT__TA_FS_DFIFO_DED_COUNT_MASK 0x0000000CL
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_SEC_COUNT_MASK 0x00000030L
|
||||
#define TA_EDC_CNT__TA_FS_AFIFO_DED_COUNT_MASK 0x000000C0L
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_SEC_COUNT_MASK 0x00000300L
|
||||
#define TA_EDC_CNT__TA_FL_LFIFO_DED_COUNT_MASK 0x00000C00L
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_SEC_COUNT_MASK 0x00003000L
|
||||
#define TA_EDC_CNT__TA_FX_LFIFO_DED_COUNT_MASK 0x0000C000L
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_SEC_COUNT_MASK 0x00030000L
|
||||
#define TA_EDC_CNT__TA_FS_CFIFO_DED_COUNT_MASK 0x000C0000L
|
||||
|
||||
// addressBlock: gc_ea_gceadec2
|
||||
//GCEA_EDC_CNT
|
||||
#define GCEA_EDC_CNT__DRAMRD_CMDMEM_SEC_COUNT__SHIFT 0x0
|
||||
#define GCEA_EDC_CNT__DRAMRD_CMDMEM_DED_COUNT__SHIFT 0x2
|
||||
#define GCEA_EDC_CNT__DRAMWR_CMDMEM_SEC_COUNT__SHIFT 0x4
|
||||
#define GCEA_EDC_CNT__DRAMWR_CMDMEM_DED_COUNT__SHIFT 0x6
|
||||
#define GCEA_EDC_CNT__DRAMWR_DATAMEM_SEC_COUNT__SHIFT 0x8
|
||||
#define GCEA_EDC_CNT__DRAMWR_DATAMEM_DED_COUNT__SHIFT 0xa
|
||||
#define GCEA_EDC_CNT__RRET_TAGMEM_SEC_COUNT__SHIFT 0xc
|
||||
#define GCEA_EDC_CNT__RRET_TAGMEM_DED_COUNT__SHIFT 0xe
|
||||
#define GCEA_EDC_CNT__WRET_TAGMEM_SEC_COUNT__SHIFT 0x10
|
||||
#define GCEA_EDC_CNT__WRET_TAGMEM_DED_COUNT__SHIFT 0x12
|
||||
#define GCEA_EDC_CNT__DRAMRD_PAGEMEM_SED_COUNT__SHIFT 0x14
|
||||
#define GCEA_EDC_CNT__DRAMWR_PAGEMEM_SED_COUNT__SHIFT 0x16
|
||||
#define GCEA_EDC_CNT__IORD_CMDMEM_SED_COUNT__SHIFT 0x18
|
||||
#define GCEA_EDC_CNT__IOWR_CMDMEM_SED_COUNT__SHIFT 0x1a
|
||||
#define GCEA_EDC_CNT__IOWR_DATAMEM_SED_COUNT__SHIFT 0x1c
|
||||
#define GCEA_EDC_CNT__MAM_AFMEM_SEC_COUNT__SHIFT 0x1e
|
||||
#define GCEA_EDC_CNT__DRAMRD_CMDMEM_SEC_COUNT_MASK 0x00000003L
|
||||
#define GCEA_EDC_CNT__DRAMRD_CMDMEM_DED_COUNT_MASK 0x0000000CL
|
||||
#define GCEA_EDC_CNT__DRAMWR_CMDMEM_SEC_COUNT_MASK 0x00000030L
|
||||
#define GCEA_EDC_CNT__DRAMWR_CMDMEM_DED_COUNT_MASK 0x000000C0L
|
||||
#define GCEA_EDC_CNT__DRAMWR_DATAMEM_SEC_COUNT_MASK 0x00000300L
|
||||
#define GCEA_EDC_CNT__DRAMWR_DATAMEM_DED_COUNT_MASK 0x00000C00L
|
||||
#define GCEA_EDC_CNT__RRET_TAGMEM_SEC_COUNT_MASK 0x00003000L
|
||||
#define GCEA_EDC_CNT__RRET_TAGMEM_DED_COUNT_MASK 0x0000C000L
|
||||
#define GCEA_EDC_CNT__WRET_TAGMEM_SEC_COUNT_MASK 0x00030000L
|
||||
#define GCEA_EDC_CNT__WRET_TAGMEM_DED_COUNT_MASK 0x000C0000L
|
||||
#define GCEA_EDC_CNT__DRAMRD_PAGEMEM_SED_COUNT_MASK 0x00300000L
|
||||
#define GCEA_EDC_CNT__DRAMWR_PAGEMEM_SED_COUNT_MASK 0x00C00000L
|
||||
#define GCEA_EDC_CNT__IORD_CMDMEM_SED_COUNT_MASK 0x03000000L
|
||||
#define GCEA_EDC_CNT__IOWR_CMDMEM_SED_COUNT_MASK 0x0C000000L
|
||||
#define GCEA_EDC_CNT__IOWR_DATAMEM_SED_COUNT_MASK 0x30000000L
|
||||
#define GCEA_EDC_CNT__MAM_AFMEM_SEC_COUNT_MASK 0xC0000000L
|
||||
//GCEA_EDC_CNT2
|
||||
#define GCEA_EDC_CNT2__GMIRD_CMDMEM_SEC_COUNT__SHIFT 0x0
|
||||
#define GCEA_EDC_CNT2__GMIRD_CMDMEM_DED_COUNT__SHIFT 0x2
|
||||
#define GCEA_EDC_CNT2__GMIWR_CMDMEM_SEC_COUNT__SHIFT 0x4
|
||||
#define GCEA_EDC_CNT2__GMIWR_CMDMEM_DED_COUNT__SHIFT 0x6
|
||||
#define GCEA_EDC_CNT2__GMIWR_DATAMEM_SEC_COUNT__SHIFT 0x8
|
||||
#define GCEA_EDC_CNT2__GMIWR_DATAMEM_DED_COUNT__SHIFT 0xa
|
||||
#define GCEA_EDC_CNT2__GMIRD_PAGEMEM_SED_COUNT__SHIFT 0xc
|
||||
#define GCEA_EDC_CNT2__GMIWR_PAGEMEM_SED_COUNT__SHIFT 0xe
|
||||
#define GCEA_EDC_CNT2__MAM_D0MEM_SED_COUNT__SHIFT 0x10
|
||||
#define GCEA_EDC_CNT2__MAM_D1MEM_SED_COUNT__SHIFT 0x12
|
||||
#define GCEA_EDC_CNT2__MAM_D2MEM_SED_COUNT__SHIFT 0x14
|
||||
#define GCEA_EDC_CNT2__MAM_D3MEM_SED_COUNT__SHIFT 0x16
|
||||
#define GCEA_EDC_CNT2__MAM_D0MEM_DED_COUNT__SHIFT 0x18
|
||||
#define GCEA_EDC_CNT2__MAM_D1MEM_DED_COUNT__SHIFT 0x1a
|
||||
#define GCEA_EDC_CNT2__MAM_D2MEM_DED_COUNT__SHIFT 0x1c
|
||||
#define GCEA_EDC_CNT2__MAM_D3MEM_DED_COUNT__SHIFT 0x1e
|
||||
#define GCEA_EDC_CNT2__GMIRD_CMDMEM_SEC_COUNT_MASK 0x00000003L
|
||||
#define GCEA_EDC_CNT2__GMIRD_CMDMEM_DED_COUNT_MASK 0x0000000CL
|
||||
#define GCEA_EDC_CNT2__GMIWR_CMDMEM_SEC_COUNT_MASK 0x00000030L
|
||||
#define GCEA_EDC_CNT2__GMIWR_CMDMEM_DED_COUNT_MASK 0x000000C0L
|
||||
#define GCEA_EDC_CNT2__GMIWR_DATAMEM_SEC_COUNT_MASK 0x00000300L
|
||||
#define GCEA_EDC_CNT2__GMIWR_DATAMEM_DED_COUNT_MASK 0x00000C00L
|
||||
#define GCEA_EDC_CNT2__GMIRD_PAGEMEM_SED_COUNT_MASK 0x00003000L
|
||||
#define GCEA_EDC_CNT2__GMIWR_PAGEMEM_SED_COUNT_MASK 0x0000C000L
|
||||
#define GCEA_EDC_CNT2__MAM_D0MEM_SED_COUNT_MASK 0x00030000L
|
||||
#define GCEA_EDC_CNT2__MAM_D1MEM_SED_COUNT_MASK 0x000C0000L
|
||||
#define GCEA_EDC_CNT2__MAM_D2MEM_SED_COUNT_MASK 0x00300000L
|
||||
#define GCEA_EDC_CNT2__MAM_D3MEM_SED_COUNT_MASK 0x00C00000L
|
||||
#define GCEA_EDC_CNT2__MAM_D0MEM_DED_COUNT_MASK 0x03000000L
|
||||
#define GCEA_EDC_CNT2__MAM_D1MEM_DED_COUNT_MASK 0x0C000000L
|
||||
#define GCEA_EDC_CNT2__MAM_D2MEM_DED_COUNT_MASK 0x30000000L
|
||||
#define GCEA_EDC_CNT2__MAM_D3MEM_DED_COUNT_MASK 0xC0000000L
|
||||
//GCEA_EDC_CNT3
|
||||
#define GCEA_EDC_CNT3__DRAMRD_PAGEMEM_DED_COUNT__SHIFT 0x0
|
||||
#define GCEA_EDC_CNT3__DRAMWR_PAGEMEM_DED_COUNT__SHIFT 0x2
|
||||
#define GCEA_EDC_CNT3__IORD_CMDMEM_DED_COUNT__SHIFT 0x4
|
||||
#define GCEA_EDC_CNT3__IOWR_CMDMEM_DED_COUNT__SHIFT 0x6
|
||||
#define GCEA_EDC_CNT3__IOWR_DATAMEM_DED_COUNT__SHIFT 0x8
|
||||
#define GCEA_EDC_CNT3__GMIRD_PAGEMEM_DED_COUNT__SHIFT 0xa
|
||||
#define GCEA_EDC_CNT3__GMIWR_PAGEMEM_DED_COUNT__SHIFT 0xc
|
||||
#define GCEA_EDC_CNT3__MAM_AFMEM_DED_COUNT__SHIFT 0xe
|
||||
#define GCEA_EDC_CNT3__MAM_A0MEM_SEC_COUNT__SHIFT 0x10
|
||||
#define GCEA_EDC_CNT3__MAM_A0MEM_DED_COUNT__SHIFT 0x12
|
||||
#define GCEA_EDC_CNT3__MAM_A1MEM_SEC_COUNT__SHIFT 0x14
|
||||
#define GCEA_EDC_CNT3__MAM_A1MEM_DED_COUNT__SHIFT 0x16
|
||||
#define GCEA_EDC_CNT3__MAM_A2MEM_SEC_COUNT__SHIFT 0x18
|
||||
#define GCEA_EDC_CNT3__MAM_A2MEM_DED_COUNT__SHIFT 0x1a
|
||||
#define GCEA_EDC_CNT3__MAM_A3MEM_SEC_COUNT__SHIFT 0x1c
|
||||
#define GCEA_EDC_CNT3__MAM_A3MEM_DED_COUNT__SHIFT 0x1e
|
||||
#define GCEA_EDC_CNT3__DRAMRD_PAGEMEM_DED_COUNT_MASK 0x00000003L
|
||||
#define GCEA_EDC_CNT3__DRAMWR_PAGEMEM_DED_COUNT_MASK 0x0000000CL
|
||||
#define GCEA_EDC_CNT3__IORD_CMDMEM_DED_COUNT_MASK 0x00000030L
|
||||
#define GCEA_EDC_CNT3__IOWR_CMDMEM_DED_COUNT_MASK 0x000000C0L
|
||||
#define GCEA_EDC_CNT3__IOWR_DATAMEM_DED_COUNT_MASK 0x00000300L
|
||||
#define GCEA_EDC_CNT3__GMIRD_PAGEMEM_DED_COUNT_MASK 0x00000C00L
|
||||
#define GCEA_EDC_CNT3__GMIWR_PAGEMEM_DED_COUNT_MASK 0x00003000L
|
||||
#define GCEA_EDC_CNT3__MAM_AFMEM_DED_COUNT_MASK 0x0000C000L
|
||||
#define GCEA_EDC_CNT3__MAM_A0MEM_SEC_COUNT_MASK 0x00030000L
|
||||
#define GCEA_EDC_CNT3__MAM_A0MEM_DED_COUNT_MASK 0x000C0000L
|
||||
#define GCEA_EDC_CNT3__MAM_A1MEM_SEC_COUNT_MASK 0x00300000L
|
||||
#define GCEA_EDC_CNT3__MAM_A1MEM_DED_COUNT_MASK 0x00C00000L
|
||||
#define GCEA_EDC_CNT3__MAM_A2MEM_SEC_COUNT_MASK 0x03000000L
|
||||
#define GCEA_EDC_CNT3__MAM_A2MEM_DED_COUNT_MASK 0x0C000000L
|
||||
#define GCEA_EDC_CNT3__MAM_A3MEM_SEC_COUNT_MASK 0x30000000L
|
||||
#define GCEA_EDC_CNT3__MAM_A3MEM_DED_COUNT_MASK 0xC0000000L
|
||||
|
||||
//GCEA_ERR_STATUS
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_STATUS__SHIFT 0x0
|
||||
#define GCEA_ERR_STATUS__SDP_WRRSP_STATUS__SHIFT 0x4
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_DATASTATUS__SHIFT 0x8
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_DATAPARITY_ERROR__SHIFT 0xa
|
||||
#define GCEA_ERR_STATUS__CLEAR_ERROR_STATUS__SHIFT 0xb
|
||||
#define GCEA_ERR_STATUS__BUSY_ON_ERROR__SHIFT 0xc
|
||||
#define GCEA_ERR_STATUS__FUE_FLAG__SHIFT 0xd
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_STATUS_MASK 0x0000000FL
|
||||
#define GCEA_ERR_STATUS__SDP_WRRSP_STATUS_MASK 0x000000F0L
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_DATASTATUS_MASK 0x00000300L
|
||||
#define GCEA_ERR_STATUS__SDP_RDRSP_DATAPARITY_ERROR_MASK 0x00000400L
|
||||
#define GCEA_ERR_STATUS__CLEAR_ERROR_STATUS_MASK 0x00000800L
|
||||
#define GCEA_ERR_STATUS__BUSY_ON_ERROR_MASK 0x00001000L
|
||||
#define GCEA_ERR_STATUS__FUE_FLAG_MASK 0x00002000L
|
||||
|
||||
// addressBlock: gc_gfxudec
|
||||
//GRBM_GFX_INDEX
|
||||
#define GRBM_GFX_INDEX__INSTANCE_INDEX__SHIFT 0x0
|
||||
#define GRBM_GFX_INDEX__SH_INDEX__SHIFT 0x8
|
||||
#define GRBM_GFX_INDEX__SE_INDEX__SHIFT 0x10
|
||||
#define GRBM_GFX_INDEX__SH_BROADCAST_WRITES__SHIFT 0x1d
|
||||
#define GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES__SHIFT 0x1e
|
||||
#define GRBM_GFX_INDEX__SE_BROADCAST_WRITES__SHIFT 0x1f
|
||||
#define GRBM_GFX_INDEX__INSTANCE_INDEX_MASK 0x000000FFL
|
||||
#define GRBM_GFX_INDEX__SH_INDEX_MASK 0x0000FF00L
|
||||
#define GRBM_GFX_INDEX__SE_INDEX_MASK 0x00FF0000L
|
||||
#define GRBM_GFX_INDEX__SH_BROADCAST_WRITES_MASK 0x20000000L
|
||||
#define GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES_MASK 0x40000000L
|
||||
#define GRBM_GFX_INDEX__SE_BROADCAST_WRITES_MASK 0x80000000L
|
||||
|
||||
// addressBlock: gc_utcl2_atcl2dec
|
||||
//ATC_L2_CNTL
|
||||
//ATC_L2_CACHE_4K_DSM_INDEX
|
||||
#define ATC_L2_CACHE_4K_DSM_INDEX__INDEX__SHIFT 0x0
|
||||
#define ATC_L2_CACHE_4K_DSM_INDEX__INDEX_MASK 0x000000FFL
|
||||
//ATC_L2_CACHE_2M_DSM_INDEX
|
||||
#define ATC_L2_CACHE_2M_DSM_INDEX__INDEX__SHIFT 0x0
|
||||
#define ATC_L2_CACHE_2M_DSM_INDEX__INDEX_MASK 0x000000FFL
|
||||
//ATC_L2_CACHE_4K_DSM_CNTL
|
||||
#define ATC_L2_CACHE_4K_DSM_CNTL__SEC_COUNT__SHIFT 0xd
|
||||
#define ATC_L2_CACHE_4K_DSM_CNTL__DED_COUNT__SHIFT 0xf
|
||||
#define ATC_L2_CACHE_4K_DSM_CNTL__SEC_COUNT_MASK 0x00006000L
|
||||
#define ATC_L2_CACHE_4K_DSM_CNTL__DED_COUNT_MASK 0x00018000L
|
||||
//ATC_L2_CACHE_2M_DSM_CNTL
|
||||
#define ATC_L2_CACHE_2M_DSM_CNTL__SEC_COUNT__SHIFT 0xd
|
||||
#define ATC_L2_CACHE_2M_DSM_CNTL__DED_COUNT__SHIFT 0xf
|
||||
#define ATC_L2_CACHE_2M_DSM_CNTL__SEC_COUNT_MASK 0x00006000L
|
||||
#define ATC_L2_CACHE_2M_DSM_CNTL__DED_COUNT_MASK 0x00018000L
|
||||
|
||||
// addressBlock: gc_utcl2_vml2pfdec
|
||||
//VML2_MEM_ECC_INDEX
|
||||
#define VML2_MEM_ECC_INDEX__INDEX__SHIFT 0x0
|
||||
#define VML2_MEM_ECC_INDEX__INDEX_MASK 0x000000FFL
|
||||
//VML2_WALKER_MEM_ECC_INDEX
|
||||
#define VML2_WALKER_MEM_ECC_INDEX__INDEX__SHIFT 0x0
|
||||
#define VML2_WALKER_MEM_ECC_INDEX__INDEX_MASK 0x000000FFL
|
||||
//UTCL2_MEM_ECC_INDEX
|
||||
#define UTCL2_MEM_ECC_INDEX__INDEX__SHIFT 0x0
|
||||
#define UTCL2_MEM_ECC_INDEX__INDEX_MASK 0x000000FFL
|
||||
//VML2_MEM_ECC_CNTL
|
||||
#define VML2_MEM_ECC_CNTL__SEC_COUNT__SHIFT 0xc
|
||||
#define VML2_MEM_ECC_CNTL__DED_COUNT__SHIFT 0xe
|
||||
#define VML2_MEM_ECC_CNTL__SEC_COUNT_MASK 0x00003000L
|
||||
#define VML2_MEM_ECC_CNTL__DED_COUNT_MASK 0x0000C000L
|
||||
//VML2_WALKER_MEM_ECC_CNTL
|
||||
#define VML2_WALKER_MEM_ECC_CNTL__SEC_COUNT__SHIFT 0xc
|
||||
#define VML2_WALKER_MEM_ECC_CNTL__DED_COUNT__SHIFT 0xe
|
||||
#define VML2_WALKER_MEM_ECC_CNTL__SEC_COUNT_MASK 0x00003000L
|
||||
#define VML2_WALKER_MEM_ECC_CNTL__DED_COUNT_MASK 0x0000C000L
|
||||
//UTCL2_MEM_ECC_CNTL
|
||||
#define UTCL2_MEM_ECC_CNTL__SEC_COUNT__SHIFT 0xc
|
||||
#define UTCL2_MEM_ECC_CNTL__DED_COUNT__SHIFT 0xe
|
||||
#define UTCL2_MEM_ECC_CNTL__SEC_COUNT_MASK 0x00003000L
|
||||
#define UTCL2_MEM_ECC_CNTL__DED_COUNT_MASK 0x0000C000L
|
||||
|
||||
// addressBlock: gc_rlcpdec
|
||||
//RLC_EDC_CNT
|
||||
#define RLC_EDC_CNT__RLCG_INSTR_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define RLC_EDC_CNT__RLCG_INSTR_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define RLC_EDC_CNT__RLCG_SCRATCH_RAM_SEC_COUNT__SHIFT 0x4
|
||||
#define RLC_EDC_CNT__RLCG_SCRATCH_RAM_DED_COUNT__SHIFT 0x6
|
||||
#define RLC_EDC_CNT__RLCV_INSTR_RAM_SEC_COUNT__SHIFT 0x8
|
||||
#define RLC_EDC_CNT__RLCV_INSTR_RAM_DED_COUNT__SHIFT 0xa
|
||||
#define RLC_EDC_CNT__RLCV_SCRATCH_RAM_SEC_COUNT__SHIFT 0xc
|
||||
#define RLC_EDC_CNT__RLCV_SCRATCH_RAM_DED_COUNT__SHIFT 0xe
|
||||
#define RLC_EDC_CNT__RLC_TCTAG_RAM_SEC_COUNT__SHIFT 0x10
|
||||
#define RLC_EDC_CNT__RLC_TCTAG_RAM_DED_COUNT__SHIFT 0x12
|
||||
#define RLC_EDC_CNT__RLC_SPM_SCRATCH_RAM_SEC_COUNT__SHIFT 0x14
|
||||
#define RLC_EDC_CNT__RLC_SPM_SCRATCH_RAM_DED_COUNT__SHIFT 0x16
|
||||
#define RLC_EDC_CNT__RLC_SRM_DATA_RAM_SEC_COUNT__SHIFT 0x18
|
||||
#define RLC_EDC_CNT__RLC_SRM_DATA_RAM_DED_COUNT__SHIFT 0x1a
|
||||
#define RLC_EDC_CNT__RLC_SRM_ADDR_RAM_SEC_COUNT__SHIFT 0x1c
|
||||
#define RLC_EDC_CNT__RLC_SRM_ADDR_RAM_DED_COUNT__SHIFT 0x1e
|
||||
#define RLC_EDC_CNT__RLCG_INSTR_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define RLC_EDC_CNT__RLCG_INSTR_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
#define RLC_EDC_CNT__RLCG_SCRATCH_RAM_SEC_COUNT_MASK 0x00000030L
|
||||
#define RLC_EDC_CNT__RLCG_SCRATCH_RAM_DED_COUNT_MASK 0x000000C0L
|
||||
#define RLC_EDC_CNT__RLCV_INSTR_RAM_SEC_COUNT_MASK 0x00000300L
|
||||
#define RLC_EDC_CNT__RLCV_INSTR_RAM_DED_COUNT_MASK 0x00000C00L
|
||||
#define RLC_EDC_CNT__RLCV_SCRATCH_RAM_SEC_COUNT_MASK 0x00003000L
|
||||
#define RLC_EDC_CNT__RLCV_SCRATCH_RAM_DED_COUNT_MASK 0x0000C000L
|
||||
#define RLC_EDC_CNT__RLC_TCTAG_RAM_SEC_COUNT_MASK 0x00030000L
|
||||
#define RLC_EDC_CNT__RLC_TCTAG_RAM_DED_COUNT_MASK 0x000C0000L
|
||||
#define RLC_EDC_CNT__RLC_SPM_SCRATCH_RAM_SEC_COUNT_MASK 0x00300000L
|
||||
#define RLC_EDC_CNT__RLC_SPM_SCRATCH_RAM_DED_COUNT_MASK 0x00C00000L
|
||||
#define RLC_EDC_CNT__RLC_SRM_DATA_RAM_SEC_COUNT_MASK 0x03000000L
|
||||
#define RLC_EDC_CNT__RLC_SRM_DATA_RAM_DED_COUNT_MASK 0x0C000000L
|
||||
#define RLC_EDC_CNT__RLC_SRM_ADDR_RAM_SEC_COUNT_MASK 0x30000000L
|
||||
#define RLC_EDC_CNT__RLC_SRM_ADDR_RAM_DED_COUNT_MASK 0xC0000000L
|
||||
//RLC_EDC_CNT2
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE0_SCRATCH_RAM_SEC_COUNT__SHIFT 0x0
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE0_SCRATCH_RAM_DED_COUNT__SHIFT 0x2
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE1_SCRATCH_RAM_SEC_COUNT__SHIFT 0x4
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE1_SCRATCH_RAM_DED_COUNT__SHIFT 0x6
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE2_SCRATCH_RAM_SEC_COUNT__SHIFT 0x8
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE2_SCRATCH_RAM_DED_COUNT__SHIFT 0xa
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE3_SCRATCH_RAM_SEC_COUNT__SHIFT 0xc
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE3_SCRATCH_RAM_DED_COUNT__SHIFT 0xe
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE4_SCRATCH_RAM_SEC_COUNT__SHIFT 0x10
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE4_SCRATCH_RAM_DED_COUNT__SHIFT 0x12
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE5_SCRATCH_RAM_SEC_COUNT__SHIFT 0x14
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE5_SCRATCH_RAM_DED_COUNT__SHIFT 0x16
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE6_SCRATCH_RAM_SEC_COUNT__SHIFT 0x18
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE6_SCRATCH_RAM_DED_COUNT__SHIFT 0x1a
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE7_SCRATCH_RAM_SEC_COUNT__SHIFT 0x1c
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE7_SCRATCH_RAM_DED_COUNT__SHIFT 0x1e
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE0_SCRATCH_RAM_SEC_COUNT_MASK 0x00000003L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE0_SCRATCH_RAM_DED_COUNT_MASK 0x0000000CL
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE1_SCRATCH_RAM_SEC_COUNT_MASK 0x00000030L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE1_SCRATCH_RAM_DED_COUNT_MASK 0x000000C0L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE2_SCRATCH_RAM_SEC_COUNT_MASK 0x00000300L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE2_SCRATCH_RAM_DED_COUNT_MASK 0x00000C00L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE3_SCRATCH_RAM_SEC_COUNT_MASK 0x00003000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE3_SCRATCH_RAM_DED_COUNT_MASK 0x0000C000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE4_SCRATCH_RAM_SEC_COUNT_MASK 0x00030000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE4_SCRATCH_RAM_DED_COUNT_MASK 0x000C0000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE5_SCRATCH_RAM_SEC_COUNT_MASK 0x00300000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE5_SCRATCH_RAM_DED_COUNT_MASK 0x00C00000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE6_SCRATCH_RAM_SEC_COUNT_MASK 0x03000000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE6_SCRATCH_RAM_DED_COUNT_MASK 0x0C000000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE7_SCRATCH_RAM_SEC_COUNT_MASK 0x30000000L
|
||||
#define RLC_EDC_CNT2__RLC_SPM_SE7_SCRATCH_RAM_DED_COUNT_MASK 0xC0000000L
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,207 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <limits>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "gfxip.h"
|
||||
#include "src/utils/helper.h"
|
||||
|
||||
static const char DEBUG_DRI_PATH[] = "/sys/kernel/debug/dri/";
|
||||
static const char DEV_PFX[] = "dev=";
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
namespace {
|
||||
|
||||
static int find_pci_instance(const std::string &pci_string) {
|
||||
rocmtools::handle_t<DIR*, util::dir_closer> dir(opendir(DEBUG_DRI_PATH));
|
||||
if (dir.get() == nullptr) {
|
||||
char *errstr = strerror(errno);
|
||||
warning("Can't open debugfs dri directory: %s\n", errstr);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
struct dirent *dent;
|
||||
while ((dent = readdir(dir.get())) != nullptr) {
|
||||
if (strcmp(dent->d_name, ".") == 0 || strcmp(dent->d_name, "..") == 0)
|
||||
continue;
|
||||
|
||||
std::string name(DEBUG_DRI_PATH);
|
||||
name += dent->d_name;
|
||||
name += "/name";
|
||||
|
||||
std::string device;
|
||||
{
|
||||
std::ifstream ifs(name);
|
||||
if (!ifs.is_open()) return -1;
|
||||
ifs.ignore(std::numeric_limits<std::streamsize>::max(), ' ');
|
||||
ifs >> device;
|
||||
}
|
||||
if (device.empty()) continue;
|
||||
if (auto p = device.find(DEV_PFX); p != device.npos)
|
||||
device.erase(p, strlen(DEV_PFX));
|
||||
if (pci_string == device) return std::stoi(dent->d_name);
|
||||
}
|
||||
|
||||
fail:
|
||||
return -1;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
uint32_t pasid() {
|
||||
static std::optional<uint32_t> pasid;
|
||||
|
||||
if (!pasid) {
|
||||
std::ifstream ifs("/sys/class/kfd/kfd/proc/" + std::to_string(getpid()) + "/pasid");
|
||||
if (!ifs.is_open()) return 0;
|
||||
ifs >> *pasid;
|
||||
}
|
||||
|
||||
return *pasid;
|
||||
}
|
||||
|
||||
int debugfs_ioctl_set_state(
|
||||
const device_t& dev,
|
||||
const struct amdgpu_debugfs_regs2_iocdata &ioc) {
|
||||
int ret = ioctl(dev.fd_.mmio2.get(), AMDGPU_DEBUGFS_REGS2_IOC_SET_STATE, &ioc);
|
||||
if (ret < 0) {
|
||||
fatal("Couldn't set register ioctl state\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int debugfs_ioctl_write_register(
|
||||
const device_t &dev,
|
||||
const struct amdgpu_debugfs_regs2_iocdata &ioc,
|
||||
const uint64_t addr,
|
||||
const uint32_t value) {
|
||||
debugfs_ioctl_set_state(dev, ioc);
|
||||
if (lseek(dev.fd_.mmio2.get(), addr * 4, SEEK_SET) < 0) {
|
||||
fatal("Cannot seek to MMIO address for write\n");
|
||||
}
|
||||
int r = -1;
|
||||
if ((r = write(dev.fd_.mmio2.get(), &value, sizeof(value))) != sizeof(value)) {
|
||||
fatal("Cannot write to MMIO register\n");
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
uint32_t debugfs_ioctl_read_register(
|
||||
const device_t& dev,
|
||||
const struct amdgpu_debugfs_regs2_iocdata &ioc,
|
||||
const uint64_t addr) {
|
||||
// Select the SE, SH, and CU.
|
||||
debugfs_ioctl_set_state(dev, ioc);
|
||||
|
||||
if (lseek(dev.fd_.mmio2.get(), addr * 4, SEEK_SET) < 0) {
|
||||
fatal("Cannot seek to MMIO address for read\n");
|
||||
}
|
||||
|
||||
uint32_t value = -1U;
|
||||
if (read(dev.fd_.mmio2.get(), &value, sizeof(value)) != sizeof(value)) {
|
||||
fatal("Cannot read from MMIO register\n");
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
device_t::device_t(const bool pci_inited, const Agent::AgentInfo &info)
|
||||
: agent_info_(info)
|
||||
, pci_memory_(nullptr)
|
||||
{
|
||||
const auto pci_domain = agent_info_.getPCIDomain();
|
||||
const auto pci_location_id = agent_info_.getPCILocationID();
|
||||
|
||||
std::string name([pci_domain, pci_location_id]() {
|
||||
std::ostringstream out;
|
||||
out.fill('0');
|
||||
out << std::hex << std::setw(4) << pci_domain << ':'
|
||||
<< std::hex << std::setw(2) << (pci_location_id >> 8) << ':'
|
||||
<< std::hex << std::setw(2) << (pci_location_id & 0xFF) << '.'
|
||||
<< 0;
|
||||
return out.str();
|
||||
}());
|
||||
|
||||
int instance = find_pci_instance(name);
|
||||
{
|
||||
std::string dri_debug_path_pfx(DEBUG_DRI_PATH);
|
||||
dri_debug_path_pfx += std::to_string(instance);
|
||||
dri_debug_path_pfx += '/';
|
||||
|
||||
std::string path(dri_debug_path_pfx + "amdgpu_regs2");
|
||||
fd_.mmio2.reset(open(path.c_str(), O_RDWR));
|
||||
if (fd_.mmio2.get() < 0) {
|
||||
warning("Couldn't open amdgpu_regs2 debugfs file\n");
|
||||
if (!pci_inited) {
|
||||
constexpr char msg[] =
|
||||
"PCI system uninitialized; no PC sampling methods available\n";
|
||||
fatal(msg);
|
||||
}
|
||||
} else {
|
||||
goto device_specific_init;
|
||||
}
|
||||
}
|
||||
|
||||
pci_device_ =
|
||||
pci_device_find_by_slot(pci_domain, pci_location_id >> 8, pci_location_id & 0xFF, 0);
|
||||
if (!pci_device_ || pci_device_probe(pci_device_))
|
||||
fatal("failed to probe the GPU device\n");
|
||||
|
||||
// Look for a region between 256KB and 4096KB, 32-bit, non IO, and non prefetchable.
|
||||
for (size_t region = 0; region < sizeof(pci_device::regions) / sizeof(pci_device::regions[0]);
|
||||
++region)
|
||||
if (pci_device_->regions[region].is_64 == 0 &&
|
||||
pci_device_->regions[region].is_prefetchable == 0 &&
|
||||
pci_device_->regions[region].is_IO == 0 &&
|
||||
pci_device_->regions[region].size >= (256UL * 1024) &&
|
||||
pci_device_->regions[region].size <= (4096UL * 1024)) {
|
||||
pci_memory_size_ = pci_device_->regions[region].size;
|
||||
if (pci_device_map_range(pci_device_, pci_device_->regions[region].base_addr,
|
||||
pci_device_->regions[region].size, PCI_DEV_MAP_FLAG_WRITABLE,
|
||||
(void**)&pci_memory_))
|
||||
fatal("failed to map the registers\n");
|
||||
}
|
||||
|
||||
if (pci_memory_ == nullptr) fatal("could not find the pci memory address\n");
|
||||
|
||||
device_specific_init:
|
||||
// FIXME: detect the gfxip and call the correct routine.
|
||||
vega20_reg_offset_init(*this);
|
||||
}
|
||||
|
||||
device_t::~device_t() {
|
||||
if (pci_memory_ &&
|
||||
pci_device_unmap_range(pci_device_, pci_memory_, pci_memory_size_))
|
||||
{
|
||||
warning("failed to unmap the pci memory\n");
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
@@ -0,0 +1,138 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#ifndef SRC_PCSAMPLER_GFXIP_GFXIP_H_
|
||||
#define SRC_PCSAMPLER_GFXIP_GFXIP_H_
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#include <dirent.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <hsa/hsa.h>
|
||||
|
||||
#include "rocprofiler.h"
|
||||
#include "src/core/hardware/hsa_info.h"
|
||||
#include "src/utils/handle.h"
|
||||
|
||||
#include <pciaccess.h>
|
||||
|
||||
#define __maybe_unused
|
||||
|
||||
namespace rocmtools::pc_sampler {
|
||||
|
||||
struct PCSampler;
|
||||
|
||||
namespace gfxip {
|
||||
|
||||
namespace util {
|
||||
|
||||
struct dir_closer {
|
||||
void operator()(DIR *dir) { if (dir != nullptr) closedir(dir); }
|
||||
};
|
||||
|
||||
struct fd_closer {
|
||||
void operator()(int fd) { if (fd >= 0) close(fd); }
|
||||
};
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip::util
|
||||
|
||||
struct amdgpu_debugfs_regs2_iocdata {
|
||||
__u32 use_srbm, use_grbm, pg_lock;
|
||||
struct {
|
||||
__u32 se, sh, instance;
|
||||
} grbm;
|
||||
struct {
|
||||
__u32 me, pipe, queue, vmid;
|
||||
} srbm;
|
||||
};
|
||||
|
||||
enum AMDGPU_DEBUGFS_REGS2_CMDS {
|
||||
AMDGPU_DEBUGFS_REGS2_CMD_SET_STATE = 0
|
||||
};
|
||||
|
||||
#define AMDGPU_DEBUGFS_REGS2_IOC_SET_STATE _IOWR(0x20, AMDGPU_DEBUGFS_REGS2_CMD_SET_STATE, struct amdgpu_debugfs_regs2_iocdata)
|
||||
|
||||
enum {
|
||||
GC_HWIP = 1, // Graphics Core IP
|
||||
OSSSYS_HWIP,
|
||||
MAX_HWIP
|
||||
};
|
||||
static constexpr int HWIP_MAX_INSTANCE = 11;
|
||||
|
||||
#define REG_OFFSET(ip, inst, reg) (dev.reg_offset_[ip##_HWIP][inst][reg##_BASE_IDX] + reg)
|
||||
|
||||
#define REG_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
|
||||
#define REG_FIELD_MASK(reg, field) reg##__##field##_MASK
|
||||
|
||||
#define REG_GET_FIELD(value, reg, field) \
|
||||
(((value)®_FIELD_MASK(reg, field)) >> REG_FIELD_SHIFT(reg, field))
|
||||
#define REG_SET_FIELD(orig_val, reg, field, field_val) \
|
||||
(((orig_val) & ~REG_FIELD_MASK(reg, field)) | \
|
||||
(REG_FIELD_MASK(reg, field) & ((field_val) << REG_FIELD_SHIFT(reg, field))))
|
||||
|
||||
struct device_t {
|
||||
device_t(const bool pci_inited, const Agent::AgentInfo &agent_info);
|
||||
~device_t();
|
||||
|
||||
device_t(const device_t&) = delete;
|
||||
device_t& operator=(const device_t&) = delete;
|
||||
device_t(device_t&&) = default;
|
||||
|
||||
const Agent::AgentInfo &agent_info_;
|
||||
|
||||
struct pci_device* pci_device_;
|
||||
size_t pci_memory_size_;
|
||||
uint32_t* pci_memory_;
|
||||
|
||||
uint32_t* reg_offset_[MAX_HWIP][HWIP_MAX_INSTANCE];
|
||||
|
||||
struct debugfs_fds {
|
||||
debugfs_fds() : mmio2(-1) {}
|
||||
|
||||
rocmtools::handle_t<int, util::fd_closer> mmio2;
|
||||
} fd_;
|
||||
};
|
||||
|
||||
uint32_t pasid();
|
||||
|
||||
int debugfs_ioctl_set_state(const device_t& dev, const struct amdgpu_debugfs_regs2_iocdata &ioc);
|
||||
int debugfs_ioctl_write_register(const device_t &dev, const struct amdgpu_debugfs_regs2_iocdata &ioc, const uint64_t addr, const uint32_t value);
|
||||
uint32_t debugfs_ioctl_read_register(const device_t& dev, const struct amdgpu_debugfs_regs2_iocdata &ioc, const uint64_t addr);
|
||||
|
||||
void vega10_reg_offset_init(device_t& dev);
|
||||
void vega20_reg_offset_init(device_t& dev);
|
||||
void arct_reg_offset_init(device_t& dev);
|
||||
void aldebaran_reg_offset_init(device_t& dev);
|
||||
|
||||
void read_pc_samples_v9(const device_t& dev, PCSampler *sampler);
|
||||
void read_pc_samples_v9_ioctl(const device_t& dev, PCSampler *sampler);
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
|
||||
} // namespace rocmtools::pc_sampler
|
||||
#endif // SRC_PCSAMPLER_GFXIP_GFXIP_H_
|
||||
@@ -0,0 +1,299 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <cassert>
|
||||
#include <optional>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
|
||||
#include <hsa/hsa.h>
|
||||
|
||||
#include "rocprofiler.h"
|
||||
#include "src/core/hsa/hsa_support.h"
|
||||
#include "src/pcsampler/session/pc_sampler.h"
|
||||
#include "gfxip.h"
|
||||
#include "vega10_enum.h"
|
||||
#include "gc/gc_9_0_offset.h"
|
||||
#include "gc/gc_9_0_sh_mask.h"
|
||||
#include "osssys/osssys_4_2_0_offset.h"
|
||||
#include "osssys/osssys_4_2_0_sh_mask.h"
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
namespace {
|
||||
|
||||
uint32_t read_sq_register(const device_t& dev, uint32_t simd, uint32_t wave_id,
|
||||
uint32_t register_address) {
|
||||
uint32_t data = REG_SET_FIELD(0, SQ_IND_INDEX, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_IND_INDEX, SIMD_ID, simd);
|
||||
data = REG_SET_FIELD(data, SQ_IND_INDEX, INDEX, register_address);
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmSQ_IND_INDEX)] = data;
|
||||
return dev.pci_memory_[REG_OFFSET(GC, 0, mmSQ_IND_DATA)];
|
||||
}
|
||||
|
||||
uint32_t debugfs_ioctl_read_sq_register(
|
||||
const device_t &dev,
|
||||
const struct amdgpu_debugfs_regs2_iocdata &ioc,
|
||||
const uint32_t simd,
|
||||
const uint32_t wave_id,
|
||||
const uint32_t register_address) {
|
||||
uint32_t data = REG_SET_FIELD(0, SQ_IND_INDEX, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_IND_INDEX, SIMD_ID, simd);
|
||||
data = REG_SET_FIELD(data, SQ_IND_INDEX, INDEX, register_address);
|
||||
debugfs_ioctl_write_register(dev, ioc, REG_OFFSET(GC, 0, mmSQ_IND_INDEX), data);
|
||||
return debugfs_ioctl_read_register(dev, ioc, REG_OFFSET(GC, 0, mmSQ_IND_DATA));
|
||||
}
|
||||
|
||||
void fill_record(
|
||||
const device_t &dev,
|
||||
rocprofiler_record_pc_sample_t *record,
|
||||
uint32_t se,
|
||||
uint64_t pc,
|
||||
hsa_kernel_dispatch_packet_t *pkt) {
|
||||
|
||||
/*
|
||||
* XXX: Use of the reserved2 field in the HSA dispatch packet to uniquely
|
||||
* identify kernel dispatches for PC sampling is an internal implementation
|
||||
* detail which is subject to change. See the comment associated with
|
||||
* rocmtool::rocmtool::kernel_dispatch_counter_.
|
||||
*/
|
||||
record->pc_sample.dispatch_id =
|
||||
rocprofiler_kernel_dispatch_id_t{pkt->reserved2};
|
||||
|
||||
/*
|
||||
* TODO: Fill this with gpu_clock_counter via AMDKFD_IOC_GET_CLOCK_COUNTERS,
|
||||
* or just call hsaKmtGetClockCounters, which provides the same info. The ioctl
|
||||
* wants the device's kfd gpu_id (*not* the HSA node_id), whereas the hsaKmt
|
||||
* function takes an HSA node_id and translates it.
|
||||
*
|
||||
* The caller should fix up the field by adding a CPU TSC delta for each
|
||||
* waveslot read, though the CPU TSC needs translation into the GPU's clock
|
||||
* domain. ROCr has code to translate timestamps from the GPU's clock domain
|
||||
* to the system clock domain, but not the other way around, so this would
|
||||
* need to be written.
|
||||
*
|
||||
* Future sampling methods may fill this in automatically from the GPU's
|
||||
* real-time counter.
|
||||
*/
|
||||
//record->pc_sample.cycle = 0;
|
||||
rocprofiler_get_timestamp(&record->pc_sample.timestamp);
|
||||
|
||||
record->pc_sample.pc = pc;
|
||||
record->pc_sample.se = se;
|
||||
const auto &hdl = dev.agent_info_.getHandle();
|
||||
|
||||
/*
|
||||
* XXX FIXME: For consistency, this is the same method as used by
|
||||
* rocmtools::queue::AsyncSignalHandler in queue.cpp to fill
|
||||
* rocprofiler_record_profiler_t::gpu_id, but it should be changed; see the
|
||||
* comment in rocmtools::hsa_support::Initialize about using KFD's gpu_id for
|
||||
* more information.
|
||||
*/
|
||||
record->pc_sample.gpu_id = rocprofiler_agent_id_t{
|
||||
(uint64_t)rocmtools::hsa_support::GetAgentInfo(hdl).getIndex()};
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void read_pc_samples_v9(const device_t& dev, PCSampler *sampler) {
|
||||
assert(sampler);
|
||||
|
||||
uint32_t saved_grbm_gfx_index =
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmGRBM_GFX_INDEX)];
|
||||
uint32_t data;
|
||||
|
||||
for (uint32_t se = 0; se < dev.agent_info_.getShaderEngineCount(); ++se)
|
||||
for (uint32_t sh = 0; sh < dev.agent_info_.getShaderArraysPerSE(); ++sh)
|
||||
for (uint32_t cu = 0; cu < dev.agent_info_.getCUCountPerSH(); ++cu) {
|
||||
// Select the SE, SH, and CU.
|
||||
data = REG_SET_FIELD(0, GRBM_GFX_INDEX, INSTANCE_INDEX, cu);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_INDEX, SH_INDEX, sh);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_INDEX, SE_INDEX, se);
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmGRBM_GFX_INDEX)] = data;
|
||||
|
||||
// Iterate over all the waves in the compute unit.
|
||||
for (uint32_t simd = 0; simd < dev.agent_info_.getSimdCountPerCU(); ++simd)
|
||||
for (uint32_t wave_id = 0; wave_id < dev.agent_info_.getWaveSlotsPerSimd(); ++wave_id) {
|
||||
// FatalHalt the wave
|
||||
data = REG_SET_FIELD(0, SQ_CMD, CMD, SQ_IND_CMD_CMD_SETFATALHALT);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, MODE, SQ_IND_CMD_MODE_SINGLE);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, DATA, 1);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, SIMD_ID, simd);
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmSQ_CMD)] = data;
|
||||
|
||||
// Skip this slot if the wave is not valid.
|
||||
uint32_t status = read_sq_register(dev, simd, wave_id, ixSQ_WAVE_STATUS);
|
||||
if (!REG_GET_FIELD(status, SQ_WAVE_STATUS, VALID)) continue;
|
||||
|
||||
uint32_t hw_id = read_sq_register(dev, simd, wave_id, ixSQ_WAVE_HW_ID);
|
||||
uint32_t vm_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, VM_ID);
|
||||
|
||||
rocprofiler_record_pc_sample_t record;
|
||||
|
||||
// If the wave's PASID matches the process', read and report the PC
|
||||
// and dispatch packet for the wave.
|
||||
std::optional<uint64_t> pc;
|
||||
if (dev.pci_memory_[REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vm_id] == pasid()) {
|
||||
pc = (uint64_t)read_sq_register(dev, simd, wave_id, ixSQ_WAVE_PC_HI) << 32 |
|
||||
read_sq_register(dev, simd, wave_id, ixSQ_WAVE_PC_LO);
|
||||
|
||||
// The dispatch index into the queue
|
||||
uint32_t disp_idx = read_sq_register(dev, simd, wave_id, ixSQ_WAVE_TTMP6);
|
||||
|
||||
// Set up reading CP_HQD_PQ_BASE and CP_HQD_PQ_BASE_HI
|
||||
uint32_t pipe_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, PIPE_ID);
|
||||
uint32_t queue_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, QUEUE_ID);
|
||||
uint32_t me_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, ME_ID);
|
||||
data = REG_SET_FIELD(0, GRBM_GFX_CNTL, PIPEID, pipe_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, QUEUEID, queue_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, MEID, me_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, VMID, vm_id);
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmGRBM_GFX_CNTL)] = data;
|
||||
|
||||
uint32_t pq_base_lo =
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmCP_HQD_PQ_BASE)];
|
||||
uint32_t pq_base_hi =
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmCP_HQD_PQ_BASE_HI)] & 0xff;
|
||||
uint64_t pq_base = (uint64_t)pq_base_hi << 40 | (uint64_t)pq_base_lo << 8;
|
||||
uint32_t cp_hqd_pq_control_queue_size =
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmCP_HQD_PQ_CONTROL)] & 0x3f;
|
||||
uint32_t queue_size = 1 << (cp_hqd_pq_control_queue_size + 1);
|
||||
|
||||
auto pkt = (hsa_kernel_dispatch_packet_t*)(
|
||||
pq_base + disp_idx % queue_size *
|
||||
sizeof(hsa_kernel_dispatch_packet_t)
|
||||
);
|
||||
fill_record(dev, &record, se, *pc, pkt);
|
||||
}
|
||||
|
||||
// Resume the wave.
|
||||
data = REG_SET_FIELD(0, SQ_CMD, CMD, SQ_IND_CMD_CMD_SETFATALHALT);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, MODE, SQ_IND_CMD_MODE_SINGLE);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, DATA, 0);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, SIMD_ID, simd);
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmSQ_CMD)] = data;
|
||||
|
||||
if (pc && record.pc_sample.dispatch_id.value != 0) {
|
||||
sampler->AddRecord(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Restore the GRBM_GFX_INDEX register.
|
||||
dev.pci_memory_[REG_OFFSET(GC, 0, mmGRBM_GFX_INDEX)] = saved_grbm_gfx_index;
|
||||
}
|
||||
|
||||
void read_pc_samples_v9_ioctl(const device_t& dev, PCSampler *sampler) {
|
||||
assert(sampler);
|
||||
|
||||
struct amdgpu_debugfs_regs2_iocdata ioc{};
|
||||
ioc.use_grbm = 1;
|
||||
|
||||
uint32_t data;
|
||||
|
||||
for (uint32_t se = 0; se < dev.agent_info_.getShaderEngineCount(); ++se)
|
||||
for (uint32_t sh = 0; sh < dev.agent_info_.getShaderArraysPerSE(); ++sh)
|
||||
for (uint32_t cu = 0; cu < dev.agent_info_.getCUCountPerSH(); ++cu) {
|
||||
ioc.grbm.se = se;
|
||||
ioc.grbm.sh = sh;
|
||||
ioc.grbm.instance = cu;
|
||||
|
||||
// Iterate over all the waves in the compute unit.
|
||||
for (uint32_t simd = 0; simd < dev.agent_info_.getSimdCountPerCU(); ++simd)
|
||||
for (uint32_t wave_id = 0; wave_id < dev.agent_info_.getWaveSlotsPerSimd(); ++wave_id) {
|
||||
// FatalHalt the wave
|
||||
data = REG_SET_FIELD(0, SQ_CMD, CMD, SQ_IND_CMD_CMD_SETFATALHALT);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, MODE, SQ_IND_CMD_MODE_SINGLE);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, DATA, 1);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, SIMD_ID, simd);
|
||||
debugfs_ioctl_write_register(dev, ioc, REG_OFFSET(GC, 0, mmSQ_CMD), data);
|
||||
|
||||
// Skip this slot if the wave is not valid.
|
||||
debugfs_ioctl_set_state(dev, ioc);
|
||||
uint32_t status = debugfs_ioctl_read_sq_register(dev, ioc, simd, wave_id, ixSQ_WAVE_STATUS);
|
||||
if (!REG_GET_FIELD(status, SQ_WAVE_STATUS, VALID)) continue;
|
||||
|
||||
debugfs_ioctl_set_state(dev, ioc);
|
||||
uint32_t hw_id = debugfs_ioctl_read_sq_register(dev, ioc, simd, wave_id, ixSQ_WAVE_HW_ID);
|
||||
uint32_t vm_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, VM_ID);
|
||||
|
||||
rocprofiler_record_pc_sample_t record;
|
||||
|
||||
// If the wave's PASID matches the process', read and report the PC
|
||||
// and dispatch packet for the wave.
|
||||
std::optional<uint64_t> pc;
|
||||
if (debugfs_ioctl_read_register(dev, ioc, REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vm_id) == pasid()) {
|
||||
pc = (uint64_t)debugfs_ioctl_read_sq_register(dev, ioc, simd, wave_id, ixSQ_WAVE_PC_HI) << 32 |
|
||||
debugfs_ioctl_read_sq_register(dev, ioc, simd, wave_id, ixSQ_WAVE_PC_LO);
|
||||
|
||||
// The dispatch index into the queue
|
||||
uint32_t disp_idx = debugfs_ioctl_read_sq_register(dev, ioc, simd, wave_id, ixSQ_WAVE_TTMP6);
|
||||
|
||||
// Set up reading CP_HQD_PQ_BASE and CP_HQD_PQ_BASE_HI
|
||||
uint32_t pipe_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, PIPE_ID);
|
||||
uint32_t queue_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, QUEUE_ID);
|
||||
uint32_t me_id = REG_GET_FIELD(hw_id, SQ_WAVE_HW_ID, ME_ID);
|
||||
data = REG_SET_FIELD(0, GRBM_GFX_CNTL, PIPEID, pipe_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, QUEUEID, queue_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, MEID, me_id);
|
||||
data = REG_SET_FIELD(data, GRBM_GFX_CNTL, VMID, vm_id);
|
||||
debugfs_ioctl_write_register(dev, ioc, REG_OFFSET(GC, 0, mmGRBM_GFX_CNTL), data);
|
||||
|
||||
uint32_t pq_base_lo =
|
||||
debugfs_ioctl_read_register(dev, ioc, REG_OFFSET(GC, 0, mmCP_HQD_PQ_BASE));
|
||||
uint32_t pq_base_hi =
|
||||
debugfs_ioctl_read_register(dev, ioc, REG_OFFSET(GC, 0, mmCP_HQD_PQ_BASE_HI)) & 0xff;
|
||||
uint64_t pq_base = (uint64_t)pq_base_hi << 40 | (uint64_t)pq_base_lo << 8;
|
||||
uint32_t cp_hqd_pq_control_queue_size =
|
||||
debugfs_ioctl_read_register(dev, ioc, REG_OFFSET(GC, 0, mmCP_HQD_PQ_CONTROL)) & 0x3f;
|
||||
uint32_t queue_size = 1 << (cp_hqd_pq_control_queue_size + 1);
|
||||
|
||||
auto pkt = (hsa_kernel_dispatch_packet_t*)(
|
||||
pq_base + disp_idx % queue_size *
|
||||
sizeof(hsa_kernel_dispatch_packet_t)
|
||||
);
|
||||
fill_record(dev, &record, se, *pc, pkt);
|
||||
}
|
||||
|
||||
// Resume the wave.
|
||||
data = REG_SET_FIELD(0, SQ_CMD, CMD, SQ_IND_CMD_CMD_SETFATALHALT);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, MODE, SQ_IND_CMD_MODE_SINGLE);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, DATA, 0);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, WAVE_ID, wave_id);
|
||||
data = REG_SET_FIELD(data, SQ_CMD, SIMD_ID, simd);
|
||||
debugfs_ioctl_write_register(dev, ioc, REG_OFFSET(GC, 0, mmSQ_CMD), data);
|
||||
|
||||
if (pc && record.pc_sample.dispatch_id.value != 0) {
|
||||
sampler->AddRecord(record);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
@@ -0,0 +1,327 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#ifndef _osssys_4_0_OFFSET_HEADER
|
||||
#define _osssys_4_0_OFFSET_HEADER
|
||||
|
||||
|
||||
|
||||
// addressBlock: osssys_osssysdec
|
||||
// base address: 0x4280
|
||||
#define mmIH_VMID_0_LUT 0x0000
|
||||
#define mmIH_VMID_0_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_1_LUT 0x0001
|
||||
#define mmIH_VMID_1_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_2_LUT 0x0002
|
||||
#define mmIH_VMID_2_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_3_LUT 0x0003
|
||||
#define mmIH_VMID_3_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_4_LUT 0x0004
|
||||
#define mmIH_VMID_4_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_5_LUT 0x0005
|
||||
#define mmIH_VMID_5_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_6_LUT 0x0006
|
||||
#define mmIH_VMID_6_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_7_LUT 0x0007
|
||||
#define mmIH_VMID_7_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_8_LUT 0x0008
|
||||
#define mmIH_VMID_8_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_9_LUT 0x0009
|
||||
#define mmIH_VMID_9_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_10_LUT 0x000a
|
||||
#define mmIH_VMID_10_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_11_LUT 0x000b
|
||||
#define mmIH_VMID_11_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_12_LUT 0x000c
|
||||
#define mmIH_VMID_12_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_13_LUT 0x000d
|
||||
#define mmIH_VMID_13_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_14_LUT 0x000e
|
||||
#define mmIH_VMID_14_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_15_LUT 0x000f
|
||||
#define mmIH_VMID_15_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_0_LUT_MM 0x0010
|
||||
#define mmIH_VMID_0_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_1_LUT_MM 0x0011
|
||||
#define mmIH_VMID_1_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_2_LUT_MM 0x0012
|
||||
#define mmIH_VMID_2_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_3_LUT_MM 0x0013
|
||||
#define mmIH_VMID_3_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_4_LUT_MM 0x0014
|
||||
#define mmIH_VMID_4_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_5_LUT_MM 0x0015
|
||||
#define mmIH_VMID_5_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_6_LUT_MM 0x0016
|
||||
#define mmIH_VMID_6_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_7_LUT_MM 0x0017
|
||||
#define mmIH_VMID_7_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_8_LUT_MM 0x0018
|
||||
#define mmIH_VMID_8_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_9_LUT_MM 0x0019
|
||||
#define mmIH_VMID_9_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_10_LUT_MM 0x001a
|
||||
#define mmIH_VMID_10_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_11_LUT_MM 0x001b
|
||||
#define mmIH_VMID_11_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_12_LUT_MM 0x001c
|
||||
#define mmIH_VMID_12_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_13_LUT_MM 0x001d
|
||||
#define mmIH_VMID_13_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_14_LUT_MM 0x001e
|
||||
#define mmIH_VMID_14_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_15_LUT_MM 0x001f
|
||||
#define mmIH_VMID_15_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_COOKIE_0 0x0020
|
||||
#define mmIH_COOKIE_0_BASE_IDX 0
|
||||
#define mmIH_COOKIE_1 0x0021
|
||||
#define mmIH_COOKIE_1_BASE_IDX 0
|
||||
#define mmIH_COOKIE_2 0x0022
|
||||
#define mmIH_COOKIE_2_BASE_IDX 0
|
||||
#define mmIH_COOKIE_3 0x0023
|
||||
#define mmIH_COOKIE_3_BASE_IDX 0
|
||||
#define mmIH_COOKIE_4 0x0024
|
||||
#define mmIH_COOKIE_4_BASE_IDX 0
|
||||
#define mmIH_COOKIE_5 0x0025
|
||||
#define mmIH_COOKIE_5_BASE_IDX 0
|
||||
#define mmIH_COOKIE_6 0x0026
|
||||
#define mmIH_COOKIE_6_BASE_IDX 0
|
||||
#define mmIH_COOKIE_7 0x0027
|
||||
#define mmIH_COOKIE_7_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART0 0x003f
|
||||
#define mmIH_REGISTER_LAST_PART0_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_0 0x0040
|
||||
#define mmSEM_REQ_INPUT_0_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_1 0x0041
|
||||
#define mmSEM_REQ_INPUT_1_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_2 0x0042
|
||||
#define mmSEM_REQ_INPUT_2_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_3 0x0043
|
||||
#define mmSEM_REQ_INPUT_3_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART0 0x007f
|
||||
#define mmSEM_REGISTER_LAST_PART0_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL 0x0080
|
||||
#define mmIH_RB_CNTL_BASE_IDX 0
|
||||
#define mmIH_RB_BASE 0x0081
|
||||
#define mmIH_RB_BASE_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI 0x0082
|
||||
#define mmIH_RB_BASE_HI_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR 0x0083
|
||||
#define mmIH_RB_RPTR_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR 0x0084
|
||||
#define mmIH_RB_WPTR_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_ADDR_HI 0x0085
|
||||
#define mmIH_RB_WPTR_ADDR_HI_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_ADDR_LO 0x0086
|
||||
#define mmIH_RB_WPTR_ADDR_LO_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR 0x0087
|
||||
#define mmIH_DOORBELL_RPTR_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL_RING1 0x0088
|
||||
#define mmIH_RB_CNTL_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_RING1 0x0089
|
||||
#define mmIH_RB_BASE_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI_RING1 0x008a
|
||||
#define mmIH_RB_BASE_HI_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR_RING1 0x008b
|
||||
#define mmIH_RB_RPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_RING1 0x008c
|
||||
#define mmIH_RB_WPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR_RING1 0x008f
|
||||
#define mmIH_DOORBELL_RPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL_RING2 0x0090
|
||||
#define mmIH_RB_CNTL_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_RING2 0x0091
|
||||
#define mmIH_RB_BASE_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI_RING2 0x0092
|
||||
#define mmIH_RB_BASE_HI_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR_RING2 0x0093
|
||||
#define mmIH_RB_RPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_RING2 0x0094
|
||||
#define mmIH_RB_WPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR_RING2 0x0097
|
||||
#define mmIH_DOORBELL_RPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_VERSION 0x0098
|
||||
#define mmIH_VERSION_BASE_IDX 0
|
||||
#define mmIH_CNTL 0x00c0
|
||||
#define mmIH_CNTL_BASE_IDX 0
|
||||
#define mmIH_CNTL2 0x00c1
|
||||
#define mmIH_CNTL2_BASE_IDX 0
|
||||
#define mmIH_STATUS 0x00c2
|
||||
#define mmIH_STATUS_BASE_IDX 0
|
||||
#define mmIH_PERFMON_CNTL 0x00c3
|
||||
#define mmIH_PERFMON_CNTL_BASE_IDX 0
|
||||
#define mmIH_PERFCOUNTER0_RESULT 0x00c4
|
||||
#define mmIH_PERFCOUNTER0_RESULT_BASE_IDX 0
|
||||
#define mmIH_PERFCOUNTER1_RESULT 0x00c5
|
||||
#define mmIH_PERFCOUNTER1_RESULT_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_31_0 0x00c7
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_31_0_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_63_32 0x00c8
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_63_32_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_95_64 0x00c9
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_95_64_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_FIELD_CONTROL 0x00ca
|
||||
#define mmIH_DSM_MATCH_FIELD_CONTROL_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_DATA_CONTROL 0x00cb
|
||||
#define mmIH_DSM_MATCH_DATA_CONTROL_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_FCN_ID 0x00cc
|
||||
#define mmIH_DSM_MATCH_FCN_ID_BASE_IDX 0
|
||||
#define mmIH_LIMIT_INT_RATE_CNTL 0x00cd
|
||||
#define mmIH_LIMIT_INT_RATE_CNTL_BASE_IDX 0
|
||||
#define mmIH_VF_RB_STATUS 0x00ce
|
||||
#define mmIH_VF_RB_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB_STATUS2 0x00cf
|
||||
#define mmIH_VF_RB_STATUS2_BASE_IDX 0
|
||||
#define mmIH_VF_RB1_STATUS 0x00d0
|
||||
#define mmIH_VF_RB1_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB1_STATUS2 0x00d1
|
||||
#define mmIH_VF_RB1_STATUS2_BASE_IDX 0
|
||||
#define mmIH_VF_RB2_STATUS 0x00d2
|
||||
#define mmIH_VF_RB2_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB2_STATUS2 0x00d3
|
||||
#define mmIH_VF_RB2_STATUS2_BASE_IDX 0
|
||||
#define mmIH_INT_FLOOD_CNTL 0x00d5
|
||||
#define mmIH_INT_FLOOD_CNTL_BASE_IDX 0
|
||||
#define mmIH_RB0_INT_FLOOD_STATUS 0x00d6
|
||||
#define mmIH_RB0_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_RB1_INT_FLOOD_STATUS 0x00d7
|
||||
#define mmIH_RB1_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_RB2_INT_FLOOD_STATUS 0x00d8
|
||||
#define mmIH_RB2_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_INT_FLOOD_STATUS 0x00d9
|
||||
#define mmIH_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_STORM_CLIENT_LIST_CNTL 0x00da
|
||||
#define mmIH_STORM_CLIENT_LIST_CNTL_BASE_IDX 0
|
||||
#define mmIH_CLK_CTRL 0x00db
|
||||
#define mmIH_CLK_CTRL_BASE_IDX 0
|
||||
#define mmIH_INT_FLAGS 0x00dc
|
||||
#define mmIH_INT_FLAGS_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO0 0x00dd
|
||||
#define mmIH_LAST_INT_INFO0_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO1 0x00de
|
||||
#define mmIH_LAST_INT_INFO1_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO2 0x00df
|
||||
#define mmIH_LAST_INT_INFO2_BASE_IDX 0
|
||||
#define mmIH_SCRATCH 0x00e0
|
||||
#define mmIH_SCRATCH_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CREDIT_ERROR 0x00e1
|
||||
#define mmIH_CLIENT_CREDIT_ERROR_BASE_IDX 0
|
||||
#define mmIH_GPU_IOV_VIOLATION_LOG 0x00e2
|
||||
#define mmIH_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmIH_COOKIE_REC_VIOLATION_LOG 0x00e3
|
||||
#define mmIH_COOKIE_REC_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmIH_CREDIT_STATUS 0x00e4
|
||||
#define mmIH_CREDIT_STATUS_BASE_IDX 0
|
||||
#define mmIH_MMHUB_ERROR 0x00e5
|
||||
#define mmIH_MMHUB_ERROR_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART2 0x00ff
|
||||
#define mmIH_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define mmSEM_CLK_CTRL 0x0100
|
||||
#define mmSEM_CLK_CTRL_BASE_IDX 0
|
||||
#define mmSEM_UTC_CREDIT 0x0101
|
||||
#define mmSEM_UTC_CREDIT_BASE_IDX 0
|
||||
#define mmSEM_UTC_CONFIG 0x0102
|
||||
#define mmSEM_UTC_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_UTCL2_TRAN_EN_LUT 0x0103
|
||||
#define mmSEM_UTCL2_TRAN_EN_LUT_BASE_IDX 0
|
||||
#define mmSEM_MCIF_CONFIG 0x0104
|
||||
#define mmSEM_MCIF_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_PERFMON_CNTL 0x0105
|
||||
#define mmSEM_PERFMON_CNTL_BASE_IDX 0
|
||||
#define mmSEM_PERFCOUNTER0_RESULT 0x0106
|
||||
#define mmSEM_PERFCOUNTER0_RESULT_BASE_IDX 0
|
||||
#define mmSEM_PERFCOUNTER1_RESULT 0x0107
|
||||
#define mmSEM_PERFCOUNTER1_RESULT_BASE_IDX 0
|
||||
#define mmSEM_STATUS 0x0108
|
||||
#define mmSEM_STATUS_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG 0x0109
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX 0x010a
|
||||
#define mmSEM_MAILBOX_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CONTROL 0x010b
|
||||
#define mmSEM_MAILBOX_CONTROL_BASE_IDX 0
|
||||
#define mmSEM_CHICKEN_BITS 0x010c
|
||||
#define mmSEM_CHICKEN_BITS_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_EXTRA 0x010d
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_EXTRA_BASE_IDX 0
|
||||
#define mmSEM_GPU_IOV_VIOLATION_LOG 0x010e
|
||||
#define mmSEM_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmSEM_OUTSTANDING_THRESHOLD 0x010f
|
||||
#define mmSEM_OUTSTANDING_THRESHOLD_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART2 0x017f
|
||||
#define mmSEM_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define mmIH_ACTIVE_FCN_ID 0x0180
|
||||
#define mmIH_ACTIVE_FCN_ID_BASE_IDX 0
|
||||
#define mmIH_VIRT_RESET_REQ 0x0181
|
||||
#define mmIH_VIRT_RESET_REQ_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG 0x0184
|
||||
#define mmIH_CLIENT_CFG_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG_INDEX 0x0188
|
||||
#define mmIH_CLIENT_CFG_INDEX_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG_DATA 0x0189
|
||||
#define mmIH_CLIENT_CFG_DATA_BASE_IDX 0
|
||||
#define mmIH_CID_REMAP_INDEX 0x018a
|
||||
#define mmIH_CID_REMAP_INDEX_BASE_IDX 0
|
||||
#define mmIH_CID_REMAP_DATA 0x018b
|
||||
#define mmIH_CID_REMAP_DATA_BASE_IDX 0
|
||||
#define mmIH_CHICKEN 0x018c
|
||||
#define mmIH_CHICKEN_BASE_IDX 0
|
||||
#define mmIH_MMHUB_CNTL 0x018d
|
||||
#define mmIH_MMHUB_CNTL_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART1 0x019f
|
||||
#define mmIH_REGISTER_LAST_PART1_BASE_IDX 0
|
||||
#define mmSEM_ACTIVE_FCN_ID 0x01a0
|
||||
#define mmSEM_ACTIVE_FCN_ID_BASE_IDX 0
|
||||
#define mmSEM_VIRT_RESET_REQ 0x01a1
|
||||
#define mmSEM_VIRT_RESET_REQ_BASE_IDX 0
|
||||
#define mmSEM_RESP_SDMA0 0x01a4
|
||||
#define mmSEM_RESP_SDMA0_BASE_IDX 0
|
||||
#define mmSEM_RESP_SDMA1 0x01a5
|
||||
#define mmSEM_RESP_SDMA1_BASE_IDX 0
|
||||
#define mmSEM_RESP_UVD 0x01a6
|
||||
#define mmSEM_RESP_UVD_BASE_IDX 0
|
||||
#define mmSEM_RESP_VCE_0 0x01a7
|
||||
#define mmSEM_RESP_VCE_0_BASE_IDX 0
|
||||
#define mmSEM_RESP_ACP 0x01a8
|
||||
#define mmSEM_RESP_ACP_BASE_IDX 0
|
||||
#define mmSEM_RESP_ISP 0x01a9
|
||||
#define mmSEM_RESP_ISP_BASE_IDX 0
|
||||
#define mmSEM_RESP_VCE_1 0x01aa
|
||||
#define mmSEM_RESP_VCE_1_BASE_IDX 0
|
||||
#define mmSEM_RESP_VP8 0x01ab
|
||||
#define mmSEM_RESP_VP8_BASE_IDX 0
|
||||
#define mmSEM_RESP_GC 0x01ac
|
||||
#define mmSEM_RESP_GC_BASE_IDX 0
|
||||
#define mmSEM_CID_REMAP_INDEX 0x01b0
|
||||
#define mmSEM_CID_REMAP_INDEX_BASE_IDX 0
|
||||
#define mmSEM_CID_REMAP_DATA 0x01b1
|
||||
#define mmSEM_CID_REMAP_DATA_BASE_IDX 0
|
||||
#define mmSEM_ATOMIC_OP_LUT 0x01b2
|
||||
#define mmSEM_ATOMIC_OP_LUT_BASE_IDX 0
|
||||
#define mmSEM_EDC_CONFIG 0x01b3
|
||||
#define mmSEM_EDC_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_CHICKEN_BITS2 0x01b4
|
||||
#define mmSEM_CHICKEN_BITS2_BASE_IDX 0
|
||||
#define mmSEM_MMHUB_CNTL 0x01b5
|
||||
#define mmSEM_MMHUB_CNTL_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART1 0x01bf
|
||||
#define mmSEM_REGISTER_LAST_PART1_BASE_IDX 0
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,345 @@
|
||||
/*
|
||||
* Copyright 2020 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
#ifndef _osssys_4_2_0_OFFSET_HEADER
|
||||
#define _osssys_4_2_0_OFFSET_HEADER
|
||||
|
||||
|
||||
|
||||
// addressBlock: osssys_osssysdec
|
||||
// base address: 0x4280
|
||||
#define mmIH_VMID_0_LUT 0x0000
|
||||
#define mmIH_VMID_0_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_1_LUT 0x0001
|
||||
#define mmIH_VMID_1_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_2_LUT 0x0002
|
||||
#define mmIH_VMID_2_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_3_LUT 0x0003
|
||||
#define mmIH_VMID_3_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_4_LUT 0x0004
|
||||
#define mmIH_VMID_4_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_5_LUT 0x0005
|
||||
#define mmIH_VMID_5_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_6_LUT 0x0006
|
||||
#define mmIH_VMID_6_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_7_LUT 0x0007
|
||||
#define mmIH_VMID_7_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_8_LUT 0x0008
|
||||
#define mmIH_VMID_8_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_9_LUT 0x0009
|
||||
#define mmIH_VMID_9_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_10_LUT 0x000a
|
||||
#define mmIH_VMID_10_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_11_LUT 0x000b
|
||||
#define mmIH_VMID_11_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_12_LUT 0x000c
|
||||
#define mmIH_VMID_12_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_13_LUT 0x000d
|
||||
#define mmIH_VMID_13_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_14_LUT 0x000e
|
||||
#define mmIH_VMID_14_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_15_LUT 0x000f
|
||||
#define mmIH_VMID_15_LUT_BASE_IDX 0
|
||||
#define mmIH_VMID_0_LUT_MM 0x0010
|
||||
#define mmIH_VMID_0_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_1_LUT_MM 0x0011
|
||||
#define mmIH_VMID_1_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_2_LUT_MM 0x0012
|
||||
#define mmIH_VMID_2_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_3_LUT_MM 0x0013
|
||||
#define mmIH_VMID_3_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_4_LUT_MM 0x0014
|
||||
#define mmIH_VMID_4_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_5_LUT_MM 0x0015
|
||||
#define mmIH_VMID_5_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_6_LUT_MM 0x0016
|
||||
#define mmIH_VMID_6_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_7_LUT_MM 0x0017
|
||||
#define mmIH_VMID_7_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_8_LUT_MM 0x0018
|
||||
#define mmIH_VMID_8_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_9_LUT_MM 0x0019
|
||||
#define mmIH_VMID_9_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_10_LUT_MM 0x001a
|
||||
#define mmIH_VMID_10_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_11_LUT_MM 0x001b
|
||||
#define mmIH_VMID_11_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_12_LUT_MM 0x001c
|
||||
#define mmIH_VMID_12_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_13_LUT_MM 0x001d
|
||||
#define mmIH_VMID_13_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_14_LUT_MM 0x001e
|
||||
#define mmIH_VMID_14_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_VMID_15_LUT_MM 0x001f
|
||||
#define mmIH_VMID_15_LUT_MM_BASE_IDX 0
|
||||
#define mmIH_COOKIE_0 0x0020
|
||||
#define mmIH_COOKIE_0_BASE_IDX 0
|
||||
#define mmIH_COOKIE_1 0x0021
|
||||
#define mmIH_COOKIE_1_BASE_IDX 0
|
||||
#define mmIH_COOKIE_2 0x0022
|
||||
#define mmIH_COOKIE_2_BASE_IDX 0
|
||||
#define mmIH_COOKIE_3 0x0023
|
||||
#define mmIH_COOKIE_3_BASE_IDX 0
|
||||
#define mmIH_COOKIE_4 0x0024
|
||||
#define mmIH_COOKIE_4_BASE_IDX 0
|
||||
#define mmIH_COOKIE_5 0x0025
|
||||
#define mmIH_COOKIE_5_BASE_IDX 0
|
||||
#define mmIH_COOKIE_6 0x0026
|
||||
#define mmIH_COOKIE_6_BASE_IDX 0
|
||||
#define mmIH_COOKIE_7 0x0027
|
||||
#define mmIH_COOKIE_7_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART0 0x003f
|
||||
#define mmIH_REGISTER_LAST_PART0_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_0 0x0040
|
||||
#define mmSEM_REQ_INPUT_0_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_1 0x0041
|
||||
#define mmSEM_REQ_INPUT_1_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_2 0x0042
|
||||
#define mmSEM_REQ_INPUT_2_BASE_IDX 0
|
||||
#define mmSEM_REQ_INPUT_3 0x0043
|
||||
#define mmSEM_REQ_INPUT_3_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART0 0x007f
|
||||
#define mmSEM_REGISTER_LAST_PART0_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL 0x0080
|
||||
#define mmIH_RB_CNTL_BASE_IDX 0
|
||||
#define mmIH_RB_BASE 0x0081
|
||||
#define mmIH_RB_BASE_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI 0x0082
|
||||
#define mmIH_RB_BASE_HI_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR 0x0083
|
||||
#define mmIH_RB_RPTR_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR 0x0084
|
||||
#define mmIH_RB_WPTR_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_ADDR_HI 0x0085
|
||||
#define mmIH_RB_WPTR_ADDR_HI_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_ADDR_LO 0x0086
|
||||
#define mmIH_RB_WPTR_ADDR_LO_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR 0x0087
|
||||
#define mmIH_DOORBELL_RPTR_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL_RING1 0x008c
|
||||
#define mmIH_RB_CNTL_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_RING1 0x008d
|
||||
#define mmIH_RB_BASE_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI_RING1 0x008e
|
||||
#define mmIH_RB_BASE_HI_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR_RING1 0x008f
|
||||
#define mmIH_RB_RPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_RING1 0x0090
|
||||
#define mmIH_RB_WPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR_RING1 0x0093
|
||||
#define mmIH_DOORBELL_RPTR_RING1_BASE_IDX 0
|
||||
#define mmIH_RB_CNTL_RING2 0x0098
|
||||
#define mmIH_RB_CNTL_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_RING2 0x0099
|
||||
#define mmIH_RB_BASE_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_BASE_HI_RING2 0x009a
|
||||
#define mmIH_RB_BASE_HI_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_RPTR_RING2 0x009b
|
||||
#define mmIH_RB_RPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_RB_WPTR_RING2 0x009c
|
||||
#define mmIH_RB_WPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_DOORBELL_RPTR_RING2 0x009f
|
||||
#define mmIH_DOORBELL_RPTR_RING2_BASE_IDX 0
|
||||
#define mmIH_VERSION 0x00a5
|
||||
#define mmIH_VERSION_BASE_IDX 0
|
||||
#define mmIH_CNTL 0x00c0
|
||||
#define mmIH_CNTL_BASE_IDX 0
|
||||
#define mmIH_CNTL2 0x00c1
|
||||
#define mmIH_CNTL2_BASE_IDX 0
|
||||
#define mmIH_STATUS 0x00c2
|
||||
#define mmIH_STATUS_BASE_IDX 0
|
||||
#define mmIH_PERFMON_CNTL 0x00c3
|
||||
#define mmIH_PERFMON_CNTL_BASE_IDX 0
|
||||
#define mmIH_PERFCOUNTER0_RESULT 0x00c4
|
||||
#define mmIH_PERFCOUNTER0_RESULT_BASE_IDX 0
|
||||
#define mmIH_PERFCOUNTER1_RESULT 0x00c5
|
||||
#define mmIH_PERFCOUNTER1_RESULT_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_31_0 0x00c7
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_31_0_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_63_32 0x00c8
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_63_32_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_95_64 0x00c9
|
||||
#define mmIH_DSM_MATCH_VALUE_BIT_95_64_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_FIELD_CONTROL 0x00ca
|
||||
#define mmIH_DSM_MATCH_FIELD_CONTROL_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_DATA_CONTROL 0x00cb
|
||||
#define mmIH_DSM_MATCH_DATA_CONTROL_BASE_IDX 0
|
||||
#define mmIH_DSM_MATCH_FCN_ID 0x00cc
|
||||
#define mmIH_DSM_MATCH_FCN_ID_BASE_IDX 0
|
||||
#define mmIH_LIMIT_INT_RATE_CNTL 0x00cd
|
||||
#define mmIH_LIMIT_INT_RATE_CNTL_BASE_IDX 0
|
||||
#define mmIH_VF_RB_STATUS 0x00ce
|
||||
#define mmIH_VF_RB_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB_STATUS2 0x00cf
|
||||
#define mmIH_VF_RB_STATUS2_BASE_IDX 0
|
||||
#define mmIH_VF_RB1_STATUS 0x00d0
|
||||
#define mmIH_VF_RB1_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB1_STATUS2 0x00d1
|
||||
#define mmIH_VF_RB1_STATUS2_BASE_IDX 0
|
||||
#define mmIH_VF_RB2_STATUS 0x00d2
|
||||
#define mmIH_VF_RB2_STATUS_BASE_IDX 0
|
||||
#define mmIH_VF_RB2_STATUS2 0x00d3
|
||||
#define mmIH_VF_RB2_STATUS2_BASE_IDX 0
|
||||
#define mmIH_INT_FLOOD_CNTL 0x00d5
|
||||
#define mmIH_INT_FLOOD_CNTL_BASE_IDX 0
|
||||
#define mmIH_RB0_INT_FLOOD_STATUS 0x00d6
|
||||
#define mmIH_RB0_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_RB1_INT_FLOOD_STATUS 0x00d7
|
||||
#define mmIH_RB1_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_RB2_INT_FLOOD_STATUS 0x00d8
|
||||
#define mmIH_RB2_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_INT_FLOOD_STATUS 0x00d9
|
||||
#define mmIH_INT_FLOOD_STATUS_BASE_IDX 0
|
||||
#define mmIH_STORM_CLIENT_LIST_CNTL 0x00da
|
||||
#define mmIH_STORM_CLIENT_LIST_CNTL_BASE_IDX 0
|
||||
#define mmIH_CLK_CTRL 0x00db
|
||||
#define mmIH_CLK_CTRL_BASE_IDX 0
|
||||
#define mmIH_INT_FLAGS 0x00dc
|
||||
#define mmIH_INT_FLAGS_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO0 0x00dd
|
||||
#define mmIH_LAST_INT_INFO0_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO1 0x00de
|
||||
#define mmIH_LAST_INT_INFO1_BASE_IDX 0
|
||||
#define mmIH_LAST_INT_INFO2 0x00df
|
||||
#define mmIH_LAST_INT_INFO2_BASE_IDX 0
|
||||
#define mmIH_SCRATCH 0x00e0
|
||||
#define mmIH_SCRATCH_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CREDIT_ERROR 0x00e1
|
||||
#define mmIH_CLIENT_CREDIT_ERROR_BASE_IDX 0
|
||||
#define mmIH_GPU_IOV_VIOLATION_LOG 0x00e2
|
||||
#define mmIH_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmIH_COOKIE_REC_VIOLATION_LOG 0x00e3
|
||||
#define mmIH_COOKIE_REC_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmIH_CREDIT_STATUS 0x00e4
|
||||
#define mmIH_CREDIT_STATUS_BASE_IDX 0
|
||||
#define mmIH_MMHUB_ERROR 0x00e5
|
||||
#define mmIH_MMHUB_ERROR_BASE_IDX 0
|
||||
#define mmIH_MEM_POWER_CTRL 0x00e8
|
||||
#define mmIH_MEM_POWER_CTRL_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART2 0x00ff
|
||||
#define mmIH_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define mmSEM_CLK_CTRL 0x0100
|
||||
#define mmSEM_CLK_CTRL_BASE_IDX 0
|
||||
#define mmSEM_UTC_CREDIT 0x0101
|
||||
#define mmSEM_UTC_CREDIT_BASE_IDX 0
|
||||
#define mmSEM_UTC_CONFIG 0x0102
|
||||
#define mmSEM_UTC_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_UTCL2_TRAN_EN_LUT 0x0103
|
||||
#define mmSEM_UTCL2_TRAN_EN_LUT_BASE_IDX 0
|
||||
#define mmSEM_MCIF_CONFIG 0x0104
|
||||
#define mmSEM_MCIF_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_PERFMON_CNTL 0x0105
|
||||
#define mmSEM_PERFMON_CNTL_BASE_IDX 0
|
||||
#define mmSEM_PERFCOUNTER0_RESULT 0x0106
|
||||
#define mmSEM_PERFCOUNTER0_RESULT_BASE_IDX 0
|
||||
#define mmSEM_PERFCOUNTER1_RESULT 0x0107
|
||||
#define mmSEM_PERFCOUNTER1_RESULT_BASE_IDX 0
|
||||
#define mmSEM_STATUS 0x0108
|
||||
#define mmSEM_STATUS_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG 0x0109
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX 0x010a
|
||||
#define mmSEM_MAILBOX_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CONTROL 0x010b
|
||||
#define mmSEM_MAILBOX_CONTROL_BASE_IDX 0
|
||||
#define mmSEM_CHICKEN_BITS 0x010c
|
||||
#define mmSEM_CHICKEN_BITS_BASE_IDX 0
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_EXTRA 0x010d
|
||||
#define mmSEM_MAILBOX_CLIENTCONFIG_EXTRA_BASE_IDX 0
|
||||
#define mmSEM_GPU_IOV_VIOLATION_LOG 0x010e
|
||||
#define mmSEM_GPU_IOV_VIOLATION_LOG_BASE_IDX 0
|
||||
#define mmSEM_OUTSTANDING_THRESHOLD 0x010f
|
||||
#define mmSEM_OUTSTANDING_THRESHOLD_BASE_IDX 0
|
||||
#define mmSEM_MEM_POWER_CTRL 0x0110
|
||||
#define mmSEM_MEM_POWER_CTRL_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART2 0x017f
|
||||
#define mmSEM_REGISTER_LAST_PART2_BASE_IDX 0
|
||||
#define mmIH_ACTIVE_FCN_ID 0x0180
|
||||
#define mmIH_ACTIVE_FCN_ID_BASE_IDX 0
|
||||
#define mmIH_VIRT_RESET_REQ 0x0181
|
||||
#define mmIH_VIRT_RESET_REQ_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG 0x0184
|
||||
#define mmIH_CLIENT_CFG_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG_INDEX 0x0188
|
||||
#define mmIH_CLIENT_CFG_INDEX_BASE_IDX 0
|
||||
#define mmIH_CLIENT_CFG_DATA 0x0189
|
||||
#define mmIH_CLIENT_CFG_DATA_BASE_IDX 0
|
||||
#define mmIH_CID_REMAP_INDEX 0x018a
|
||||
#define mmIH_CID_REMAP_INDEX_BASE_IDX 0
|
||||
#define mmIH_CID_REMAP_DATA 0x018b
|
||||
#define mmIH_CID_REMAP_DATA_BASE_IDX 0
|
||||
#define mmIH_CHICKEN 0x018c
|
||||
#define mmIH_CHICKEN_BASE_IDX 0
|
||||
#define mmIH_MMHUB_CNTL 0x018d
|
||||
#define mmIH_MMHUB_CNTL_BASE_IDX 0
|
||||
#define mmIH_INT_DROP_CNTL 0x018e
|
||||
#define mmIH_INT_DROP_CNTL_BASE_IDX 0
|
||||
#define mmIH_INT_DROP_MATCH_VALUE0 0x018f
|
||||
#define mmIH_INT_DROP_MATCH_VALUE0_BASE_IDX 0
|
||||
#define mmIH_INT_DROP_MATCH_VALUE1 0x0190
|
||||
#define mmIH_INT_DROP_MATCH_VALUE1_BASE_IDX 0
|
||||
#define mmIH_INT_DROP_MATCH_MASK0 0x0191
|
||||
#define mmIH_INT_DROP_MATCH_MASK0_BASE_IDX 0
|
||||
#define mmIH_INT_DROP_MATCH_MASK1 0x0192
|
||||
#define mmIH_INT_DROP_MATCH_MASK1_BASE_IDX 0
|
||||
#define mmIH_REGISTER_LAST_PART1 0x019f
|
||||
#define mmIH_REGISTER_LAST_PART1_BASE_IDX 0
|
||||
#define mmSEM_ACTIVE_FCN_ID 0x01a0
|
||||
#define mmSEM_ACTIVE_FCN_ID_BASE_IDX 0
|
||||
#define mmSEM_VIRT_RESET_REQ 0x01a1
|
||||
#define mmSEM_VIRT_RESET_REQ_BASE_IDX 0
|
||||
#define mmSEM_RESP_SDMA0 0x01a4
|
||||
#define mmSEM_RESP_SDMA0_BASE_IDX 0
|
||||
#define mmSEM_RESP_SDMA1 0x01a5
|
||||
#define mmSEM_RESP_SDMA1_BASE_IDX 0
|
||||
#define mmSEM_RESP_UVD 0x01a6
|
||||
#define mmSEM_RESP_UVD_BASE_IDX 0
|
||||
#define mmSEM_RESP_VCE_0 0x01a7
|
||||
#define mmSEM_RESP_VCE_0_BASE_IDX 0
|
||||
#define mmSEM_RESP_ACP 0x01a8
|
||||
#define mmSEM_RESP_ACP_BASE_IDX 0
|
||||
#define mmSEM_RESP_ISP 0x01a9
|
||||
#define mmSEM_RESP_ISP_BASE_IDX 0
|
||||
#define mmSEM_RESP_VCE_1 0x01aa
|
||||
#define mmSEM_RESP_VCE_1_BASE_IDX 0
|
||||
#define mmSEM_RESP_VP8 0x01ab
|
||||
#define mmSEM_RESP_VP8_BASE_IDX 0
|
||||
#define mmSEM_RESP_GC 0x01ac
|
||||
#define mmSEM_RESP_GC_BASE_IDX 0
|
||||
#define mmSEM_RESP_UVD_1 0x01ad
|
||||
#define mmSEM_RESP_UVD_1_BASE_IDX 0
|
||||
#define mmSEM_CID_REMAP_INDEX 0x01b0
|
||||
#define mmSEM_CID_REMAP_INDEX_BASE_IDX 0
|
||||
#define mmSEM_CID_REMAP_DATA 0x01b1
|
||||
#define mmSEM_CID_REMAP_DATA_BASE_IDX 0
|
||||
#define mmSEM_ATOMIC_OP_LUT 0x01b2
|
||||
#define mmSEM_ATOMIC_OP_LUT_BASE_IDX 0
|
||||
#define mmSEM_EDC_CONFIG 0x01b3
|
||||
#define mmSEM_EDC_CONFIG_BASE_IDX 0
|
||||
#define mmSEM_CHICKEN_BITS2 0x01b4
|
||||
#define mmSEM_CHICKEN_BITS2_BASE_IDX 0
|
||||
#define mmSEM_MMHUB_CNTL 0x01b5
|
||||
#define mmSEM_MMHUB_CNTL_BASE_IDX 0
|
||||
#define mmSEM_REGISTER_LAST_PART1 0x01bf
|
||||
#define mmSEM_REGISTER_LAST_PART1_BASE_IDX 0
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include "gfxip.h"
|
||||
#include "vega10_ip_offset.h"
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
void vega10_reg_offset_init(device_t& dev) {
|
||||
for (int i = 0; i < MAX_INSTANCE; ++i) {
|
||||
dev.reg_offset_[GC_HWIP][i] = (uint32_t*)(&(GC_BASE.instance[i]));
|
||||
dev.reg_offset_[OSSSYS_HWIP][i] = (uint32_t*)(&(OSSSYS_BASE.instance[i]));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,33 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#include "gfxip.h"
|
||||
#include "vega20_ip_offset.h"
|
||||
|
||||
namespace rocmtools::pc_sampler::gfxip {
|
||||
|
||||
void vega20_reg_offset_init(device_t& dev) {
|
||||
for (int i = 0; i < MAX_INSTANCE; ++i) {
|
||||
dev.reg_offset_[GC_HWIP][i] = (uint32_t*)(&(GC_BASE.instance[i]));
|
||||
dev.reg_offset_[OSSSYS_HWIP][i] = (uint32_t*)(&(OSSSYS_BASE.instance[i]));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace rocmtools::pc_sampler::gfxip
|
||||
@@ -0,0 +1,60 @@
|
||||
/* Copyright (c) 2022 Advanced Micro Devices, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE. */
|
||||
|
||||
#ifndef SRC_PCSAMPLER_PC_SAMPLER_H_
|
||||
#define SRC_PCSAMPLER_PC_SAMPLER_H_
|
||||
|
||||
#include <thread>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <hsa/hsa.h>
|
||||
|
||||
#include "rocprofiler.h"
|
||||
#include "src/pcsampler/gfxip/gfxip.h"
|
||||
|
||||
namespace rocmtools::pc_sampler {
|
||||
|
||||
struct PCSampler {
|
||||
PCSampler(rocprofiler_buffer_id_t buffer_id, rocprofiler_filter_id_t filter_id,
|
||||
rocprofiler_session_id_t session_id);
|
||||
~PCSampler();
|
||||
|
||||
PCSampler(const PCSampler&) = delete;
|
||||
PCSampler& operator=(const PCSampler&) = delete;
|
||||
|
||||
void Start();
|
||||
void Stop();
|
||||
void AddRecord(rocprofiler_record_pc_sample_t &record);
|
||||
|
||||
private:
|
||||
void SamplerLoop();
|
||||
|
||||
rocprofiler_buffer_id_t buffer_id_;
|
||||
rocprofiler_filter_id_t filter_id_;
|
||||
rocprofiler_session_id_t session_id_;
|
||||
bool pci_system_initialized_{false};
|
||||
std::unordered_map<decltype(hsa_agent_t::handle), gfxip::device_t> devices_;
|
||||
std::atomic<bool> keep_running_{false};
|
||||
std::thread sampler_thread_;
|
||||
};
|
||||
|
||||
} // namespace rocmtools::pc_sampler
|
||||
|
||||
#endif // SRC_PCSAMPLER_PC_SAMPLER_H_
|
||||
Reference in new issue
Block a user