Path: blob/master/drivers/gpu/drm/amd/include/amdgpu_reg_state.h
26517 views
/* SPDX-License-Identifier: MIT */1/*2* Copyright 2023 Advanced Micro Devices, Inc.3*4* Permission is hereby granted, free of charge, to any person obtaining a5* copy of this software and associated documentation files (the "Software"),6* to deal in the Software without restriction, including without limitation7* the rights to use, copy, modify, merge, publish, distribute, sublicense,8* and/or sell copies of the Software, and to permit persons to whom the9* Software is furnished to do so, subject to the following conditions:10*11* The above copyright notice and this permission notice shall be included in12* all copies or substantial portions of the Software.13*14* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR18* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,19* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR20* OTHER DEALINGS IN THE SOFTWARE.21*22*/2324#ifndef __AMDGPU_REG_STATE_H__25#define __AMDGPU_REG_STATE_H__2627enum amdgpu_reg_state {28AMDGPU_REG_STATE_TYPE_INVALID = 0,29AMDGPU_REG_STATE_TYPE_XGMI = 1,30AMDGPU_REG_STATE_TYPE_WAFL = 2,31AMDGPU_REG_STATE_TYPE_PCIE = 3,32AMDGPU_REG_STATE_TYPE_USR = 4,33AMDGPU_REG_STATE_TYPE_USR_1 = 534};3536enum amdgpu_sysfs_reg_offset {37AMDGPU_SYS_REG_STATE_XGMI = 0x0000,38AMDGPU_SYS_REG_STATE_WAFL = 0x1000,39AMDGPU_SYS_REG_STATE_PCIE = 0x2000,40AMDGPU_SYS_REG_STATE_USR = 0x3000,41AMDGPU_SYS_REG_STATE_USR_1 = 0x4000,42AMDGPU_SYS_REG_STATE_END = 0x5000,43};4445struct amdgpu_reg_state_header {46uint16_t structure_size;47uint8_t format_revision;48uint8_t content_revision;49uint8_t state_type;50uint8_t num_instances;51uint16_t pad;52};5354enum amdgpu_reg_inst_state {55AMDGPU_INST_S_OK,56AMDGPU_INST_S_EDISABLED,57AMDGPU_INST_S_EACCESS,58};5960struct amdgpu_smn_reg_data {61uint64_t addr;62uint32_t value;63uint32_t pad;64};6566struct amdgpu_reg_inst_header {67uint16_t instance;68uint16_t state;69uint16_t num_smn_regs;70uint16_t pad;71};727374struct amdgpu_regs_xgmi_v1_0 {75struct amdgpu_reg_inst_header inst_header;7677struct amdgpu_smn_reg_data smn_reg_values[];78};7980struct amdgpu_reg_state_xgmi_v1_0 {81/* common_header.state_type must be AMDGPU_REG_STATE_TYPE_XGMI */82struct amdgpu_reg_state_header common_header;8384struct amdgpu_regs_xgmi_v1_0 xgmi_state_regs[];85};8687struct amdgpu_regs_wafl_v1_0 {88struct amdgpu_reg_inst_header inst_header;8990struct amdgpu_smn_reg_data smn_reg_values[];91};9293struct amdgpu_reg_state_wafl_v1_0 {94/* common_header.state_type must be AMDGPU_REG_STATE_TYPE_WAFL */95struct amdgpu_reg_state_header common_header;9697struct amdgpu_regs_wafl_v1_0 wafl_state_regs[];98};99100struct amdgpu_regs_pcie_v1_0 {101struct amdgpu_reg_inst_header inst_header;102103uint16_t device_status;104uint16_t link_status;105uint32_t sub_bus_number_latency;106uint32_t pcie_corr_err_status;107uint32_t pcie_uncorr_err_status;108109struct amdgpu_smn_reg_data smn_reg_values[];110};111112struct amdgpu_reg_state_pcie_v1_0 {113/* common_header.state_type must be AMDGPU_REG_STATE_TYPE_PCIE */114struct amdgpu_reg_state_header common_header;115116struct amdgpu_regs_pcie_v1_0 pci_state_regs[];117};118119struct amdgpu_regs_usr_v1_0 {120struct amdgpu_reg_inst_header inst_header;121122struct amdgpu_smn_reg_data smn_reg_values[];123};124125struct amdgpu_reg_state_usr_v1_0 {126/* common_header.state_type must be AMDGPU_REG_STATE_TYPE_USR */127struct amdgpu_reg_state_header common_header;128129struct amdgpu_regs_usr_v1_0 usr_state_regs[];130};131132static inline size_t amdgpu_reginst_size(uint16_t num_inst, size_t inst_size,133uint16_t num_regs)134{135return num_inst *136(inst_size + num_regs * sizeof(struct amdgpu_smn_reg_data));137}138139#define amdgpu_asic_get_reg_state_supported(adev) \140(((adev)->asic_funcs && (adev)->asic_funcs->get_reg_state) ? 1 : 0)141142#define amdgpu_asic_get_reg_state(adev, state, buf, size) \143((adev)->asic_funcs->get_reg_state ? \144(adev)->asic_funcs->get_reg_state((adev), (state), (buf), \145(size)) : \1460)147148149int amdgpu_reg_state_sysfs_init(struct amdgpu_device *adev);150void amdgpu_reg_state_sysfs_fini(struct amdgpu_device *adev);151152#endif153154155