From patchwork Sun May 17 10:38:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Rauch X-Patchwork-Id: 26766 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 53986BDCBD for ; Sun, 17 May 2026 10:38:56 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5651662FEA; Sun, 17 May 2026 12:38:55 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=gmx.de header.i=rauch.christian@gmx.de header.b="QWESXrxZ"; dkim-atps=neutral Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8C6F062010 for ; Sun, 17 May 2026 12:38:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1779014333; x=1779619133; i=rauch.christian@gmx.de; bh=1ZinTgtdfv/Xxhsh6wj5v4dKMzHM2VAGONQBGp5slE4=; h=X-UI-Sender-Class:Content-Type:Message-ID:Date:MIME-Version:To: From:Subject:cc:content-transfer-encoding:content-type:date:from: message-id:mime-version:reply-to:subject:to; b=QWESXrxZbBkNfrw5EJME86blWO0frUoka+nHsOX5pn0tlpjQGq1aeSyNeRA4bKVw zjOb24JoFlaAcpRvpPvLbQh35NxGvn74guTVxvWX719rDQ8XKkKY1Bi9JyJYXTXE9 vXBLXL8bY6RGxes06G2bXcuYopP5q2WZiP6Li2Bcxz4G6QpDBNo2+nb2lD1Psuwz6 9epoG6TVRYUhMb84weceoy9MbsM8QBqc7YfMsdCF6m/5VxNjqEEnynOWEqkkiq5bA U6y1m9zRAASwnzkUew04bOhy2blIFmL8ijp09he/0xGsIh22Ejd9if5UaGGy2YLom qOs3XLG5L21YA0h42g== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MQ5rO-1wkc163mF6-00IoZ3 for ; Sun, 17 May 2026 12:38:52 +0200 Message-ID: Date: Sun, 17 May 2026 12:38:52 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: libcamera-devel@lists.libcamera.org Content-Language: en-US From: Christian Rauch Subject: Raspberry Pi 5 Support X-Provags-ID: V03:K1:36Z+Rk0f7Vk+avk2A4jl3K6K5JKdA5OHsK9IOodloF1/MxNpivW nmw5Hfa/lT8H8aO7qLfX/PkV/UZYajvPZiU9GpHWzHCpCI57tJqrht83ShqcWrejurPdDd2 osekhqO2uHtMBoDq0Ju79B+mRLGV6a7/u00svlrLnpnUaK4S+eQVrQS4wigmMVOBb/Qhphq cF3am4RI2SJGWwLbBVfMw== X-Spam-Flag: NO UI-OutboundReport: notjunk:1; M01:P0:ZNHyyeSv8Ic=; LtB+cJrErAuCAJeqoaVKcYsl+aP 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 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Dear all, A while ago (actually nearly a year to this date) I was asking about the Raspberry Pi 5 support in upstream libcamera and Naush mentioned that Raspberry Pi is using a workaround in the CFE kernel driver to make this work. I assume that Naush was talking about the kernel module "rp1_cfe", which is shipped with the workaround as "rp1_cfe_downstream" in Raspberry Pi OS. Ubuntu 26.04 with its kernel "7.0.0-1010-raspi" ships the "rp1_cfe" module with workaround as "rp1_cfe_downstream" too, and also patched (patch attached) the upstream libcamera sources with a fix to detect the camera when either of those kernel modules is loaded. Since the Raspberry Pi 5 support is still not available with upstream libcamera and the "rp1_cfe" kernel module, and it seems it is going to stay that way for a while, would you accept the attached patch to replicate the behaviour in the Raspberry Pi libcamera fork? Given that the "rp1_cfe" module does not work with the upstream "rpi/pisp" pipeline, how do you know that this pipeline handler is actually working? Are you carrying custom patches on top of "rp1_cfe" to make the upstream "rpi/pisp" work? Once the required features are merged into upstream module "rp1_cfe", how do you know that the "rpi/pisp" pipeline will still be compatible? Alternatively, couldn't the patches to the pipeline handler and kernel modules be upstreamed in order to resolve this issue? Best, Christian Author: Pragyansh Chaturvedi Forwarded: not-needed Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libcamera/+bug/2110144 Last-Update: 2026-02-18 Description: Fix PiSP CFE entity match patterns libcamera0.5 includes the PiSP drivers for Raspberry Pi. But while registering the cameras, it is using different match strings for CFE entities than what are present in Raspberry Pi's fork of libcamera and the current device-tree overlays. This leads to camera sensors not being detected on Raspberry Pi 5, which used to work in libcamera0.4. . This indicates an upcoming change in these device-tree overlays, as Raspberry Pi themselves upstreamed these changes to libcamera. So this patch allows both the old and current match strings for searching for CFE devices. This delta can be removed once our kernel catches up and introduces the new strings. --- --- a/include/libcamera/internal/device_enumerator.h +++ b/include/libcamera/internal/device_enumerator.h @@ -28,6 +28,8 @@ bool match(const MediaDevice *device) const; + void clear(); + private: std::string driver_; std::vector entities_; --- a/src/libcamera/device_enumerator.cpp +++ b/src/libcamera/device_enumerator.cpp @@ -157,6 +157,14 @@ } /** + * \brief Clear the entities search pattern vector + */ +void DeviceMatch::clear() +{ + entities_.clear(); +} + +/** * \class DeviceEnumerator * \brief Enumerate, store and search media devices * --- a/src/libcamera/pipeline/rpi/pisp/pisp.cpp +++ b/src/libcamera/pipeline/rpi/pisp/pisp.cpp @@ -888,7 +888,17 @@ std::shared_ptr cfeDevice = acquireMediaDevice(enumerator, cfe); if (!cfeDevice) { - LOG(RPI, Debug) << "Unable to acquire a CFE instance"; + LOG(RPI, Debug) << "Trying old entity search patterns for CFE instance"; + } + + cfe.clear(); + cfe.add("rp1-cfe-fe_image0"); + cfe.add("rp1-cfe-fe_stats"); + cfe.add("rp1-cfe-fe_config"); + cfeDevice = acquireMediaDevice(enumerator, cfe); + + if (!cfeDevice) { + LOG(RPI, Debug) << "Unable to acquire CFE instance"; break; } @@ -1073,9 +1083,26 @@ int ret; MediaEntity *cfeImage = cfe->getEntityByName("rp1-cfe-fe-image0"); + if (!cfeImage) + { + cfeImage = cfe->getEntityByName("rp1-cfe-fe_image0"); + } MediaEntity *cfeEmbedded = cfe->getEntityByName("rp1-cfe-csi2-ch1"); + if (!cfeEmbedded) + { + cfeEmbedded = cfe->getEntityByName("rp1-cfe-embedded"); + } MediaEntity *cfeStats = cfe->getEntityByName("rp1-cfe-fe-stats"); + if (!cfeStats) + { + cfeStats = cfe->getEntityByName("rp1-cfe-fe_stats"); + } MediaEntity *cfeConfig = cfe->getEntityByName("rp1-cfe-fe-config"); + if (!cfeConfig) + { + cfeConfig = cfe->getEntityByName("rp1-cfe-fe_config"); + } + MediaEntity *ispInput = isp->getEntityByName("pispbe-input"); MediaEntity *IpaPrepare = isp->getEntityByName("pispbe-config"); MediaEntity *ispOutput0 = isp->getEntityByName("pispbe-output0"); @@ -2144,8 +2171,9 @@ int ret = 0; constexpr unsigned int csiVideoSinkPad = 0; - constexpr unsigned int csiVideoSourcePad = 1; - constexpr unsigned int csiMetaSourcePad = 2; + constexpr unsigned int csiMetaSinkPad = 1; + constexpr unsigned int csiVideoSourcePad = 4; + constexpr unsigned int csiMetaSourcePad = 5; constexpr unsigned int feVideoSinkPad = 0; constexpr unsigned int feConfigSinkPad = 1; @@ -2156,48 +2184,29 @@ const MediaEntity *csi2 = csi2Subdev_->entity(); const MediaEntity *fe = feSubdev_->entity(); - for (MediaLink *link : csi2->pads()[csiVideoSourcePad]->links()) { - if (link->sink()->entity()->name() == "rp1-cfe-csi2-ch0") + for (MediaLink *link : csi2->getPadByIndex(csiVideoSourcePad)->links()) { + if (link->sink()->entity()->name() == "rp1-cfe-csi2-ch0" || link->sink()->entity()->name() == "rp1-cfe-csi2_ch0") link->setEnabled(false); else if (link->sink()->entity()->name() == "pisp-fe") link->setEnabled(true); } - csi2->pads()[csiMetaSourcePad]->links()[0]->setEnabled(sensorMetadata_); + csi2->getPadByIndex(csiMetaSourcePad)->links()[0]->setEnabled(sensorMetadata_); - fe->pads()[feConfigSinkPad]->links()[0]->setEnabled(true); - fe->pads()[feVideo0SourcePad]->links()[0]->setEnabled(true); - fe->pads()[feVideo1SourcePad]->links()[0]->setEnabled(false); - fe->pads()[feStatsSourcePad]->links()[0]->setEnabled(true); - - const V4L2Subdevice::Stream imageStream{ - csiVideoSinkPad, - sensor_->imageStream().stream - }; - const V4L2Subdevice::Stream embeddedDataStream{ - csiVideoSinkPad, - sensor_->embeddedDataStream().value_or(V4L2Subdevice::Stream{}).stream - }; - - V4L2Subdevice::Routing routing; - routing.emplace_back(imageStream, V4L2Subdevice::Stream{ csiVideoSourcePad, 0 }, - V4L2_SUBDEV_ROUTE_FL_ACTIVE); - - if (sensorMetadata_) - routing.emplace_back(embeddedDataStream, - V4L2Subdevice::Stream{ csiMetaSourcePad, 0 }, - V4L2_SUBDEV_ROUTE_FL_ACTIVE); - - ret = csi2Subdev_->setRouting(&routing); - if (ret) - return ret; + fe->getPadByIndex(feConfigSinkPad)->links()[0]->setEnabled(true); + fe->getPadByIndex(feVideo0SourcePad)->links()[0]->setEnabled(true); + fe->getPadByIndex(feVideo1SourcePad)->links()[0]->setEnabled(false); + fe->getPadByIndex(feStatsSourcePad)->links()[0]->setEnabled(true); - ret = csi2Subdev_->setFormat(imageStream, &sensorFormat); + ret = csi2Subdev_->setFormat(csiVideoSinkPad, &sensorFormat); if (ret) return ret; if (sensorMetadata_) { - ret = csi2Subdev_->setFormat(embeddedDataStream, &embeddedFormat); + ret = csi2Subdev_->setFormat(csiMetaSinkPad, &embeddedFormat); + if (ret) + return ret; + ret = csi2Subdev_->setFormat(csiMetaSourcePad, &embeddedFormat); if (ret) return ret; }