Archive-only list for patches
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	Mario Limonciello <mario.limonciello@amd.com>,
	Alex Deucher <alexander.deucher@amd.com>,
	Charlene Liu <charlene.liu@amd.com>,
	Ovidiu Bunea <ovidiu.bunea@amd.com>,
	Wayne Lin <wayne.lin@amd.com>,
	Dan Wheeler <daniel.wheeler@amd.com>
Subject: [PATCH 6.16 091/189] drm/amd/display: Correct sequences and delays for DCN35 PG & RCG
Date: Wed, 17 Sep 2025 14:33:21 +0200	[thread overview]
Message-ID: <20250917123354.078175615@linuxfoundation.org> (raw)
In-Reply-To: <20250917123351.839989757@linuxfoundation.org>

6.16-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ovidiu Bunea <ovidiu.bunea@amd.com>

commit 70f0b051f82d0234ade2f6753f72a2610048db3b upstream.

[why]
The current PG & RCG programming in driver has some gaps and incorrect
sequences.

[how]
Added delays after ungating clocks to allow ramp up, increased polling
to allow more time for power up, and removed the incorrect sequences.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Charlene Liu <charlene.liu@amd.com>
Signed-off-by: Ovidiu Bunea <ovidiu.bunea@amd.com>
Signed-off-by: Wayne Lin <wayne.lin@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 1bde5584e297921f45911ae874b0175dce5ed4b5)
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/gpu/drm/amd/display/dc/dc.h                      |    1 
 drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c   |   74 +++++----
 drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c  |  115 ++-------------
 drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_init.c   |    3 
 drivers/gpu/drm/amd/display/dc/hwss/dcn351/dcn351_init.c |    3 
 drivers/gpu/drm/amd/display/dc/inc/hw/pg_cntl.h          |    1 
 drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c  |   78 ++++++----
 7 files changed, 111 insertions(+), 164 deletions(-)

--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1095,6 +1095,7 @@ struct dc_debug_options {
 	bool enable_hblank_borrow;
 	bool force_subvp_df_throttle;
 	uint32_t acpi_transition_bitmasks[MAX_PIPES];
+	bool enable_pg_cntl_debug_logs;
 };
 
 
--- a/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c
+++ b/drivers/gpu/drm/amd/display/dc/dccg/dcn35/dcn35_dccg.c
@@ -133,30 +133,34 @@ enum dsc_clk_source {
 };
 
 
-static void dccg35_set_dsc_clk_rcg(struct dccg *dccg, int inst, bool enable)
+static void dccg35_set_dsc_clk_rcg(struct dccg *dccg, int inst, bool allow_rcg)
 {
 	struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
 
-	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dsc && enable)
+	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dsc && allow_rcg)
 		return;
 
 	switch (inst) {
 	case 0:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK0_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK0_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 1:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK1_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK1_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 2:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK2_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK2_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 3:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK3_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK3_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	default:
 		BREAK_TO_DEBUGGER();
 		return;
 	}
+
+	/* Wait for clock to ramp */
+	if (!allow_rcg)
+		udelay(10);
 }
 
 static void dccg35_set_symclk32_se_rcg(
@@ -385,35 +389,34 @@ static void dccg35_set_dtbclk_p_rcg(stru
 	}
 }
 
-static void dccg35_set_dppclk_rcg(struct dccg *dccg,
-												int inst, bool enable)
+static void dccg35_set_dppclk_rcg(struct dccg *dccg, int inst, bool allow_rcg)
 {
-
 	struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
 
-
-	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dpp && enable)
+	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dpp && allow_rcg)
 		return;
 
 	switch (inst) {
 	case 0:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK0_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK0_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 1:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK1_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK1_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 2:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK2_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK2_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	case 3:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK3_ROOT_GATE_DISABLE, enable ? 0 : 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK3_ROOT_GATE_DISABLE, allow_rcg ? 0 : 1);
 		break;
 	default:
 	BREAK_TO_DEBUGGER();
 		break;
 	}
-	//DC_LOG_DEBUG("%s: inst(%d) DPPCLK rcg_disable: %d\n", __func__, inst, enable ? 0 : 1);
 
+	/* Wait for clock to ramp */
+	if (!allow_rcg)
+		udelay(10);
 }
 
 static void dccg35_set_dpstreamclk_rcg(
@@ -1177,32 +1180,34 @@ static void dccg35_update_dpp_dto(struct
 }
 
 static void dccg35_set_dppclk_root_clock_gating(struct dccg *dccg,
-		 uint32_t dpp_inst, uint32_t enable)
+		 uint32_t dpp_inst, uint32_t disallow_rcg)
 {
 	struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
 
-	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dpp)
+	if (!dccg->ctx->dc->debug.root_clock_optimization.bits.dpp && !disallow_rcg)
 		return;
 
 
 	switch (dpp_inst) {
 	case 0:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK0_ROOT_GATE_DISABLE, enable);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK0_ROOT_GATE_DISABLE, disallow_rcg);
 		break;
 	case 1:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK1_ROOT_GATE_DISABLE, enable);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK1_ROOT_GATE_DISABLE, disallow_rcg);
 		break;
 	case 2:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK2_ROOT_GATE_DISABLE, enable);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK2_ROOT_GATE_DISABLE, disallow_rcg);
 		break;
 	case 3:
-		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK3_ROOT_GATE_DISABLE, enable);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DPPCLK3_ROOT_GATE_DISABLE, disallow_rcg);
 		break;
 	default:
 		break;
 	}
-	//DC_LOG_DEBUG("%s: dpp_inst(%d) rcg: %d\n", __func__, dpp_inst, enable);
 
+	/* Wait for clock to ramp */
+	if (disallow_rcg)
+		udelay(10);
 }
 
 static void dccg35_get_pixel_rate_div(
@@ -1782,8 +1787,7 @@ static void dccg35_enable_dscclk(struct
 	//Disable DTO
 	switch (inst) {
 	case 0:
-		if (dccg->ctx->dc->debug.root_clock_optimization.bits.dsc)
-			REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK0_ROOT_GATE_DISABLE, 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK0_ROOT_GATE_DISABLE, 1);
 
 		REG_UPDATE_2(DSCCLK0_DTO_PARAM,
 				DSCCLK0_DTO_PHASE, 0,
@@ -1791,8 +1795,7 @@ static void dccg35_enable_dscclk(struct
 		REG_UPDATE(DSCCLK_DTO_CTRL,	DSCCLK0_EN, 1);
 		break;
 	case 1:
-		if (dccg->ctx->dc->debug.root_clock_optimization.bits.dsc)
-			REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK1_ROOT_GATE_DISABLE, 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK1_ROOT_GATE_DISABLE, 1);
 
 		REG_UPDATE_2(DSCCLK1_DTO_PARAM,
 				DSCCLK1_DTO_PHASE, 0,
@@ -1800,8 +1803,7 @@ static void dccg35_enable_dscclk(struct
 		REG_UPDATE(DSCCLK_DTO_CTRL, DSCCLK1_EN, 1);
 		break;
 	case 2:
-		if (dccg->ctx->dc->debug.root_clock_optimization.bits.dsc)
-			REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK2_ROOT_GATE_DISABLE, 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK2_ROOT_GATE_DISABLE, 1);
 
 		REG_UPDATE_2(DSCCLK2_DTO_PARAM,
 				DSCCLK2_DTO_PHASE, 0,
@@ -1809,8 +1811,7 @@ static void dccg35_enable_dscclk(struct
 		REG_UPDATE(DSCCLK_DTO_CTRL, DSCCLK2_EN, 1);
 		break;
 	case 3:
-		if (dccg->ctx->dc->debug.root_clock_optimization.bits.dsc)
-			REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK3_ROOT_GATE_DISABLE, 1);
+		REG_UPDATE(DCCG_GATE_DISABLE_CNTL6, DSCCLK3_ROOT_GATE_DISABLE, 1);
 
 		REG_UPDATE_2(DSCCLK3_DTO_PARAM,
 				DSCCLK3_DTO_PHASE, 0,
@@ -1821,6 +1822,9 @@ static void dccg35_enable_dscclk(struct
 		BREAK_TO_DEBUGGER();
 		return;
 	}
+
+	/* Wait for clock to ramp */
+	udelay(10);
 }
 
 static void dccg35_disable_dscclk(struct dccg *dccg,
@@ -1864,6 +1868,9 @@ static void dccg35_disable_dscclk(struct
 	default:
 		return;
 	}
+
+	/* Wait for clock ramp */
+	udelay(10);
 }
 
 static void dccg35_enable_symclk_se(struct dccg *dccg, uint32_t stream_enc_inst, uint32_t link_enc_inst)
@@ -2349,10 +2356,7 @@ static void dccg35_disable_symclk_se_cb(
 
 void dccg35_root_gate_disable_control(struct dccg *dccg, uint32_t pipe_idx, uint32_t disable_clock_gating)
 {
-
-	if (dccg->ctx->dc->debug.root_clock_optimization.bits.dpp) {
-		dccg35_set_dppclk_root_clock_gating(dccg, pipe_idx, disable_clock_gating);
-	}
+	dccg35_set_dppclk_root_clock_gating(dccg, pipe_idx, disable_clock_gating);
 }
 
 static const struct dccg_funcs dccg35_funcs_new = {
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c
@@ -113,6 +113,14 @@ static void enable_memory_low_power(stru
 }
 #endif
 
+static void print_pg_status(struct dc *dc, const char *debug_func, const char *debug_log)
+{
+	if (dc->debug.enable_pg_cntl_debug_logs && dc->res_pool->pg_cntl) {
+		if (dc->res_pool->pg_cntl->funcs->print_pg_status)
+			dc->res_pool->pg_cntl->funcs->print_pg_status(dc->res_pool->pg_cntl, debug_func, debug_log);
+	}
+}
+
 void dcn35_set_dmu_fgcg(struct dce_hwseq *hws, bool enable)
 {
 	REG_UPDATE_3(DMU_CLK_CNTL,
@@ -137,6 +145,8 @@ void dcn35_init_hw(struct dc *dc)
 	uint32_t user_level = MAX_BACKLIGHT_LEVEL;
 	int i;
 
+	print_pg_status(dc, __func__, ": start");
+
 	if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks)
 		dc->clk_mgr->funcs->init_clocks(dc->clk_mgr);
 
@@ -200,10 +210,7 @@ void dcn35_init_hw(struct dc *dc)
 
 	/* we want to turn off all dp displays before doing detection */
 	dc->link_srv->blank_all_dp_displays(dc);
-/*
-	if (hws->funcs.enable_power_gating_plane)
-		hws->funcs.enable_power_gating_plane(dc->hwseq, true);
-*/
+
 	if (res_pool->hubbub && res_pool->hubbub->funcs->dchubbub_init)
 		res_pool->hubbub->funcs->dchubbub_init(dc->res_pool->hubbub);
 	/* If taking control over from VBIOS, we may want to optimize our first
@@ -236,6 +243,8 @@ void dcn35_init_hw(struct dc *dc)
 		}
 
 		hws->funcs.init_pipes(dc, dc->current_state);
+		print_pg_status(dc, __func__, ": after init_pipes");
+
 		if (dc->res_pool->hubbub->funcs->allow_self_refresh_control &&
 			!dc->res_pool->hubbub->ctx->dc->debug.disable_stutter)
 			dc->res_pool->hubbub->funcs->allow_self_refresh_control(dc->res_pool->hubbub,
@@ -312,6 +321,7 @@ void dcn35_init_hw(struct dc *dc)
 		if (dc->res_pool->pg_cntl->funcs->init_pg_status)
 			dc->res_pool->pg_cntl->funcs->init_pg_status(dc->res_pool->pg_cntl);
 	}
+	print_pg_status(dc, __func__, ": after init_pg_status");
 }
 
 static void update_dsc_on_stream(struct pipe_ctx *pipe_ctx, bool enable)
@@ -500,97 +510,6 @@ void dcn35_physymclk_root_clock_control(
 	}
 }
 
-void dcn35_dsc_pg_control(
-		struct dce_hwseq *hws,
-		unsigned int dsc_inst,
-		bool power_on)
-{
-	uint32_t power_gate = power_on ? 0 : 1;
-	uint32_t pwr_status = power_on ? 0 : 2;
-	uint32_t org_ip_request_cntl = 0;
-
-	if (hws->ctx->dc->debug.disable_dsc_power_gate)
-		return;
-	if (hws->ctx->dc->debug.ignore_pg)
-		return;
-	REG_GET(DC_IP_REQUEST_CNTL, IP_REQUEST_EN, &org_ip_request_cntl);
-	if (org_ip_request_cntl == 0)
-		REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 1);
-
-	switch (dsc_inst) {
-	case 0: /* DSC0 */
-		REG_UPDATE(DOMAIN16_PG_CONFIG,
-				DOMAIN_POWER_GATE, power_gate);
-
-		REG_WAIT(DOMAIN16_PG_STATUS,
-				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
-		break;
-	case 1: /* DSC1 */
-		REG_UPDATE(DOMAIN17_PG_CONFIG,
-				DOMAIN_POWER_GATE, power_gate);
-
-		REG_WAIT(DOMAIN17_PG_STATUS,
-				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
-		break;
-	case 2: /* DSC2 */
-		REG_UPDATE(DOMAIN18_PG_CONFIG,
-				DOMAIN_POWER_GATE, power_gate);
-
-		REG_WAIT(DOMAIN18_PG_STATUS,
-				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
-		break;
-	case 3: /* DSC3 */
-		REG_UPDATE(DOMAIN19_PG_CONFIG,
-				DOMAIN_POWER_GATE, power_gate);
-
-		REG_WAIT(DOMAIN19_PG_STATUS,
-				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
-		break;
-	default:
-		BREAK_TO_DEBUGGER();
-		break;
-	}
-
-	if (org_ip_request_cntl == 0)
-		REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 0);
-}
-
-void dcn35_enable_power_gating_plane(struct dce_hwseq *hws, bool enable)
-{
-	bool force_on = true; /* disable power gating */
-	uint32_t org_ip_request_cntl = 0;
-
-	if (hws->ctx->dc->debug.disable_hubp_power_gate)
-		return;
-	if (hws->ctx->dc->debug.ignore_pg)
-		return;
-	REG_GET(DC_IP_REQUEST_CNTL, IP_REQUEST_EN, &org_ip_request_cntl);
-	if (org_ip_request_cntl == 0)
-		REG_SET(DC_IP_REQUEST_CNTL, 0, IP_REQUEST_EN, 1);
-	/* DCHUBP0/1/2/3/4/5 */
-	REG_UPDATE(DOMAIN0_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	REG_UPDATE(DOMAIN2_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	/* DPP0/1/2/3/4/5 */
-	REG_UPDATE(DOMAIN1_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	REG_UPDATE(DOMAIN3_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-
-	force_on = true; /* disable power gating */
-	if (enable && !hws->ctx->dc->debug.disable_dsc_power_gate)
-		force_on = false;
-
-	/* DCS0/1/2/3/4 */
-	REG_UPDATE(DOMAIN16_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	REG_UPDATE(DOMAIN17_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	REG_UPDATE(DOMAIN18_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-	REG_UPDATE(DOMAIN19_PG_CONFIG, DOMAIN_POWER_FORCEON, force_on);
-
-
-}
-
 /* In headless boot cases, DIG may be turned
  * on which causes HW/SW discrepancies.
  * To avoid this, power down hardware on boot
@@ -1453,6 +1372,8 @@ void dcn35_prepare_bandwidth(
 	}
 
 	dcn20_prepare_bandwidth(dc, context);
+
+	print_pg_status(dc, __func__, ": after rcg and power up");
 }
 
 void dcn35_optimize_bandwidth(
@@ -1461,6 +1382,8 @@ void dcn35_optimize_bandwidth(
 {
 	struct pg_block_update pg_update_state;
 
+	print_pg_status(dc, __func__, ": before rcg and power up");
+
 	dcn20_optimize_bandwidth(dc, context);
 
 	if (dc->hwss.calc_blocks_to_gate) {
@@ -1472,6 +1395,8 @@ void dcn35_optimize_bandwidth(
 		if (dc->hwss.root_clock_control)
 			dc->hwss.root_clock_control(dc, &pg_update_state, false);
 	}
+
+	print_pg_status(dc, __func__, ": after rcg and power up");
 }
 
 void dcn35_set_drr(struct pipe_ctx **pipe_ctx,
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_init.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_init.c
@@ -115,7 +115,6 @@ static const struct hw_sequencer_funcs d
 	.exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state,
 	.update_visual_confirm_color = dcn10_update_visual_confirm_color,
 	.apply_idle_power_optimizations = dcn35_apply_idle_power_optimizations,
-	.update_dsc_pg = dcn32_update_dsc_pg,
 	.calc_blocks_to_gate = dcn35_calc_blocks_to_gate,
 	.calc_blocks_to_ungate = dcn35_calc_blocks_to_ungate,
 	.hw_block_power_up = dcn35_hw_block_power_up,
@@ -150,7 +149,6 @@ static const struct hwseq_private_funcs
 	.plane_atomic_disable = dcn35_plane_atomic_disable,
 	//.plane_atomic_disable = dcn20_plane_atomic_disable,/*todo*/
 	//.hubp_pg_control = dcn35_hubp_pg_control,
-	.enable_power_gating_plane = dcn35_enable_power_gating_plane,
 	.dpp_root_clock_control = dcn35_dpp_root_clock_control,
 	.dpstream_root_clock_control = dcn35_dpstream_root_clock_control,
 	.physymclk_root_clock_control = dcn35_physymclk_root_clock_control,
@@ -165,7 +163,6 @@ static const struct hwseq_private_funcs
 	.calculate_dccg_k1_k2_values = dcn32_calculate_dccg_k1_k2_values,
 	.resync_fifo_dccg_dio = dcn314_resync_fifo_dccg_dio,
 	.is_dp_dig_pixel_rate_div_policy = dcn35_is_dp_dig_pixel_rate_div_policy,
-	.dsc_pg_control = dcn35_dsc_pg_control,
 	.dsc_pg_status = dcn32_dsc_pg_status,
 	.enable_plane = dcn35_enable_plane,
 	.wait_for_pipe_update_if_needed = dcn10_wait_for_pipe_update_if_needed,
--- a/drivers/gpu/drm/amd/display/dc/hwss/dcn351/dcn351_init.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn351/dcn351_init.c
@@ -114,7 +114,6 @@ static const struct hw_sequencer_funcs d
 	.exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state,
 	.update_visual_confirm_color = dcn10_update_visual_confirm_color,
 	.apply_idle_power_optimizations = dcn35_apply_idle_power_optimizations,
-	.update_dsc_pg = dcn32_update_dsc_pg,
 	.calc_blocks_to_gate = dcn351_calc_blocks_to_gate,
 	.calc_blocks_to_ungate = dcn351_calc_blocks_to_ungate,
 	.hw_block_power_up = dcn351_hw_block_power_up,
@@ -145,7 +144,6 @@ static const struct hwseq_private_funcs
 	.plane_atomic_disable = dcn35_plane_atomic_disable,
 	//.plane_atomic_disable = dcn20_plane_atomic_disable,/*todo*/
 	//.hubp_pg_control = dcn35_hubp_pg_control,
-	.enable_power_gating_plane = dcn35_enable_power_gating_plane,
 	.dpp_root_clock_control = dcn35_dpp_root_clock_control,
 	.dpstream_root_clock_control = dcn35_dpstream_root_clock_control,
 	.physymclk_root_clock_control = dcn35_physymclk_root_clock_control,
@@ -159,7 +157,6 @@ static const struct hwseq_private_funcs
 	.setup_hpo_hw_control = dcn35_setup_hpo_hw_control,
 	.calculate_dccg_k1_k2_values = dcn32_calculate_dccg_k1_k2_values,
 	.is_dp_dig_pixel_rate_div_policy = dcn35_is_dp_dig_pixel_rate_div_policy,
-	.dsc_pg_control = dcn35_dsc_pg_control,
 	.dsc_pg_status = dcn32_dsc_pg_status,
 	.enable_plane = dcn35_enable_plane,
 	.wait_for_pipe_update_if_needed = dcn10_wait_for_pipe_update_if_needed,
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/pg_cntl.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/pg_cntl.h
@@ -47,6 +47,7 @@ struct pg_cntl_funcs {
 	void (*optc_pg_control)(struct pg_cntl *pg_cntl, unsigned int optc_inst, bool power_on);
 	void (*dwb_pg_control)(struct pg_cntl *pg_cntl, bool power_on);
 	void (*init_pg_status)(struct pg_cntl *pg_cntl);
+	void (*print_pg_status)(struct pg_cntl *pg_cntl, const char *debug_func, const char *debug_log);
 };
 
 #endif //__DC_PG_CNTL_H__
--- a/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c
+++ b/drivers/gpu/drm/amd/display/dc/pg/dcn35/dcn35_pg_cntl.c
@@ -79,16 +79,12 @@ void pg_cntl35_dsc_pg_control(struct pg_
 	uint32_t power_gate = power_on ? 0 : 1;
 	uint32_t pwr_status = power_on ? 0 : 2;
 	uint32_t org_ip_request_cntl = 0;
-	bool block_enabled;
-
-	/*need to enable dscclk regardless DSC_PG*/
-	if (pg_cntl->ctx->dc->res_pool->dccg->funcs->enable_dsc && power_on)
-		pg_cntl->ctx->dc->res_pool->dccg->funcs->enable_dsc(
-				pg_cntl->ctx->dc->res_pool->dccg, dsc_inst);
+	bool block_enabled = false;
+	bool skip_pg = pg_cntl->ctx->dc->debug.ignore_pg ||
+		       pg_cntl->ctx->dc->debug.disable_dsc_power_gate ||
+		       pg_cntl->ctx->dc->idle_optimizations_allowed;
 
-	if (pg_cntl->ctx->dc->debug.ignore_pg ||
-		pg_cntl->ctx->dc->debug.disable_dsc_power_gate ||
-		pg_cntl->ctx->dc->idle_optimizations_allowed)
+	if (skip_pg && !power_on)
 		return;
 
 	block_enabled = pg_cntl35_dsc_pg_status(pg_cntl, dsc_inst);
@@ -111,7 +107,7 @@ void pg_cntl35_dsc_pg_control(struct pg_
 
 		REG_WAIT(DOMAIN16_PG_STATUS,
 				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
+				1, 10000);
 		break;
 	case 1: /* DSC1 */
 		REG_UPDATE(DOMAIN17_PG_CONFIG,
@@ -119,7 +115,7 @@ void pg_cntl35_dsc_pg_control(struct pg_
 
 		REG_WAIT(DOMAIN17_PG_STATUS,
 				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
+				1, 10000);
 		break;
 	case 2: /* DSC2 */
 		REG_UPDATE(DOMAIN18_PG_CONFIG,
@@ -127,7 +123,7 @@ void pg_cntl35_dsc_pg_control(struct pg_
 
 		REG_WAIT(DOMAIN18_PG_STATUS,
 				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
+				1, 10000);
 		break;
 	case 3: /* DSC3 */
 		REG_UPDATE(DOMAIN19_PG_CONFIG,
@@ -135,7 +131,7 @@ void pg_cntl35_dsc_pg_control(struct pg_
 
 		REG_WAIT(DOMAIN19_PG_STATUS,
 				DOMAIN_PGFSM_PWR_STATUS, pwr_status,
-				1, 1000);
+				1, 10000);
 		break;
 	default:
 		BREAK_TO_DEBUGGER();
@@ -144,12 +140,6 @@ void pg_cntl35_dsc_pg_control(struct pg_
 
 	if (dsc_inst < MAX_PIPES)
 		pg_cntl->pg_pipe_res_enable[PG_DSC][dsc_inst] = power_on;
-
-	if (pg_cntl->ctx->dc->res_pool->dccg->funcs->disable_dsc && !power_on) {
-		/*this is to disable dscclk*/
-		pg_cntl->ctx->dc->res_pool->dccg->funcs->disable_dsc(
-			pg_cntl->ctx->dc->res_pool->dccg, dsc_inst);
-	}
 }
 
 static bool pg_cntl35_hubp_dpp_pg_status(struct pg_cntl *pg_cntl, unsigned int hubp_dpp_inst)
@@ -189,11 +179,12 @@ void pg_cntl35_hubp_dpp_pg_control(struc
 	uint32_t pwr_status = power_on ? 0 : 2;
 	uint32_t org_ip_request_cntl;
 	bool block_enabled;
+	bool skip_pg = pg_cntl->ctx->dc->debug.ignore_pg ||
+		       pg_cntl->ctx->dc->debug.disable_hubp_power_gate ||
+		       pg_cntl->ctx->dc->debug.disable_dpp_power_gate ||
+		       pg_cntl->ctx->dc->idle_optimizations_allowed;
 
-	if (pg_cntl->ctx->dc->debug.ignore_pg ||
-		pg_cntl->ctx->dc->debug.disable_hubp_power_gate ||
-		pg_cntl->ctx->dc->debug.disable_dpp_power_gate ||
-		pg_cntl->ctx->dc->idle_optimizations_allowed)
+	if (skip_pg && !power_on)
 		return;
 
 	block_enabled = pg_cntl35_hubp_dpp_pg_status(pg_cntl, hubp_dpp_inst);
@@ -213,22 +204,22 @@ void pg_cntl35_hubp_dpp_pg_control(struc
 	case 0:
 		/* DPP0 & HUBP0 */
 		REG_UPDATE(DOMAIN0_PG_CONFIG, DOMAIN_POWER_GATE, power_gate);
-		REG_WAIT(DOMAIN0_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 1000);
+		REG_WAIT(DOMAIN0_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 10000);
 		break;
 	case 1:
 		/* DPP1 & HUBP1 */
 		REG_UPDATE(DOMAIN1_PG_CONFIG, DOMAIN_POWER_GATE, power_gate);
-		REG_WAIT(DOMAIN1_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 1000);
+		REG_WAIT(DOMAIN1_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 10000);
 		break;
 	case 2:
 		/* DPP2 & HUBP2 */
 		REG_UPDATE(DOMAIN2_PG_CONFIG, DOMAIN_POWER_GATE, power_gate);
-		REG_WAIT(DOMAIN2_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 1000);
+		REG_WAIT(DOMAIN2_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 10000);
 		break;
 	case 3:
 		/* DPP3 & HUBP3 */
 		REG_UPDATE(DOMAIN3_PG_CONFIG, DOMAIN_POWER_GATE, power_gate);
-		REG_WAIT(DOMAIN3_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 1000);
+		REG_WAIT(DOMAIN3_PG_STATUS, DOMAIN_PGFSM_PWR_STATUS, pwr_status, 1, 10000);
 		break;
 	default:
 		BREAK_TO_DEBUGGER();
@@ -501,6 +492,36 @@ void pg_cntl35_init_pg_status(struct pg_
 	pg_cntl->pg_res_enable[PG_DWB] = block_enabled;
 }
 
+static void pg_cntl35_print_pg_status(struct pg_cntl *pg_cntl, const char *debug_func, const char *debug_log)
+{
+	int i = 0;
+	bool block_enabled = false;
+
+	DC_LOG_DEBUG("%s: %s", debug_func, debug_log);
+
+	DC_LOG_DEBUG("PG_CNTL status:\n");
+
+	block_enabled = pg_cntl35_io_clk_status(pg_cntl);
+	DC_LOG_DEBUG("ONO0=%d (DCCG, DIO, DCIO)\n", block_enabled ? 1 : 0);
+
+	block_enabled = pg_cntl35_mem_status(pg_cntl);
+	DC_LOG_DEBUG("ONO1=%d (DCHUBBUB, DCHVM, DCHUBBUBMEM)\n", block_enabled ? 1 : 0);
+
+	block_enabled = pg_cntl35_plane_otg_status(pg_cntl);
+	DC_LOG_DEBUG("ONO2=%d (MPC, OPP, OPTC, DWB)\n", block_enabled ? 1 : 0);
+
+	block_enabled = pg_cntl35_hpo_pg_status(pg_cntl);
+	DC_LOG_DEBUG("ONO3=%d (HPO)\n", block_enabled ? 1 : 0);
+
+	for (i = 0; i < pg_cntl->ctx->dc->res_pool->pipe_count; i++) {
+		block_enabled = pg_cntl35_hubp_dpp_pg_status(pg_cntl, i);
+		DC_LOG_DEBUG("ONO%d=%d (DCHUBP%d, DPP%d)\n", 4 + i * 2, block_enabled ? 1 : 0, i, i);
+
+		block_enabled = pg_cntl35_dsc_pg_status(pg_cntl, i);
+		DC_LOG_DEBUG("ONO%d=%d (DSC%d)\n", 5 + i * 2, block_enabled ? 1 : 0, i);
+	}
+}
+
 static const struct pg_cntl_funcs pg_cntl35_funcs = {
 	.init_pg_status = pg_cntl35_init_pg_status,
 	.dsc_pg_control = pg_cntl35_dsc_pg_control,
@@ -511,7 +532,8 @@ static const struct pg_cntl_funcs pg_cnt
 	.mpcc_pg_control = pg_cntl35_mpcc_pg_control,
 	.opp_pg_control = pg_cntl35_opp_pg_control,
 	.optc_pg_control = pg_cntl35_optc_pg_control,
-	.dwb_pg_control = pg_cntl35_dwb_pg_control
+	.dwb_pg_control = pg_cntl35_dwb_pg_control,
+	.print_pg_status = pg_cntl35_print_pg_status
 };
 
 struct pg_cntl *pg_cntl35_create(



  parent reply	other threads:[~2025-09-17 12:40 UTC|newest]

Thread overview: 205+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-17 12:31 [PATCH 6.16 000/189] 6.16.8-rc1 review Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 001/189] fs: add a FMODE_ flag to indicate IOCB_HAS_METADATA availability Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 002/189] block: dont silently ignore metadata for sync read/write Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 003/189] coredump: dont pointlessly check and spew warnings Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 004/189] fuse: Block access to folio overlimit Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 005/189] fhandle: use more consistent rules for decoding file handle from userns Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 006/189] dma-debug: dont enforce dma mapping check on noncoherent allocations Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 007/189] perf: Fix the POLL_HUP delivery breakage Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 008/189] irqchip/mvebu-gicp: Fix an IS_ERR() vs NULL check in probe() Greg Kroah-Hartman
2025-09-17 12:31 ` [PATCH 6.16 009/189] Bluetooth: hci_conn: Fix not cleaning up Broadcaster/Broadcast Source Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 010/189] iommu/vt-d: Split intel_iommu_domain_alloc_paging_flags() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 011/189] iommu/vt-d: Create unique domain ops for each stage Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 012/189] iommu/vt-d: Split paging_domain_compatible() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 013/189] iommu/vt-d: Make iotlb_sync_map a static property of dmar_domain Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 014/189] Bluetooth: hci_conn: Fix running bis_cleanup for hci_conn->type PA_LINK Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 015/189] Bluetooth: ISO: Fix getname not returning broadcast fields Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 016/189] Revert "drm/amdgpu: Add more checks to PSP mailbox" Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 017/189] flexfiles/pNFS: fix NULL checks on result of ff_layout_choose_ds_for_read Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 018/189] SUNRPC: call xs_sock_process_cmsg for all cmsg Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 019/189] NFSv4: Dont clear capabilities that wont be reset Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 020/189] md: keep recovery_cp in mdp_superblock_s Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 021/189] trace/fgraph: Fix error handling Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 022/189] NFSv4: Clear the NFS_CAP_FS_LOCATIONS flag if it is not set Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 023/189] NFSv4: Clear NFS_CAP_OPEN_XOR and NFS_CAP_DELEGTIME if not supported Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 024/189] NFSv4: Clear the NFS_CAP_XATTR flag if not supported by the server Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 025/189] tracing: Fix tracing_marker may trigger page fault during preempt_disable Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 026/189] nfs/localio: restore creds before releasing pageio data Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 027/189] ftrace/samples: Fix function size computation Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 028/189] tracing/osnoise: Fix null-ptr-deref in bitmap_parselist() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 029/189] NFS: Serialise O_DIRECT i/o and truncate() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 030/189] NFSv4.2: Serialise O_DIRECT i/o and fallocate() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 031/189] NFSv4.2: Serialise O_DIRECT i/o and clone range Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 032/189] NFSv4.2: Serialise O_DIRECT i/o and copy range Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 033/189] NFS: nfs_invalidate_folio() must observe the offset and size arguments Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 034/189] NFSv4/flexfiles: Fix layout merge mirror check Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 035/189] tracing: Silence warning when chunk allocation fails in trace_pid_write Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 036/189] bpf, cpumap: Disable page_pool direct xdp_return need larger scope Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 037/189] cpufreq/amd-pstate: Fix setting of CPPC.min_perf in active mode for performance governor Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 038/189] s390/pai: Deny all events not handled by this PMU Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 039/189] s390/cpum_cf: Deny all sampling events by counter PMU Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 040/189] cpufreq/amd-pstate: Fix a regression leading to EPP 0 after resume Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 041/189] bpf: Fix out-of-bounds dynptr write in bpf_crypto_crypt Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 042/189] xsk: Fix immature cq descriptor production Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 043/189] rqspinlock: Choose trylock fallback for NMI waiters Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 044/189] bpf: Allow fall back to interpreter for programs with stack size <= 512 Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 045/189] bpf: Tell memcg to use allow_spinning=false path in bpf_timer_init() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 046/189] tcp_bpf: Call sk_msg_free() when tcp_bpf_send_verdict() fails to allocate psock->cork Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 047/189] proc: fix type confusion in pde_set_flags() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 048/189] EDAC/altera: Delete an inappropriate dma_free_coherent() call Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 049/189] i2c: rtl9300: fix channel number bound check Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 050/189] Revert "SUNRPC: Dont allow waiting for exiting tasks" Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 051/189] compiler-clang.h: define __SANITIZE_*__ macros only when undefined Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 052/189] arm64: kexec: initialize kexec_buf struct in load_other_segments() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 053/189] mptcp: sockopt: make sync_socket_options propagate SOCK_KEEPOPEN Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 054/189] doc: mptcp: net.mptcp.pm_type is deprecated Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 055/189] netlink: specs: mptcp: fix if-idx attribute type Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 056/189] ocfs2: fix recursive semaphore deadlock in fiemap call Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 057/189] btrfs: fix squota compressed stats leak Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 058/189] btrfs: fix subvolume deletion lockup caused by inodes xarray race Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 059/189] i2c: i801: Hide Intel Birch Stream SoC TCO WDT Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 060/189] i2c: rtl9300: ensure data length is within supported range Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 061/189] i2c: rtl9300: remove broken SMBus Quick operation support Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 062/189] net: libwx: fix to enable RSS Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 063/189] net: usb: asix: ax88772: drop phylink use in PM to avoid MDIO runtime PM wakeups Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 064/189] PM: EM: Add function for registering a PD without capacity update Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 065/189] PM: hibernate: Restrict GFP mask in hibernation_snapshot() Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 066/189] wifi: iwlwifi: fix 130/1030 configs Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 067/189] s390: kexec: initialize kexec_buf struct Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 068/189] smb: client: fix compound alignment with encryption Greg Kroah-Hartman
2025-09-17 12:32 ` [PATCH 6.16 069/189] smb: client: fix data loss due to broken rename(2) Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 070/189] mtd: nand: raw: atmel: Respect tAR, tCLR in read setup timing Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 071/189] mtd: rawnand: stm32_fmc2: avoid overlapping mappings on ECC buffer Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 072/189] mtd: rawnand: stm32_fmc2: fix ECC overwrite Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 073/189] fuse: do not allow mapping a non-regular backing file Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 074/189] fuse: check if copy_file_range() returns larger than requested size Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 075/189] fuse: prevent overflow in copy_file_range return value Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 076/189] mm/hugetlb: add missing hugetlb_lock in __unmap_hugepage_range() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 077/189] mm/khugepaged: fix the address passed to notifier on testing young Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 078/189] mm/vmalloc, mm/kasan: respect gfp mask in kasan_populate_vmalloc() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 079/189] mm/memory-failure: fix VM_BUG_ON_PAGE(PagePoisoned(page)) when unpoison memory Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 080/189] mm/memory-failure: fix redundant updates for already poisoned pages Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 081/189] mm/damon/core: set quota->charged_from to jiffies at first charge window Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 082/189] mm/damon/lru_sort: avoid divide-by-zero in damon_lru_sort_apply_parameters() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 083/189] drm/mediatek: fix potential OF node use-after-free Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 084/189] drm/i915/power: fix size for for_each_set_bit() in abox iteration Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 085/189] drm/xe: Attempt to bring bos back to VRAM after eviction Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 086/189] drm/xe: Allow the pm notifier to continue on failure Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 087/189] drm/xe: Block exec and rebind worker while evicting for suspend / hibernate Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 088/189] drm/amdgpu: fix a memory leak in fence cleanup when unloading Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 089/189] drm/amdgpu/vcn: Allow limiting ctx to instance 0 for AV1 at any time Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 090/189] drm/amdgpu/vcn4: Fix IB parsing with multiple engine info packages Greg Kroah-Hartman
2025-09-17 12:33 ` Greg Kroah-Hartman [this message]
2025-09-17 12:33 ` [PATCH 6.16 092/189] drm/amd/display: remove oem i2c adapter on finish Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 093/189] drm/edid: Define the quirks in an enum list Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 094/189] drm/edid: Add support for quirks visible to DRM core and drivers Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 095/189] drm/dp: Add an EDID quirk for the DPCD register access probe Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 096/189] drm/amd/display: Disable DPCD Probe Quirk Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 097/189] btrfs: use readahead_expand() on compressed extents Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 098/189] btrfs: fix corruption reading compressed range when block size is smaller than page size Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 099/189] kernfs: Fix UAF in polling when open file is released Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 100/189] libceph: fix invalid accesses to ceph_connection_v1_info Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 101/189] ceph: fix race condition validating r_parent before applying state Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 102/189] ceph: fix race condition where r_parent becomes stale before sending message Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 103/189] ceph: always call ceph_shift_unused_folios_left() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 104/189] ceph: fix crash after fscrypt_encrypt_pagecache_blocks() error Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 105/189] mtd: spinand: Add a ->configure_chip() hook Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 106/189] mtd: spinand: winbond: Enable high-speed modes on w25n0xjw Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 107/189] mtd: spinand: winbond: Fix oob_layout for W25N01JW Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 108/189] mm/damon/sysfs: fix use-after-free in state_show() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 109/189] mm/damon/reclaim: avoid divide-by-zero in damon_reclaim_apply_parameters() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 110/189] drm/amd/display: Destroy cached state in complete() callback Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 111/189] drm/amd/display: Drop dm_prepare_suspend() and dm_complete() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 112/189] drm/amd/amdgpu: Declare isp firmware binary file Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 113/189] hrtimers: Unconditionally update target CPU base after offline timer migration Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 114/189] fs/resctrl: Eliminate false positive lockdep warning when reading SNC counters Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 115/189] x86/cpu/topology: Always try cpu_parse_topology_ext() on AMD/Hygon Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 116/189] Input: iqs7222 - avoid enabling unused interrupts Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 117/189] Input: i8042 - add TUXEDO InfinityBook Pro Gen10 AMD to i8042 quirk table Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 118/189] Input: xpad - add support for Flydigi Apex 5 Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 119/189] Revert "net: usb: asix: ax88772: drop phylink use in PM to avoid MDIO runtime PM wakeups" Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 120/189] tty: hvc_console: Call hvc_kick in hvc_write unconditionally Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 121/189] serial: sc16is7xx: fix bug in flow control levels init Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 122/189] dt-bindings: serial: brcm,bcm7271-uart: Constrain clocks Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 123/189] USB: serial: option: add Telit Cinterion FN990A w/audio compositions Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 124/189] USB: serial: option: add Telit Cinterion LE910C4-WWX new compositions Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 125/189] mtd: rawnand: nuvoton: Fix an error handling path in ma35_nand_chips_init() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 126/189] drm/panthor: validate group queue count Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 127/189] net: fec: Fix possible NPD in fec_enet_phy_reset_after_clk_enable() Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 128/189] net: phylink: add lock for serializing concurrent pl->phydev writes with resolver Greg Kroah-Hartman
2025-09-17 12:33 ` [PATCH 6.16 129/189] net: phy: transfer phy_config_inband() locking responsibility to phylink Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 130/189] wifi: ath12k: Fix missing station power save configuration Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 131/189] wifi: ath12k: add link support for multi-link in arsta Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 132/189] wifi: ath12k: Add support to enqueue management frame at MLD level Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 133/189] wifi: ath12k: fix WMI TLV header misalignment Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 134/189] PCI: mvebu: Fix use of for_each_of_range() iterator Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 135/189] genetlink: fix genl_bind() invoking bind() after -EPERM Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 136/189] net: dsa: b53: fix ageing time for BCM53101 Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 137/189] net: bridge: Bounce invalid boolopts Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 138/189] tunnels: reset the GSO metadata before reusing the skb Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 139/189] docs: networking: can: change bcm_msg_head frames member to support flexible array Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 140/189] igb: Fix NULL pointer dereference in ethtool loopback test Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 141/189] igb: fix link test skipping when interface is admin down Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 142/189] i40e: fix IRQ freeing in i40e_vsi_request_irq_msix error path Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 143/189] drm/xe/configfs: Dont touch survivability_mode on fini Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 144/189] drm/amd/display: use udelay rather than fsleep Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 145/189] net: dev_ioctl: take ops lock in hwtstamp lower paths Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 146/189] macsec: sync features on RTM_NEWLINK Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 147/189] selftests: can: enable CONFIG_CAN_VCAN as a module Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 148/189] can: j1939: implement NETDEV_UNREGISTER notification handler Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 149/189] can: j1939: j1939_sk_bind(): call j1939_priv_put() immediately when j1939_local_ecu_get() failed Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 150/189] can: j1939: j1939_local_ecu_get(): undo increment when j1939_local_ecu_get() fails Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 151/189] can: xilinx_can: xcan_write_frame(): fix use-after-free of transmitted SKB Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 152/189] netfilter: nft_set_bitmap: fix lockdep splat due to missing annotation Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 153/189] netfilter: nft_set_pipapo: remove unused arguments Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 154/189] netfilter: nft_set: remove one argument from lookup and update functions Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 155/189] netfilter: nft_set_pipapo: merge pipapo_get/lookup Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 156/189] netfilter: nft_set_pipapo: dont return bogus extension pointer Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 157/189] netfilter: nft_set_pipapo: dont check genbit from packetpath lookups Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 158/189] netfilter: nft_set_rbtree: continue traversal if element is inactive Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 159/189] netfilter: nf_tables: Reintroduce shortened deletion notifications Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 160/189] netfilter: nf_tables: place base_seq in struct net Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 161/189] netfilter: nf_tables: make nft_set_do_lookup available unconditionally Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 162/189] netfilter: nf_tables: restart set lookup on base_seq change Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 163/189] hsr: use rtnl lock when iterating over ports Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 164/189] hsr: use hsr_for_each_port_rtnl in hsr_port_get_hsr Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 165/189] hsr: hold rcu and dev lock for hsr_get_port_ndev Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 166/189] phy: qualcomm: phy-qcom-eusb2-repeater: fix override properties Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 167/189] dmaengine: idxd: Remove improper idxd_free Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 168/189] dmaengine: idxd: Fix refcount underflow on module unload Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 169/189] dmaengine: idxd: Fix double free in idxd_setup_wqs() Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 170/189] erofs: get rid of {get,put}_page() for ztailpacking data Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 171/189] erofs: remove need_kmap in erofs_read_metabuf() Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 172/189] erofs: unify meta buffers in z_erofs_fill_inode() Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 173/189] erofs: fix invalid algorithm for encoded extents Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 174/189] dmaengine: ti: edma: Fix memory allocation size for queue_priority_map Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 175/189] regulator: sy7636a: fix lifecycle of power good gpio Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 176/189] erofs: fix runtime warning on truncate_folio_batch_exceptionals() Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 177/189] xhci: dbc: decouple endpoint allocation from initialization Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 178/189] xhci: dbc: Fix full DbC transfer ring after several reconnects Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 179/189] xhci: fix memory leak regression when freeing xhci vdev devices depth first Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 180/189] USB: gadget: dummy-hcd: Fix locking bug in RT-enabled kernels Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 181/189] usb: typec: tcpm: properly deliver cable vdms to altmode drivers Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 182/189] usb: gadget: midi2: Fix missing UMP group attributes initialization Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 183/189] usb: gadget: midi2: Fix MIDI2 IN EP max packet size Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 184/189] dmaengine: qcom: bam_dma: Fix DT error handling for num-channels/ees Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 185/189] dmaengine: dw: dmamux: Fix device reference leak in rzn1_dmamux_route_allocate Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 186/189] phy: qcom: qmp-pcie: Fix PHY initialization when powered down by firmware Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 187/189] phy: tegra: xusb: fix device and OF node leak at probe Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 188/189] phy: ti: omap-usb2: fix device leak at unbind Greg Kroah-Hartman
2025-09-17 12:34 ` [PATCH 6.16 189/189] phy: ti-pipe3: " Greg Kroah-Hartman
2025-09-17 18:09 ` [PATCH 6.16 000/189] 6.16.8-rc1 review Hardik Garg
2025-09-17 19:08 ` Achill Gilgenast
2025-09-17 20:08 ` Jon Hunter
2025-09-17 20:51 ` Pascal Ernster
2025-09-19  8:23   ` Pascal Ernster
2025-09-18  2:37 ` Peter Schneider
2025-09-18  3:07 ` Takeshi Ogasawara
2025-09-18  5:16 ` Brett A C Sheffield
2025-09-18 10:46 ` [PATCH 6.16 000/189] " Anders Roxell
2025-09-18 11:43 ` Dileep malepu
2025-09-18 12:46 ` Ron Economos
2025-09-18 18:02 ` Mark Brown
2025-09-18 18:22 ` Florian Fainelli
2025-09-18 19:21 ` Pavel Machek
2025-09-19 11:11 ` Christian Heusel

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=20250917123354.078175615@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=alexander.deucher@amd.com \
    --cc=charlene.liu@amd.com \
    --cc=daniel.wheeler@amd.com \
    --cc=mario.limonciello@amd.com \
    --cc=ovidiu.bunea@amd.com \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=wayne.lin@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