diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
index 0d3a9f0e..9863bfb6 100644
--- a/src/ipa/rkisp1/algorithms/dpf.cpp
+++ b/src/ipa/rkisp1/algorithms/dpf.cpp
@@ -285,6 +285,49 @@ bool Dpf::loadConfig(int32_t mode)
 	return true;
 }
 
+void Dpf::logConfig(const IPAFrameContext &frameContext,
+		    const struct rkisp1_cif_isp_dpf_config &config,
+		    const struct rkisp1_cif_isp_dpf_strength_config &strengthConfig) const
+{
+	std::ostringstream ss;
+
+	ss << "DPF config update: ";
+	ss << " control mode=" << activeMode_->modeValue;
+	ss << ", denoise=" << (frameContext.dpf.denoise ? "enabled" : "disabled");
+
+	ss << ", rb_fltsize="
+	   << (config.rb_flt.fltsize == RKISP1_CIF_ISP_DPF_RB_FILTERSIZE_13x9 ? "13x9" : "9x9");
+	ss << ", nll_scale="
+	   << (config.nll.scale_mode == RKISP1_CIF_ISP_NLL_SCALE_LOGARITHMIC ? "log" : "linear");
+	ss << ", gain_mode=" << config.gain.mode;
+	ss << ", strength=" << int(strengthConfig.r) << ',' << int(strengthConfig.g) << ',' << int(strengthConfig.b);
+
+	ss << ", g=[";
+	for (size_t i = 0; i < RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS; ++i) {
+		if (i)
+			ss << ',';
+		ss << int(config.g_flt.spatial_coeff[i]);
+	}
+	ss << "]";
+
+	ss << ", rb=[";
+	for (size_t i = 0; i < RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS; ++i) {
+		if (i)
+			ss << ',';
+		ss << int(config.rb_flt.spatial_coeff[i]);
+	}
+	ss << "]";
+
+	ss << ", nll=[";
+	for (size_t i = 0; i < RKISP1_CIF_ISP_DPF_MAX_NLF_COEFFS; ++i) {
+		if (i)
+			ss << ',';
+		ss << int(config.nll.coeff[i]);
+	}
+	ss << "]";
+	LOG(RkISP1Dpf, Debug) << ss.str();
+}
+
 /**
  * \copydoc libcamera::ipa::Algorithm::queueRequest
  */
@@ -321,7 +364,7 @@ void Dpf::queueRequest(IPAContext &context,
 			break;
 		}
 		if (update)
-			LOG(RkISP1Dpf, Debug) << "Set denoise to " << modeName(*denoise);
+			LOG(RkISP1Dpf, Debug) << "Set denoise to " << *denoise;
 	}
 
 	frameContext.dpf.denoise = dpf.denoise;
@@ -342,7 +385,7 @@ void Dpf::prepare(IPAContext &context, const uint32_t frame,
 		return;
 	}
 
-	prepareEnabledMode(context, params);
+	prepareEnabledMode(context, frameContext, params);
 }
 
 void Dpf::prepareDisabledMode(RkISP1Params *params)
@@ -353,7 +396,8 @@ void Dpf::prepareDisabledMode(RkISP1Params *params)
 	dpfStrength.setEnabled(false);
 }
 
-void Dpf::prepareEnabledMode(IPAContext &context, RkISP1Params *params)
+void Dpf::prepareEnabledMode(IPAContext &context, IPAFrameContext &frameContext,
+			     RkISP1Params *params)
 {
 	if (activeMode_ == noiseReductionModes_.end())
 		return;
@@ -389,6 +433,9 @@ void Dpf::prepareEnabledMode(IPAContext &context, RkISP1Params *params)
 	auto strengthConfig = params->block<BlockType::DpfStrength>();
 	strengthConfig.setEnabled(true);
 	*strengthConfig = modeConfig.strength;
+
+	if (frameContext.dpf.update)
+		logConfig(frameContext, *config, *strengthConfig);
 }
 
 REGISTER_IPA_ALGORITHM(Dpf, "Dpf")
diff --git a/src/ipa/rkisp1/algorithms/dpf.h b/src/ipa/rkisp1/algorithms/dpf.h
index 208d8fe9..66d3f302 100644
--- a/src/ipa/rkisp1/algorithms/dpf.h
+++ b/src/ipa/rkisp1/algorithms/dpf.h
@@ -43,9 +43,13 @@ private:
 			      rkisp1_cif_isp_dpf_strength_config &strengthConfig);
 
 	bool loadConfig(int32_t mode);
+	void logConfig(const IPAFrameContext &frameContext,
+		       const struct rkisp1_cif_isp_dpf_config &config,
+		       const struct rkisp1_cif_isp_dpf_strength_config &strengthConfig) const;
 
 	void prepareDisabledMode(RkISP1Params *params);
-	void prepareEnabledMode(IPAContext &context, RkISP1Params *params);
+	void prepareEnabledMode(IPAContext &context, IPAFrameContext &frameContext,
+				RkISP1Params *params);
 
 	std::vector<ModeConfig> noiseReductionModes_;
 	std::vector<ModeConfig>::const_iterator activeMode_;
