drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c- Extension
.c- Size
- 24749 bytes
- Lines
- 874
- 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_jpeg.hamdgpu_pm.hsoc15.hsoc15d.hjpeg_v2_0.hjpeg_v4_0_5.hmmsch_v4_0.hvcn/vcn_4_0_5_offset.hvcn/vcn_4_0_5_sh_mask.hivsrcid/vcn/irqsrcs_vcn_4_0.h
Detected Declarations
function jpeg_v4_0_5_early_initfunction jpeg_v4_0_5_sw_initfunction jpeg_v4_0_5_sw_finifunction jpeg_v4_0_5_hw_initfunction jpeg_v4_0_5_hw_finifunction jpeg_v4_0_5_suspendfunction jpeg_v4_0_5_resumefunction jpeg_v4_0_5_disable_clock_gatingfunction jpeg_v4_0_5_enable_clock_gatingfunction jpeg_engine_4_0_5_dpg_clock_gating_modefunction jpeg_v4_0_5_disable_static_power_gatingfunction jpeg_v4_0_5_enable_static_power_gatingfunction jpeg_v4_0_5_start_dpg_modefunction jpeg_v4_0_5_stop_dpg_modefunction jpeg_v4_0_5_startfunction jpeg_v4_0_5_stopfunction jpeg_v4_0_5_dec_ring_get_rptrfunction jpeg_v4_0_5_dec_ring_get_wptrfunction jpeg_v4_0_5_dec_ring_set_wptrfunction jpeg_v4_0_5_is_idlefunction jpeg_v4_0_5_wait_for_idlefunction jpeg_v4_0_5_set_clockgating_statefunction jpeg_v4_0_5_set_powergating_statefunction jpeg_v4_0_5_process_interruptfunction jpeg_v4_0_5_ring_resetfunction jpeg_v4_0_5_set_dec_ring_funcsfunction jpeg_v4_0_5_set_irq_funcs
Annotated Snippet
if (!amdgpu_sriov_vf(adev)) {
if (adev->jpeg.cur_state != AMD_PG_STATE_GATE &&
RREG32_SOC15(JPEG, i, regUVD_JRBC_STATUS))
jpeg_v4_0_5_set_powergating_state(ip_block, AMD_PG_STATE_GATE);
}
}
return 0;
}
/**
* jpeg_v4_0_5_suspend - suspend JPEG block
*
* @ip_block: Pointer to the amdgpu_ip_block for this hw instance.
*
* HW fini and suspend JPEG block
*/
static int jpeg_v4_0_5_suspend(struct amdgpu_ip_block *ip_block)
{
int r;
r = jpeg_v4_0_5_hw_fini(ip_block);
if (r)
return r;
r = amdgpu_jpeg_suspend(ip_block->adev);
return r;
}
/**
* jpeg_v4_0_5_resume - resume JPEG block
*
* @ip_block: Pointer to the amdgpu_ip_block for this hw instance.
*
* Resume firmware and hw init JPEG block
*/
static int jpeg_v4_0_5_resume(struct amdgpu_ip_block *ip_block)
{
int r;
r = amdgpu_jpeg_resume(ip_block->adev);
if (r)
return r;
r = jpeg_v4_0_5_hw_init(ip_block);
return r;
}
static void jpeg_v4_0_5_disable_clock_gating(struct amdgpu_device *adev, int inst)
{
uint32_t data = 0;
data = RREG32_SOC15(JPEG, inst, regJPEG_CGC_CTRL);
if (adev->cg_flags & AMD_CG_SUPPORT_JPEG_MGCG) {
data |= 1 << JPEG_CGC_CTRL__DYN_CLOCK_MODE__SHIFT;
data &= (~JPEG_CGC_CTRL__JPEG_DEC_MODE_MASK);
} else {
data &= ~JPEG_CGC_CTRL__DYN_CLOCK_MODE__SHIFT;
}
data |= 1 << JPEG_CGC_CTRL__CLK_GATE_DLY_TIMER__SHIFT;
data |= 4 << JPEG_CGC_CTRL__CLK_OFF_DELAY__SHIFT;
WREG32_SOC15(JPEG, inst, regJPEG_CGC_CTRL, data);
data = RREG32_SOC15(JPEG, inst, regJPEG_CGC_GATE);
data &= ~(JPEG_CGC_GATE__JPEG_DEC_MASK
| JPEG_CGC_GATE__JPEG2_DEC_MASK
| JPEG_CGC_GATE__JMCIF_MASK
| JPEG_CGC_GATE__JRBBM_MASK);
WREG32_SOC15(JPEG, inst, regJPEG_CGC_GATE, data);
}
static void jpeg_v4_0_5_enable_clock_gating(struct amdgpu_device *adev, int inst)
{
uint32_t data = 0;
data = RREG32_SOC15(JPEG, inst, regJPEG_CGC_CTRL);
if (adev->cg_flags & AMD_CG_SUPPORT_JPEG_MGCG) {
data |= 1 << JPEG_CGC_CTRL__DYN_CLOCK_MODE__SHIFT;
data |= JPEG_CGC_CTRL__JPEG_DEC_MODE_MASK;
} else {
data &= ~JPEG_CGC_CTRL__DYN_CLOCK_MODE__SHIFT;
}
data |= 1 << JPEG_CGC_CTRL__CLK_GATE_DLY_TIMER__SHIFT;
data |= 4 << JPEG_CGC_CTRL__CLK_OFF_DELAY__SHIFT;
WREG32_SOC15(JPEG, inst, regJPEG_CGC_CTRL, data);
data = RREG32_SOC15(JPEG, inst, regJPEG_CGC_GATE);
Annotation
- Immediate include surface: `amdgpu.h`, `amdgpu_jpeg.h`, `amdgpu_pm.h`, `soc15.h`, `soc15d.h`, `jpeg_v2_0.h`, `jpeg_v4_0_5.h`, `mmsch_v4_0.h`.
- Detected declarations: `function jpeg_v4_0_5_early_init`, `function jpeg_v4_0_5_sw_init`, `function jpeg_v4_0_5_sw_fini`, `function jpeg_v4_0_5_hw_init`, `function jpeg_v4_0_5_hw_fini`, `function jpeg_v4_0_5_suspend`, `function jpeg_v4_0_5_resume`, `function jpeg_v4_0_5_disable_clock_gating`, `function jpeg_v4_0_5_enable_clock_gating`, `function jpeg_engine_4_0_5_dpg_clock_gating_mode`.
- 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.