Lines Matching refs:k

255 		unsigned int k,
2001 unsigned int j, k; local
2033 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2034 if (v->WritebackEnable[k]) {
2038 v->WritebackPixelFormat[k],
2039 v->PixelClock[k],
2040 v->WritebackHRatio[k],
2041 v->WritebackVRatio[k],
2042 v->WritebackHTaps[k],
2043 v->WritebackVTaps[k],
2044 v->WritebackSourceWidth[k],
2045 v->WritebackDestinationWidth[k],
2046 v->HTotal[k],
2051 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2052 if (v->HRatio[k] > 1) {
2053 v->PSCL_THROUGHPUT_LUMA[k] = dml_min(
2055 v->MaxPSCLToLBThroughput * v->HRatio[k] / dml_ceil(v->htaps[k] / 6.0, 1));
2057 v->PSCL_THROUGHPUT_LUMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
2060 v->DPPCLKUsingSingleDPPLuma = v->PixelClock[k]
2062 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
2063 dml_max(v->HRatio[k] * v->VRatio[k] / v->PSCL_THROUGHPUT_LUMA[k], 1.0));
2065 if ((v->htaps[k] > 6 || v->vtaps[k] > 6) && v->DPPCLKUsingSingleDPPLuma < 2 * v->PixelClock[k]) {
2066 v->DPPCLKUsingSingleDPPLuma = 2 * v->PixelClock[k];
2069 …if ((v->SourcePixelFormat[k] != dm_420_8 && v->SourcePixelFormat[k] != dm_420_10 && v->SourcePixel…
2070 && v->SourcePixelFormat[k] != dm_rgbe_alpha)) {
2071 v->PSCL_THROUGHPUT_CHROMA[k] = 0.0;
2072 v->DPPCLKUsingSingleDPP[k] = v->DPPCLKUsingSingleDPPLuma;
2074 if (v->HRatioChroma[k] > 1) {
2075 v->PSCL_THROUGHPUT_CHROMA[k] = dml_min(
2077 v->MaxPSCLToLBThroughput * v->HRatioChroma[k] / dml_ceil(v->HTAPsChroma[k] / 6.0, 1.0));
2079 v->PSCL_THROUGHPUT_CHROMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
2081 v->DPPCLKUsingSingleDPPChroma = v->PixelClock[k]
2083 v->VTAPsChroma[k] / 6.0 * dml_min(1.0, v->HRatioChroma[k]),
2084 v->HRatioChroma[k] * v->VRatioChroma[k] / v->PSCL_THROUGHPUT_CHROMA[k],
2087 …if ((v->HTAPsChroma[k] > 6 || v->VTAPsChroma[k] > 6) && v->DPPCLKUsingSingleDPPChroma < 2 * v->Pix…
2088 v->DPPCLKUsingSingleDPPChroma = 2 * v->PixelClock[k];
2091 v->DPPCLKUsingSingleDPP[k] = dml_max(v->DPPCLKUsingSingleDPPLuma, v->DPPCLKUsingSingleDPPChroma);
2095 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2096 if (v->BlendingAndTiming[k] != k)
2098 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1) {
2101 v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100)
2105 v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2106 } else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2109 v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100)
2113 v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2117 …v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100) * (1 + v->DISPCLKRampingMargin …
2120 v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100));
2143 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2144 …v->DPPCLK_calculated[k] = v->DPPCLKUsingSingleDPP[k] / v->DPPPerPlane[k] * (1 + v->DISPCLKDPPCLKDS…
2145 v->GlobalDPPCLK = dml_max(v->GlobalDPPCLK, v->DPPCLK_calculated[k]);
2148 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2149 …v->DPPCLK_calculated[k] = v->GlobalDPPCLK / 255 * dml_ceil(v->DPPCLK_calculated[k] * 255.0 / v->Gl…
2150 DTRACE(" dppclk_mhz[%i] (calculated) = %f", k, v->DPPCLK_calculated[k]);
2153 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2154 v->DPPCLK[k] = v->DPPCLK_calculated[k];
2161 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2163 v->SourcePixelFormat[k],
2164 v->SurfaceTiling[k],
2165 &v->BytePerPixelY[k],
2166 &v->BytePerPixelC[k],
2167 &v->BytePerPixelDETY[k],
2168 &v->BytePerPixelDETC[k],
2169 &v->BlockHeight256BytesY[k],
2170 &v->BlockHeight256BytesC[k],
2171 &v->BlockWidth256BytesY[k],
2172 &v->BlockWidth256BytesC[k]);
2206 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2207 …v->ReadBandwidthPlaneLuma[k] = v->SwathWidthSingleDPPY[k] * v->BytePerPixelY[k] / (v->HTotal[k] / …
2208 * v->VRatio[k];
2209 …v->ReadBandwidthPlaneChroma[k] = v->SwathWidthSingleDPPC[k] * v->BytePerPixelC[k] / (v->HTotal[k] …
2210 * v->VRatioChroma[k];
2211 …DTRACE(" read_bw[%i] = %fBps", k, v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k]);
2237 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2238 if ((v->BlendingAndTiming[k] != k) || !v->DSCEnabled[k]) {
2239 v->DSCCLK_calculated[k] = 0.0;
2241 if (v->OutputFormat[k] == dm_420)
2243 else if (v->OutputFormat[k] == dm_444)
2245 else if (v->OutputFormat[k] == dm_n422)
2249 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1)
2250 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 12 / v->DSCFormatFactor
2252 else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1)
2253 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 6 / v->DSCFormatFactor
2256 v->DSCCLK_calculated[k] = v->PixelClockBackEnd[k] / 3 / v->DSCFormatFactor
2262 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2263 double BPP = v->OutputBpp[k];
2265 if (v->DSCEnabled[k] && BPP != 0) {
2266 if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_disabled) {
2267 v->DSCDelay[k] = dscceComputeDelay(
2268 v->DSCInputBitPerComponent[k],
2270 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2271 v->NumberOfDSCSlices[k],
2272 v->OutputFormat[k],
2273 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]);
2274 } else if (v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2275 v->DSCDelay[k] = 2
2277 v->DSCInputBitPerComponent[k],
2279 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2280 v->NumberOfDSCSlices[k] / 2.0,
2281 v->OutputFormat[k],
2282 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
2284 v->DSCDelay[k] = 4
2286 v->DSCInputBitPerComponent[k],
2288 dml_ceil((double) v->HActive[k] / v->NumberOfDSCSlices[k], 1),
2289 v->NumberOfDSCSlices[k] / 4.0,
2290 v->OutputFormat[k],
2291 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
2293 v->DSCDelay[k] = v->DSCDelay[k] * v->PixelClock[k] / v->PixelClockBackEnd[k];
2295 v->DSCDelay[k] = 0;
2299 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2301 if (j != k && v->BlendingAndTiming[k] == j && v->DSCEnabled[j])
2302 v->DSCDelay[k] = v->DSCDelay[j];
2305 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2315 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
2316 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
2317 …if ((v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_420_12) && v->SourceSca…
2327 v->DCCEnable[k],
2328 v->BlockHeight256BytesC[k],
2329 v->BlockWidth256BytesC[k],
2330 v->SourcePixelFormat[k],
2331 v->SurfaceTiling[k],
2332 v->BytePerPixelC[k],
2333 v->SourceScan[k],
2334 v->SwathWidthC[k],
2335 v->ViewportHeightChroma[k],
2342 v->PitchC[k],
2343 v->DCCMetaPitchC[k],
2344 &v->MacroTileWidthC[k],
2348 &v->dpte_row_width_chroma_ub[k],
2349 &v->dpte_row_height_chroma[k],
2350 &v->meta_req_width_chroma[k],
2351 &v->meta_req_height_chroma[k],
2352 &v->meta_row_width_chroma[k],
2353 &v->meta_row_height_chroma[k],
2356 &v->PixelPTEReqWidthC[k],
2357 &v->PixelPTEReqHeightC[k],
2358 &v->PTERequestSizeC[k],
2359 &v->dpde0_bytes_per_frame_ub_c[k],
2360 &v->meta_pte_bytes_per_frame_ub_c[k]);
2362 v->PrefetchSourceLinesC[k] = CalculatePrefetchSourceLines(
2364 v->VRatioChroma[k],
2365 v->VTAPsChroma[k],
2366 v->Interlace[k],
2368 v->SwathHeightC[k],
2369 v->ViewportYStartC[k],
2370 &v->VInitPreFillC[k],
2371 &v->MaxNumSwathC[k]);
2378 v->MaxNumSwathC[k] = 0;
2379 v->PrefetchSourceLinesC[k] = 0;
2384 v->DCCEnable[k],
2385 v->BlockHeight256BytesY[k],
2386 v->BlockWidth256BytesY[k],
2387 v->SourcePixelFormat[k],
2388 v->SurfaceTiling[k],
2389 v->BytePerPixelY[k],
2390 v->SourceScan[k],
2391 v->SwathWidthY[k],
2392 v->ViewportHeight[k],
2399 v->PitchY[k],
2400 v->DCCMetaPitchY[k],
2401 &v->MacroTileWidthY[k],
2405 &v->dpte_row_width_luma_ub[k],
2406 &v->dpte_row_height[k],
2407 &v->meta_req_width[k],
2408 &v->meta_req_height[k],
2409 &v->meta_row_width[k],
2410 &v->meta_row_height[k],
2411 &v->vm_group_bytes[k],
2412 &v->dpte_group_bytes[k],
2413 &v->PixelPTEReqWidthY[k],
2414 &v->PixelPTEReqHeightY[k],
2415 &v->PTERequestSizeY[k],
2416 &v->dpde0_bytes_per_frame_ub_l[k],
2417 &v->meta_pte_bytes_per_frame_ub_l[k]);
2419 v->PrefetchSourceLinesY[k] = CalculatePrefetchSourceLines(
2421 v->VRatio[k],
2422 v->vtaps[k],
2423 v->Interlace[k],
2425 v->SwathHeightY[k],
2426 v->ViewportYStartY[k],
2427 &v->VInitPreFillY[k],
2428 &v->MaxNumSwathY[k]);
2429 v->PixelPTEBytesPerRow[k] = PixelPTEBytesPerRowY + PixelPTEBytesPerRowC;
2430 v->PDEAndMetaPTEBytesFrame[k] = PDEAndMetaPTEBytesFrameY + PDEAndMetaPTEBytesFrameC;
2431 v->MetaRowByte[k] = MetaRowByteY + MetaRowByteC;
2435 v->SourcePixelFormat[k],
2436 v->VRatio[k],
2437 v->VRatioChroma[k],
2438 v->DCCEnable[k],
2439 v->HTotal[k] / v->PixelClock[k],
2442 v->meta_row_height[k],
2443 v->meta_row_height_chroma[k],
2446 v->dpte_row_height[k],
2447 v->dpte_row_height_chroma[k],
2448 &v->meta_row_bw[k],
2449 &v->dpte_row_bw[k]);
2454 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2455 v->TotalActiveDPP = v->TotalActiveDPP + v->DPPPerPlane[k];
2456 if (v->DCCEnable[k])
2457 v->TotalDCCActiveDPP = v->TotalDCCActiveDPP + v->DPPPerPlane[k];
2458 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
2459 || v->SourcePixelFormat[k] == dm_rgbe_alpha)
2512 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2513 if (v->BlendingAndTiming[k] == k) {
2514 if (v->WritebackEnable[k] == true) {
2515 v->WritebackDelay[v->VoltageLevel][k] = v->WritebackLatency
2517 v->WritebackPixelFormat[k],
2518 v->WritebackHRatio[k],
2519 v->WritebackVRatio[k],
2520 v->WritebackVTaps[k],
2521 v->WritebackDestinationWidth[k],
2522 v->WritebackDestinationHeight[k],
2523 v->WritebackSourceHeight[k],
2524 v->HTotal[k]) / v->DISPCLK;
2526 v->WritebackDelay[v->VoltageLevel][k] = 0;
2528 if (v->BlendingAndTiming[j] == k && v->WritebackEnable[j] == true) {
2529 v->WritebackDelay[v->VoltageLevel][k] = dml_max(
2530 v->WritebackDelay[v->VoltageLevel][k],
2540 v->HTotal[k]) / v->DISPCLK);
2546 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2548 if (v->BlendingAndTiming[k] == j)
2549 v->WritebackDelay[v->VoltageLevel][k] = v->WritebackDelay[v->VoltageLevel][j];
2551 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2552 v->MaxVStartupLines[k] =
2553 (v->Interlace[k] && !v->ProgressiveToInterlaceUnitInOPP) ?
2554 dml_floor((v->VTotal[k] - v->VActive[k]) / 2.0, 1.0) :
2555 v->VTotal[k] - v->VActive[k]
2559 (double) v->WritebackDelay[v->VoltageLevel][k]
2560 / (v->HTotal[k] / v->PixelClock[k]),
2562 if (v->MaxVStartupLines[k] > 1023)
2563 v->MaxVStartupLines[k] = 1023;
2566 dml_print("DML::%s: k=%d MaxVStartupLines = %d\n", __func__, k, v->MaxVStartupLines[k]);
2567 dml_print("DML::%s: k=%d VoltageLevel = %d\n", __func__, k, v->VoltageLevel);
2568 …l_print("DML::%s: k=%d WritebackDelay = %f\n", __func__, k, v->WritebackDelay[v->VoltageLevel][k]);
2573 for (k = 0; k < v->NumberOfActivePlanes; ++k)
2574 v->MaximumMaxVStartupLines = dml_max(v->MaximumMaxVStartupLines, v->MaxVStartupLines[k]);
2603 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2606 myPipe.DPPCLK = v->DPPCLK[k];
2608 myPipe.PixelClock = v->PixelClock[k];
2610 myPipe.DPPPerPlane = v->DPPPerPlane[k];
2611 myPipe.ScalerEnabled = v->ScalerEnabled[k];
2612 myPipe.VRatio = v->VRatio[k];
2613 myPipe.VRatioChroma = v->VRatioChroma[k];
2614 myPipe.SourceScan = v->SourceScan[k];
2615 myPipe.BlockWidth256BytesY = v->BlockWidth256BytesY[k];
2616 myPipe.BlockHeight256BytesY = v->BlockHeight256BytesY[k];
2617 myPipe.BlockWidth256BytesC = v->BlockWidth256BytesC[k];
2618 myPipe.BlockHeight256BytesC = v->BlockHeight256BytesC[k];
2619 myPipe.InterlaceEnable = v->Interlace[k];
2620 myPipe.NumberOfCursors = v->NumberOfCursors[k];
2621 myPipe.VBlank = v->VTotal[k] - v->VActive[k];
2622 myPipe.HTotal = v->HTotal[k];
2623 myPipe.DCCEnable = v->DCCEnable[k];
2624 myPipe.ODMCombineIsEnabled = v->ODMCombineEnabled[k] == dm_odm_combine_mode_4to1
2625 || v->ODMCombineEnabled[k] == dm_odm_combine_mode_2to1;
2626 myPipe.SourcePixelFormat = v->SourcePixelFormat[k];
2627 myPipe.BytePerPixelY = v->BytePerPixelY[k];
2628 myPipe.BytePerPixelC = v->BytePerPixelC[k];
2630 v->ErrorResult[k] = CalculatePrefetchSchedule(
2634 v->DSCDelay[k],
2640 (unsigned int) (v->SwathWidthY[k] / v->HRatio[k]),
2641 v->OutputFormat[k],
2643 dml_min(v->VStartupLines, v->MaxVStartupLines[k]),
2644 v->MaxVStartupLines[k],
2650 v->DynamicMetadataEnable[k],
2652 v->DynamicMetadataLinesBeforeActiveRequired[k],
2653 v->DynamicMetadataTransmittedBytes[k],
2657 v->PDEAndMetaPTEBytesFrame[k],
2658 v->MetaRowByte[k],
2659 v->PixelPTEBytesPerRow[k],
2660 v->PrefetchSourceLinesY[k],
2661 v->SwathWidthY[k],
2662 v->VInitPreFillY[k],
2663 v->MaxNumSwathY[k],
2664 v->PrefetchSourceLinesC[k],
2665 v->SwathWidthC[k],
2666 v->VInitPreFillC[k],
2667 v->MaxNumSwathC[k],
2668 v->swath_width_luma_ub[k],
2669 v->swath_width_chroma_ub[k],
2670 v->SwathHeightY[k],
2671 v->SwathHeightC[k],
2673 &v->DSTXAfterScaler[k],
2674 &v->DSTYAfterScaler[k],
2675 &v->DestinationLinesForPrefetch[k],
2676 &v->PrefetchBandwidth[k],
2677 &v->DestinationLinesToRequestVMInVBlank[k],
2678 &v->DestinationLinesToRequestRowInVBlank[k],
2679 &v->VRatioPrefetchY[k],
2680 &v->VRatioPrefetchC[k],
2681 &v->RequiredPrefetchPixDataBWLuma[k],
2682 &v->RequiredPrefetchPixDataBWChroma[k],
2683 &v->NotEnoughTimeForDynamicMetadata[k],
2684 &v->Tno_bw[k],
2685 &v->prefetch_vmrow_bw[k],
2686 &v->Tdmdl_vm[k],
2687 &v->Tdmdl[k],
2688 &v->TSetup[k],
2689 &v->VUpdateOffsetPix[k],
2690 &v->VUpdateWidthPix[k],
2691 &v->VReadyOffsetPix[k]);
2694 dml_print("DML::%s: k=%0d Prefetch cal result=%0d\n", __func__, k, v->ErrorResult[k]);
2696 v->VStartup[k] = dml_min(v->VStartupLines, v->MaxVStartupLines[k]);
2702 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2703 v->cursor_bw[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
2704 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
2705 v->cursor_bw_pre[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
2706 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatioPrefetchY[k];
2709 v->swath_width_luma_ub[k],
2710 v->swath_width_chroma_ub[k],
2711 v->SwathHeightY[k],
2712 v->SwathHeightC[k],
2713 v->HTotal[k] / v->PixelClock[k],
2716 v->CursorWidth[k][0],
2717 v->CursorBPP[k][0],
2718 v->VRatio[k],
2719 v->VRatioChroma[k],
2720 v->BytePerPixelDETY[k],
2721 v->BytePerPixelDETC[k],
2722 v->DETBufferSizeY[k],
2723 v->DETBufferSizeC[k],
2724 &v->UrgBurstFactorCursor[k],
2725 &v->UrgBurstFactorLuma[k],
2726 &v->UrgBurstFactorChroma[k],
2727 &v->NoUrgentLatencyHiding[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->VRatioPrefetchY[k],
2740 v->VRatioPrefetchC[k],
2741 v->BytePerPixelDETY[k],
2742 v->BytePerPixelDETC[k],
2743 v->DETBufferSizeY[k],
2744 v->DETBufferSizeC[k],
2745 &v->UrgBurstFactorCursorPre[k],
2746 &v->UrgBurstFactorLumaPre[k],
2747 &v->UrgBurstFactorChromaPre[k],
2748 &v->NoUrgentLatencyHidingPre[k]);
2752 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2753 v->ReadBandwidthPlaneLuma[k] * v->UrgBurstFactorLuma[k]
2754 + v->ReadBandwidthPlaneChroma[k] * v->UrgBurstFactorChroma[k]
2755 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k]
2756 + v->DPPPerPlane[k] * (v->meta_row_bw[k] + v->dpte_row_bw[k]),
2757 v->DPPPerPlane[k]
2758 * (v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2759 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2760 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2764 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2765 v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k] + v->cursor_bw[k]
2766 + v->DPPPerPlane[k] * (v->meta_row_bw[k] + v->dpte_row_bw[k]),
2767 … v->DPPPerPlane[k] * (v->RequiredPrefetchPixDataBWLuma[k] + v->RequiredPrefetchPixDataBWChroma[k])
2768 + v->cursor_bw_pre[k]);
2771 dml_print("DML::%s: k=%0d DPPPerPlane=%d\n", __func__, k, v->DPPPerPlane[k]);
2772 dml_print("DML::%s: k=%0d UrgBurstFactorLuma=%f\n", __func__, k, v->UrgBurstFactorLuma[k]);
2773 dml_print("DML::%s: k=%0d UrgBurstFactorChroma=%f\n", __func__, k, v->UrgBurstFactorChroma[k]);
2774 dml_print("DML::%s: k=%0d UrgBurstFactorLumaPre=%f\n", __func__, k, v->UrgBurstFactorLumaPre[k]);
2775 …l_print("DML::%s: k=%0d UrgBurstFactorChromaPre=%f\n", __func__, k, v->UrgBurstFactorChromaPre[k]);
2777 dml_print("DML::%s: k=%0d VRatioPrefetchY=%f\n", __func__, k, v->VRatioPrefetchY[k]);
2778 dml_print("DML::%s: k=%0d VRatioY=%f\n", __func__, k, v->VRatio[k]);
2780 dml_print("DML::%s: k=%0d prefetch_vmrow_bw=%f\n", __func__, k, v->prefetch_vmrow_bw[k]);
2781 …dml_print("DML::%s: k=%0d ReadBandwidthPlaneLuma=%f\n", __func__, k, v->ReadBandwidthPlaneLuma[k]);
2782 …print("DML::%s: k=%0d ReadBandwidthPlaneChroma=%f\n", __func__, k, v->ReadBandwidthPlaneChroma[k]);
2783 dml_print("DML::%s: k=%0d cursor_bw=%f\n", __func__, k, v->cursor_bw[k]);
2784 dml_print("DML::%s: k=%0d meta_row_bw=%f\n", __func__, k, v->meta_row_bw[k]);
2785 dml_print("DML::%s: k=%0d dpte_row_bw=%f\n", __func__, k, v->dpte_row_bw[k]);
2786 …::%s: k=%0d RequiredPrefetchPixDataBWLuma=%f\n", __func__, k, v->RequiredPrefetchPixDataBWLuma[k]);
2787 …: k=%0d RequiredPrefetchPixDataBWChroma=%f\n", __func__, k, v->RequiredPrefetchPixDataBWChroma[k]);
2788 dml_print("DML::%s: k=%0d cursor_bw_pre=%f\n", __func__, k, v->cursor_bw_pre[k]);
2789 …dml_print("DML::%s: k=%0d MaxTotalRDBandwidthNoUrgentBurst=%f\n", __func__, k, MaxTotalRDBandwidth…
2792 if (v->DestinationLinesForPrefetch[k] < 2)
2795 if (v->VRatioPrefetchY[k] > 4 || v->VRatioPrefetchC[k] > 4)
2798 if (v->NoUrgentLatencyHiding[k] == true)
2801 if (v->NoUrgentLatencyHidingPre[k] == true)
2827 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2828 if (v->ErrorResult[k] == true || v->NotEnoughTimeForDynamicMetadata[k] == true) {
2836 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2839 v->ReadBandwidthPlaneLuma[k] * v->UrgBurstFactorLuma[k]
2840 + v->ReadBandwidthPlaneChroma[k] * v->UrgBurstFactorChroma[k]
2841 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k],
2842 v->DPPPerPlane[k]
2843 * (v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2844 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2845 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2849 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2851 …+ v->DPPPerPlane[k] * (v->PDEAndMetaPTEBytesFrame[k] + v->MetaRowByte[k] + v->PixelPTEBytesPerRow[
2853 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2856 k,
2860 v->PDEAndMetaPTEBytesFrame[k],
2861 v->MetaRowByte[k],
2862 v->PixelPTEBytesPerRow[k]);
2867 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2870 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2871 v->DPPPerPlane[k] * v->final_flip_bw[k]
2872 + v->ReadBandwidthLuma[k] * v->UrgBurstFactorLuma[k]
2873 + v->ReadBandwidthChroma[k] * v->UrgBurstFactorChroma[k]
2874 + v->cursor_bw[k] * v->UrgBurstFactorCursor[k],
2875 v->DPPPerPlane[k]
2876 * (v->final_flip_bw[k]
2877 + v->RequiredPrefetchPixDataBWLuma[k] * v->UrgBurstFactorLumaPre[k]
2878 + v->RequiredPrefetchPixDataBWChroma[k] * v->UrgBurstFactorChromaPre[k])
2879 + v->cursor_bw_pre[k] * v->UrgBurstFactorCursorPre[k]);
2882 v->DPPPerPlane[k] * v->prefetch_vmrow_bw[k],
2883 v->DPPPerPlane[k] * v->final_flip_bw[k] + v->ReadBandwidthPlaneLuma[k]
2884 + v->ReadBandwidthPlaneChroma[k] + v->cursor_bw[k],
2885 v->DPPPerPlane[k]
2886 * (v->final_flip_bw[k] + v->RequiredPrefetchPixDataBWLuma[k]
2887 + v->RequiredPrefetchPixDataBWChroma[k]) + v->cursor_bw_pre[k]);
2899 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2900 if (v->ImmediateFlipSupportedForPipe[k] == false) {
2903 __func__, k);
2972 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
2973 if (v->WritebackEnable[k] == true) {
2974 v->WritebackAllowDRAMClockChangeEndPosition[k] = dml_max(
2976 v->VStartup[k] * v->HTotal[k] / v->PixelClock[k] - v->WritebackDRAMClockChangeWatermark);
2978 v->WritebackAllowDRAMClockChangeEndPosition[k] = 0;
3093 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3095 v->AllowDRAMClockChangeDuringVBlank[k] = true;
3096 v->AllowDRAMSelfRefreshDuringVBlank[k] = true;
3097 v->MinTTUVBlank[k] = dml_max(
3101 v->AllowDRAMClockChangeDuringVBlank[k] = false;
3102 v->AllowDRAMSelfRefreshDuringVBlank[k] = true;
3103 v->MinTTUVBlank[k] = dml_max(v->StutterEnterPlusExitWatermark, v->UrgentWatermark);
3105 v->AllowDRAMClockChangeDuringVBlank[k] = false;
3106 v->AllowDRAMSelfRefreshDuringVBlank[k] = false;
3107 v->MinTTUVBlank[k] = v->UrgentWatermark;
3109 if (!v->DynamicMetadataEnable[k])
3110 v->MinTTUVBlank[k] = v->TCalc + v->MinTTUVBlank[k];
3115 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3116 …CalculateDCCConfiguration(v->DCCEnable[k], false, // We should always know the direction DCCProgra…
3117 v->SourcePixelFormat[k],
3118 v->SurfaceWidthY[k],
3119 v->SurfaceWidthC[k],
3120 v->SurfaceHeightY[k],
3121 v->SurfaceHeightC[k],
3122 v->DETBufferSizeInKByte[k] * 1024,
3123 v->BlockHeight256BytesY[k],
3124 v->BlockHeight256BytesC[k],
3125 v->SurfaceTiling[k],
3126 v->BytePerPixelY[k],
3127 v->BytePerPixelC[k],
3128 v->BytePerPixelDETY[k],
3129 v->BytePerPixelDETC[k],
3130 v->SourceScan[k],
3131 &v->DCCYMaxUncompressedBlock[k],
3132 &v->DCCCMaxUncompressedBlock[k],
3133 &v->DCCYMaxCompressedBlock[k],
3134 &v->DCCCMaxCompressedBlock[k],
3135 &v->DCCYIndependentBlock[k],
3136 &v->DCCCIndependentBlock[k]);
3140 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3142 …double Tvstartup_margin = (v->MaxVStartupLines[k] - v->VStartup[k]) * v->HTotal[k] / v->PixelClock…
3144 dml_print("DML::%s: k=%d, MinTTUVBlank = %f (before margin)\n", __func__, k, v->MinTTUVBlank[k]);
3147 v->MinTTUVBlank[k] = v->MinTTUVBlank[k] + Tvstartup_margin;
3150 dml_print("DML::%s: k=%d, Tvstartup_margin = %f\n", __func__, k, Tvstartup_margin);
3151 dml_print("DML::%s: k=%d, MaxVStartupLines = %d\n", __func__, k, v->MaxVStartupLines[k]);
3152 dml_print("DML::%s: k=%d, VStartup = %d\n", __func__, k, v->VStartup[k]);
3153 dml_print("DML::%s: k=%d, MinTTUVBlank = %f\n", __func__, k, v->MinTTUVBlank[k]);
3156 v->Tdmdl[k] = v->Tdmdl[k] + Tvstartup_margin;
3157 if (v->DynamicMetadataEnable[k] && v->DynamicMetadataVMEnabled) {
3158 v->Tdmdl_vm[k] = v->Tdmdl_vm[k] + Tvstartup_margin;
3161 isInterlaceTiming = (v->Interlace[k] && !v->ProgressiveToInterlaceUnitInOPP);
3163 …v->MIN_DST_Y_NEXT_START[k] = ((isInterlaceTiming ? dml_floor((v->VTotal[k] - v->VFrontPorch[k]) / …
3164 - v->VFrontPorch[k])
3165 …+ dml_max(1.0, dml_ceil(v->WritebackDelay[v->VoltageLevel][k] / (v->HTotal[k] / v->PixelClock[k]),…
3166 + dml_floor(4.0 * v->TSetup[k] / (v->HTotal[k] / v->PixelClock[k]), 1.0) / 4.0;
3168 v->VStartup[k] = (isInterlaceTiming ? (2 * v->MaxVStartupLines[k]) : v->MaxVStartupLines[k]);
3170 if (((v->VUpdateOffsetPix[k] + v->VUpdateWidthPix[k] + v->VReadyOffsetPix[k]) / v->HTotal[k])
3172 dml_floor((v->VTotal[k] - v->VActive[k] - v->VFrontPorch[k] - v->VStartup[k]) / 2.0, 1.0) :
3173 (int) (v->VTotal[k] - v->VActive[k] - v->VFrontPorch[k] - v->VStartup[k]))) {
3174 v->VREADY_AT_OR_AFTER_VSYNC[k] = true;
3176 v->VREADY_AT_OR_AFTER_VSYNC[k] = false;
3179 dml_print("DML::%s: k=%d, VStartup = %d (max)\n", __func__, k, v->VStartup[k]);
3180 dml_print("DML::%s: k=%d, VUpdateOffsetPix = %d\n", __func__, k, v->VUpdateOffsetPix[k]);
3181 dml_print("DML::%s: k=%d, VUpdateWidthPix = %d\n", __func__, k, v->VUpdateWidthPix[k]);
3182 dml_print("DML::%s: k=%d, VReadyOffsetPix = %d\n", __func__, k, v->VReadyOffsetPix[k]);
3183 dml_print("DML::%s: k=%d, HTotal = %d\n", __func__, k, v->HTotal[k]);
3184 dml_print("DML::%s: k=%d, VTotal = %d\n", __func__, k, v->VTotal[k]);
3185 dml_print("DML::%s: k=%d, VActive = %d\n", __func__, k, v->VActive[k]);
3186 dml_print("DML::%s: k=%d, VFrontPorch = %d\n", __func__, k, v->VFrontPorch[k]);
3187 dml_print("DML::%s: k=%d, VStartup = %d\n", __func__, k, v->VStartup[k]);
3188 dml_print("DML::%s: k=%d, MIN_DST_Y_NEXT_START = %f\n", __func__, k, v->MIN_DST_Y_NEXT_START[k]);
3189 …int("DML::%s: k=%d, VREADY_AT_OR_AFTER_VSYNC = %d\n", __func__, k, v->VREADY_AT_OR_AFTER_VSYNC[k]);
3198 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3199 if (v->WritebackEnable[k] == true && v->WritebackPixelFormat[k] == dm_444_32) {
3200 WRBandwidth = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3201 / (v->HTotal[k] * v->WritebackSourceHeight[k] / v->PixelClock[k]) * 4;
3202 } else if (v->WritebackEnable[k] == true) {
3203 WRBandwidth = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3204 / (v->HTotal[k] * v->WritebackSourceHeight[k] / v->PixelClock[k]) * 8;
3211 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3212 …dwidth = v->TotalDataReadBandwidth + v->ReadBandwidthPlaneLuma[k] + v->ReadBandwidthPlaneChroma[k];
3297 unsigned int k; local
3299 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
3302 v->SourcePixelFormat[k],
3303 v->SurfaceTiling[k],
3304 &BytePerPixY[k],
3305 &BytePerPixC[k],
3306 &BytePerPixDETY[k],
3307 &BytePerPixDETC[k],
3308 &Read256BytesBlockHeightY[k],
3309 &Read256BytesBlockHeightC[k],
3310 &Read256BytesBlockWidthY[k],
3311 &Read256BytesBlockWidthC[k]);
3495 unsigned int k, argument
3509 double LineTime = v->HTotal[k] / v->PixelClock[k];
3517 if (v->GPUVMEnable == true || v->DCCEnable[k] == true) {
3523 v->Tno_bw[k] + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW,
3530 …v->DestinationLinesToRequestVMInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediate…
3531 if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
3540 …v->DestinationLinesToRequestRowInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImme…
3543 v->final_flip_bw[k] = dml_max(
3544 …erFrame * HostVMInefficiencyFactor / (v->DestinationLinesToRequestVMInImmediateFlip[k] * LineTime),
3545 …rRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime));
3546 } else if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) {
3547 …v->final_flip_bw[k] = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->Destinatio…
3549 v->final_flip_bw[k] = 0;
3552 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
3553 if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
3554 …me = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->dpte_row_height_chroma[k] * LineT…
3555 } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
3556 …me = dml_min(v->meta_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height_chroma[k] * LineT…
3559 v->dpte_row_height[k] * LineTime / v->VRatio[k],
3560 v->meta_row_height[k] * LineTime / v->VRatio[k],
3561 v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k],
3562 v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]);
3565 if (v->GPUVMEnable == true && v->DCCEnable[k] != true) {
3566 min_row_time = v->dpte_row_height[k] * LineTime / v->VRatio[k];
3567 } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) {
3568 min_row_time = v->meta_row_height[k] * LineTime / v->VRatio[k];
3570 …row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height[k] * LineTi…
3574 …v->DestinationLinesToRequestVMInImmediateFlip[k] >= 32 || v->DestinationLinesToRequestRowInImmedia…
3576 v->ImmediateFlipSupportedForPipe[k] = false;
3578 v->ImmediateFlipSupportedForPipe[k] = true;
3582 …nesToRequestVMInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestVMInImmediateFlip[k]);
3583 …sToRequestRowInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestRowInImmediateFlip[k]);
3587 …nt("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, v->ImmediateFlipSupportedForPipe[k]);
3690 unsigned k) argument
3695 myPipe.DPPCLK = v->RequiredDPPCLK[i][j][k];
3697 myPipe.PixelClock = v->PixelClock[k];
3699 myPipe.DPPPerPlane = v->NoOfDPP[i][j][k];
3700 myPipe.ScalerEnabled = v->ScalerEnabled[k];
3701 myPipe.VRatio = mode_lib->vba.VRatio[k];
3702 myPipe.VRatioChroma = mode_lib->vba.VRatioChroma[k];
3704 myPipe.SourceScan = v->SourceScan[k];
3705 myPipe.BlockWidth256BytesY = v->Read256BlockWidthY[k];
3706 myPipe.BlockHeight256BytesY = v->Read256BlockHeightY[k];
3707 myPipe.BlockWidth256BytesC = v->Read256BlockWidthC[k];
3708 myPipe.BlockHeight256BytesC = v->Read256BlockHeightC[k];
3709 myPipe.InterlaceEnable = v->Interlace[k];
3710 myPipe.NumberOfCursors = v->NumberOfCursors[k];
3711 myPipe.VBlank = v->VTotal[k] - v->VActive[k];
3712 myPipe.HTotal = v->HTotal[k];
3713 myPipe.DCCEnable = v->DCCEnable[k];
3714 myPipe.ODMCombineIsEnabled = v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1
3715 || v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1;
3716 myPipe.SourcePixelFormat = v->SourcePixelFormat[k];
3717 myPipe.BytePerPixelY = v->BytePerPixelY[k];
3718 myPipe.BytePerPixelC = v->BytePerPixelC[k];
3720 v->NoTimeForPrefetch[i][j][k] = CalculatePrefetchSchedule(
3724 v->DSCDelayPerState[i][k],
3730 v->SwathWidthYThisState[k] / v->HRatio[k],
3731 v->OutputFormat[k],
3733 dml_min(v->MaxVStartup, v->MaximumVStartup[i][j][k]),
3734 v->MaximumVStartup[i][j][k],
3740 v->DynamicMetadataEnable[k],
3742 v->DynamicMetadataLinesBeforeActiveRequired[k],
3743 v->DynamicMetadataTransmittedBytes[k],
3747 v->PDEAndMetaPTEBytesPerFrame[i][j][k],
3748 v->MetaRowBytes[i][j][k],
3749 v->DPTEBytesPerRow[i][j][k],
3750 v->PrefetchLinesY[i][j][k],
3751 v->SwathWidthYThisState[k],
3752 v->PrefillY[k],
3753 v->MaxNumSwY[k],
3754 v->PrefetchLinesC[i][j][k],
3755 v->SwathWidthCThisState[k],
3756 v->PrefillC[k],
3757 v->MaxNumSwC[k],
3758 v->swath_width_luma_ub_this_state[k],
3759 v->swath_width_chroma_ub_this_state[k],
3760 v->SwathHeightYThisState[k],
3761 v->SwathHeightCThisState[k],
3763 &v->DSTXAfterScaler[k],
3764 &v->DSTYAfterScaler[k],
3765 &v->LineTimesForPrefetch[k],
3766 &v->PrefetchBW[k],
3767 &v->LinesForMetaPTE[k],
3768 &v->LinesForMetaAndDPTERow[k],
3769 &v->VRatioPreY[i][j][k],
3770 &v->VRatioPreC[i][j][k],
3771 &v->RequiredPrefetchPixelDataBWLuma[i][j][k],
3772 &v->RequiredPrefetchPixelDataBWChroma[i][j][k],
3773 &v->NoTimeForDynamicMetadata[i][j][k],
3774 &v->Tno_bw[k],
3775 &v->prefetch_vmrow_bw[k],
3776 &v->dummy7[k],
3777 &v->dummy8[k],
3778 &v->dummy13[k],
3779 &v->VUpdateOffsetPix[k],
3780 &v->VUpdateWidthPix[k],
3781 &v->VReadyOffsetPix[k]);
3802 unsigned int k, m; local
3823 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3824 if (v->ScalerEnabled[k] == false
3825 && ((v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
3826 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_mono_16
3827 && v->SourcePixelFormat[k] != dm_mono_8 && v->SourcePixelFormat[k] != dm_rgbe
3828 && v->SourcePixelFormat[k] != dm_rgbe_alpha) || v->HRatio[k] != 1.0 || v->htaps[k] != 1.0
3829 || v->VRatio[k] != 1.0 || v->vtaps[k] != 1.0)) {
3831 } else if (v->vtaps[k] < 1.0 || v->vtaps[k] > 8.0 || v->htaps[k] < 1.0 || v->htaps[k] > 8.0
3832 || (v->htaps[k] > 1.0 && (v->htaps[k] % 2) == 1) || v->HRatio[k] > v->MaxHSCLRatio
3833 || v->VRatio[k] > v->MaxVSCLRatio || v->HRatio[k] > v->htaps[k]
3834 || v->VRatio[k] > v->vtaps[k]
3835 || (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
3836 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_mono_16
3837 && v->SourcePixelFormat[k] != dm_mono_8 && v->SourcePixelFormat[k] != dm_rgbe
3838 && (v->VTAPsChroma[k] < 1 || v->VTAPsChroma[k] > 8 || v->HTAPsChroma[k] < 1
3839 || v->HTAPsChroma[k] > 8 || (v->HTAPsChroma[k] > 1 && v->HTAPsChroma[k] % 2 == 1)
3840 || v->HRatioChroma[k] > v->MaxHSCLRatio
3841 || v->VRatioChroma[k] > v->MaxVSCLRatio
3842 || v->HRatioChroma[k] > v->HTAPsChroma[k]
3843 || v->VRatioChroma[k] > v->VTAPsChroma[k]))) {
3850 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3851 …if ((v->SurfaceTiling[k] == dm_sw_linear && (!(v->SourceScan[k] != dm_vert) || v->DCCEnable[k] == …
3852 || ((v->SurfaceTiling[k] == dm_sw_64kb_d || v->SurfaceTiling[k] == dm_sw_64kb_d_t
3853 || v->SurfaceTiling[k] == dm_sw_64kb_d_x) && !(v->SourcePixelFormat[k] == dm_444_64))) {
3859 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3861 v->SourcePixelFormat[k],
3862 v->SurfaceTiling[k],
3863 &v->BytePerPixelY[k],
3864 &v->BytePerPixelC[k],
3865 &v->BytePerPixelInDETY[k],
3866 &v->BytePerPixelInDETC[k],
3867 &v->Read256BlockHeightY[k],
3868 &v->Read256BlockHeightC[k],
3869 &v->Read256BlockWidthY[k],
3870 &v->Read256BlockWidthC[k]);
3872 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3873 if (v->SourceScan[k] != dm_vert) {
3874 v->SwathWidthYSingleDPP[k] = v->ViewportWidth[k];
3875 v->SwathWidthCSingleDPP[k] = v->ViewportWidthChroma[k];
3877 v->SwathWidthYSingleDPP[k] = v->ViewportHeight[k];
3878 v->SwathWidthCSingleDPP[k] = v->ViewportHeightChroma[k];
3881 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3882 v->ReadBandwidthLuma[k] = v->SwathWidthYSingleDPP[k] * dml_ceil(v->BytePerPixelInDETY[k], 1.0)
3883 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
3884 …v->ReadBandwidthChroma[k] = v->SwathWidthYSingleDPP[k] / 2 * dml_ceil(v->BytePerPixelInDETC[k], 2.…
3885 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k] / 2.0;
3887 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3888 if (v->WritebackEnable[k] == true && v->WritebackPixelFormat[k] == dm_444_64) {
3889 v->WriteBandwidth[k] = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3890 / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 8.0;
3891 } else if (v->WritebackEnable[k] == true) {
3892 v->WriteBandwidth[k] = v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]
3893 / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4.0;
3895 v->WriteBandwidth[k] = 0.0;
3902 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3903 …if (v->WritebackEnable[k] == true && (v->WriteBandwidth[k] > v->WritebackInterfaceBufferSize * 102…
3911 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3912 if (v->WritebackEnable[k] == true) {
3924 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3925 if (v->WritebackEnable[k] == true) {
3926 …if (v->WritebackHRatio[k] > v->WritebackMaxHSCLRatio || v->WritebackVRatio[k] > v->WritebackMaxVSC…
3927 || v->WritebackHRatio[k] < v->WritebackMinHSCLRatio
3928 || v->WritebackVRatio[k] < v->WritebackMinVSCLRatio
3929 || v->WritebackHTaps[k] > v->WritebackMaxHSCLTaps
3930 || v->WritebackVTaps[k] > v->WritebackMaxVSCLTaps
3931 || v->WritebackHRatio[k] > v->WritebackHTaps[k] || v->WritebackVRatio[k] > v->WritebackVTaps[k]
3932 || (v->WritebackHTaps[k] > 2.0 && ((v->WritebackHTaps[k] % 2) == 1))) {
3935 …if (2.0 * v->WritebackDestinationWidth[k] * (v->WritebackVTaps[k] - 1) * 57 > v->WritebackLineBuff…
3943 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3944 if (v->WritebackEnable[k] == true) {
3948 v->WritebackPixelFormat[k],
3949 v->PixelClock[k],
3950 v->WritebackHRatio[k],
3951 v->WritebackVRatio[k],
3952 v->WritebackHTaps[k],
3953 v->WritebackVTaps[k],
3954 v->WritebackSourceWidth[k],
3955 v->WritebackDestinationWidth[k],
3956 v->HTotal[k],
3960 for (k = 0; k < v->NumberOfActivePlanes; k++) {
3961 if (v->HRatio[k] > 1.0) {
3962 v->PSCL_FACTOR[k] = dml_min(
3964 v->MaxPSCLToLBThroughput * v->HRatio[k] / dml_ceil(v->htaps[k] / 6.0, 1.0));
3966 v->PSCL_FACTOR[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
3968 if (v->BytePerPixelC[k] == 0.0) {
3969 v->PSCL_FACTOR_CHROMA[k] = 0.0;
3970 v->MinDPPCLKUsingSingleDPP[k] = v->PixelClock[k]
3972 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
3973 v->HRatio[k] * v->VRatio[k] / v->PSCL_FACTOR[k],
3975 …if ((v->htaps[k] > 6.0 || v->vtaps[k] > 6.0) && v->MinDPPCLKUsingSingleDPP[k] < 2.0 * v->PixelCloc…
3976 v->MinDPPCLKUsingSingleDPP[k] = 2.0 * v->PixelClock[k];
3979 if (v->HRatioChroma[k] > 1.0) {
3980 v->PSCL_FACTOR_CHROMA[k] = dml_min(
3982 v->MaxPSCLToLBThroughput * v->HRatioChroma[k] / dml_ceil(v->HTAPsChroma[k] / 6.0, 1.0));
3984 v->PSCL_FACTOR_CHROMA[k] = dml_min(v->MaxDCHUBToPSCLThroughput, v->MaxPSCLToLBThroughput);
3986 v->MinDPPCLKUsingSingleDPP[k] = v->PixelClock[k]
3988 v->vtaps[k] / 6.0 * dml_min(1.0, v->HRatio[k]),
3989 v->HRatio[k] * v->VRatio[k] / v->PSCL_FACTOR[k],
3990 v->VTAPsChroma[k] / 6.0 * dml_min(1.0, v->HRatioChroma[k]),
3991 v->HRatioChroma[k] * v->VRatioChroma[k] / v->PSCL_FACTOR_CHROMA[k],
3993 … if ((v->htaps[k] > 6.0 || v->vtaps[k] > 6.0 || v->HTAPsChroma[k] > 6.0 || v->VTAPsChroma[k] > 6.0)
3994 && v->MinDPPCLKUsingSingleDPP[k] < 2.0 * v->PixelClock[k]) {
3995 v->MinDPPCLKUsingSingleDPP[k] = 2.0 * v->PixelClock[k];
3999 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4003 if (v->SurfaceTiling[k] == dm_sw_linear) {
4005 } else if (v->SourceScan[k] == dm_vert && v->BytePerPixelC[k] > 0) {
4007 } else if (v->SourcePixelFormat[k] == dm_rgbe_alpha) {
4013 …if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelF…
4018 …umSwathWidthInLineBufferLuma = v->LineBufferSize * dml_max(v->HRatio[k], 1.0) / v->LBBitPerPixel[k]
4019 / (v->vtaps[k] + dml_max(dml_ceil(v->VRatio[k], 1.0) - 2, 0.0));
4020 if (v->BytePerPixelC[k] == 0.0) {
4023 …idthInLineBufferChroma = v->LineBufferSize * dml_max(v->HRatioChroma[k], 1.0) / v->LBBitPerPixel[k]
4024 / (v->VTAPsChroma[k] + dml_max(dml_ceil(v->VRatioChroma[k], 1.0) - 2, 0.0));
4026 …v->MaximumSwathWidthLuma[k] = dml_min(MaximumSwathWidthSupportLuma, v->MaximumSwathWidthInLineBuff…
4027 …v->MaximumSwathWidthChroma[k] = dml_min(MaximumSwathWidthSupportChroma, v->MaximumSwathWidthInLine…
4077 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4078 …v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpr…
4083 v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k]
4086 …v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDown…
4091 v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2
4094 …v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDown…
4099 v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4
4104 || !(v->Output[k] == dm_dp ||
4105 v->Output[k] == dm_dp2p0 ||
4106 v->Output[k] == dm_edp)) {
4107 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4110 if (v->HActive[k] / 2 > DCN31_MAX_FMT_420_BUFFER_WIDTH)
4113 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4117 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4120 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4123 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4126 if (v->DSCEnabled[k] && v->HActive[k] > DCN31_MAX_DSC_IMAGE_WIDTH
4127 && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) {
4128 if (v->HActive[k] / 2 > DCN31_MAX_DSC_IMAGE_WIDTH) {
4129 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4132 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4136 if (v->OutputFormat[k] == dm_420 && v->HActive[k] > DCN31_MAX_FMT_420_BUFFER_WIDTH
4137 && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) {
4138 if (v->Output[k] == dm_hdmi) {
4140 } else if (v->HActive[k] / 2 > DCN31_MAX_FMT_420_BUFFER_WIDTH) {
4141 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1;
4144 if (v->HActive[k] / 4 > DCN31_MAX_FMT_420_BUFFER_WIDTH)
4147 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_2to1;
4151 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1) {
4152 v->MPCCombine[i][j][k] = false;
4153 v->NoOfDPP[i][j][k] = 4;
4154 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4155 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4156 v->MPCCombine[i][j][k] = false;
4157 v->NoOfDPP[i][j][k] = 2;
4158 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4160 || (v->MinDPPCLKUsingSingleDPP[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4161 …<= v->MaxDppclkRoundedDownToDFSGranularity && v->SingleDPPViewportSizeSupportPerPlane[k] == true))…
4162 v->MPCCombine[i][j][k] = false;
4163 v->NoOfDPP[i][j][k] = 1;
4164 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpre…
4166 v->MPCCombine[i][j][k] = true;
4167 v->NoOfDPP[i][j][k] = 2;
4168 …v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpre…
4171 …if ((v->MinDPPCLKUsingSingleDPP[k] / v->NoOfDPP[i][j][k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4176 …>project == DML_PROJECT_DCN315 && v->DETSizeOverride[k] > DCN3_15_MAX_DET_SIZE && v->NoOfDPP[i][j]…
4177 v->MPCCombine[i][j][k] = true;
4178 v->NoOfDPP[i][j][k] = 2;
4183 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4184 v->TotalNumberOfActiveDPP[i][j] = v->TotalNumberOfActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4185 if (v->NoOfDPP[i][j][k] == 1)
4187 if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10
4188 || v->SourcePixelFormat[k] == dm_420_12 || v->SourcePixelFormat[k] == dm_rgbe_alpha)
4200 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4201 if (v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k] > BWOfNonSplitPlaneOfMaximumBandwidth
4202 …&& v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_disabled && v->MPCCombine[i][j][k] == …
4203 BWOfNonSplitPlaneOfMaximumBandwidth = v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k];
4204 NumberOfNonSplitPlaneOfMaximumBandwidth = k;
4219 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4220 v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_disabled;
4221 …if (v->SingleDPPViewportSizeSupportPerPlane[k] == false && v->WhenToDoMPCCombine != dm_mpc_never) {
4222 v->MPCCombine[i][j][k] = true;
4223 v->NoOfDPP[i][j][k] = 2;
4224 v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k]
4227 v->MPCCombine[i][j][k] = false;
4228 v->NoOfDPP[i][j][k] = 1;
4229 v->RequiredDPPCLK[i][j][k] = v->MinDPPCLKUsingSingleDPP[k]
4234 … v->PlaneRequiredDISPCLK = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4237 … v->PlaneRequiredDISPCLK = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
4240 …if ((v->MinDPPCLKUsingSingleDPP[k] / v->NoOfDPP[i][j][k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpread…
4247 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4248 v->TotalNumberOfActiveDPP[i][j] = v->TotalNumberOfActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4272 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4273 …if (!(v->DSCInputBitPerComponent[k] == 12.0 || v->DSCInputBitPerComponent[k] == 10.0 || v->DSCInpu…
4274 || v->DSCInputBitPerComponent[k] > v->MaximumDSCBitsPerComponent) {
4280 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4281 if (v->BlendingAndTiming[k] == k) {
4282 if (v->PixelClockBackEnd[k] > 3200) {
4283 v->NumberOfDSCSlices[k] = dml_ceil(v->PixelClockBackEnd[k] / 400.0, 4.0);
4284 } else if (v->PixelClockBackEnd[k] > 1360) {
4285 v->NumberOfDSCSlices[k] = 8;
4286 } else if (v->PixelClockBackEnd[k] > 680) {
4287 v->NumberOfDSCSlices[k] = 4;
4288 } else if (v->PixelClockBackEnd[k] > 340) {
4289 v->NumberOfDSCSlices[k] = 2;
4291 v->NumberOfDSCSlices[k] = 1;
4294 v->NumberOfDSCSlices[k] = 0;
4299 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4300 v->RequiresDSC[i][k] = false;
4301 v->RequiresFEC[i][k] = false;
4302 if (v->BlendingAndTiming[k] == k) {
4303 if (v->Output[k] == dm_hdmi) {
4304 v->RequiresDSC[i][k] = false;
4305 v->RequiresFEC[i][k] = false;
4306 v->OutputBppPerState[i][k] = TruncToValidBPP(
4309 v->HTotal[k],
4310 v->HActive[k],
4311 v->PixelClockBackEnd[k],
4312 v->ForcedOutputLinkBPP[k],
4314 v->Output[k],
4315 v->OutputFormat[k],
4316 v->DSCInputBitPerComponent[k],
4317 v->NumberOfDSCSlices[k],
4318 v->AudioSampleRate[k],
4319 v->AudioSampleLayout[k],
4320 v->ODMCombineEnablePerState[i][k]);
4321 } else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp || v->Output[k] == dm_dp2p0) {
4322 if (v->DSCEnable[k] == true) {
4323 v->RequiresDSC[i][k] = true;
4325 if (v->Output[k] == dm_dp || v->Output[k] == dm_dp2p0) {
4326 v->RequiresFEC[i][k] = true;
4328 v->RequiresFEC[i][k] = false;
4331 v->RequiresDSC[i][k] = false;
4333 if (v->Output[k] == dm_dp2p0) {
4334 v->RequiresFEC[i][k] = true;
4336 v->RequiresFEC[i][k] = false;
4339 if (v->Output[k] == dm_dp2p0) {
4341 … if ((v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr10) &&
4342 v->PHYCLKD18PerState[k] >= 10000.0 / 18.0) {
4345 v->OutputLinkDPLanes[k],
4346 v->HTotal[k],
4347 v->HActive[k],
4348 v->PixelClockBackEnd[k],
4349 v->ForcedOutputLinkBPP[k],
4351 v->Output[k],
4352 v->OutputFormat[k],
4353 v->DSCInputBitPerComponent[k],
4354 v->NumberOfDSCSlices[k],
4355 v->AudioSampleRate[k],
4356 v->AudioSampleLayout[k],
4357 v->ODMCombineEnablePerState[i][k]);
4358 if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 13500.0 / 18.0 &&
4359 v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
4360 v->RequiresDSC[i][k] = true;
4364 v->OutputLinkDPLanes[k],
4365 v->HTotal[k],
4366 v->HActive[k],
4367 v->PixelClockBackEnd[k],
4368 v->ForcedOutputLinkBPP[k],
4370 v->Output[k],
4371 v->OutputFormat[k],
4372 v->DSCInputBitPerComponent[k],
4373 v->NumberOfDSCSlices[k],
4374 v->AudioSampleRate[k],
4375 v->AudioSampleLayout[k],
4376 v->ODMCombineEnablePerState[i][k]);
4378 v->OutputBppPerState[i][k] = v->Outbpp;
4383 (v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr13p5) &&
4384 v->PHYCLKD18PerState[k] >= 13500.0 / 18.0) {
4387 v->OutputLinkDPLanes[k],
4388 v->HTotal[k],
4389 v->HActive[k],
4390 v->PixelClockBackEnd[k],
4391 v->ForcedOutputLinkBPP[k],
4393 v->Output[k],
4394 v->OutputFormat[k],
4395 v->DSCInputBitPerComponent[k],
4396 v->NumberOfDSCSlices[k],
4397 v->AudioSampleRate[k],
4398 v->AudioSampleLayout[k],
4399 v->ODMCombineEnablePerState[i][k]);
4400 if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 20000.0 / 18.0 &&
4401 v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
4402 v->RequiresDSC[i][k] = true;
4406 v->OutputLinkDPLanes[k],
4407 v->HTotal[k],
4408 v->HActive[k],
4409 v->PixelClockBackEnd[k],
4410 v->ForcedOutputLinkBPP[k],
4412 v->Output[k],
4413 v->OutputFormat[k],
4414 v->DSCInputBitPerComponent[k],
4415 v->NumberOfDSCSlices[k],
4416 v->AudioSampleRate[k],
4417 v->AudioSampleLayout[k],
4418 v->ODMCombineEnablePerState[i][k]);
4420 v->OutputBppPerState[i][k] = v->Outbpp;
4425 (v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr20) &&
4426 v->PHYCLKD18PerState[k] >= 20000.0 / 18.0) {
4429 v->OutputLinkDPLanes[k],
4430 v->HTotal[k],
4431 v->HActive[k],
4432 v->PixelClockBackEnd[k],
4433 v->ForcedOutputLinkBPP[k],
4435 v->Output[k],
4436 v->OutputFormat[k],
4437 v->DSCInputBitPerComponent[k],
4438 v->NumberOfDSCSlices[k],
4439 v->AudioSampleRate[k],
4440 v->AudioSampleLayout[k],
4441 v->ODMCombineEnablePerState[i][k]);
4442 if (v->Outbpp == BPP_INVALID && v->DSCEnable[k] == true &&
4443 v->ForcedOutputLinkBPP[k] == 0) {
4444 v->RequiresDSC[i][k] = true;
4448 v->OutputLinkDPLanes[k],
4449 v->HTotal[k],
4450 v->HActive[k],
4451 v->PixelClockBackEnd[k],
4452 v->ForcedOutputLinkBPP[k],
4454 v->Output[k],
4455 v->OutputFormat[k],
4456 v->DSCInputBitPerComponent[k],
4457 v->NumberOfDSCSlices[k],
4458 v->AudioSampleRate[k],
4459 v->AudioSampleLayout[k],
4460 v->ODMCombineEnablePerState[i][k]);
4462 v->OutputBppPerState[i][k] = v->Outbpp;
4471 v->OutputLinkDPLanes[k],
4472 v->HTotal[k],
4473 v->HActive[k],
4474 v->PixelClockBackEnd[k],
4475 v->ForcedOutputLinkBPP[k],
4477 v->Output[k],
4478 v->OutputFormat[k],
4479 v->DSCInputBitPerComponent[k],
4480 v->NumberOfDSCSlices[k],
4481 v->AudioSampleRate[k],
4482 v->AudioSampleLayout[k],
4483 v->ODMCombineEnablePerState[i][k]);
4484 v->OutputBppPerState[i][k] = v->Outbpp;
4491 v->OutputLinkDPLanes[k],
4492 v->HTotal[k],
4493 v->HActive[k],
4494 v->PixelClockBackEnd[k],
4495 v->ForcedOutputLinkBPP[k],
4497 v->Output[k],
4498 v->OutputFormat[k],
4499 v->DSCInputBitPerComponent[k],
4500 v->NumberOfDSCSlices[k],
4501 v->AudioSampleRate[k],
4502 v->AudioSampleLayout[k],
4503 v->ODMCombineEnablePerState[i][k]);
4504 v->OutputBppPerState[i][k] = v->Outbpp;
4511 v->OutputLinkDPLanes[k],
4512 v->HTotal[k],
4513 v->HActive[k],
4514 v->PixelClockBackEnd[k],
4515 v->ForcedOutputLinkBPP[k],
4517 v->Output[k],
4518 v->OutputFormat[k],
4519 v->DSCInputBitPerComponent[k],
4520 v->NumberOfDSCSlices[k],
4521 v->AudioSampleRate[k],
4522 v->AudioSampleLayout[k],
4523 v->ODMCombineEnablePerState[i][k]);
4524 v->OutputBppPerState[i][k] = v->Outbpp;
4531 v->OutputBppPerState[i][k] = 0;
4538 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4539 if (v->BlendingAndTiming[k] == k
4540 && (v->Output[k] == dm_dp ||
4541 v->Output[k] == dm_edp ||
4542 v->Output[k] == dm_hdmi) && v->OutputBppPerState[i][k] == 0) {
4549 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4550 if (v->BlendingAndTiming[k] == k
4551 && (v->Output[k] == dm_dp ||
4552 v->Output[k] == dm_edp ||
4553 v->Output[k] == dm_hdmi)) {
4554 …if (v->OutputFormat[k] == dm_420 && v->Interlace[k] == 1 && v->ProgressiveToInterlaceUnitInOPP == …
4557 if (v->DSCEnable[k] == true && v->OutputFormat[k] == dm_n422
4566 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4567 if (v->BlendingAndTiming[k] == k && v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1
4568 && (v->ODMCombine4To1Supported == false || v->Output[k] == dm_dp || v->Output[k] == dm_edp
4569 || v->Output[k] == dm_hdmi)) {
4580 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4581 if (v->RequiresDSC[i][k] == true) {
4582 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_4to1) {
4584 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4598 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4599 if (v->OutputBppPerState[i][k] == BPP_INVALID) {
4602 v->BPP = v->OutputBppPerState[i][k];
4604 if (v->RequiresDSC[i][k] == true && v->BPP != 0.0) {
4605 if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_disabled) {
4606 v->DSCDelayPerState[i][k] = dscceComputeDelay(
4607 v->DSCInputBitPerComponent[k],
4609 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4610 v->NumberOfDSCSlices[k],
4611 v->OutputFormat[k],
4612 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]);
4613 } else if (v->ODMCombineEnablePerState[i][k] == dm_odm_combine_mode_2to1) {
4614 v->DSCDelayPerState[i][k] = 2.0
4616 v->DSCInputBitPerComponent[k],
4618 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4619 v->NumberOfDSCSlices[k] / 2,
4620 v->OutputFormat[k],
4621 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
4623 v->DSCDelayPerState[i][k] = 4.0
4625 v->DSCInputBitPerComponent[k],
4627 dml_ceil(1.0 * v->HActive[k] / v->NumberOfDSCSlices[k], 1.0),
4628 v->NumberOfDSCSlices[k] / 4,
4629 v->OutputFormat[k],
4630 v->Output[k]) + dscComputeDelay(v->OutputFormat[k], v->Output[k]));
4632 …v->DSCDelayPerState[i][k] = v->DSCDelayPerState[i][k] * v->PixelClock[k] / v->PixelClockBackEnd[k];
4634 v->DSCDelayPerState[i][k] = 0.0;
4637 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4639 if (v->BlendingAndTiming[k] == m && v->RequiresDSC[i][m] == true) {
4640 v->DSCDelayPerState[i][k] = v->DSCDelayPerState[i][m];
4650 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4651 v->RequiredDPPCLKThisState[k] = v->RequiredDPPCLK[i][j][k];
4652 v->NoOfDPPThisState[k] = v->NoOfDPP[i][j][k];
4653 v->ODMCombineEnableThisState[k] = v->ODMCombineEnablePerState[i][k];
4720 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4721 v->swath_width_luma_ub_all_states[i][j][k] = v->swath_width_luma_ub_this_state[k];
4722 v->swath_width_chroma_ub_all_states[i][j][k] = v->swath_width_chroma_ub_this_state[k];
4723 v->SwathWidthYAllStates[i][j][k] = v->SwathWidthYThisState[k];
4724 v->SwathWidthCAllStates[i][j][k] = v->SwathWidthCThisState[k];
4725 v->SwathHeightYAllStates[i][j][k] = v->SwathHeightYThisState[k];
4726 v->SwathHeightCAllStates[i][j][k] = v->SwathHeightCThisState[k];
4727 v->DETBufferSizeYAllStates[i][j][k] = v->DETBufferSizeYThisState[k];
4728 v->DETBufferSizeCAllStates[i][j][k] = v->DETBufferSizeCThisState[k];
4733 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4734 v->cursor_bw[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
4735 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatio[k];
4742 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4743 v->swath_width_luma_ub_this_state[k] = v->swath_width_luma_ub_all_states[i][j][k];
4744 v->swath_width_chroma_ub_this_state[k] = v->swath_width_chroma_ub_all_states[i][j][k];
4745 v->SwathWidthYThisState[k] = v->SwathWidthYAllStates[i][j][k];
4746 v->SwathWidthCThisState[k] = v->SwathWidthCAllStates[i][j][k];
4747 v->SwathHeightYThisState[k] = v->SwathHeightYAllStates[i][j][k];
4748 v->SwathHeightCThisState[k] = v->SwathHeightCAllStates[i][j][k];
4749 v->DETBufferSizeYThisState[k] = v->DETBufferSizeYAllStates[i][j][k];
4750 v->DETBufferSizeCThisState[k] = v->DETBufferSizeCAllStates[i][j][k];
4754 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4755 if (v->DCCEnable[k] == true) {
4756 v->TotalNumberOfDCCActiveDPP[i][j] = v->TotalNumberOfDCCActiveDPP[i][j] + v->NoOfDPP[i][j][k];
4760 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4761 if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10
4762 || v->SourcePixelFormat[k] == dm_420_12 || v->SourcePixelFormat[k] == dm_rgbe_alpha) {
4764 if ((v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_420_12)
4765 && v->SourceScan[k] != dm_vert) {
4776 v->DCCEnable[k],
4777 v->Read256BlockHeightC[k],
4778 v->Read256BlockWidthC[k],
4779 v->SourcePixelFormat[k],
4780 v->SurfaceTiling[k],
4781 v->BytePerPixelC[k],
4782 v->SourceScan[k],
4783 v->SwathWidthCThisState[k],
4784 v->ViewportHeightChroma[k],
4791 v->PitchC[k],
4793 &v->MacroTileWidthC[k],
4796 &v->PTEBufferSizeNotExceededC[i][j][k],
4798 &v->dpte_row_height_chroma[k],
4802 &v->meta_row_height_chroma[k],
4811 v->PrefetchLinesC[i][j][k] = CalculatePrefetchSourceLines(
4813 v->VRatioChroma[k],
4814 v->VTAPsChroma[k],
4815 v->Interlace[k],
4817 v->SwathHeightCThisState[k],
4818 v->ViewportYStartC[k],
4819 &v->PrefillC[k],
4820 &v->MaxNumSwC[k]);
4827 v->PrefetchLinesC[i][j][k] = 0.0;
4828 v->PTEBufferSizeNotExceededC[i][j][k] = true;
4832 v->DCCEnable[k],
4833 v->Read256BlockHeightY[k],
4834 v->Read256BlockWidthY[k],
4835 v->SourcePixelFormat[k],
4836 v->SurfaceTiling[k],
4837 v->BytePerPixelY[k],
4838 v->SourceScan[k],
4839 v->SwathWidthYThisState[k],
4840 v->ViewportHeight[k],
4847 v->PitchY[k],
4848 v->DCCMetaPitchY[k],
4849 &v->MacroTileWidthY[k],
4852 &v->PTEBufferSizeNotExceededY[i][j][k],
4854 &v->dpte_row_height[k],
4858 &v->meta_row_height[k],
4860 &v->dpte_group_bytes[k],
4866 v->PrefetchLinesY[i][j][k] = CalculatePrefetchSourceLines(
4868 v->VRatio[k],
4869 v->vtaps[k],
4870 v->Interlace[k],
4872 v->SwathHeightYThisState[k],
4873 v->ViewportYStartY[k],
4874 &v->PrefillY[k],
4875 &v->MaxNumSwY[k]);
4876 …v->PDEAndMetaPTEBytesPerFrame[i][j][k] = v->PDEAndMetaPTEBytesPerFrameY + v->PDEAndMetaPTEBytesPer…
4877 v->MetaRowBytes[i][j][k] = v->MetaRowBytesY + v->MetaRowBytesC;
4878 v->DPTEBytesPerRow[i][j][k] = v->DPTEBytesPerRowY + v->DPTEBytesPerRowC;
4882 v->SourcePixelFormat[k],
4883 v->VRatio[k],
4884 v->VRatioChroma[k],
4885 v->DCCEnable[k],
4886 v->HTotal[k] / v->PixelClock[k],
4889 v->meta_row_height[k],
4890 v->meta_row_height_chroma[k],
4893 v->dpte_row_height[k],
4894 v->dpte_row_height_chroma[k],
4895 &v->meta_row_bandwidth[i][j][k],
4896 &v->dpte_row_bandwidth[i][j][k]);
4905 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4906 if (v->MetaRowBytes[i][j][k] > 24064)
4918 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4920 v->swath_width_luma_ub_this_state[k],
4921 v->swath_width_chroma_ub_this_state[k],
4922 v->SwathHeightYThisState[k],
4923 v->SwathHeightCThisState[k],
4924 v->HTotal[k] / v->PixelClock[k],
4927 v->CursorWidth[k][0],
4928 v->CursorBPP[k][0],
4929 v->VRatio[k],
4930 v->VRatioChroma[k],
4931 v->BytePerPixelInDETY[k],
4932 v->BytePerPixelInDETC[k],
4933 v->DETBufferSizeYThisState[k],
4934 v->DETBufferSizeCThisState[k],
4935 &v->UrgentBurstFactorCursor[k],
4936 &v->UrgentBurstFactorLuma[k],
4937 &v->UrgentBurstFactorChroma[k],
4938 &NotUrgentLatencyHiding[k]);
4942 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4943 if (NotUrgentLatencyHiding[k]) {
4948 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4949 v->VActivePixelBandwidth[i][j][k] = v->ReadBandwidthLuma[k] * v->UrgentBurstFactorLuma[k]
4950 + v->ReadBandwidthChroma[k] * v->UrgentBurstFactorChroma[k];
4951 v->VActiveCursorBandwidth[i][j][k] = v->cursor_bw[k] * v->UrgentBurstFactorCursor[k];
4958 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
4959 …tivePixelBandwidth[i][j] = v->TotalVActivePixelBandwidth[i][j] + v->VActivePixelBandwidth[i][j][k];
4960 …eCursorBandwidth[i][j] = v->TotalVActiveCursorBandwidth[i][j] + v->VActiveCursorBandwidth[i][j][k];
4961 …idth[i][j] = v->TotalMetaRowBandwidth[i][j] + v->NoOfDPP[i][j][k] * v->meta_row_bandwidth[i][j][k];
4962 …idth[i][j] = v->TotalDPTERowBandwidth[i][j] + v->NoOfDPP[i][j][k] * v->dpte_row_bandwidth[i][j][k];
4970 for (k = 0; k < v->NumberOfActivePlanes; k++) {
4971 if (v->BlendingAndTiming[k] == k) {
4972 if (v->WritebackEnable[k] == true) {
4973 v->WritebackDelayTime[k] = v->WritebackLatency
4975 v->WritebackPixelFormat[k],
4976 v->WritebackHRatio[k],
4977 v->WritebackVRatio[k],
4978 v->WritebackVTaps[k],
4979 v->WritebackDestinationWidth[k],
4980 v->WritebackDestinationHeight[k],
4981 v->WritebackSourceHeight[k],
4982 v->HTotal[k]) / v->RequiredDISPCLK[i][j];
4984 v->WritebackDelayTime[k] = 0.0;
4987 if (v->BlendingAndTiming[m] == k && v->WritebackEnable[m] == true) {
4988 v->WritebackDelayTime[k] = dml_max(
4989 v->WritebackDelayTime[k],
5004 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5006 if (v->BlendingAndTiming[k] == m) {
5007 v->WritebackDelayTime[k] = v->WritebackDelayTime[m];
5012 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5013 v->MaximumVStartup[i][j][k] =
5014 (v->Interlace[k] && !v->ProgressiveToInterlaceUnitInOPP) ?
5015 dml_floor((v->VTotal[k] - v->VActive[k]) / 2.0, 1.0) :
5016 v->VTotal[k] - v->VActive[k]
5020 1.0 * v->WritebackDelayTime[k]
5021 / (v->HTotal[k]
5022 / v->PixelClock[k]),
5024 if (v->MaximumVStartup[i][j][k] > 1023)
5025 v->MaximumVStartup[i][j][k] = 1023;
5026 v->MaxMaxVStartup[i][j] = dml_max(v->MaxMaxVStartup[i][j], v->MaximumVStartup[i][j][k]);
5082 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5083 …tiveRDBandwidth = MaxTotalVActiveRDBandwidth + v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k];
5130 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5131 v->NoOfDPPThisState[k] = v->NoOfDPP[i][j][k];
5132 v->swath_width_luma_ub_this_state[k] = v->swath_width_luma_ub_all_states[i][j][k];
5133 v->swath_width_chroma_ub_this_state[k] = v->swath_width_chroma_ub_all_states[i][j][k];
5134 v->SwathWidthYThisState[k] = v->SwathWidthYAllStates[i][j][k];
5135 v->SwathWidthCThisState[k] = v->SwathWidthCAllStates[i][j][k];
5136 v->SwathHeightYThisState[k] = v->SwathHeightYAllStates[i][j][k];
5137 v->SwathHeightCThisState[k] = v->SwathHeightCAllStates[i][j][k];
5138 v->DETBufferSizeYThisState[k] = v->DETBufferSizeYAllStates[i][j][k];
5139 v->DETBufferSizeCThisState[k] = v->DETBufferSizeCAllStates[i][j][k];
5181 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5184 i, j, k);
5187 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5189 v->swath_width_luma_ub_this_state[k],
5190 v->swath_width_chroma_ub_this_state[k],
5191 v->SwathHeightYThisState[k],
5192 v->SwathHeightCThisState[k],
5193 v->HTotal[k] / v->PixelClock[k],
5196 v->CursorWidth[k][0],
5197 v->CursorBPP[k][0],
5198 v->VRatioPreY[i][j][k],
5199 v->VRatioPreC[i][j][k],
5200 v->BytePerPixelInDETY[k],
5201 v->BytePerPixelInDETC[k],
5202 v->DETBufferSizeYThisState[k],
5203 v->DETBufferSizeCThisState[k],
5204 &v->UrgentBurstFactorCursorPre[k],
5205 &v->UrgentBurstFactorLumaPre[k],
5206 &v->UrgentBurstFactorChromaPre[k],
5207 &v->NotUrgentLatencyHidingPre[k]);
5211 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5212 v->cursor_bw_pre[k] = v->NumberOfCursors[k] * v->CursorWidth[k][0] * v->CursorBPP[k][0] / 8.0
5213 / (v->HTotal[k] / v->PixelClock[k]) * v->VRatioPreY[i][j][k];
5218 v->VActivePixelBandwidth[i][j][k]
5219 + v->VActiveCursorBandwidth[i][j][k]
5220 + v->NoOfDPP[i][j][k]
5221 * (v->meta_row_bandwidth[i][j][k]
5222 + v->dpte_row_bandwidth[i][j][k]),
5223 v->NoOfDPP[i][j][k] * v->prefetch_vmrow_bw[k],
5224 v->NoOfDPP[i][j][k]
5225 * (v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5226 * v->UrgentBurstFactorLumaPre[k]
5227 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5228 * v->UrgentBurstFactorChromaPre[k])
5229 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5233 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5234 if (v->NotUrgentLatencyHidingPre[k] == true) {
5244 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5245 …if (v->LineTimesForPrefetch[k] < 2.0 || v->LinesForMetaPTE[k] >= 32.0 || v->LinesForMetaAndDPTERow…
5246 || v->NoTimeForPrefetch[i][j][k] == true) {
5252 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5253 if (v->NoTimeForDynamicMetadata[i][j][k] == true) {
5259 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5260 …if (v->VRatioPreY[i][j][k] > 4.0 || v->VRatioPreC[i][j][k] > 4.0 || v->NoTimeForPrefetch[i][j][k] …
5265 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5266 if (v->LinesForMetaAndDPTERow[k] >= 16 || v->LinesForMetaPTE[k] >= 32) {
5275 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5278 v->VActivePixelBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k],
5279 v->NoOfDPP[i][j][k]
5280 * (v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5281 * v->UrgentBurstFactorLumaPre[k]
5282 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5283 * v->UrgentBurstFactorChromaPre[k])
5284 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5287 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5289 + v->NoOfDPP[i][j][k] * (v->PDEAndMetaPTEBytesPerFrame[i][j][k] + v->MetaRowBytes[i][j][k]
5290 + v->DPTEBytesPerRow[i][j][k]);
5293 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5296 k,
5300 v->PDEAndMetaPTEBytesPerFrame[i][j][k],
5301 v->MetaRowBytes[i][j][k],
5302 v->DPTEBytesPerRow[i][j][k]);
5305 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5308 v->NoOfDPP[i][j][k] * v->prefetch_vmrow_bw[k],
5309 v->NoOfDPP[i][j][k] * v->final_flip_bw[k] + v->VActivePixelBandwidth[i][j][k]
5310 + v->VActiveCursorBandwidth[i][j][k],
5311 v->NoOfDPP[i][j][k]
5312 * (v->final_flip_bw[k]
5313 + v->RequiredPrefetchPixelDataBWLuma[i][j][k]
5314 * v->UrgentBurstFactorLumaPre[k]
5315 + v->RequiredPrefetchPixelDataBWChroma[i][j][k]
5316 * v->UrgentBurstFactorChromaPre[k])
5317 + v->cursor_bw_pre[k] * v->UrgentBurstFactorCursorPre[k]);
5323 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5324 if (v->ImmediateFlipSupportedForPipe[k] == false) {
5389 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5390 …if (v->PTEBufferSizeNotExceededY[i][j][k] == false || v->PTEBufferSizeNotExceededC[i][j][k] == fal…
5399 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5400 if (v->CursorWidth[k][0] > 0.0) {
5401 if (v->CursorBPP[k][0] == 64 && v->Cursor64BppSupport == false) {
5409 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5410 v->AlignedYPitch[k] = dml_ceil(dml_max(v->PitchY[k], v->SurfaceWidthY[k]), v->MacroTileWidthY[k]);
5411 if (v->DCCEnable[k] == true) {
5412 …v->AlignedDCCMetaPitchY[k] = dml_ceil(dml_max(v->DCCMetaPitchY[k], v->SurfaceWidthY[k]), 64.0 * v-…
5414 v->AlignedDCCMetaPitchY[k] = v->DCCMetaPitchY[k];
5416 …if (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32 && v->SourcePixel…
5417 && v->SourcePixelFormat[k] != dm_mono_16 && v->SourcePixelFormat[k] != dm_rgbe
5418 && v->SourcePixelFormat[k] != dm_mono_8) {
5419 … v->AlignedCPitch[k] = dml_ceil(dml_max(v->PitchC[k], v->SurfaceWidthC[k]), v->MacroTileWidthC[k]);
5420 if (v->DCCEnable[k] == true) {
5421 v->AlignedDCCMetaPitchC[k] = dml_ceil(
5422 dml_max(v->DCCMetaPitchC[k], v->SurfaceWidthC[k]),
5423 64.0 * v->Read256BlockWidthC[k]);
5425 v->AlignedDCCMetaPitchC[k] = v->DCCMetaPitchC[k];
5428 v->AlignedCPitch[k] = v->PitchC[k];
5429 v->AlignedDCCMetaPitchC[k] = v->DCCMetaPitchC[k];
5431 if (v->AlignedYPitch[k] > v->PitchY[k] || v->AlignedCPitch[k] > v->PitchC[k]
5432 …|| v->AlignedDCCMetaPitchY[k] > v->DCCMetaPitchY[k] || v->AlignedDCCMetaPitchC[k] > v->DCCMetaPitc…
5437 for (k = 0; k < v->NumberOfActivePlanes; k++) {
5438 if (v->ViewportWidth[k] > v->SurfaceWidthY[k] || v->ViewportHeight[k] > v->SurfaceHeightY[k]) {
5440 if (v->SourcePixelFormat[k] != dm_444_64 && v->SourcePixelFormat[k] != dm_444_32
5441 && v->SourcePixelFormat[k] != dm_444_16 && v->SourcePixelFormat[k] != dm_444_8
5442 && v->SourcePixelFormat[k] != dm_rgbe) {
5443 if (v->ViewportWidthChroma[k] > v->SurfaceWidthC[k]
5444 || v->ViewportHeightChroma[k] > v->SurfaceHeightC[k]) {
5542 for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
5543 v->MPCCombineEnable[k] = v->MPCCombine[v->VoltageLevel][MaximumMPCCombine][k];
5544 v->DPPPerPlane[k] = v->NoOfDPP[v->VoltageLevel][MaximumMPCCombine][k];
5597 int k, j; local
5615 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5616 if (v->WritebackEnable[k] == true) {
5633 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5635 …+ DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] + SwathWidthC[k] * BytePer…
5636 / (v->HTotal[k] / v->PixelClock[k]);
5639 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5640 double EffectiveDETBufferSizeY = DETBufferSizeY[k];
5644 …loor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) …
5648 …->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) …
5650 …LatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
5652 …yHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
5656 …dBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k] / (v->HTotal[k] / …
5659 LinesInDETY[k] = (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k] / SwathWidthY[k];
5660 LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]);
5661 …DETBufferingTimeY = LinesInDETYRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k]) / v->VRat…
5662 if (BytePerPixelDETC[k] > 0) {
5663 LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
5664 LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
5665 …ringTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
5672 …- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->Pixe…
5676 …(1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRati…
5679 if (BytePerPixelDETC[k] > 0) {
5681 …- ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) * v->HTotal[k] / v->Pixe…
5685 …- 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioCh…
5687 …v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAM…
5689 v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
5692 if (v->WritebackEnable[k] == true) {
5694 …WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v…
5695 if (v->WritebackPixelFormat[k] == dm_444_64) {
5699 …v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(v->ActiveDRAMClockChangeLatencyMargin[k], Write…
5705 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5706 if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
5707 v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
5708 if (v->BlendingAndTiming[k] == k) {
5709 PlaneWithMinActiveDRAMClockChangeMargin = k;
5712 if (v->BlendingAndTiming[k] == j) {
5723 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5724 …if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->Bl…
5725 …&& v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLa…
5726 … SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
5732 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
5733 if (v->BlendingAndTiming[k] == k) {
5785 int k; local
5787 for (k = 0; k < NumberOfActivePlanes; ++k) {
5789 if (VRatio[k] <= 1) {
5790 DisplayPipeLineDeliveryTimeLuma = SwathWidthY[k] * DPPPerPlane[k] / HRatio[k] / PixelClock[k];
5792 DisplayPipeLineDeliveryTimeLuma = SwathWidthY[k] / PSCL_THROUGHPUT[k] / DPPCLK[k];
5794 if (BytePerPixelC[k] == 0) {
5797 if (VRatioChroma[k] <= 1) {
5798 …DisplayPipeLineDeliveryTimeChroma = SwathWidthC[k] * DPPPerPlane[k] / HRatioChroma[k] / PixelClock…
5800 DisplayPipeLineDeliveryTimeChroma = SwathWidthC[k] / PSCL_THROUGHPUT_CHROMA[k] / DPPCLK[k];
5804 if (BytePerPixelC[k] > 0) {
5805 …v->DCFCLKDeepSleepPerPlane[k] = dml_max(__DML_MIN_DCFCLK_FACTOR__ * SwathWidthY[k] * BytePerPixelY…
5806 …__DML_MIN_DCFCLK_FACTOR__ * SwathWidthC[k] * BytePerPixelC[k] / 32.0 / DisplayPipeLineDeliveryTime…
5808 …v->DCFCLKDeepSleepPerPlane[k] = __DML_MIN_DCFCLK_FACTOR__ * SwathWidthY[k] * BytePerPixelY[k] / 64…
5810 v->DCFCLKDeepSleepPerPlane[k] = dml_max(v->DCFCLKDeepSleepPerPlane[k], PixelClock[k] / 16);
5814 for (k = 0; k < NumberOfActivePlanes; ++k) {
5815 ReadBandwidth = ReadBandwidth + ReadBandwidthLuma[k] + ReadBandwidthChroma[k];
5820 for (k = 0; k < NumberOfActivePlanes; ++k) {
5821 *DCFCLKDeepSleep = dml_max(*DCFCLKDeepSleep, v->DCFCLKDeepSleepPerPlane[k]);
5935 int k; local
5937 for (k = 0; k < NumberOfActivePlanes; ++k) {
5938 if (VRatio[k] <= 1) {
5939 …DisplayPipeLineDeliveryTimeLuma[k] = swath_width_luma_ub[k] * DPPPerPlane[k] / HRatio[k] / PixelCl…
5941 DisplayPipeLineDeliveryTimeLuma[k] = swath_width_luma_ub[k] / PSCL_THROUGHPUT[k] / DPPCLK[k];
5944 if (BytePerPixelC[k] == 0) {
5945 DisplayPipeLineDeliveryTimeChroma[k] = 0;
5947 if (VRatioChroma[k] <= 1) {
5948 …DisplayPipeLineDeliveryTimeChroma[k] = swath_width_chroma_ub[k] * DPPPerPlane[k] / HRatioChroma[k]…
5950 …DisplayPipeLineDeliveryTimeChroma[k] = swath_width_chroma_ub[k] / PSCL_THROUGHPUT_CHROMA[k] / DPPC…
5954 if (VRatioPrefetchY[k] <= 1) {
5955 …DisplayPipeLineDeliveryTimeLumaPrefetch[k] = swath_width_luma_ub[k] * DPPPerPlane[k] / HRatio[k] /…
5957 …DisplayPipeLineDeliveryTimeLumaPrefetch[k] = swath_width_luma_ub[k] / PSCL_THROUGHPUT[k] / DPPCLK[
5960 if (BytePerPixelC[k] == 0) {
5961 DisplayPipeLineDeliveryTimeChromaPrefetch[k] = 0;
5963 if (VRatioPrefetchC[k] <= 1) {
5964 …ayPipeLineDeliveryTimeChromaPrefetch[k] = swath_width_chroma_ub[k] * DPPPerPlane[k] / HRatioChroma…
5966 …DisplayPipeLineDeliveryTimeChromaPrefetch[k] = swath_width_chroma_ub[k] / PSCL_THROUGHPUT_CHROMA[k
5971 for (k = 0; k < NumberOfActivePlanes; ++k) {
5972 if (SourceScan[k] != dm_vert) {
5973 req_per_swath_ub = swath_width_luma_ub[k] / BlockWidth256BytesY[k];
5975 req_per_swath_ub = swath_width_luma_ub[k] / BlockHeight256BytesY[k];
5977 DisplayPipeRequestDeliveryTimeLuma[k] = DisplayPipeLineDeliveryTimeLuma[k] / req_per_swath_ub;
5978 …DisplayPipeRequestDeliveryTimeLumaPrefetch[k] = DisplayPipeLineDeliveryTimeLumaPrefetch[k] / req_p…
5979 if (BytePerPixelC[k] == 0) {
5980 DisplayPipeRequestDeliveryTimeChroma[k] = 0;
5981 DisplayPipeRequestDeliveryTimeChromaPrefetch[k] = 0;
5983 if (SourceScan[k] != dm_vert) {
5984 req_per_swath_ub = swath_width_chroma_ub[k] / BlockWidth256BytesC[k];
5986 req_per_swath_ub = swath_width_chroma_ub[k] / BlockHeight256BytesC[k];
5988 … DisplayPipeRequestDeliveryTimeChroma[k] = DisplayPipeLineDeliveryTimeChroma[k] / req_per_swath_ub;
5989 …DisplayPipeRequestDeliveryTimeChromaPrefetch[k] = DisplayPipeLineDeliveryTimeChromaPrefetch[k] / r…
5992 dml_print("DML::%s: k=%d : HRatio = %f\n", __func__, k, HRatio[k]);
5993 dml_print("DML::%s: k=%d : VRatio = %f\n", __func__, k, VRatio[k]);
5994 dml_print("DML::%s: k=%d : HRatioChroma = %f\n", __func__, k, HRatioChroma[k]);
5995 dml_print("DML::%s: k=%d : VRatioChroma = %f\n", __func__, k, VRatioChroma[k]);
5996 …: k=%d : DisplayPipeLineDeliveryTimeLuma = %f\n", __func__, k, DisplayPipeLineDeliveryTimeLuma[k]);
5997 …ayPipeLineDeliveryTimeLumaPrefetch = %f\n", __func__, k, DisplayPipeLineDeliveryTimeLumaPrefetch[k
5998 …%d : DisplayPipeLineDeliveryTimeChroma = %f\n", __func__, k, DisplayPipeLineDeliveryTimeChroma[k]);
5999 …ipeLineDeliveryTimeChromaPrefetch = %f\n", __func__, k, DisplayPipeLineDeliveryTimeChromaPrefetch[
6000 … : DisplayPipeRequestDeliveryTimeLuma = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeLuma[k]);
6001 …peRequestDeliveryTimeLumaPrefetch = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeLumaPrefetch…
6002 …DisplayPipeRequestDeliveryTimeChroma = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeChroma[k]…
6003 …equestDeliveryTimeChromaPrefetch = %f\n", __func__, k, DisplayPipeRequestDeliveryTimeChromaPrefetc…
6007 for (k = 0; k < NumberOfActivePlanes; ++k) {
6009 cursor_req_per_width = dml_ceil(CursorWidth[k][0] * CursorBPP[k][0] / 256 / 8, 1);
6010 if (NumberOfCursors[k] > 0) {
6011 if (VRatio[k] <= 1) {
6012 …CursorRequestDeliveryTime[k] = CursorWidth[k][0] / HRatio[k] / PixelClock[k] / cursor_req_per_widt…
6014 …CursorRequestDeliveryTime[k] = CursorWidth[k][0] / PSCL_THROUGHPUT[k] / DPPCLK[k] / cursor_req_per…
6016 if (VRatioPrefetchY[k] <= 1) {
6017 …CursorRequestDeliveryTimePrefetch[k] = CursorWidth[k][0] / HRatio[k] / PixelClock[k] / cursor_req_…
6019 …CursorRequestDeliveryTimePrefetch[k] = CursorWidth[k][0] / PSCL_THROUGHPUT[k] / DPPCLK[k] / cursor…
6022 CursorRequestDeliveryTime[k] = 0;
6023 CursorRequestDeliveryTimePrefetch[k] = 0;
6026 dml_print("DML::%s: k=%d : NumberOfCursors = %d\n", __func__, k, NumberOfCursors[k]);
6027 …int("DML::%s: k=%d : CursorRequestDeliveryTime = %f\n", __func__, k, CursorRequestDeliveryTime[k]);
6028 …%d : CursorRequestDeliveryTimePrefetch = %f\n", __func__, k, CursorRequestDeliveryTimePrefetch[k]);
6100 int k; local
6102 for (k = 0; k < NumberOfActivePlanes; ++k) {
6103 DST_Y_PER_PTE_ROW_NOM_L[k] = dpte_row_height[k] / VRatio[k];
6104 if (BytePerPixelC[k] == 0) {
6105 DST_Y_PER_PTE_ROW_NOM_C[k] = 0;
6107 DST_Y_PER_PTE_ROW_NOM_C[k] = dpte_row_height_chroma[k] / VRatioChroma[k];
6109 DST_Y_PER_META_ROW_NOM_L[k] = meta_row_height[k] / VRatio[k];
6110 if (BytePerPixelC[k] == 0) {
6111 DST_Y_PER_META_ROW_NOM_C[k] = 0;
6113 DST_Y_PER_META_ROW_NOM_C[k] = meta_row_height_chroma[k] / VRatioChroma[k];
6117 for (k = 0; k < NumberOfActivePlanes; ++k) {
6118 if (DCCEnable[k] == true) {
6119 meta_chunk_width = MetaChunkSize * 1024 * 256 / BytePerPixelY[k] / meta_row_height[k];
6120 min_meta_chunk_width = MinMetaChunkSizeBytes * 256 / BytePerPixelY[k] / meta_row_height[k];
6121 meta_chunk_per_row_int = meta_row_width[k] / meta_chunk_width;
6122 meta_row_remainder = meta_row_width[k] % meta_chunk_width;
6123 if (SourceScan[k] != dm_vert) {
6124 meta_chunk_threshold = 2 * min_meta_chunk_width - meta_req_width[k];
6126 meta_chunk_threshold = 2 * min_meta_chunk_width - meta_req_height[k];
6133 …TimePerMetaChunkNominal[k] = meta_row_height[k] / VRatio[k] * HTotal[k] / PixelClock[k] / meta_chu…
6134 …TimePerMetaChunkVBlank[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClock[k] / …
6135 …TimePerMetaChunkFlip[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / PixelClock[
6136 if (BytePerPixelC[k] == 0) {
6137 TimePerChromaMetaChunkNominal[k] = 0;
6138 TimePerChromaMetaChunkVBlank[k] = 0;
6139 TimePerChromaMetaChunkFlip[k] = 0;
6141 …eta_chunk_width_chroma = MetaChunkSize * 1024 * 256 / BytePerPixelC[k] / meta_row_height_chroma[k];
6142 …ta_chunk_width_chroma = MinMetaChunkSizeBytes * 256 / BytePerPixelC[k] / meta_row_height_chroma[k];
6143 meta_chunk_per_row_int_chroma = (double) meta_row_width_chroma[k] / meta_chunk_width_chroma;
6144 meta_row_remainder_chroma = meta_row_width_chroma[k] % meta_chunk_width_chroma;
6145 if (SourceScan[k] != dm_vert) {
6146 meta_chunk_threshold_chroma = 2 * min_meta_chunk_width_chroma - meta_req_width_chroma[k];
6148 meta_chunk_threshold_chroma = 2 * min_meta_chunk_width_chroma - meta_req_height_chroma[k];
6155 …TimePerChromaMetaChunkNominal[k] = meta_row_height_chroma[k] / VRatioChroma[k] * HTotal[k] / Pixel…
6156 …TimePerChromaMetaChunkVBlank[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClock…
6157 …TimePerChromaMetaChunkFlip[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / Pixel…
6160 TimePerMetaChunkNominal[k] = 0;
6161 TimePerMetaChunkVBlank[k] = 0;
6162 TimePerMetaChunkFlip[k] = 0;
6163 TimePerChromaMetaChunkNominal[k] = 0;
6164 TimePerChromaMetaChunkVBlank[k] = 0;
6165 TimePerChromaMetaChunkFlip[k] = 0;
6169 for (k = 0; k < NumberOfActivePlanes; ++k) {
6171 if (SourceScan[k] != dm_vert) {
6172 dpte_group_width_luma = dpte_group_bytes[k] / PTERequestSizeY[k] * PixelPTEReqWidthY[k];
6174 dpte_group_width_luma = dpte_group_bytes[k] / PTERequestSizeY[k] * PixelPTEReqHeightY[k];
6176 …dpte_groups_per_row_luma_ub = dml_ceil(1.0 * dpte_row_width_luma_ub[k] / dpte_group_width_luma, 1);
6177 …time_per_pte_group_nom_luma[k] = DST_Y_PER_PTE_ROW_NOM_L[k] * HTotal[k] / PixelClock[k] / dpte_gro…
6178 …time_per_pte_group_vblank_luma[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelClo…
6179 …time_per_pte_group_flip_luma[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / Pix…
6180 if (BytePerPixelC[k] == 0) {
6181 time_per_pte_group_nom_chroma[k] = 0;
6182 time_per_pte_group_vblank_chroma[k] = 0;
6183 time_per_pte_group_flip_chroma[k] = 0;
6185 if (SourceScan[k] != dm_vert) {
6186 dpte_group_width_chroma = dpte_group_bytes[k] / PTERequestSizeC[k] * PixelPTEReqWidthC[k];
6188 dpte_group_width_chroma = dpte_group_bytes[k] / PTERequestSizeC[k] * PixelPTEReqHeightC[k];
6190 …dpte_groups_per_row_chroma_ub = dml_ceil(1.0 * dpte_row_width_chroma_ub[k] / dpte_group_width_chro…
6191 …time_per_pte_group_nom_chroma[k] = DST_Y_PER_PTE_ROW_NOM_C[k] * HTotal[k] / PixelClock[k] / dpte_g…
6192 …time_per_pte_group_vblank_chroma[k] = DestinationLinesToRequestRowInVBlank[k] * HTotal[k] / PixelC…
6193 …time_per_pte_group_flip_chroma[k] = DestinationLinesToRequestRowInImmediateFlip[k] * HTotal[k] / P…
6196 time_per_pte_group_nom_luma[k] = 0;
6197 time_per_pte_group_vblank_luma[k] = 0;
6198 time_per_pte_group_flip_luma[k] = 0;
6199 time_per_pte_group_nom_chroma[k] = 0;
6200 time_per_pte_group_vblank_chroma[k] = 0;
6201 time_per_pte_group_flip_chroma[k] = 0;
6230 int k; local
6232 for (k = 0; k < NumberOfActivePlanes; ++k) {
6233 if (GPUVMEnable == true && (DCCEnable[k] == true || GPUVMMaxPageTableLevels > 1)) {
6234 if (DCCEnable[k] == false) {
6235 if (BytePerPixelC[k] > 0) {
6236 …wer_vm_stage = dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6237 + dml_ceil((double) (dpde0_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6239 …er_vm_stage = dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6243 if (BytePerPixelC[k] > 0) {
6244 …_vm_stage = dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6245 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6247 …vm_stage = dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6250 if (BytePerPixelC[k] > 0) {
6251 …vm_stage = 2 + dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6252 + dml_ceil((double) (dpde0_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1)
6253 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6254 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_c[k]) / (double) (vm_group_bytes[k]), 1);
6256 …vm_stage = 1 + dml_ceil((double) (dpde0_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1)
6257 + dml_ceil((double) (meta_pte_bytes_per_frame_ub_l[k]) / (double) (vm_group_bytes[k]), 1);
6262 if (DCCEnable[k] == false) {
6263 if (BytePerPixelC[k] > 0) {
6264 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + dpde0_bytes_per_frame_ub_c[k] / …
6266 num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64;
6270 if (BytePerPixelC[k] > 0) {
6271 …_req_per_lower_vm_stage = meta_pte_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_c[k]…
6273 num_req_per_lower_vm_stage = meta_pte_bytes_per_frame_ub_l[k] / 64;
6276 if (BytePerPixelC[k] > 0) {
6277 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + dpde0_bytes_per_frame_ub_c[k] / …
6278 + meta_pte_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_c[k] / 64;
6280 …num_req_per_lower_vm_stage = dpde0_bytes_per_frame_ub_l[k] / 64 + meta_pte_bytes_per_frame_ub_l[k]…
6285 …TimePerVMGroupVBlank[k] = DestinationLinesToRequestVMInVBlank[k] * HTotal[k] / PixelClock[k] / num…
6286 …TimePerVMGroupFlip[k] = DestinationLinesToRequestVMInImmediateFlip[k] * HTotal[k] / PixelClock[k] …
6287 …TimePerVMRequestVBlank[k] = DestinationLinesToRequestVMInVBlank[k] * HTotal[k] / PixelClock[k] / n…
6288 …TimePerVMRequestFlip[k] = DestinationLinesToRequestVMInImmediateFlip[k] * HTotal[k] / PixelClock[k
6291 TimePerVMGroupVBlank[k] = TimePerVMGroupVBlank[k] / 2;
6292 TimePerVMGroupFlip[k] = TimePerVMGroupFlip[k] / 2;
6293 TimePerVMRequestVBlank[k] = TimePerVMRequestVBlank[k] / 2;
6294 TimePerVMRequestFlip[k] = TimePerVMRequestFlip[k] / 2;
6298 TimePerVMGroupVBlank[k] = 0;
6299 TimePerVMGroupFlip[k] = 0;
6300 TimePerVMRequestVBlank[k] = 0;
6301 TimePerVMRequestFlip[k] = 0;
6392 int k; local
6399 for (k = 0; k < NumberOfActivePlanes; ++k) {
6400 if (DCCEnable[k] == true) {
6401 …SourceScan[k] == dm_vert && BlockWidth256BytesY[k] > SwathHeightY[k]) || (SourceScan[k] != dm_vert…
6402 || DCCYMaxUncompressedBlock[k] < 256) {
6407 …width = TotalCompressedReadBandwidth + ReadBandwidthPlaneLuma[k] / dml_min(NetDCCRateLuma[k], Maxi…
6408 …talZeroSizeRequestReadBandwidth + ReadBandwidthPlaneLuma[k] * DCCFractionOfZeroSizeRequestsLuma[k];
6410 …+ ReadBandwidthPlaneLuma[k] * DCCFractionOfZeroSizeRequestsLuma[k] / MaximumEffectiveCompressionLu…
6411 if (ReadBandwidthPlaneChroma[k] > 0) {
6412 if ((SourceScan[k] == dm_vert && BlockWidth256BytesC[k] > SwathHeightC[k])
6413 …|| (SourceScan[k] != dm_vert && BlockHeight256BytesC[k] > SwathHeightC[k]) || DCCCMaxUncompressedB…
6419 … + ReadBandwidthPlaneChroma[k] / dml_min(NetDCCRateChroma[k], MaximumEffectiveCompressionChroma);
6420 …eroSizeRequestReadBandwidth + ReadBandwidthPlaneChroma[k] * DCCFractionOfZeroSizeRequestsChroma[k];
6422 …+ ReadBandwidthPlaneChroma[k] * DCCFractionOfZeroSizeRequestsChroma[k] / MaximumEffectiveCompressi…
6425 …Bandwidth = TotalCompressedReadBandwidth + ReadBandwidthPlaneLuma[k] + ReadBandwidthPlaneChroma[k];
6427 …TotalRowReadBandwidth = TotalRowReadBandwidth + DPPPerPlane[k] * (meta_row_bw[k] + dpte_row_bw[k]);
6476 for (k = 0; k < NumberOfActivePlanes; ++k) {
6477 …sInDETY = (DETBufferSizeY[k] + (UnboundedRequestEnabled == true ? EffectiveCompressedBufferSize : …
6478 / BytePerPixelDETY[k] / SwathWidthY[k];
6479 LinesInDETYRoundedDownToSwath = dml_floor(LinesInDETY, SwathHeightY[k]);
6480 DETBufferingTimeY = LinesInDETYRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatio[k];
6482 dml_print("DML::%s: k=%0d DETBufferSizeY = %f\n", __func__, k, DETBufferSizeY[k]);
6483 dml_print("DML::%s: k=%0d BytePerPixelDETY = %f\n", __func__, k, BytePerPixelDETY[k]);
6484 dml_print("DML::%s: k=%0d SwathWidthY = %f\n", __func__, k, SwathWidthY[k]);
6485 dml_print("DML::%s: k=%0d ReadBandwidthPlaneLuma = %f\n", __func__, k, ReadBandwidthPlaneLuma[k]);
6486 dml_print("DML::%s: k=%0d TotalDataReadBandwidth = %f\n", __func__, k, TotalDataReadBandwidth);
6487 dml_print("DML::%s: k=%0d LinesInDETY = %f\n", __func__, k, LinesInDETY);
6488 …dml_print("DML::%s: k=%0d LinesInDETYRoundedDownToSwath = %f\n", __func__, k, LinesInDETYRoundedDo…
6489 dml_print("DML::%s: k=%0d HTotal = %d\n", __func__, k, HTotal[k]);
6490 dml_print("DML::%s: k=%0d PixelClock = %f\n", __func__, k, PixelClock[k]);
6491 dml_print("DML::%s: k=%0d VRatio = %f\n", __func__, k, VRatio[k]);
6492 dml_print("DML::%s: k=%0d DETBufferingTimeY = %f\n", __func__, k, DETBufferingTimeY);
6493 dml_print("DML::%s: k=%0d PixelClock = %f\n", __func__, k, PixelClock[k]);
6496 if (k == 0 || DETBufferingTimeY < *StutterPeriod) {
6497 bool isInterlaceTiming = Interlace[k] && !ProgressiveToInterlaceUnitInOPP;
6500 …calPlane = (isInterlaceTiming ? dml_floor(VTotal[k] / 2.0, 1.0) : VTotal[k]) * HTotal[k] / PixelCl…
6501 …alPlane = (isInterlaceTiming ? dml_floor(VActive[k] / 2.0, 1.0) : VActive[k]) * HTotal[k] / PixelC…
6502 BytePerPixelYCriticalPlane = BytePerPixelY[k];
6503 SwathWidthYCriticalPlane = SwathWidthY[k];
6504 …LinesToFinishSwathTransferStutterCriticalPlane = SwathHeightY[k] - (LinesInDETY - LinesInDETYRound…
6505 MinTTUVBlankCriticalPlane = MinTTUVBlank[k];
6551 for (k = 0; k < NumberOfActivePlanes; ++k) {
6552 if (WritebackEnable[k]) {
6582 for (k = 0; k < NumberOfActivePlanes; ++k) {
6583 if (v->BlendingAndTiming[k] == k) {
6676 int k; local
6710 for (k = 0; k < NumberOfActivePlanes; ++k) {
6711 unsigned int DETBufferSizeInKByte = DETBufferSizeInKByteA[k];
6713 if (DETSharedByAllDPP && DPPPerPlane[k])
6714 DETBufferSizeInKByte /= DPPPerPlane[k];
6715 …((SourcePixelFormat[k] == dm_444_64 || SourcePixelFormat[k] == dm_444_32 || SourcePixelFormat[k] =…
6716 || SourcePixelFormat[k] == dm_mono_8 || SourcePixelFormat[k] == dm_rgbe)) {
6717 if (SurfaceTiling[k] == dm_sw_linear
6718 || (SourcePixelFormat[k] == dm_444_64
6719 …&& (SurfaceTiling[k] == dm_sw_64kb_s || SurfaceTiling[k] == dm_sw_64kb_s_t || SurfaceTiling[k] == …
6720 && SourceScan[k] != dm_vert)) {
6721 MinimumSwathHeightY = MaximumSwathHeightY[k];
6722 } else if (SourcePixelFormat[k] == dm_444_8 && SourceScan[k] == dm_vert) {
6723 MinimumSwathHeightY = MaximumSwathHeightY[k];
6725 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6727 MinimumSwathHeightC = MaximumSwathHeightC[k];
6729 if (SurfaceTiling[k] == dm_sw_linear) {
6730 MinimumSwathHeightY = MaximumSwathHeightY[k];
6731 MinimumSwathHeightC = MaximumSwathHeightC[k];
6732 } else if (SourcePixelFormat[k] == dm_rgbe_alpha && SourceScan[k] == dm_vert) {
6733 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6734 MinimumSwathHeightC = MaximumSwathHeightC[k];
6735 } else if (SourcePixelFormat[k] == dm_rgbe_alpha) {
6736 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6737 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6738 } else if (SourcePixelFormat[k] == dm_420_8 && SourceScan[k] == dm_vert) {
6739 MinimumSwathHeightY = MaximumSwathHeightY[k];
6740 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6742 MinimumSwathHeightC = MaximumSwathHeightC[k] / 2;
6743 MinimumSwathHeightY = MaximumSwathHeightY[k] / 2;
6747 RoundedUpMaxSwathSizeBytesY = swath_width_luma_ub[k] * BytePerPixDETY[k] * MaximumSwathHeightY[k];
6748 RoundedUpMinSwathSizeBytesY = swath_width_luma_ub[k] * BytePerPixDETY[k] * MinimumSwathHeightY;
6749 if (SourcePixelFormat[k] == dm_420_10) {
6753 …RoundedUpMaxSwathSizeBytesC = swath_width_chroma_ub[k] * BytePerPixDETC[k] * MaximumSwathHeightC[k
6754 RoundedUpMinSwathSizeBytesC = swath_width_chroma_ub[k] * BytePerPixDETC[k] * MinimumSwathHeightC;
6755 if (SourcePixelFormat[k] == dm_420_10) {
6761 SwathHeightY[k] = MaximumSwathHeightY[k];
6762 SwathHeightC[k] = MaximumSwathHeightC[k];
6767 SwathHeightY[k] = MinimumSwathHeightY;
6768 SwathHeightC[k] = MaximumSwathHeightC[k];
6773 SwathHeightY[k] = MaximumSwathHeightY[k];
6774 SwathHeightC[k] = MinimumSwathHeightC;
6778 SwathHeightY[k] = MinimumSwathHeightY;
6779 SwathHeightC[k] = MinimumSwathHeightC;
6785 if (SwathHeightC[k] == 0) {
6786 DETBufferSizeY[k] = actDETBufferSizeInKByte * 1024;
6787 DETBufferSizeC[k] = 0;
6789 DETBufferSizeY[k] = actDETBufferSizeInKByte * 1024 / 2;
6790 DETBufferSizeC[k] = actDETBufferSizeInKByte * 1024 / 2;
6792 DETBufferSizeY[k] = dml_floor(actDETBufferSizeInKByte * 1024 * 2 / 3, 1024);
6793 DETBufferSizeC[k] = actDETBufferSizeInKByte * 1024 / 3;
6796 …MinSwathSizeBytesC > actDETBufferSizeInKByte * 1024 / 2 || SwathWidth[k] > MaximumSwathWidthLuma[k]
6797 || (SwathHeightC[k] > 0 && SwathWidthChroma[k] > MaximumSwathWidthChroma[k])) {
6799 ViewportSizeSupportPerPlane[k] = false;
6801 ViewportSizeSupportPerPlane[k] = true;
6839 int j, k; local
6845 for (k = 0; k < NumberOfActivePlanes; ++k) {
6846 if (SourceScan[k] != dm_vert) {
6847 SwathWidthSingleDPPY[k] = ViewportWidth[k];
6849 SwathWidthSingleDPPY[k] = ViewportHeight[k];
6853 dml_print("DML::%s: k=%d ViewportWidth=%d\n", __func__, k, ViewportWidth[k]);
6854 dml_print("DML::%s: k=%d ViewportHeight=%d\n", __func__, k, ViewportHeight[k]);
6857 MainPlaneODMCombine = ODMCombineEnabled[k];
6859 if (BlendingAndTiming[k] == j) {
6865 SwathWidthY[k] = dml_min(SwathWidthSingleDPPY[k], dml_round(HActive[k] / 4.0 * HRatio[k]));
6867 SwathWidthY[k] = dml_min(SwathWidthSingleDPPY[k], dml_round(HActive[k] / 2.0 * HRatio[k]));
6868 } else if (DPPPerPlane[k] == 2) {
6869 SwathWidthY[k] = SwathWidthSingleDPPY[k] / 2;
6871 SwathWidthY[k] = SwathWidthSingleDPPY[k];
6875 dml_print("DML::%s: k=%d SwathWidthSingleDPPY=%f\n", __func__, k, SwathWidthSingleDPPY[k]);
6876 dml_print("DML::%s: k=%d SwathWidthY=%f\n", __func__, k, SwathWidthY[k]);
6879 …if (SourcePixelFormat[k] == dm_420_8 || SourcePixelFormat[k] == dm_420_10 || SourcePixelFormat[k] …
6880 SwathWidthC[k] = SwathWidthY[k] / 2;
6881 SwathWidthSingleDPPC[k] = SwathWidthSingleDPPY[k] / 2;
6883 SwathWidthC[k] = SwathWidthY[k];
6884 SwathWidthSingleDPPC[k] = SwathWidthSingleDPPY[k];
6888 SwathWidthY[k] = SwathWidthSingleDPPY[k];
6889 SwathWidthC[k] = SwathWidthSingleDPPC[k];
6892 int surface_width_ub_l = dml_ceil(SurfaceWidthY[k], Read256BytesBlockWidthY[k]);
6893 int surface_height_ub_l = dml_ceil(SurfaceHeightY[k], Read256BytesBlockHeightY[k]);
6896 dml_print("DML::%s: k=%d surface_width_ub_l=%0d\n", __func__, k, surface_width_ub_l);
6899 if (SourceScan[k] != dm_vert) {
6900 MaximumSwathHeightY[k] = Read256BytesBlockHeightY[k];
6901 MaximumSwathHeightC[k] = Read256BytesBlockHeightC[k];
6902 …_width_luma_ub[k] = dml_min(surface_width_ub_l, (int) dml_ceil(SwathWidthY[k] - 1, Read256BytesBlo…
6903 if (BytePerPixC[k] > 0) {
6904 int surface_width_ub_c = dml_ceil(SurfaceWidthC[k], Read256BytesBlockWidthC[k]);
6906 swath_width_chroma_ub[k] = dml_min(
6908 (int) dml_ceil(SwathWidthC[k] - 1, Read256BytesBlockWidthC[k]) + Read256BytesBlockWidthC[k]);
6910 swath_width_chroma_ub[k] = 0;
6913 MaximumSwathHeightY[k] = Read256BytesBlockWidthY[k];
6914 MaximumSwathHeightC[k] = Read256BytesBlockWidthC[k];
6915 …idth_luma_ub[k] = dml_min(surface_height_ub_l, (int) dml_ceil(SwathWidthY[k] - 1, Read256BytesBloc…
6916 if (BytePerPixC[k] > 0) {
6917 int surface_height_ub_c = dml_ceil(SurfaceHeightC[k], Read256BytesBlockHeightC[k]);
6919 swath_width_chroma_ub[k] = dml_min(
6921 … (int) dml_ceil(SwathWidthC[k] - 1, Read256BytesBlockHeightC[k]) + Read256BytesBlockHeightC[k]);
6923 swath_width_chroma_ub[k] = 0;
6995 int HostVMDynamicLevels = 0, k; local
7012 for (k = 0; k < NumberOfActivePlanes; ++k) {
7013 …ret = ret + NumberOfDPP[k] * dpte_group_bytes[k] * (1 + 8 * HostVMDynamicLevels) * HostVMInefficie…
7043 int dummy1, i, j, k; local
7065 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7067 … + v->NoOfDPP[i][j][k] * v->DPTEBytesPerRow[i][j][k] / (15.75 * v->HTotal[k] / v->PixelClock[k]);
7070 for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k) {
7071 NoOfDPPState[k] = v->NoOfDPP[i][j][k];
7099 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7104 …LKCyclesRequiredInPrefetch[k] = (v->PrefetchLinesY[i][j][k] * v->swath_width_luma_ub_all_states[i]…
7105 …+ v->PrefetchLinesC[i][j][k] * v->swath_width_chroma_ub_all_states[i][j][k] * v->BytePerPixelC[k])…
7106 DCFCLKCyclesRequiredInPrefetch = 2 * ExtraLatencyCycles / NoOfDPPState[k]
7107 …+ v->PDEAndMetaPTEBytesPerFrame[i][j][k] / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth…
7108 + 2 * v->DPTEBytesPerRow[i][j][k] / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth
7109 …+ 2 * v->MetaRowBytes[i][j][k] / NormalEfficiency / v->ReturnBusWidth + PixelDCFCLKCyclesRequiredI…
7110 …PrefetchPixelLinesTime[k] = dml_max(v->PrefetchLinesY[i][j][k], v->PrefetchLinesC[i][j][k]) * v->H…
7111 …edPrefetchBWAcceleration = (v->VActivePixelBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k])
7112 / (v->ReadBandwidthLuma[k] + v->ReadBandwidthChroma[k]);
7113 DynamicMetadataVMExtraLatency[k] =
7114 …(v->GPUVMEnable == true && v->DynamicMetadataEnable[k] == true && v->DynamicMetadataVMEnabled == t…
7116 … PrefetchTime = (v->MaximumVStartup[i][j][k] - 1) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait
7120 - DynamicMetadataVMExtraLatency[k];
7124 ExpectedVRatioPrefetch = PrefetchPixelLinesTime[k]
7125 / (PrefetchTime * PixelDCFCLKCyclesRequiredInPrefetch[k] / DCFCLKCyclesRequiredInPrefetch);
7126 …equiredForPeakBandwidthPerPlane[k] = NoOfDPPState[k] * PixelDCFCLKCyclesRequiredInPrefetch[k] / Pr…
7129 DCFCLKRequiredForPeakBandwidthPerPlane[k] = DCFCLKRequiredForPeakBandwidthPerPlane[k]
7130 + NoOfDPPState[k] * DPTEBandwidth / NormalEfficiency / NormalEfficiency / v->ReturnBusWidth;
7133 DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i];
7135 if (v->DynamicMetadataEnable[k] == true) {
7144 v->RequiredDPPCLK[i][j][k],
7147 v->PixelClock[k],
7148 v->HTotal[k],
7149 v->VTotal[k] - v->VActive[k],
7150 v->DynamicMetadataTransmittedBytes[k],
7151 v->DynamicMetadataLinesBeforeActiveRequired[k],
7152 v->Interlace[k],
7161 …llowedTimeForUrgentExtraLatency = v->MaximumVStartup[i][j][k] * v->HTotal[k] / v->PixelClock[k] - …
7162 - TdmsksPipe - DynamicMetadataVMExtraLatency[k];
7164 DCFCLKRequiredForPeakBandwidthPerPlane[k] = dml_max(
7165 DCFCLKRequiredForPeakBandwidthPerPlane[k],
7168 DCFCLKRequiredForPeakBandwidthPerPlane[k] = v->DCFCLKPerState[i];
7173 for (k = 0; k <= v->NumberOfActivePlanes - 1; ++k) {
7174 …uiredForPeakBandwidth = DCFCLKRequiredForPeakBandwidth + DCFCLKRequiredForPeakBandwidthPerPlane[k];
7181 for (k = 0; k < v->NumberOfActivePlanes; ++k) {
7183 …sw = (v->MaximumVStartup[i][j][k] - 2) * v->HTotal[k] / v->PixelClock[k] - MinimumTWait - DynamicM…
7184 if (MaximumTvmPlus2Tr0PlusTsw <= MinimumTvmPlus2Tr0 + PrefetchPixelLinesTime[k] / 4) {
7189 …raLatencyCycles / (MaximumTvmPlus2Tr0PlusTsw - MinimumTvmPlus2Tr0 - PrefetchPixelLinesTime[k] / 4),
7190 …(2 * ExtraLatencyCycles + PixelDCFCLKCyclesRequiredInPrefetch[k]) / (MaximumTvmPlus2Tr0PlusTsw - M…