Lines Matching refs:k

267 		unsigned int k,
2021 unsigned int j, k; local
2054 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2055 if (v->WritebackEnable[k]) {
2059 v->WritebackPixelFormat[k],
2060 v->PixelClock[k],
2061 v->WritebackHRatio[k],
2062 v->WritebackVRatio[k],
2063 v->WritebackHTaps[k],
2064 v->WritebackVTaps[k],
2065 v->WritebackSourceWidth[k],
2066 v->WritebackDestinationWidth[k],
2067 v->HTotal[k],
2072 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2073 if (v->HRatio[k] > 1) {
2074 v->PSCL_THROUGHPUT_LUMA[k] = dml_min(
2076 v->MaxPSCLToLBThroughput * v->HRatio[k] / dml_ceil(v->htaps[k] / 6.0, 1));
2078 v->PSCL_THROUGHPUT_LUMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
2081 v->DPPCLKUsingSingleDPPLuma = v->PixelClock[k]
2083 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
2084 dml_max(v->HRatio[k] * v->VRatio[k] / v->PSCL_THROUGHPUT_LUMA[k], 1.0));
2086 if ((v->htaps[k] > 6 || v->vtaps[k] > 6) && v->DPPCLKUsingSingleDPPLuma < 2 * v->PixelClock[k]) {
2087 v->DPPCLKUsingSingleDPPLuma = 2 * v->PixelClock[k];
2090 …if ((v->SourcePixelFormat[k] != dm_420_8 && v->SourcePixelFormat[k] != dm_420_10 && v->SourcePixel…
2091 && v->SourcePixelFormat[k] != dm_rgbe_alpha)) {
2092 v->PSCL_THROUGHPUT_CHROMA[k] = 0.0;
2093 v->DPPCLKUsingSingleDPP[k] = v->DPPCLKUsingSingleDPPLuma;
2095 if (v->HRatioChroma[k] > 1) {
2096 v->PSCL_THROUGHPUT_CHROMA[k] = dml_min(
2098 v->MaxPSCLToLBThroughput * v->HRatioChroma[k] / dml_ceil(v->HTAPsChroma[k] / 6.0, 1.0));
2100 v->PSCL_THROUGHPUT_CHROMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
2102 v->DPPCLKUsingSingleDPPChroma = v->PixelClock[k]
2104 v->VTAPsChroma[k] / 6.0 * dml_min(1.0, v->HRatioChroma[k]),
2105 v->HRatioChroma[k] * v->VRatioChroma[k] / v->PSCL_THROUGHPUT_CHROMA[k],
2108 …if ((v->HTAPsChroma[k] > 6 || v->VTAPsChroma[k] > 6) && v->DPPCLKUsingSingleDPPChroma < 2 * v->Pix…
2109 v->DPPCLKUsingSingleDPPChroma = 2 * v->PixelClock[k];
2112 v->DPPCLKUsingSingleDPP[k] = dml_max(v->DPPCLKUsingSingleDPPLuma, v->DPPCLKUsingSingleDPPChroma);
2116 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2117 if (v->BlendingAndTiming[k] != k)
2119 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1) {
2122 v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100)
2126 v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2127 } else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2130 v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100)
2134 v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2138 …v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100) * (1 + v->DISPCLKRampingMargin …
2141 v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2164 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2165 …v->DPPCLK_calculated[k] = v->DPPCLKUsingSingleDPP[k] / v->DPPPerPlane[k] * (1 + v->DISPCLKDPPCLKDS…
2166 v->GlobalDPPCLK = dml_max(v->GlobalDPPCLK, v->DPPCLK_calculated[k]);
2169 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2170 …v->DPPCLK_calculated[k] = v->GlobalDPPCLK / 255 * dml_ceil(v->DPPCLK_calculated[k] * 255.0 / v->Gl…
2171 DTRACE(" dppclk_mhz[%i] (calculated) = %f", k, v->DPPCLK_calculated[k]);
2174 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2175 v->DPPCLK[k] = v->DPPCLK_calculated[k];
2182 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2184 v->SourcePixelFormat[k],
2185 v->SurfaceTiling[k],
2186 &v->BytePerPixelY[k],
2187 &v->BytePerPixelC[k],
2188 &v->BytePerPixelDETY[k],
2189 &v->BytePerPixelDETC[k],
2190 &v->BlockHeight256BytesY[k],
2191 &v->BlockHeight256BytesC[k],
2192 &v->BlockWidth256BytesY[k],
2193 &v->BlockWidth256BytesC[k]);
2227 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2228 …v->ReadBandwidthPlaneLuma[k] = v->SwathWidthSingleDPPY[k] * v->BytePerPixelY[k] / (v->HTotal[k] / …
2229 * v->VRatio[k];
2230 …v->ReadBandwidthPlaneChroma[k] = v->SwathWidthSingleDPPC[k] * v->BytePerPixelC[k] / (v->HTotal[k] …
2231 * v->VRatioChroma[k];
2232 …DTRACE(" read_bw[%i] = %fBps", k, v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k]);
2258 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2259 if ((v->BlendingAndTiming[k] != k) || !v->DSCEnabled[k]) {
2260 v->DSCCLK_calculated[k] = 0.0;
2262 if (v->OutputFormat[k] == dm_420)
2264 else if (v->OutputFormat[k] == dm_444)
2266 else if (v->OutputFormat[k] == dm_n422)
2270 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1)
2271 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 12 / v->DSCFormatFactor
2273 else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1)
2274 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 6 / v->DSCFormatFactor
2277 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 3 / v->DSCFormatFactor
2283 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2284 double BPP = v->OutputBpp[k];
2286 if (v->DSCEnabled[k] && BPP != 0) {
2287 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_disabled) {
2288 v->DSCDelay[k] = dscceComputeDelay(
2289 v->DSCInputBitPerComponent[k],
2291 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2292 v->NumberOfDSCSlices[k],
2293 v->OutputFormat[k],
2294 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]);
2295 } else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2296 v->DSCDelay[k] = 2
2298 v->DSCInputBitPerComponent[k],
2300 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2301 v->NumberOfDSCSlices[k] / 2.0,
2302 v->OutputFormat[k],
2303 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
2305 v->DSCDelay[k] = 4
2307 v->DSCInputBitPerComponent[k],
2309 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2310 v->NumberOfDSCSlices[k] / 4.0,
2311 v->OutputFormat[k],
2312 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
2314 v->DSCDelay[k] = v->DSCDelay[k] * v->PixelClock[k] / v->PixelClockBackEnd[k];
2316 v->DSCDelay[k] = 0;
2320 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2322 if (j != k && v->BlendingAndTiming[k] == j && v->DSCEnabled[j])
2323 v->DSCDelay[k] = v->DSCDelay[j];
2326 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2336 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
2337 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
2338 …if ((v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_420_12) && v->SourceSca…
2348 v->DCCEnable[k],
2349 v->BlockHeight256BytesC[k],
2350 v->BlockWidth256BytesC[k],
2351 v->SourcePixelFormat[k],
2352 v->SurfaceTiling[k],
2353 v->BytePerPixelC[k],
2354 v->SourceScan[k],
2355 v->SwathWidthC[k],
2356 v->ViewportHeightChroma[k],
2363 v->PitchC[k],
2364 v->DCCMetaPitchC[k],
2365 &v->MacroTileWidthC[k],
2369 &v->dpte_row_width_chroma_ub[k],
2370 &v->dpte_row_height_chroma[k],
2371 &v->meta_req_width_chroma[k],
2372 &v->meta_req_height_chroma[k],
2373 &v->meta_row_width_chroma[k],
2374 &v->meta_row_height_chroma[k],
2377 &v->PixelPTEReqWidthC[k],
2378 &v->PixelPTEReqHeightC[k],
2379 &v->PTERequestSizeC[k],
2380 &v->dpde0_bytes_per_frame_ub_c[k],
2381 &v->meta_pte_bytes_per_frame_ub_c[k]);
2383 v->PrefetchSourceLinesC[k] = CalculatePrefetchSourceLines(
2385 v->VRatioChroma[k],
2386 v->VTAPsChroma[k],
2387 v->Interlace[k],
2389 v->SwathHeightC[k],
2390 v->ViewportYStartC[k],
2391 &v->VInitPreFillC[k],
2392 &v->MaxNumSwathC[k]);
2399 v->MaxNumSwathC[k] = 0;
2400 v->PrefetchSourceLinesC[k] = 0;
2405 v->DCCEnable[k],
2406 v->BlockHeight256BytesY[k],
2407 v->BlockWidth256BytesY[k],
2408 v->SourcePixelFormat[k],
2409 v->SurfaceTiling[k],
2410 v->BytePerPixelY[k],
2411 v->SourceScan[k],
2412 v->SwathWidthY[k],
2413 v->ViewportHeight[k],
2420 v->PitchY[k],
2421 v->DCCMetaPitchY[k],
2422 &v->MacroTileWidthY[k],
2426 &v->dpte_row_width_luma_ub[k],
2427 &v->dpte_row_height[k],
2428 &v->meta_req_width[k],
2429 &v->meta_req_height[k],
2430 &v->meta_row_width[k],
2431 &v->meta_row_height[k],
2432 &v->vm_group_bytes[k],
2433 &v->dpte_group_bytes[k],
2434 &v->PixelPTEReqWidthY[k],
2435 &v->PixelPTEReqHeightY[k],
2436 &v->PTERequestSizeY[k],
2437 &v->dpde0_bytes_per_frame_ub_l[k],
2438 &v->meta_pte_bytes_per_frame_ub_l[k]);
2440 v->PrefetchSourceLinesY[k] = CalculatePrefetchSourceLines(
2442 v->VRatio[k],
2443 v->vtaps[k],
2444 v->Interlace[k],
2446 v->SwathHeightY[k],
2447 v->ViewportYStartY[k],
2448 &v->VInitPreFillY[k],
2449 &v->MaxNumSwathY[k]);
2450 v->PixelPTEBytesPerRow[k] = PixelPTEBytesPerRowY + PixelPTEBytesPerRowC;
2451 v->PDEAndMetaPTEBytesFrame[k] = PDEAndMetaPTEBytesFrameY + PDEAndMetaPTEBytesFrameC;
2452 v->MetaRowByte[k] = MetaRowByteY + MetaRowByteC;
2456 v->SourcePixelFormat[k],
2457 v->VRatio[k],
2458 v->VRatioChroma[k],
2459 v->DCCEnable[k],
2460 v->HTotal[k] / v->PixelClock[k],
2463 v->meta_row_height[k],
2464 v->meta_row_height_chroma[k],
2467 v->dpte_row_height[k],
2468 v->dpte_row_height_chroma[k],
2469 &v->meta_row_bw[k],
2470 &v->dpte_row_bw[k]);
2475 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2476 v->TotalActiveDPP = v->TotalActiveDPP + v->DPPPerPlane[k];
2477 if (v->DCCEnable[k])
2478 v->TotalDCCActiveDPP = v->TotalDCCActiveDPP + v->DPPPerPlane[k];
2479 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
2480 || v->SourcePixelFormat[k] == dm_rgbe_alpha)
2533 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2534 if (v->BlendingAndTiming[k] == k) {
2535 if (v->WritebackEnable[k] == true) {
2536 v->WritebackDelay[v->VoltageLevel][k] = v->WritebackLatency
2538 v->WritebackPixelFormat[k],
2539 v->WritebackHRatio[k],
2540 v->WritebackVRatio[k],
2541 v->WritebackVTaps[k],
2542 v->WritebackDestinationWidth[k],
2543 v->WritebackDestinationHeight[k],
2544 v->WritebackSourceHeight[k],
2545 v->HTotal[k]) / v->DISPCLK;
2547 v->WritebackDelay[v->VoltageLevel][k] = 0;
2549 if (v->BlendingAndTiming[j] == k && v->WritebackEnable[j] == true) {
2550 v->WritebackDelay[v->VoltageLevel][k] = dml_max(
2551 v->WritebackDelay[v->VoltageLevel][k],
2561 v->HTotal[k]) / v->DISPCLK);
2567 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2569 if (v->BlendingAndTiming[k] == j)
2570 v->WritebackDelay[v->VoltageLevel][k] = v->WritebackDelay[v->VoltageLevel][j];
2572 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2573 v->MaxVStartupLines[k] =
2575 v->VTotal[k],
2576 v->VActive[k],
2577 v->VBlankNom[k],
2578 v->HTotal[k],
2579 v->PixelClock[k],
2581 v->Interlace[k],
2583 v->WritebackDelay[v->VoltageLevel][k]);
2586 dml_print("DML::%s: k=%d MaxVStartupLines = %d\n", __func__, k, v->MaxVStartupLines[k]);
2587 dml_print("DML::%s: k=%d VoltageLevel = %d\n", __func__, k, v->VoltageLevel);
2588 …l_print("DML::%s: k=%d WritebackDelay = %f\n", __func__, k, v->WritebackDelay[v->VoltageLevel][k]);
2593 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2594 v->MaximumMaxVStartupLines = dml_max(v->MaximumMaxVStartupLines, v->MaxVStartupLines[k]);
2624 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2627 myPipe.DPPCLK = v->DPPCLK[k];
2629 myPipe.PixelClock = v->PixelClock[k];
2631 myPipe.DPPPerPlane = v->DPPPerPlane[k];
2632 myPipe.ScalerEnabled = v->ScalerEnabled[k];
2633 myPipe.VRatio = v->VRatio[k];
2634 myPipe.VRatioChroma = v->VRatioChroma[k];
2635 myPipe.SourceScan = v->SourceScan[k];
2636 myPipe.BlockWidth256BytesY = v->BlockWidth256BytesY[k];
2637 myPipe.BlockHeight256BytesY = v->BlockHeight256BytesY[k];
2638 myPipe.BlockWidth256BytesC = v->BlockWidth256BytesC[k];
2639 myPipe.BlockHeight256BytesC = v->BlockHeight256BytesC[k];
2640 myPipe.InterlaceEnable = v->Interlace[k];
2641 myPipe.NumberOfCursors = v->NumberOfCursors[k];
2642 myPipe.VBlank = v->VTotal[k] - v->VActive[k];
2643 myPipe.HTotal = v->HTotal[k];
2644 myPipe.DCCEnable = v->DCCEnable[k];
2645 myPipe.ODMCombineIsEnabled = v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1
2646 || v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1;
2647 myPipe.SourcePixelFormat = v->SourcePixelFormat[k];
2648 myPipe.BytePerPixelY = v->BytePerPixelY[k];
2649 myPipe.BytePerPixelC = v->BytePerPixelC[k];
2651 v->ErrorResult[k] = CalculatePrefetchSchedule(
2655 v->DSCDelay[k],
2661 (unsigned int) (v->SwathWidthY[k] / v->HRatio[k]),
2662 v->OutputFormat[k],
2664 dml_min(v->VStartupLines, v->MaxVStartupLines[k]),
2665 v->MaxVStartupLines[k],
2671 v->DynamicMetadataEnable[k],
2673 v->DynamicMetadataLinesBeforeActiveRequired[k],
2674 v->DynamicMetadataTransmittedBytes[k],
2678 v->PDEAndMetaPTEBytesFrame[k],
2679 v->MetaRowByte[k],
2680 v->PixelPTEBytesPerRow[k],
2681 v->PrefetchSourceLinesY[k],
2682 v->SwathWidthY[k],
2683 v->VInitPreFillY[k],
2684 v->MaxNumSwathY[k],
2685 v->PrefetchSourceLinesC[k],
2686 v->SwathWidthC[k],
2687 v->VInitPreFillC[k],
2688 v->MaxNumSwathC[k],
2689 v->swath_width_luma_ub[k],
2690 v->swath_width_chroma_ub[k],
2691 v->SwathHeightY[k],
2692 v->SwathHeightC[k],
2694 &v->DSTXAfterScaler[k],
2695 &v->DSTYAfterScaler[k],
2696 &v->DestinationLinesForPrefetch[k],
2697 &v->PrefetchBandwidth[k],
2698 &v->DestinationLinesToRequestVMInVBlank[k],
2699 &v->DestinationLinesToRequestRowInVBlank[k],
2700 &v->VRatioPrefetchY[k],
2701 &v->VRatioPrefetchC[k],
2702 &v->RequiredPrefetchPixDataBWLuma[k],
2703 &v->RequiredPrefetchPixDataBWChroma[k],
2704 &v->NotEnoughTimeForDynamicMetadata[k],
2705 &v->Tno_bw[k],
2706 &v->prefetch_vmrow_bw[k],
2707 &v->Tdmdl_vm[k],
2708 &v->Tdmdl[k],
2709 &v->TSetup[k],
2710 &v->VUpdateOffsetPix[k],
2711 &v->VUpdateWidthPix[k],
2712 &v->VReadyOffsetPix[k]);
2715 dml_print("DML::%s: k=%0d Prefetch cal result=%0d\n", __func__, k, v->ErrorResult[k]);
2717 v->VStartup[k] = dml_min(v->VStartupLines, v->MaxVStartupLines[k]);
2723 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2724 v->cursor_bw[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
2725 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
2726 v->cursor_bw_pre[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
2727 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatioPrefetchY[k];
2730 v->swath_width_luma_ub[k],
2731 v->swath_width_chroma_ub[k],
2732 v->SwathHeightY[k],
2733 v->SwathHeightC[k],
2734 v->HTotal[k] / v->PixelClock[k],
2737 v->CursorWidth[k][0],
2738 v->CursorBPP[k][0],
2739 v->VRatio[k],
2740 v->VRatioChroma[k],
2741 v->BytePerPixelDETY[k],
2742 v->BytePerPixelDETC[k],
2743 v->DETBufferSizeY[k],
2744 v->DETBufferSizeC[k],
2745 &v->UrgBurstFactorCursor[k],
2746 &v->UrgBurstFactorLuma[k],
2747 &v->UrgBurstFactorChroma[k],
2748 &v->NoUrgentLatencyHiding[k]);
2751 v->swath_width_luma_ub[k],
2752 v->swath_width_chroma_ub[k],
2753 v->SwathHeightY[k],
2754 v->SwathHeightC[k],
2755 v->HTotal[k] / v->PixelClock[k],
2758 v->CursorWidth[k][0],
2759 v->CursorBPP[k][0],
2760 v->VRatioPrefetchY[k],
2761 v->VRatioPrefetchC[k],
2762 v->BytePerPixelDETY[k],
2763 v->BytePerPixelDETC[k],
2764 v->DETBufferSizeY[k],
2765 v->DETBufferSizeC[k],
2766 &v->UrgBurstFactorCursorPre[k],
2767 &v->UrgBurstFactorLumaPre[k],
2768 &v->UrgBurstFactorChromaPre[k],
2769 &v->NoUrgentLatencyHidingPre[k]);
2773 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2774 v->ReadBandwidthPlaneLuma[k] * v->UrgBurstFactorLuma[k]
2775 + v->ReadBandwidthPlaneChroma[k] * v->UrgBurstFactorChroma[k]
2776 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k]
2777 + v->DPPPerPlane[k] * (v->meta_row_bw[k] + v->dpte_row_bw[k]),
2778 v->DPPPerPlane[k]
2779 * (v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2780 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2781 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2785 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2786 v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k] + v->cursor_bw[k]
2787 + v->DPPPerPlane[k] * (v->meta_row_bw[k] + v->dpte_row_bw[k]),
2788 … v->DPPPerPlane[k] * (v->RequiredPrefetchPixDataBWLuma[k] + v->RequiredPrefetchPixDataBWChroma[k])
2789 + v->cursor_bw_pre[k]);
2792 dml_print("DML::%s: k=%0d DPPPerPlane=%d\n", __func__, k, v->DPPPerPlane[k]);
2793 dml_print("DML::%s: k=%0d UrgBurstFactorLuma=%f\n", __func__, k, v->UrgBurstFactorLuma[k]);
2794 dml_print("DML::%s: k=%0d UrgBurstFactorChroma=%f\n", __func__, k, v->UrgBurstFactorChroma[k]);
2795 dml_print("DML::%s: k=%0d UrgBurstFactorLumaPre=%f\n", __func__, k, v->UrgBurstFactorLumaPre[k]);
2796 …l_print("DML::%s: k=%0d UrgBurstFactorChromaPre=%f\n", __func__, k, v->UrgBurstFactorChromaPre[k]);
2798 dml_print("DML::%s: k=%0d VRatioPrefetchY=%f\n", __func__, k, v->VRatioPrefetchY[k]);
2799 dml_print("DML::%s: k=%0d VRatioY=%f\n", __func__, k, v->VRatio[k]);
2801 dml_print("DML::%s: k=%0d prefetch_vmrow_bw=%f\n", __func__, k, v->prefetch_vmrow_bw[k]);
2802 …dml_print("DML::%s: k=%0d ReadBandwidthPlaneLuma=%f\n", __func__, k, v->ReadBandwidthPlaneLuma[k]);
2803 …print("DML::%s: k=%0d ReadBandwidthPlaneChroma=%f\n", __func__, k, v->ReadBandwidthPlaneChroma[k]);
2804 dml_print("DML::%s: k=%0d cursor_bw=%f\n", __func__, k, v->cursor_bw[k]);
2805 dml_print("DML::%s: k=%0d meta_row_bw=%f\n", __func__, k, v->meta_row_bw[k]);
2806 dml_print("DML::%s: k=%0d dpte_row_bw=%f\n", __func__, k, v->dpte_row_bw[k]);
2807 …::%s: k=%0d RequiredPrefetchPixDataBWLuma=%f\n", __func__, k, v->RequiredPrefetchPixDataBWLuma[k]);
2808 …: k=%0d RequiredPrefetchPixDataBWChroma=%f\n", __func__, k, v->RequiredPrefetchPixDataBWChroma[k]);
2809 dml_print("DML::%s: k=%0d cursor_bw_pre=%f\n", __func__, k, v->cursor_bw_pre[k]);
2810 …dml_print("DML::%s: k=%0d MaxTotalRDBandwidthNoUrgentBurst=%f\n", __func__, k, MaxTotalRDBandwidth…
2813 if (v->DestinationLinesForPrefetch[k] < 2)
2816 if (v->VRatioPrefetchY[k] > 4 || v->VRatioPrefetchC[k] > 4)
2819 if (v->NoUrgentLatencyHiding[k] == true)
2822 if (v->NoUrgentLatencyHidingPre[k] == true)
2848 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2849 if (v->ErrorResult[k] == true || v->NotEnoughTimeForDynamicMetadata[k] == true) {
2857 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2860 v->ReadBandwidthPlaneLuma[k] * v->UrgBurstFactorLuma[k]
2861 + v->ReadBandwidthPlaneChroma[k] * v->UrgBurstFactorChroma[k]
2862 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k],
2863 v->DPPPerPlane[k]
2864 * (v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2865 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2866 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2870 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2872 …+ v->DPPPerPlane[k] * (v->PDEAndMetaPTEBytesFrame[k] + v->MetaRowByte[k] + v->PixelPTEBytesPerRow[
2874 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2877 k,
2881 v->PDEAndMetaPTEBytesFrame[k],
2882 v->MetaRowByte[k],
2883 v->PixelPTEBytesPerRow[k]);
2888 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2891 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2892 v->DPPPerPlane[k] * v->final_flip_bw[k]
2893 + v->ReadBandwidthLuma[k] * v->UrgBurstFactorLuma[k]
2894 + v->ReadBandwidthChroma[k] * v->UrgBurstFactorChroma[k]
2895 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k],
2896 v->DPPPerPlane[k]
2897 * (v->final_flip_bw[k]
2898 + v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2899 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2900 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2903 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2904 v->DPPPerPlane[k] * v->final_flip_bw[k] + v->ReadBandwidthPlaneLuma[k]
2905 + v->ReadBandwidthPlaneChroma[k] + v->cursor_bw[k],
2906 v->DPPPerPlane[k]
2907 * (v->final_flip_bw[k] + v->RequiredPrefetchPixDataBWLuma[k]
2908 + v->RequiredPrefetchPixDataBWChroma[k]) + v->cursor_bw_pre[k]);
2920 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2921 if (v->ImmediateFlipSupportedForPipe[k] == false) {
2923 dml_print("DML::%s: Pipe %0d not supporting iflip\n", __func__, k);
2993 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2994 if (v->WritebackEnable[k] == true) {
2995 v->WritebackAllowDRAMClockChangeEndPosition[k] = dml_max(
2997 v->VStartup[k] * v->HTotal[k] / v->PixelClock[k] - v->WritebackDRAMClockChangeWatermark);
2999 v->WritebackAllowDRAMClockChangeEndPosition[k] = 0;
3114 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3116 v->AllowDRAMClockChangeDuringVBlank[k] = true;
3117 v->AllowDRAMSelfRefreshDuringVBlank[k] = true;
3118 v->MinTTUVBlank[k] = dml_max(
3122 v->AllowDRAMClockChangeDuringVBlank[k] = false;
3123 v->AllowDRAMSelfRefreshDuringVBlank[k] = true;
3124 v->MinTTUVBlank[k] = dml_max(v->StutterEnterPlusExitWatermark, v->UrgentWatermark);
3126 v->AllowDRAMClockChangeDuringVBlank[k] = false;
3127 v->AllowDRAMSelfRefreshDuringVBlank[k] = false;
3128 v->MinTTUVBlank[k] = v->UrgentWatermark;
3130 if (!v->DynamicMetadataEnable[k])
3131 v->MinTTUVBlank[k] = v->TCalc + v->MinTTUVBlank[k];
3136 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3137 …CalculateDCCConfiguration(v->DCCEnable[k], false, // We should always know the direction DCCProgra…
3138 v->SourcePixelFormat[k],
3139 v->SurfaceWidthY[k],
3140 v->SurfaceWidthC[k],
3141 v->SurfaceHeightY[k],
3142 v->SurfaceHeightC[k],
3144 v->BlockHeight256BytesY[k],
3145 v->BlockHeight256BytesC[k],
3146 v->SurfaceTiling[k],
3147 v->BytePerPixelY[k],
3148 v->BytePerPixelC[k],
3149 v->BytePerPixelDETY[k],
3150 v->BytePerPixelDETC[k],
3151 v->SourceScan[k],
3152 &v->DCCYMaxUncompressedBlock[k],
3153 &v->DCCCMaxUncompressedBlock[k],
3154 &v->DCCYMaxCompressedBlock[k],
3155 &v->DCCCMaxCompressedBlock[k],
3156 &v->DCCYIndependentBlock[k],
3157 &v->DCCCIndependentBlock[k]);
3161 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3163 …double Tvstartup_margin = (v->MaxVStartupLines[k] - v->VStartup[k]) * v->HTotal[k] / v->PixelClock…
3165 dml_print("DML::%s: k=%d, MinTTUVBlank = %f (before margin)\n", __func__, k, v->MinTTUVBlank[k]);
3168 v->MinTTUVBlank[k] = v->MinTTUVBlank[k] + Tvstartup_margin;
3171 dml_print("DML::%s: k=%d, Tvstartup_margin = %f\n", __func__, k, Tvstartup_margin);
3172 dml_print("DML::%s: k=%d, MaxVStartupLines = %d\n", __func__, k, v->MaxVStartupLines[k]);
3173 dml_print("DML::%s: k=%d, VStartup = %d\n", __func__, k, v->VStartup[k]);
3174 dml_print("DML::%s: k=%d, MinTTUVBlank = %f\n", __func__, k, v->MinTTUVBlank[k]);
3177 v->Tdmdl[k] = v->Tdmdl[k] + Tvstartup_margin;
3178 if (v->DynamicMetadataEnable[k] && v->DynamicMetadataVMEnabled) {
3179 v->Tdmdl_vm[k] = v->Tdmdl_vm[k] + Tvstartup_margin;
3182 isInterlaceTiming = (v->Interlace[k] && !v->ProgressiveToInterlaceUnitInOPP);
3183 v->VStartup[k] = (isInterlaceTiming ? (2 * v->MaxVStartupLines[k]) : v->MaxVStartupLines[k]);
3184 if (v->Interlace[k] && !v->ProgressiveToInterlaceUnitInOPP) {
3185 …v->MIN_DST_Y_NEXT_START[k] = dml_floor((v->VTotal[k] - v->VFrontPorch[k] + v->VTotal[k] - v->VActi…
3187 …v->MIN_DST_Y_NEXT_START[k] = v->VTotal[k] - v->VFrontPorch[k] + v->VTotal[k] - v->VActive[k] - v->…
3189 …v->MIN_DST_Y_NEXT_START[k] += dml_floor(4.0 * v->TSetup[k] / ((double)v->HTotal[k] / v->PixelClock…
3190 if (((v->VUpdateOffsetPix[k] + v->VUpdateWidthPix[k] + v->VReadyOffsetPix[k]) / v->HTotal[k])
3192 dml_floor((v->VTotal[k] - v->VActive[k] - v->VFrontPorch[k] - v->VStartup[k]) / 2.0, 1.0) :
3193 (int) (v->VTotal[k] - v->VActive[k] - v->VFrontPorch[k] - v->VStartup[k]))) {
3194 v->VREADY_AT_OR_AFTER_VSYNC[k] = true;
3196 v->VREADY_AT_OR_AFTER_VSYNC[k] = false;
3199 dml_print("DML::%s: k=%d, VStartup = %d (max)\n", __func__, k, v->VStartup[k]);
3200 dml_print("DML::%s: k=%d, VUpdateOffsetPix = %d\n", __func__, k, v->VUpdateOffsetPix[k]);
3201 dml_print("DML::%s: k=%d, VUpdateWidthPix = %d\n", __func__, k, v->VUpdateWidthPix[k]);
3202 dml_print("DML::%s: k=%d, VReadyOffsetPix = %d\n", __func__, k, v->VReadyOffsetPix[k]);
3203 dml_print("DML::%s: k=%d, HTotal = %d\n", __func__, k, v->HTotal[k]);
3204 dml_print("DML::%s: k=%d, VTotal = %d\n", __func__, k, v->VTotal[k]);
3205 dml_print("DML::%s: k=%d, VActive = %d\n", __func__, k, v->VActive[k]);
3206 dml_print("DML::%s: k=%d, VFrontPorch = %d\n", __func__, k, v->VFrontPorch[k]);
3207 dml_print("DML::%s: k=%d, VStartup = %d\n", __func__, k, v->VStartup[k]);
3208 dml_print("DML::%s: k=%d, MIN_DST_Y_NEXT_START = %f\n", __func__, k, v->MIN_DST_Y_NEXT_START[k]);
3209 …int("DML::%s: k=%d, VREADY_AT_OR_AFTER_VSYNC = %d\n", __func__, k, v->VREADY_AT_OR_AFTER_VSYNC[k]);
3219 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3220 if (v->WritebackEnable[k] == true && v->WritebackPixelFormat[k] == dm_444_32) {
3221 WRBandwidth = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3222 / (v->HTotal[k] * v->WritebackSourceHeight[k] / v->PixelClock[k]) * 4;
3223 } else if (v->WritebackEnable[k] == true) {
3224 WRBandwidth = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3225 / (v->HTotal[k] * v->WritebackSourceHeight[k] / v->PixelClock[k]) * 8;
3232 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3233 …dwidth = v->TotalDataReadBandwidth + v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k];
3318 unsigned int k; local
3320 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3323 v->SourcePixelFormat[k],
3324 v->SurfaceTiling[k],
3325 &BytePerPixY[k],
3326 &BytePerPixC[k],
3327 &BytePerPixDETY[k],
3328 &BytePerPixDETC[k],
3329 &Read256BytesBlockHeightY[k],
3330 &Read256BytesBlockHeightC[k],
3331 &Read256BytesBlockWidthY[k],
3332 &Read256BytesBlockWidthC[k]);
3603 unsigned int k, argument
3617 double LineTime = v->HTotal[k] / v->PixelClock[k];
3625 if (v->GPUVMEnable == true || v->DCCEnable[k] == true) {
3631 v->Tno_bw[k] + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
3638 …v->DestinationLinesToRequestVMInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediate…
3639 if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
3648 …v->DestinationLinesToRequestRowInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImme…
3651 v->final_flip_bw[k] = dml_max(
3652 …erFrame * HostVMInefficiencyFactor / (v->DestinationLinesToRequestVMInImmediateFlip[k] * LineTime),
3653 …rRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime));
3654 } else if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
3655 …v->final_flip_bw[k] = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->Destinatio…
3657 v->final_flip_bw[k] = 0;
3660 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
3661 if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
3662 …me = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->dpte_row_height_chroma[k] * LineT…
3663 } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
3664 …me = dml_min(v->meta_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height_chroma[k] * LineT…
3667 v->dpte_row_height[k] * LineTime / v->VRatio[k],
3668 v->meta_row_height[k] * LineTime / v->VRatio[k],
3669 v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k],
3670 v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
3673 if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
3674 min_row_time = v->dpte_row_height[k] * LineTime / v->VRatio[k];
3675 } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
3676 min_row_time = v->meta_row_height[k] * LineTime / v->VRatio[k];
3678 …row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height[k] * LineTi…
3682 …v->DestinationLinesToRequestVMInImmediateFlip[k] >= 32 || v->DestinationLinesToRequestRowInImmedia…
3684 v->ImmediateFlipSupportedForPipe[k] = false;
3686 v->ImmediateFlipSupportedForPipe[k] = true;
3690 …nesToRequestVMInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestVMInImmediateFlip[k]);
3691 …sToRequestRowInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestRowInImmediateFlip[k]);
3695 …nt("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, v->ImmediateFlipSupportedForPipe[k]);
3798 unsigned int k) argument
3803 myPipe.DPPCLK = v->RequiredDPPCLK[i][j][k];
3805 myPipe.PixelClock = v->PixelClock[k];
3807 myPipe.DPPPerPlane = v->NoOfDPP[i][j][k];
3808 myPipe.ScalerEnabled = v->ScalerEnabled[k];
3809 myPipe.VRatio = mode_lib->vba.VRatio[k];
3810 myPipe.VRatioChroma = mode_lib->vba.VRatioChroma[k];
3812 myPipe.SourceScan = v->SourceScan[k];
3813 myPipe.BlockWidth256BytesY = v->Read256BlockWidthY[k];
3814 myPipe.BlockHeight256BytesY = v->Read256BlockHeightY[k];
3815 myPipe.BlockWidth256BytesC = v->Read256BlockWidthC[k];
3816 myPipe.BlockHeight256BytesC = v->Read256BlockHeightC[k];
3817 myPipe.InterlaceEnable = v->Interlace[k];
3818 myPipe.NumberOfCursors = v->NumberOfCursors[k];
3819 myPipe.VBlank = v->VTotal[k] - v->VActive[k];
3820 myPipe.HTotal = v->HTotal[k];
3821 myPipe.DCCEnable = v->DCCEnable[k];
3822 myPipe.ODMCombineIsEnabled = v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1
3823 || v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1;
3824 myPipe.SourcePixelFormat = v->SourcePixelFormat[k];
3825 myPipe.BytePerPixelY = v->BytePerPixelY[k];
3826 myPipe.BytePerPixelC = v->BytePerPixelC[k];
3828 v->NoTimeForPrefetch[i][j][k] = CalculatePrefetchSchedule(
3832 v->DSCDelayPerState[i][k],
3838 v->SwathWidthYThisState[k] / v->HRatio[k],
3839 v->OutputFormat[k],
3841 dml_min(v->MaxVStartup, v->MaximumVStartup[i][j][k]),
3842 v->MaximumVStartup[i][j][k],
3848 v->DynamicMetadataEnable[k],
3850 v->DynamicMetadataLinesBeforeActiveRequired[k],
3851 v->DynamicMetadataTransmittedBytes[k],
3855 v->PDEAndMetaPTEBytesPerFrame[i][j][k],
3856 v->MetaRowBytes[i][j][k],
3857 v->DPTEBytesPerRow[i][j][k],
3858 v->PrefetchLinesY[i][j][k],
3859 v->SwathWidthYThisState[k],
3860 v->PrefillY[k],
3861 v->MaxNumSwY[k],
3862 v->PrefetchLinesC[i][j][k],
3863 v->SwathWidthCThisState[k],
3864 v->PrefillC[k],
3865 v->MaxNumSwC[k],
3866 v->swath_width_luma_ub_this_state[k],
3867 v->swath_width_chroma_ub_this_state[k],
3868 v->SwathHeightYThisState[k],
3869 v->SwathHeightCThisState[k],
3871 &v->DSTXAfterScaler[k],
3872 &v->DSTYAfterScaler[k],
3873 &v->LineTimesForPrefetch[k],
3874 &v->PrefetchBW[k],
3875 &v->LinesForMetaPTE[k],
3876 &v->LinesForMetaAndDPTERow[k],
3877 &v->VRatioPreY[i][j][k],
3878 &v->VRatioPreC[i][j][k],
3879 &v->RequiredPrefetchPixelDataBWLuma[i][j][k],
3880 &v->RequiredPrefetchPixelDataBWChroma[i][j][k],
3881 &v->NoTimeForDynamicMetadata[i][j][k],
3882 &v->Tno_bw[k],
3883 &v->prefetch_vmrow_bw[k],
3884 &v->dummy7[k],
3885 &v->dummy8[k],
3886 &v->dummy13[k],
3887 &v->VUpdateOffsetPix[k],
3888 &v->VUpdateWidthPix[k],
3889 &v->VReadyOffsetPix[k]);
3897 unsigned int k, m; local
3918 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3919 if (v->ScalerEnabled[k] == false
3920 && ((v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
3921 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_mono_16
3922 && v->SourcePixelFormat[k] != dm_mono_8 && v->SourcePixelFormat[k] != dm_rgbe
3923 && v->SourcePixelFormat[k] != dm_rgbe_alpha) || v->HRatio[k] != 1.0 || v->htaps[k] != 1.0
3924 || v->VRatio[k] != 1.0 || v->vtaps[k] != 1.0)) {
3926 } else if (v->vtaps[k] < 1.0 || v->vtaps[k] > 8.0 || v->htaps[k] < 1.0 || v->htaps[k] > 8.0
3927 || (v->htaps[k] > 1.0 && (v->htaps[k] % 2) == 1) || v->HRatio[k] > v->MaxHSCLRatio
3928 || v->VRatio[k] > v->MaxVSCLRatio || v->HRatio[k] > v->htaps[k]
3929 || v->VRatio[k] > v->vtaps[k]
3930 || (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
3931 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_mono_16
3932 && v->SourcePixelFormat[k] != dm_mono_8 && v->SourcePixelFormat[k] != dm_rgbe
3933 && (v->VTAPsChroma[k] < 1 || v->VTAPsChroma[k] > 8 || v->HTAPsChroma[k] < 1
3934 || v->HTAPsChroma[k] > 8 || (v->HTAPsChroma[k] > 1 && v->HTAPsChroma[k] % 2 == 1)
3935 || v->HRatioChroma[k] > v->MaxHSCLRatio
3936 || v->VRatioChroma[k] > v->MaxVSCLRatio
3937 || v->HRatioChroma[k] > v->HTAPsChroma[k]
3938 || v->VRatioChroma[k] > v->VTAPsChroma[k]))) {
3945 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3946 …if (v->SurfaceTiling[k] == dm_sw_linear && (!(v->SourceScan[k] != dm_vert) || v->DCCEnable[k] == t…
3952 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3954 v->SourcePixelFormat[k],
3955 v->SurfaceTiling[k],
3956 &v->BytePerPixelY[k],
3957 &v->BytePerPixelC[k],
3958 &v->BytePerPixelInDETY[k],
3959 &v->BytePerPixelInDETC[k],
3960 &v->Read256BlockHeightY[k],
3961 &v->Read256BlockHeightC[k],
3962 &v->Read256BlockWidthY[k],
3963 &v->Read256BlockWidthC[k]);
3965 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3966 if (v->SourceScan[k] != dm_vert) {
3967 v->SwathWidthYSingleDPP[k] = v->ViewportWidth[k];
3968 v->SwathWidthCSingleDPP[k] = v->ViewportWidthChroma[k];
3970 v->SwathWidthYSingleDPP[k] = v->ViewportHeight[k];
3971 v->SwathWidthCSingleDPP[k] = v->ViewportHeightChroma[k];
3974 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3975 v->ReadBandwidthLuma[k] = v->SwathWidthYSingleDPP[k] * dml_ceil(v->BytePerPixelInDETY[k], 1.0)
3976 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
3977 …v->ReadBandwidthChroma[k] = v->SwathWidthYSingleDPP[k] / 2 * dml_ceil(v->BytePerPixelInDETC[k], 2.…
3978 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k] / 2.0;
3980 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3981 if (v->WritebackEnable[k] == true && v->WritebackPixelFormat[k] == dm_444_64) {
3982 v->WriteBandwidth[k] = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3983 / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 8.0;
3984 } else if (v->WritebackEnable[k] == true) {
3985 v->WriteBandwidth[k] = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3986 / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4.0;
3988 v->WriteBandwidth[k] = 0.0;
3995 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3996 …if (v->WritebackEnable[k] == true && (v->WriteBandwidth[k] > v->WritebackInterfaceBufferSize * 102…
4004 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4005 if (v->WritebackEnable[k] == true) {
4017 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4018 if (v->WritebackEnable[k] == true) {
4019 …if (v->WritebackHRatio[k] > v->WritebackMaxHSCLRatio || v->WritebackVRatio[k] > v->WritebackMaxVSC…
4020 || v->WritebackHRatio[k] < v->WritebackMinHSCLRatio
4021 || v->WritebackVRatio[k] < v->WritebackMinVSCLRatio
4022 || v->WritebackHTaps[k] > v->WritebackMaxHSCLTaps
4023 || v->WritebackVTaps[k] > v->WritebackMaxVSCLTaps
4024 || v->WritebackHRatio[k] > v->WritebackHTaps[k] || v->WritebackVRatio[k] > v->WritebackVTaps[k]
4025 || (v->WritebackHTaps[k] > 2.0 && ((v->WritebackHTaps[k] % 2) == 1))) {
4028 …if (2.0 * v->WritebackDestinationWidth[k] * (v->WritebackVTaps[k] - 1) * 57 > v->WritebackLineBuff…
4036 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4037 if (v->WritebackEnable[k] == true) {
4041 v->WritebackPixelFormat[k],
4042 v->PixelClock[k],
4043 v->WritebackHRatio[k],
4044 v->WritebackVRatio[k],
4045 v->WritebackHTaps[k],
4046 v->WritebackVTaps[k],
4047 v->WritebackSourceWidth[k],
4048 v->WritebackDestinationWidth[k],
4049 v->HTotal[k],
4053 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4054 if (v->HRatio[k] > 1.0) {
4055 v->PSCL_FACTOR[k] = dml_min(
4057 v->MaxPSCLToLBThroughput * v->HRatio[k] / dml_ceil(v->htaps[k] / 6.0, 1.0));
4059 v->PSCL_FACTOR[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
4061 if (v->BytePerPixelC[k] == 0.0) {
4062 v->PSCL_FACTOR_CHROMA[k] = 0.0;
4063 v->MinDPPCLKUsingSingleDPP[k] = v->PixelClock[k]
4065 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
4066 v->HRatio[k] * v->VRatio[k] / v->PSCL_FACTOR[k],
4068 …if ((v->htaps[k] > 6.0 || v->vtaps[k] > 6.0) && v->MinDPPCLKUsingSingleDPP[k] < 2.0 * v->PixelCloc…
4069 v->MinDPPCLKUsingSingleDPP[k] = 2.0 * v->PixelClock[k];
4072 if (v->HRatioChroma[k] > 1.0) {
4073 v->PSCL_FACTOR_CHROMA[k] = dml_min(
4075 v->MaxPSCLToLBThroughput * v->HRatioChroma[k] / dml_ceil(v->HTAPsChroma[k] / 6.0, 1.0));
4077 v->PSCL_FACTOR_CHROMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
4079 v->MinDPPCLKUsingSingleDPP[k] = v->PixelClock[k]
4081 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
4082 v->HRatio[k] * v->VRatio[k] / v->PSCL_FACTOR[k],
4083 v->VTAPsChroma[k] / 6.0 * dml_min(1.0, v->HRatioChroma[k]),
4084 v->HRatioChroma[k] * v->VRatioChroma[k] / v->PSCL_FACTOR_CHROMA[k],
4086 … if ((v->htaps[k] > 6.0 || v->vtaps[k] > 6.0 || v->HTAPsChroma[k] > 6.0 || v->VTAPsChroma[k] > 6.0)
4087 && v->MinDPPCLKUsingSingleDPP[k] < 2.0 * v->PixelClock[k]) {
4088 v->MinDPPCLKUsingSingleDPP[k] = 2.0 * v->PixelClock[k];
4092 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4096 if (v->SurfaceTiling[k] == dm_sw_linear) {
4098 } else if (v->SourceScan[k] == dm_vert && v->BytePerPixelC[k] > 0) {
4100 } else if (v->SourcePixelFormat[k] == dm_rgbe_alpha) {
4106 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
4111 …umSwathWidthInLineBufferLuma = v->LineBufferSize * dml_max(v->HRatio[k], 1.0) / v->LBBitPerPixel[k]
4112 / (v->vtaps[k] + dml_max(dml_ceil(v->VRatio[k], 1.0) - 2, 0.0));
4113 if (v->BytePerPixelC[k] == 0.0) {
4116 …idthInLineBufferChroma = v->LineBufferSize * dml_max(v->HRatioChroma[k], 1.0) / v->LBBitPerPixel[k]
4117 / (v->VTAPsChroma[k] + dml_max(dml_ceil(v->VRatioChroma[k], 1.0) - 2, 0.0));
4119 …v->MaximumSwathWidthLuma[k] = dml_min(MaximumSwathWidthSupportLuma, v->MaximumSwathWidthInLineBuff…
4120 …v->MaximumSwathWidthChroma[k] = dml_min(MaximumSwathWidthSupportChroma, v->MaximumSwathWidthInLine…
4169 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4170 …v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpr…
4175 v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k]
4178 …v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDown…
4183 v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2
4186 …v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDown…
4191 v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4
4196 || !(v->Output[k] == dm_dp ||
4197 v->Output[k] == dm_dp2p0 ||
4198 v->Output[k] == dm_edp)) {
4199 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4202 if (v->HActive[k] / 2 > DCN314_MAX_FMT_420_BUFFER_WIDTH)
4205 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4209 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4212 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4215 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4218 if (v->DSCEnabled[k] && v->HActive[k] > DCN314_MAX_DSC_IMAGE_WIDTH
4219 && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) {
4220 if (v->HActive[k] / 2 > DCN314_MAX_DSC_IMAGE_WIDTH) {
4221 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4224 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4228 if (v->OutputFormat[k] == dm_420 && v->HActive[k] > DCN314_MAX_FMT_420_BUFFER_WIDTH
4229 && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) {
4230 if (v->Output[k] == dm_hdmi) {
4232 } else if (v->HActive[k] / 2 > DCN314_MAX_FMT_420_BUFFER_WIDTH) {
4233 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4236 if (v->HActive[k] / 4 > DCN314_MAX_FMT_420_BUFFER_WIDTH)
4239 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4243 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1) {
4244 v->MPCCombine[i][j][k] = false;
4245 v->NoOfDPP[i][j][k] = 4;
4246 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4247 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4248 v->MPCCombine[i][j][k] = false;
4249 v->NoOfDPP[i][j][k] = 2;
4250 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4252 || (v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4253 …<= v->MaxDppclkRoundedDownToDFSGranularity && v->SingleDPPViewportSizeSupportPerPlane[k] == true))…
4254 v->MPCCombine[i][j][k] = false;
4255 v->NoOfDPP[i][j][k] = 1;
4256 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpre…
4258 v->MPCCombine[i][j][k] = true;
4259 v->NoOfDPP[i][j][k] = 2;
4260 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpre…
4263 …if ((v->MinDPPCLKUsingSingleDPP[k] / v->NoOfDPP[i][j][k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4271 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4272 v->TotalNumberOfActiveDPP[i][j] = v->TotalNumberOfActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4273 if (v->NoOfDPP[i][j][k] == 1)
4275 if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10
4276 || v->SourcePixelFormat[k] == dm_420_12 || v->SourcePixelFormat[k] == dm_rgbe_alpha)
4289 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4290 if (v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k] > BWOfNonSplitPlaneOfMaximumBandwidth
4291 …&& v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_disabled && v->MPCCombine[i][j][k] == …
4292 BWOfNonSplitPlaneOfMaximumBandwidth = v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k];
4293 NumberOfNonSplitPlaneOfMaximumBandwidth = k;
4308 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4309 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4310 …if (v->SingleDPPViewportSizeSupportPerPlane[k] == false && v->WhenToDoMPCCombine != dm_mpc_never) {
4311 v->MPCCombine[i][j][k] = true;
4312 v->NoOfDPP[i][j][k] = 2;
4313 v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k]
4316 v->MPCCombine[i][j][k] = false;
4317 v->NoOfDPP[i][j][k] = 1;
4318 v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k]
4323 … v->PlaneRequiredDISPCLK = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4326 … v->PlaneRequiredDISPCLK = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
4329 …if ((v->MinDPPCLKUsingSingleDPP[k] / v->NoOfDPP[i][j][k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4336 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4337 v->TotalNumberOfActiveDPP[i][j] = v->TotalNumberOfActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4361 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4362 …if (!(v->DSCInputBitPerComponent[k] == 12.0 || v->DSCInputBitPerComponent[k] == 10.0 || v->DSCInpu…
4363 || v->DSCInputBitPerComponent[k] > v->MaximumDSCBitsPerComponent) {
4369 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4370 if (v->BlendingAndTiming[k] == k) {
4371 if (v->PixelClockBackEnd[k] > 3200) {
4372 v->NumberOfDSCSlices[k] = dml_ceil(v->PixelClockBackEnd[k] / 400.0, 4.0);
4373 } else if (v->PixelClockBackEnd[k] > 1360) {
4374 v->NumberOfDSCSlices[k] = 8;
4375 } else if (v->PixelClockBackEnd[k] > 680) {
4376 v->NumberOfDSCSlices[k] = 4;
4377 } else if (v->PixelClockBackEnd[k] > 340) {
4378 v->NumberOfDSCSlices[k] = 2;
4380 v->NumberOfDSCSlices[k] = 1;
4383 v->NumberOfDSCSlices[k] = 0;
4388 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4389 v->RequiresDSC[i][k] = false;
4390 v->RequiresFEC[i][k] = false;
4391 if (v->BlendingAndTiming[k] == k) {
4392 if (v->Output[k] == dm_hdmi) {
4393 v->RequiresDSC[i][k] = false;
4394 v->RequiresFEC[i][k] = false;
4395 v->OutputBppPerState[i][k] = TruncToValidBPP(
4398 v->HTotal[k],
4399 v->HActive[k],
4400 v->PixelClockBackEnd[k],
4401 v->ForcedOutputLinkBPP[k],
4403 v->Output[k],
4404 v->OutputFormat[k],
4405 v->DSCInputBitPerComponent[k],
4406 v->NumberOfDSCSlices[k],
4407 v->AudioSampleRate[k],
4408 v->AudioSampleLayout[k],
4409 v->ODMCombineEnablePerState[i][k]);
4410 } else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp || v->Output[k] == dm_dp2p0) {
4411 if (v->DSCEnable[k] == true) {
4412 v->RequiresDSC[i][k] = true;
4414 if (v->Output[k] == dm_dp || v->Output[k] == dm_dp2p0) {
4415 v->RequiresFEC[i][k] = true;
4417 v->RequiresFEC[i][k] = false;
4420 v->RequiresDSC[i][k] = false;
4422 if (v->Output[k] == dm_dp2p0) {
4423 v->RequiresFEC[i][k] = true;
4425 v->RequiresFEC[i][k] = false;
4428 if (v->Output[k] == dm_dp2p0) {
4430 … if ((v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr10) &&
4431 v->PHYCLKD18PerState[k] >= 10000.0 / 18.0) {
4434 v->OutputLinkDPLanes[k],
4435 v->HTotal[k],
4436 v->HActive[k],
4437 v->PixelClockBackEnd[k],
4438 v->ForcedOutputLinkBPP[k],
4440 v->Output[k],
4441 v->OutputFormat[k],
4442 v->DSCInputBitPerComponent[k],
4443 v->NumberOfDSCSlices[k],
4444 v->AudioSampleRate[k],
4445 v->AudioSampleLayout[k],
4446 v->ODMCombineEnablePerState[i][k]);
4447 if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 13500.0 / 18.0 &&
4448 v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
4449 v->RequiresDSC[i][k] = true;
4453 v->OutputLinkDPLanes[k],
4454 v->HTotal[k],
4455 v->HActive[k],
4456 v->PixelClockBackEnd[k],
4457 v->ForcedOutputLinkBPP[k],
4459 v->Output[k],
4460 v->OutputFormat[k],
4461 v->DSCInputBitPerComponent[k],
4462 v->NumberOfDSCSlices[k],
4463 v->AudioSampleRate[k],
4464 v->AudioSampleLayout[k],
4465 v->ODMCombineEnablePerState[i][k]);
4467 v->OutputBppPerState[i][k] = v->Outbpp;
4472 (v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr13p5) &&
4473 v->PHYCLKD18PerState[k] >= 13500.0 / 18.0) {
4476 v->OutputLinkDPLanes[k],
4477 v->HTotal[k],
4478 v->HActive[k],
4479 v->PixelClockBackEnd[k],
4480 v->ForcedOutputLinkBPP[k],
4482 v->Output[k],
4483 v->OutputFormat[k],
4484 v->DSCInputBitPerComponent[k],
4485 v->NumberOfDSCSlices[k],
4486 v->AudioSampleRate[k],
4487 v->AudioSampleLayout[k],
4488 v->ODMCombineEnablePerState[i][k]);
4489 if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 20000.0 / 18.0 &&
4490 v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
4491 v->RequiresDSC[i][k] = true;
4495 v->OutputLinkDPLanes[k],
4496 v->HTotal[k],
4497 v->HActive[k],
4498 v->PixelClockBackEnd[k],
4499 v->ForcedOutputLinkBPP[k],
4501 v->Output[k],
4502 v->OutputFormat[k],
4503 v->DSCInputBitPerComponent[k],
4504 v->NumberOfDSCSlices[k],
4505 v->AudioSampleRate[k],
4506 v->AudioSampleLayout[k],
4507 v->ODMCombineEnablePerState[i][k]);
4509 v->OutputBppPerState[i][k] = v->Outbpp;
4514 (v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr20) &&
4515 v->PHYCLKD18PerState[k] >= 20000.0 / 18.0) {
4518 v->OutputLinkDPLanes[k],
4519 v->HTotal[k],
4520 v->HActive[k],
4521 v->PixelClockBackEnd[k],
4522 v->ForcedOutputLinkBPP[k],
4524 v->Output[k],
4525 v->OutputFormat[k],
4526 v->DSCInputBitPerComponent[k],
4527 v->NumberOfDSCSlices[k],
4528 v->AudioSampleRate[k],
4529 v->AudioSampleLayout[k],
4530 v->ODMCombineEnablePerState[i][k]);
4531 if (v->Outbpp == BPP_INVALID && v->DSCEnable[k] == true &&
4532 v->ForcedOutputLinkBPP[k] == 0) {
4533 v->RequiresDSC[i][k] = true;
4537 v->OutputLinkDPLanes[k],
4538 v->HTotal[k],
4539 v->HActive[k],
4540 v->PixelClockBackEnd[k],
4541 v->ForcedOutputLinkBPP[k],
4543 v->Output[k],
4544 v->OutputFormat[k],
4545 v->DSCInputBitPerComponent[k],
4546 v->NumberOfDSCSlices[k],
4547 v->AudioSampleRate[k],
4548 v->AudioSampleLayout[k],
4549 v->ODMCombineEnablePerState[i][k]);
4551 v->OutputBppPerState[i][k] = v->Outbpp;
4560 v->OutputLinkDPLanes[k],
4561 v->HTotal[k],
4562 v->HActive[k],
4563 v->PixelClockBackEnd[k],
4564 v->ForcedOutputLinkBPP[k],
4566 v->Output[k],
4567 v->OutputFormat[k],
4568 v->DSCInputBitPerComponent[k],
4569 v->NumberOfDSCSlices[k],
4570 v->AudioSampleRate[k],
4571 v->AudioSampleLayout[k],
4572 v->ODMCombineEnablePerState[i][k]);
4573 v->OutputBppPerState[i][k] = v->Outbpp;
4580 v->OutputLinkDPLanes[k],
4581 v->HTotal[k],
4582 v->HActive[k],
4583 v->PixelClockBackEnd[k],
4584 v->ForcedOutputLinkBPP[k],
4586 v->Output[k],
4587 v->OutputFormat[k],
4588 v->DSCInputBitPerComponent[k],
4589 v->NumberOfDSCSlices[k],
4590 v->AudioSampleRate[k],
4591 v->AudioSampleLayout[k],
4592 v->ODMCombineEnablePerState[i][k]);
4593 v->OutputBppPerState[i][k] = v->Outbpp;
4600 v->OutputLinkDPLanes[k],
4601 v->HTotal[k],
4602 v->HActive[k],
4603 v->PixelClockBackEnd[k],
4604 v->ForcedOutputLinkBPP[k],
4606 v->Output[k],
4607 v->OutputFormat[k],
4608 v->DSCInputBitPerComponent[k],
4609 v->NumberOfDSCSlices[k],
4610 v->AudioSampleRate[k],
4611 v->AudioSampleLayout[k],
4612 v->ODMCombineEnablePerState[i][k]);
4613 v->OutputBppPerState[i][k] = v->Outbpp;
4620 v->OutputBppPerState[i][k] = 0;
4627 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4628 if (v->BlendingAndTiming[k] == k
4629 && (v->Output[k] == dm_dp ||
4630 v->Output[k] == dm_edp ||
4631 v->Output[k] == dm_hdmi) && v->OutputBppPerState[i][k] == 0) {
4638 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4639 if (v->BlendingAndTiming[k] == k
4640 && (v->Output[k] == dm_dp ||
4641 v->Output[k] == dm_edp ||
4642 v->Output[k] == dm_hdmi)) {
4643 …if (v->OutputFormat[k] == dm_420 && v->Interlace[k] == 1 && v->ProgressiveToInterlaceUnitInOPP == …
4646 if (v->DSCEnable[k] == true && v->OutputFormat[k] == dm_n422
4656 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4657 if (v->BlendingAndTiming[k] == k && v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1
4658 && (v->ODMCombine4To1Supported == false || v->Output[k] == dm_dp || v->Output[k] == dm_edp
4659 || v->Output[k] == dm_hdmi)) {
4670 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4671 if (v->RequiresDSC[i][k] == true) {
4672 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1) {
4674 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4688 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4689 if (v->OutputBppPerState[i][k] == BPP_INVALID) {
4692 v->BPP = v->OutputBppPerState[i][k];
4694 if (v->RequiresDSC[i][k] == true && v->BPP != 0.0) {
4695 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_disabled) {
4696 v->DSCDelayPerState[i][k] = dscceComputeDelay(
4697 v->DSCInputBitPerComponent[k],
4699 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4700 v->NumberOfDSCSlices[k],
4701 v->OutputFormat[k],
4702 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]);
4703 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4704 v->DSCDelayPerState[i][k] = 2.0
4706 v->DSCInputBitPerComponent[k],
4708 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4709 v->NumberOfDSCSlices[k] / 2,
4710 v->OutputFormat[k],
4711 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
4713 v->DSCDelayPerState[i][k] = 4.0
4715 v->DSCInputBitPerComponent[k],
4717 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4718 v->NumberOfDSCSlices[k] / 4,
4719 v->OutputFormat[k],
4720 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
4722 …v->DSCDelayPerState[i][k] = v->DSCDelayPerState[i][k] * v->PixelClock[k] / v->PixelClockBackEnd[k];
4724 v->DSCDelayPerState[i][k] = 0.0;
4727 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4729 if (v->BlendingAndTiming[k] == m && v->RequiresDSC[i][m] == true) {
4730 v->DSCDelayPerState[i][k] = v->DSCDelayPerState[i][m];
4740 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4741 v->RequiredDPPCLKThisState[k] = v->RequiredDPPCLK[i][j][k];
4742 v->NoOfDPPThisState[k] = v->NoOfDPP[i][j][k];
4743 v->ODMCombineEnableThisState[k] = v->ODMCombineEnablePerState[i][k];
4807 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4808 v->swath_width_luma_ub_all_states[i][j][k] = v->swath_width_luma_ub_this_state[k];
4809 v->swath_width_chroma_ub_all_states[i][j][k] = v->swath_width_chroma_ub_this_state[k];
4810 v->SwathWidthYAllStates[i][j][k] = v->SwathWidthYThisState[k];
4811 v->SwathWidthCAllStates[i][j][k] = v->SwathWidthCThisState[k];
4812 v->SwathHeightYAllStates[i][j][k] = v->SwathHeightYThisState[k];
4813 v->SwathHeightCAllStates[i][j][k] = v->SwathHeightCThisState[k];
4814 v->DETBufferSizeYAllStates[i][j][k] = v->DETBufferSizeYThisState[k];
4815 v->DETBufferSizeCAllStates[i][j][k] = v->DETBufferSizeCThisState[k];
4820 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4821 v->cursor_bw[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
4822 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
4829 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4830 v->swath_width_luma_ub_this_state[k] = v->swath_width_luma_ub_all_states[i][j][k];
4831 v->swath_width_chroma_ub_this_state[k] = v->swath_width_chroma_ub_all_states[i][j][k];
4832 v->SwathWidthYThisState[k] = v->SwathWidthYAllStates[i][j][k];
4833 v->SwathWidthCThisState[k] = v->SwathWidthCAllStates[i][j][k];
4834 v->SwathHeightYThisState[k] = v->SwathHeightYAllStates[i][j][k];
4835 v->SwathHeightCThisState[k] = v->SwathHeightCAllStates[i][j][k];
4836 v->DETBufferSizeYThisState[k] = v->DETBufferSizeYAllStates[i][j][k];
4837 v->DETBufferSizeCThisState[k] = v->DETBufferSizeCAllStates[i][j][k];
4841 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4842 if (v->DCCEnable[k] == true) {
4843 v->TotalNumberOfDCCActiveDPP[i][j] = v->TotalNumberOfDCCActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4847 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4848 if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10
4849 || v->SourcePixelFormat[k] == dm_420_12 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
4851 if ((v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_420_12)
4852 && v->SourceScan[k] != dm_vert) {
4863 v->DCCEnable[k],
4864 v->Read256BlockHeightC[k],
4865 v->Read256BlockWidthC[k],
4866 v->SourcePixelFormat[k],
4867 v->SurfaceTiling[k],
4868 v->BytePerPixelC[k],
4869 v->SourceScan[k],
4870 v->SwathWidthCThisState[k],
4871 v->ViewportHeightChroma[k],
4878 v->PitchC[k],
4880 &v->MacroTileWidthC[k],
4883 &v->PTEBufferSizeNotExceededC[i][j][k],
4885 &v->dpte_row_height_chroma[k],
4889 &v->meta_row_height_chroma[k],
4898 v->PrefetchLinesC[i][j][k] = CalculatePrefetchSourceLines(
4900 v->VRatioChroma[k],
4901 v->VTAPsChroma[k],
4902 v->Interlace[k],
4904 v->SwathHeightCThisState[k],
4905 v->ViewportYStartC[k],
4906 &v->PrefillC[k],
4907 &v->MaxNumSwC[k]);
4914 v->PrefetchLinesC[i][j][k] = 0.0;
4915 v->PTEBufferSizeNotExceededC[i][j][k] = true;
4919 v->DCCEnable[k],
4920 v->Read256BlockHeightY[k],
4921 v->Read256BlockWidthY[k],
4922 v->SourcePixelFormat[k],
4923 v->SurfaceTiling[k],
4924 v->BytePerPixelY[k],
4925 v->SourceScan[k],
4926 v->SwathWidthYThisState[k],
4927 v->ViewportHeight[k],
4934 v->PitchY[k],
4935 v->DCCMetaPitchY[k],
4936 &v->MacroTileWidthY[k],
4939 &v->PTEBufferSizeNotExceededY[i][j][k],
4941 &v->dpte_row_height[k],
4945 &v->meta_row_height[k],
4947 &v->dpte_group_bytes[k],
4953 v->PrefetchLinesY[i][j][k] = CalculatePrefetchSourceLines(
4955 v->VRatio[k],
4956 v->vtaps[k],
4957 v->Interlace[k],
4959 v->SwathHeightYThisState[k],
4960 v->ViewportYStartY[k],
4961 &v->PrefillY[k],
4962 &v->MaxNumSwY[k]);
4963 …v->PDEAndMetaPTEBytesPerFrame[i][j][k] = v->PDEAndMetaPTEBytesPerFrameY + v->PDEAndMetaPTEBytesPer…
4964 v->MetaRowBytes[i][j][k] = v->MetaRowBytesY + v->MetaRowBytesC;
4965 v->DPTEBytesPerRow[i][j][k] = v->DPTEBytesPerRowY + v->DPTEBytesPerRowC;
4969 v->SourcePixelFormat[k],
4970 v->VRatio[k],
4971 v->VRatioChroma[k],
4972 v->DCCEnable[k],
4973 v->HTotal[k] / v->PixelClock[k],
4976 v->meta_row_height[k],
4977 v->meta_row_height_chroma[k],
4980 v->dpte_row_height[k],
4981 v->dpte_row_height_chroma[k],
4982 &v->meta_row_bandwidth[i][j][k],
4983 &v->dpte_row_bandwidth[i][j][k]);
4994 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4995 if (v->MetaRowBytes[i][j][k] > 24064)
5007 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5009 v->swath_width_luma_ub_this_state[k],
5010 v->swath_width_chroma_ub_this_state[k],
5011 v->SwathHeightYThisState[k],
5012 v->SwathHeightCThisState[k],
5013 v->HTotal[k] / v->PixelClock[k],
5016 v->CursorWidth[k][0],
5017 v->CursorBPP[k][0],
5018 v->VRatio[k],
5019 v->VRatioChroma[k],
5020 v->BytePerPixelInDETY[k],
5021 v->BytePerPixelInDETC[k],
5022 v->DETBufferSizeYThisState[k],
5023 v->DETBufferSizeCThisState[k],
5024 &v->UrgentBurstFactorCursor[k],
5025 &v->UrgentBurstFactorLuma[k],
5026 &v->UrgentBurstFactorChroma[k],
5027 &NotUrgentLatencyHiding[k]);
5031 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5032 if (NotUrgentLatencyHiding[k]) {
5037 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5038 v->VActivePixelBandwidth[i][j][k] = v->ReadBandwidthLuma[k] * v->UrgentBurstFactorLuma[k]
5039 + v->ReadBandwidthChroma[k] * v->UrgentBurstFactorChroma[k];
5040 v->VActiveCursorBandwidth[i][j][k] = v->cursor_bw[k] * v->UrgentBurstFactorCursor[k];
5047 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5048 …tivePixelBandwidth[i][j] = v->TotalVActivePixelBandwidth[i][j] + v->VActivePixelBandwidth[i][j][k];
5049 …eCursorBandwidth[i][j] = v->TotalVActiveCursorBandwidth[i][j] + v->VActiveCursorBandwidth[i][j][k];
5050 …idth[i][j] = v->TotalMetaRowBandwidth[i][j] + v->NoOfDPP[i][j][k] * v->meta_row_bandwidth[i][j][k];
5051 …idth[i][j] = v->TotalDPTERowBandwidth[i][j] + v->NoOfDPP[i][j][k] * v->dpte_row_bandwidth[i][j][k];
5059 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5060 if (v->BlendingAndTiming[k] == k) {
5061 if (v->WritebackEnable[k] == true) {
5062 v->WritebackDelayTime[k] = v->WritebackLatency
5064 v->WritebackPixelFormat[k],
5065 v->WritebackHRatio[k],
5066 v->WritebackVRatio[k],
5067 v->WritebackVTaps[k],
5068 v->WritebackDestinationWidth[k],
5069 v->WritebackDestinationHeight[k],
5070 v->WritebackSourceHeight[k],
5071 v->HTotal[k]) / v->RequiredDISPCLK[i][j];
5073 v->WritebackDelayTime[k] = 0.0;
5076 if (v->BlendingAndTiming[m] == k && v->WritebackEnable[m] == true) {
5077 v->WritebackDelayTime[k] = dml_max(
5078 v->WritebackDelayTime[k],
5093 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5095 if (v->BlendingAndTiming[k] == m) {
5096 v->WritebackDelayTime[k] = v->WritebackDelayTime[m];
5101 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5102 v->MaximumVStartup[i][j][k] =
5104 v->VTotal[k],
5105 v->VActive[k],
5106 v->VBlankNom[k],
5107 v->HTotal[k],
5108 v->PixelClock[k],
5110 v->Interlace[k],
5112 v->WritebackDelayTime[k]);
5113 v->MaxMaxVStartup[i][j] = dml_max(v->MaxMaxVStartup[i][j], v->MaximumVStartup[i][j][k]);
5169 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5170 …tiveRDBandwidth = MaxTotalVActiveRDBandwidth + v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k];
5217 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5218 v->NoOfDPPThisState[k] = v->NoOfDPP[i][j][k];
5219 v->swath_width_luma_ub_this_state[k] = v->swath_width_luma_ub_all_states[i][j][k];
5220 v->swath_width_chroma_ub_this_state[k] = v->swath_width_chroma_ub_all_states[i][j][k];
5221 v->SwathWidthYThisState[k] = v->SwathWidthYAllStates[i][j][k];
5222 v->SwathWidthCThisState[k] = v->SwathWidthCAllStates[i][j][k];
5223 v->SwathHeightYThisState[k] = v->SwathHeightYAllStates[i][j][k];
5224 v->SwathHeightCThisState[k] = v->SwathHeightCAllStates[i][j][k];
5225 v->DETBufferSizeYThisState[k] = v->DETBufferSizeYAllStates[i][j][k];
5226 v->DETBufferSizeCThisState[k] = v->DETBufferSizeCAllStates[i][j][k];
5268 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5271 i, j, k);
5274 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5276 v->swath_width_luma_ub_this_state[k],
5277 v->swath_width_chroma_ub_this_state[k],
5278 v->SwathHeightYThisState[k],
5279 v->SwathHeightCThisState[k],
5280 v->HTotal[k] / v->PixelClock[k],
5283 v->CursorWidth[k][0],
5284 v->CursorBPP[k][0],
5285 v->VRatioPreY[i][j][k],
5286 v->VRatioPreC[i][j][k],
5287 v->BytePerPixelInDETY[k],
5288 v->BytePerPixelInDETC[k],
5289 v->DETBufferSizeYThisState[k],
5290 v->DETBufferSizeCThisState[k],
5291 &v->UrgentBurstFactorCursorPre[k],
5292 &v->UrgentBurstFactorLumaPre[k],
5293 &v->UrgentBurstFactorChromaPre[k],
5294 &v->NotUrgentLatencyHidingPre[k]);
5298 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5299 v->cursor_bw_pre[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
5300 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatioPreY[i][j][k];
5305 v->VActivePixelBandwidth[i][j][k]
5306 + v->VActiveCursorBandwidth[i][j][k]
5307 + v->NoOfDPP[i][j][k]
5308 * (v->meta_row_bandwidth[i][j][k]
5309 + v->dpte_row_bandwidth[i][j][k]),
5310 v->NoOfDPP[i][j][k] * v->prefetch_vmrow_bw[k],
5311 v->NoOfDPP[i][j][k]
5312 * (v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5313 * v->UrgentBurstFactorLumaPre[k]
5314 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5315 * v->UrgentBurstFactorChromaPre[k])
5316 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5320 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5321 if (v->NotUrgentLatencyHidingPre[k] == true) {
5331 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5332 …if (v->LineTimesForPrefetch[k] < 2.0 || v->LinesForMetaPTE[k] >= 32.0 || v->LinesForMetaAndDPTERow…
5333 || v->NoTimeForPrefetch[i][j][k] == true) {
5339 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5340 if (v->NoTimeForDynamicMetadata[i][j][k] == true) {
5346 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5347 …if (v->VRatioPreY[i][j][k] > 4.0 || v->VRatioPreC[i][j][k] > 4.0 || v->NoTimeForPrefetch[i][j][k] …
5352 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5353 if (v->LinesForMetaAndDPTERow[k] >= 16 || v->LinesForMetaPTE[k] >= 32) {
5362 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5365 v->VActivePixelBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k],
5366 v->NoOfDPP[i][j][k]
5367 * (v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5368 * v->UrgentBurstFactorLumaPre[k]
5369 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5370 * v->UrgentBurstFactorChromaPre[k])
5371 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5374 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5376 + v->NoOfDPP[i][j][k] * (v->PDEAndMetaPTEBytesPerFrame[i][j][k] + v->MetaRowBytes[i][j][k]
5377 + v->DPTEBytesPerRow[i][j][k]);
5380 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5383 k,
5387 v->PDEAndMetaPTEBytesPerFrame[i][j][k],
5388 v->MetaRowBytes[i][j][k],
5389 v->DPTEBytesPerRow[i][j][k]);
5392 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5395 v->NoOfDPP[i][j][k] * v->prefetch_vmrow_bw[k],
5396 v->NoOfDPP[i][j][k] * v->final_flip_bw[k] + v->VActivePixelBandwidth[i][j][k]
5397 + v->VActiveCursorBandwidth[i][j][k],
5398 v->NoOfDPP[i][j][k]
5399 * (v->final_flip_bw[k]
5400 + v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5401 * v->UrgentBurstFactorLumaPre[k]
5402 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5403 * v->UrgentBurstFactorChromaPre[k])
5404 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5410 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5411 if (v->ImmediateFlipSupportedForPipe[k] == false) {
5476 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5477 …if (v->PTEBufferSizeNotExceededY[i][j][k] == false || v->PTEBufferSizeNotExceededC[i][j][k] == fal…
5486 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5487 if (v->CursorWidth[k][0] > 0.0) {
5488 if (v->CursorBPP[k][0] == 64 && v->Cursor64BppSupport == false) {
5496 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5497 v->AlignedYPitch[k] = dml_ceil(dml_max(v->PitchY[k], v->SurfaceWidthY[k]), v->MacroTileWidthY[k]);
5498 if (v->DCCEnable[k] == true) {
5499 …v->AlignedDCCMetaPitchY[k] = dml_ceil(dml_max(v->DCCMetaPitchY[k], v->SurfaceWidthY[k]), 64.0 * v-…
5501 v->AlignedDCCMetaPitchY[k] = v->DCCMetaPitchY[k];
5503 …if (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32 && v->SourcePixel…
5504 && v->SourcePixelFormat[k] != dm_mono_16 && v->SourcePixelFormat[k] != dm_rgbe
5505 && v->SourcePixelFormat[k] != dm_mono_8) {
5506 … v->AlignedCPitch[k] = dml_ceil(dml_max(v->PitchC[k], v->SurfaceWidthC[k]), v->MacroTileWidthC[k]);
5507 if (v->DCCEnable[k] == true) {
5508 v->AlignedDCCMetaPitchC[k] = dml_ceil(
5509 dml_max(v->DCCMetaPitchC[k], v->SurfaceWidthC[k]),
5510 64.0 * v->Read256BlockWidthC[k]);
5512 v->AlignedDCCMetaPitchC[k] = v->DCCMetaPitchC[k];
5515 v->AlignedCPitch[k] = v->PitchC[k];
5516 v->AlignedDCCMetaPitchC[k] = v->DCCMetaPitchC[k];
5518 if (v->AlignedYPitch[k] > v->PitchY[k] || v->AlignedCPitch[k] > v->PitchC[k]
5519 …|| v->AlignedDCCMetaPitchY[k] > v->DCCMetaPitchY[k] || v->AlignedDCCMetaPitchC[k] > v->DCCMetaPitc…
5524 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5525 if (v->ViewportWidth[k] > v->SurfaceWidthY[k] || v->ViewportHeight[k] > v->SurfaceHeightY[k]) {
5527 if (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
5528 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_444_8
5529 && v->SourcePixelFormat[k] != dm_rgbe) {
5530 if (v->ViewportWidthChroma[k] > v->SurfaceWidthC[k]
5531 || v->ViewportHeightChroma[k] > v->SurfaceHeightC[k]) {
5637 for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
5638 v->MPCCombineEnable[k] = v->MPCCombine[v->VoltageLevel][MaximumMPCCombine][k];
5639 v->DPPPerPlane[k] = v->NoOfDPP[v->VoltageLevel][MaximumMPCCombine][k];
5692 int k, j; local
5710 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5711 if (v->WritebackEnable[k] == true) {
5728 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5730 …+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePer…
5731 / (v->HTotal[k] / v->PixelClock[k]);
5734 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5735 double EffectiveDETBufferSizeY = DETBufferSizeY[k];
5739 …loor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) …
5743 …->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) …
5745 …LatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
5747 …yHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
5751 …dBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / …
5754 LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[k];
5755 LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]);
5756 …DETBufferingTimeY = LinesInDETYRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k]) / v->VRat…
5757 if (BytePerPixelDETC[k] > 0) {
5758 LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
5759 LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
5760 …ringTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
5767 …- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->Pixe…
5771 …(1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRati…
5774 if (BytePerPixelDETC[k] > 0) {
5776 …- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->Pixe…
5780 …- 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioCh…
5782 …v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAM…
5784 v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
5787 if (v->WritebackEnable[k] == true) {
5789 …WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v…
5790 if (v->WritebackPixelFormat[k] == dm_444_64) {
5794 …v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(v->ActiveDRAMClockChangeLatencyMargin[k], Write…
5800 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5801 if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
5802 v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
5803 if (v->BlendingAndTiming[k] == k) {
5804 PlaneWithMinActiveDRAMClockChangeMargin = k;
5807 if (v->BlendingAndTiming[k] == j) {
5818 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5819 …if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->Bl…
5820 …&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLa…
5821 … SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
5827 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5828 if (v->BlendingAndTiming[k] == k) {
5880 int k; local
5882 for (k = 0; k < NumberOfActivePlanes; ++k) {
5884 if (VRatio[k] <= 1) {
5885 DisplayPipeLineDeliveryTimeLuma = SwathWidthY[k] * DPPPerPlane[k] / HRatio[k] / PixelClock[k];
5887 DisplayPipeLineDeliveryTimeLuma = SwathWidthY[k] / PSCL_THROUGHPUT[k] / DPPCLK[k];
5889 if (BytePerPixelC[k] == 0) {
5892 if (VRatioChroma[k] <= 1) {
5893 …DisplayPipeLineDeliveryTimeChroma = SwathWidthC[k] * DPPPerPlane[k] / HRatioChroma[k] / PixelClock…
5895 DisplayPipeLineDeliveryTimeChroma = SwathWidthC[k] / PSCL_THROUGHPUT_CHROMA[k] / DPPCLK[k];
5899 if (BytePerPixelC[k] > 0) {
5900 …v->DCFCLKDeepSleepPerPlane[k] = dml_max(__DML_MIN_DCFCLK_FACTOR__ * SwathWidthY[k] * BytePerPixelY…
5901 …__DML_MIN_DCFCLK_FACTOR__ * SwathWidthC[k] * BytePerPixelC[k] / 32.0 / DisplayPipeLineDeliveryTime…
5903 …v->DCFCLKDeepSleepPerPlane[k] = __DML_MIN_DCFCLK_FACTOR__ * SwathWidthY[k] * BytePerPixelY[k] / 64…
5905 v->DCFCLKDeepSleepPerPlane[k] = dml_max(v->DCFCLKDeepSleepPerPlane[k], PixelClock[k] / 16);
5909 for (k = 0; k < NumberOfActivePlanes; ++k) {
5910 ReadBandwidth = ReadBandwidth + ReadBandwidthLuma[k] + ReadBandwidthChroma[k];
5915 for (k = 0; k < NumberOfActivePlanes; ++k) {
5916 *DCFCLKDeepSleep = dml_max(*DCFCLKDeepSleep, v->DCFCLKDeepSleepPerPlane[k]);
6030 int k; local
6032 for (k = 0; k < NumberOfActivePlanes; ++k) {
6033 if (VRatio[k] <= 1) {
6034 …DisplayPipeLineDeliveryTimeLuma[k] = swath_width_luma_ub[k] * DPPPerPlane[k] / HRatio[k] / PixelCl…
6036 DisplayPipeLineDeliveryTimeLuma[k] = swath_width_luma_ub[k] / PSCL_THROUGHPUT[k] / DPPCLK[k];
6039 if (BytePerPixelC[k] == 0) {
6040 DisplayPipeLineDeliveryTimeChroma[k] = 0;
6042 if (VRatioChroma[k] <= 1) {
6043 …DisplayPipeLineDeliveryTimeChroma[k] = swath_width_chroma_ub[k] * DPPPerPlane[k] / HRatioChroma[k]…
6045 …DisplayPipeLineDeliveryTimeChroma[k] = swath_width_chroma_ub[k] / PSCL_THROUGHPUT_CHROMA[k] / DPPC…
6049 if (VRatioPrefetchY[k] <= 1) {
6050 …DisplayPipeLineDeliveryTimeLumaPrefetch[k] = swath_width_luma_ub[k] * DPPPerPlane[k] / HRatio[k] /…
6052 …DisplayPipeLineDeliveryTimeLumaPrefetch[k] = swath_width_luma_ub[k] / PSCL_THROUGHPUT[k] / DPPCLK[
6055 if (BytePerPixelC[k] == 0) {
6056 DisplayPipeLineDeliveryTimeChromaPrefetch[k] = 0;
6058 if (VRatioPrefetchC[k] <= 1) {
6059 …ayPipeLineDeliveryTimeChromaPrefetch[k] = swath_width_chroma_ub[k] * DPPPerPlane[k] / HRatioChroma…
6061 …DisplayPipeLineDeliveryTimeChromaPrefetch[k] = swath_width_chroma_ub[k] / PSCL_THROUGHPUT_CHROMA[k
6066 for (k = 0; k < NumberOfActivePlanes; ++k) {
6067 if (SourceScan[k] != dm_vert) {
6068 req_per_swath_ub = swath_width_luma_ub[k] / BlockWidth256BytesY[k];
6070 req_per_swath_ub = swath_width_luma_ub[k] / BlockHeight256BytesY[k];
6072 DisplayPipeRequestDeliveryTimeLuma[k] = DisplayPipeLineDeliveryTimeLuma[k] / req_per_swath_ub;
6073 …DisplayPipeRequestDeliveryTimeLumaPrefetch[k] = DisplayPipeLineDeliveryTimeLumaPrefetch[k] / req_p…
6074 if (BytePerPixelC[k] == 0) {
6075 DisplayPipeRequestDeliveryTimeChroma[k] = 0;
6076 DisplayPipeRequestDeliveryTimeChromaPrefetch[k] = 0;
6078 if (SourceScan[k] != dm_vert) {
6079 req_per_swath_ub = swath_width_chroma_ub[k] / BlockWidth256BytesC[k];
6081 req_per_swath_ub = swath_width_chroma_ub[k] / BlockHeight256BytesC[k];
6083 … DisplayPipeRequestDeliveryTimeChroma[k] = DisplayPipeLineDeliveryTimeChroma[k] / req_per_swath_ub;
6084 …DisplayPipeRequestDeliveryTimeChromaPrefetch[k] = DisplayPipeLineDeliveryTimeChromaPrefetch[k] / r…
6087 dml_print("DML::%s: k=%d : HRatio = %f\n", __func__, k, HRatio[k]);
6088 dml_print("DML::%s: k=%d : VRatio = %f\n", __func__, k, VRatio[k]);
6089 dml_print("DML::%s: k=%d : HRatioChroma = %f\n", __func__, k, HRatioChroma[k]);
6090 dml_print("DML::%s: k=%d : VRatioChroma = %f\n", __func__, k, VRatioChroma[k]);
6091 …: k=%d : DisplayPipeLineDeliveryTimeLuma = %f\n", __func__, k, DisplayPipeLineDeliveryTimeLuma[k]);
6092 …ayPipeLineDeliveryTimeLumaPrefetch = %f\n", __func__, k, DisplayPipeLineDeliveryTimeLumaPrefetch[k
6093 …%d : DisplayPipeLineDeliveryTimeChroma = %f\n", __func__, k, DisplayPipeLineDeliveryTimeChroma[k]);
6094 …ipeLineDeliveryTimeChromaPrefetch = %f\n", __func__, k, DisplayPipeLineDeliveryTimeChromaPrefetch[
6095 … : DisplayPipeRequestDeliveryTimeLuma = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeLuma[k]);
6096 …peRequestDeliveryTimeLumaPrefetch = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeLumaPrefetch…
6097 …DisplayPipeRequestDeliveryTimeChroma = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeChroma[k]…
6098 …equestDeliveryTimeChromaPrefetch = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeChromaPrefetc…
6102 for (k = 0; k < NumberOfActivePlanes; ++k) {
6105 cursor_req_per_width = dml_ceil(CursorWidth[k][0] * CursorBPP[k][0] / 256 / 8, 1);
6106 if (NumberOfCursors[k] > 0) {
6107 if (VRatio[k] <= 1) {
6108 …CursorRequestDeliveryTime[k] = CursorWidth[k][0] / HRatio[k] / PixelClock[k] / cursor_req_per_widt…
6110 …CursorRequestDeliveryTime[k] = CursorWidth[k][0] / PSCL_THROUGHPUT[k] / DPPCLK[k] / cursor_req_per…
6112 if (VRatioPrefetchY[k] <= 1) {
6113 …CursorRequestDeliveryTimePrefetch[k] = CursorWidth[k][0] / HRatio[k] / PixelClock[k] / cursor_req_…
6115 …CursorRequestDeliveryTimePrefetch[k] = CursorWidth[k][0] / PSCL_THROUGHPUT[k] / DPPCLK[k] / cursor…
6118 CursorRequestDeliveryTime[k] = 0;
6119 CursorRequestDeliveryTimePrefetch[k] = 0;
6122 dml_print("DML::%s: k=%d : NumberOfCursors = %d\n", __func__, k, NumberOfCursors[k]);
6123 …int("DML::%s: k=%d : CursorRequestDeliveryTime = %f\n", __func__, k, CursorRequestDeliveryTime[k]);
6124 …%d : CursorRequestDeliveryTimePrefetch = %f\n", __func__, k, CursorRequestDeliveryTimePrefetch[k]);
6196 int k; local
6198 for (k = 0; k < NumberOfActivePlanes; ++k) {
6199 DST_Y_PER_PTE_ROW_NOM_L[k] = dpte_row_height[k] / VRatio[k];
6200 if (BytePerPixelC[k] == 0) {
6201 DST_Y_PER_PTE_ROW_NOM_C[k] = 0;
6203 DST_Y_PER_PTE_ROW_NOM_C[k] = dpte_row_height_chroma[k] / VRatioChroma[k];
6205 DST_Y_PER_META_ROW_NOM_L[k] = meta_row_height[k] / VRatio[k];
6206 if (BytePerPixelC[k] == 0) {
6207 DST_Y_PER_META_ROW_NOM_C[k] = 0;
6209 DST_Y_PER_META_ROW_NOM_C[k] = meta_row_height_chroma[k] / VRatioChroma[k];
6213 for (k = 0; k < NumberOfActivePlanes; ++k) {
6214 if (DCCEnable[k] == true) {
6215 meta_chunk_width = MetaChunkSize * 1024 * 256 / BytePerPixelY[k] / meta_row_height[k];
6216 min_meta_chunk_width = MinMetaChunkSizeBytes * 256 / BytePerPixelY[k] / meta_row_height[k];
6217 meta_chunk_per_row_int = meta_row_width[k] / meta_chunk_width;
6218 meta_row_remainder = meta_row_width[k] % meta_chunk_width;
6219 if (SourceScan[k] != dm_vert) {
6220 meta_chunk_threshold = 2 * min_meta_chunk_width - meta_req_width[k];
6222 meta_chunk_threshold = 2 * min_meta_chunk_width - meta_req_height[k];
6229 …TimePerMetaChunkNominal[k] = meta_row_height[k] / VRatio[k] * HTotal[k] / PixelClock[k] / meta_chu…
6230 …TimePerMetaChunkVBlank[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClock[k] / …
6231 …TimePerMetaChunkFlip[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / PixelClock[
6232 if (BytePerPixelC[k] == 0) {
6233 TimePerChromaMetaChunkNominal[k] = 0;
6234 TimePerChromaMetaChunkVBlank[k] = 0;
6235 TimePerChromaMetaChunkFlip[k] = 0;
6237 …eta_chunk_width_chroma = MetaChunkSize * 1024 * 256 / BytePerPixelC[k] / meta_row_height_chroma[k];
6238 …ta_chunk_width_chroma = MinMetaChunkSizeBytes * 256 / BytePerPixelC[k] / meta_row_height_chroma[k];
6239 meta_chunk_per_row_int_chroma = (double) meta_row_width_chroma[k] / meta_chunk_width_chroma;
6240 meta_row_remainder_chroma = meta_row_width_chroma[k] % meta_chunk_width_chroma;
6241 if (SourceScan[k] != dm_vert) {
6242 meta_chunk_threshold_chroma = 2 * min_meta_chunk_width_chroma - meta_req_width_chroma[k];
6244 meta_chunk_threshold_chroma = 2 * min_meta_chunk_width_chroma - meta_req_height_chroma[k];
6251 …TimePerChromaMetaChunkNominal[k] = meta_row_height_chroma[k] / VRatioChroma[k] * HTotal[k] / Pixel…
6252 …TimePerChromaMetaChunkVBlank[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClock…
6253 …TimePerChromaMetaChunkFlip[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / Pixel…
6256 TimePerMetaChunkNominal[k] = 0;
6257 TimePerMetaChunkVBlank[k] = 0;
6258 TimePerMetaChunkFlip[k] = 0;
6259 TimePerChromaMetaChunkNominal[k] = 0;
6260 TimePerChromaMetaChunkVBlank[k] = 0;
6261 TimePerChromaMetaChunkFlip[k] = 0;
6265 for (k = 0; k < NumberOfActivePlanes; ++k) {
6267 if (SourceScan[k] != dm_vert) {
6268 dpte_group_width_luma = dpte_group_bytes[k] / PTERequestSizeY[k] * PixelPTEReqWidthY[k];
6270 dpte_group_width_luma = dpte_group_bytes[k] / PTERequestSizeY[k] * PixelPTEReqHeightY[k];
6272 …dpte_groups_per_row_luma_ub = dml_ceil(1.0 * dpte_row_width_luma_ub[k] / dpte_group_width_luma, 1);
6273 …time_per_pte_group_nom_luma[k] = DST_Y_PER_PTE_ROW_NOM_L[k] * HTotal[k] / PixelClock[k] / dpte_gro…
6274 …time_per_pte_group_vblank_luma[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClo…
6275 …time_per_pte_group_flip_luma[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / Pix…
6276 if (BytePerPixelC[k] == 0) {
6277 time_per_pte_group_nom_chroma[k] = 0;
6278 time_per_pte_group_vblank_chroma[k] = 0;
6279 time_per_pte_group_flip_chroma[k] = 0;
6281 if (SourceScan[k] != dm_vert) {
6282 dpte_group_width_chroma = dpte_group_bytes[k] / PTERequestSizeC[k] * PixelPTEReqWidthC[k];
6284 dpte_group_width_chroma = dpte_group_bytes[k] / PTERequestSizeC[k] * PixelPTEReqHeightC[k];
6286 …dpte_groups_per_row_chroma_ub = dml_ceil(1.0 * dpte_row_width_chroma_ub[k] / dpte_group_width_chro…
6287 …time_per_pte_group_nom_chroma[k] = DST_Y_PER_PTE_ROW_NOM_C[k] * HTotal[k] / PixelClock[k] / dpte_g…
6288 …time_per_pte_group_vblank_chroma[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelC…
6289 …time_per_pte_group_flip_chroma[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / P…
6292 time_per_pte_group_nom_luma[k] = 0;
6293 time_per_pte_group_vblank_luma[k] = 0;
6294 time_per_pte_group_flip_luma[k] = 0;
6295 time_per_pte_group_nom_chroma[k] = 0;
6296 time_per_pte_group_vblank_chroma[k] = 0;
6297 time_per_pte_group_flip_chroma[k] = 0;
6326 int k; local
6328 for (k = 0; k < NumberOfActivePlanes; ++k) {
6329 if (GPUVMEnable == true && (DCCEnable[k] == true || GPUVMMaxPageTableLevels > 1)) {
6330 if (DCCEnable[k] == false) {
6331 if (BytePerPixelC[k] > 0) {
6332 …wer_vm_stage = dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6333 + dml_ceil((double) (dpde0_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6335 …er_vm_stage = dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6339 if (BytePerPixelC[k] > 0) {
6340 …_vm_stage = dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6341 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6343 …vm_stage = dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6346 if (BytePerPixelC[k] > 0) {
6347 …vm_stage = 2 + dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6348 + dml_ceil((double) (dpde0_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1)
6349 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6350 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6352 …vm_stage = 1 + dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6353 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6358 if (DCCEnable[k] == false) {
6359 if (BytePerPixelC[k] > 0) {
6360 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + dpde0_bytes_per_frame_ub_c[k] / …
6362 num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64;
6366 if (BytePerPixelC[k] > 0) {
6367 …_req_per_lower_vm_stage = meta_pte_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_c[k]…
6369 num_req_per_lower_vm_stage = meta_pte_bytes_per_frame_ub_l[k] / 64;
6372 if (BytePerPixelC[k] > 0) {
6373 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + dpde0_bytes_per_frame_ub_c[k] / …
6374 + meta_pte_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_c[k] / 64;
6376 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_l[k]…
6381 …TimePerVMGroupVBlank[k] = DestinationLinesToRequestVMInVBlank[k] * HTotal[k] / PixelClock[k] / num…
6382 …TimePerVMGroupFlip[k] = DestinationLinesToRequestVMInImmediateFlip[k] * HTotal[k] / PixelClock[k] …
6383 …TimePerVMRequestVBlank[k] = DestinationLinesToRequestVMInVBlank[k] * HTotal[k] / PixelClock[k] / n…
6384 …TimePerVMRequestFlip[k] = DestinationLinesToRequestVMInImmediateFlip[k] * HTotal[k] / PixelClock[k
6387 TimePerVMGroupVBlank[k] = TimePerVMGroupVBlank[k] / 2;
6388 TimePerVMGroupFlip[k] = TimePerVMGroupFlip[k] / 2;
6389 TimePerVMRequestVBlank[k] = TimePerVMRequestVBlank[k] / 2;
6390 TimePerVMRequestFlip[k] = TimePerVMRequestFlip[k] / 2;
6394 TimePerVMGroupVBlank[k] = 0;
6395 TimePerVMGroupFlip[k] = 0;
6396 TimePerVMRequestVBlank[k] = 0;
6397 TimePerVMRequestFlip[k] = 0;
6488 int k; local
6495 for (k = 0; k < NumberOfActivePlanes; ++k) {
6496 if (DCCEnable[k] == true) {
6497 …SourceScan[k] == dm_vert && BlockWidth256BytesY[k] > SwathHeightY[k]) || (SourceScan[k] != dm_vert…
6498 || DCCYMaxUncompressedBlock[k] < 256) {
6503 …width = TotalCompressedReadBandwidth + ReadBandwidthPlaneLuma[k] / dml_min(NetDCCRateLuma[k], Maxi…
6504 …talZeroSizeRequestReadBandwidth + ReadBandwidthPlaneLuma[k] * DCCFractionOfZeroSizeRequestsLuma[k];
6506 …+ ReadBandwidthPlaneLuma[k] * DCCFractionOfZeroSizeRequestsLuma[k] / MaximumEffectiveCompressionLu…
6507 if (ReadBandwidthPlaneChroma[k] > 0) {
6508 if ((SourceScan[k] == dm_vert && BlockWidth256BytesC[k] > SwathHeightC[k])
6509 …|| (SourceScan[k] != dm_vert && BlockHeight256BytesC[k] > SwathHeightC[k]) || DCCCMaxUncompressedB…
6515 … + ReadBandwidthPlaneChroma[k] / dml_min(NetDCCRateChroma[k], MaximumEffectiveCompressionChroma);
6516 …eroSizeRequestReadBandwidth + ReadBandwidthPlaneChroma[k] * DCCFractionOfZeroSizeRequestsChroma[k];
6518 …+ ReadBandwidthPlaneChroma[k] * DCCFractionOfZeroSizeRequestsChroma[k] / MaximumEffectiveCompressi…
6521 …Bandwidth = TotalCompressedReadBandwidth + ReadBandwidthPlaneLuma[k] + ReadBandwidthPlaneChroma[k];
6523 …TotalRowReadBandwidth = TotalRowReadBandwidth + DPPPerPlane[k] * (meta_row_bw[k] + dpte_row_bw[k]);
6572 for (k = 0; k < NumberOfActivePlanes; ++k) {
6573 …sInDETY = (DETBufferSizeY[k] + (UnboundedRequestEnabled == true ? EffectiveCompressedBufferSize : …
6574 / BytePerPixelDETY[k] / SwathWidthY[k];
6575 LinesInDETYRoundedDownToSwath = dml_floor(LinesInDETY, SwathHeightY[k]);
6576 DETBufferingTimeY = LinesInDETYRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatio[k];
6578 dml_print("DML::%s: k=%0d DETBufferSizeY = %f\n", __func__, k, DETBufferSizeY[k]);
6579 dml_print("DML::%s: k=%0d BytePerPixelDETY = %f\n", __func__, k, BytePerPixelDETY[k]);
6580 dml_print("DML::%s: k=%0d SwathWidthY = %f\n", __func__, k, SwathWidthY[k]);
6581 dml_print("DML::%s: k=%0d ReadBandwidthPlaneLuma = %f\n", __func__, k, ReadBandwidthPlaneLuma[k]);
6582 dml_print("DML::%s: k=%0d TotalDataReadBandwidth = %f\n", __func__, k, TotalDataReadBandwidth);
6583 dml_print("DML::%s: k=%0d LinesInDETY = %f\n", __func__, k, LinesInDETY);
6584 …dml_print("DML::%s: k=%0d LinesInDETYRoundedDownToSwath = %f\n", __func__, k, LinesInDETYRoundedDo…
6585 dml_print("DML::%s: k=%0d HTotal = %d\n", __func__, k, HTotal[k]);
6586 dml_print("DML::%s: k=%0d PixelClock = %f\n", __func__, k, PixelClock[k]);
6587 dml_print("DML::%s: k=%0d VRatio = %f\n", __func__, k, VRatio[k]);
6588 dml_print("DML::%s: k=%0d DETBufferingTimeY = %f\n", __func__, k, DETBufferingTimeY);
6589 dml_print("DML::%s: k=%0d PixelClock = %f\n", __func__, k, PixelClock[k]);
6592 if (k == 0 || DETBufferingTimeY < *StutterPeriod) {
6593 bool isInterlaceTiming = Interlace[k] && !ProgressiveToInterlaceUnitInOPP;
6596 …calPlane = (isInterlaceTiming ? dml_floor(VTotal[k] / 2.0, 1.0) : VTotal[k]) * HTotal[k] / PixelCl…
6597 …alPlane = (isInterlaceTiming ? dml_floor(VActive[k] / 2.0, 1.0) : VActive[k]) * HTotal[k] / PixelC…
6598 BytePerPixelYCriticalPlane = BytePerPixelY[k];
6599 SwathWidthYCriticalPlane = SwathWidthY[k];
6600 …LinesToFinishSwathTransferStutterCriticalPlane = SwathHeightY[k] - (LinesInDETY - LinesInDETYRound…
6601 MinTTUVBlankCriticalPlane = MinTTUVBlank[k];
6647 for (k = 0; k < NumberOfActivePlanes; ++k) {
6648 if (WritebackEnable[k]) {
6678 for (k = 0; k < NumberOfActivePlanes; ++k) {
6679 if (v->BlendingAndTiming[k] == k) {
6771 int k; local
6805 for (k = 0; k < NumberOfActivePlanes; ++k) {
6806 …((SourcePixelFormat[k] == dm_444_64 || SourcePixelFormat[k] == dm_444_32 || SourcePixelFormat[k] =…
6807 || SourcePixelFormat[k] == dm_mono_8 || SourcePixelFormat[k] == dm_rgbe)) {
6808 if (SurfaceTiling[k] == dm_sw_linear
6809 || (SourcePixelFormat[k] == dm_444_64
6810 …&& (SurfaceTiling[k] == dm_sw_64kb_s || SurfaceTiling[k] == dm_sw_64kb_s_t || SurfaceTiling[k] == …
6811 && SourceScan[k] != dm_vert)) {
6812 MinimumSwathHeightY = MaximumSwathHeightY[k];
6813 } else if (SourcePixelFormat[k] == dm_444_8 && SourceScan[k] == dm_vert) {
6814 MinimumSwathHeightY = MaximumSwathHeightY[k];
6816 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6818 MinimumSwathHeightC = MaximumSwathHeightC[k];
6820 if (SurfaceTiling[k] == dm_sw_linear) {
6821 MinimumSwathHeightY = MaximumSwathHeightY[k];
6822 MinimumSwathHeightC = MaximumSwathHeightC[k];
6823 } else if (SourcePixelFormat[k] == dm_rgbe_alpha && SourceScan[k] == dm_vert) {
6824 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6825 MinimumSwathHeightC = MaximumSwathHeightC[k];
6826 } else if (SourcePixelFormat[k] == dm_rgbe_alpha) {
6827 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6828 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6829 } else if (SourcePixelFormat[k] == dm_420_8 && SourceScan[k] == dm_vert) {
6830 MinimumSwathHeightY = MaximumSwathHeightY[k];
6831 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6833 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6834 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6838 RoundedUpMaxSwathSizeBytesY = swath_width_luma_ub[k] * BytePerPixDETY[k] * MaximumSwathHeightY[k];
6839 RoundedUpMinSwathSizeBytesY = swath_width_luma_ub[k] * BytePerPixDETY[k] * MinimumSwathHeightY;
6840 if (SourcePixelFormat[k] == dm_420_10) {
6844 …RoundedUpMaxSwathSizeBytesC = swath_width_chroma_ub[k] * BytePerPixDETC[k] * MaximumSwathHeightC[k
6845 RoundedUpMinSwathSizeBytesC = swath_width_chroma_ub[k] * BytePerPixDETC[k] * MinimumSwathHeightC;
6846 if (SourcePixelFormat[k] == dm_420_10) {
6852 SwathHeightY[k] = MaximumSwathHeightY[k];
6853 SwathHeightC[k] = MaximumSwathHeightC[k];
6858 SwathHeightY[k] = MinimumSwathHeightY;
6859 SwathHeightC[k] = MaximumSwathHeightC[k];
6864 SwathHeightY[k] = MaximumSwathHeightY[k];
6865 SwathHeightC[k] = MinimumSwathHeightC;
6869 SwathHeightY[k] = MinimumSwathHeightY;
6870 SwathHeightC[k] = MinimumSwathHeightC;
6877 if (SwathHeightC[k] == 0) {
6878 DETBufferSizeY[k] = actDETBufferSizeInKByte * 1024;
6879 DETBufferSizeC[k] = 0;
6881 DETBufferSizeY[k] = actDETBufferSizeInKByte * 1024 / 2;
6882 DETBufferSizeC[k] = actDETBufferSizeInKByte * 1024 / 2;
6884 DETBufferSizeY[k] = dml_floor(actDETBufferSizeInKByte * 1024 * 2 / 3, 1024);
6885 DETBufferSizeC[k] = actDETBufferSizeInKByte * 1024 / 3;
6888 …MinSwathSizeBytesC > actDETBufferSizeInKByte * 1024 / 2 || SwathWidth[k] > MaximumSwathWidthLuma[k]
6889 || (SwathHeightC[k] > 0 && SwathWidthChroma[k] > MaximumSwathWidthChroma[k])) {
6891 ViewportSizeSupportPerPlane[k] = false;
6893 ViewportSizeSupportPerPlane[k] = true;
6931 int j, k; local
6937 for (k = 0; k < NumberOfActivePlanes; ++k) {
6938 if (SourceScan[k] != dm_vert) {
6939 SwathWidthSingleDPPY[k] = ViewportWidth[k];
6941 SwathWidthSingleDPPY[k] = ViewportHeight[k];
6945 dml_print("DML::%s: k=%d ViewportWidth=%d\n", __func__, k, ViewportWidth[k]);
6946 dml_print("DML::%s: k=%d ViewportHeight=%d\n", __func__, k, ViewportHeight[k]);
6949 MainPlaneODMCombine = ODMCombineEnabled[k];
6951 if (BlendingAndTiming[k] == j) {
6957 SwathWidthY[k] = dml_min(SwathWidthSingleDPPY[k], dml_round(HActive[k] / 4.0 * HRatio[k]));
6959 SwathWidthY[k] = dml_min(SwathWidthSingleDPPY[k], dml_round(HActive[k] / 2.0 * HRatio[k]));
6960 else if (DPPPerPlane[k] == 2)
6961 SwathWidthY[k] = SwathWidthSingleDPPY[k] / 2;
6963 SwathWidthY[k] = SwathWidthSingleDPPY[k];
6966 dml_print("DML::%s: k=%d SwathWidthSingleDPPY=%f\n", __func__, k, SwathWidthSingleDPPY[k]);
6967 dml_print("DML::%s: k=%d SwathWidthY=%f\n", __func__, k, SwathWidthY[k]);
6970 …if (SourcePixelFormat[k] == dm_420_8 || SourcePixelFormat[k] == dm_420_10 || SourcePixelFormat[k] …
6971 SwathWidthC[k] = SwathWidthY[k] / 2;
6972 SwathWidthSingleDPPC[k] = SwathWidthSingleDPPY[k] / 2;
6974 SwathWidthC[k] = SwathWidthY[k];
6975 SwathWidthSingleDPPC[k] = SwathWidthSingleDPPY[k];
6979 SwathWidthY[k] = SwathWidthSingleDPPY[k];
6980 SwathWidthC[k] = SwathWidthSingleDPPC[k];
6983 int surface_width_ub_l = dml_ceil(SurfaceWidthY[k], Read256BytesBlockWidthY[k]);
6984 int surface_height_ub_l = dml_ceil(SurfaceHeightY[k], Read256BytesBlockHeightY[k]);
6987 dml_print("DML::%s: k=%d surface_width_ub_l=%0d\n", __func__, k, surface_width_ub_l);
6990 if (SourceScan[k] != dm_vert) {
6991 MaximumSwathHeightY[k] = Read256BytesBlockHeightY[k];
6992 MaximumSwathHeightC[k] = Read256BytesBlockHeightC[k];
6993 …_width_luma_ub[k] = dml_min(surface_width_ub_l, (int) dml_ceil(SwathWidthY[k] - 1, Read256BytesBlo…
6994 if (BytePerPixC[k] > 0) {
6995 int surface_width_ub_c = dml_ceil(SurfaceWidthC[k], Read256BytesBlockWidthC[k]);
6997 swath_width_chroma_ub[k] = dml_min(
6999 (int) dml_ceil(SwathWidthC[k] - 1, Read256BytesBlockWidthC[k]) + Read256BytesBlockWidthC[k]);
7001 swath_width_chroma_ub[k] = 0;
7004 MaximumSwathHeightY[k] = Read256BytesBlockWidthY[k];
7005 MaximumSwathHeightC[k] = Read256BytesBlockWidthC[k];
7006 …idth_luma_ub[k] = dml_min(surface_height_ub_l, (int) dml_ceil(SwathWidthY[k] - 1, Read256BytesBloc…
7007 if (BytePerPixC[k] > 0) {
7008 int surface_height_ub_c = dml_ceil(SurfaceHeightC[k], Read256BytesBlockHeightC[k]);
7010 swath_width_chroma_ub[k] = dml_min(
7012 … (int) dml_ceil(SwathWidthC[k] - 1, Read256BytesBlockHeightC[k]) + Read256BytesBlockHeightC[k]);
7014 swath_width_chroma_ub[k] = 0;
7086 int HostVMDynamicLevels = 0, k; local
7102 for (k = 0; k < NumberOfActivePlanes; ++k)
7103 …ret = ret + NumberOfDPP[k] * dpte_group_bytes[k] * (1 + 8 * HostVMDynamicLevels) * HostVMInefficie…
7131 int dummy1, i, j, k; local
7153 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7155 … + v->NoOfDPP[i][j][k] * v->DPTEBytesPerRow[i][j][k] / (15.75 * v->HTotal[k] / v->PixelClock[k]);
7158 for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k)
7159 NoOfDPPState[k] = v->NoOfDPP[i][j][k];
7186 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7191 …LKCyclesRequiredInPrefetch[k] = (v->PrefetchLinesY[i][j][k] * v->swath_width_luma_ub_all_states[i]…
7192 …+ v->PrefetchLinesC[i][j][k] * v->swath_width_chroma_ub_all_states[i][j][k] * v->BytePerPixelC[k])…
7193 DCFCLKCyclesRequiredInPrefetch = 2 * ExtraLatencyCycles / NoOfDPPState[k]
7194 …+ v->PDEAndMetaPTEBytesPerFrame[i][j][k] / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth…
7195 + 2 * v->DPTEBytesPerRow[i][j][k] / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth
7196 …+ 2 * v->MetaRowBytes[i][j][k] / NormalEfficiency / v->ReturnBusWidth + PixelDCFCLKCyclesRequiredI…
7197 …PrefetchPixelLinesTime[k] = dml_max(v->PrefetchLinesY[i][j][k], v->PrefetchLinesC[i][j][k]) * v->H…
7198 …edPrefetchBWAcceleration = (v->VActivePixelBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k])
7199 / (v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k]);
7200 DynamicMetadataVMExtraLatency[k] =
7201 …(v->GPUVMEnable == true && v->DynamicMetadataEnable[k] == true && v->DynamicMetadataVMEnabled == t…
7203 … PrefetchTime = (v->MaximumVStartup[i][j][k] - 1) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait
7207 - DynamicMetadataVMExtraLatency[k];
7212 ExpectedVRatioPrefetch = PrefetchPixelLinesTime[k]
7213 / (PrefetchTime * PixelDCFCLKCyclesRequiredInPrefetch[k] / DCFCLKCyclesRequiredInPrefetch);
7214 …equiredForPeakBandwidthPerPlane[k] = NoOfDPPState[k] * PixelDCFCLKCyclesRequiredInPrefetch[k] / Pr…
7217 DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKRequiredForPeakBandwidthPerPlane[k]
7218 + NoOfDPPState[k] * DPTEBandwidth / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth;
7221 DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i];
7223 if (v->DynamicMetadataEnable[k] == true) {
7232 v->RequiredDPPCLK[i][j][k],
7235 v->PixelClock[k],
7236 v->HTotal[k],
7237 v->VTotal[k] - v->VActive[k],
7238 v->DynamicMetadataTransmittedBytes[k],
7239 v->DynamicMetadataLinesBeforeActiveRequired[k],
7240 v->Interlace[k],
7249 …llowedTimeForUrgentExtraLatency = v->MaximumVStartup[i][j][k] * v->HTotal[k] / v->PixelClock[k] - …
7250 - TdmsksPipe - DynamicMetadataVMExtraLatency[k];
7252 DCFCLKRequiredForPeakBandwidthPerPlane[k] = dml_max(
7253 DCFCLKRequiredForPeakBandwidthPerPlane[k],
7256 DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i];
7261 for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k)
7262 …uiredForPeakBandwidth = DCFCLKRequiredForPeakBandwidth + DCFCLKRequiredForPeakBandwidthPerPlane[k];
7269 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7272 …sw = (v->MaximumVStartup[i][j][k] - 2) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait - DynamicM…
7273 if (MaximumTvmPlus2Tr0PlusTsw <= MinimumTvmPlus2Tr0 + PrefetchPixelLinesTime[k] / 4) {
7278 …raLatencyCycles / (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0 - PrefetchPixelLinesTime[k] / 4),
7279 …(2 * ExtraLatencyCycles + PixelDCFCLKCyclesRequiredInPrefetch[k]) / (MaximumTvmPlus2Tr0PlusTsw - M…