drivers/gpu/drm/amd/amdgpu/si.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/si.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/si.c- Extension
.c- Size
- 86691 bytes
- Lines
- 2749
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/firmware.hlinux/slab.hlinux/module.hlinux/pci.hdrm/amdgpu_drm.hamdgpu.hamdgpu_atombios.hamdgpu_ih.hamdgpu_uvd.hamdgpu_vce.hatom.hamd_pcie.hsi_dpm.hsid.hsi_ih.hgfx_v6_0.hgmc_v6_0.hsi_dma.hdce_v6_0.hsi.huvd_v3_1.hvce_v1_0.huvd/uvd_4_0_d.hsmu/smu_6_0_d.hsmu/smu_6_0_sh_mask.hgca/gfx_6_0_d.hgca/gfx_6_0_sh_mask.hoss/oss_1_0_d.hoss/oss_1_0_sh_mask.hgmc/gmc_6_0_d.hdce/dce_6_0_d.hdce/dce_6_0_sh_mask.h
Detected Declarations
function si_query_video_codecsfunction si_pcie_rregfunction si_pcie_wregfunction si_pciep_rregfunction si_pciep_wregfunction si_smc_rregfunction si_smc_wregfunction si_uvd_ctx_rregfunction si_uvd_ctx_wregfunction si_get_register_valuefunction si_read_registerfunction si_read_disabled_biosfunction si_read_bios_from_romfunction si_set_clk_bypass_modefunction si_spll_powerdownfunction si_gpu_pci_config_resetfunction si_asic_supports_bacofunction si_asic_reset_methodfunction si_asic_resetfunction si_get_config_memsizefunction si_vga_set_statefunction si_get_xclkfunction si_flush_hdpfunction si_invalidate_hdpfunction si_need_full_resetfunction si_need_reset_on_initfunction si_get_pcie_lanesfunction si_set_pcie_lanesfunction si_get_pcie_usagefunction si_get_pcie_replay_countfunction si_uvd_send_upll_ctlreqfunction si_uvd_calc_upll_post_divfunction si_calc_upll_dividersfunction si_set_uvd_clocksfunction si_vce_send_vcepll_ctlreqfunction si_set_vce_clocksfunction si_get_rev_idfunction si_common_early_initfunction si_init_golden_registersfunction si_pcie_gen3_enablefunction si_pif_phy0_rregfunction si_pif_phy0_wregfunction si_pif_phy1_rregfunction si_pif_phy1_wregfunction si_program_aspmfunction si_fix_pci_max_read_req_sizefunction si_common_hw_initfunction si_common_hw_fini
Annotated Snippet
switch (reg_offset) {
case mmCC_RB_BACKEND_DISABLE:
return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable;
case mmGC_USER_RB_BACKEND_DISABLE:
return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable;
case mmPA_SC_RASTER_CONFIG:
return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config;
}
mutex_lock(&adev->grbm_idx_mutex);
if (se_num != 0xffffffff || sh_num != 0xffffffff)
amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff, 0);
val = RREG32(reg_offset);
if (se_num != 0xffffffff || sh_num != 0xffffffff)
amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff, 0);
mutex_unlock(&adev->grbm_idx_mutex);
return val;
} else {
unsigned idx;
switch (reg_offset) {
case mmGB_ADDR_CONFIG:
return adev->gfx.config.gb_addr_config;
case mmMC_ARB_RAMCFG:
return adev->gfx.config.mc_arb_ramcfg;
case mmGB_TILE_MODE0:
case mmGB_TILE_MODE1:
case mmGB_TILE_MODE2:
case mmGB_TILE_MODE3:
case mmGB_TILE_MODE4:
case mmGB_TILE_MODE5:
case mmGB_TILE_MODE6:
case mmGB_TILE_MODE7:
case mmGB_TILE_MODE8:
case mmGB_TILE_MODE9:
case mmGB_TILE_MODE10:
case mmGB_TILE_MODE11:
case mmGB_TILE_MODE12:
case mmGB_TILE_MODE13:
case mmGB_TILE_MODE14:
case mmGB_TILE_MODE15:
case mmGB_TILE_MODE16:
case mmGB_TILE_MODE17:
case mmGB_TILE_MODE18:
case mmGB_TILE_MODE19:
case mmGB_TILE_MODE20:
case mmGB_TILE_MODE21:
case mmGB_TILE_MODE22:
case mmGB_TILE_MODE23:
case mmGB_TILE_MODE24:
case mmGB_TILE_MODE25:
case mmGB_TILE_MODE26:
case mmGB_TILE_MODE27:
case mmGB_TILE_MODE28:
case mmGB_TILE_MODE29:
case mmGB_TILE_MODE30:
case mmGB_TILE_MODE31:
idx = (reg_offset - mmGB_TILE_MODE0);
return adev->gfx.config.tile_mode_array[idx];
default:
return RREG32(reg_offset);
}
}
}
static int si_read_register(struct amdgpu_device *adev, u32 se_num,
u32 sh_num, u32 reg_offset, u32 *value)
{
uint32_t i;
*value = 0;
for (i = 0; i < ARRAY_SIZE(si_allowed_read_registers); i++) {
bool indexed = si_allowed_read_registers[i].grbm_indexed;
if (reg_offset != si_allowed_read_registers[i].reg_offset)
continue;
*value = si_get_register_value(adev, indexed, se_num, sh_num,
reg_offset);
return 0;
}
return -EINVAL;
}
static bool si_read_disabled_bios(struct amdgpu_device *adev)
{
u32 bus_cntl;
u32 d1vga_control = 0;
u32 d2vga_control = 0;
Annotation
- Immediate include surface: `linux/firmware.h`, `linux/slab.h`, `linux/module.h`, `linux/pci.h`, `drm/amdgpu_drm.h`, `amdgpu.h`, `amdgpu_atombios.h`, `amdgpu_ih.h`.
- Detected declarations: `function si_query_video_codecs`, `function si_pcie_rreg`, `function si_pcie_wreg`, `function si_pciep_rreg`, `function si_pciep_wreg`, `function si_smc_rreg`, `function si_smc_wreg`, `function si_uvd_ctx_rreg`, `function si_uvd_ctx_wreg`, `function si_get_register_value`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
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.