FAILED: patch "[PATCH] drm/amd: Fix logic error in" failed to apply to 6.5-stable tree
[email protected]
maintainerThe patch below does not apply to the 6.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.5.y
git checkout FETCH_HEAD
git cherry-pick -x ade134ddaee5baa1fa35cc66a12d2489213a26e0
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023112449-cautious-donation-6754@gregkh' --subject-prefix 'PATCH 6.5.y' HEAD^..
Possible dependencies:
ade134ddaee5 ("drm/amd: Fix logic error in sienna_cichlid_update_pcie_parameters()")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ade134ddaee5baa1fa35cc66a12d2489213a26e0 Mon Sep 17 00:00:00 2001
From: Mario Limonciello <[email protected]>
Date: Tue, 26 Sep 2023 21:07:43 -0500
Subject: [PATCH] drm/amd: Fix logic error in
sienna_cichlid_update_pcie_parameters()
While aligning SMU11 with SMU13 implementation an assumption was made that dpm_context->dpm_tables.pcie_table was populated in dpm table initialization like in SMU13 but it isn't.
So restore some of the original logic and instead just check for amdgpu_device_pcie_dynamic_switching_supported() to decide whether to hardcode values; erring on the side of performance.
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +23 -18
@@ -2089,36 +2089,41 @@ static int sienna_cichlid_display_disable_memory_clock_switch(struct smu_contextreturn ret; } +#define MAX (a, b) ((a) > (b) ? (a) : (b)) +static int sienna_cichlid_update_pcie_parameters (struct smu_context *smu,uint32_t pcie_gen_cap,uint32_t pcie_width_cap) {struct smu_11_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context;struct smu_11_0_pcie_table *pcie_table = &dpm_context->dpm_tables.pcie_table; -u32 smu_pcie_arg; +uint8_t *table_member1, *table_member2; +uint32_t min_gen_speed, max_gen_speed; +uint32_t min_lane_width, max_lane_width; +uint32_t smu_pcie_arg;int ret, i; -/* PCIE gen speed and lane width override */ -if (!amdgpu_device_pcie_dynamic_switching_supported ()) { -if (pcie_table->pcie_gen[NUM_LINK_LEVELS -1 ] < pcie_gen_cap) - pcie_gen_cap = pcie_table->pcie_gen[NUM_LINK_LEVELS -1 ]; +GET_PPTABLE_MEMBER (PcieGenSpeed, &table_member1); +GET_PPTABLE_MEMBER (PcieLaneCount, &table_member2); -if (pcie_table->pcie_lane[NUM_LINK_LEVELS -1 ] < pcie_width_cap) - pcie_width_cap = pcie_table->pcie_lane[NUM_LINK_LEVELS -1 ]; + min_gen_speed =MAX (0 , table_member1[0 ]); + max_gen_speed =MIN (pcie_gen_cap, table_member1[1 ]); + min_gen_speed = min_gen_speed > max_gen_speed ? + max_gen_speed : min_gen_speed; + min_lane_width =MAX (1 , table_member2[0 ]); + max_lane_width =MIN (pcie_width_cap, table_member2[1 ]); + min_lane_width = min_lane_width > max_lane_width ? + max_lane_width : min_lane_width; -/* Force all levels to use the same settings */ -for (i =0 ; i <NUM_LINK_LEVELS ; i++) { - pcie_table->pcie_gen[i] = pcie_gen_cap; - pcie_table->pcie_lane[i] = pcie_width_cap; - } +if (!amdgpu_device_pcie_dynamic_switching_supported ()) { + pcie_table->pcie_gen[0 ] = max_gen_speed; + pcie_table->pcie_lane[0 ] = max_lane_width; }else { -for (i =0 ; i <NUM_LINK_LEVELS ; i++) { -if (pcie_table->pcie_gen[i] > pcie_gen_cap) - pcie_table->pcie_gen[i] = pcie_gen_cap; -if (pcie_table->pcie_lane[i] > pcie_width_cap) - pcie_table->pcie_lane[i] = pcie_width_cap; - } + pcie_table->pcie_gen[0 ] = min_gen_speed; + pcie_table->pcie_lane[0 ] = min_lane_width; } + pcie_table->pcie_gen[1 ] = max_gen_speed; + pcie_table->pcie_lane[1 ] = max_lane_width;for (i =0 ; i <NUM_LINK_LEVELS ; i++) { smu_pcie_arg = (i << 16 |