drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c- Extension
.c- Size
- 63732 bytes
- Lines
- 1719
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
amdgpu.hamdgpu_ras.hmmhub_v9_4.hmmhub/mmhub_9_4_1_offset.hmmhub/mmhub_9_4_1_sh_mask.hmmhub/mmhub_9_4_1_default.hathub/athub_1_0_offset.hathub/athub_1_0_sh_mask.hvega10_enum.hsoc15.hsoc15_common.h
Detected Declarations
function filesfunction mmhub_v9_4_setup_hubid_vm_pt_regsfunction mmhub_v9_4_init_gart_aperture_regsfunction mmhub_v9_4_setup_vm_pt_regsfunction mmhub_v9_4_init_system_aperture_regsfunction mmhub_v9_4_init_tlb_regsfunction mmhub_v9_4_init_snoop_override_regsfunction mmhub_v9_4_init_cache_regsfunction mmhub_v9_4_enable_system_domainfunction mmhub_v9_4_disable_identity_aperturefunction mmhub_v9_4_setup_vmid_configfunction mmhub_v9_4_program_invalidationfunction mmhub_v9_4_gart_enablefunction mmhub_v9_4_gart_disablefunction mmhub_v9_4_set_fault_enable_defaultfunction mmhub_v9_4_initfunction mmhub_v9_4_update_medium_grain_clock_gatingfunction mmhub_v9_4_update_medium_grain_light_sleepfunction mmhub_v9_4_set_clockgatingfunction mmhub_v9_4_get_clockgatingfunction mmhub_v9_4_get_ras_error_countfunction mmhub_v9_4_query_ras_error_countfunction mmhub_v9_4_reset_ras_error_countfunction mmhub_v9_4_query_ras_error_status
Annotated Snippet
if (!value) {
tmp = REG_SET_FIELD(tmp,
VML2PF0_VM_L2_PROTECTION_FAULT_CNTL,
CRASH_ON_NO_RETRY_FAULT, 1);
tmp = REG_SET_FIELD(tmp,
VML2PF0_VM_L2_PROTECTION_FAULT_CNTL,
CRASH_ON_RETRY_FAULT, 1);
}
WREG32_SOC15_OFFSET(MMHUB, 0,
mmVML2PF0_VM_L2_PROTECTION_FAULT_CNTL,
i * MMHUB_INSTANCE_REGISTER_OFFSET, tmp);
}
}
static void mmhub_v9_4_init(struct amdgpu_device *adev)
{
struct amdgpu_vmhub *hub[MMHUB_NUM_INSTANCES] = {
&adev->vmhub[AMDGPU_MMHUB0(0)], &adev->vmhub[AMDGPU_MMHUB1(0)]};
int i;
for (i = 0; i < MMHUB_NUM_INSTANCES; i++) {
hub[i]->ctx0_ptb_addr_lo32 =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->ctx0_ptb_addr_hi32 =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_inv_eng0_sem =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_INVALIDATE_ENG0_SEM) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_inv_eng0_req =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_INVALIDATE_ENG0_REQ) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_inv_eng0_ack =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_INVALIDATE_ENG0_ACK) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_context0_cntl =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2VC0_VM_CONTEXT0_CNTL) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_l2_pro_fault_status =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2PF0_VM_L2_PROTECTION_FAULT_STATUS) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->vm_l2_pro_fault_cntl =
SOC15_REG_OFFSET(MMHUB, 0,
mmVML2PF0_VM_L2_PROTECTION_FAULT_CNTL) +
i * MMHUB_INSTANCE_REGISTER_OFFSET;
hub[i]->ctx_distance = mmVML2VC0_VM_CONTEXT1_CNTL -
mmVML2VC0_VM_CONTEXT0_CNTL;
hub[i]->ctx_addr_distance = mmVML2VC0_VM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 -
mmVML2VC0_VM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32;
hub[i]->eng_distance = mmVML2VC0_VM_INVALIDATE_ENG1_REQ -
mmVML2VC0_VM_INVALIDATE_ENG0_REQ;
hub[i]->eng_addr_distance = mmVML2VC0_VM_INVALIDATE_ENG1_ADDR_RANGE_LO32 -
mmVML2VC0_VM_INVALIDATE_ENG0_ADDR_RANGE_LO32;
}
}
static void mmhub_v9_4_update_medium_grain_clock_gating(struct amdgpu_device *adev,
bool enable)
{
uint32_t def, data, def1, data1;
int i, j;
int dist = mmDAGB1_CNTL_MISC2 - mmDAGB0_CNTL_MISC2;
for (i = 0; i < MMHUB_NUM_INSTANCES; i++) {
def = data = RREG32_SOC15_OFFSET(MMHUB, 0,
mmATCL2_0_ATC_L2_MISC_CG,
i * MMHUB_INSTANCE_REGISTER_OFFSET);
if (enable && (adev->cg_flags & AMD_CG_SUPPORT_MC_MGCG))
data |= ATCL2_0_ATC_L2_MISC_CG__ENABLE_MASK;
else
data &= ~ATCL2_0_ATC_L2_MISC_CG__ENABLE_MASK;
if (def != data)
WREG32_SOC15_OFFSET(MMHUB, 0, mmATCL2_0_ATC_L2_MISC_CG,
i * MMHUB_INSTANCE_REGISTER_OFFSET, data);
for (j = 0; j < 5; j++) {
def1 = data1 = RREG32_SOC15_OFFSET(MMHUB, 0,
mmDAGB0_CNTL_MISC2,
Annotation
- Immediate include surface: `amdgpu.h`, `amdgpu_ras.h`, `mmhub_v9_4.h`, `mmhub/mmhub_9_4_1_offset.h`, `mmhub/mmhub_9_4_1_sh_mask.h`, `mmhub/mmhub_9_4_1_default.h`, `athub/athub_1_0_offset.h`, `athub/athub_1_0_sh_mask.h`.
- Detected declarations: `function files`, `function mmhub_v9_4_setup_hubid_vm_pt_regs`, `function mmhub_v9_4_init_gart_aperture_regs`, `function mmhub_v9_4_setup_vm_pt_regs`, `function mmhub_v9_4_init_system_aperture_regs`, `function mmhub_v9_4_init_tlb_regs`, `function mmhub_v9_4_init_snoop_override_regs`, `function mmhub_v9_4_init_cache_regs`, `function mmhub_v9_4_enable_system_domain`, `function mmhub_v9_4_disable_identity_aperture`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.