17966f319SQingqing Zhuo /* SPDX-License-Identifier: MIT */
27966f319SQingqing Zhuo /*
37966f319SQingqing Zhuo * Copyright 2023 Advanced Micro Devices, Inc.
47966f319SQingqing Zhuo *
57966f319SQingqing Zhuo * Permission is hereby granted, free of charge, to any person obtaining a
67966f319SQingqing Zhuo * copy of this software and associated documentation files (the "Software"),
77966f319SQingqing Zhuo * to deal in the Software without restriction, including without limitation
87966f319SQingqing Zhuo * the rights to use, copy, modify, merge, publish, distribute, sublicense,
97966f319SQingqing Zhuo * and/or sell copies of the Software, and to permit persons to whom the
107966f319SQingqing Zhuo * Software is furnished to do so, subject to the following conditions:
117966f319SQingqing Zhuo *
127966f319SQingqing Zhuo * The above copyright notice and this permission notice shall be included in
137966f319SQingqing Zhuo * all copies or substantial portions of the Software.
147966f319SQingqing Zhuo *
157966f319SQingqing Zhuo * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
167966f319SQingqing Zhuo * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
177966f319SQingqing Zhuo * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
187966f319SQingqing Zhuo * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
197966f319SQingqing Zhuo * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
207966f319SQingqing Zhuo * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
217966f319SQingqing Zhuo * OTHER DEALINGS IN THE SOFTWARE.
227966f319SQingqing Zhuo *
23d30a584cSStylon Wang * Authors: AMD
24d30a584cSStylon Wang *
257966f319SQingqing Zhuo */
267966f319SQingqing Zhuo
277966f319SQingqing Zhuo #include "dml2_policy.h"
287966f319SQingqing Zhuo
get_optimal_ntuple(const struct soc_bounding_box_st * socbb,struct soc_state_bounding_box_st * entry)297966f319SQingqing Zhuo static void get_optimal_ntuple(
307966f319SQingqing Zhuo const struct soc_bounding_box_st *socbb,
317966f319SQingqing Zhuo struct soc_state_bounding_box_st *entry)
327966f319SQingqing Zhuo {
337966f319SQingqing Zhuo if (entry->dcfclk_mhz > 0) {
347966f319SQingqing Zhuo float bw_on_sdp = (float)(entry->dcfclk_mhz * socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_sdp_bw_after_urgent / 100));
357966f319SQingqing Zhuo
367966f319SQingqing Zhuo entry->fabricclk_mhz = bw_on_sdp / (socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_fabric_bw_after_urgent / 100));
377966f319SQingqing Zhuo entry->dram_speed_mts = bw_on_sdp / (socbb->num_chans *
387966f319SQingqing Zhuo socbb->dram_channel_width_bytes * ((float)socbb->pct_ideal_dram_bw_after_urgent_pixel_only / 100));
397966f319SQingqing Zhuo } else if (entry->fabricclk_mhz > 0) {
407966f319SQingqing Zhuo float bw_on_fabric = (float)(entry->fabricclk_mhz * socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_fabric_bw_after_urgent / 100));
417966f319SQingqing Zhuo
427966f319SQingqing Zhuo entry->dcfclk_mhz = bw_on_fabric / (socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_sdp_bw_after_urgent / 100));
437966f319SQingqing Zhuo entry->dram_speed_mts = bw_on_fabric / (socbb->num_chans *
447966f319SQingqing Zhuo socbb->dram_channel_width_bytes * ((float)socbb->pct_ideal_dram_bw_after_urgent_pixel_only / 100));
457966f319SQingqing Zhuo } else if (entry->dram_speed_mts > 0) {
467966f319SQingqing Zhuo float bw_on_dram = (float)(entry->dram_speed_mts * socbb->num_chans *
477966f319SQingqing Zhuo socbb->dram_channel_width_bytes * ((float)socbb->pct_ideal_dram_bw_after_urgent_pixel_only / 100));
487966f319SQingqing Zhuo
497966f319SQingqing Zhuo entry->fabricclk_mhz = bw_on_dram / (socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_fabric_bw_after_urgent / 100));
507966f319SQingqing Zhuo entry->dcfclk_mhz = bw_on_dram / (socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_sdp_bw_after_urgent / 100));
517966f319SQingqing Zhuo }
527966f319SQingqing Zhuo }
537966f319SQingqing Zhuo
calculate_net_bw_in_mbytes_sec(const struct soc_bounding_box_st * socbb,struct soc_state_bounding_box_st * entry)547966f319SQingqing Zhuo static float calculate_net_bw_in_mbytes_sec(const struct soc_bounding_box_st *socbb,
557966f319SQingqing Zhuo struct soc_state_bounding_box_st *entry)
567966f319SQingqing Zhuo {
577966f319SQingqing Zhuo float memory_bw_mbytes_sec = (float)(entry->dram_speed_mts * socbb->num_chans *
587966f319SQingqing Zhuo socbb->dram_channel_width_bytes * ((float)socbb->pct_ideal_dram_bw_after_urgent_pixel_only / 100));
597966f319SQingqing Zhuo
607966f319SQingqing Zhuo float fabric_bw_mbytes_sec = (float)(entry->fabricclk_mhz * socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_fabric_bw_after_urgent / 100));
617966f319SQingqing Zhuo
627966f319SQingqing Zhuo float sdp_bw_mbytes_sec = (float)(entry->dcfclk_mhz * socbb->return_bus_width_bytes * ((float)socbb->pct_ideal_sdp_bw_after_urgent / 100));
637966f319SQingqing Zhuo
647966f319SQingqing Zhuo float limiting_bw_mbytes_sec = memory_bw_mbytes_sec;
657966f319SQingqing Zhuo
667966f319SQingqing Zhuo if (fabric_bw_mbytes_sec < limiting_bw_mbytes_sec)
677966f319SQingqing Zhuo limiting_bw_mbytes_sec = fabric_bw_mbytes_sec;
687966f319SQingqing Zhuo
697966f319SQingqing Zhuo if (sdp_bw_mbytes_sec < limiting_bw_mbytes_sec)
707966f319SQingqing Zhuo limiting_bw_mbytes_sec = sdp_bw_mbytes_sec;
717966f319SQingqing Zhuo
727966f319SQingqing Zhuo return limiting_bw_mbytes_sec;
737966f319SQingqing Zhuo }
747966f319SQingqing Zhuo
insert_entry_into_table_sorted(const struct soc_bounding_box_st * socbb,struct soc_states_st * table,struct soc_state_bounding_box_st * entry)757966f319SQingqing Zhuo static void insert_entry_into_table_sorted(const struct soc_bounding_box_st *socbb,
767966f319SQingqing Zhuo struct soc_states_st *table,
777966f319SQingqing Zhuo struct soc_state_bounding_box_st *entry)
787966f319SQingqing Zhuo {
797966f319SQingqing Zhuo int index = 0;
807966f319SQingqing Zhuo int i = 0;
817966f319SQingqing Zhuo float net_bw_of_new_state = 0;
827966f319SQingqing Zhuo
837966f319SQingqing Zhuo get_optimal_ntuple(socbb, entry);
847966f319SQingqing Zhuo
857966f319SQingqing Zhuo if (table->num_states == 0) {
867966f319SQingqing Zhuo index = 0;
877966f319SQingqing Zhuo } else {
887966f319SQingqing Zhuo net_bw_of_new_state = calculate_net_bw_in_mbytes_sec(socbb, entry);
897966f319SQingqing Zhuo while (net_bw_of_new_state > calculate_net_bw_in_mbytes_sec(socbb, &table->state_array[index])) {
907966f319SQingqing Zhuo index++;
917966f319SQingqing Zhuo if (index >= (int) table->num_states)
927966f319SQingqing Zhuo break;
937966f319SQingqing Zhuo }
947966f319SQingqing Zhuo
957966f319SQingqing Zhuo for (i = table->num_states; i > index; i--) {
967966f319SQingqing Zhuo table->state_array[i] = table->state_array[i - 1];
977966f319SQingqing Zhuo }
987966f319SQingqing Zhuo //ASSERT(index < MAX_CLK_TABLE_SIZE);
997966f319SQingqing Zhuo }
1007966f319SQingqing Zhuo
1017966f319SQingqing Zhuo table->state_array[index] = *entry;
1027966f319SQingqing Zhuo table->state_array[index].dcfclk_mhz = (int)entry->dcfclk_mhz;
1037966f319SQingqing Zhuo table->state_array[index].fabricclk_mhz = (int)entry->fabricclk_mhz;
1047966f319SQingqing Zhuo table->state_array[index].dram_speed_mts = (int)entry->dram_speed_mts;
1057966f319SQingqing Zhuo table->num_states++;
1067966f319SQingqing Zhuo }
1077966f319SQingqing Zhuo
remove_entry_from_table_at_index(struct soc_states_st * table,unsigned int index)1087966f319SQingqing Zhuo static void remove_entry_from_table_at_index(struct soc_states_st *table,
1097966f319SQingqing Zhuo unsigned int index)
1107966f319SQingqing Zhuo {
1117966f319SQingqing Zhuo int i;
1127966f319SQingqing Zhuo
1137966f319SQingqing Zhuo if (table->num_states == 0)
1147966f319SQingqing Zhuo return;
1157966f319SQingqing Zhuo
1167966f319SQingqing Zhuo for (i = index; i < (int) table->num_states - 1; i++) {
1177966f319SQingqing Zhuo table->state_array[i] = table->state_array[i + 1];
1187966f319SQingqing Zhuo }
1197966f319SQingqing Zhuo memset(&table->state_array[--table->num_states], 0, sizeof(struct soc_state_bounding_box_st));
1207966f319SQingqing Zhuo }
1217966f319SQingqing Zhuo
dml2_policy_build_synthetic_soc_states(struct dml2_policy_build_synthetic_soc_states_scratch * s,struct dml2_policy_build_synthetic_soc_states_params * p)1227966f319SQingqing Zhuo int dml2_policy_build_synthetic_soc_states(struct dml2_policy_build_synthetic_soc_states_scratch *s,
1237966f319SQingqing Zhuo struct dml2_policy_build_synthetic_soc_states_params *p)
1247966f319SQingqing Zhuo {
1257966f319SQingqing Zhuo int i, j;
1267966f319SQingqing Zhuo unsigned int min_fclk_mhz = p->in_states->state_array[0].fabricclk_mhz;
1277966f319SQingqing Zhuo unsigned int min_dcfclk_mhz = p->in_states->state_array[0].dcfclk_mhz;
1287966f319SQingqing Zhuo unsigned int min_socclk_mhz = p->in_states->state_array[0].socclk_mhz;
1297966f319SQingqing Zhuo
1307966f319SQingqing Zhuo int max_dcfclk_mhz = 0, max_dispclk_mhz = 0, max_dppclk_mhz = 0,
1317966f319SQingqing Zhuo max_phyclk_mhz = 0, max_dtbclk_mhz = 0, max_fclk_mhz = 0,
1327966f319SQingqing Zhuo max_uclk_mhz = 0, max_socclk_mhz = 0;
1337966f319SQingqing Zhuo
1347966f319SQingqing Zhuo int num_uclk_dpms = 0, num_fclk_dpms = 0;
1357966f319SQingqing Zhuo
1367966f319SQingqing Zhuo for (i = 0; i < __DML_MAX_STATE_ARRAY_SIZE__; i++) {
1377966f319SQingqing Zhuo if (p->in_states->state_array[i].dcfclk_mhz > max_dcfclk_mhz)
1387966f319SQingqing Zhuo max_dcfclk_mhz = (int) p->in_states->state_array[i].dcfclk_mhz;
1397966f319SQingqing Zhuo if (p->in_states->state_array[i].fabricclk_mhz > max_fclk_mhz)
1407966f319SQingqing Zhuo max_fclk_mhz = (int) p->in_states->state_array[i].fabricclk_mhz;
1417966f319SQingqing Zhuo if (p->in_states->state_array[i].socclk_mhz > max_socclk_mhz)
1427966f319SQingqing Zhuo max_socclk_mhz = (int) p->in_states->state_array[i].socclk_mhz;
1437966f319SQingqing Zhuo if (p->in_states->state_array[i].dram_speed_mts > max_uclk_mhz)
1447966f319SQingqing Zhuo max_uclk_mhz = (int) p->in_states->state_array[i].dram_speed_mts;
1457966f319SQingqing Zhuo if (p->in_states->state_array[i].dispclk_mhz > max_dispclk_mhz)
1467966f319SQingqing Zhuo max_dispclk_mhz = (int) p->in_states->state_array[i].dispclk_mhz;
1477966f319SQingqing Zhuo if (p->in_states->state_array[i].dppclk_mhz > max_dppclk_mhz)
1487966f319SQingqing Zhuo max_dppclk_mhz = (int) p->in_states->state_array[i].dppclk_mhz;
1497966f319SQingqing Zhuo if (p->in_states->state_array[i].phyclk_mhz > max_phyclk_mhz)
1507966f319SQingqing Zhuo max_phyclk_mhz = (int)p->in_states->state_array[i].phyclk_mhz;
1517966f319SQingqing Zhuo if (p->in_states->state_array[i].dtbclk_mhz > max_dtbclk_mhz)
1527966f319SQingqing Zhuo max_dtbclk_mhz = (int)p->in_states->state_array[i].dtbclk_mhz;
1537966f319SQingqing Zhuo
1547966f319SQingqing Zhuo if (p->in_states->state_array[i].fabricclk_mhz > 0)
1557966f319SQingqing Zhuo num_fclk_dpms++;
1567966f319SQingqing Zhuo if (p->in_states->state_array[i].dram_speed_mts > 0)
1577966f319SQingqing Zhuo num_uclk_dpms++;
1587966f319SQingqing Zhuo }
1597966f319SQingqing Zhuo
1607966f319SQingqing Zhuo if (!max_dcfclk_mhz || !max_dispclk_mhz || !max_dppclk_mhz || !max_phyclk_mhz || !max_dtbclk_mhz)
1617966f319SQingqing Zhuo return -1;
1627966f319SQingqing Zhuo
1637966f319SQingqing Zhuo p->out_states->num_states = 0;
1647966f319SQingqing Zhuo
1657966f319SQingqing Zhuo s->entry = p->in_states->state_array[0];
1667966f319SQingqing Zhuo
1677966f319SQingqing Zhuo s->entry.dispclk_mhz = max_dispclk_mhz;
1687966f319SQingqing Zhuo s->entry.dppclk_mhz = max_dppclk_mhz;
1697966f319SQingqing Zhuo s->entry.dtbclk_mhz = max_dtbclk_mhz;
1707966f319SQingqing Zhuo s->entry.phyclk_mhz = max_phyclk_mhz;
1717966f319SQingqing Zhuo
1727966f319SQingqing Zhuo s->entry.dscclk_mhz = max_dispclk_mhz / 3;
1737966f319SQingqing Zhuo s->entry.phyclk_mhz = max_phyclk_mhz;
1747966f319SQingqing Zhuo s->entry.dtbclk_mhz = max_dtbclk_mhz;
1757966f319SQingqing Zhuo
1767966f319SQingqing Zhuo // Insert all the DCFCLK STAs first
1777966f319SQingqing Zhuo for (i = 0; i < p->num_dcfclk_stas; i++) {
1787966f319SQingqing Zhuo s->entry.dcfclk_mhz = p->dcfclk_stas_mhz[i];
1797966f319SQingqing Zhuo s->entry.fabricclk_mhz = 0;
1807966f319SQingqing Zhuo s->entry.dram_speed_mts = 0;
1817966f319SQingqing Zhuo if (i > 0)
1827966f319SQingqing Zhuo s->entry.socclk_mhz = max_socclk_mhz;
1837966f319SQingqing Zhuo
1847966f319SQingqing Zhuo insert_entry_into_table_sorted(p->in_bbox, p->out_states, &s->entry);
1857966f319SQingqing Zhuo }
1867966f319SQingqing Zhuo
1877966f319SQingqing Zhuo // Insert the UCLK DPMS
1887966f319SQingqing Zhuo for (i = 0; i < num_uclk_dpms; i++) {
1897966f319SQingqing Zhuo s->entry.dcfclk_mhz = 0;
1907966f319SQingqing Zhuo s->entry.fabricclk_mhz = 0;
1917966f319SQingqing Zhuo s->entry.dram_speed_mts = p->in_states->state_array[i].dram_speed_mts;
1927966f319SQingqing Zhuo if (i == 0) {
1937966f319SQingqing Zhuo s->entry.socclk_mhz = min_socclk_mhz;
1947966f319SQingqing Zhuo } else {
1957966f319SQingqing Zhuo s->entry.socclk_mhz = max_socclk_mhz;
1967966f319SQingqing Zhuo }
1977966f319SQingqing Zhuo
1987966f319SQingqing Zhuo insert_entry_into_table_sorted(p->in_bbox, p->out_states, &s->entry);
1997966f319SQingqing Zhuo }
2007966f319SQingqing Zhuo
2017966f319SQingqing Zhuo // Insert FCLK DPMs (if present)
2027966f319SQingqing Zhuo if (num_fclk_dpms > 2) {
2037966f319SQingqing Zhuo for (i = 0; i < num_fclk_dpms; i++) {
2047966f319SQingqing Zhuo s->entry.dcfclk_mhz = 0;
2057966f319SQingqing Zhuo s->entry.fabricclk_mhz = p->in_states->state_array[i].fabricclk_mhz;
2067966f319SQingqing Zhuo s->entry.dram_speed_mts = 0;
2077966f319SQingqing Zhuo
2087966f319SQingqing Zhuo insert_entry_into_table_sorted(p->in_bbox, p->out_states, &s->entry);
2097966f319SQingqing Zhuo }
2107966f319SQingqing Zhuo }
2117966f319SQingqing Zhuo // Add max FCLK
2127966f319SQingqing Zhuo else {
2137966f319SQingqing Zhuo s->entry.dcfclk_mhz = 0;
2147966f319SQingqing Zhuo s->entry.fabricclk_mhz = p->in_states->state_array[num_fclk_dpms - 1].fabricclk_mhz;
2157966f319SQingqing Zhuo s->entry.dram_speed_mts = 0;
2167966f319SQingqing Zhuo
2177966f319SQingqing Zhuo insert_entry_into_table_sorted(p->in_bbox, p->out_states, &s->entry);
2187966f319SQingqing Zhuo }
2197966f319SQingqing Zhuo
2207966f319SQingqing Zhuo // Remove states that require higher clocks than are supported
2217966f319SQingqing Zhuo for (i = p->out_states->num_states - 1; i >= 0; i--) {
2227966f319SQingqing Zhuo if (p->out_states->state_array[i].dcfclk_mhz > max_dcfclk_mhz ||
2237966f319SQingqing Zhuo p->out_states->state_array[i].fabricclk_mhz > max_fclk_mhz ||
2247966f319SQingqing Zhuo p->out_states->state_array[i].dram_speed_mts > max_uclk_mhz)
2257966f319SQingqing Zhuo remove_entry_from_table_at_index(p->out_states, i);
2267966f319SQingqing Zhuo }
2277966f319SQingqing Zhuo
2287966f319SQingqing Zhuo // At this point, the table contains all "points of interest" based on
2297966f319SQingqing Zhuo // DPMs from PMFW, and STAs. Table is sorted by BW, and all clock
2307966f319SQingqing Zhuo // ratios (by derate, are exact).
2317966f319SQingqing Zhuo
2327966f319SQingqing Zhuo // Round up UCLK to DPMs
2337966f319SQingqing Zhuo for (i = p->out_states->num_states - 1; i >= 0; i--) {
2347966f319SQingqing Zhuo for (j = 0; j < num_uclk_dpms; j++) {
2357966f319SQingqing Zhuo if (p->in_states->state_array[j].dram_speed_mts >= p->out_states->state_array[i].dram_speed_mts) {
2367966f319SQingqing Zhuo p->out_states->state_array[i].dram_speed_mts = p->in_states->state_array[j].dram_speed_mts;
2377966f319SQingqing Zhuo break;
2387966f319SQingqing Zhuo }
2397966f319SQingqing Zhuo }
2407966f319SQingqing Zhuo }
2417966f319SQingqing Zhuo
2427966f319SQingqing Zhuo // If FCLK is coarse grained, round up to next DPMs
2437966f319SQingqing Zhuo if (num_fclk_dpms > 2) {
2447966f319SQingqing Zhuo for (i = p->out_states->num_states - 1; i >= 0; i--) {
2457966f319SQingqing Zhuo for (j = 0; j < num_fclk_dpms; j++) {
2467966f319SQingqing Zhuo if (p->in_states->state_array[j].fabricclk_mhz >= p->out_states->state_array[i].fabricclk_mhz) {
2477966f319SQingqing Zhuo p->out_states->state_array[i].fabricclk_mhz = p->in_states->state_array[j].fabricclk_mhz;
2487966f319SQingqing Zhuo break;
2497966f319SQingqing Zhuo }
2507966f319SQingqing Zhuo }
2517966f319SQingqing Zhuo }
2527966f319SQingqing Zhuo }
2537966f319SQingqing Zhuo
2547966f319SQingqing Zhuo // Clamp to min FCLK/DCFCLK
2557966f319SQingqing Zhuo for (i = p->out_states->num_states - 1; i >= 0; i--) {
2567966f319SQingqing Zhuo if (p->out_states->state_array[i].fabricclk_mhz < min_fclk_mhz) {
2577966f319SQingqing Zhuo p->out_states->state_array[i].fabricclk_mhz = min_fclk_mhz;
2587966f319SQingqing Zhuo }
2597966f319SQingqing Zhuo if (p->out_states->state_array[i].dcfclk_mhz < min_dcfclk_mhz) {
2607966f319SQingqing Zhuo p->out_states->state_array[i].dcfclk_mhz = min_dcfclk_mhz;
2617966f319SQingqing Zhuo }
2627966f319SQingqing Zhuo }
2637966f319SQingqing Zhuo
2647966f319SQingqing Zhuo // Remove duplicate states, note duplicate states are always neighbouring since table is sorted.
2657966f319SQingqing Zhuo i = 0;
2667966f319SQingqing Zhuo while (i < (int) p->out_states->num_states - 1) {
2677966f319SQingqing Zhuo if (p->out_states->state_array[i].dcfclk_mhz == p->out_states->state_array[i + 1].dcfclk_mhz &&
2687966f319SQingqing Zhuo p->out_states->state_array[i].fabricclk_mhz == p->out_states->state_array[i + 1].fabricclk_mhz &&
2697966f319SQingqing Zhuo p->out_states->state_array[i].dram_speed_mts == p->out_states->state_array[i + 1].dram_speed_mts)
2707966f319SQingqing Zhuo remove_entry_from_table_at_index(p->out_states, i);
2717966f319SQingqing Zhuo else
2727966f319SQingqing Zhuo i++;
2737966f319SQingqing Zhuo }
2747966f319SQingqing Zhuo
2757966f319SQingqing Zhuo return 0;
2767966f319SQingqing Zhuo }
2777966f319SQingqing Zhuo
build_unoptimized_policy_settings(enum dml_project_id project,struct dml_mode_eval_policy_st * policy)2787966f319SQingqing Zhuo void build_unoptimized_policy_settings(enum dml_project_id project, struct dml_mode_eval_policy_st *policy)
2797966f319SQingqing Zhuo {
2807966f319SQingqing Zhuo for (int i = 0; i < __DML_NUM_PLANES__; i++) {
2817966f319SQingqing Zhuo policy->MPCCombineUse[i] = dml_mpc_as_needed_for_voltage; // TOREVIEW: Is this still needed? When is MPCC useful for pstate given CRB?
2827966f319SQingqing Zhuo policy->ODMUse[i] = dml_odm_use_policy_combine_as_needed;
2837966f319SQingqing Zhuo policy->ImmediateFlipRequirement[i] = dml_immediate_flip_required;
2847966f319SQingqing Zhuo policy->AllowForPStateChangeOrStutterInVBlank[i] = dml_prefetch_support_uclk_fclk_and_stutter_if_possible;
2857966f319SQingqing Zhuo }
2867966f319SQingqing Zhuo
2877966f319SQingqing Zhuo /* Change the default policy initializations as per spreadsheet. We might need to
2887966f319SQingqing Zhuo * review and change them later on as per Jun's earlier comments.
2897966f319SQingqing Zhuo */
2907966f319SQingqing Zhuo policy->UseUnboundedRequesting = dml_unbounded_requesting_enable;
2917966f319SQingqing Zhuo policy->UseMinimumRequiredDCFCLK = false;
2927966f319SQingqing Zhuo policy->DRAMClockChangeRequirementFinal = true; // TOREVIEW: What does this mean?
2937966f319SQingqing Zhuo policy->FCLKChangeRequirementFinal = true; // TOREVIEW: What does this mean?
2947966f319SQingqing Zhuo policy->USRRetrainingRequiredFinal = true;
2957966f319SQingqing Zhuo policy->EnhancedPrefetchScheduleAccelerationFinal = true; // TOREVIEW: What does this mean?
2967966f319SQingqing Zhuo policy->NomDETInKByteOverrideEnable = false;
2977966f319SQingqing Zhuo policy->NomDETInKByteOverrideValue = 0;
2987966f319SQingqing Zhuo policy->DCCProgrammingAssumesScanDirectionUnknownFinal = true;
2997966f319SQingqing Zhuo policy->SynchronizeTimingsFinal = true;
3007966f319SQingqing Zhuo policy->SynchronizeDRRDisplaysForUCLKPStateChangeFinal = true;
3017966f319SQingqing Zhuo policy->AssumeModeSupportAtMaxPwrStateEvenDRAMClockChangeNotSupported = true; // TOREVIEW: What does this mean?
3027966f319SQingqing Zhuo policy->AssumeModeSupportAtMaxPwrStateEvenFClockChangeNotSupported = true; // TOREVIEW: What does this mean?
303115009d1SQingqing Zhuo if (project == dml_project_dcn35 ||
304*8cb06693SWayne Lin project == dml_project_dcn36 ||
305115009d1SQingqing Zhuo project == dml_project_dcn351) {
306115009d1SQingqing Zhuo policy->DCCProgrammingAssumesScanDirectionUnknownFinal = false;
3071b6063a5SOvidiu Bunea policy->EnhancedPrefetchScheduleAccelerationFinal = 0;
308115009d1SQingqing Zhuo policy->AllowForPStateChangeOrStutterInVBlankFinal = dml_prefetch_support_uclk_fclk_and_stutter_if_possible; /*new*/
309115009d1SQingqing Zhuo policy->UseOnlyMaxPrefetchModes = 1;
310115009d1SQingqing Zhuo }
3117966f319SQingqing Zhuo }
312