diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 4d98c902..d6fc624c 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -667,12 +667,44 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
 	if (ret)
 		return ret;
 
+	V4L2Subdevice::Formats ispFormats = isp_->formats(0);
+	if (ispFormats.empty())
+		return -1;
+
+	/*
+	 * The maximum resolution is identical for all media bus codes on
+	 * the RkISP1 isp entity. Therefore take the first available resolution.
+	 */
+	Size ispMaximum = ispFormats.begin()->second[0].max;
+
 	/*
 	 * Configure the format on the sensor output and propagate it through
 	 * the pipeline.
 	 */
 	V4L2SubdeviceFormat format = config->sensorFormat();
-	LOG(RkISP1, Debug) << "Configuring sensor with " << format.toString();
+
+	if (ispMaximum.width < format.size.width ||
+	    ispMaximum.height < format.size.height) {
+		Size maxSize;
+		LOG(RkISP1, Info) << "Sensor format " << format.size.toString()
+				  << " is not supported by the ISP (maximum: "
+				  << ispMaximum.toString() << "), trying to "
+				  << "re-configure to a smaller sensor format";
+
+		for (const Size &size : sensor->sizes()) {
+			if (size.width > ispMaximum.width ||
+			    size.height > ispMaximum.height)
+				continue;
+			maxSize = std::max(maxSize, size);
+		}
+		if (maxSize == Size(0, 0)) {
+			LOG(RkISP1, Error) << "No available sensor resolution"
+					      "that is smaller or equal to "
+					   << format.toString();
+			return -1;
+		}
+		format.size = maxSize;
+	}
 
 	ret = sensor->setFormat(&format);
 	if (ret < 0)
