Lines Matching refs:vba

1229 	if (!mode_lib->vba.IgnoreViewportPositioning) {
1336 MPDEBytesFrame = 128 * ((mode_lib->vba.GPUVMMaxPageTableLevels + 1) * (mode_lib->vba.HostVMMaxPageTableLevels + 1) - 2);
1366 if (GPUVMEnable == true && (mode_lib->vba.GPUVMMaxPageTableLevels + 1) * (mode_lib->vba.HostVMMaxPageTableLevels + 1) > 2) {
1372 ExtraDPDEBytesFrame = 128 * ((mode_lib->vba.GPUVMMaxPageTableLevels + 1) * (mode_lib->vba.HostVMMaxPageTableLevels + 1) - 3);
1471 struct vba_vars_st *locals = &mode_lib->vba;
1474 mode_lib->vba.WritebackDISPCLK = 0.0;
1475 mode_lib->vba.DISPCLKWithRamping = 0;
1476 mode_lib->vba.DISPCLKWithoutRamping = 0;
1477 mode_lib->vba.GlobalDPPCLK = 0.0;
1481 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1482 if (mode_lib->vba.WritebackEnable[k]) {
1483 mode_lib->vba.WritebackDISPCLK =
1485 mode_lib->vba.WritebackDISPCLK,
1487 mode_lib->vba.WritebackPixelFormat[k],
1488 mode_lib->vba.PixelClock[k],
1489 mode_lib->vba.WritebackHRatio[k],
1490 mode_lib->vba.WritebackVRatio[k],
1491 mode_lib->vba.WritebackLumaHTaps[k],
1492 mode_lib->vba.WritebackLumaVTaps[k],
1493 mode_lib->vba.WritebackChromaHTaps[k],
1494 mode_lib->vba.WritebackChromaVTaps[k],
1495 mode_lib->vba.WritebackDestinationWidth[k],
1496 mode_lib->vba.HTotal[k],
1497 mode_lib->vba.WritebackChromaLineBufferWidth));
1501 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1502 if (mode_lib->vba.HRatio[k] > 1) {
1504 mode_lib->vba.MaxDCHUBToPSCLThroughput,
1505 mode_lib->vba.MaxPSCLToLBThroughput
1506 * mode_lib->vba.HRatio[k]
1508 mode_lib->vba.htaps[k]
1513 mode_lib->vba.MaxDCHUBToPSCLThroughput,
1514 mode_lib->vba.MaxPSCLToLBThroughput);
1517 mode_lib->vba.DPPCLKUsingSingleDPPLuma =
1518 mode_lib->vba.PixelClock[k]
1520 mode_lib->vba.vtaps[k] / 6.0
1523 mode_lib->vba.HRatio[k]),
1525 mode_lib->vba.HRatio[k]
1526 * mode_lib->vba.VRatio[k]
1530 if ((mode_lib->vba.htaps[k] > 6 || mode_lib->vba.vtaps[k] > 6)
1531 && mode_lib->vba.DPPCLKUsingSingleDPPLuma
1532 < 2 * mode_lib->vba.PixelClock[k]) {
1533 mode_lib->vba.DPPCLKUsingSingleDPPLuma = 2 * mode_lib->vba.PixelClock[k];
1536 if ((mode_lib->vba.SourcePixelFormat[k] != dm_420_8
1537 && mode_lib->vba.SourcePixelFormat[k] != dm_420_10)) {
1540 mode_lib->vba.DPPCLKUsingSingleDPPLuma;
1542 if (mode_lib->vba.HRatio[k] > 1) {
1545 mode_lib->vba.MaxDCHUBToPSCLThroughput,
1546 mode_lib->vba.MaxPSCLToLBThroughput
1547 * mode_lib->vba.HRatio[k]
1550 mode_lib->vba.HTAPsChroma[k]
1555 mode_lib->vba.MaxDCHUBToPSCLThroughput,
1556 mode_lib->vba.MaxPSCLToLBThroughput);
1558 mode_lib->vba.DPPCLKUsingSingleDPPChroma =
1559 mode_lib->vba.PixelClock[k]
1561 mode_lib->vba.VTAPsChroma[k]
1565 mode_lib->vba.HRatio[k]
1568 mode_lib->vba.HRatio[k]
1569 * mode_lib->vba.VRatio[k]
1574 if ((mode_lib->vba.HTAPsChroma[k] > 6 || mode_lib->vba.VTAPsChroma[k] > 6)
1575 && mode_lib->vba.DPPCLKUsingSingleDPPChroma
1576 < 2 * mode_lib->vba.PixelClock[k]) {
1577 mode_lib->vba.DPPCLKUsingSingleDPPChroma = 2
1578 * mode_lib->vba.PixelClock[k];
1582 mode_lib->vba.DPPCLKUsingSingleDPPLuma,
1583 mode_lib->vba.DPPCLKUsingSingleDPPChroma);
1587 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1588 if (mode_lib->vba.BlendingAndTiming[k] != k)
1590 if (mode_lib->vba.ODMCombineEnabled[k]) {
1591 mode_lib->vba.DISPCLKWithRamping =
1593 mode_lib->vba.DISPCLKWithRamping,
1594 mode_lib->vba.PixelClock[k] / 2
1596 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1599 + mode_lib->vba.DISPCLKRampingMargin
1601 mode_lib->vba.DISPCLKWithoutRamping =
1603 mode_lib->vba.DISPCLKWithoutRamping,
1604 mode_lib->vba.PixelClock[k] / 2
1606 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1608 } else if (!mode_lib->vba.ODMCombineEnabled[k]) {
1609 mode_lib->vba.DISPCLKWithRamping =
1611 mode_lib->vba.DISPCLKWithRamping,
1612 mode_lib->vba.PixelClock[k]
1614 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1617 + mode_lib->vba.DISPCLKRampingMargin
1619 mode_lib->vba.DISPCLKWithoutRamping =
1621 mode_lib->vba.DISPCLKWithoutRamping,
1622 mode_lib->vba.PixelClock[k]
1624 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1629 mode_lib->vba.DISPCLKWithRamping = dml_max(
1630 mode_lib->vba.DISPCLKWithRamping,
1631 mode_lib->vba.WritebackDISPCLK);
1632 mode_lib->vba.DISPCLKWithoutRamping = dml_max(
1633 mode_lib->vba.DISPCLKWithoutRamping,
1634 mode_lib->vba.WritebackDISPCLK);
1636 ASSERT(mode_lib->vba.DISPCLKDPPCLKVCOSpeed != 0);
1637 mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity = RoundToDFSGranularityUp(
1638 mode_lib->vba.DISPCLKWithRamping,
1639 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
1640 mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity = RoundToDFSGranularityUp(
1641 mode_lib->vba.DISPCLKWithoutRamping,
1642 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
1643 mode_lib->vba.MaxDispclkRoundedToDFSGranularity = RoundToDFSGranularityDown(
1644 mode_lib->vba.soc.clock_limits[mode_lib->vba.soc.num_states - 1].dispclk_mhz,
1645 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
1646 if (mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity
1647 > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
1648 mode_lib->vba.DISPCLK_calculated =
1649 mode_lib->vba.DISPCLKWithoutRampingRoundedToDFSGranularity;
1650 } else if (mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity
1651 > mode_lib->vba.MaxDispclkRoundedToDFSGranularity) {
1652 mode_lib->vba.DISPCLK_calculated = mode_lib->vba.MaxDispclkRoundedToDFSGranularity;
1654 mode_lib->vba.DISPCLK_calculated =
1655 mode_lib->vba.DISPCLKWithRampingRoundedToDFSGranularity;
1657 DTRACE(" dispclk_mhz (calculated) = %f", mode_lib->vba.DISPCLK_calculated);
1659 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1660 mode_lib->vba.DPPCLK_calculated[k] = locals->DPPCLKUsingSingleDPP[k]
1661 / mode_lib->vba.DPPPerPlane[k]
1662 * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100);
1663 mode_lib->vba.GlobalDPPCLK = dml_max(
1664 mode_lib->vba.GlobalDPPCLK,
1665 mode_lib->vba.DPPCLK_calculated[k]);
1667 mode_lib->vba.GlobalDPPCLK = RoundToDFSGranularityUp(
1668 mode_lib->vba.GlobalDPPCLK,
1669 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
1670 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1671 mode_lib->vba.DPPCLK_calculated[k] = mode_lib->vba.GlobalDPPCLK / 255
1673 mode_lib->vba.DPPCLK_calculated[k] * 255
1674 / mode_lib->vba.GlobalDPPCLK,
1676 DTRACE(" dppclk_mhz[%i] (calculated) = %f", k, mode_lib->vba.DPPCLK_calculated[k]);
1680 DTRACE(" dcfclk_mhz = %f", mode_lib->vba.DCFCLK);
1681 DTRACE(" return_bw_to_dcn = %f", mode_lib->vba.ReturnBandwidthToDCN);
1682 DTRACE(" return_bus_bw = %f", mode_lib->vba.ReturnBW);
1684 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1687 if (mode_lib->vba.SourceScan[k] == dm_horz)
1688 locals->SwathWidthSingleDPPY[k] = mode_lib->vba.ViewportWidth[k];
1690 locals->SwathWidthSingleDPPY[k] = mode_lib->vba.ViewportHeight[k];
1692 if (mode_lib->vba.ODMCombineEnabled[k] == dm_odm_combine_mode_2to1)
1694 for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j)
1695 if (mode_lib->vba.BlendingAndTiming[k] == j
1696 && mode_lib->vba.ODMCombineEnabled[k] == dm_odm_combine_mode_2to1)
1703 mode_lib->vba.HActive[k] / 2.0
1704 * mode_lib->vba.HRatio[k]));
1707 / mode_lib->vba.DPPPerPlane[k];
1710 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1711 if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
1714 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32) {
1717 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_16 || mode_lib->vba.SourcePixelFormat[k] == dm_mono_16) {
1720 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_8 || mode_lib->vba.SourcePixelFormat[k] == dm_mono_8) {
1723 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8) {
1732 mode_lib->vba.TotalDataReadBandwidth = 0.0;
1733 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1736 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
1737 * mode_lib->vba.VRatio[k];
1740 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k])
1741 * mode_lib->vba.VRatio[k] / 2;
1747 mode_lib->vba.TotalDataReadBandwidth += locals->ReadBandwidthPlaneLuma[k]
1754 mode_lib->vba.NumberOfActivePlanes,
1757 mode_lib->vba.VRatio,
1759 mode_lib->vba.DPPPerPlane,
1760 mode_lib->vba.HRatio,
1761 mode_lib->vba.PixelClock,
1765 &mode_lib->vba.DCFCLKDeepSleep);
1768 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1769 if ((mode_lib->vba.BlendingAndTiming[k] != k) || !mode_lib->vba.DSCEnabled[k]) {
1772 if (mode_lib->vba.OutputFormat[k] == dm_420
1773 || mode_lib->vba.OutputFormat[k] == dm_n422)
1774 mode_lib->vba.DSCFormatFactor = 2;
1776 mode_lib->vba.DSCFormatFactor = 1;
1777 if (mode_lib->vba.ODMCombineEnabled[k])
1779 mode_lib->vba.PixelClockBackEnd[k] / 6
1780 / mode_lib->vba.DSCFormatFactor
1782 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1786 mode_lib->vba.PixelClockBackEnd[k] / 3
1787 / mode_lib->vba.DSCFormatFactor
1789 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
1796 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1797 double bpp = mode_lib->vba.OutputBpp[k];
1798 unsigned int slices = mode_lib->vba.NumberOfDSCSlices[k];
1800 if (mode_lib->vba.DSCEnabled[k] && bpp != 0) {
1801 if (!mode_lib->vba.ODMCombineEnabled[k]) {
1804 mode_lib->vba.DSCInputBitPerComponent[k],
1807 (double) mode_lib->vba.HActive[k]
1808 / mode_lib->vba.NumberOfDSCSlices[k],
1811 mode_lib->vba.OutputFormat[k])
1813 mode_lib->vba.OutputFormat[k]);
1818 mode_lib->vba.DSCInputBitPerComponent[k],
1821 (double) mode_lib->vba.HActive[k]
1822 / mode_lib->vba.NumberOfDSCSlices[k],
1825 mode_lib->vba.OutputFormat[k])
1827 mode_lib->vba.OutputFormat[k]));
1830 * mode_lib->vba.PixelClock[k]
1831 / mode_lib->vba.PixelClockBackEnd[k];
1837 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
1838 for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) // NumberOfPlanes
1839 if (j != k && mode_lib->vba.BlendingAndTiming[k] == j
1840 && mode_lib->vba.DSCEnabled[j])
1844 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
1855 mode_lib->vba.SourcePixelFormat[k],
1856 mode_lib->vba.SurfaceTiling[k],
1866 mode_lib->vba.VRatio[k],
1867 mode_lib->vba.vtaps[k],
1868 mode_lib->vba.Interlace[k],
1869 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
1870 mode_lib->vba.SwathHeightY[k],
1871 mode_lib->vba.ViewportYStartY[k],
1875 if ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
1876 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
1877 && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
1878 && mode_lib->vba.SourcePixelFormat[k] != dm_444_8)) {
1882 mode_lib->vba.DCCEnable[k],
1885 mode_lib->vba.SourcePixelFormat[k],
1886 mode_lib->vba.SurfaceTiling[k],
1890 mode_lib->vba.SourceScan[k],
1891 mode_lib->vba.ViewportWidth[k] / 2,
1892 mode_lib->vba.ViewportHeight[k] / 2,
1894 mode_lib->vba.GPUVMEnable,
1895 mode_lib->vba.HostVMEnable,
1896 mode_lib->vba.HostVMMaxPageTableLevels,
1897 mode_lib->vba.HostVMCachedPageTableLevels,
1898 mode_lib->vba.VMMPageSize,
1899 mode_lib->vba.PTEBufferSizeInRequestsChroma,
1900 mode_lib->vba.PitchC[k],
1901 mode_lib->vba.DCCMetaPitchC[k],
1922 mode_lib->vba.VRatio[k] / 2,
1923 mode_lib->vba.VTAPsChroma[k],
1924 mode_lib->vba.Interlace[k],
1925 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
1926 mode_lib->vba.SwathHeightC[k],
1927 mode_lib->vba.ViewportYStartC[k],
1936 locals->PTEBufferSizeInRequestsForLuma = mode_lib->vba.PTEBufferSizeInRequestsLuma + mode_lib->vba.PTEBufferSizeInRequestsChroma;
1941 mode_lib->vba.DCCEnable[k],
1944 mode_lib->vba.SourcePixelFormat[k],
1945 mode_lib->vba.SurfaceTiling[k],
1947 mode_lib->vba.SourceScan[k],
1948 mode_lib->vba.ViewportWidth[k],
1949 mode_lib->vba.ViewportHeight[k],
1951 mode_lib->vba.GPUVMEnable,
1952 mode_lib->vba.HostVMEnable,
1953 mode_lib->vba.HostVMMaxPageTableLevels,
1954 mode_lib->vba.HostVMCachedPageTableLevels,
1955 mode_lib->vba.VMMPageSize,
1957 mode_lib->vba.PitchY[k],
1958 mode_lib->vba.DCCMetaPitchY[k],
1983 mode_lib->vba.GPUVMEnable,
1984 mode_lib->vba.SourcePixelFormat[k],
1985 mode_lib->vba.VRatio[k],
1986 mode_lib->vba.DCCEnable[k],
1987 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
2000 mode_lib->vba.TotalDCCActiveDPP = 0;
2001 mode_lib->vba.TotalActiveDPP = 0;
2002 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2003 mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP
2004 + mode_lib->vba.DPPPerPlane[k];
2005 if (mode_lib->vba.DCCEnable[k])
2006 mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP
2007 + mode_lib->vba.DPPPerPlane[k];
2010 mode_lib->vba.UrgentOutOfOrderReturnPerChannel = dml_max3(
2011 mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelDataOnly,
2012 mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelMixedWithVMData,
2013 mode_lib->vba.UrgentOutOfOrderReturnPerChannelVMDataOnly);
2015 mode_lib->vba.UrgentRoundTripAndOutOfOrderLatency =
2016 (mode_lib->vba.RoundTripPingLatencyCycles + 32) / mode_lib->vba.DCFCLK
2017 + mode_lib->vba.UrgentOutOfOrderReturnPerChannel
2018 * mode_lib->vba.NumberOfChannels
2019 / mode_lib->vba.ReturnBW;
2021 mode_lib->vba.UrgentExtraLatency = CalculateExtraLatency(
2022 mode_lib->vba.UrgentRoundTripAndOutOfOrderLatency,
2023 mode_lib->vba.TotalActiveDPP,
2024 mode_lib->vba.PixelChunkSizeInKByte,
2025 mode_lib->vba.TotalDCCActiveDPP,
2026 mode_lib->vba.MetaChunkSize,
2027 mode_lib->vba.ReturnBW,
2028 mode_lib->vba.GPUVMEnable,
2029 mode_lib->vba.HostVMEnable,
2030 mode_lib->vba.NumberOfActivePlanes,
2031 mode_lib->vba.DPPPerPlane,
2033 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
2034 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
2035 mode_lib->vba.HostVMMaxPageTableLevels,
2036 mode_lib->vba.HostVMCachedPageTableLevels);
2039 mode_lib->vba.TCalc = 24.0 / mode_lib->vba.DCFCLKDeepSleep;
2041 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2042 if (mode_lib->vba.BlendingAndTiming[k] == k) {
2043 if (mode_lib->vba.WritebackEnable[k] == true) {
2044 locals->WritebackDelay[mode_lib->vba.VoltageLevel][k] =
2045 mode_lib->vba.WritebackLatency
2047 mode_lib->vba.WritebackPixelFormat[k],
2048 mode_lib->vba.WritebackHRatio[k],
2049 mode_lib->vba.WritebackVRatio[k],
2050 mode_lib->vba.WritebackLumaHTaps[k],
2051 mode_lib->vba.WritebackLumaVTaps[k],
2052 mode_lib->vba.WritebackChromaHTaps[k],
2053 mode_lib->vba.WritebackChromaVTaps[k],
2054 mode_lib->vba.WritebackDestinationWidth[k])
2055 / mode_lib->vba.DISPCLK;
2057 locals->WritebackDelay[mode_lib->vba.VoltageLevel][k] = 0;
2058 for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) {
2059 if (mode_lib->vba.BlendingAndTiming[j] == k
2060 && mode_lib->vba.WritebackEnable[j] == true) {
2061 locals->WritebackDelay[mode_lib->vba.VoltageLevel][k] =
2063 locals->WritebackDelay[mode_lib->vba.VoltageLevel][k],
2064 mode_lib->vba.WritebackLatency
2066 mode_lib->vba.WritebackPixelFormat[j],
2067 mode_lib->vba.WritebackHRatio[j],
2068 mode_lib->vba.WritebackVRatio[j],
2069 mode_lib->vba.WritebackLumaHTaps[j],
2070 mode_lib->vba.WritebackLumaVTaps[j],
2071 mode_lib->vba.WritebackChromaHTaps[j],
2072 mode_lib->vba.WritebackChromaVTaps[j],
2073 mode_lib->vba.WritebackDestinationWidth[j])
2074 / mode_lib->vba.DISPCLK);
2080 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
2081 for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j)
2082 if (mode_lib->vba.BlendingAndTiming[k] == j)
2083 locals->WritebackDelay[mode_lib->vba.VoltageLevel][k] =
2084 locals->WritebackDelay[mode_lib->vba.VoltageLevel][j];
2086 mode_lib->vba.VStartupLines = 13;
2087 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2088 locals->MaxVStartupLines[k] = mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k] - dml_max(1.0, dml_ceil(locals->WritebackDelay[mode_lib->vba.VoltageLevel][k] / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]), 1));
2091 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k)
2095 //mode_lib->vba.PrefetchERROR = CalculateMinAndMaxPrefetchMode(mode_lib->vba.AllowDRAMSelfRefreshOrDRAMClockChangeInVblank, &mode_lib->vba.MinPrefetchMode, &mode_lib->vba.MaxPrefetchMode);
2096 mode_lib->vba.UrgentLatency = dml_max3(mode_lib->vba.UrgentLatencyPixelDataOnly, mode_lib->vba.UrgentLatencyPixelMixedWithVMData, mode_lib->vba.UrgentLatencyVMDataOnly);
2104 mode_lib->vba.PrefetchMode[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb],
2105 mode_lib->vba.DRAMClockChangeLatency,
2106 mode_lib->vba.UrgentLatency,
2107 mode_lib->vba.SREnterPlusExitTime);
2109 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2113 if (mode_lib->vba.XFCEnabled[k] == true) {
2114 mode_lib->vba.XFCRemoteSurfaceFlipDelay =
2117 mode_lib->vba.VRatio[k],
2122 mode_lib->vba.HTotal[k]
2123 / mode_lib->vba.PixelClock[k],
2124 mode_lib->vba.XFCTSlvVupdateOffset,
2125 mode_lib->vba.XFCTSlvVupdateWidth,
2126 mode_lib->vba.XFCTSlvVreadyOffset,
2127 mode_lib->vba.XFCXBUFLatencyTolerance,
2128 mode_lib->vba.XFCFillBWOverhead,
2129 mode_lib->vba.XFCSlvChunkSize,
2130 mode_lib->vba.XFCBusTransportTime,
2131 mode_lib->vba.TCalc,
2133 &mode_lib->vba.SrcActiveDrainRate,
2134 &mode_lib->vba.TInitXFill,
2135 &mode_lib->vba.TslvChk);
2137 mode_lib->vba.XFCRemoteSurfaceFlipDelay = 0;
2141 myPipe.DISPCLK = mode_lib->vba.DISPCLK;
2142 myPipe.PixelClock = mode_lib->vba.PixelClock[k];
2143 myPipe.DCFCLKDeepSleep = mode_lib->vba.DCFCLKDeepSleep;
2144 myPipe.DPPPerPlane = mode_lib->vba.DPPPerPlane[k];
2145 myPipe.ScalerEnabled = mode_lib->vba.ScalerEnabled[k];
2146 myPipe.SourceScan = mode_lib->vba.SourceScan[k];
2151 myPipe.InterlaceEnable = mode_lib->vba.Interlace[k];
2152 myPipe.NumberOfCursors = mode_lib->vba.NumberOfCursors[k];
2153 myPipe.VBlank = mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k];
2154 myPipe.HTotal = mode_lib->vba.HTotal[k];
2157 myHostVM.Enable = mode_lib->vba.HostVMEnable;
2158 myHostVM.MaxPageTableLevels = mode_lib->vba.HostVMMaxPageTableLevels;
2159 myHostVM.CachedPageTableLevels = mode_lib->vba.HostVMCachedPageTableLevels;
2161 mode_lib->vba.ErrorResult[k] =
2164 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
2165 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
2168 mode_lib->vba.DPPCLKDelaySubtotal,
2169 mode_lib->vba.DPPCLKDelaySCL,
2170 mode_lib->vba.DPPCLKDelaySCLLBOnly,
2171 mode_lib->vba.DPPCLKDelayCNVCFormater,
2172 mode_lib->vba.DPPCLKDelayCNVCCursor,
2173 mode_lib->vba.DISPCLKDelaySubtotal,
2175 / mode_lib->vba.HRatio[k]),
2176 mode_lib->vba.OutputFormat[k],
2177 mode_lib->vba.MaxInterDCNTileRepeaters,
2178 dml_min(mode_lib->vba.VStartupLines, locals->MaxVStartupLines[k]),
2180 mode_lib->vba.GPUVMMaxPageTableLevels,
2181 mode_lib->vba.GPUVMEnable,
2183 mode_lib->vba.DynamicMetadataEnable[k],
2184 mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[k],
2185 mode_lib->vba.DynamicMetadataTransmittedBytes[k],
2186 mode_lib->vba.DCCEnable[k],
2187 mode_lib->vba.UrgentLatency,
2188 mode_lib->vba.UrgentExtraLatency,
2189 mode_lib->vba.TCalc,
2202 mode_lib->vba.SwathHeightY[k],
2203 mode_lib->vba.SwathHeightC[k],
2205 mode_lib->vba.XFCEnabled[k],
2206 mode_lib->vba.XFCRemoteSurfaceFlipDelay,
2207 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
2223 &mode_lib->vba.VUpdateOffsetPix[k],
2224 &mode_lib->vba.VUpdateWidthPix[k],
2225 &mode_lib->vba.VReadyOffsetPix[k]);
2226 if (mode_lib->vba.BlendingAndTiming[k] == k) {
2228 mode_lib->vba.VStartupLines,
2238 mode_lib->vba.VStartupLines,
2239 locals->MaxVStartupLines[mode_lib->vba.BlendingAndTiming[k]]);
2243 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2248 for (m = 0; m < mode_lib->vba.NumberOfCursors[k]; m++) {
2249 locals->cursor_bw[k] += mode_lib->vba.CursorWidth[k][m] * mode_lib->vba.CursorBPP[k][m] / 8.0 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * mode_lib->vba.VRatio[k];
2250 locals->cursor_bw_pre[k] += mode_lib->vba.CursorWidth[k][m] * mode_lib->vba.CursorBPP[k][m] / 8.0 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * locals->VRatioPrefetchY[k];
2254 mode_lib->vba.DETBufferSizeInKByte,
2255 mode_lib->vba.SwathHeightY[k],
2256 mode_lib->vba.SwathHeightC[k],
2258 mode_lib->vba.HTotal[k] /
2259 mode_lib->vba.PixelClock[k],
2260 mode_lib->vba.UrgentLatency,
2261 mode_lib->vba.CursorBufferSize,
2262 mode_lib->vba.CursorWidth[k][0] + mode_lib->vba.CursorWidth[k][1],
2263 dml_max(mode_lib->vba.CursorBPP[k][0], mode_lib->vba.CursorBPP[k][1]),
2264 mode_lib->vba.VRatio[k],
2278 if (mode_lib->vba.UseUrgentBurstBandwidth == false) {
2306 mode_lib->vba.FractionOfUrgentBandwidth = MaxTotalRDBandwidthNoUrgentBurst / mode_lib->vba.ReturnBW;
2308 if (MaxTotalRDBandwidth <= mode_lib->vba.ReturnBW && locals->NotEnoughUrgentLatencyHiding == 0 && locals->NotEnoughUrgentLatencyHidingPre == 0 && !VRatioPrefetchMoreThan4
2310 mode_lib->vba.PrefetchModeSupported = true;
2312 mode_lib->vba.PrefetchModeSupported = false;
2317 if (mode_lib->vba.PrefetchModeSupported == true) {
2318 mode_lib->vba.BandwidthAvailableForImmediateFlip = mode_lib->vba.ReturnBW;
2319 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2320 mode_lib->vba.BandwidthAvailableForImmediateFlip =
2321 mode_lib->vba.BandwidthAvailableForImmediateFlip
2331 mode_lib->vba.TotImmediateFlipBytes = 0;
2332 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2333 mode_lib->vba.TotImmediateFlipBytes = mode_lib->vba.TotImmediateFlipBytes + locals->PDEAndMetaPTEBytesFrame[k] + locals->MetaRowByte[k] + locals->PixelPTEBytesPerRow[k];
2335 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2338 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
2339 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
2340 mode_lib->vba.UrgentExtraLatency,
2341 mode_lib->vba.UrgentLatency,
2342 mode_lib->vba.GPUVMMaxPageTableLevels,
2343 mode_lib->vba.HostVMEnable,
2344 mode_lib->vba.HostVMMaxPageTableLevels,
2345 mode_lib->vba.HostVMCachedPageTableLevels,
2346 mode_lib->vba.GPUVMEnable,
2350 mode_lib->vba.BandwidthAvailableForImmediateFlip,
2351 mode_lib->vba.TotImmediateFlipBytes,
2352 mode_lib->vba.SourcePixelFormat[k],
2353 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
2354 mode_lib->vba.VRatio[k],
2356 mode_lib->vba.DCCEnable[k],
2366 mode_lib->vba.total_dcn_read_bw_with_flip = 0.0;
2367 mode_lib->vba.total_dcn_read_bw_with_flip_no_urgent_burst = 0.0;
2368 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2369 mode_lib->vba.total_dcn_read_bw_with_flip =
2370 mode_lib->vba.total_dcn_read_bw_with_flip + dml_max3(
2377 mode_lib->vba.total_dcn_read_bw_with_flip_no_urgent_burst =
2378 mode_lib->vba.total_dcn_read_bw_with_flip_no_urgent_burst +
2384 mode_lib->vba.FractionOfUrgentBandwidthImmediateFlip = mode_lib->vba.total_dcn_read_bw_with_flip_no_urgent_burst / mode_lib->vba.ReturnBW;
2386 mode_lib->vba.ImmediateFlipSupported = true;
2387 if (mode_lib->vba.total_dcn_read_bw_with_flip > mode_lib->vba.ReturnBW) {
2388 mode_lib->vba.ImmediateFlipSupported = false;
2390 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2392 mode_lib->vba.ImmediateFlipSupported = false;
2396 mode_lib->vba.ImmediateFlipSupported = false;
2399 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2400 if (mode_lib->vba.ErrorResult[k]) {
2401 mode_lib->vba.PrefetchModeSupported = false;
2407 mode_lib->vba.VStartupLines = mode_lib->vba.VStartupLines + 1;
2408 } while (!((mode_lib->vba.PrefetchModeSupported
2409 && ((!mode_lib->vba.ImmediateFlipSupport && !mode_lib->vba.HostVMEnable)
2410 || mode_lib->vba.ImmediateFlipSupported))
2411 || locals->MaximumMaxVStartupLines < mode_lib->vba.VStartupLines));
2418 mode_lib->vba.PrefetchMode[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb],
2419 mode_lib->vba.NumberOfActivePlanes,
2420 mode_lib->vba.MaxLineBufferLines,
2421 mode_lib->vba.LineBufferSize,
2422 mode_lib->vba.DPPOutputBufferPixels,
2423 mode_lib->vba.DETBufferSizeInKByte,
2424 mode_lib->vba.WritebackInterfaceLumaBufferSize,
2425 mode_lib->vba.WritebackInterfaceChromaBufferSize,
2426 mode_lib->vba.DCFCLK,
2427 mode_lib->vba.UrgentOutOfOrderReturnPerChannel * mode_lib->vba.NumberOfChannels,
2428 mode_lib->vba.ReturnBW,
2429 mode_lib->vba.GPUVMEnable,
2431 mode_lib->vba.MetaChunkSize,
2432 mode_lib->vba.UrgentLatency,
2433 mode_lib->vba.UrgentExtraLatency,
2434 mode_lib->vba.WritebackLatency,
2435 mode_lib->vba.WritebackChunkSize,
2436 mode_lib->vba.SOCCLK,
2437 mode_lib->vba.DRAMClockChangeLatency,
2438 mode_lib->vba.SRExitTime,
2439 mode_lib->vba.SREnterPlusExitTime,
2440 mode_lib->vba.DCFCLKDeepSleep,
2441 mode_lib->vba.DPPPerPlane,
2442 mode_lib->vba.DCCEnable,
2445 mode_lib->vba.SwathHeightY,
2447 mode_lib->vba.SwathHeightC,
2449 mode_lib->vba.LBBitPerPixel,
2451 mode_lib->vba.HRatio,
2452 mode_lib->vba.vtaps,
2453 mode_lib->vba.VTAPsChroma,
2454 mode_lib->vba.VRatio,
2455 mode_lib->vba.HTotal,
2456 mode_lib->vba.PixelClock,
2457 mode_lib->vba.BlendingAndTiming,
2460 mode_lib->vba.WritebackEnable,
2461 mode_lib->vba.WritebackPixelFormat,
2462 mode_lib->vba.WritebackDestinationWidth,
2463 mode_lib->vba.WritebackDestinationHeight,
2464 mode_lib->vba.WritebackSourceHeight,
2466 &mode_lib->vba.UrgentWatermark,
2467 &mode_lib->vba.WritebackUrgentWatermark,
2468 &mode_lib->vba.DRAMClockChangeWatermark,
2469 &mode_lib->vba.WritebackDRAMClockChangeWatermark,
2470 &mode_lib->vba.StutterExitWatermark,
2471 &mode_lib->vba.StutterEnterPlusExitWatermark,
2472 &mode_lib->vba.MinActiveDRAMClockChangeLatencySupported);
2478 mode_lib->vba.NumberOfActivePlanes,
2479 mode_lib->vba.VRatio,
2484 mode_lib->vba.DPPPerPlane,
2485 mode_lib->vba.HRatio,
2486 mode_lib->vba.PixelClock,
2491 mode_lib->vba.SourceScan,
2506 mode_lib->vba.NumberOfActivePlanes,
2507 mode_lib->vba.GPUVMEnable,
2508 mode_lib->vba.MetaChunkSize,
2509 mode_lib->vba.MinMetaChunkSizeBytes,
2510 mode_lib->vba.GPUVMMaxPageTableLevels,
2511 mode_lib->vba.HTotal,
2512 mode_lib->vba.VRatio,
2519 mode_lib->vba.DCCEnable,
2520 mode_lib->vba.PixelClock,
2523 mode_lib->vba.SourceScan,
2563 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2564 if (mode_lib->vba.PrefetchMode[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb] == 0) {
2568 mode_lib->vba.DRAMClockChangeWatermark,
2570 mode_lib->vba.StutterEnterPlusExitWatermark,
2571 mode_lib->vba.UrgentWatermark));
2572 } else if (mode_lib->vba.PrefetchMode[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb] == 1) {
2576 mode_lib->vba.StutterEnterPlusExitWatermark,
2577 mode_lib->vba.UrgentWatermark);
2581 locals->MinTTUVBlank[k] = mode_lib->vba.UrgentWatermark;
2583 if (!mode_lib->vba.DynamicMetadataEnable[k])
2584 locals->MinTTUVBlank[k] = mode_lib->vba.TCalc
2589 mode_lib->vba.ActiveDPPs = 0;
2590 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2592 mode_lib->vba.DCCEnable[k],
2594 mode_lib->vba.ViewportWidth[k],
2595 mode_lib->vba.ViewportHeight[k],
2596 mode_lib->vba.DETBufferSizeInKByte * 1024,
2598 mode_lib->vba.SwathHeightY[k],
2599 mode_lib->vba.SurfaceTiling[k],
2601 mode_lib->vba.SourceScan[k],
2608 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2609 if (mode_lib->vba.XFCEnabled[k] == true) {
2612 locals->XFCSlaveVUpdateOffset[k] = mode_lib->vba.XFCTSlvVupdateOffset;
2613 locals->XFCSlaveVupdateWidth[k] = mode_lib->vba.XFCTSlvVupdateWidth;
2614 locals->XFCSlaveVReadyOffset[k] = mode_lib->vba.XFCTSlvVreadyOffset;
2616 mode_lib->vba.PrefetchMode[mode_lib->vba.VoltageLevel][mode_lib->vba.maxMpcComb],
2617 mode_lib->vba.DRAMClockChangeLatency,
2618 mode_lib->vba.UrgentLatency,
2619 mode_lib->vba.SREnterPlusExitTime);
2620 mode_lib->vba.XFCRemoteSurfaceFlipDelay = CalculateRemoteSurfaceFlipDelay(
2622 mode_lib->vba.VRatio[k],
2625 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
2626 mode_lib->vba.XFCTSlvVupdateOffset,
2627 mode_lib->vba.XFCTSlvVupdateWidth,
2628 mode_lib->vba.XFCTSlvVreadyOffset,
2629 mode_lib->vba.XFCXBUFLatencyTolerance,
2630 mode_lib->vba.XFCFillBWOverhead,
2631 mode_lib->vba.XFCSlvChunkSize,
2632 mode_lib->vba.XFCBusTransportTime,
2633 mode_lib->vba.TCalc,
2635 &mode_lib->vba.SrcActiveDrainRate,
2636 &mode_lib->vba.TInitXFill,
2637 &mode_lib->vba.TslvChk);
2640 mode_lib->vba.XFCRemoteSurfaceFlipDelay
2641 / (mode_lib->vba.HTotal[k]
2642 / mode_lib->vba.PixelClock[k]),
2646 mode_lib->vba.XFCBusTransportTime
2647 / (mode_lib->vba.HTotal[k]
2648 / mode_lib->vba.PixelClock[k]),
2652 (mode_lib->vba.XFCBusTransportTime
2653 + mode_lib->vba.TInitXFill
2654 + mode_lib->vba.TslvChk)
2655 / (mode_lib->vba.HTotal[k]
2656 / mode_lib->vba.PixelClock[k]),
2658 mode_lib->vba.InitFillLevel = mode_lib->vba.XFCXBUFLatencyTolerance
2659 * mode_lib->vba.SrcActiveDrainRate;
2660 mode_lib->vba.FinalFillMargin =
2663 * mode_lib->vba.HTotal[k]
2664 / mode_lib->vba.PixelClock[k]
2665 * mode_lib->vba.SrcActiveDrainRate
2666 + mode_lib->vba.XFCFillConstant;
2667 mode_lib->vba.FinalFillLevel = mode_lib->vba.XFCRemoteSurfaceFlipDelay
2668 * mode_lib->vba.SrcActiveDrainRate
2669 + mode_lib->vba.FinalFillMargin;
2670 mode_lib->vba.RemainingFillLevel = dml_max(
2672 mode_lib->vba.FinalFillLevel - mode_lib->vba.InitFillLevel);
2673 mode_lib->vba.TFinalxFill = mode_lib->vba.RemainingFillLevel
2674 / (mode_lib->vba.SrcActiveDrainRate
2675 * mode_lib->vba.XFCFillBWOverhead / 100);
2677 mode_lib->vba.XFCRemoteSurfaceFlipDelay
2678 + mode_lib->vba.TFinalxFill
2681 * mode_lib->vba.HTotal[k]
2682 / mode_lib->vba.PixelClock[k];
2695 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2697 mode_lib->vba.DETBufferSizeInKByte,
2698 mode_lib->vba.SwathHeightY[k],
2699 mode_lib->vba.SwathHeightC[k],
2707 mode_lib->vba.SwathHeightY[k]);
2710 * (mode_lib->vba.HTotal[k]
2711 / mode_lib->vba.PixelClock[k])
2712 / mode_lib->vba.VRatio[k];
2715 mode_lib->vba.StutterPeriod = 999999.0;
2716 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2717 if (locals->FullDETBufferingTimeY[k] < mode_lib->vba.StutterPeriod) {
2718 mode_lib->vba.StutterPeriod = locals->FullDETBufferingTimeY[k];
2719 mode_lib->vba.FrameTimeForMinFullDETBufferingTime =
2720 (double) mode_lib->vba.VTotal[k] * mode_lib->vba.HTotal[k]
2721 / mode_lib->vba.PixelClock[k];
2725 mode_lib->vba.SwathHeightY[k] - (locals->LinesInDETY[k] - locals->LinesInDETYRoundedDownToSwath[k]);
2729 mode_lib->vba.AverageReadBandwidth = 0.0;
2730 mode_lib->vba.TotalRowReadBandwidth = 0.0;
2731 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2734 if (mode_lib->vba.DCCEnable[k]) {
2740 mode_lib->vba.AverageReadBandwidth =
2741 mode_lib->vba.AverageReadBandwidth
2743 dml_min(mode_lib->vba.DCCRate[k], DCCRateLimit);
2745 mode_lib->vba.AverageReadBandwidth =
2746 mode_lib->vba.AverageReadBandwidth
2750 mode_lib->vba.TotalRowReadBandwidth = mode_lib->vba.TotalRowReadBandwidth +
2754 mode_lib->vba.AverageDCCCompressionRate = mode_lib->vba.TotalDataReadBandwidth / mode_lib->vba.AverageReadBandwidth;
2756 mode_lib->vba.PartOfBurstThatFitsInROB =
2758 mode_lib->vba.StutterPeriod
2759 * mode_lib->vba.TotalDataReadBandwidth,
2760 mode_lib->vba.ROBBufferSizeInKByte * 1024
2761 * mode_lib->vba.AverageDCCCompressionRate);
2762 mode_lib->vba.StutterBurstTime = mode_lib->vba.PartOfBurstThatFitsInROB
2763 / mode_lib->vba.AverageDCCCompressionRate / mode_lib->vba.ReturnBW
2764 + (mode_lib->vba.StutterPeriod * mode_lib->vba.TotalDataReadBandwidth
2765 - mode_lib->vba.PartOfBurstThatFitsInROB)
2766 / (mode_lib->vba.DCFCLK * 64)
2767 + mode_lib->vba.StutterPeriod * mode_lib->vba.TotalRowReadBandwidth / mode_lib->vba.ReturnBW;
2768 mode_lib->vba.StutterBurstTime = dml_max(
2769 mode_lib->vba.StutterBurstTime,
2771 locals->SwathWidthYCriticalPlane / mode_lib->vba.ReturnBW)
2774 mode_lib->vba.TotalActiveWriteback = 0;
2775 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2776 if (mode_lib->vba.WritebackEnable[k] == true) {
2777 mode_lib->vba.TotalActiveWriteback = mode_lib->vba.TotalActiveWriteback + 1;
2781 if (mode_lib->vba.TotalActiveWriteback == 0) {
2782 mode_lib->vba.StutterEfficiencyNotIncludingVBlank = (1
2783 - (mode_lib->vba.SRExitTime + mode_lib->vba.StutterBurstTime)
2784 / mode_lib->vba.StutterPeriod) * 100;
2786 mode_lib->vba.StutterEfficiencyNotIncludingVBlank = 0;
2789 mode_lib->vba.SmallestVBlank = 999999;
2790 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2791 if (mode_lib->vba.SynchronizedVBlank || mode_lib->vba.NumberOfActivePlanes == 1) {
2792 mode_lib->vba.VBlankTime = (double) (mode_lib->vba.VTotal[k]
2793 - mode_lib->vba.VActive[k]) * mode_lib->vba.HTotal[k]
2794 / mode_lib->vba.PixelClock[k];
2796 mode_lib->vba.VBlankTime = 0;
2798 mode_lib->vba.SmallestVBlank = dml_min(
2799 mode_lib->vba.SmallestVBlank,
2800 mode_lib->vba.VBlankTime);
2803 mode_lib->vba.StutterEfficiency = (mode_lib->vba.StutterEfficiencyNotIncludingVBlank / 100
2804 * (mode_lib->vba.FrameTimeForMinFullDETBufferingTime
2805 - mode_lib->vba.SmallestVBlank)
2806 + mode_lib->vba.SmallestVBlank)
2807 / mode_lib->vba.FrameTimeForMinFullDETBufferingTime * 100;
2830 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
2833 if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
2836 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32) {
2839 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_16) {
2842 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_8) {
2845 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8) {
2853 if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
2854 || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
2855 || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
2856 || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
2857 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
2859 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
2861 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32
2862 || mode_lib->vba.SourcePixelFormat[k] == dm_444_16) {
2872 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
2875 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8) {
2888 if (mode_lib->vba.SourceScan[k] == dm_horz) {
2896 if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
2897 || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
2898 || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
2899 || mode_lib->vba.SourcePixelFormat[k] == dm_444_8)) {
2900 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
2901 || (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
2902 && (mode_lib->vba.SurfaceTiling[k]
2904 || mode_lib->vba.SurfaceTiling[k]
2906 || mode_lib->vba.SurfaceTiling[k]
2908 || mode_lib->vba.SurfaceTiling[k]
2910 || mode_lib->vba.SurfaceTiling[k]
2912 || mode_lib->vba.SurfaceTiling[k]
2914 || mode_lib->vba.SurfaceTiling[k]
2916 && mode_lib->vba.SourceScan[k] == dm_horz)) {
2918 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_8
2919 && mode_lib->vba.SourceScan[k] != dm_horz) {
2926 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
2929 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8
2930 && mode_lib->vba.SourceScan[k] == dm_horz) {
2933 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10
2934 && mode_lib->vba.SourceScan[k] == dm_horz) {
2943 if (mode_lib->vba.SourceScan[k] == dm_horz) {
2944 SwathWidth = mode_lib->vba.ViewportWidth[k];
2946 SwathWidth = mode_lib->vba.ViewportHeight[k];
2949 if (mode_lib->vba.ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2952 for (j = 0; j < mode_lib->vba.NumberOfActivePlanes; ++j) {
2953 if (mode_lib->vba.BlendingAndTiming[k] == j
2954 && mode_lib->vba.ODMCombineEnabled[k] == dm_odm_combine_mode_2to1) {
2962 mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]);
2964 SwathWidth = SwathWidth / mode_lib->vba.DPPPerPlane[k];
2972 if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
2983 if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
2992 <= mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0) {
2993 mode_lib->vba.SwathHeightY[k] = MaximumSwathHeightY;
2994 mode_lib->vba.SwathHeightC[k] = MaximumSwathHeightC;
2996 mode_lib->vba.SwathHeightY[k] = MinimumSwathHeightY;
2997 mode_lib->vba.SwathHeightC[k] = MinimumSwathHeightC;
3001 mode_lib->vba.DETBufferSizeInKByte,
3002 mode_lib->vba.SwathHeightY[k],
3003 mode_lib->vba.SwathHeightC[k],
3004 &mode_lib->vba.DETBufferSizeY[k],
3005 &mode_lib->vba.DETBufferSizeC[k]);
3398 struct vba_vars_st *locals = &mode_lib->vba;
3407 mode_lib->vba.ScaleRatioAndTapsSupport = true;
3408 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3409 if (mode_lib->vba.ScalerEnabled[k] == false
3410 && ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
3411 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
3412 && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
3413 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
3414 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8)
3415 || mode_lib->vba.HRatio[k] != 1.0
3416 || mode_lib->vba.htaps[k] != 1.0
3417 || mode_lib->vba.VRatio[k] != 1.0
3418 || mode_lib->vba.vtaps[k] != 1.0)) {
3419 mode_lib->vba.ScaleRatioAndTapsSupport = false;
3420 } else if (mode_lib->vba.vtaps[k] < 1.0 || mode_lib->vba.vtaps[k] > 8.0
3421 || mode_lib->vba.htaps[k] < 1.0 || mode_lib->vba.htaps[k] > 8.0
3422 || (mode_lib->vba.htaps[k] > 1.0
3423 && (mode_lib->vba.htaps[k] % 2) == 1)
3424 || mode_lib->vba.HRatio[k] > mode_lib->vba.MaxHSCLRatio
3425 || mode_lib->vba.VRatio[k] > mode_lib->vba.MaxVSCLRatio
3426 || mode_lib->vba.HRatio[k] > mode_lib->vba.htaps[k]
3427 || mode_lib->vba.VRatio[k] > mode_lib->vba.vtaps[k]
3428 || (mode_lib->vba.SourcePixelFormat[k] != dm_444_64
3429 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
3430 && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
3431 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
3432 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8
3433 && (mode_lib->vba.HRatio[k] / 2.0
3434 > mode_lib->vba.HTAPsChroma[k]
3435 || mode_lib->vba.VRatio[k] / 2.0
3436 > mode_lib->vba.VTAPsChroma[k]))) {
3437 mode_lib->vba.ScaleRatioAndTapsSupport = false;
3442 mode_lib->vba.SourceFormatPixelAndScanSupport = true;
3443 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3444 if ((mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
3445 && mode_lib->vba.SourceScan[k] != dm_horz)
3446 || ((mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d
3447 || mode_lib->vba.SurfaceTiling[k] == dm_sw_4kb_d_x
3448 || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d
3449 || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_t
3450 || mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_d_x
3451 || mode_lib->vba.SurfaceTiling[k] == dm_sw_var_d
3452 || mode_lib->vba.SurfaceTiling[k] == dm_sw_var_d_x)
3453 && mode_lib->vba.SourcePixelFormat[k] != dm_444_64)
3454 || (mode_lib->vba.SurfaceTiling[k] == dm_sw_64kb_r_x
3455 && (mode_lib->vba.SourcePixelFormat[k] == dm_mono_8
3456 || mode_lib->vba.SourcePixelFormat[k]
3458 || mode_lib->vba.SourcePixelFormat[k]
3460 || (((mode_lib->vba.SurfaceTiling[k] == dm_sw_gfx7_2d_thin_gl
3461 || mode_lib->vba.SurfaceTiling[k]
3463 && !((mode_lib->vba.SourcePixelFormat[k]
3465 || mode_lib->vba.SourcePixelFormat[k]
3467 && mode_lib->vba.SourceScan[k]
3469 && mode_lib->vba.SupportGFX7CompatibleTilingIn32bppAnd64bpp
3471 && mode_lib->vba.DCCEnable[k]
3473 || (mode_lib->vba.DCCEnable[k] == true
3474 && (mode_lib->vba.SurfaceTiling[k]
3476 || mode_lib->vba.SourcePixelFormat[k]
3478 || mode_lib->vba.SourcePixelFormat[k]
3480 mode_lib->vba.SourceFormatPixelAndScanSupport = false;
3485 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3486 if (mode_lib->vba.SourcePixelFormat[k] == dm_444_64) {
3489 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_32) {
3492 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_444_16
3493 || mode_lib->vba.SourcePixelFormat[k] == dm_mono_16) {
3496 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_mono_8) {
3499 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8) {
3506 if (mode_lib->vba.SourceScan[k] == dm_horz) {
3507 locals->SwathWidthYSingleDPP[k] = mode_lib->vba.ViewportWidth[k];
3509 locals->SwathWidthYSingleDPP[k] = mode_lib->vba.ViewportHeight[k];
3512 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3514 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * mode_lib->vba.VRatio[k];
3516 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * mode_lib->vba.VRatio[k] / 2.0;
3519 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3520 if (mode_lib->vba.WritebackEnable[k] == true
3521 && mode_lib->vba.WritebackPixelFormat[k] == dm_444_32) {
3522 locals->WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
3523 * mode_lib->vba.WritebackDestinationHeight[k]
3524 / (mode_lib->vba.WritebackSourceHeight[k]
3525 * mode_lib->vba.HTotal[k]
3526 / mode_lib->vba.PixelClock[k]) * 4.0;
3527 } else if (mode_lib->vba.WritebackEnable[k] == true
3528 && mode_lib->vba.WritebackPixelFormat[k] == dm_420_10) {
3529 locals->WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
3530 * mode_lib->vba.WritebackDestinationHeight[k]
3531 / (mode_lib->vba.WritebackSourceHeight[k]
3532 * mode_lib->vba.HTotal[k]
3533 / mode_lib->vba.PixelClock[k]) * 3.0;
3534 } else if (mode_lib->vba.WritebackEnable[k] == true) {
3535 locals->WriteBandwidth[k] = mode_lib->vba.WritebackDestinationWidth[k]
3536 * mode_lib->vba.WritebackDestinationHeight[k]
3537 / (mode_lib->vba.WritebackSourceHeight[k]
3538 * mode_lib->vba.HTotal[k]
3539 / mode_lib->vba.PixelClock[k]) * 1.5;
3544 mode_lib->vba.DCCEnabledInAnyPlane = false;
3545 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3546 if (mode_lib->vba.DCCEnable[k] == true) {
3547 mode_lib->vba.DCCEnabledInAnyPlane = true;
3550 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
3552 mode_lib->vba.ReturnBusWidth * mode_lib->vba.DCFCLKPerState[i],
3553 mode_lib->vba.DRAMSpeedPerState[i] * mode_lib->vba.NumberOfChannels
3554 * mode_lib->vba.DRAMChannelWidth,
3555 mode_lib->vba.FabricClockPerState[i]
3556 * mode_lib->vba.FabricDatapathToDCNDataReturn);
3557 if (mode_lib->vba.HostVMEnable == false) {
3559 * mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelDataOnly / 100.0;
3562 * mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData / 100.0;
3567 mode_lib->vba.WritebackLatencySupport = true;
3568 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3569 if (mode_lib->vba.WritebackEnable[k] == true) {
3570 if (mode_lib->vba.WritebackPixelFormat[k] == dm_444_32) {
3572 > (mode_lib->vba.WritebackInterfaceLumaBufferSize
3573 + mode_lib->vba.WritebackInterfaceChromaBufferSize)
3574 / mode_lib->vba.WritebackLatency) {
3575 mode_lib->vba.WritebackLatencySupport = false;
3581 mode_lib->vba.WritebackInterfaceLumaBufferSize,
3583 * mode_lib->vba.WritebackInterfaceChromaBufferSize)
3584 / mode_lib->vba.WritebackLatency) {
3585 mode_lib->vba.WritebackLatencySupport = false;
3592 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
3594 (mode_lib->vba.RoundTripPingLatencyCycles + 32.0) / mode_lib->vba.DCFCLKPerState[i]
3595 + dml_max3(mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelDataOnly,
3596 mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelMixedWithVMData,
3597 mode_lib->vba.UrgentOutOfOrderReturnPerChannelVMDataOnly)
3598 * mode_lib->vba.NumberOfChannels / locals->ReturnBWPerState[i][0];
3599 if ((mode_lib->vba.ROBBufferSizeInKByte - mode_lib->vba.PixelChunkSizeInKByte) * 1024.0 / locals->ReturnBWPerState[i][0]
3608 mode_lib->vba.TotalNumberOfActiveWriteback = 0;
3609 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3610 if (mode_lib->vba.WritebackEnable[k] == true) {
3611 if (mode_lib->vba.ActiveWritebacksPerPlane[k] == 0)
3612 mode_lib->vba.ActiveWritebacksPerPlane[k] = 1;
3613 mode_lib->vba.TotalNumberOfActiveWriteback =
3614 mode_lib->vba.TotalNumberOfActiveWriteback
3615 + mode_lib->vba.ActiveWritebacksPerPlane[k];
3618 mode_lib->vba.WritebackModeSupport = true;
3619 if (mode_lib->vba.TotalNumberOfActiveWriteback > mode_lib->vba.MaxNumWriteback) {
3620 mode_lib->vba.WritebackModeSupport = false;
3622 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3623 if (mode_lib->vba.WritebackEnable[k] == true
3624 && mode_lib->vba.Writeback10bpc420Supported != true
3625 && mode_lib->vba.WritebackPixelFormat[k] == dm_420_10) {
3626 mode_lib->vba.WritebackModeSupport = false;
3631 mode_lib->vba.WritebackScaleRatioAndTapsSupport = true;
3632 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3633 if (mode_lib->vba.WritebackEnable[k] == true) {
3634 if (mode_lib->vba.WritebackLumaAndChromaScalingSupported == false
3635 && (mode_lib->vba.WritebackHRatio[k] != 1.0
3636 || mode_lib->vba.WritebackVRatio[k] != 1.0)) {
3637 mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
3639 if (mode_lib->vba.WritebackHRatio[k] > mode_lib->vba.WritebackMaxHSCLRatio
3640 || mode_lib->vba.WritebackVRatio[k]
3641 > mode_lib->vba.WritebackMaxVSCLRatio
3642 || mode_lib->vba.WritebackHRatio[k]
3643 < mode_lib->vba.WritebackMinHSCLRatio
3644 || mode_lib->vba.WritebackVRatio[k]
3645 < mode_lib->vba.WritebackMinVSCLRatio
3646 || mode_lib->vba.WritebackLumaHTaps[k]
3647 > mode_lib->vba.WritebackMaxHSCLTaps
3648 || mode_lib->vba.WritebackLumaVTaps[k]
3649 > mode_lib->vba.WritebackMaxVSCLTaps
3650 || mode_lib->vba.WritebackHRatio[k]
3651 > mode_lib->vba.WritebackLumaHTaps[k]
3652 || mode_lib->vba.WritebackVRatio[k]
3653 > mode_lib->vba.WritebackLumaVTaps[k]
3654 || (mode_lib->vba.WritebackLumaHTaps[k] > 2.0
3655 && ((mode_lib->vba.WritebackLumaHTaps[k] % 2)
3657 || (mode_lib->vba.WritebackPixelFormat[k] != dm_444_32
3658 && (mode_lib->vba.WritebackChromaHTaps[k]
3659 > mode_lib->vba.WritebackMaxHSCLTaps
3660 || mode_lib->vba.WritebackChromaVTaps[k]
3661 > mode_lib->vba.WritebackMaxVSCLTaps
3663 * mode_lib->vba.WritebackHRatio[k]
3664 > mode_lib->vba.WritebackChromaHTaps[k]
3666 * mode_lib->vba.WritebackVRatio[k]
3667 > mode_lib->vba.WritebackChromaVTaps[k]
3668 || (mode_lib->vba.WritebackChromaHTaps[k] > 2.0
3669 && ((mode_lib->vba.WritebackChromaHTaps[k] % 2) == 1))))) {
3670 mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
3672 if (mode_lib->vba.WritebackVRatio[k] < 1.0) {
3673 mode_lib->vba.WritebackLumaVExtra =
3674 dml_max(1.0 - 2.0 / dml_ceil(1.0 / mode_lib->vba.WritebackVRatio[k], 1.0), 0.0);
3676 mode_lib->vba.WritebackLumaVExtra = -1;
3678 if ((mode_lib->vba.WritebackPixelFormat[k] == dm_444_32
3679 && mode_lib->vba.WritebackLumaVTaps[k]
3680 > (mode_lib->vba.WritebackLineBufferLumaBufferSize
3681 + mode_lib->vba.WritebackLineBufferChromaBufferSize)
3683 / mode_lib->vba.WritebackDestinationWidth[k]
3684 - mode_lib->vba.WritebackLumaVExtra)
3685 || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_8
3686 && mode_lib->vba.WritebackLumaVTaps[k]
3687 > mode_lib->vba.WritebackLineBufferLumaBufferSize
3688 * 8.0 / 10.0 / mode_lib->vba.WritebackDestinationWidth[k]
3689 - mode_lib->vba.WritebackLumaVExtra)
3690 || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_10
3691 && mode_lib->vba.WritebackLumaVTaps[k]
3692 > mode_lib->vba.WritebackLineBufferLumaBufferSize
3694 / mode_lib->vba.WritebackDestinationWidth[k]
3695 - mode_lib->vba.WritebackLumaVExtra)) {
3696 mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
3698 if (2.0 * mode_lib->vba.WritebackVRatio[k] < 1) {
3699 mode_lib->vba.WritebackChromaVExtra = 0.0;
3701 mode_lib->vba.WritebackChromaVExtra = -1;
3703 if ((mode_lib->vba.WritebackPixelFormat[k] == dm_420_8
3704 && mode_lib->vba.WritebackChromaVTaps[k]
3705 > mode_lib->vba.WritebackLineBufferChromaBufferSize
3706 * 8.0 / 10.0 / mode_lib->vba.WritebackDestinationWidth[k]
3707 - mode_lib->vba.WritebackChromaVExtra)
3708 || (mode_lib->vba.WritebackPixelFormat[k] == dm_420_10
3709 && mode_lib->vba.WritebackChromaVTaps[k]
3710 > mode_lib->vba.WritebackLineBufferChromaBufferSize
3712 / mode_lib->vba.WritebackDestinationWidth[k]
3713 - mode_lib->vba.WritebackChromaVExtra)) {
3714 mode_lib->vba.WritebackScaleRatioAndTapsSupport = false;
3720 mode_lib->vba.WritebackRequiredDISPCLK = 0.0;
3721 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3722 if (mode_lib->vba.WritebackEnable[k] == true) {
3723 mode_lib->vba.WritebackRequiredDISPCLK =
3725 mode_lib->vba.WritebackRequiredDISPCLK,
3727 mode_lib->vba.WritebackPixelFormat[k],
3728 mode_lib->vba.PixelClock[k],
3729 mode_lib->vba.WritebackHRatio[k],
3730 mode_lib->vba.WritebackVRatio[k],
3731 mode_lib->vba.WritebackLumaHTaps[k],
3732 mode_lib->vba.WritebackLumaVTaps[k],
3733 mode_lib->vba.WritebackChromaHTaps[k],
3734 mode_lib->vba.WritebackChromaVTaps[k],
3735 mode_lib->vba.WritebackDestinationWidth[k],
3736 mode_lib->vba.HTotal[k],
3737 mode_lib->vba.WritebackChromaLineBufferWidth));
3740 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3741 if (mode_lib->vba.HRatio[k] > 1.0) {
3743 mode_lib->vba.MaxDCHUBToPSCLThroughput,
3744 mode_lib->vba.MaxPSCLToLBThroughput
3745 * mode_lib->vba.HRatio[k]
3747 mode_lib->vba.htaps[k]
3752 mode_lib->vba.MaxDCHUBToPSCLThroughput,
3753 mode_lib->vba.MaxPSCLToLBThroughput);
3758 mode_lib->vba.PixelClock[k]
3760 mode_lib->vba.vtaps[k] / 6.0
3763 mode_lib->vba.HRatio[k]),
3764 mode_lib->vba.HRatio[k]
3765 * mode_lib->vba.VRatio[k]
3768 if ((mode_lib->vba.htaps[k] > 6.0 || mode_lib->vba.vtaps[k] > 6.0)
3770 < 2.0 * mode_lib->vba.PixelClock[k]) {
3772 * mode_lib->vba.PixelClock[k];
3775 if (mode_lib->vba.HRatio[k] / 2.0 > 1.0) {
3778 mode_lib->vba.MaxDCHUBToPSCLThroughput,
3779 mode_lib->vba.MaxPSCLToLBThroughput
3780 * mode_lib->vba.HRatio[k]
3783 mode_lib->vba.HTAPsChroma[k]
3788 mode_lib->vba.MaxDCHUBToPSCLThroughput,
3789 mode_lib->vba.MaxPSCLToLBThroughput);
3792 mode_lib->vba.PixelClock[k]
3794 mode_lib->vba.vtaps[k] / 6.0
3797 mode_lib->vba.HRatio[k]),
3798 mode_lib->vba.HRatio[k]
3799 * mode_lib->vba.VRatio[k]
3801 mode_lib->vba.VTAPsChroma[k]
3805 mode_lib->vba.HRatio[k]
3807 mode_lib->vba.HRatio[k]
3808 * mode_lib->vba.VRatio[k]
3812 if ((mode_lib->vba.htaps[k] > 6.0 || mode_lib->vba.vtaps[k] > 6.0
3813 || mode_lib->vba.HTAPsChroma[k] > 6.0
3814 || mode_lib->vba.VTAPsChroma[k] > 6.0)
3816 < 2.0 * mode_lib->vba.PixelClock[k]) {
3818 * mode_lib->vba.PixelClock[k];
3822 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3824 mode_lib->vba.SourcePixelFormat[k],
3825 mode_lib->vba.SurfaceTiling[k],
3832 if (mode_lib->vba.SourceScan[k] == dm_horz) {
3839 if ((mode_lib->vba.SourcePixelFormat[k] == dm_444_64
3840 || mode_lib->vba.SourcePixelFormat[k] == dm_444_32
3841 || mode_lib->vba.SourcePixelFormat[k] == dm_444_16
3842 || mode_lib->vba.SourcePixelFormat[k] == dm_mono_16
3843 || mode_lib->vba.SourcePixelFormat[k] == dm_mono_8)) {
3844 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear
3845 || (mode_lib->vba.SourcePixelFormat[k] == dm_444_64
3846 && (mode_lib->vba.SurfaceTiling[k]
3848 || mode_lib->vba.SurfaceTiling[k]
3850 || mode_lib->vba.SurfaceTiling[k]
3852 || mode_lib->vba.SurfaceTiling[k]
3854 || mode_lib->vba.SurfaceTiling[k]
3856 || mode_lib->vba.SurfaceTiling[k]
3858 || mode_lib->vba.SurfaceTiling[k]
3860 && mode_lib->vba.SourceScan[k] == dm_horz)) {
3868 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
3871 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_8
3872 && mode_lib->vba.SourceScan[k] == dm_horz) {
3876 } else if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10
3877 && mode_lib->vba.SourceScan[k] == dm_horz) {
3886 if (mode_lib->vba.SurfaceTiling[k] == dm_sw_linear) {
3887 mode_lib->vba.MaximumSwathWidthSupport = 8192.0;
3889 mode_lib->vba.MaximumSwathWidthSupport = 5120.0;
3891 mode_lib->vba.MaximumSwathWidthInDETBuffer =
3893 mode_lib->vba.MaximumSwathWidthSupport,
3894 mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0
3901 mode_lib->vba.MaximumSwathWidthInLineBuffer =
3902 mode_lib->vba.LineBufferSize
3903 * dml_max(mode_lib->vba.HRatio[k], 1.0)
3904 / mode_lib->vba.LBBitPerPixel[k]
3905 / (mode_lib->vba.vtaps[k]
3908 mode_lib->vba.VRatio[k],
3913 mode_lib->vba.MaximumSwathWidthInLineBuffer =
3915 mode_lib->vba.LineBufferSize
3917 mode_lib->vba.HRatio[k],
3919 / mode_lib->vba.LBBitPerPixel[k]
3920 / (mode_lib->vba.vtaps[k]
3923 mode_lib->vba.VRatio[k],
3927 2.0 * mode_lib->vba.LineBufferSize
3929 mode_lib->vba.HRatio[k]
3932 / mode_lib->vba.LBBitPerPixel[k]
3933 / (mode_lib->vba.VTAPsChroma[k]
3936 mode_lib->vba.VRatio[k]
3943 mode_lib->vba.MaximumSwathWidthInDETBuffer,
3944 mode_lib->vba.MaximumSwathWidthInLineBuffer);
3946 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
3948 mode_lib->vba.MaxDispclk[mode_lib->vba.soc.num_states],
3949 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
3952 mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(
3953 mode_lib->vba.MaxDispclk[i],
3954 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
3955 mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity = RoundToDFSGranularityDown(
3956 mode_lib->vba.MaxDppclk[i],
3957 mode_lib->vba.DISPCLKDPPCLKVCOSpeed);
3960 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
3961 mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine =
3962 mode_lib->vba.PixelClock[k]
3964 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading
3967 + mode_lib->vba.DISPCLKRampingMargin
3969 if (mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine >= mode_lib->vba.MaxDispclk[i]
3970 && i == mode_lib->vba.soc.num_states)
3971 mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine = mode_lib->vba.PixelClock[k]
3972 * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
3974 mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine = mode_lib->vba.PixelClock[k] / 2
3975 * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) * (1 + mode_lib->vba.DISPCLKRampingMargin / 100.0);
3976 if (mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine >= mode_lib->vba.MaxDispclk[i]
3977 && i == mode_lib->vba.soc.num_states)
3978 mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine = mode_lib->vba.PixelClock[k] / 2
3979 * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
3982 mode_lib->vba.PlaneRequiredDISPCLK = mode_lib->vba.PlaneRequiredDISPCLKWithoutODMCombine;
3983 if (mode_lib->vba.ODMCapability) {
3986 mode_lib->vba.PlaneRequiredDISPCLK = mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine;
3989 mode_lib->vba.PlaneRequiredDISPCLK = mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine;
3992 mode_lib->vba.PlaneRequiredDISPCLK = mode_lib->vba.PlaneRequiredDISPCLKWithODMCombine;
3996 if (locals->MinDPPCLKUsingSingleDPP[k] * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) <= mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity
4001 locals->MinDPPCLKUsingSingleDPP[k] * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
4005 locals->MinDPPCLKUsingSingleDPP[k] * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) / 2.0;
4009 mode_lib->vba.PlaneRequiredDISPCLK);
4010 if ((locals->MinDPPCLKUsingSingleDPP[k] / locals->NoOfDPP[i][j][k] * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4011 > mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity)
4012 || (mode_lib->vba.PlaneRequiredDISPCLK > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity)) {
4017 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++)
4020 while (locals->TotalNumberOfActiveDPP[i][j] < mode_lib->vba.MaxNumDPP
4021 && locals->TotalNumberOfActiveDPP[i][j] < 2 * mode_lib->vba.NumberOfActivePlanes) {
4027 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
4036 * (1 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100) / 2;
4040 if (locals->TotalNumberOfActiveDPP[i][j] > mode_lib->vba.MaxNumDPP) {
4043 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4048 * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
4052 * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) / 2.0;
4054 if (i != mode_lib->vba.soc.num_states) {
4055 mode_lib->vba.PlaneRequiredDISPCLK =
4056 mode_lib->vba.PixelClock[k]
4057 * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4058 * (1.0 + mode_lib->vba.DISPCLKRampingMargin / 100.0);
4060 mode_lib->vba.PlaneRequiredDISPCLK = mode_lib->vba.PixelClock[k]
4061 * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
4065 mode_lib->vba.PlaneRequiredDISPCLK);
4066 if (locals->MinDPPCLKUsingSingleDPP[k] / locals->NoOfDPP[i][j][k] * (1.0 + mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
4067 > mode_lib->vba.MaxDppclkRoundedDownToDFSGranularity
4068 || mode_lib->vba.PlaneRequiredDISPCLK > mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity)
4072 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++)
4077 mode_lib->vba.WritebackRequiredDISPCLK);
4078 if (mode_lib->vba.MaxDispclkRoundedDownToDFSGranularity
4079 < mode_lib->vba.WritebackRequiredDISPCLK) {
4086 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4088 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4090 if (dml_min(locals->SwathWidthYSingleDPP[k], dml_round(mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]))
4103 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4105 if (locals->TotalNumberOfActiveDPP[i][j] <= mode_lib->vba.MaxNumDPP)
4113 mode_lib->vba.TotalNumberOfActiveOTG = 0.0;
4114 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4115 if (mode_lib->vba.BlendingAndTiming[k] == k) {
4116 mode_lib->vba.TotalNumberOfActiveOTG = mode_lib->vba.TotalNumberOfActiveOTG
4120 if (mode_lib->vba.TotalNumberOfActiveOTG <= mode_lib->vba.MaxNumOTG) {
4121 mode_lib->vba.NumberOfOTGSupport = true;
4123 mode_lib->vba.NumberOfOTGSupport = false;
4127 mode_lib->vba.NonsupportedDSCInputBPC = false;
4128 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4129 if (!(mode_lib->vba.DSCInputBitPerComponent[k] == 12.0
4130 || mode_lib->vba.DSCInputBitPerComponent[k] == 10.0
4131 || mode_lib->vba.DSCInputBitPerComponent[k] == 8.0)) {
4132 mode_lib->vba.NonsupportedDSCInputBPC = true;
4135 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4136 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4139 if (mode_lib->vba.BlendingAndTiming[k] == k) {
4140 if (mode_lib->vba.Output[k] == dm_hdmi) {
4144 dml_min(600.0, mode_lib->vba.PHYCLKPerState[i]) / mode_lib->vba.PixelClockBackEnd[k] * 24,
4145 mode_lib->vba.ForcedOutputLinkBPP[k],
4147 mode_lib->vba.Output[k],
4148 mode_lib->vba.OutputFormat[k],
4149 mode_lib->vba.DSCInputBitPerComponent[k]);
4150 } else if (mode_lib->vba.Output[k] == dm_dp
4151 || mode_lib->vba.Output[k] == dm_edp) {
4152 if (mode_lib->vba.Output[k] == dm_edp) {
4153 mode_lib->vba.EffectiveFECOverhead = 0.0;
4155 mode_lib->vba.EffectiveFECOverhead =
4156 mode_lib->vba.FECOverhead;
4158 if (mode_lib->vba.PHYCLKPerState[i] >= 270.0) {
4159 mode_lib->vba.Outbpp = TruncToValidBPP(
4160 (1.0 - mode_lib->vba.Downspreading / 100.0) * 270.0
4161 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4162 mode_lib->vba.ForcedOutputLinkBPP[k],
4164 mode_lib->vba.Output[k],
4165 mode_lib->vba.OutputFormat[k],
4166 mode_lib->vba.DSCInputBitPerComponent[k]);
4167 mode_lib->vba.OutbppDSC = TruncToValidBPP(
4168 (1.0 - mode_lib->vba.Downspreading / 100.0) * (1.0 - mode_lib->vba.EffectiveFECOverhead / 100.0) * 270.0
4169 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4170 mode_lib->vba.ForcedOutputLinkBPP[k],
4172 mode_lib->vba.Output[k],
4173 mode_lib->vba.OutputFormat[k],
4174 mode_lib->vba.DSCInputBitPerComponent[k]);
4175 if (mode_lib->vba.DSCEnabled[k] == true) {
4177 if (mode_lib->vba.Output[k] == dm_dp) {
4182 mode_lib->vba.Outbpp = mode_lib->vba.OutbppDSC;
4187 locals->OutputBppPerState[i][k] = mode_lib->vba.Outbpp;
4189 if (mode_lib->vba.Outbpp == BPP_INVALID && mode_lib->vba.PHYCLKPerState[i] >= 540.0) {
4190 mode_lib->vba.Outbpp = TruncToValidBPP(
4191 (1.0 - mode_lib->vba.Downspreading / 100.0) * 540.0
4192 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4193 mode_lib->vba.ForcedOutputLinkBPP[k],
4195 mode_lib->vba.Output[k],
4196 mode_lib->vba.OutputFormat[k],
4197 mode_lib->vba.DSCInputBitPerComponent[k]);
4198 mode_lib->vba.OutbppDSC = TruncToValidBPP(
4199 (1.0 - mode_lib->vba.Downspreading / 100.0) * (1.0 - mode_lib->vba.EffectiveFECOverhead / 100.0) * 540.0
4200 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4201 mode_lib->vba.ForcedOutputLinkBPP[k],
4203 mode_lib->vba.Output[k],
4204 mode_lib->vba.OutputFormat[k],
4205 mode_lib->vba.DSCInputBitPerComponent[k]);
4206 if (mode_lib->vba.DSCEnabled[k] == true) {
4208 if (mode_lib->vba.Output[k] == dm_dp) {
4213 mode_lib->vba.Outbpp = mode_lib->vba.OutbppDSC;
4218 locals->OutputBppPerState[i][k] = mode_lib->vba.Outbpp;
4220 if (mode_lib->vba.Outbpp == BPP_INVALID
4221 && mode_lib->vba.PHYCLKPerState[i]
4223 mode_lib->vba.Outbpp = TruncToValidBPP(
4224 (1.0 - mode_lib->vba.Downspreading / 100.0) * 810.0
4225 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4226 mode_lib->vba.ForcedOutputLinkBPP[k],
4228 mode_lib->vba.Output[k],
4229 mode_lib->vba.OutputFormat[k],
4230 mode_lib->vba.DSCInputBitPerComponent[k]);
4231 mode_lib->vba.OutbppDSC = TruncToValidBPP(
4232 (1.0 - mode_lib->vba.Downspreading / 100.0) * (1.0 - mode_lib->vba.EffectiveFECOverhead / 100.0) * 810.0
4233 * mode_lib->vba.OutputLinkDPLanes[k] / mode_lib->vba.PixelClockBackEnd[k] * 8.0,
4234 mode_lib->vba.ForcedOutputLinkBPP[k],
4236 mode_lib->vba.Output[k],
4237 mode_lib->vba.OutputFormat[k],
4238 mode_lib->vba.DSCInputBitPerComponent[k]);
4239 if (mode_lib->vba.DSCEnabled[k] == true || mode_lib->vba.Outbpp == BPP_INVALID) {
4241 if (mode_lib->vba.Output[k] == dm_dp) {
4246 mode_lib->vba.Outbpp = mode_lib->vba.OutbppDSC;
4252 mode_lib->vba.Outbpp;
4260 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4262 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4264 || (mode_lib->vba.OutputFormat[k] == dm_420
4265 && mode_lib->vba.Interlace[k] == true
4266 && mode_lib->vba.ProgressiveToInterlaceUnitInOPP == true)) {
4271 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4272 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4274 if (mode_lib->vba.BlendingAndTiming[k] == k) {
4275 if ((mode_lib->vba.Output[k] == dm_dp
4276 || mode_lib->vba.Output[k] == dm_edp)) {
4277 if (mode_lib->vba.OutputFormat[k] == dm_420
4278 || mode_lib->vba.OutputFormat[k]
4280 mode_lib->vba.DSCFormatFactor = 2;
4282 mode_lib->vba.DSCFormatFactor = 1;
4286 if (mode_lib->vba.PixelClockBackEnd[k] / 6.0 / mode_lib->vba.DSCFormatFactor
4287 > (1.0 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) * mode_lib->vba.MaxDSCCLK[i]) {
4292 if (mode_lib->vba.PixelClockBackEnd[k] / 3.0 / mode_lib->vba.DSCFormatFactor
4293 > (1.0 - mode_lib->vba.DISPCLKDPPCLKDSCCLKDownSpreading / 100.0) * mode_lib->vba.MaxDSCCLK[i]) {
4303 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4305 mode_lib->vba.TotalDSCUnitsRequired = 0.0;
4306 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4309 mode_lib->vba.TotalDSCUnitsRequired =
4310 mode_lib->vba.TotalDSCUnitsRequired + 2.0;
4312 mode_lib->vba.TotalDSCUnitsRequired =
4313 mode_lib->vba.TotalDSCUnitsRequired + 1.0;
4317 if (mode_lib->vba.TotalDSCUnitsRequired > mode_lib->vba.NumberOfDSC) {
4323 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4324 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4325 if (mode_lib->vba.BlendingAndTiming[k] != k) {
4326 mode_lib->vba.slices = 0;
4329 mode_lib->vba.slices = 0;
4330 } else if (mode_lib->vba.PixelClockBackEnd[k] > 3200.0) {
4331 mode_lib->vba.slices = dml_ceil(
4332 mode_lib->vba.PixelClockBackEnd[k] / 400.0,
4334 } else if (mode_lib->vba.PixelClockBackEnd[k] > 1360.0) {
4335 mode_lib->vba.slices = 8.0;
4336 } else if (mode_lib->vba.PixelClockBackEnd[k] > 680.0) {
4337 mode_lib->vba.slices = 4.0;
4338 } else if (mode_lib->vba.PixelClockBackEnd[k] > 340.0) {
4339 mode_lib->vba.slices = 2.0;
4341 mode_lib->vba.slices = 1.0;
4345 mode_lib->vba.bpp = 0.0;
4347 mode_lib->vba.bpp = locals->OutputBppPerState[i][k];
4349 if (locals->RequiresDSC[i][k] == true && mode_lib->vba.bpp != 0.0) {
4353 mode_lib->vba.DSCInputBitPerComponent[k],
4354 mode_lib->vba.bpp,
4356 mode_lib->vba.HActive[k]
4357 / mode_lib->vba.slices,
4359 mode_lib->vba.slices,
4360 mode_lib->vba.OutputFormat[k])
4362 mode_lib->vba.OutputFormat[k]);
4366 mode_lib->vba.DSCInputBitPerComponent[k],
4367 mode_lib->vba.bpp,
4368 dml_ceil(mode_lib->vba.HActive[k] / mode_lib->vba.slices, 1.0),
4369 mode_lib->vba.slices / 2,
4370 mode_lib->vba.OutputFormat[k])
4371 + dscComputeDelay(mode_lib->vba.OutputFormat[k]));
4374 locals->DSCDelayPerState[i][k] * mode_lib->vba.PixelClock[k] / mode_lib->vba.PixelClockBackEnd[k];
4379 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4380 for (m = 0; m <= mode_lib->vba.NumberOfActivePlanes - 1; m++) {
4381 for (j = 0; j <= mode_lib->vba.NumberOfActivePlanes - 1; j++) {
4382 if (mode_lib->vba.BlendingAndTiming[k] == m && locals->RequiresDSC[i][m] == true)
4390 for (i = 0; i <= mode_lib->vba.soc.num_states; ++i) {
4393 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
4394 if (mode_lib->vba.DCCEnable[k] == true)
4400 mode_lib->vba.UrgentLatency = dml_max3(
4401 mode_lib->vba.UrgentLatencyPixelDataOnly,
4402 mode_lib->vba.UrgentLatencyPixelMixedWithVMData,
4403 mode_lib->vba.UrgentLatencyVMDataOnly);
4404 mode_lib->vba.PrefetchERROR = CalculateMinAndMaxPrefetchMode(
4405 mode_lib->vba.AllowDRAMSelfRefreshOrDRAMClockChangeInVblank,
4406 &mode_lib->vba.MinPrefetchMode,
4407 &mode_lib->vba.MaxPrefetchMode);
4409 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
4411 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4416 dml_min(locals->SwathWidthYSingleDPP[k], dml_round(mode_lib->vba.HActive[k] / 2.0 * mode_lib->vba.HRatio[k]));
4420 mode_lib->vba.SwathWidthGranularityY = 256.0
4423 mode_lib->vba.RoundedUpMaxSwathSizeBytesY =
4424 (dml_ceil(locals->SwathWidthYThisState[k] - 1.0, mode_lib->vba.SwathWidthGranularityY)
4425 + mode_lib->vba.SwathWidthGranularityY) * locals->BytePerPixelInDETY[k] * locals->MaxSwathHeightY[k];
4426 if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
4427 mode_lib->vba.RoundedUpMaxSwathSizeBytesY = dml_ceil(
4428 mode_lib->vba.RoundedUpMaxSwathSizeBytesY,
4432 mode_lib->vba.SwathWidthGranularityC = 256.0 / dml_ceil(locals->BytePerPixelInDETC[k], 2.0) / locals->MaxSwathHeightC[k];
4433 mode_lib->vba.RoundedUpMaxSwathSizeBytesC = (dml_ceil(locals->SwathWidthYThisState[k] / 2.0 - 1.0, mode_lib->vba.SwathWidthGranularityC)
4434 + mode_lib->vba.SwathWidthGranularityC) * locals->BytePerPixelInDETC[k] * locals->MaxSwathHeightC[k];
4435 if (mode_lib->vba.SourcePixelFormat[k] == dm_420_10) {
4436 mode_lib->vba.RoundedUpMaxSwathSizeBytesC = dml_ceil(mode_lib->vba.RoundedUpMaxSwathSizeBytesC, 256.0) + 256;
4439 mode_lib->vba.RoundedUpMaxSwathSizeBytesC = 0.0;
4441 if (mode_lib->vba.RoundedUpMaxSwathSizeBytesY + mode_lib->vba.RoundedUpMaxSwathSizeBytesC
4442 <= mode_lib->vba.DETBufferSizeInKByte * 1024.0 / 2.0) {
4455 mode_lib->vba.NumberOfActivePlanes,
4458 mode_lib->vba.VRatio,
4461 mode_lib->vba.HRatio,
4462 mode_lib->vba.PixelClock,
4466 &mode_lib->vba.ProjectedDCFCLKDeepSleep[0][0]);
4468 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4469 if ((mode_lib->vba.SourcePixelFormat[k] != dm_444_64
4470 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
4471 && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
4472 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
4473 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8)) {
4474 mode_lib->vba.PDEAndMetaPTEBytesPerFrameC = CalculateVMAndRowBytes(
4476 mode_lib->vba.DCCEnable[k],
4479 mode_lib->vba.SourcePixelFormat[k],
4480 mode_lib->vba.SurfaceTiling[k],
4482 mode_lib->vba.SourceScan[k],
4483 mode_lib->vba.ViewportWidth[k] / 2.0,
4484 mode_lib->vba.ViewportHeight[k] / 2.0,
4486 mode_lib->vba.GPUVMEnable,
4487 mode_lib->vba.HostVMEnable,
4488 mode_lib->vba.HostVMMaxPageTableLevels,
4489 mode_lib->vba.HostVMCachedPageTableLevels,
4490 mode_lib->vba.VMMPageSize,
4491 mode_lib->vba.PTEBufferSizeInRequestsChroma,
4492 mode_lib->vba.PitchC[k],
4495 &mode_lib->vba.MetaRowBytesC,
4496 &mode_lib->vba.DPTEBytesPerRowC,
4513 mode_lib->vba.VRatio[k]/2,
4514 mode_lib->vba.VTAPsChroma[k],
4515 mode_lib->vba.Interlace[k],
4516 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
4518 mode_lib->vba.ViewportYStartC[k],
4521 locals->PTEBufferSizeInRequestsForLuma = mode_lib->vba.PTEBufferSizeInRequestsLuma;
4523 mode_lib->vba.PDEAndMetaPTEBytesPerFrameC = 0.0;
4524 mode_lib->vba.MetaRowBytesC = 0.0;
4525 mode_lib->vba.DPTEBytesPerRowC = 0.0;
4528 locals->PTEBufferSizeInRequestsForLuma = mode_lib->vba.PTEBufferSizeInRequestsLuma + mode_lib->vba.PTEBufferSizeInRequestsChroma;
4530 mode_lib->vba.PDEAndMetaPTEBytesPerFrameY = CalculateVMAndRowBytes(
4532 mode_lib->vba.DCCEnable[k],
4535 mode_lib->vba.SourcePixelFormat[k],
4536 mode_lib->vba.SurfaceTiling[k],
4538 mode_lib->vba.SourceScan[k],
4539 mode_lib->vba.ViewportWidth[k],
4540 mode_lib->vba.ViewportHeight[k],
4542 mode_lib->vba.GPUVMEnable,
4543 mode_lib->vba.HostVMEnable,
4544 mode_lib->vba.HostVMMaxPageTableLevels,
4545 mode_lib->vba.HostVMCachedPageTableLevels,
4546 mode_lib->vba.VMMPageSize,
4548 mode_lib->vba.PitchY[k],
4549 mode_lib->vba.DCCMetaPitchY[k],
4551 &mode_lib->vba.MetaRowBytesY,
4552 &mode_lib->vba.DPTEBytesPerRowY,
4569 mode_lib->vba.VRatio[k],
4570 mode_lib->vba.vtaps[k],
4571 mode_lib->vba.Interlace[k],
4572 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
4574 mode_lib->vba.ViewportYStartY[k],
4578 mode_lib->vba.PDEAndMetaPTEBytesPerFrameY + mode_lib->vba.PDEAndMetaPTEBytesPerFrameC;
4579 locals->MetaRowBytes[0][0][k] = mode_lib->vba.MetaRowBytesY + mode_lib->vba.MetaRowBytesC;
4580 locals->DPTEBytesPerRow[0][0][k] = mode_lib->vba.DPTEBytesPerRowY + mode_lib->vba.DPTEBytesPerRowC;
4583 mode_lib->vba.GPUVMEnable,
4584 mode_lib->vba.SourcePixelFormat[k],
4585 mode_lib->vba.VRatio[k],
4586 mode_lib->vba.DCCEnable[k],
4587 mode_lib->vba.HTotal[k] /
4588 mode_lib->vba.PixelClock[k],
4589 mode_lib->vba.MetaRowBytesY,
4590 mode_lib->vba.MetaRowBytesC,
4593 mode_lib->vba.DPTEBytesPerRowY,
4594 mode_lib->vba.DPTEBytesPerRowC,
4600 mode_lib->vba.ExtraLatency = CalculateExtraLatency(
4603 mode_lib->vba.PixelChunkSizeInKByte,
4605 mode_lib->vba.MetaChunkSize,
4607 mode_lib->vba.GPUVMEnable,
4608 mode_lib->vba.HostVMEnable,
4609 mode_lib->vba.NumberOfActivePlanes,
4612 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
4613 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
4614 mode_lib->vba.HostVMMaxPageTableLevels,
4615 mode_lib->vba.HostVMCachedPageTableLevels);
4617 mode_lib->vba.TimeCalc = 24.0 / mode_lib->vba.ProjectedDCFCLKDeepSleep[0][0];
4618 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4619 if (mode_lib->vba.BlendingAndTiming[k] == k) {
4620 if (mode_lib->vba.WritebackEnable[k] == true) {
4621 locals->WritebackDelay[i][k] = mode_lib->vba.WritebackLatency
4623 mode_lib->vba.WritebackPixelFormat[k],
4624 mode_lib->vba.WritebackHRatio[k],
4625 mode_lib->vba.WritebackVRatio[k],
4626 mode_lib->vba.WritebackLumaHTaps[k],
4627 mode_lib->vba.WritebackLumaVTaps[k],
4628 mode_lib->vba.WritebackChromaHTaps[k],
4629 mode_lib->vba.WritebackChromaVTaps[k],
4630 mode_lib->vba.WritebackDestinationWidth[k]) / locals->RequiredDISPCLK[i][j];
4634 for (m = 0; m <= mode_lib->vba.NumberOfActivePlanes - 1; m++) {
4635 if (mode_lib->vba.BlendingAndTiming[m] == k
4636 && mode_lib->vba.WritebackEnable[m]
4639 mode_lib->vba.WritebackLatency + CalculateWriteBackDelay(
4640 mode_lib->vba.WritebackPixelFormat[m],
4641 mode_lib->vba.WritebackHRatio[m],
4642 mode_lib->vba.WritebackVRatio[m],
4643 mode_lib->vba.WritebackLumaHTaps[m],
4644 mode_lib->vba.WritebackLumaVTaps[m],
4645 mode_lib->vba.WritebackChromaHTaps[m],
4646 mode_lib->vba.WritebackChromaVTaps[m],
4647 mode_lib->vba.WritebackDestinationWidth[m]) / locals->RequiredDISPCLK[i][j]);
4652 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4653 for (m = 0; m <= mode_lib->vba.NumberOfActivePlanes - 1; m++) {
4654 if (mode_lib->vba.BlendingAndTiming[k] == m) {
4659 mode_lib->vba.MaxMaxVStartup[0][0] = 0;
4660 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4661 locals->MaximumVStartup[0][0][k] = mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k]
4662 - dml_max(1.0, dml_ceil(locals->WritebackDelay[i][k] / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]), 1.0));
4663 mode_lib->vba.MaxMaxVStartup[0][0] = dml_max(mode_lib->vba.MaxMaxVStartup[0][0], locals->MaximumVStartup[0][0][k]);
4666 mode_lib->vba.NextPrefetchMode = mode_lib->vba.MinPrefetchMode;
4667 mode_lib->vba.NextMaxVStartup = mode_lib->vba.MaxMaxVStartup[0][0];
4669 mode_lib->vba.PrefetchMode[i][j] = mode_lib->vba.NextPrefetchMode;
4670 mode_lib->vba.MaxVStartup = mode_lib->vba.NextMaxVStartup;
4672 mode_lib->vba.TWait = CalculateTWait(
4673 mode_lib->vba.PrefetchMode[i][j],
4674 mode_lib->vba.DRAMClockChangeLatency,
4675 mode_lib->vba.UrgentLatency,
4676 mode_lib->vba.SREnterPlusExitTime);
4677 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4681 if (mode_lib->vba.XFCEnabled[k] == true) {
4682 mode_lib->vba.XFCRemoteSurfaceFlipDelay =
4685 mode_lib->vba.VRatio[k],
4688 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
4689 mode_lib->vba.XFCTSlvVupdateOffset,
4690 mode_lib->vba.XFCTSlvVupdateWidth,
4691 mode_lib->vba.XFCTSlvVreadyOffset,
4692 mode_lib->vba.XFCXBUFLatencyTolerance,
4693 mode_lib->vba.XFCFillBWOverhead,
4694 mode_lib->vba.XFCSlvChunkSize,
4695 mode_lib->vba.XFCBusTransportTime,
4696 mode_lib->vba.TimeCalc,
4697 mode_lib->vba.TWait,
4698 &mode_lib->vba.SrcActiveDrainRate,
4699 &mode_lib->vba.TInitXFill,
4700 &mode_lib->vba.TslvChk);
4702 mode_lib->vba.XFCRemoteSurfaceFlipDelay = 0.0;
4707 myPipe.PixelClock = mode_lib->vba.PixelClock[k];
4708 myPipe.DCFCLKDeepSleep = mode_lib->vba.ProjectedDCFCLKDeepSleep[0][0];
4710 myPipe.ScalerEnabled = mode_lib->vba.ScalerEnabled[k];
4711 myPipe.SourceScan = mode_lib->vba.SourceScan[k];
4716 myPipe.InterlaceEnable = mode_lib->vba.Interlace[k];
4717 myPipe.NumberOfCursors = mode_lib->vba.NumberOfCursors[k];
4718 myPipe.VBlank = mode_lib->vba.VTotal[k] - mode_lib->vba.VActive[k];
4719 myPipe.HTotal = mode_lib->vba.HTotal[k];
4722 myHostVM.Enable = mode_lib->vba.HostVMEnable;
4723 myHostVM.MaxPageTableLevels = mode_lib->vba.HostVMMaxPageTableLevels;
4724 myHostVM.CachedPageTableLevels = mode_lib->vba.HostVMCachedPageTableLevels;
4727 mode_lib->vba.IsErrorResult[i][j][k] = CalculatePrefetchSchedule(
4729 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
4730 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
4733 mode_lib->vba.DPPCLKDelaySubtotal,
4734 mode_lib->vba.DPPCLKDelaySCL,
4735 mode_lib->vba.DPPCLKDelaySCLLBOnly,
4736 mode_lib->vba.DPPCLKDelayCNVCFormater,
4737 mode_lib->vba.DPPCLKDelayCNVCCursor,
4738 mode_lib->vba.DISPCLKDelaySubtotal,
4739 locals->SwathWidthYThisState[k] / mode_lib->vba.HRatio[k],
4740 mode_lib->vba.OutputFormat[k],
4741 mode_lib->vba.MaxInterDCNTileRepeaters,
4742 dml_min(mode_lib->vba.MaxVStartup, locals->MaximumVStartup[0][0][k]),
4744 mode_lib->vba.GPUVMMaxPageTableLevels,
4745 mode_lib->vba.GPUVMEnable,
4747 mode_lib->vba.DynamicMetadataEnable[k],
4748 mode_lib->vba.DynamicMetadataLinesBeforeActiveRequired[k],
4749 mode_lib->vba.DynamicMetadataTransmittedBytes[k],
4750 mode_lib->vba.DCCEnable[k],
4751 mode_lib->vba.UrgentLatency,
4752 mode_lib->vba.ExtraLatency,
4753 mode_lib->vba.TimeCalc,
4768 mode_lib->vba.TWait,
4769 mode_lib->vba.XFCEnabled[k],
4770 mode_lib->vba.XFCRemoteSurfaceFlipDelay,
4771 mode_lib->vba.ProgressiveToInterlaceUnitInOPP,
4787 &mode_lib->vba.VUpdateOffsetPix[k],
4788 &mode_lib->vba.VUpdateWidthPix[k],
4789 &mode_lib->vba.VReadyOffsetPix[k]);
4791 mode_lib->vba.MaximumReadBandwidthWithoutPrefetch = 0.0;
4792 mode_lib->vba.MaximumReadBandwidthWithPrefetch = 0.0;
4793 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4798 for (m = 0; m < mode_lib->vba.NumberOfCursors[k]; m++) {
4799 locals->cursor_bw[k] = mode_lib->vba.CursorWidth[k][m] * mode_lib->vba.CursorBPP[k][m]
4800 / 8.0 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * mode_lib->vba.VRatio[k];
4801 locals->cursor_bw_pre[k] = mode_lib->vba.CursorWidth[k][m] * mode_lib->vba.CursorBPP[k][m]
4802 / 8.0 / (mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k]) * locals->VRatioPreY[i][j][k];
4806 mode_lib->vba.DETBufferSizeInKByte,
4810 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
4811 mode_lib->vba.UrgentLatency,
4812 mode_lib->vba.CursorBufferSize,
4813 mode_lib->vba.CursorWidth[k][0] + mode_lib->vba.CursorWidth[k][1],
4814 dml_max(mode_lib->vba.CursorBPP[k][0], mode_lib->vba.CursorBPP[k][1]),
4815 mode_lib->vba.VRatio[k],
4829 if (mode_lib->vba.UseUrgentBurstBandwidth == false) {
4838 mode_lib->vba.MaximumReadBandwidthWithoutPrefetch = mode_lib->vba.MaximumReadBandwidthWithoutPrefetch
4842 mode_lib->vba.MaximumReadBandwidthWithPrefetch = mode_lib->vba.MaximumReadBandwidthWithPrefetch
4852 if (mode_lib->vba.MaximumReadBandwidthWithoutPrefetch > locals->ReturnBWPerState[i][0]
4858 if (mode_lib->vba.MaximumReadBandwidthWithPrefetch > locals->ReturnBWPerState[i][0]
4863 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4867 || mode_lib->vba.IsErrorResult[i][j][k] == true) {
4872 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4875 || mode_lib->vba.IsErrorResult[i][j][k] == true) {
4879 mode_lib->vba.AnyLinesForVMOrRowTooLarge = false;
4880 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
4882 mode_lib->vba.AnyLinesForVMOrRowTooLarge = true;
4886 if (mode_lib->vba.MaxVStartup <= 13 || mode_lib->vba.AnyLinesForVMOrRowTooLarge == false) {
4887 mode_lib->vba.NextMaxVStartup = mode_lib->vba.MaxMaxVStartup[0][0];
4888 mode_lib->vba.NextPrefetchMode = mode_lib->vba.NextPrefetchMode + 1;
4890 mode_lib->vba.NextMaxVStartup = mode_lib->vba.NextMaxVStartup - 1;
4893 && (mode_lib->vba.NextMaxVStartup != mode_lib->vba.MaxMaxVStartup[0][0]
4894 || mode_lib->vba.NextPrefetchMode < mode_lib->vba.MaxPrefetchMode));
4897 mode_lib->vba.BandwidthAvailableForImmediateFlip = locals->ReturnBWPerState[i][0];
4898 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4899 mode_lib->vba.BandwidthAvailableForImmediateFlip = mode_lib->vba.BandwidthAvailableForImmediateFlip
4907 mode_lib->vba.TotImmediateFlipBytes = 0.0;
4908 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4909 mode_lib->vba.TotImmediateFlipBytes = mode_lib->vba.TotImmediateFlipBytes
4913 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4916 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyPixelMixedWithVMData,
4917 mode_lib->vba.PercentOfIdealDRAMFabricAndSDPPortBWReceivedAfterUrgLatencyVMDataOnly,
4918 mode_lib->vba.ExtraLatency,
4919 mode_lib->vba.UrgentLatency,
4920 mode_lib->vba.GPUVMMaxPageTableLevels,
4921 mode_lib->vba.HostVMEnable,
4922 mode_lib->vba.HostVMMaxPageTableLevels,
4923 mode_lib->vba.HostVMCachedPageTableLevels,
4924 mode_lib->vba.GPUVMEnable,
4928 mode_lib->vba.BandwidthAvailableForImmediateFlip,
4929 mode_lib->vba.TotImmediateFlipBytes,
4930 mode_lib->vba.SourcePixelFormat[k],
4931 mode_lib->vba.HTotal[k] / mode_lib->vba.PixelClock[k],
4932 mode_lib->vba.VRatio[k],
4934 mode_lib->vba.DCCEnable[k],
4944 mode_lib->vba.total_dcn_read_bw_with_flip = 0.0;
4945 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4946 mode_lib->vba.total_dcn_read_bw_with_flip = mode_lib->vba.total_dcn_read_bw_with_flip + dml_max3(
4957 if (mode_lib->vba.total_dcn_read_bw_with_flip
4961 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
4969 mode_lib->vba.UrgentOutOfOrderReturnPerChannel = dml_max3(
4970 mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelDataOnly,
4971 mode_lib->vba.UrgentOutOfOrderReturnPerChannelPixelMixedWithVMData,
4972 mode_lib->vba.UrgentOutOfOrderReturnPerChannelVMDataOnly);
4975 mode_lib->vba.PrefetchMode[i][j],
4976 mode_lib->vba.NumberOfActivePlanes,
4977 mode_lib->vba.MaxLineBufferLines,
4978 mode_lib->vba.LineBufferSize,
4979 mode_lib->vba.DPPOutputBufferPixels,
4980 mode_lib->vba.DETBufferSizeInKByte,
4981 mode_lib->vba.WritebackInterfaceLumaBufferSize,
4982 mode_lib->vba.WritebackInterfaceChromaBufferSize,
4983 mode_lib->vba.DCFCLKPerState[i],
4984 mode_lib->vba.UrgentOutOfOrderReturnPerChannel * mode_lib->vba.NumberOfChannels,
4986 mode_lib->vba.GPUVMEnable,
4988 mode_lib->vba.MetaChunkSize,
4989 mode_lib->vba.UrgentLatency,
4990 mode_lib->vba.ExtraLatency,
4991 mode_lib->vba.WritebackLatency,
4992 mode_lib->vba.WritebackChunkSize,
4993 mode_lib->vba.SOCCLKPerState[i],
4994 mode_lib->vba.DRAMClockChangeLatency,
4995 mode_lib->vba.SRExitTime,
4996 mode_lib->vba.SREnterPlusExitTime,
4997 mode_lib->vba.ProjectedDCFCLKDeepSleep[0][0],
4999 mode_lib->vba.DCCEnable,
5006 mode_lib->vba.LBBitPerPixel,
5008 mode_lib->vba.HRatio,
5009 mode_lib->vba.vtaps,
5010 mode_lib->vba.VTAPsChroma,
5011 mode_lib->vba.VRatio,
5012 mode_lib->vba.HTotal,
5013 mode_lib->vba.PixelClock,
5014 mode_lib->vba.BlendingAndTiming,
5017 mode_lib->vba.WritebackEnable,
5018 mode_lib->vba.WritebackPixelFormat,
5019 mode_lib->vba.WritebackDestinationWidth,
5020 mode_lib->vba.WritebackDestinationHeight,
5021 mode_lib->vba.WritebackSourceHeight,
5023 &mode_lib->vba.UrgentWatermark,
5024 &mode_lib->vba.WritebackUrgentWatermark,
5025 &mode_lib->vba.DRAMClockChangeWatermark,
5026 &mode_lib->vba.WritebackDRAMClockChangeWatermark,
5027 &mode_lib->vba.StutterExitWatermark,
5028 &mode_lib->vba.StutterEnterPlusExitWatermark,
5029 &mode_lib->vba.MinActiveDRAMClockChangeLatencySupported);
5036 for (k = 0; k < mode_lib->vba.NumberOfActivePlanes; ++k) {
5039 for (i = 0; i <= mode_lib->vba.soc.num_states; ++i) {
5042 mode_lib->vba.MaxAveragePercentOfIdealSDPPortBWDisplayCanUseInNormalSystemOperation
5043 / 100.0, mode_lib->vba.DRAMSpeedPerState[i] *
5044 mode_lib->vba.NumberOfChannels *
5045 mode_lib->vba.DRAMChannelWidth *
5046 mode_lib->vba.MaxAveragePercentOfIdealDRAMBWDisplayCanUseInNormalSystemOperation
5059 for (i = 0; i <= mode_lib->vba.soc.num_states; i++) {
5062 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
5072 mode_lib->vba.CursorSupport = true;
5073 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
5074 if (mode_lib->vba.CursorWidth[k][0] > 0.0) {
5075 for (m = 0; m < mode_lib->vba.NumberOfCursors[k]; m++) {
5076 if (mode_lib->vba.CursorBPP[k][m] == 64 && mode_lib->vba.Cursor64BppSupport == false) {
5077 mode_lib->vba.CursorSupport = false;
5084 mode_lib->vba.PitchSupport = true;
5085 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
5087 dml_max(mode_lib->vba.PitchY[k], mode_lib->vba.ViewportWidth[k]),
5089 if (locals->AlignedYPitch[k] > mode_lib->vba.PitchY[k]) {
5090 mode_lib->vba.PitchSupport = false;
5092 if (mode_lib->vba.DCCEnable[k] == true) {
5095 mode_lib->vba.DCCMetaPitchY[k],
5096 mode_lib->vba.ViewportWidth[k]),
5099 locals->AlignedDCCMetaPitch[k] = mode_lib->vba.DCCMetaPitchY[k];
5101 if (locals->AlignedDCCMetaPitch[k] > mode_lib->vba.DCCMetaPitchY[k]) {
5102 mode_lib->vba.PitchSupport = false;
5104 if (mode_lib->vba.SourcePixelFormat[k] != dm_444_64
5105 && mode_lib->vba.SourcePixelFormat[k] != dm_444_32
5106 && mode_lib->vba.SourcePixelFormat[k] != dm_444_16
5107 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_16
5108 && mode_lib->vba.SourcePixelFormat[k] != dm_mono_8) {
5111 mode_lib->vba.PitchC[k],
5112 mode_lib->vba.ViewportWidth[k] / 2.0),
5115 locals->AlignedCPitch[k] = mode_lib->vba.PitchC[k];
5117 if (locals->AlignedCPitch[k] > mode_lib->vba.PitchC[k]) {
5118 mode_lib->vba.PitchSupport = false;
5123 for (i = mode_lib->vba.soc.num_states; i >= 0; i--) {
5127 if (mode_lib->vba.ScaleRatioAndTapsSupport != true) {
5129 } else if (mode_lib->vba.SourceFormatPixelAndScanSupport != true) {
5145 } else if (mode_lib->vba.NumberOfOTGSupport != true) {
5147 } else if (mode_lib->vba.WritebackModeSupport != true) {
5149 } else if (mode_lib->vba.WritebackLatencySupport != true) {
5151 } else if (mode_lib->vba.WritebackScaleRatioAndTapsSupport != true) {
5153 } else if (mode_lib->vba.CursorSupport != true) {
5155 } else if (mode_lib->vba.PitchSupport != true) {
5161 } else if (mode_lib->vba.NonsupportedDSCInputBPC != false) {
5163 } else if ((mode_lib->vba.HostVMEnable != false
5182 mode_lib->vba.VoltageLevel = mode_lib->vba.soc.num_states + 1;
5183 for (i = mode_lib->vba.VoltageOverrideLevel; i <= mode_lib->vba.soc.num_states; i++) {
5185 mode_lib->vba.VoltageLevel = i;
5187 || mode_lib->vba.WhenToDoMPCCombine == dm_mpc_always_when_possible
5188 || (mode_lib->vba.WhenToDoMPCCombine == dm_mpc_reduce_voltage_and_clocks
5200 mode_lib->vba.ImmediateFlipSupport =
5201 locals->ImmediateFlipSupportedForState[mode_lib->vba.VoltageLevel][MaximumMPCCombine];
5202 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
5203 mode_lib->vba.DPPPerPlane[k] = locals->NoOfDPP[mode_lib->vba.VoltageLevel][MaximumMPCCombine][k];
5204 locals->DPPCLK[k] = locals->RequiredDPPCLK[mode_lib->vba.VoltageLevel][MaximumMPCCombine][k];
5206 mode_lib->vba.DISPCLK = locals->RequiredDISPCLK[mode_lib->vba.VoltageLevel][MaximumMPCCombine];
5207 mode_lib->vba.maxMpcComb = MaximumMPCCombine;
5209 mode_lib->vba.DCFCLK = mode_lib->vba.DCFCLKPerState[mode_lib->vba.VoltageLevel];
5210 mode_lib->vba.DRAMSpeed = mode_lib->vba.DRAMSpeedPerState[mode_lib->vba.VoltageLevel];
5211 mode_lib->vba.FabricClock = mode_lib->vba.FabricClockPerState[mode_lib->vba.VoltageLevel];
5212 mode_lib->vba.SOCCLK = mode_lib->vba.SOCCLKPerState[mode_lib->vba.VoltageLevel];
5213 mode_lib->vba.ReturnBW = locals->ReturnBWPerState[mode_lib->vba.VoltageLevel][0];
5214 for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) {
5215 if (mode_lib->vba.BlendingAndTiming[k] == k) {
5216 mode_lib->vba.ODMCombineEnabled[k] =
5217 locals->ODMCombineEnablePerState[mode_lib->vba.VoltageLevel][k];
5219 mode_lib->vba.ODMCombineEnabled[k] = false;
5221 mode_lib->vba.DSCEnabled[k] =
5222 locals->RequiresDSC[mode_lib->vba.VoltageLevel][k];
5223 mode_lib->vba.OutputBpp[k] =
5224 locals->OutputBppPerState[mode_lib->vba.VoltageLevel][k];
5307 mode_lib->vba.TotalActiveDPP = 0;
5308 mode_lib->vba.TotalDCCActiveDPP = 0;
5310 mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP + DPPPerPlane[k];
5312 mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP + DPPPerPlane[k];
5316 mode_lib->vba.TotalDataReadBandwidth = 0;
5318 mode_lib->vba.TotalDataReadBandwidth = mode_lib->vba.TotalDataReadBandwidth
5326 mode_lib->vba.TotalActiveWriteback = 0;
5329 mode_lib->vba.TotalActiveWriteback = mode_lib->vba.TotalActiveWriteback + 1;
5333 if (mode_lib->vba.TotalActiveWriteback <= 1) {
5340 if (mode_lib->vba.TotalActiveWriteback <= 1) {
5349 mode_lib->vba.LBLatencyHidingSourceLinesY = dml_min((double) MaxLineBufferLines,
5353 mode_lib->vba.LBLatencyHidingSourceLinesC = dml_min((double) MaxLineBufferLines,
5357 EffectiveLBLatencyHidingY = mode_lib->vba.LBLatencyHidingSourceLinesY / VRatio[k]
5360 EffectiveLBLatencyHidingC = mode_lib->vba.LBLatencyHidingSourceLinesC
5418 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(
5422 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
5438 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(
5439 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k],
5444 mode_lib->vba.MinActiveDRAMClockChangeMargin = 999999;
5447 if (mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k]
5448 < mode_lib->vba.MinActiveDRAMClockChangeMargin) {
5449 mode_lib->vba.MinActiveDRAMClockChangeMargin =
5450 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
5463 *MinActiveDRAMClockChangeLatencySupported = mode_lib->vba.MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
5469 && mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k]
5472 mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
5476 mode_lib->vba.TotalNumberOfActiveOTG = 0;
5479 mode_lib->vba.TotalNumberOfActiveOTG = mode_lib->vba.TotalNumberOfActiveOTG + 1;
5483 if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 0) {
5485 } else if (((mode_lib->vba.SynchronizedVBlank == true
5486 || mode_lib->vba.TotalNumberOfActiveOTG == 1
5503 *StutterExitWatermark = SRExitTime + mode_lib->vba.LastPixelOfLineExtraWatermark
5506 SREnterPlusExitTime + mode_lib->vba.LastPixelOfLineExtraWatermark
5553 mode_lib->vba.DCFCLKDeepSleepPerPlane[k] = dml_max(
5560 mode_lib->vba.DCFCLKDeepSleepPerPlane[k] = 1.1 * SwathWidthY[k]
5564 mode_lib->vba.DCFCLKDeepSleepPerPlane[k] = dml_max(
5565 mode_lib->vba.DCFCLKDeepSleepPerPlane[k],
5574 mode_lib->vba.DCFCLKDeepSleepPerPlane[k]);