drivers/gpu/drm/amd/amdgpu/mmhub_v4_2_0.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/mmhub_v4_2_0.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/mmhub_v4_2_0.c- Extension
.c- Size
- 31853 bytes
- Lines
- 958
- 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.hmmhub_v4_2_0.hmmhub/mmhub_4_2_0_offset.hmmhub/mmhub_4_2_0_sh_mask.hsoc15_common.hsoc24_enum.h
Detected Declarations
function mmhub_v4_2_0_get_xgmi_infofunction mmhub_v4_2_0_get_fb_locationfunction mmhub_v4_2_0_get_mc_fb_offsetfunction mmhub_v4_2_0_mid_setup_vm_pt_regsfunction for_each_instfunction mmhub_v4_2_0_setup_vm_pt_regsfunction mmhub_v4_2_0_mid_init_gart_aperture_regsfunction for_each_instfunction mmhub_v4_2_0_mid_init_system_aperture_regsfunction for_each_instfunction mmhub_v4_2_0_mid_init_tlb_regsfunction for_each_instfunction mmhub_v4_2_0_mid_init_cache_regsfunction for_each_instfunction mmhub_v4_2_0_mid_enable_system_domainfunction for_each_instfunction mmhub_v4_2_0_mid_disable_identity_aperturefunction for_each_instfunction mmhub_v4_2_0_mid_setup_vmid_configfunction for_each_instfunction mmhub_v4_2_0_mid_program_invalidationfunction for_each_instfunction mmhub_v4_2_0_mid_gart_enablefunction mmhub_v4_2_0_gart_enablefunction mmhub_v4_2_0_mid_gart_disablefunction for_each_instfunction mmhub_v4_2_0_gart_disablefunction mmhub_v4_2_0_mid_set_fault_enable_defaultfunction for_each_instfunction mmhub_v4_2_0_set_fault_enable_defaultfunction mmhub_v4_2_0_get_invalidate_reqfunction mmhub_v4_2_0_print_l2_protection_fault_statusfunction mmhub_v4_2_0_mid_initfunction for_each_instfunction mmhub_v4_2_0_initfunction mmhub_v4_2_0_update_medium_grain_clock_gatingfunction mmhub_v4_2_0_update_medium_grain_light_sleepfunction mmhub_v4_2_0_set_clockgatingfunction mmhub_v4_2_0_get_clockgatingfunction mmhub_v4_2_0_xcp_resumefunction mmhub_v4_2_0_xcp_suspend
Annotated Snippet
if (adev->gmc.pdb0_bo) {
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,
(u32)(adev->gmc.fb_start >> 12));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32,
(u32)(adev->gmc.fb_start >> 44));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32,
(u32)(adev->gmc.gart_end >> 12));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32,
(u32)(adev->gmc.gart_end >> 44));
} else {
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32,
(u32)(adev->gmc.gart_start >> 12));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32,
(u32)(adev->gmc.gart_start >> 44));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32,
(u32)(adev->gmc.gart_end >> 12));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMVM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32,
(u32)(adev->gmc.gart_end >> 44));
}
}
}
static void mmhub_v4_2_0_mid_init_system_aperture_regs(struct amdgpu_device *adev,
uint32_t mid_mask)
{
uint64_t value;
uint32_t tmp;
int i;
/*
* the new L1 policy will block SRIOV guest from writing
* these regs, and they will be programed at host.
* so skip programing these regs.
*/
if (amdgpu_sriov_vf(adev))
return;
for_each_inst(i, mid_mask) {
if (adev->gmc.pdb0_bo) {
/* Disable agp and system aperture
* when vmid0 page table is enabled */
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_FB_LOCATION_TOP_LO32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_FB_LOCATION_TOP_HI32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_FB_LOCATION_BASE_LO32,
0xFFFFFFFF);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_FB_LOCATION_BASE_HI32, 1);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_TOP_LO32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_TOP_HI32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BOT_LO32,
0xFFFFFFFF);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BOT_HI32, 1);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_SYSTEM_APERTURE_LOW_ADDR_LO32,
0xFFFFFFFF);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_SYSTEM_APERTURE_LOW_ADDR_HI32,
0x7F);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_SYSTEM_APERTURE_HIGH_ADDR_LO32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_SYSTEM_APERTURE_HIGH_ADDR_HI32, 0);
} else {
/* Program the AGP BAR */
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BASE_LO32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BASE_HI32, 0);
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BOT_LO32,
lower_32_bits(adev->gmc.agp_start >> 24));
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),
regMMMC_VM_AGP_BOT_HI32,
Annotation
- Immediate include surface: `amdgpu.h`, `mmhub_v4_2_0.h`, `mmhub/mmhub_4_2_0_offset.h`, `mmhub/mmhub_4_2_0_sh_mask.h`, `soc15_common.h`, `soc24_enum.h`.
- Detected declarations: `function mmhub_v4_2_0_get_xgmi_info`, `function mmhub_v4_2_0_get_fb_location`, `function mmhub_v4_2_0_get_mc_fb_offset`, `function mmhub_v4_2_0_mid_setup_vm_pt_regs`, `function for_each_inst`, `function mmhub_v4_2_0_setup_vm_pt_regs`, `function mmhub_v4_2_0_mid_init_gart_aperture_regs`, `function for_each_inst`, `function mmhub_v4_2_0_mid_init_system_aperture_regs`, `function for_each_inst`.
- 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.