From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Zhan Liu <zhan.liu@amd.com>, Leo Li <sunpeng.li@amd.com>,
Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>,
Alex Deucher <alexander.deucher@amd.com>,
Sasha Levin <sashal@kernel.org>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [PATCH AUTOSEL 5.11 46/61] drm/amdgpu/display: Use wm_table.entries for dcn301 calculate_wm
Date: Tue, 16 Mar 2021 20:55:20 -0400 [thread overview]
Message-ID: <20210317005536.724046-46-sashal@kernel.org> (raw)
In-Reply-To: <20210317005536.724046-1-sashal@kernel.org>
From: Zhan Liu <zhan.liu@amd.com>
[ Upstream commit eda29602f1a8b2b32d8c8c354232d9d1ee1c064d ]
[Why]
For DGPU Navi, the wm_table.nv_entries are used. These entires are not
populated for DCN301 Vangogh APU, but instead wm_table.entries are.
[How]
Use DCN21 Renoir style wm calculations.
Signed-off-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Zhan Liu <zhan.liu@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Zhan Liu <zhan.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
.../amd/display/dc/dcn301/dcn301_resource.c | 96 ++++++++++++++++++-
1 file changed, 95 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c b/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c
index 35f5bf08ae96..23bc208cbfa4 100644
--- a/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/dcn301/dcn301_resource.c
@@ -1722,12 +1722,106 @@ static void dcn301_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *b
dml_init_instance(&dc->dml, &dcn3_01_soc, &dcn3_01_ip, DML_PROJECT_DCN30);
}
+static void calculate_wm_set_for_vlevel(
+ int vlevel,
+ struct wm_range_table_entry *table_entry,
+ struct dcn_watermarks *wm_set,
+ struct display_mode_lib *dml,
+ display_e2e_pipe_params_st *pipes,
+ int pipe_cnt)
+{
+ double dram_clock_change_latency_cached = dml->soc.dram_clock_change_latency_us;
+
+ ASSERT(vlevel < dml->soc.num_states);
+ /* only pipe 0 is read for voltage and dcf/soc clocks */
+ pipes[0].clks_cfg.voltage = vlevel;
+ pipes[0].clks_cfg.dcfclk_mhz = dml->soc.clock_limits[vlevel].dcfclk_mhz;
+ pipes[0].clks_cfg.socclk_mhz = dml->soc.clock_limits[vlevel].socclk_mhz;
+
+ dml->soc.dram_clock_change_latency_us = table_entry->pstate_latency_us;
+ dml->soc.sr_exit_time_us = table_entry->sr_exit_time_us;
+ dml->soc.sr_enter_plus_exit_time_us = table_entry->sr_enter_plus_exit_time_us;
+
+ wm_set->urgent_ns = get_wm_urgent(dml, pipes, pipe_cnt) * 1000;
+ wm_set->cstate_pstate.cstate_enter_plus_exit_ns = get_wm_stutter_enter_exit(dml, pipes, pipe_cnt) * 1000;
+ wm_set->cstate_pstate.cstate_exit_ns = get_wm_stutter_exit(dml, pipes, pipe_cnt) * 1000;
+ wm_set->cstate_pstate.pstate_change_ns = get_wm_dram_clock_change(dml, pipes, pipe_cnt) * 1000;
+ wm_set->pte_meta_urgent_ns = get_wm_memory_trip(dml, pipes, pipe_cnt) * 1000;
+ wm_set->frac_urg_bw_nom = get_fraction_of_urgent_bandwidth(dml, pipes, pipe_cnt) * 1000;
+ wm_set->frac_urg_bw_flip = get_fraction_of_urgent_bandwidth_imm_flip(dml, pipes, pipe_cnt) * 1000;
+ wm_set->urgent_latency_ns = get_urgent_latency(dml, pipes, pipe_cnt) * 1000;
+ dml->soc.dram_clock_change_latency_us = dram_clock_change_latency_cached;
+
+}
+
+static void dcn301_calculate_wm_and_dlg(
+ struct dc *dc, struct dc_state *context,
+ display_e2e_pipe_params_st *pipes,
+ int pipe_cnt,
+ int vlevel_req)
+{
+ int i, pipe_idx;
+ int vlevel, vlevel_max;
+ struct wm_range_table_entry *table_entry;
+ struct clk_bw_params *bw_params = dc->clk_mgr->bw_params;
+
+ ASSERT(bw_params);
+
+ vlevel_max = bw_params->clk_table.num_entries - 1;
+
+ /* WM Set D */
+ table_entry = &bw_params->wm_table.entries[WM_D];
+ if (table_entry->wm_type == WM_TYPE_RETRAINING)
+ vlevel = 0;
+ else
+ vlevel = vlevel_max;
+ calculate_wm_set_for_vlevel(vlevel, table_entry, &context->bw_ctx.bw.dcn.watermarks.d,
+ &context->bw_ctx.dml, pipes, pipe_cnt);
+ /* WM Set C */
+ table_entry = &bw_params->wm_table.entries[WM_C];
+ vlevel = min(max(vlevel_req, 2), vlevel_max);
+ calculate_wm_set_for_vlevel(vlevel, table_entry, &context->bw_ctx.bw.dcn.watermarks.c,
+ &context->bw_ctx.dml, pipes, pipe_cnt);
+ /* WM Set B */
+ table_entry = &bw_params->wm_table.entries[WM_B];
+ vlevel = min(max(vlevel_req, 1), vlevel_max);
+ calculate_wm_set_for_vlevel(vlevel, table_entry, &context->bw_ctx.bw.dcn.watermarks.b,
+ &context->bw_ctx.dml, pipes, pipe_cnt);
+
+ /* WM Set A */
+ table_entry = &bw_params->wm_table.entries[WM_A];
+ vlevel = min(vlevel_req, vlevel_max);
+ calculate_wm_set_for_vlevel(vlevel, table_entry, &context->bw_ctx.bw.dcn.watermarks.a,
+ &context->bw_ctx.dml, pipes, pipe_cnt);
+
+ for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) {
+ if (!context->res_ctx.pipe_ctx[i].stream)
+ continue;
+
+ pipes[pipe_idx].clks_cfg.dispclk_mhz = get_dispclk_calculated(&context->bw_ctx.dml, pipes, pipe_cnt);
+ pipes[pipe_idx].clks_cfg.dppclk_mhz = get_dppclk_calculated(&context->bw_ctx.dml, pipes, pipe_cnt, pipe_idx);
+
+ if (dc->config.forced_clocks) {
+ pipes[pipe_idx].clks_cfg.dispclk_mhz = context->bw_ctx.dml.soc.clock_limits[0].dispclk_mhz;
+ pipes[pipe_idx].clks_cfg.dppclk_mhz = context->bw_ctx.dml.soc.clock_limits[0].dppclk_mhz;
+ }
+ if (dc->debug.min_disp_clk_khz > pipes[pipe_idx].clks_cfg.dispclk_mhz * 1000)
+ pipes[pipe_idx].clks_cfg.dispclk_mhz = dc->debug.min_disp_clk_khz / 1000.0;
+ if (dc->debug.min_dpp_clk_khz > pipes[pipe_idx].clks_cfg.dppclk_mhz * 1000)
+ pipes[pipe_idx].clks_cfg.dppclk_mhz = dc->debug.min_dpp_clk_khz / 1000.0;
+
+ pipe_idx++;
+ }
+
+ dcn20_calculate_dlg_params(dc, context, pipes, pipe_cnt, vlevel);
+}
+
static struct resource_funcs dcn301_res_pool_funcs = {
.destroy = dcn301_destroy_resource_pool,
.link_enc_create = dcn301_link_encoder_create,
.panel_cntl_create = dcn301_panel_cntl_create,
.validate_bandwidth = dcn30_validate_bandwidth,
- .calculate_wm_and_dlg = dcn30_calculate_wm_and_dlg,
+ .calculate_wm_and_dlg = dcn301_calculate_wm_and_dlg,
.populate_dml_pipes = dcn30_populate_dml_pipes_from_context,
.acquire_idle_pipe_for_layer = dcn20_acquire_idle_pipe_for_layer,
.add_stream_to_ctx = dcn30_add_stream_to_ctx,
--
2.30.1
next prev parent reply other threads:[~2021-03-17 0:58 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-17 0:54 [PATCH AUTOSEL 5.11 01/61] mt76: fix tx skb error handling in mt76_dma_tx_queue_skb Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 02/61] mt76: mt7915: only modify tx buffer list after allocating tx token id Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 03/61] net: stmmac: fix dma physical address of descriptor when display ring Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 04/61] net: fec: ptp: avoid register access when ipg clock is disabled Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 05/61] powerpc/4xx: Fix build errors from mfdcr() Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 06/61] atm: eni: dont release is never initialized Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 07/61] atm: lanai: dont run lanai_dev_close if not open Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 08/61] Revert "r8152: adjust the settings about MAC clock speed down for RTL8153" Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 09/61] ALSA: hda: ignore invalid NHLT table Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 10/61] ixgbe: Fix memleak in ixgbe_configure_clsu32 Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 11/61] scsi: ufs: ufs-qcom: Disable interrupt in reset path Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 12/61] blk-cgroup: Fix the recursive blkg rwstat Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 13/61] net: tehuti: fix error return code in bdx_probe() Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 14/61] net: intel: iavf: fix error return code of iavf_init_get_resources() Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 15/61] sun/niu: fix wrong RXMAC_BC_FRM_CNT_COUNT count Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 16/61] gianfar: fix jumbo packets+napi+rx overrun crash Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 17/61] cifs: ask for more credit on async read/write code paths Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 18/61] gfs2: fix use-after-free in trans_drain Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 19/61] cpufreq: blacklist Arm Vexpress platforms in cpufreq-dt-platdev Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 20/61] gpiolib: acpi: Add missing IRQF_ONESHOT Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 21/61] nfs: fix PNFS_FLEXFILE_LAYOUT Kconfig default Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 22/61] NFS: Correct size calculation for create reply length Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 23/61] net: hisilicon: hns: fix error return code of hns_nic_clear_all_rx_fetch() Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 24/61] net: wan: fix error return code of uhdlc_init() Sasha Levin
2021-03-17 0:54 ` [PATCH AUTOSEL 5.11 25/61] net: davicom: Use platform_get_irq_optional() Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 26/61] net: enetc: set MAC RX FIFO to recommended value Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 27/61] atm: uPD98402: fix incorrect allocation Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 28/61] atm: idt77252: fix null-ptr-dereference Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 29/61] cifs: change noisy error message to FYI Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 30/61] irqchip/ingenic: Add support for the JZ4760 Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 31/61] kbuild: add image_name to no-sync-config-targets Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 32/61] kbuild: dummy-tools: fix inverted tests for gcc Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 33/61] umem: fix error return code in mm_pci_probe() Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 34/61] sparc64: Fix opcode filtering in handling of no fault loads Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 35/61] habanalabs: Call put_pid() when releasing control device Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 36/61] habanalabs: Disable file operations after device is removed Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 37/61] staging: rtl8192e: fix kconfig dependency on CRYPTO Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 38/61] u64_stats,lockdep: Fix u64_stats_init() vs lockdep Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 39/61] kselftest: arm64: Fix exit code of sve-ptrace Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 40/61] regulator: qcom-rpmh: Correct the pmic5_hfsmps515 buck Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 41/61] regulator: qcom-rpmh: Use correct buck for S1C regulator Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 42/61] block: Fix REQ_OP_ZONE_RESET_ALL handling Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 43/61] drm/amd/display: Enable pflip interrupt upon pipe enable Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 44/61] drm/amd/display: Revert dram_clock_change_latency for DCN2.1 Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 45/61] drm/amd/display: Enabled pipe harvesting in dcn30 Sasha Levin
2021-03-17 0:55 ` Sasha Levin [this message]
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 47/61] drm/amdgpu: fb BO should be ttm_bo_type_device Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 48/61] drm/radeon: fix AGP dependency Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 49/61] nvme: simplify error logic in nvme_validate_ns() Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 50/61] nvme: add NVME_REQ_CANCELLED flag in nvme_cancel_request() Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 51/61] nvme-fc: set NVME_REQ_CANCELLED in nvme_fc_terminate_exchange() Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 52/61] nvme-fc: return NVME_SC_HOST_ABORTED_CMD when a command has been aborted Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 53/61] nvme-core: check ctrl css before setting up zns Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 54/61] nvme-rdma: Fix a use after free in nvmet_rdma_write_data_done Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 55/61] nvme-pci: add the DISABLE_WRITE_ZEROES quirk for a Samsung PM1725a Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 56/61] nfs: we don't support removing system.nfs4_acl Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 57/61] block: Suppress uevent for hidden device when removed Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 58/61] io_uring: cancel deferred requests in try_cancel Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 59/61] mm/fork: clear PASID for new mm Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 60/61] ia64: fix ia64_syscall_get_set_arguments() for break-based syscalls Sasha Levin
2021-03-17 0:55 ` [PATCH AUTOSEL 5.11 61/61] ia64: fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210317005536.724046-46-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=Dmytro.Laktyushkin@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=sunpeng.li@amd.com \
--cc=zhan.liu@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®