drivers/gpu/drm/amd/display/dc/resource/dcn42/dcn42_resource_fpu.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/resource/dcn42/dcn42_resource_fpu.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dc/resource/dcn42/dcn42_resource_fpu.c- Extension
.c- Size
- 2398 bytes
- Lines
- 70
- 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
dc.hdcn42_resource_fpu.h
Detected Declarations
function dcn42_decide_zstate_supportfunction dcn42_decide_odm_override
Annotated Snippet
// SPDX-License-Identifier: MIT
//
// Copyright 2026 Advanced Micro Devices, Inc.
#include "dc.h"
#include "dcn42_resource_fpu.h"
#define DC_LOGGER_INIT(logger)
void dcn42_decide_zstate_support(struct dc *dc, struct dc_state *context)
{
enum dcn_zstate_support_state support = DCN_ZSTATE_SUPPORT_DISALLOW;
unsigned int i, plane_count = 0;
DC_LOGGER_INIT(dc->ctx->logger);
dc_assert_fp_enabled();
for (i = 0; i < dc->res_pool->pipe_count; i++) {
if (context->res_ctx.pipe_ctx[i].plane_state)
plane_count++;
}
/*dcn42 has no z10*/
if (context->stream_count == 0 || plane_count == 0) {
support = DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY;
} else if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) {
struct dc_link *link = context->streams[0]->sink->link;
bool is_psr = (link && (link->psr_settings.psr_version == DC_PSR_VERSION_1 ||
link->psr_settings.psr_version == DC_PSR_VERSION_SU_1) && !link->panel_config.psr.disable_psr);
bool is_replay = link && link->replay_settings.replay_feature_enabled;
if (is_psr || is_replay)
support = DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY;
else {
/*here we allow z8 for eDP based on dml21 output*/
support = context->bw_ctx.bw.dcn.clk.zstate_support ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY : DCN_ZSTATE_SUPPORT_DISALLOW;
}
DC_LOG_SMU("zstate_support: %d, StutterPeriod: %d\n, z8_stutter_efficiency: %d\n",
support, (int)context->bw_ctx.bw.dcn.clk.stutter_efficiency.z8_stutter_period,
(int)context->bw_ctx.bw.dcn.clk.stutter_efficiency.z8_stutter_efficiency);
}
context->bw_ctx.bw.dcn.clk.zstate_support = support;
}
bool dcn42_decide_odm_override(struct dc *dc, struct dc_state *context)
{
bool odm_override = false;
DC_LOGGER_INIT(dc->ctx->logger);
if (dc->ctx->dce_environment == DCE_ENV_DIAG)
return false;
if (context->stream_count == 1 && context->streams[0]->signal == SIGNAL_TYPE_EDP) {
if (dc->debug.force_odm2to1_for_edp_pixclk_mhz != 0 &&
context->streams[0]->timing.pix_clk_100hz > dc->debug.force_odm2to1_for_edp_pixclk_mhz * 10000) {
odm_override = true;
context->streams[0]->debug.force_odm_combine_segments = 2;
}
DC_LOG_SMU("odm_override: %d, eDP pixelclock: %d, force_odm2to1_for_edp_pixclk_mhz: %d\n",
odm_override, context->streams[0]->timing.pix_clk_100hz / 10000, dc->debug.force_odm2to1_for_edp_pixclk_mhz);
}
return odm_override;
}
Annotation
- Immediate include surface: `dc.h`, `dcn42_resource_fpu.h`.
- Detected declarations: `function dcn42_decide_zstate_support`, `function dcn42_decide_odm_override`.
- 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.