drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c- Extension
.c- Size
- 238125 bytes
- Lines
- 6168
- 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
../display_mode_lib.h../dml_inline_defs.h../display_mode_vba.hdisplay_mode_vba_21.h
Detected Declarations
function dml21_recalculatefunction dscceComputeDelayfunction dscComputeDelayfunction CalculatePrefetchSchedulefunction RoundToDFSGranularityUpfunction RoundToDFSGranularityDownfunction CalculateDCCConfigurationfunction CalculatePrefetchSourceLinesfunction CalculateVMAndRowBytesfunction DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculationfunction DisplayPipeConfigurationfunction CalculateTWaitfunction CalculateRemoteSurfaceFlipDelayfunction CalculateWriteBackDelayfunction CalculateActiveRowBandwidthfunction CalculateFlipSchedulefunction TruncToValidBPPfunction CalculatePrefetchSchedulePerPlanefunction dml21_ModeSupportAndSystemConfigurationFullfunction CalculateWatermarksAndDRAMSpeedChangeSupportfunction CalculateDCFCLKDeepSleepfunction CalculateDETBufferSizefunction CalculateUrgentBurstFactorfunction CalculatePixelDeliveryTimesfunction CalculateMetaAndPTETimesfunction CalculateExtraLatency
Annotated Snippet
if (VStartup == MaxVStartup && (PrefetchBandwidth1 > 4 * prefetch_bw_oto) && (*DestinationLinesForPrefetch - dml_ceil(Tsw_oto_lines, 1) / 4.0 - 0.75) * LineTime - *Tno_bw > 0) {
PrefetchBandwidth1 = (PDEAndMetaPTEBytesFrame * HostVMInefficiencyFactor + 2 * MetaRowByte + 2 * PixelPTEBytesPerRow * HostVMInefficiencyFactor) / ((*DestinationLinesForPrefetch - dml_ceil(Tsw_oto_lines, 1) / 4.0 - 0.75) * LineTime - *Tno_bw);
}
if (*Tno_bw + PDEAndMetaPTEBytesFrame * HostVMInefficiencyFactor / PrefetchBandwidth1 >= UrgentExtraLatency + UrgentLatency * (GPUVMPageTableLevels * (HostVMDynamicLevels + 1) - 1) && (MetaRowByte + PixelPTEBytesPerRow * HostVMInefficiencyFactor) / PrefetchBandwidth1 >= UrgentLatency * (1 + HostVMDynamicLevels)) {
*PrefetchBandwidth = PrefetchBandwidth1;
} else if (*Tno_bw + PDEAndMetaPTEBytesFrame * HostVMInefficiencyFactor / PrefetchBandwidth2 >= UrgentExtraLatency + UrgentLatency * (GPUVMPageTableLevels * (HostVMDynamicLevels + 1) - 1) && (MetaRowByte + PixelPTEBytesPerRow * HostVMInefficiencyFactor) / PrefetchBandwidth2 < UrgentLatency * (1 + HostVMDynamicLevels)) {
*PrefetchBandwidth = PrefetchBandwidth2;
} else if (*Tno_bw + PDEAndMetaPTEBytesFrame * HostVMInefficiencyFactor / PrefetchBandwidth3 < UrgentExtraLatency + UrgentLatency * (GPUVMPageTableLevels * (HostVMDynamicLevels + 1) - 1) && (MetaRowByte + PixelPTEBytesPerRow * HostVMInefficiencyFactor) / PrefetchBandwidth3 >= UrgentLatency * (1 + HostVMDynamicLevels)) {
*PrefetchBandwidth = PrefetchBandwidth3;
} else {
*PrefetchBandwidth = PrefetchBandwidth4;
}
if (GPUVMEnable) {
TimeForFetchingMetaPTE = dml_max(*Tno_bw + (double) PDEAndMetaPTEBytesFrame * HostVMInefficiencyFactor / *PrefetchBandwidth,
dml_max(UrgentExtraLatency + UrgentLatency * (GPUVMPageTableLevels * (HostVMDynamicLevels + 1) - 1), LineTime / 4));
} else {
// 5/30/2018 - This was an optimization requested from Sy but now NumberOfCursors is no longer a factor
// so if this needs to be reinstated, then it should be officially done in the VBA code as well.
// if (mode_lib->NumberOfCursors > 0 || XFCEnabled)
TimeForFetchingMetaPTE = LineTime / 4;
// else
// TimeForFetchingMetaPTE = 0.0;
}
if ((GPUVMEnable == true || DCCEnable == true)) {
TimeForFetchingRowInVBlank =
dml_max(
(MetaRowByte + PixelPTEBytesPerRow * HostVMInefficiencyFactor)
/ *PrefetchBandwidth,
dml_max(
UrgentLatency * (1 + HostVMDynamicLevels),
dml_max(
(LineTime
- TimeForFetchingMetaPTE) / 2.0,
LineTime
/ 4.0)));
} else {
// See note above dated 5/30/2018
// if (NumberOfCursors > 0 || XFCEnabled)
TimeForFetchingRowInVBlank = (LineTime - TimeForFetchingMetaPTE) / 2.0;
// else // TODO: Did someone else add this??
// TimeForFetchingRowInVBlank = 0.0;
}
*DestinationLinesToRequestVMInVBlank = dml_ceil(4.0 * TimeForFetchingMetaPTE / LineTime, 1.0) / 4.0;
*DestinationLinesToRequestRowInVBlank = dml_ceil(4.0 * TimeForFetchingRowInVBlank / LineTime, 1.0) / 4.0;
LinesToRequestPrefetchPixelData = *DestinationLinesForPrefetch
// See note above dated 5/30/2018
// - ((NumberOfCursors > 0 || GPUVMEnable || DCCEnable) ?
- ((GPUVMEnable || DCCEnable) ?
(*DestinationLinesToRequestVMInVBlank + 2 * *DestinationLinesToRequestRowInVBlank) :
0.0); // TODO: Did someone else add this??
if (LinesToRequestPrefetchPixelData > 0) {
*VRatioPrefetchY = (double) PrefetchSourceLinesY
/ LinesToRequestPrefetchPixelData;
*VRatioPrefetchY = dml_max(*VRatioPrefetchY, 1.0);
if ((SwathHeightY > 4) && (VInitPreFillY > 3)) {
if (LinesToRequestPrefetchPixelData > (VInitPreFillY - 3.0) / 2.0) {
*VRatioPrefetchY =
dml_max(
(double) PrefetchSourceLinesY
/ LinesToRequestPrefetchPixelData,
(double) MaxNumSwathY
* SwathHeightY
/ (LinesToRequestPrefetchPixelData
- (VInitPreFillY
- 3.0)
/ 2.0));
*VRatioPrefetchY = dml_max(*VRatioPrefetchY, 1.0);
} else {
MyError = true;
*VRatioPrefetchY = 0;
}
}
*VRatioPrefetchC = (double) PrefetchSourceLinesC
/ LinesToRequestPrefetchPixelData;
*VRatioPrefetchC = dml_max(*VRatioPrefetchC, 1.0);
if ((SwathHeightC > 4)) {
if (LinesToRequestPrefetchPixelData > (VInitPreFillC - 3.0) / 2.0) {
*VRatioPrefetchC =
dml_max(
*VRatioPrefetchC,
(double) MaxNumSwathC
Annotation
- Immediate include surface: `../display_mode_lib.h`, `../dml_inline_defs.h`, `../display_mode_vba.h`, `display_mode_vba_21.h`.
- Detected declarations: `function dml21_recalculate`, `function dscceComputeDelay`, `function dscComputeDelay`, `function CalculatePrefetchSchedule`, `function RoundToDFSGranularityUp`, `function RoundToDFSGranularityDown`, `function CalculateDCCConfiguration`, `function CalculatePrefetchSourceLines`, `function CalculateVMAndRowBytes`, `function DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerformanceCalculation`.
- 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.