From nobody Mon Feb 9 01:11:38 2026 Received: from mx08-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A011735EDC9; Mon, 2 Feb 2026 13:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=91.207.212.93 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; cv=fail; b=R5L8iu5g5qG3emSc+1pkM75WRqcReX0PvJQnoE+YPzkXLM3hRFIOrQlzKV42fxDcpG71qn0Xl2syKPhLweceUUImsWzDwuV01Cb4mjXKP6NaovsbLFSSIrXTps5WvUG3/Yd/9NdCcXLI3/3XH9or74/k3PlOHAwyAPqTs38DGR0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; c=relaxed/simple; bh=XMjBq3XDV8IYExk+69WdbPVyJRHmzhCZnevx+KDQ8gA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=mtkC2OIIzq7Fnq69fTurbPecT+XLm+OdH5RHd7iGB6A9NLN+c1BlEe5+R4KhfqhtLc0EdU8v4Q2lAQRqajpjacmqjMPQnevuekss3VZmtFxdH5gKYrFy1hR2t1oigMLfkgMecQWSv8EXRbPNjezq8oSJCH+k4Q3YaFfF+pc05cw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=BSDejgXy; arc=fail smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="BSDejgXy" Received: from pps.filterd (m0369457.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DpBRI2968032; Mon, 2 Feb 2026 14:57:49 +0100 Received: from duzpr83cu001.outbound.protection.outlook.com (mail-northeuropeazon11012054.outbound.protection.outlook.com [52.101.66.54]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1wjq45nh-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:49 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mrmOjZmUCOCyzafGR2EvBNdJP0d4tRiVh4dQ+kfAjXxtyGhQpUyRsA67VTy2TPjE8SfLyZG4Cf3uPR8jUgGaBPLZnIyE/IhyybUWyU4FRe6Oe1xlqKDIFFH5vqyEI8C3RdisLaOtLsI4IA2lmGVIL92OII4KwAvibpgYf8NFgWeQX3ZPlgaaSziICgaIHre1wbi0DZuom67oYaEZGNLchGxwmX3IRQ8kOxXyBLmDFkdjYwEJUGieIjHtXs7d5Zjb5WydsMbkk7HKiy1SuBfjBqnVly7l7mp4RB/7aaHLSFzze3V7dfkIXx+qU7YhBIZTGVfetrESPcnlqhMI9bGtaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hEeG4jqNYprpJnAWtY7nnrgl69+/I2mb998PNhBVy0I=; b=EleugOEsSqaPaoj7qB54wt9/ylGFR/2Olf9VB5JNmS7sJnd5cyLeRATbFSGIoknYo67Tu6c0RMxQVFLKOoJgdxp9JJiuq3EDT7/hsdvZQSaUokUdmhiNshojnIt/LQMBW2k9SrfGABdS84XIIqZmSEi/kT4D64ZwDBwWiKWBU3xAtXkiGrwZ1S+WDqw02Zd9ptPYZqiUdgDeXdFqxU3whDyyq3auvcOODpQkioPQfn6cqi1ByHHvPePDxLnkEvj4aNMX6Zhua+Efw9gTklxs0q7kxnjCAiagZPgvsZR3GVBR+nBn8eaAJ55UE+gtTt3/ys0zJ2DUsWSAzlDy1FHE9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hEeG4jqNYprpJnAWtY7nnrgl69+/I2mb998PNhBVy0I=; b=BSDejgXyjgBfPU2CKJnmIASQoE3/Ez1/XElGFwbzRxHiPMDK/MQzBBMIqYw6M0Q2qAhiRTXZJao0J8oUWRjCGleaz3fTetnDUedjfN3jWkIxda6ehB71IkPOTje8lalHTx7h+HME+USMDPHkeyCCN5cUvP/l9flxKGWKySyc7v0n3LHtfaASKTBX7EvBhXBN+dkJu4Q4xVW0TfL2ArbNO4lfoy6rM0X8eKXvMy9L34NWf0+/o/RYWkG7sd6GWqVDrMxxQxXZ7sLkyEKiss09tgSraWJFzefwrz6XmFFNS8e8NVVPORj+YNU+KJi7s1qpdV3Wu2dUadeZUGAxgC6KhQ== Received: from AS4PR10CA0012.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::15) by PAWPR10MB7697.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:35f::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.13; Mon, 2 Feb 2026 13:57:43 +0000 Received: from AMS0EPF0000019A.eurprd05.prod.outlook.com (2603:10a6:20b:5dc:cafe::e) by AS4PR10CA0012.outlook.office365.com (2603:10a6:20b:5dc::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:39 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019A.mail.protection.outlook.com (10.167.16.246) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:42 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:27 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:41 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:26 +0100 Subject: [PATCH 01/13] media: stm32: dcmipp: share struct dcmipp_device among subdevs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-1-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019A:EE_|PAWPR10MB7697:EE_ X-MS-Office365-Filtering-Correlation-Id: 216e5a34-6a70-4c71-70c7-08de626308ca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|7416014|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?engvM2tIZmg2WXdrcElPbkIvQzFwSU1aKy9uSzRHQjJxUTh4QVg1Smd1TzVK?= =?utf-8?B?NWdKeWQ2TEpoQjY4L1RPdVcxRmJaT3V3dXVSWlNaaUlzTzBQQzNzUG9kSzdO?= =?utf-8?B?TDhOUGI5UVhZV0RnSEFPSEx2Z05XK2RGajZiWGZTcWI4MFhFMjhZcDh1RmZl?= =?utf-8?B?K2dYUTFkYjdBRTh4UjJtVEpVRzJQd3Rub1ZTc1M3eGE0alJoUG5aNldobm84?= =?utf-8?B?RnNjWHY5WFlDek1hRXBNOTVEQVhDQjBaRXFpZ0FKemJMaHJSSXVMV0pVNkxW?= =?utf-8?B?eHdiNy94VWs3RmtrZ1NxMUhLOHhZbFZ6L3NoNVBxY21FVE9KR3pxa1liZDdx?= =?utf-8?B?cFNwS3dqSnNYTi9NamVIWlhrVW96UGhsdk5XWElxOExqekNvZjhGd1MyejBT?= =?utf-8?B?TTMzbWU5NjRXRFNneUVJT1c4Qk9JbFJpQ1o1WXJTMGpQKys5MmJlTUticW0v?= =?utf-8?B?cWtEZUNwN29DQXRibUxzZGgzTWk2NkJRUlA1NTVsL01OUE1TeXhxbElmOHF3?= =?utf-8?B?UGZVbkpYMm1hTklVa2RGcngwNWtIQ0NFaFdjUDkyMlVBT2NVMFdWWVZ3bGsx?= =?utf-8?B?UzB1M3MrclJBdDVvNS84Z3dOTkhSclEzbnQ2YjRlNmJtMFE0S0RtQkFZbzJK?= =?utf-8?B?ZWNLQ3dXcWtIVU9BcE8rRFFXdjZzeU1aWXRvRFVTT2tOUWdBKzM1MytOMENv?= =?utf-8?B?WEF2NnJXckM3d0w5YTRrUGFoU1BTUlhzWmhXKzVJTC9TMGIyeVRNODdOa1Uv?= =?utf-8?B?eStBZWR0RFlBTU95V2o3cTVLMlM0eEdJV29mN0VHc1VKY1hCVThzcDFVaDQ2?= =?utf-8?B?RUZPVUF1VHRQeXpxVE1rUkpmZ0JPM01qTkhReU91TGl2a083NysrelBjbG9Y?= =?utf-8?B?S3ZFL0JoTjBUYmlNc1R1bHBRcHdTR2N6dnNTRkNGWExGaEZ3UndrVVFvZEFE?= =?utf-8?B?bE9idHJyUHlrc1pIbHRtRlVkNnhRSEtZM05mdTlWbjk0eXF3ejh1ZFNSa3pw?= =?utf-8?B?MUpENlZyZzdyczdENWZHdmgyb3ZkZklTNGVqR1JMWksrMTYwZEptRWtnZVRh?= =?utf-8?B?aGpaRjZ5VGQweUUxUnQzenVVNXNveVlMWkw5aWkvR09sUzQvMkVWOGZwV3kw?= =?utf-8?B?SlQ1TWtwOFZJRnJRS2IrK3JFZEZyNU8rU3JYL2Zjc3ErRXQrSVFhVlBDYXFX?= =?utf-8?B?ZzlCazlVcDlzam5KUGUxR1hrWjg1aWFiMTBUL2MyamFLVml1RWtBYTZCQVBZ?= =?utf-8?B?RWJpdnZpZk9xVUlCbDlCdFUvY01hWjNBMjRNSkdNQWZPOGNaNVZWbEVUb1JQ?= =?utf-8?B?R1BiMWRsZkx5NTZZT01wNkl6L0VFYXI2bFFBVm9aMUdXT2MzWCtyZUcwak95?= =?utf-8?B?bnBBRW0yanFKRVFHRVNCbjJpSUlFR00zVlo3U1NEMU1TS3VvSHBkNG4waDJt?= =?utf-8?B?WXZCZDJSSU91TEJzclQrWEZ0eWdYaW5ickdwV2hXTENlV3EvUWhUVDFoQ3BJ?= =?utf-8?B?clFWdWt6ajlLMXJYc0Z1S1Q2dVRlNVFqSjBNVmNWSE5tMXY5U0FMS0VIUUlx?= =?utf-8?B?MjFqNzE1Vm5zeEp2QjNreGxBR05LSmN3TjBUcHRjbkdLK1ZhUjh4SDNuNDkz?= =?utf-8?B?V0dnNUNnYkpsUjRJMDI1c2lMY3FjcHFCbklFRzN3YlF0R0NScGpOb1h1N25w?= =?utf-8?B?WXdYVi9hT1pMTlJISWhKWWFHWTRrdlVEV0ZJRjZPdjJPWGtwbjlNZ2RtQnFX?= =?utf-8?B?ZkZoRjBWSUdTSW9HNjQ5RU9vTXFtVEdrbFF3RExESlRaSWJNa05JN2NkTk9O?= =?utf-8?B?TlBWemoxWGF4ZlpyTDFCNXE0amxBSXgyU2lpV0wzT0dRZWkyK2VBK0M3elZO?= =?utf-8?B?c2wvcVBoRFU4VlBxdno0bTM5c1JXRGt6WW4rcjZCeWRucXNkdm5KZ0h2STk2?= =?utf-8?B?dHpnTTMxdk5zaDJyNno5OG9TdW5VY3JSRW5wMmZNUWlsN2NDdFFxM2JyK3k1?= =?utf-8?B?dWhqY2wyZzN1MXkrQzRlbEdaUk1VNGtVWU84OWd4K1hHbkdIQUd3NnQ4VHVr?= =?utf-8?B?VVRBdGN1RVFQUFZGTkVDRG9HT0pTLzl3T3lpcWkxWElGZ0w5b2VJOGFTUmFK?= =?utf-8?B?YmptOUZzc0hGbVJpanZGYU51V2ltSDVQSXkzNGZIbTRBYXU2NDFHaUFBaHFK?= =?utf-8?B?WlJHVDV4Y2hZZjcyVUJSU3Z4akdJbVYvQ0pSUlg0THFRN0ZXSzhMaDA2T0gz?= =?utf-8?B?akpnTUxCSFdqVGJNRjhrRVAybktRPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(7416014)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NBPDMKh5hZDoVw4a/anE2uNUorK7S4Z40jBgmOYQ5pYM6cWjiWhxjUbI0xt/ESLz2G8hEOGo7ol1N7Yz9xRdPfzdtJym8x9clqrDIFjJ4Qttd6iefW74NXDVkSR3/E+QaXrBL3vhhUtR8Auz0QINeI5kWhftQw/7kr2WIlROkM7bJS0PKtBq6eOCM4+qbmPkLW3OvCuViYdpiQcN8gYBViRy8bZl9tKdN/qr2fPeAALafr7m09ku2l8ZrE4lXdiWOxRf8fa9VdG1g5wDumIDGP6fkK1dZ6caJFvMSQhY75r+y/KEzADXKmMt1/orwa4AL1DjXQTmy0ayq2gg7BtQOo4SO3hcl375Vnow1TPCtdmm133fxuSeHYsM/oCIqTSafUtGcrTlJ1gzxN1ObpCRcT6rUzQqUZLpaarvWIa7D8Jr9+oKCmzjqCjZaHrk2fvV X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:42.1014 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 216e5a34-6a70-4c71-70c7-08de626308ca X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019A.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR10MB7697 X-Proofpoint-GUID: 7QerdSwG0JufuuTC50767wMde6DwL1cl X-Proofpoint-ORIG-GUID: 7QerdSwG0JufuuTC50767wMde6DwL1cl X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX5rkx5S1rzAnB fvnPaibokISEBxFggJ00c7YEQaJjyPdw/nzvYgHh5lY2DGbMYb+uqnEY6i+5lLnn0znVcKnuz86 WUJ9jM8tv94oRAvgLFCko2Pb2O6l3UhV+A87P8unNrPVK+Ykwanr5cDfD9S6mYY5eJZV1I9FUiT xRCvxbTcDpEmYx4HEjAQUbLDW+2fDsuJUWxYMi9yI9BDMdQRiztmuFmyINt6zQKxvaAM1qXA/mt HZTEmkr8MOCUR4Y5Jpxewtd1NS5eU4bRIzT6T0o4rLpG4BZJFZr95FV3jLYJFb6PNRhLKQwpNyg WpS6AQcFNaJsl2ftTPXXgSq8qy363rlCgOirwuxWWuNwBK+bAxGfNI2oxFKNIGpTOlHOT0AAkOt tgAXyyy94xmMWecTewDDMNA2ejNNEBFw/JUAmYNJ60ADUVO51XSoOlv1lfqMmMXaSkD4ckPbSt+ /NB2gqXDIPsQNe3FL6w== X-Authority-Analysis: v=2.4 cv=HuZ72kTS c=1 sm=1 tr=0 ts=6980ad5d cx=c_pps a=TPI4aLKDjCd1EbHbt8/hbw==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=KeAM96LYraSxUco4NP0A:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 adultscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 In preparation of need for sharing of data between subdevices, make the struct dcmipp_device structure part of dcmipp_common.h and share it with subdevs at init time. This allows for simplifying parameters of each subdev init function as well. Signed-off-by: Alain Volmat --- .../st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 13 ++++--- .../st/stm32/stm32-dcmipp/dcmipp-byteproc.c | 11 +++--- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 43 +++++++++++++++++-= ---- .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 33 ++--------------- .../platform/st/stm32/stm32-dcmipp/dcmipp-input.c | 12 +++--- 5 files changed, 55 insertions(+), 57 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c index 19e6b187be22..f4b962867dc2 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -855,12 +855,11 @@ static const struct media_entity_operations dcmipp_by= tecap_entity_ops =3D { .link_validate =3D dcmipp_bytecap_link_validate, }; =20 -struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struct device *dev, - const char *entity_name, - struct v4l2_device *v4l2_dev, - void __iomem *regs) +struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp) { struct dcmipp_bytecap_device *vcap; + struct device *dev =3D dcmipp->dev; struct video_device *vdev; struct vb2_queue *q; const unsigned long pad_flag =3D MEDIA_PAD_FL_SINK; @@ -878,6 +877,8 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struc= t device *dev, goto err_free_vcap; } =20 + vcap->ved.dcmipp =3D dcmipp; + /* Initialize the media entity */ vcap->vdev.entity.name =3D entity_name; vcap->vdev.entity.function =3D MEDIA_ENT_F_IO_V4L; @@ -928,7 +929,7 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struc= t device *dev, vcap->ved.handler =3D dcmipp_bytecap_irq_callback; vcap->ved.thread_fn =3D dcmipp_bytecap_irq_thread; vcap->dev =3D dev; - vcap->regs =3D regs; + vcap->regs =3D dcmipp->regs; =20 /* Initialize the video_device struct */ vdev =3D &vcap->vdev; @@ -939,7 +940,7 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struc= t device *dev, vdev->ioctl_ops =3D &dcmipp_bytecap_ioctl_ops; vdev->lock =3D &vcap->lock; vdev->queue =3D q; - vdev->v4l2_dev =3D v4l2_dev; + vdev->v4l2_dev =3D &dcmipp->v4l2_dev; strscpy(vdev->name, entity_name, sizeof(vdev->name)); video_set_drvdata(vdev, &vcap->ved); =20 diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c= b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c index f9e4a3a9ef3f..aa0561957b80 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c @@ -571,8 +571,8 @@ void dcmipp_byteproc_ent_release(struct dcmipp_ent_devi= ce *ved) } =20 struct dcmipp_ent_device * -dcmipp_byteproc_ent_init(struct device *dev, const char *entity_name, - struct v4l2_device *v4l2_dev, void __iomem *regs) +dcmipp_byteproc_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp) { struct dcmipp_byteproc_device *byteproc; const unsigned long pads_flag[] =3D { @@ -585,11 +585,11 @@ dcmipp_byteproc_ent_init(struct device *dev, const ch= ar *entity_name, if (!byteproc) return ERR_PTR(-ENOMEM); =20 - byteproc->regs =3D regs; + byteproc->regs =3D dcmipp->regs; =20 /* Initialize ved and sd */ ret =3D dcmipp_ent_sd_register(&byteproc->ved, &byteproc->sd, - v4l2_dev, entity_name, + &dcmipp->v4l2_dev, entity_name, MEDIA_ENT_F_PROC_VIDEO_SCALER, ARRAY_SIZE(pads_flag), pads_flag, &dcmipp_byteproc_int_ops, @@ -600,7 +600,8 @@ dcmipp_byteproc_ent_init(struct device *dev, const char= *entity_name, return ERR_PTR(ret); } =20 - byteproc->dev =3D dev; + byteproc->ved.dcmipp =3D dcmipp; + byteproc->dev =3D dcmipp->dev; =20 return &byteproc->ved; } diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index fe5f97233f5e..e5c0eda8b18a 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -58,10 +58,36 @@ do { \ (fmt)->xfer_func =3D DCMIPP_XFER_FUNC_DEFAULT; \ } while (0) =20 +struct dcmipp_device { + /* The platform device */ + struct platform_device pdev; + struct device *dev; + + /* Hardware resources */ + void __iomem *regs; + struct clk *mclk; + struct clk *kclk; + + /* The pipeline configuration */ + const struct dcmipp_pipeline_config *pipe_cfg; + + /* The Associated media_device parent */ + struct media_device mdev; + + /* Internal v4l2 parent device*/ + struct v4l2_device v4l2_dev; + + /* Entities */ + struct dcmipp_ent_device **entity; + + struct v4l2_async_notifier notifier; +}; + /** * struct dcmipp_ent_device - core struct that represents a node in the to= pology * * @ent: the pointer to struct media_entity for the node + * @dcmipp: the pointer to the parent dcmipp_device * @pads: the list of pads of the node * @bus: struct v4l2_mbus_config_parallel describing input bus * @bus_type: type of input bus (parallel or BT656) @@ -84,6 +110,7 @@ do { \ */ struct dcmipp_ent_device { struct media_entity *ent; + struct dcmipp_device *dcmipp; struct media_pad *pads; =20 /* Parallel input device */ @@ -199,19 +226,15 @@ static inline void __reg_clear(struct device *dev, vo= id __iomem *base, u32 reg, } =20 /* DCMIPP subdev init / release entry points */ -struct dcmipp_ent_device *dcmipp_inp_ent_init(struct device *dev, - const char *entity_name, - struct v4l2_device *v4l2_dev, - void __iomem *regs); +struct dcmipp_ent_device *dcmipp_inp_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp); void dcmipp_inp_ent_release(struct dcmipp_ent_device *ved); struct dcmipp_ent_device * -dcmipp_byteproc_ent_init(struct device *dev, const char *entity_name, - struct v4l2_device *v4l2_dev, void __iomem *regs); +dcmipp_byteproc_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp); void dcmipp_byteproc_ent_release(struct dcmipp_ent_device *ved); -struct dcmipp_ent_device *dcmipp_bytecap_ent_init(struct device *dev, - const char *entity_name, - struct v4l2_device *v4l2_dev, - void __iomem *regs); +struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp); void dcmipp_bytecap_ent_release(struct dcmipp_ent_device *ved); =20 #endif diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index 49398d077764..dd784cfcaac8 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -33,31 +33,6 @@ .flags =3D link_flags, \ } =20 -struct dcmipp_device { - /* The platform device */ - struct platform_device pdev; - struct device *dev; - - /* Hardware resources */ - void __iomem *regs; - struct clk *mclk; - struct clk *kclk; - - /* The pipeline configuration */ - const struct dcmipp_pipeline_config *pipe_cfg; - - /* The Associated media_device parent */ - struct media_device mdev; - - /* Internal v4l2 parent device*/ - struct v4l2_device v4l2_dev; - - /* Entities */ - struct dcmipp_ent_device **entity; - - struct v4l2_async_notifier notifier; -}; - static inline struct dcmipp_device * notifier_to_dcmipp(struct v4l2_async_notifier *n) { @@ -68,8 +43,8 @@ notifier_to_dcmipp(struct v4l2_async_notifier *n) struct dcmipp_ent_config { const char *name; struct dcmipp_ent_device *(*init) - (struct device *dev, const char *entity_name, - struct v4l2_device *v4l2_dev, void __iomem *regs); + (const char *entity_name, + struct dcmipp_device *dcmipp); void (*release)(struct dcmipp_ent_device *ved); }; =20 @@ -221,9 +196,7 @@ static int dcmipp_create_subdevs(struct dcmipp_device *= dcmipp) =20 dev_dbg(dcmipp->dev, "add subdev %s\n", name); dcmipp->entity[i] =3D - dcmipp->pipe_cfg->ents[i].init(dcmipp->dev, name, - &dcmipp->v4l2_dev, - dcmipp->regs); + dcmipp->pipe_cfg->ents[i].init(name, dcmipp); if (IS_ERR(dcmipp->entity[i])) { dev_err(dcmipp->dev, "failed to init subdev %s\n", name); diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c b/= drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c index c4bc76909b1c..597f88ac7915 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c @@ -515,15 +515,14 @@ void dcmipp_inp_ent_release(struct dcmipp_ent_device = *ved) dcmipp_ent_sd_unregister(ved, &inp->sd); } =20 -struct dcmipp_ent_device *dcmipp_inp_ent_init(struct device *dev, - const char *entity_name, - struct v4l2_device *v4l2_dev, - void __iomem *regs) +struct dcmipp_ent_device *dcmipp_inp_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp) { struct dcmipp_inp_device *inp; const unsigned long pads_flag[] =3D { MEDIA_PAD_FL_SINK, MEDIA_PAD_FL_SOURCE, }; + struct device *dev =3D dcmipp->dev; int ret; =20 /* Allocate the inp struct */ @@ -531,10 +530,10 @@ struct dcmipp_ent_device *dcmipp_inp_ent_init(struct = device *dev, if (!inp) return ERR_PTR(-ENOMEM); =20 - inp->regs =3D regs; + inp->regs =3D dcmipp->regs; =20 /* Initialize ved and sd */ - ret =3D dcmipp_ent_sd_register(&inp->ved, &inp->sd, v4l2_dev, + ret =3D dcmipp_ent_sd_register(&inp->ved, &inp->sd, &dcmipp->v4l2_dev, entity_name, MEDIA_ENT_F_VID_IF_BRIDGE, ARRAY_SIZE(pads_flag), pads_flag, &dcmipp_inp_int_ops, &dcmipp_inp_ops, @@ -543,6 +542,7 @@ struct dcmipp_ent_device *dcmipp_inp_ent_init(struct de= vice *dev, kfree(inp); return ERR_PTR(ret); } + inp->ved.dcmipp =3D dcmipp; =20 inp->dev =3D dev; =20 --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49455369986; Mon, 2 Feb 2026 13:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; cv=fail; b=O61cWKdka6o5H4sYGiYlEH/aHCDkg2PMu4mpVVPzWlrF3I0yOWWzMliMCjr286B19iNF4rMTRAWfXRUvniE4p2HWSIWLXX3mq/Pv0ROHwnqpVMzNvVGg17NWiQ+XpG5BtCkZr/ay3uDx8WDs/tBeWxKJxASkW2pOWnrRqcSQKeM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; c=relaxed/simple; bh=0icHvEK+iEppPVHfRo8CqP4sXr3rceFwGDsgLb10cjs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=oxwgHgXDLvoCGr1iaS38jcowZrTq6SWI+DaCuDwg44xZ+lHr8zHlDl5akfeqdQ3h4NUtZB4yqUQRZAJW5Ic2TDKuWIKojuubjPx3InWOCvSQ1yuBQBCX2D/CYMdarFOImg4yHsIMIQsyRdjOnnjmTHF0eKbcYpAKvyjeEnt7s4k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=Sjr+U6tx; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="Sjr+U6tx" Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DtJhi2923368; Mon, 2 Feb 2026 14:57:49 +0100 Received: from gvxpr05cu001.outbound.protection.outlook.com (mail-swedencentralazon11013007.outbound.protection.outlook.com [52.101.83.7]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1apvx2n5-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:49 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R/iszpNxgy2bXO+aJQuhgCfRLwaY8bTBUdCR1aLKsumlq24iuFjMBx3wXoX8SmxbOXEAa6Bzvoq0ty+qxv4/3Iy6oNtKGAZp8Kky/Fg0Hork2tS9ugIdTHeRxGlxnpToaqZfew7c4O/rU0nGfM3fFrl63YsTcjzee2Pp9oYAqnu9ynZpqDZQ0NfASbhWgkcP5dbQvNxy9RaACGR9cqe7EZwuLD3BMmAAcNmHe7RoIgnNYOEf0QhNhXgxb0FSlFD+gW8PWKM54jRalrC7/1dqOrXm/sGmDRguAShTBVoUbhP/2wB6NMTh01M8I2gVaoyC9yKHuydqQeBkogomtnV/RA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Bgr1Nll5shg0N2vXrkopM9HLp/0rgysfX/9IP4Qq0m8=; b=w62e4NSQ51qvNEVK+CcCLuEMJOVpxr/YO83wNSF+9cVSHxKl02zBap1KLm8Lyfouv7ivN1mrLnYMsCSmgXPYxjAw3Txuus/Im9D6wKpPf1ISXrXR8GWUpB2tc5YjSP0eR1zUhBH1SwCxsAkFpcGhewURfRDTzAxzUsMkfTkaKuEJep0vc4UBASNrZjhpFwgKMnqwjQMevtX+zYXehDDYTpRoOeHuDqsAqMmHyJoo8pckCiCsjhYA00psWqkGBwqi5jixOAvP68o9CTRNnJs4zpmOK8yTaekWX+7i/xdnO8uWxcluwACp28M7LrmjDrS9b5Kz2jMv7TOCAf6yEce9YA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Bgr1Nll5shg0N2vXrkopM9HLp/0rgysfX/9IP4Qq0m8=; b=Sjr+U6tx0573s0ETDUfmoITMcMj0nbuJ5sjnyLXV3Lq61gPO28SmZRGTj1EYGw9eUsxpcUMthCJKKKh+PzYcsewGOwUHs+ZdUryKyaxQB+AZsaU0lA7/ad6uVcguTOVsULG3gbY6Cu91sJQDVxDaTDSQXbMnW5Ex9//fRLbgDlcx82ErDx/Q3IieewBzggwsxy6VMgvVH730HIFC35Bhuqg7RcpTZAXAmMW2H1T90rs9lObuVafm3A19BxO+pnRP6SGH5E7dj7OGQVQb+cPzKrrDGfLwjhJp+a9Jq+KVSAubevkJvRU3ED3A5gudo5kSnvLo+U8Linm5db1l5xfp5g== Received: from AS4P251CA0003.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:5d2::9) by DB9PR10MB5211.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:33f::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:44 +0000 Received: from AM2PEPF0001C714.eurprd05.prod.outlook.com (2603:10a6:20b:5d2:cafe::44) by AS4P251CA0003.outlook.office365.com (2603:10a6:20b:5d2::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:44 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C714.mail.protection.outlook.com (10.167.16.184) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:44 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:21 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:42 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:27 +0100 Subject: [PATCH 02/13] media: stm32: dcmipp: make dcmipp_state & cmsr2 read common Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-2-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C714:EE_|DB9PR10MB5211:EE_ X-MS-Office365-Filtering-Correlation-Id: 24c2b2a6-5b3b-40c6-e580-08de62630a5d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cllZVkprTWdlWlVwOHFhMXQ0aTNBaUdVb296dTJ1SWJyR2VVTzZzS0tmZXVU?= =?utf-8?B?L2lNVDcrYXFJRGVZcS9kck9wWW9mUEJoL0c5RUJEbHpybTVPblVtT1VkTkh5?= =?utf-8?B?RFREZ0pycmIrdGN2eExvRjl6ZjNsbEVDc0JXS3FPNzJkS3lseGpaYUlLQTNs?= =?utf-8?B?dnp4NjYwL2t2ZFgvclc0cXNWTTd6OTVIRHY3dmEwQTMzdjVrbTJ2Qy9taDJ2?= =?utf-8?B?elpjSGduTGZjRUV0NmJYY3ROcE5EVVFRS0FWODErWXZBeTFub1RnSHdLNjZ4?= =?utf-8?B?TkdJeDFhbndZaEJ5dWFmUk9Kb0cxWVZxTVBQWUYzdU03NlY3R2c4UCsvMmhI?= =?utf-8?B?cFhjbUFheWpWYk5vV1FhRW5hZmpRUTRHRXRFSExlK2twYjVIcW1vYmpVSEFh?= =?utf-8?B?clZGc1JiNSs3Y0pGS3EvejNvU0cvU0FzVmJIOUZqckJ5SDdob2ZHVGgwYzJK?= =?utf-8?B?bXB6U2FJNm1qVnZuT3NUSllFbFQyeW1FTmRvaVpEVXF5YlA0ZVozY3dzYTRP?= =?utf-8?B?emN5SGVDRG9aWUNmcVA5TlE5NTg1WmFpVE05OTdQcUd5Zkh5ODY4b2txVTBV?= =?utf-8?B?RkdYNVI4MnNGTE5URWVHNkYrQzgwU0NaN3g3ZjhMVEFyaWFmdmhoT3J3VWtX?= =?utf-8?B?K2ZkMk5DMWVwTWQrNnZKREZlSC9jYkZXbEFvN05ybXVkbmNueHc3TmxaMVAw?= =?utf-8?B?U0t4NTZMaCtVYlVSbkRTcnY5ZUpvUUZBeXJJejdCWUtBdFdIN0t1dUhjMGhx?= =?utf-8?B?U2YvSmxZemN5RGx4anB0cDFaL0xYc20wYzUwTDFZSWpOVXFRQVVpUGxvMGw5?= =?utf-8?B?RDMxeXZ5TmREZ0xLdGxqYVdiZkEzMUl3TndMTXZ3NWFiR3ZmSmE0Y2ZzbENz?= =?utf-8?B?cmFnUGw4MEZlKy9MYVU0Z0JiQVVTTC9MYUlMdExTT3RFUW1FWXJCTnJJSXVu?= =?utf-8?B?cHJRSVBLckNQaEtFeVFkekhHS0wyMGZWbVgyN0ZNeDF5RTIzQnRMVkhRWlF3?= =?utf-8?B?MHJDYjFXTzBkamdzeXQvT3Y0MjRITzJaZzdJZFNKTkp1OTlBZDF1SllFcloy?= =?utf-8?B?eStsbkhpTGc3YVlBVFhlZzI4STBDMTI5djZPQTlNNThsYWdidS9aZjZlakUw?= =?utf-8?B?MllYWmFFVDVKYVBzb0FFZ3REaWRJa1lrVytOL29SeW90dHcwNTQyVjlxNHdo?= =?utf-8?B?OFd2bDNGVlpBajNnMkRIaGlzbE9zWVl4bzhpbGptYjdsb0E4Z295S2hEQ1pQ?= =?utf-8?B?bmxXQ2VUWkVnWURlZXM0Y3d3ZDBMcnVtTDN0K0xsUFhTMzZWM3dFdEtjVG8x?= =?utf-8?B?b3Z2MGhPMFZpZzZQQnlSMTRLRGpmcW4yYysrZFRLQnI3VmlIeXNIb2NTcFpC?= =?utf-8?B?NklhQWRoUElGbGpOaFVCRkhuU2NnOFNvbC95SzZQZnc5bFFjd1RjeEE5d2Zv?= =?utf-8?B?UEVCd3MybCtRalBEWXFKQUY1blhwZDVyKzJvQzFJaGVNWmNSSFdVak1SL3VC?= =?utf-8?B?ck1vVjE4akE2TlRSYkdtVEozRDg1cVplMCtENzZ5empjM3krNjhqMko5K0dT?= =?utf-8?B?cGVkR3hneXJvMkFlQmNkV21kM3hub2FrSWZ4V2ZWS1BFZVhpeEwxS2JBclFi?= =?utf-8?B?Sk55SFlWckhBUzRveVZ3N1hHWjlZR3d2NFhwYS9ZQXU5TjNqbWZLYUxhWFkx?= =?utf-8?B?TWNNekYxSG1HRUdmSWRER0JvaC9JdmkvZC9RaWhTKzBKWEp0b0ZwYUxIU2ZR?= =?utf-8?B?STVRMDN2aXBsOFZTT1gvR01DbkJRSGQ5REt3aTI2YnQzcnVwaEhSa2plMUVB?= =?utf-8?B?WUwxV3RvWXZJWUNnWlZzVnpOaVk3bGFSaEkxR3JKdFpOcVNicXlBcVZabkxZ?= =?utf-8?B?NXptVlZ4SlRhTENWZGRHQW95SE9BZGdBTnhRcVVjdHFsdmxKMENKNC9aVDA1?= =?utf-8?B?bXpnWXprRWF6UXJFS2ZFREEyMGx1aE9FVDJSS1FZWmtxMWYzc0NIZG45TDho?= =?utf-8?B?a2h3Q0FuMHV6VjBKS2VVY3BLVHVGZ1ZTODJDRVVJaElJb2NCd09JQVhPRmVU?= =?utf-8?B?LzRrSE02NU5rd29xUjc3alRBQnVWZnRscCs2dzRFSmJDMmNMSGZRY3YzWGtk?= =?utf-8?B?TmVoODg1YlJ6WjIwUnptMUZvWkJpak53L0hSbkRZdzE3ejk1SXFKR3dJU29T?= =?utf-8?B?aEdpVTcxb1RRTGlVOVlTM2V1dVRadlIvUld5ZnU2aEM0aTUwUWJxTlFIVDZy?= =?utf-8?B?YTFnUWxTNWpPMnhNTVVYOHhSRFB3PT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1IDbCZM6LSzHdZlX+gHqxqJPHNNKwhWB3B5JYc/MP0i63/XezP8UX2uPgOUWYM9XcRQW+61t69r/8YifIfW/E38bIPiukNVnwDK3aNr2MIijPWHS2IjDuZ9yPcHfHO0RChBj2gQymiMOdD20WsQ73fDsnuQAUdXjGgxeSshPT4uMYPOrw11rNNvZYmEIAuXtrRQ3KPqAywP1vMj0WWGESEQIP5RORmfzPvXN8eMQDaW0GRfUwjGRMk53nk5hEzMmGMsRUKp5iGzvGKpD+RwD/MjPELDqnzCiyUDvJLb8OPcc3HfxpbYG30uZV/Yj/pFgke3o081Ri4RHvbZXj5jbQADJX+Q5iJmOdjsqMgVTI6omTZ9h8k/lOdQ9kV0UKvibmlMoj8sU3a8zsJpXmCGIwhKlIq7M3t1XDmyV3C/5XXMBL5UO0aUUg/V/WxkPBU2W X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:44.7612 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 24c2b2a6-5b3b-40c6-e580-08de62630a5d X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C714.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5211 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX2qcSCDs64Bdp JTAGXkOJQ+uZSEXQ6mcQ0TVYXGz/AFbQanTsPtPE/SSsUr8FqpjVIZ7/C39WKLaDJ8FOop29COa X7uBqDre2yGIRUk2/rOidF3HJFOQ+6gqZVXJrLvziGoWxsfrKcr5U3RVMoxAvCRUlsIYF+xOCdg pb7Rshg/m9Ixa90Ph3xOgoV7EMgz+4TaxMhZukokef346jP2lgV025K1wna0roAkr1OC2dAtd1p uUfcKJ6pIBRErimMHP+ny/mjqk8IS2mQe5fRmyu9UJd62UDtmBaxvoU8TVBbHv7EjWR5zsLPj4+ yA7yyDBpLLP9FUT46/G7K+SDQenyXPHF75eQcXHK9xGPsFtcyJrPMhdpp+btYJ/11Z0f2LH7Hpn xF+M9z7HxjD0L3wq1Td9EvZFVJkPXQ/KL4FmfSWCM53K3vpS5D9WTUZIcg3AB+q+UpgP/v2Yjjx 6kHwQ79hPoAcxSAonDw== X-Authority-Analysis: v=2.4 cv=ILwPywvG c=1 sm=1 tr=0 ts=6980ad5d cx=c_pps a=ArpMZdbG1g2bWBlccyb4aA==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=JmcKTV5zoc3sEJBI8OQA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: 4mLW8kcmJNUJ87N1nUi65nILAKOuKFt_ X-Proofpoint-ORIG-GUID: 4mLW8kcmJNUJ87N1nUi65nILAKOuKFt_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 In preparation of the introduction of the pixel pipes capture devices, move struct dcmipp_state into common header and perform interrupt status register CMSR2 into the core interrupt handler and share the value with each subdevs. Signed-off-by: Alain Volmat --- drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 11 ++++---= ---- drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 7 +++++++ drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 7 +++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c index f4b962867dc2..1b7edf0d2938 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -110,12 +110,6 @@ struct dcmipp_buf { struct list_head list; }; =20 -enum dcmipp_state { - DCMIPP_STOPPED =3D 0, - DCMIPP_WAIT_FOR_BUFFER, - DCMIPP_RUNNING, -}; - struct dcmipp_bytecap_device { struct dcmipp_ent_device ved; struct video_device vdev; @@ -797,9 +791,12 @@ static irqreturn_t dcmipp_bytecap_irq_callback(int irq= , void *arg) { struct dcmipp_bytecap_device *vcap =3D container_of(arg, struct dcmipp_bytecap_device, ved); + struct dcmipp_ent_device *ved =3D arg; =20 /* Store interrupt status register */ - vcap->cmsr2 =3D reg_read(vcap, DCMIPP_CMSR2) & DCMIPP_CMIER_P0ALL; + vcap->cmsr2 =3D ved->cmsr2 & DCMIPP_CMIER_P0ALL; + if (!vcap->cmsr2) + return IRQ_HANDLED; vcap->count.it++; =20 /* Clear interrupt */ diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index e5c0eda8b18a..3c3996472e03 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -119,6 +119,13 @@ struct dcmipp_ent_device { irq_handler_t handler; irqreturn_t handler_ret; irq_handler_t thread_fn; + u32 cmsr2; +}; + +enum dcmipp_state { + DCMIPP_STOPPED =3D 0, + DCMIPP_WAIT_FOR_BUFFER, + DCMIPP_RUNNING, }; =20 /** diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index dd784cfcaac8..b06a4931ae95 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -33,6 +33,8 @@ .flags =3D link_flags, \ } =20 +#define DCMIPP_CMSR2 0x3f8 + static inline struct dcmipp_device * notifier_to_dcmipp(struct v4l2_async_notifier *n) { @@ -251,10 +253,15 @@ static irqreturn_t dcmipp_irq_callback(int irq, void = *arg) struct dcmipp_ent_device *ved; irqreturn_t ret =3D IRQ_HANDLED; unsigned int i; + u32 cmsr2; + + /* Centralized read of CMSR2 */ + cmsr2 =3D reg_read(dcmipp, DCMIPP_CMSR2); =20 /* Call irq handler of each entities of pipeline */ for (i =3D 0; i < dcmipp->pipe_cfg->num_ents; i++) { ved =3D dcmipp->entity[i]; + ved->cmsr2 =3D cmsr2; if (ved->handler) ved->handler_ret =3D ved->handler(irq, ved); else if (ved->thread_fn) --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F223369969; Mon, 2 Feb 2026 13:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=91.207.212.93 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; cv=fail; b=Ca1umi/qQSgNPTnfwDNLNXvNDlDglA4HAO4OExzWEUimfCQYUikrxbJn6cXOyIGpb6i7kHdI/xPDPa/lE82Axr0PaoWhybBd8830o9hXVJP3lbc5mjMC6xgkJBJdrnLNXLvP7XUirUZQDHu8nXwv0aSVOmy3he72sF0aKOtBO78= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; c=relaxed/simple; bh=7spgxgqOZhq+/Hs8WwGZXEeLKn0rbr1vRjKHdWbDF0E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=A/CTM4d7GXgyIo/kYLEp8GhIaWuSU3nHm+jrRzYSO2OhvRbH1cCP91VRy51o6+aG9ZzqR7BYmWvxjFFP/b6UudNleWprwud5cuvRyNcrajkWNQY9YIqbIz6pG9WjgNG0/MpnPCk7kndMxdA0TjgiYMkrEJSnJ+eG+xqImVDd3jw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=DKwviCAu; arc=fail smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="DKwviCAu" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DhivW3353509; Mon, 2 Feb 2026 14:57:49 +0100 Received: from duzpr83cu001.outbound.protection.outlook.com (mail-northeuropeazon11012032.outbound.protection.outlook.com [52.101.66.32]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1am0wten-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:49 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aXge0+1iwLfMhC32BWoTbIrcU1PVZhbKCJszIbk1brpLJkgMq37I9N+XVC31+4jYVGkPhGuzS0Mj+G+ybmPF3F1r/uXQzt8ekv3UUwTto2psnDTtXuH6pktLGEA5cZ5Mlw0NrlYhBtL2lnyqC3MYq6znwnwmBGZvw8ef8B+sQWpdBF+YCJxhI8Inh5LD04mibAYx+m0yAlPWnruwrTf23YaxXp+MejqgkqTFOBua5hGy4bT1XqMfxWo/qAjhN8HBD50bl9vndIFnJKxgtrEBdqotQCavHAXia2NjXyfs/9DrtjIqALZrHDtNwY8VSnkOwhxLBIRrBACEt+XksFlPCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rV2Vy44R47kEwtUuVJqd0Yij8unfHAg61KjqEYR0WGo=; b=lb858Bb2HNxWlq0vFjHhafsyiqEo1uHWNg65/znOu8RDKnfnB86AVTxtA+U6gnQ7gWp8i1Y9Sd7WxeReWqG2/lLoQRt8SK7ZuG44G2s4yYMPb2PWhfgUPmux6I1l9MkvxJ5DD7wdLkb0I7zSKqSEXcj2DtnEq5WTcEFFCWXNFBUqH9ArQRJ+rbRk+UFHhkj/jLBQtnz7dg6a9uIvDd2NhP8KVErwvPQ01Cq9iXWWIM03P80FEcm2pj/EtBvYa7IJcvAR73kG7pirH2WfgWRUhOWCP0Y6OXVhr4Zcwh7GCcn9at2ExWrCfmMnf5FsrkXDutVlKvqEMhAQBqDH77mcsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rV2Vy44R47kEwtUuVJqd0Yij8unfHAg61KjqEYR0WGo=; b=DKwviCAuos0/nOj7Kk+VgdcwFtW6r7NbdbVL4A5vFkMz91Sqaljw2NxBrHShfqtWz24DdbktUxGoKUIDmhRcIEH5jcniqC4mG8uONY6jRSHh2eyHmObIiDwLKQertIVhD18BVONVar9I4P2HEn5yG0Chjtp6YpeDygmyeXMtJBLzHeT76qJVibH5/fsckyeW3xJlwtHKHAcFR1rdWobmT2JOgVmXd3+Zh2wyZV9/D471q+erRCUduhLZmcj1OOHYj7WGEPH3mOuhoidVKx0LHZd/T0A63td+T1NY6Zyw64yUaXj7xawiBPDjAvsmWXiGxla1RFbN7YR8NSgO3u0dkQ== Received: from AS4PR10CA0009.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::12) by AS2PR10MB6448.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:55b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:44 +0000 Received: from AMS0EPF0000019A.eurprd05.prod.outlook.com (2603:10a6:20b:5dc:cafe::bb) by AS4PR10CA0009.outlook.office365.com (2603:10a6:20b:5dc::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:44 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019A.mail.protection.outlook.com (10.167.16.246) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:43 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:29 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:43 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:28 +0100 Subject: [PATCH 03/13] media: stm32: dcmipp: bytecap: protect CMIER register access Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-3-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019A:EE_|AS2PR10MB6448:EE_ X-MS-Office365-Filtering-Correlation-Id: f686271d-0b02-4fb8-1c5c-08de626309ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?K3YzWFlMcDJQNklhVUYvT2w3Z0MxSVFPdVVLVGFLbGgyUGI2ejZQSFplMkg0?= =?utf-8?B?MGxGcVhQTTczQUswOHFmcVpuaFRaVDB6UEhXVmlHcXFMa0YyRkFIb2pXSUhD?= =?utf-8?B?Nk9EZ3dsSDlTd0xxTGd3SWsvOGpxRmVySTM3b1hqS3d0OWo2bnh5SHRUUitU?= =?utf-8?B?anFyTjBNdUZBaHVzUThaN2Fnb21HK1JaZGtQK3IwWkVIVUc5cXVpU2RpUGEv?= =?utf-8?B?Yk1yUVU1N3FybEhpUUJaK3dpVzhZQ3pHOGNPRll6cG5McmhEbmU4MlJTSkxj?= =?utf-8?B?dDVQWVl0S0ZiRGdEdWZwRmg1M3VtVjFYak9DUTBUVlZxdWpXTzFqOHp5TnFV?= =?utf-8?B?NjYvVkNLSURabWZyZ1Bua0s0U0RZRHNsbDI1MFN5aWtmRituLzFDaU1GMTZ6?= =?utf-8?B?STZoVlhOczNiM2VhQUZMdlZzenlVUGo2MDdzcGg1bmhxQXlxRldMTnNqKzdq?= =?utf-8?B?TmVIYm5XaSs2ZnB1NDlkNHhhRGV1TFc4Wk1LQ1FOM1ZrQjZndUNQK3dLaWt4?= =?utf-8?B?RUEzZjFtcWFUWE1WRTdRRzBHQ2FYdit3c2RhODN2WWVhNGpmNE45d1F1UW80?= =?utf-8?B?aERwOXNuc1NmSWlkMW1rTlBTSlFNZTYxSGoySzBXY3pIYUxNR08xMnNJZmgz?= =?utf-8?B?ckJ6L2l5SDNVakFhL1I5MjNsRlhKbWlvcjkvL0ZPSWQ4MGd0c3JLY1cxVmlS?= =?utf-8?B?R1BxaWlKL3JTYnhSa2p1REU5WW9HcXRBRjFTRTRoZmpQM2M2K1FFRkJoTVBN?= =?utf-8?B?U1g4c2xITDBZRWlhN0N0ZEI5VzdFQzg3MVQ1L3dzZjBEN0gvK0ZOK2RGSkw4?= =?utf-8?B?R0JaMklJd3lvT0RoK3dxSVRmL0dKWVBITDhQZXZMa2xjc2l2V010elh0VTZE?= =?utf-8?B?TEgrK0pJLzhwaEdSYnN5UFFPM29LL0J0S2pYSUxiUHpxWVI4aGpaN2VjUW1a?= =?utf-8?B?VmJWNGhoSWplbm1yTnFOUnRuZFJrSnRReWRzRFZDOVg3QWRzUUJRcENiamJ4?= =?utf-8?B?a2NES045bHkrUk5ZcmN0TmZnaGtKMjR1dGNKS0ZTbVN2ZVhkRTBIeWpQRmtn?= =?utf-8?B?WDFNY2VjWDZwNFB3Q3pObkJ5eUJMOHI0aS81d2RmU1FZSDFVWStVUC9QVjZz?= =?utf-8?B?RHBYRS8vWWNpV1hxRmM2OXMxc25JbEo4S0lmSDFBOSttV0RtWTVMT0d5RWRk?= =?utf-8?B?bkxqZ2FKSjFYTzl5clZzSGIxTTBQVDRDcDBIZGdrYmZ0dlJta3lQZ1MyOTZn?= =?utf-8?B?WlNhbDVHeHdSOUNUbU9MZUdrYS9yR1ZzZ0FQK0RFZ3NYVG9nSGdkY3FNbk5z?= =?utf-8?B?dUtJNDBwK2tHejlZNlRPdTI1VU9tUFZXR250YnkxVCtTZjdIWDZVeUdmY3ZM?= =?utf-8?B?NXpoaWhzNlJBU2tRODZRNURoL0R6N3NrZWFPMnhOQ3dZNWVjazlhTTVGei8z?= =?utf-8?B?bjY2RDZwVWx5SHpudlZBM0FvWndjZzJQZ1M3QjlET2hISmN0bmJhcVhQMGlL?= =?utf-8?B?aG5odnpEK2gzeERkNFp0YytTL3JkRngxeEVWcUVDeU4ycFZtQmtSUlJwNTgw?= =?utf-8?B?MWhvNXFwd1M5TTJFUzF4cndZQzV2OW9XdWRIZU1kM3JkVytyQUVBeFRtM1N1?= =?utf-8?B?NVFoQUZsSUo5eVhTYldwMnY0MmdJd09NSGhxeTdwV1YxKzdGVWNhWHBGZnpF?= =?utf-8?B?dVFDOVJHMkw1VjBKY1pYdlRYUFdYNHRSZXZqVDRkbkprTDlsZnhISjRKUWpP?= =?utf-8?B?ZE1YcWc3WGVWYjRJc2dIc2IvaENJaUU4NDZ3ZUdNRXZ0Qjl4c1hJa2lZZmo3?= =?utf-8?B?VkpiZUd4Q1VDQnZGY2owajQxblZXbnZWeC94Y1ZtanBDa2hhbFZkdDJ4d29s?= =?utf-8?B?T0FNVW1GT01kKzUrbW5TOXYvSS9rUHpHbVBqSjYwRUhMSEJSQllmWlJiTFNr?= =?utf-8?B?bTdPVVpNcGtta2JRd1FtSzhNaERxMTJRbUFrYlJnRjFjRlBsT0hiMzJaR21p?= =?utf-8?B?ZmZFWWNNSXpaa0QxYTJEZGhtUnMydUhRcG1OeGRZLzNjdHUxYWVRcmRWcm1m?= =?utf-8?B?T3BTNExIYTJldUI0S3BFT2pValQ0TCs0Tll6SGU3ZVRjeGNqazN5cERlYm54?= =?utf-8?B?RUVxc1kwdmY0Z3FyaTlUZG9QRCsxakl6YUJkYjJHd1ZRbmhQZWx2UVZ0Q0sz?= =?utf-8?B?TW8xMzV3dDRtZFhWVlMxTVhLeHdqS1dzOVhCZEg4NXhKUmNkU1pvNEJJeXBW?= =?utf-8?B?YWdHd2VTekZZNXBYOG5wT1c3TytBPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HUTr5dnD5GlQeOVN7MijEqV90zAg0h+tm/OmTicRv7If9XbvGbrqLi7gLRUrT1lr26iXQ4y/DN1nP2uZmMfDkIks0eI9FrMNPBHBABdpGaxtuSuDxL3Ie9d4itSmZsw9Z4et/V3NFbn7WKKZ1kZtATKKKmHX5u5s1rGPJmQNFU3zqJqmDhovWdEd0E42VOHisBncu+DMdk87I3pYFFFHgFXAvpnLUuT0UM35MkaIXHr4D+ZcQ8DDpkd8ulOLuqMqWSCG8PpLazr5SfwzTKB6iebmKXZyT6URbZDA1g7ERTso5+F1grpQcVUdJyHQRsv+Nv6yQdcsjd4HkOSKc4pKEvtR2mgUJ2qcyKBL/5FC8admMQsV1MWkCjzXiXxbEs0D6WSbdleHALGDjmaaltRBz+8P79f67k2tXVhKozSbssxkAGseGXPGIHsI/SBLeyPX X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:43.9986 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f686271d-0b02-4fb8-1c5c-08de626309ea X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019A.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR10MB6448 X-Authority-Analysis: v=2.4 cv=CKsnnBrD c=1 sm=1 tr=0 ts=6980ad5d cx=c_pps a=Rrpy6ZZndnJsE5qr2ew1qg==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=JcXk92-dJu8NvfVU0rkA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: CCsisQnmGDZjItq-XKQJ0eVFYRikhuf4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX406oSf2QMGA3 V/Lqv3EBfOLBBUFvQITnGdXdlb6JAmhtX95J1nmIQ+/PyjX4HO4LOxOx5sHVYynSM616+HItcH+ OW/zU883DssSjoyt3XD8TrducIOiFvDNfNFMGvLFpySXWgabWI46PcAwRCkoP/r0F3SlyW05B0K YyTjgrmNu6FD1J+qIKat57clFRYAD2BjMrFYzD63HdWHn2KY8falDyB1xR7dLxdKib1NWmbiSYH vpxh8auVOA2kzqGtftX6cF/8cR7HHGhaJbCktvtJ1iFodeUpUpwLOWovCPs7v4BEWq+luAzjQ19 PZXumtX95YrC4vgmo/sJ0rSapVHhZRY2bzbeJVCqaV2bXQtL4vpJKNZtuSb9ESkllTHhBjzLeS8 2WTjnQbH+LUukcZbX48UM2veJUU2SmbygqKQV+WFBp1DGXwo77sioWAs0rXPL+C9PzpEtEXqS9R MDBRkI9x0L0eXfmGSRg== X-Proofpoint-ORIG-GUID: CCsisQnmGDZjItq-XKQJ0eVFYRikhuf4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 CMIER register is common between all pipes and thus needs to be protected from concurrent access. The struct v4l2_device structure, unique to the whole driver embeds a spin_lock which can also be used by the driver itself as explained in its description. Rely on this spin_lock to protect from concurrent access to the CMIER register. Signed-off-by: Alain Volmat --- drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c index 1b7edf0d2938..0b1d1fbda5d6 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -436,7 +436,9 @@ static int dcmipp_bytecap_start_streaming(struct vb2_qu= eue *vq, dcmipp_start_capture(vcap, vcap->next); =20 /* Enable interruptions */ + spin_lock(&vcap->vdev.v4l2_dev->lock); reg_set(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL); + spin_unlock(&vcap->vdev.v4l2_dev->lock); =20 vcap->state =3D DCMIPP_RUNNING; =20 @@ -492,7 +494,9 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_qu= eue *vq) media_pipeline_stop(vcap->vdev.entity.pads); =20 /* Disable interruptions */ + spin_lock(&vcap->vdev.v4l2_dev->lock); reg_clear(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL); + spin_unlock(&vcap->vdev.v4l2_dev->lock); =20 /* Stop capture */ reg_clear(vcap, DCMIPP_P0FCTCR, DCMIPP_P0FCTCR_CPTREQ); --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F2AB369980; Mon, 2 Feb 2026 13:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=91.207.212.93 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; cv=fail; b=ZHzbjZrMjP5UUEHw4y3CF+SaiadvveOq8NlHg7YO+1yHC2QFsyG7MUzjg8nIAinT9sH593tNw7nrZ9Sw7+WYpBp0Zm8kpQamztGhNCLnEBz0BlBxCOL1lhlB/qnSX8s4v3cNRT6d0J9Nhy6FM1zWkMIcDIaL5eL2lH5A0dPb1tU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; c=relaxed/simple; bh=NlB7CizbBk8Pz646SC6Tu9ePNHWKqBZeU04eqR/w5as=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=mMLLjddTK68bcVIQs2Xkv7L9ZDwNqJUjtgaJX7RSSJOx3vK0PrDBuY3rX70Eeuvr+FdF1FvSnWxni/DJqAu0bcn01Jba0TM7jbIlRIDFXPdI63722SvYDTPifS5wogvFNZFhOvmY8G0pebOOFPQz//cEwr6Pwj9sHwdcKrzA9wI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=OQHJrMpl; arc=fail smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="OQHJrMpl" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612Dp8fa3367949; Mon, 2 Feb 2026 14:57:48 +0100 Received: from am0pr02cu008.outbound.protection.outlook.com (mail-westeuropeazon11013045.outbound.protection.outlook.com [52.101.72.45]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1am0wtek-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:47 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gWizvc2eFbnurq2Q64MTk1Jj9YjCTJ459SuiyAjCeuRg1rQ/J/KtUbV30GJsh6xOZ4V3C37J+lshJ+ydDqEexnb0vboo8CxtHu8Ah5xCxGPc6SD3TMJApfEF0EkxV+U/Cgo9m2K5j36LMhDwAhbMhfo7FCHLd0Ww+JwMt8/xk844Qgo5JZRJ6k5GGXqQOXiwLTp69xbHRhAoMgyCaV8ER11SZDIYacKO61A62T5z4Vpw+ACe4W+KYp2SmZ1Z1vo6XRC8eT94Va3dAlNqaW4EJDpPf+NOpPYQXnVZaZK1WI8aNzz2ydw1IxxK4LBwQ/gVluWGUgMPyI1S0B1WqZIL/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ke0Z6gN2p1U6z13deHm5Qa2EFMU7inFeggOge+Oly28=; b=roDMqlax/9iMk5INVLWW96w7KYrK7euejPDiKw8fvKF8P4iUhkQTob45V86tbM1NAerVHIP+2MIERrL192uOykQLtw4KQnTADO9JT8eZ+ofw0Adoj9i3uMiTMjrqt3BBffNysFKlRpwEsLzDw7JlEsXgB/ATmknGJBbNVRITGpmAkTf7cXFhG41hTfyp69dEAfjoUdnWpuy6Zv58GKPFFcZJi7SDSv+bBtr4ugajZ6WVBKW1XqjMWG65VWWVPn+wI0DAISc8IvKW+cI1KOK3Hwr59Jhj8u4WJvLc4b1uED2yT6xqxQEhKyfxHmvolfygBK9oe1gcS/FJqyct1WNepw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ke0Z6gN2p1U6z13deHm5Qa2EFMU7inFeggOge+Oly28=; b=OQHJrMplJ27g77Ghtwz4bEpy/rTcFztF3OheGmkun9UfaMrlPCZwNu2hx4NEd20JHSPZnm77y4rWBbxKwVpHknVj0L8AqQCrLhZU14Y7d9yBouPX9BeGvy2n1UfZBFf/hVFM5VwMTuFgNOkhYd7mRJOmDzcYEAvUyzlWV+ToEYvvsP7OuLgQI/vKoEbwY5/160G6E598baBMMYfrt1wSvF4PLZowMx9xuoHGx35v1ErPwA5s/NLGkhQnKw7fFMHSrCdcnXN7fAFN2OpfsdtSn458ynpmD25vzFEU6Obk4WGs9XcnomZFpLElyMYXOX9Gcz7F6uVVvyycdecU7K0l3A== Received: from AS4P251CA0012.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:5d2::13) by AM9PR10MB4071.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:1f0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:45 +0000 Received: from AM2PEPF0001C714.eurprd05.prod.outlook.com (2603:10a6:20b:5d2:cafe::61) by AS4P251CA0012.outlook.office365.com (2603:10a6:20b:5d2::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:45 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C714.mail.protection.outlook.com (10.167.16.184) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:45 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:23 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:44 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:29 +0100 Subject: [PATCH 04/13] media: stm32: dcmipp: move common structures in dcmipp-common.h Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-4-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C714:EE_|AM9PR10MB4071:EE_ X-MS-Office365-Filtering-Correlation-Id: cf4e87ee-ab7c-4b75-ee51-08de62630a96 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SXByTURzUmhqOFU1ZzViaGkrTGVLeldJUkNQTHduN2ZKdVVQSktqb2ZkN0R5?= =?utf-8?B?WHZRQWI3ZWI1WlYySDBxeEdJb1N2ZlJDU1ZFV0RlZytRTHRKaFJwcmxHcWNP?= =?utf-8?B?enVCR1ZieTY0M0taUnU2SDduNFhZNXdlVGluWitqMHFWaWoyNXJCb2hQVmxq?= =?utf-8?B?c1Vpa1dMcW94SUVXd3UwS3hBajZuWHZjV2pzUXpSOEdRaG1QMmUvSGxZUzh1?= =?utf-8?B?ejY0MEpDSFpxcC94SGNKTElubGU2WjM5QWFwMlBaZG83QzdtT2tyaERxa2pJ?= =?utf-8?B?MTVadndSdC9DazA3NExWZ0FDcDFZNGN2enJVVmViTnRPVk9hbHBnOHFseDFv?= =?utf-8?B?d3BhZ29iL0xsVjlqVCtDWnBoTlZVa1g4MHE0TDQzV0Z4dmUwYkdQbkZMa01W?= =?utf-8?B?MnNYN1JqNnB4V1RVemFWMW9KZi93TytndldmVVp3elZHWnczbW1FQ0pBRFFZ?= =?utf-8?B?MEVzOFFId3RUS3ZpMkN0L2UvQXhVUFpzUWQzOVFjaUFBeEhUSVk2dVlkYUZy?= =?utf-8?B?ZHhsbUxVOGpGWnNaZzczRCtUWFdnSm1nd0d2Q2dIZDNCQ2QycFRjOW8zMS8r?= =?utf-8?B?cXNsTHJhNXBRbDNZLzNvWnBieG1CakI2QVBrN0NWWVYxMVVrRDFHRko1V3NE?= =?utf-8?B?RHRzWUZxdWFkblZGdzVNalNHQmlIT3EyYkNNOWpEUEJXU3NVS1BPZkRmcVVs?= =?utf-8?B?U2lkYmowUnpqMThMeitpRHUzTDh5c2tsUWc5L2VudmdBb0xZK1NHZnZuZEZF?= =?utf-8?B?UFlSRzU0VHlpK0k5d3lmSEw5VE0zK0N6dy9QMlEwTnlvK205N1ZORWFiSjF6?= =?utf-8?B?alJpTG5NVkxVQ1JLUWVXVHNvaTErZWQ2Q3ZESkJPbHZhOVBGL2gzQ3hkaEVr?= =?utf-8?B?c3BqcjBIRExpZFNINFBhcUlUenJJd0Jxb1BmSzEvTHFFeWMwOFRvZnFjdVla?= =?utf-8?B?bUFENTJwdVlLZFpoWFhGajUvdEtvaU9NaEg0SjZacy9lR29EYzMyUkRPa0NF?= =?utf-8?B?MGxNcUNvcjN1bjhqekNDQ1NWNjdFL2w0ajVaVGtmaWxWdG1acitLelpKQUUx?= =?utf-8?B?OXpCT0ZBYlJaVTRQeHBpdE5zSUpHajBtNHdEYW9NdjdpczhwNHovVzVEMDJI?= =?utf-8?B?amZaOGUzTGFXakZLQ2pYSGw1OFdUVlpwRXMycUlIejZiSnNldHlWVGZkbmln?= =?utf-8?B?ZVJla083M2lFek5HazJCYnJDOGV2MS9pQmUvV01UY1FLYzJGRVRNUFI0UnV6?= =?utf-8?B?U2J5alRhbXVDMEJocXJuaWVWQlp5ekI5dkc3b0tHVWttMi93ZGxtWUtNNlVM?= =?utf-8?B?UFplVkdMMlBPSHM0RjltS1ZZYjljQ2RQZGNvWDN1djZaWE9YWVRzbUlHd0ow?= =?utf-8?B?OGU3UFNBRFIxczM1bjZiU2t5aDNaNTkwOHpsalN6UjVQamZHZk5RWlJrU0x0?= =?utf-8?B?WVZRTXl5WCtQTCtxWENTNzRQdzNzOXZBTkFqUGtFQzEwcDJZMjJkY1hNZjNu?= =?utf-8?B?RldmeTZyRS94S2I4azFueExTSW50dHQrUUo2bGx6R1V2SlR2TDRhb2dQdmtI?= =?utf-8?B?Nm5wYjA3ZnZpVDE0aklYbzB5RjdVSzZtdVBXbnhPbnQ3UnExVWVZbjlwMXNM?= =?utf-8?B?RkVUMDU1eGRXd2ZpelhXMXVobDV3RkVSUUFUbmEzREk1TDEwZ1lyNkc0WDli?= =?utf-8?B?R0M3UDhCMDhlbmQ1aHp3WmtOUWkxdWlIUGxTdEdZdzJ5V0JGa0dIclY2NitP?= =?utf-8?B?MFQxbFNZNGJqem5ZRFlzdGE0YyszbVNOd3dJWHZCNmRXUzliRHA2clp2Nzh2?= =?utf-8?B?T3JWZ3ArbUtPSCt3Vy9rbDBoNnVTSUs2OFg3UlpwV2lGaW9td250aEZPR1VN?= =?utf-8?B?VXM2Tmd2c01yNFFoZmVKbklNSEhNMDVYU0M2RFFCMEZEaFBEQ1R4aERmY21l?= =?utf-8?B?L0VVazdUT3NjUTIwOC9wMkdPa3lPWEJSWlNjOFNvUmFROC9nV2xCRm95Z3Rz?= =?utf-8?B?WFRZcVFpZFNramkxRHlmY05NakhOdE9TaUEvQWR2OEt6bjk1cGc2VTVnRUJL?= =?utf-8?B?ZW1NbTJhOWJUd1dGRDFQOHFNYkp4SDBUc3lXK1VEVGZxNFNDTzliSE5taUlK?= =?utf-8?B?cEttMEZSWlhqVGQ1eWRHcjhNcysyakU3N0J6Y3JXWHFqcDcxOW5telJYZ2Zh?= =?utf-8?B?dnpKd0hlQjV0eUpVcVZnbHcwVjJLMk54b09lRFBubFFGdDN2V3haK05kSW8r?= =?utf-8?B?OUZvaWplYkJBWkloU1dzVE1iaklnPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ckDowT84P7hnKqoFOoaVOXWck65V+avOjjEz1Mrm8mzYrFzY74WeZFFai1GdRU/EppE4dICOs0OvO5hki5iGGl1VRG0AK+PUAzEvkzoQczGqCBGUuZfTKNtE44n2FCwDtOwiR43zCBPn4SQ3GpP8cou1LpMeSIvPypjdDL+t2NLne8c6Pim9IMbNHLJ4jKGG4n3ktAVWvL8LwQe4IInucAWp0CUqPKmZXnkL2X0qNitPZHYQ4C0UQF6iphYZkHPOXrcg88tHI1ijvu7pM7LFSz224i217DneBf1FKMd9T3kB9zXn/+3XWG44Z3CnTRxM9x1hBXYstZ6n9zx2oCeAsBYGoxBpLMKaPvGqTz4QDb/kT/UsylzYzSxBGB3rNE5HdzHZSqznCxwJBEG7jXhaFvtoYjLF+Efe0iDG77og6jinJpamw5JVS51vA3KXp90V X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:45.1248 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cf4e87ee-ab7c-4b75-ee51-08de62630a96 X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C714.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR10MB4071 X-Authority-Analysis: v=2.4 cv=CKsnnBrD c=1 sm=1 tr=0 ts=6980ad5b cx=c_pps a=sM9fEVjtJ5bIWaSlPGK/hA==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=6iphbjCEzYFCPznVI78A:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: GV5Xw5IjtDcKAu7ZKefyliLnPHBbRe3V X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX3zeMhgfXqwbf QGG2LBNfvPJnvMZmSvub2eR/ajX/zQuk+SuvVjhIp8xcTwZ2GkgcE9CSocQjNoBBIBOk4L5/B6t sQ6R3oRYO4Nm5+YxKPpWhZgeKMPfnzNNGMyBGHrOPFB4oJzi9kh5sQ8X9X39uOS/5kWk0IZlGnA V41ewo4h2RF44LzFKOY68Go0P33nmYGfk8wCyjX8sjZU+jySMtJkYs+31fxxQpaiOq+hEdC2Alf Rxbg5njshtkHYS7KOQ7Cn8hEgPLE0rvZo9UqS44xhnJPlJTIaB2fIzE8oxFvO+o+fwP8tniqvk7 dwK3xeI1HSpr3DvKBedi98pZmJYwJFMn7ks+3cbVju1VK0FwUtnq49EVh22UXJDUO+gBtLZCpOJ bgb3XSaT5lLyNWRVRBbu4xvQN+T9bNfJB976jcx7jXUMToR+bXilvzcvza7f271cYqyl3kPNkR5 XqI+bMbGz7JvA+RuWAw== X-Proofpoint-ORIG-GUID: GV5Xw5IjtDcKAu7ZKefyliLnPHBbRe3V X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 Move the structure dcmipp_pipeline_config into dcmipp-common.h so that all subdeves can have access to the information of capabilities. Signed-off-by: Alain Volmat --- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 37 ++++++++++++++++++= ++++ .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 37 ------------------= ---- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index 3c3996472e03..9e7b2434200a 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -83,6 +83,43 @@ struct dcmipp_device { struct v4l2_async_notifier notifier; }; =20 +#define DCMIPP_ENT_LINK(src, srcpad, sink, sinkpad, link_flags) { \ + .src_ent =3D src, \ + .src_pad =3D srcpad, \ + .sink_ent =3D sink, \ + .sink_pad =3D sinkpad, \ + .flags =3D link_flags, \ +} + +/* Structure which describes individual configuration for each entity */ +struct dcmipp_ent_config { + const char *name; + struct dcmipp_ent_device *(*init) + (const char *entity_name, + struct dcmipp_device *dcmipp); + void (*release)(struct dcmipp_ent_device *ved); +}; + +/* Structure which describes links between entities */ +struct dcmipp_ent_link { + unsigned int src_ent; + u16 src_pad; + unsigned int sink_ent; + u16 sink_pad; + u32 flags; +}; + +/* Structure which describes the whole topology */ +struct dcmipp_pipeline_config { + const struct dcmipp_ent_config *ents; + size_t num_ents; + const struct dcmipp_ent_link *links; + size_t num_links; + u32 hw_revision; + bool has_csi2; + bool needs_mclk; +}; + /** * struct dcmipp_ent_device - core struct that represents a node in the to= pology * diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index b06a4931ae95..3a0a4df410d8 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -25,14 +25,6 @@ =20 #define DCMIPP_MDEV_MODEL_NAME "DCMIPP MDEV" =20 -#define DCMIPP_ENT_LINK(src, srcpad, sink, sinkpad, link_flags) { \ - .src_ent =3D src, \ - .src_pad =3D srcpad, \ - .sink_ent =3D sink, \ - .sink_pad =3D sinkpad, \ - .flags =3D link_flags, \ -} - #define DCMIPP_CMSR2 0x3f8 =20 static inline struct dcmipp_device * @@ -41,35 +33,6 @@ notifier_to_dcmipp(struct v4l2_async_notifier *n) return container_of(n, struct dcmipp_device, notifier); } =20 -/* Structure which describes individual configuration for each entity */ -struct dcmipp_ent_config { - const char *name; - struct dcmipp_ent_device *(*init) - (const char *entity_name, - struct dcmipp_device *dcmipp); - void (*release)(struct dcmipp_ent_device *ved); -}; - -/* Structure which describes links between entities */ -struct dcmipp_ent_link { - unsigned int src_ent; - u16 src_pad; - unsigned int sink_ent; - u16 sink_pad; - u32 flags; -}; - -/* Structure which describes the whole topology */ -struct dcmipp_pipeline_config { - const struct dcmipp_ent_config *ents; - size_t num_ents; - const struct dcmipp_ent_link *links; - size_t num_links; - u32 hw_revision; - bool has_csi2; - bool needs_mclk; -}; - /* -----------------------------------------------------------------------= --- * Topology Configuration */ --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B783E36B064; Mon, 2 Feb 2026 13:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040696; cv=fail; b=QEo4IcS+frnTbz+qDMo9phAYfCTS8wiznmqh6lq4iA+CuPDJFsNvsMqus1H3rqndFjIcc6ccX2VW7uk4PLvQxD8ldKiZ5ZuV/oWcfubxR4P8FCiNx03hLleuYeHAVOoelGevLKcCHvtIfi9+wuJ1DMgJ1iqzmAQbf3+if+1f2RM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040696; c=relaxed/simple; bh=U4CSVex9TJZaLW8ttpUY5c6LjZd4Yw0crehh+qU572Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=KH4OTNUUiScPgq4jLHrH6yr87E8AKfOG2tFap/2qtr1fbiGHjUh8ZTfLT5aLYidbyRyHULvNS9tusK7Xq1t0bkWM5RXkrTcxqjvmF6O4wbVsXyrC+28XrouqgDHQq4TzAgLHoIT13PfpPyn60cDDKk/j1wOJAHPahrEl/l5rPwA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=l+M0RQ8o; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="l+M0RQ8o" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612Do0fK316341; Mon, 2 Feb 2026 14:57:55 +0100 Received: from am0pr02cu008.outbound.protection.outlook.com (mail-westeuropeazon11013039.outbound.protection.outlook.com [52.101.72.39]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1aq7p38c-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:55 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XaWWwg24L6G0pYF1HgaZvhoLtUPTAn3mIXeohyHk4fZJaUB+2ZOlR9mq3rajnOstQvdrYC+g4b3PGCbdAKHCyJJrU79vm8XdyybM4WnRHmxza/3ADepFmT9/Ljg46KkSP3ezkTkRKO0nPFEua2lD4+Z9QwHkMsMnk4vrOesZ1KGZF5csy3pXFcRb0j51Bwbuc0F3BdHzf+essy8rvD9SQL+HMnPNYauk/BipVTchc9uyezEqhAF9EpqvmvQJsrMBJFUZ9G6All804EWTpuodg4BYanykSgxXr6hp0kTqmCa/hOXgPcYv9uTn299PtR4DciJ6j/fiNl+6kwrdWJY25w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IM2r2rMmUwyyCGPiNMKypDWo8zrosA60E48s6fEK5kg=; b=ifqZgRVig5HMSR5XhE5vIhtF4QXit93uoICSuIJCEVCVpfY27E0mguzbVmiKIEy8ZZi6dBiCxnfYfGARmGzcreHvqv73WTHRaft3YFwEncflE3BX9tDYBNHKk6FSwqNjaOYHprVe5sHWy1edAJ+viu1nuBGITtdytxIIO3qwzSTF6ZHYD9F2ldEALDuZJIDfhyCS3xk4auTB6v9r0vw+obrjFeacfj6qRopFJu7ZJwbM0p1JsMzDfjaY4vb9kH383y3IhGfH6stWtVKOyKC/OP0ujk/1bHtg5KU/VfiSNbiTFUP8xkj/hdtbadCjnZifUVqM1Cik9D03+APYRT7q8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IM2r2rMmUwyyCGPiNMKypDWo8zrosA60E48s6fEK5kg=; b=l+M0RQ8o9vKsPAAsMk6+zFrskmgD5EqOhNhXTHrYL6g+42AG/VdUCGosljcn3z87VEoaNZQIYgHz9VBcXWMd902l7riBRDKb+sDTFELve2Tq8wbhDNSblqBJ1xTI1d32tn40I9yhEr9+XO8eZOffPIDEDsTI32LAxaHgaIEI9BXBK5ft+ZDG2mdD6iRMXLKBkKPP6TIm+cnwDX4/ruHe8LZO7DGWxRtC3gexaS4yDP3albD03KBcXfg1HHS+7ozpdWvp8rWVtkjqRJ8+dAXNLLJ/qAM7XapiGyNLiyGjcZLRxeZWsHlxeDeafp/8mYj1Ld2qYdVyhInYiXQp0XYvYw== Received: from AS4P195CA0031.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:65a::10) by PA2PR10MB8618.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:41b::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:46 +0000 Received: from AMS0EPF0000019C.eurprd05.prod.outlook.com (2603:10a6:20b:65a:cafe::ff) by AS4P195CA0031.outlook.office365.com (2603:10a6:20b:65a::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:41 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019C.mail.protection.outlook.com (10.167.16.248) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:46 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:31 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:45 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:30 +0100 Subject: [PATCH 05/13] media: stm32: dcmipp: correct swap in YUYV data with parallel input Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-5-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019C:EE_|PA2PR10MB8618:EE_ X-MS-Office365-Filtering-Correlation-Id: d04383d3-b097-4c75-9ac1-08de62630b24 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RTFCOVVBNms0ZlZLOS82OE82SEJKSTJYOEoyQzFJNVBQUlBLWE4rUzUvdXZY?= =?utf-8?B?QXdiTUhJekZheE9UYTQzbE83d2V6L01td1pJRzR6eXdzZTdDMUhmM01wcHNH?= =?utf-8?B?OGdsZDRPN1ZDRWd2MmJKZnFqd2g5NHB2TmlhQVNoWmx3UWwzRXVJTU5XYVZL?= =?utf-8?B?bjF5di82NjRtRVNyRTB0bmdhKzV5Zm5JNHc2TlZsMndQKzBCTkVSTmFPdHBi?= =?utf-8?B?UEg3UVh2NjR2MklXT09vcXZzSUlQZGxiSDFWU0YwUko5Yjd3ZGNhRmZYRE83?= =?utf-8?B?clJFaUZvdjBLcDZCYWtyVnVLK1FrcWlIcWRQK1dzRjEwanNtejkvSXlEK0h6?= =?utf-8?B?NFRKbkJlMTZ0Q3dHSXQ2SjMvaGcvMEsyaFVSbVV4YmY1eGZLait4Y1U1ckpm?= =?utf-8?B?cGllU2FKelpYK2x3UGFiQmtxSVR5WjhDamVSWmpuWVczcXJRN0dpOWlUUlJj?= =?utf-8?B?dEd5OVg5RGJBQnY2NEJTeTZLOERNUVAyWHdjSzlBR0FkZCtZZ0NHZXY0cU1n?= =?utf-8?B?RlNYc3VqUytpRlRhM2trU0puWFRHUHArWXpkZ1d4N0d2RWZSQVlocjB0TnF2?= =?utf-8?B?d1FUejdnR3VFL3ppNUFhNXo4Um5vL1RFcVphN1UrSVdMR1l4UFowWGgvY1dv?= =?utf-8?B?Y3RRcVQ2QUxvM3BvdStWemRHNTFIMXA5NmtoRzd1bEt5aWlkaU5NNW1RbGlx?= =?utf-8?B?ZGU3WW9LcGV1Z1V5a3BmN2krdmZyazdDTCtoQjhRZkp5b1dIVkRqMHI5eXNv?= =?utf-8?B?NjdCZE1rcnZPdGppZ2NzSnY0L3Jsbi9oUWUxR3Uzdm1uNTRDN0RjZDF0WVFB?= =?utf-8?B?a1lZYUlSZE9VajFhRnYydUZEQ2tFZDBRNzNhbHlURkw2aTRnZnhMZmxFMHFX?= =?utf-8?B?dzM4MkdvUlhUb2JsTEd6ZmFtRUUyYU5wMnI0MVRXVG13QUR2Qk9ETW5MVm9Z?= =?utf-8?B?bXZRYmtRZzIrRVloVXZyWHFhR1ptN1VnZURCb0hCUEJ6bVNPZlBnQ3crU29q?= =?utf-8?B?ZG43aTIyVG9NVFV0VXUzL1NqMHpuQ2dFRzV1K0RCc0F3VUhnQXZVWGFGUS9Q?= =?utf-8?B?SGdtVlBsRWZvOFBIK20rUTdUS1gyNURheDZyS1A5QUNrcXZkRXNFMEhDRGUr?= =?utf-8?B?VGJ5ZmZwdW5CL0U0dEpRZkg4eE9xTkx1L2JUZHBNNjJqTkZrSnh5NTdWdTcz?= =?utf-8?B?SlpyNVlUbmdrMGgyZzc0akhKSTdZNjVCYUlGSXZPay9FRmprTnJ5eDFITzNT?= =?utf-8?B?bjBzZ1lZVTVXT2IzQTNtQ3hWeC9Qc1dZNzQ0WWJDaTdkOXBYd1JsN3FNL3pi?= =?utf-8?B?YlR6K0IxT085TU5MUGtBSVIyNVNnVFJBaHVnbFdFQUYyTVNiS0dnQmlUVXVw?= =?utf-8?B?SE0yS0N6T2hySzNja0tQWk52YWFTMUtJeC9VQlZ5T0trZlVaYkpobEJyOFU0?= =?utf-8?B?U1orSWNza0ZxbE45U3B1MWRtR2Q1aldIcWhRVDRxWEwzcUk0T25vTnRDSUlr?= =?utf-8?B?TEtYRzM5aFQzMzJLMzI2ZDBqSFpoRTB4WHo4NHoySmZHNStRQTRQUTRLVk51?= =?utf-8?B?aWlxRjRKSTBKS0t6UmY4ME1IR1B0UW8wNmVEQmNnanRtc0xnQnZQSTlqeFFr?= =?utf-8?B?NkRsS1dVMDZkeW56cUpib2ZjYTFNaU9aRmQwSDNkZ1NSenJHdUNNNUZGL1R0?= =?utf-8?B?WUN4OU5rRmF6blJWakRtdVBKaDN4Z2x1UVJDaCtwRVdnMTZpTXNSM0tHSVFM?= =?utf-8?B?ejd0ZlRNUWRtbGx2blUzdkxiY0pZRjduRnJCNDl6NlFBVDB2OWFtekdxSUFZ?= =?utf-8?B?YkJXTEsrZ21PZkRTYXM2WmJQd055anY4WGFQMjBsVFNSbm9QTjJDL3RhVXVz?= =?utf-8?B?eHQ3TVREZDh4Y2pNd1owT1pvUTUrcnQwb0JGRFYyaUYyVUJ3eXBsMXkybk00?= =?utf-8?B?MWd2bC82ZmRRYTJBZVVlVjJRdmsvS1pxUXdzTG84SGFnWExFa0YxWmtxZlo5?= =?utf-8?B?VTZyME5wYWxKMG9vQTRGcGZ0cmxJSDFTYlJmQnZ0bmF6NlN6MFRhK1A4Y0tW?= =?utf-8?B?c2E4S0ZVd3o3R2VpLytZL01xWXBKcjEyOUN5ZkowR0ZPTVpxbmlwSllOMFIx?= =?utf-8?B?a2dvN1RGdGR5SzMvZ0hYUDMyUmtrdndzd09iVEpwRVB1TzFrYjJSaVF2ckZ0?= =?utf-8?B?MTFmdXBLSmhNTkx3UVhtZWw1bjB0NmFOQmVQRU8yU255NWhzOFR2M0tub2N6?= =?utf-8?B?U0dvVjVKZnhNYlAxaGxSL1FIcUN3PT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: U7iSylbVmBJcJ67R0ssXQL9xiAS5yDdACya4M6nDs8nANssbi8tbejKlL7jJiRHuV72UH7ufW8Y637MS3AFYAMhtL2GBxW+anYTN6mPSZWIvajNXbN/SCm9pyeY4emqEyboh0RqSqk3QzpANXO6nAHajnXjQWaiTfb0jPkSYRh6OKhXYRSkmxTpa1h6rruiODGW4qMxhwt1M1+nHoqeRwktGNm1QPuwZr+C/llwuyq3Zk1ge21vAHeke+J4QdiW5y8+O3bhIg4HHt3qnXEP3iATMk9kZ9qBmcT0K4+cOtrj2TuQbAh7b3FUBLjgVjKKITzCFUkDtXr/535fjLR73RQT25undRtilIWB1dXRbmymqLhjszmrzgMtQa18qTxhEIZdOVtD37hTYyyUjWw3IapqMEKmmQ8EZoJqjuwxxdAG9UYOToZV/h+THSQztMQRi X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:46.0558 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d04383d3-b097-4c75-9ac1-08de62630b24 X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019C.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR10MB8618 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX1swWy3LfZngq kRm+Evgjb5+2RwsiOiEE7P8jb4Du6QKxZ7kt08lZg+5YWvC2hQdBn/liYxeF94qL9Hy6ZHX7rkc 6iq2SzzGk+sg7FAwHQ4weFDxHhM8tOdAy7rCThAhjx5QXVDZ1gb1A6KbTNmVNrKK0JEFAXMZ2zy Q2FgMvQRoEfTl+lIfigzFJBNZFVz7yq7eF5df+rryhRsaUhFQuyXhipafCvUFGuPDpocOb3+K3m /DNpBk8hMuw3OBqECQ3zJVmqPwrAllFSt6IfoxjwnsOBf8xeVCU3Hgp99+tQm6KDD9LJpEL0YNb RrqAGq+wYfKRgTBa5mlQHn0j13fRCyCXTK304I8MOVUYWERw9W0U2h8IYzWGV5enlH3iQrIzPq5 Oi8yPzhK8GZxyOD7PGlFV/8zNe5pl4XL/obwIY293RumxyptpJC+KkDCMgWrwQgLBpnfu1gfr60 2bnw6EguZL18j2Z1z8A== X-Authority-Analysis: v=2.4 cv=LLBrgZW9 c=1 sm=1 tr=0 ts=6980ad63 cx=c_pps a=pv+iSUMxSX8tKyfHAWeKVg==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=r18cF4YDy6_3TW5T5aoA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: KXZvDY7SOfo4NHMh78s9yOgwOr-6OxD5 X-Proofpoint-ORIG-GUID: KXZvDY7SOfo4NHMh78s9yOgwOr-6OxD5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 When used with parallel input, the DCMIPP is expecting data to come in YUYV order (for all DUMP/MAIN and AUX pipes). Not doing so will lead to bad color generated by the pipes when processing is done. The DUMP pipe is also doing by default a swap since, while it accepts YUYV data, it will by default generate UYVY data. Current implementation is not correct for parallel input since it is performing a cycle swap on the input side and since the dump pipe is also internally doing a swap, the data captured from the dump pipe are correct, while the data captured from the main / aux pipes are not. To correct this, only perform cycle swap when it is necessary, hence changing from YUYV to UYVY for example, and for all parallel YUV MBUS, add the P0PPCR based SWAPYUV to put back the data into the ordering of the input. Keep previous behavior when the SWAPYUV is not available (such as stm32mp13). Signed-off-by: Alain Volmat --- .../st/stm32/stm32-dcmipp/dcmipp-byteproc.c | 16 ++++++++++++- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 1 + .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 3 ++- .../platform/st/stm32/stm32-dcmipp/dcmipp-input.c | 28 +++++++++++++++---= ---- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c= b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c index aa0561957b80..580896fe190c 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c @@ -25,6 +25,7 @@ #define DCMIPP_P0SCSZR_HSIZE_SHIFT 0 #define DCMIPP_P0SCSZR_VSIZE_SHIFT 16 #define DCMIPP_P0PPCR 0x5c0 +#define DCMIPP_P0PPCR_SWAPYUV BIT(0) #define DCMIPP_P0PPCR_BSM_1_2 0x1 #define DCMIPP_P0PPCR_BSM_1_4 0x2 #define DCMIPP_P0PPCR_BSM_2_4 0x3 @@ -428,9 +429,11 @@ static int dcmipp_byteproc_configure_scale_crop if (!vpix) return -EINVAL; =20 - /* clear decimation/crop */ + /* clear decimation/crop/swap yuv */ reg_clear(byteproc, DCMIPP_P0PPCR, DCMIPP_P0PPCR_BSM_MASK); reg_clear(byteproc, DCMIPP_P0PPCR, DCMIPP_P0PPCR_LSM); + if (byteproc->ved.dcmipp->pipe_cfg->has_swapyuv) + reg_clear(byteproc, DCMIPP_P0PPCR, DCMIPP_P0PPCR_SWAPYUV); reg_write(byteproc, DCMIPP_P0SCSTR, 0); reg_write(byteproc, DCMIPP_P0SCSZR, 0); =20 @@ -451,6 +454,17 @@ static int dcmipp_byteproc_configure_scale_crop if (vprediv =3D=3D 2) val |=3D DCMIPP_P0PPCR_LSM | DCMIPP_P0PPCR_OELS; =20 + /* + * Perform a SWAP YUV if input is parallel since in this mode + * the DCMIPP will swap YUV by default + */ + if (byteproc->ved.dcmipp->pipe_cfg->has_swapyuv && + (sink_fmt->code =3D=3D MEDIA_BUS_FMT_YUYV8_2X8 || + sink_fmt->code =3D=3D MEDIA_BUS_FMT_YVYU8_2X8 || + sink_fmt->code =3D=3D MEDIA_BUS_FMT_UYVY8_2X8 || + sink_fmt->code =3D=3D MEDIA_BUS_FMT_VYUY8_2X8)) + val |=3D DCMIPP_P0PPCR_SWAPYUV; + /* decimate using bytes and lines skipping */ if (val) { reg_set(byteproc, DCMIPP_P0PPCR, val); diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index 9e7b2434200a..2d26425b0b0f 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -118,6 +118,7 @@ struct dcmipp_pipeline_config { u32 hw_revision; bool has_csi2; bool needs_mclk; + bool has_swapyuv; }; =20 /** diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index 3a0a4df410d8..9aba16096d28 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -108,7 +108,8 @@ static const struct dcmipp_pipeline_config stm32mp25_pi= pe_cfg =3D { .num_links =3D ARRAY_SIZE(stm32mp25_ent_links), .hw_revision =3D DCMIPP_STM32MP25_VERR, .has_csi2 =3D true, - .needs_mclk =3D true + .needs_mclk =3D true, + .has_swapyuv =3D true }; =20 #define LINK_FLAG_TO_STR(f) ((f) =3D=3D 0 ? "" :\ diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c b/= drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c index 597f88ac7915..bed79a813def 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c @@ -80,15 +80,15 @@ static const struct dcmipp_inp_pix_map dcmipp_inp_pix_m= ap_list[] =3D { PIXMAP_SINK_SRC_PRCR_SWAP(RGB888_3X8, RGB888_3X8, RGB888, 0, MIPI_CSI2_DT= _RGB888), PIXMAP_SINK_SRC_PRCR_SWAP(RGB888_1X24, RGB888_1X24, RGB888, 0, MIPI_CSI2_= DT_RGB888), /* YUV422 */ - PIXMAP_SINK_SRC_PRCR_SWAP(YUYV8_2X8, YUYV8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(YUYV8_2X8, YUYV8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), PIXMAP_SINK_SRC_PRCR_SWAP(YUYV8_1X16, YUYV8_1X16, YUV422, 0, MIPI_CSI2_DT= _YUV422_8B), - PIXMAP_SINK_SRC_PRCR_SWAP(YUYV8_2X8, UYVY8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), - PIXMAP_SINK_SRC_PRCR_SWAP(UYVY8_2X8, UYVY8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(YUYV8_2X8, UYVY8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(UYVY8_2X8, UYVY8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), PIXMAP_SINK_SRC_PRCR_SWAP(UYVY8_1X16, UYVY8_1X16, YUV422, 0, MIPI_CSI2_DT= _YUV422_8B), - PIXMAP_SINK_SRC_PRCR_SWAP(UYVY8_2X8, YUYV8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), - PIXMAP_SINK_SRC_PRCR_SWAP(YVYU8_2X8, YVYU8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(UYVY8_2X8, YUYV8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(YVYU8_2X8, YVYU8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), PIXMAP_SINK_SRC_PRCR_SWAP(YVYU8_1X16, YVYU8_1X16, YUV422, 0, MIPI_CSI2_DT= _YUV422_8B), - PIXMAP_SINK_SRC_PRCR_SWAP(VYUY8_2X8, VYUY8_2X8, YUV422, 1, MIPI_CSI2_DT_Y= UV422_8B), + PIXMAP_SINK_SRC_PRCR_SWAP(VYUY8_2X8, VYUY8_2X8, YUV422, 0, MIPI_CSI2_DT_Y= UV422_8B), PIXMAP_SINK_SRC_PRCR_SWAP(VYUY8_1X16, VYUY8_1X16, YUV422, 0, MIPI_CSI2_DT= _YUV422_8B), /* GREY */ PIXMAP_SINK_SRC_PRCR_SWAP(Y8_1X8, Y8_1X8, G8, 0, MIPI_CSI2_DT_RAW8), @@ -356,8 +356,20 @@ static int dcmipp_inp_configure_parallel(struct dcmipp= _inp_device *inp, val |=3D vpix->prcr_format << DCMIPP_PRCR_FORMAT_SHIFT; =20 /* swap cycles */ - if (vpix->prcr_swapcycles) - val |=3D DCMIPP_PRCR_SWAPCYCLES; + /* + * Table dcmipp_inp_pix_map_list take into consideration that SWAPYUV + * bit is available when dealing with 16bit YUV formats. If it is not + * available (such as on stm32mp13), swapcycle setting should be + * reversed + */ + if (!inp->ved.dcmipp->pipe_cfg->has_swapyuv && + (src_fmt->code =3D=3D MEDIA_BUS_FMT_YUYV8_2X8 || + src_fmt->code =3D=3D MEDIA_BUS_FMT_YVYU8_2X8 || + src_fmt->code =3D=3D MEDIA_BUS_FMT_UYVY8_2X8 || + src_fmt->code =3D=3D MEDIA_BUS_FMT_VYUY8_2X8)) + val |=3D (!vpix->prcr_swapcycles ? DCMIPP_PRCR_SWAPCYCLES : 0); + else + val |=3D (vpix->prcr_swapcycles ? DCMIPP_PRCR_SWAPCYCLES : 0); =20 reg_write(inp, DCMIPP_PRCR, val); =20 --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C1BE1E5018; Mon, 2 Feb 2026 13:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=91.207.212.93 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; cv=fail; b=b6iczaXiqku3gJCIIe1HdgzQ3b46wiEvH3F/52Zye8SdjOgxiC3+znBoabpKWxmGToU/Vi6dnHBvsp4y4zsXUpCaCVd4ZN2dpi+fj6+qtwdSAXmO0fxIecD30k7y2rJIU9/+r0gFR7wa/0MnwoEdYSUIECzzWOO2BmcrgaAr7d0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; c=relaxed/simple; bh=2nadGuzNMTYmOTh9q2+rfK2ksVq80fyIqGW3WFjbk3w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=cxvnXHackzQ8cQhG8TOKnTnQfXcyLyPCFCe2uc53f7ReL7Wl/djVQauNQL2zMv3+N1rn897RBs0PO6+YCAXWSl6qeNZIlBxyaksyQX0LqOsfIU0wF59Y5EGF+Nt/x6CFsn45VfQStbJzQ6waY1jYXjDMJWnDeCWFt0RiGMYkLU4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=MR7BfNKh; arc=fail smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="MR7BfNKh" Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612Dp8ff3367949; Mon, 2 Feb 2026 14:57:58 +0100 Received: from gvxpr05cu001.outbound.protection.outlook.com (mail-swedencentralazon11013053.outbound.protection.outlook.com [52.101.83.53]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1am0wtfu-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:58 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mv2xKM90doVa8fF84BoxHApd55Jw8oqUGXGz2+xMTYoYQEA7jqjbGCk0DKx0/oUY0oEdIut+Yb0mX71IqiOLxISNsAfmaMxKYsVht+D9kConmXt5OjOt4x1sJTMho2taEEtv1N0pGdzf2sQESSqUus7kSbVGmn7/DDmk0RTnIeZaJhv7UxMufCxcO1cjLOifevlbm+GywB9RM3uw84YlL31XlsDsgUf8rQlzrJC5+95EEQAEYpWcsC0dfG6ypgJFDYlErnucESULdMvqs5NgVDtnp3MVKsgpZTn80yvAoNNK8GO2ckbiVLKzYn9cKwpnWc4A1AN3Uvg5BzILEPaS8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GdC6v1BrqkdRyN5io2qW6c96yaUCPMnmnoU5RO4jMq4=; b=liiPcUAWa7pSGD8l4xlLc85ovfGbL2UTVzw5FNESxCljKU/jaNku9ETjLlSOuuDYcZGToJjdbZFg3DvZKcRmdeMaeyNmyCoBDDecKcxsBGDgogBMc2ROl4/I0+a2T9lt3z2Z8/L456IFlggQhmmjp4+rqYRB88ogvP7UuGzVrbEJoiH3m0lmPnXfcIj9HQBB/pFp78GvklFYTeV13CVyR+EWhWh7grfM5wujGFwc7qn7uiMLfF/2Ztm480kncMyGJYBI0O5BH21vLqSDOwldSAV5o/X4Py54mlH6bLSfymFTkKjpYYcRbwerTRSqQMyihmcIUzO1FyLuoN3SK3A18A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GdC6v1BrqkdRyN5io2qW6c96yaUCPMnmnoU5RO4jMq4=; b=MR7BfNKhH+wSxiXrrddEnCh+jEVmStKbPRa37EaVXPmq2w/f5MjvhJb/jAONxpMCV711BUTLbF1Trf5oT6mKS7Bk9a1rStYkrtthW195fvAswasEmaem0lnKeqNdI2t0pqS5TQED4UsSY+Oa3hxTyhTk4kkrc/hSY5Moqv+KC+15Q0Kp2N7sE3BGMjdB71fmKXzC+LCzTEtTc92SF0qSGzIV46MCeDItC8eU+OqfQVWr2wZ6FfhvQiBb+mZyPZvigZ5lJNMFZ8TU3GsEb14rGjvGO/U5KXzHvpmYUAK8xD5bW8C0JANMvjHasRYa23Uec4UX0pEBG+YfWUA+aduVlg== Received: from AM8P251CA0011.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::16) by AS4PR10MB5624.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:4f2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:52 +0000 Received: from AM2PEPF0001C716.eurprd05.prod.outlook.com (2603:10a6:20b:21b:cafe::d8) by AM8P251CA0011.outlook.office365.com (2603:10a6:20b:21b::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.11 via Frontend Transport; Mon, 2 Feb 2026 13:57:11 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C716.mail.protection.outlook.com (10.167.16.186) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:47 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:25 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:46 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:31 +0100 Subject: [PATCH 06/13] media: stm32: dcmipp: configure csi input of all pipes on stm32mp25 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-6-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C716:EE_|AS4PR10MB5624:EE_ X-MS-Office365-Filtering-Correlation-Id: 3236fa5e-683e-46d9-5e3b-08de62630c3d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Q3BwTnR0NEU4YktxKzBkTjNnTjZNN3lDeFpQV05NZUt5cTBVRkE0Unl0b3d5?= =?utf-8?B?UkNiVzBvY0NIQW1yOThPRWcrZFBPWEZnQU03UFNIbGY4VFRBdnBMcC9PUklP?= =?utf-8?B?RTVtUHA0cVFVK0lpTmwxV1lBV1c3Kzd6S0gyZGxYYy9HQ3JLaVJKMkM5d0tn?= =?utf-8?B?UGJ2a3hNdTFieDBmamhqZDk1Y2J0ZHNqSzlmMHNjVTI1cDlQRnhuek1wa3d1?= =?utf-8?B?VkViM2VlNGR3c2V4aU16bUtwNGhaUmk5M2JBdWZFbTBJZUYxU3ljMU1yZDU2?= =?utf-8?B?Tk1ZODNOSU9ZQlhVcEFNQXZNN3Q2SlZIS2llRkZyZEdBWlZXbFF1cmhOaDhQ?= =?utf-8?B?K053SndWL1ZEN1FpYzYwVG5rc0VEemdHazRBVkhMTkZHb0RQVW9tSXVxNHRS?= =?utf-8?B?aVViRmlQN0FlejhxTkFQTDg0d2I1Q2FURG9oUDg3K2lmSENmbkRuMHc3ZERO?= =?utf-8?B?cDZMRGNIWVlKSVR5dWRGTlJpbEEzMGNCVUt0RUdIbUdpcnZUR0FSMS96c0J0?= =?utf-8?B?ZDRjSmloUEliTzNRUXdneStnWW1hd25vcys1UVhQMnpwM25NdFRoMXFrWVVF?= =?utf-8?B?UTFtclQvWUIzZTM5ODF3ZnN0Z0xsOWJPQVN3cmFBanp0S3ZyUHpmc2prL2dj?= =?utf-8?B?NENVYmYrclcwcUpBeWRlRnVlOEJaN2laZGt1Qm5wUmpVS2ZuL3NhMkR6c2ND?= =?utf-8?B?cnNGTjBzSGM4Sis2eWU3Zzd0aEdYSndHd2x3RklaWmJyaFNBRndQbU1OSnRY?= =?utf-8?B?ZlR5TEZ1STRmYTZOOFRxK2NOUVRLZml0TjRrYldwTVcwV3o0ZHhIeVNNcFov?= =?utf-8?B?SDF1WUxoZTNhNzBPNnVHQ2JVamZ6SjIxODg5bXJvT1hJY2s3S0ZaandQMEFz?= =?utf-8?B?bHIyRFhwdjBVQlAwTGxoNFpzR3JsUGowckNPbkpNT1V5bkhnSWg4U1hTUHlu?= =?utf-8?B?WDVjeUttYmdBdHVDVnczVHEzNEF3SHU3WVdtblh4cS9mOVFRTGFLMzU5VGhn?= =?utf-8?B?MU4vUm1NMStmWHlUNkRMYkhQQXk1bG1NMGU3OHhuY3BvMmIzbURlb3RSYkpi?= =?utf-8?B?ejNkUzVaUFNoeHA1Z2JOZVA2Um1DL3BmUUdlRC9UTkdNTGJUT3NDd0d0eDVH?= =?utf-8?B?QVJ6NEcwQWNHb2JwSUlLSXM4R3Q2V1UzV3dORExUZ0RISWdJaE9OZW13WHM5?= =?utf-8?B?SEVEbitDRmVrWEtiTWF4dkZUQWZmY0VRcklZUnh1QzJHYUh6THR4bzFzbm9r?= =?utf-8?B?dzArTTNvRUszN2xMdFEvNTR4dzJSbjFTVU55N3E2MW9kQ2s1WjUvdFBzelk0?= =?utf-8?B?eWpvQW5GNTlCY2Q3anIzSlo3R1pTL3pVcnpBbjFXUGhlWE9LWkg1OWRRUmRL?= =?utf-8?B?L1pEeXQ2YlhySUtLeU5lYmo4NzNLVjF5eTkvNjBkcVN3WTlRZFV3UVY1cGNz?= =?utf-8?B?QnNKemhyd3dPNHQyVGduYmovTGZpczNhamVNR3c1VFc3ODdQYlg3U0hja2Qr?= =?utf-8?B?TUdLREcyOUd6ZFlzdnFyV2huNTBHUlJEbFQxUURmdnE3Y29WbzlaYjR0d21m?= =?utf-8?B?TEs4RkNURm5WZTVibnhaM2l4RStOSWYvOXVBRlFjcGx3blJFSXRnRDZPZDUx?= =?utf-8?B?SVZzSXFUZmtVaTJiNGROd09DNmlaaTRhTkFUTStISDlkL2RSSk9CSCtTbDRO?= =?utf-8?B?aEtpN3BLTlhaOGxtV20vZzI0cWN6QVIvb3RFaXc1dkFHVHZTV0w4bmdIMjJ1?= =?utf-8?B?VmtJaTZRbS9rR2JxZlV5WnlZbHFqaHU2dXpsY0tWMVhuRjJ0MVIvc09vNStT?= =?utf-8?B?ZkM4aXFQSFlaUzk4WEJNYkdlTXFja1lORE1tWEc4dlAzQXc3akwxZENmeUY4?= =?utf-8?B?UzFreldJVm1ETmxYenVhL01HWnFjdys1SWY1VXdMbXJnRGJjcjcvcHFsanlo?= =?utf-8?B?T2RIbHpMQlZIYW9oODl6dzliOTFFWmpXMzRZWnIyUWhyN0h4UTZDSEprSE0v?= =?utf-8?B?b0xaT0cwNnJVRjZPZklIY0JoMXlUQ2Z6c3RKeDVlamg3c09uMWprRkE3S3cy?= =?utf-8?B?R1ZKRjRBOEVWbnRBbnlzT3RaS3lOeFpER2I1VFIrNm41WGZEVVVaTlhqZmlP?= =?utf-8?B?c3R4eFF1YjFMakhYTytleEYvRFhoYlVlRUo3aUNoZkVWS0JRRzJkMGpqVmZo?= =?utf-8?B?T1V0cWE5cUpJdURnT2pybFJXa24xNTFEYTJQSDM3Zm8rai9hZjI2Z0Q3a1Fr?= =?utf-8?B?Mk5jUHJJMmRtYXFOcHp6b042VCtnPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q6FGqNCXR3bX5Mpup3EoCqo8Cmf+Xg+E+vlPwzqlekMWBMx8FwbjhdTdaQr65LbrxGS3TS3K2LYk9h42cGdAfrFILmj0Oi8X4jEHDQNAptL1brQzGK1Qs0doOpr+5unrPGb9/PaDBxGyVYZ4IhXnw11DLhhNqFhn63a4s4JQHeXEZozikDHVMnrLejGdm+6hxUswh+NqllqGnA/tgPXBe/xSB1s+BGm3/kUeX2dMaLHbqY2b4Iop8DhNJ566aRJ5NfaKROeZagfu/SQVmeEkXWCjB7YbdW2v+I83nPcFsywhNf7vKoh+25Iwj2H2YSO85Pgiwu3ih9oGq5+XYb9/FuR8MAN8KVp2/jJi79Q0hpUMOGOQYEAzkSRa7qgtxHRQBxXIaq0qYsRGBRRc1L/vY9RWXHu+QD3tOar4pU5k7DkGQghy0RmJDARZeMi6PENs X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:47.8945 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3236fa5e-683e-46d9-5e3b-08de62630c3d X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C716.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR10MB5624 X-Authority-Analysis: v=2.4 cv=CKsnnBrD c=1 sm=1 tr=0 ts=6980ad66 cx=c_pps a=63LrwIlJcQtl1T1RcQIQ/A==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=R-qxlR35ugA5VTVDtoQA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: xOBWztPy2fJrjWKhewaAXIT-TTgBSe_b X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX7r11aVQhb+7L 0fgxKqoVZYRCygbQD9hsZYdEE1Ld5KMrfqmmdxz6jj+UHZEV5+mHmqniKaXD63aJB+eLgNQy73U XprfUQ08A6m25UUkm4ngWpnLqc7Aekx+WiDA3BaBoDI5xXaI5eZ9wQ2IQncFw3ybLpNd1Kh/dzw opTVfR0+rEZ4sIitIDlwZ+/zh+E0FzJYJg6qVfpMVc4ETPTL9Z/6LxGGcR0RH1XB1e6MDVJfnfO hUIEouJ0cMrqvoEWdP345Z8NGPWOPHqxG4zBicc9bgp5GhXWcBh8qy3JK9OLTqzSsEzjzr7xoJc hXIO67VzWtN9Yd/9Kwz5tL/72/cTyBfwrtKLnVptuge5eXfTuYUujO5TQb9yeHQJv2GsTLqVHGM ak9ZpHY9fiMrCryR+DoSsLtiCBW7Y69UjLx71ylIFGz4EkjCj1bWvUNAdDsXNXKspD5SYZhITgk xLg9FrkXjcp5mv0FWXw== X-Proofpoint-ORIG-GUID: xOBWztPy2fJrjWKhewaAXIT-TTgBSe_b X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 clxscore=1015 priorityscore=1501 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 The STM32MP25 has CSI input and 2 additional pixel pipes in addition to the byte pipe. Each pipe can select which data to receive based on CSI VC/DT selection. The multi-stream support of DCMIPP will be added in a future commit, however, to start putting proper control method, the input subset has now 3 SRC pads, one per pipe available. Currently, and until multi-stream support is added, same data is sent to all pipes. Signed-off-by: Alain Volmat --- .../platform/st/stm32/stm32-dcmipp/dcmipp-input.c | 75 +++++++++++++++---= ---- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c b/= drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c index bed79a813def..82427c5d126e 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-input.c @@ -43,12 +43,18 @@ #define DCMIPP_CMCR_INSEL BIT(0) =20 #define DCMIPP_P0FSCR 0x404 -#define DCMIPP_P0FSCR_DTMODE_MASK GENMASK(17, 16) -#define DCMIPP_P0FSCR_DTMODE_SHIFT 16 -#define DCMIPP_P0FSCR_DTMODE_DTIDA 0x00 +#define DCMIPP_P1FSCR 0x804 +#define DCMIPP_P2FSCR 0xC04 +#define DCMIPP_PXFSCR_DTMODE_MASK GENMASK(17, 16) +#define DCMIPP_PXFSCR_DTMODE_SHIFT 16 +#define DCMIPP_PXFSCR_DTMODE_DTIDA 0x00 #define DCMIPP_P0FSCR_DTMODE_ALLDT 0x03 -#define DCMIPP_P0FSCR_DTIDA_MASK GENMASK(5, 0) -#define DCMIPP_P0FSCR_DTIDA_SHIFT 0 +#define DCMIPP_PXFSCR_DTIDA_MASK GENMASK(5, 0) +#define DCMIPP_PXFSCR_DTIDA_SHIFT 0 + +#define DCMIPP_PXFSCR(a) (((a) =3D=3D 0) ? DCMIPP_P0FSCR :\ + ((a) =3D=3D 1) ? DCMIPP_P1FSCR :\ + DCMIPP_P2FSCR) =20 #define IS_SINK(pad) (!(pad)) #define IS_SRC(pad) ((pad)) @@ -383,7 +389,8 @@ static int dcmipp_inp_configure_parallel(struct dcmipp_= inp_device *inp, } =20 static int dcmipp_inp_configure_csi(struct dcmipp_inp_device *inp, - struct v4l2_subdev_state *state) + struct v4l2_subdev_state *state, + u32 pad) { const struct dcmipp_inp_pix_map *vpix; struct v4l2_mbus_framefmt *sink_fmt; @@ -399,22 +406,28 @@ static int dcmipp_inp_configure_csi(struct dcmipp_inp= _device *inp, return -EINVAL; } =20 - /* Apply configuration on each input pipe */ - reg_clear(inp, DCMIPP_P0FSCR, - DCMIPP_P0FSCR_DTMODE_MASK | DCMIPP_P0FSCR_DTIDA_MASK); + /* Perform the configuration on the related pad/pipe */ + reg_clear(inp, DCMIPP_PXFSCR(pad - 1), + DCMIPP_PXFSCR_DTMODE_MASK | DCMIPP_PXFSCR_DTIDA_MASK); =20 /* In case of JPEG we don't know the DT so we allow all data */ /* * TODO - check instead dt =3D=3D 0 for the time being to allow other * unknown data-type */ - if (!vpix->dt) - reg_set(inp, DCMIPP_P0FSCR, - DCMIPP_P0FSCR_DTMODE_ALLDT << DCMIPP_P0FSCR_DTMODE_SHIFT); - else + if (!vpix->dt) { + if (pad !=3D 1) { + dev_err(inp->dev, "JPEG only available on pipe 0\n"); + return -EINVAL; + } + /* Only available on Pipe #0 */ reg_set(inp, DCMIPP_P0FSCR, - vpix->dt << DCMIPP_P0FSCR_DTIDA_SHIFT | - DCMIPP_P0FSCR_DTMODE_DTIDA); + DCMIPP_P0FSCR_DTMODE_ALLDT << DCMIPP_PXFSCR_DTMODE_SHIFT); + } else { + reg_set(inp, DCMIPP_PXFSCR(pad - 1), + vpix->dt << DCMIPP_PXFSCR_DTIDA_SHIFT | + DCMIPP_PXFSCR_DTMODE_DTIDA); + } =20 /* Select the DCMIPP CSI interface */ reg_write(inp, DCMIPP_CMCR, DCMIPP_CMCR_INSEL); @@ -432,20 +445,24 @@ static int dcmipp_inp_enable_streams(struct v4l2_subd= ev *sd, struct media_pad *s_pad; int ret =3D 0; =20 - /* Get source subdev */ - s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); - if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) - return -EINVAL; - s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); - if (inp->ved.bus_type =3D=3D V4L2_MBUS_PARALLEL || inp->ved.bus_type =3D=3D V4L2_MBUS_BT656) ret =3D dcmipp_inp_configure_parallel(inp, state); else if (inp->ved.bus_type =3D=3D V4L2_MBUS_CSI2_DPHY) - ret =3D dcmipp_inp_configure_csi(inp, state); + ret =3D dcmipp_inp_configure_csi(inp, state, pad); if (ret) return ret; =20 + /* If there where no other pad enabled, then enable the source subdev */ + if (sd->enabled_pads) + return 0; + + /* Get source subdev */ + s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); + if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) + return -EINVAL; + s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); + ret =3D v4l2_subdev_enable_streams(s_subdev, s_pad->index, BIT_ULL(0)); if (ret < 0) { dev_err(inp->dev, @@ -466,6 +483,10 @@ static int dcmipp_inp_disable_streams(struct v4l2_subd= ev *sd, struct media_pad *s_pad; int ret; =20 + /* Don't do anything if there are still other pads enabled */ + if ((sd->enabled_pads & ~BIT(pad))) + return 0; + /* Get source subdev */ s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) @@ -533,8 +554,10 @@ struct dcmipp_ent_device *dcmipp_inp_ent_init(const ch= ar *entity_name, struct dcmipp_inp_device *inp; const unsigned long pads_flag[] =3D { MEDIA_PAD_FL_SINK, MEDIA_PAD_FL_SOURCE, + MEDIA_PAD_FL_SOURCE, MEDIA_PAD_FL_SOURCE, }; struct device *dev =3D dcmipp->dev; + u16 num_pads =3D ARRAY_SIZE(pads_flag); int ret; =20 /* Allocate the inp struct */ @@ -543,18 +566,22 @@ struct dcmipp_ent_device *dcmipp_inp_ent_init(const c= har *entity_name, return ERR_PTR(-ENOMEM); =20 inp->regs =3D dcmipp->regs; + inp->ved.dcmipp =3D dcmipp; + + /* For DCMIPP without CSI2, there is only a single pipe hence 2 pads */ + if (!inp->ved.dcmipp->pipe_cfg->has_csi2) + num_pads =3D 2; =20 /* Initialize ved and sd */ ret =3D dcmipp_ent_sd_register(&inp->ved, &inp->sd, &dcmipp->v4l2_dev, entity_name, MEDIA_ENT_F_VID_IF_BRIDGE, - ARRAY_SIZE(pads_flag), pads_flag, + num_pads, pads_flag, &dcmipp_inp_int_ops, &dcmipp_inp_ops, NULL, NULL); if (ret) { kfree(inp); return ERR_PTR(ret); } - inp->ved.dcmipp =3D dcmipp; =20 inp->dev =3D dev; =20 --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6068036A00E; Mon, 2 Feb 2026 13:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; cv=fail; b=Bwfd+jwJGyFZcj6bAw04jEs9yIK0XFSTOoaq4TujcaBoFEQYc/fa82YlBBQGKrNDJ+3P9SSo6qboBv8JkNc8xwP3HIx/iZ6EkZ68RdjI0a+ttnmQxLSFgQ9k37fnt0JX4I/6Xh+cREmqeYj3XjUjpB4cV42f6/8L7Dg8Mq1e4qY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040694; c=relaxed/simple; bh=Mk+/dQZuWkw5VXCvxtVgm8Zk+2B1ilsY5vXY5qYP7Bw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=YLWMKeNLntdmXl+IOOs/Jy6J0YSmw76ZJEChcE4YEGFBCUQit6Ja07IGZOPjYGxfRbDhg8zF52B5o4oyPAdJL7E9uwIzzchdKwdgNjWWN/R4c3UXXHy+cSBPlX66kMCkz7ho8I1JeankQECs0XAbOCdJbSvq5s2abXPxmgVn4bA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=JJ7v1Ph1; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="JJ7v1Ph1" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DiPKg305289; Mon, 2 Feb 2026 14:57:55 +0100 Received: from osppr02cu001.outbound.protection.outlook.com (mail-norwayeastazon11013007.outbound.protection.outlook.com [40.107.159.7]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1aq7p38e-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:55 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UGouOizLir6PqqKAC64wFfi5qlAwU1YBayl4+fJ59bVir3lfeY+yVhaPyWyUDuQeLF3NyVWkxW8dzojJzhKLruk90+7m2wFsM1I9jN6fVWkqgRVnf4hSELglcXewVxx+cTpBwGWj2NCBQPhrHVjlNOs9eI7qrcwWUMkNTbW1pu78ZKR4U77SrYHXFKO/MQfgNP56CzPjzihsLswNQaMbqNxYGy+n0TDRZYIAYELiiTqbQjVorwYvMzb0nJS1xDXK8Rt0lxlT45pknDSzRfHFvenfOV15kKp0pCPzfzhcOD1/t2QNyViHpeeFwuMqnI3QPwN219mnavc/fqWFyiksdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nf3XqrcSp3pK8avo6dIzno8Z6S66JjLwjY6XIhiILSs=; b=IGJyMacOMWPfATQdWA856txrBkGHREQ3pWnsEZ3K1ttYEQUg+s9yIMkAIZbPCt6QFR5TInh0s6L+2nUDQkW2/+ixPw223LaYP6TwI0OVged6vfka5+gM/GHFN79iD6K/t2px7j9e8HSK2O9HerFqwYNr8gtIwyU04tZZtxvFf8/SXWu/O2lKhKf/AWVyBv46/olWN7R+boGMSI/EdFTt2x6vDXaoNAs5BZNXtfoCCllFLJId+VFA5fXoasSZAjdkWTUCjS2MfEO1m4dIIW8ZhSxT+/lxk5Pf9ab+2yXmgrH6ZM/BjW8bbgaLXSRiXETyj5MdLgyO8x+aUas9HGPQeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nf3XqrcSp3pK8avo6dIzno8Z6S66JjLwjY6XIhiILSs=; b=JJ7v1Ph15+4/1N3lUE9rRFPyHZRnXv6xfuhFejnaW8rBzwYmZmFgWIIUNlCzedpmI//WND7bOk8W9Nn6mtXhK9BBf6DlGybQyK6TLMxNWWktR/YPfWAz/0gTIbEf4Fd8X9J6ukklTzG+nFREqRsRh2wON95OYzV7D8KhpigqqqapnNFhVxQIwFs34SyJDhIutxCmxgcZZTNo7uGT1i4WaODetYiXbTzD8/jSxD0QrwJDK1iX+IKNWR8lRUgBQWdGvj7lQm4B2wEWeTvZCWcFdenssmXKcDfsHApGCcJUw0qvGeaM5VrqwnfD53Auy+SI1Qdu+7YED5QhsXKGXK2V8w== Received: from CWLP265CA0421.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1d7::21) by PA4PR10MB5754.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:267::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:49 +0000 Received: from AMS0EPF0000019F.eurprd05.prod.outlook.com (2603:10a6:400:1d7:cafe::18) by CWLP265CA0421.outlook.office365.com (2603:10a6:400:1d7::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.15 via Frontend Transport; Mon, 2 Feb 2026 13:57:50 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019F.mail.protection.outlook.com (10.167.16.251) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:48 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:33 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:47 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:32 +0100 Subject: [PATCH 07/13] media: stm32: dcmipp: introduce a dcmipp global media_pipeline Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-7-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019F:EE_|PA4PR10MB5754:EE_ X-MS-Office365-Filtering-Correlation-Id: 64f1fdb6-1521-429a-dcdd-08de62630c79 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|7416014|376014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QW9yUWh2OWxqVHAzKysxZGYwcDFLOEJITTNxL0QwWWtLMXRiSnpjaEgyRDR4?= =?utf-8?B?NXczUGszMzNoMzlMWU8wT1haWFhEdUtBd1JzNnZBWGdYMFkyN3pVSThXbkRv?= =?utf-8?B?NHJMdGdrekZIYnFnK2xzcjIydFNwRUdKdFk1dFQ5UXdsUktjM2Q4UUZHdFI1?= =?utf-8?B?dmNBbFN4MHdxQ2d0MWNLd0E5bytWVFpSM0dvdVg0bkx4bm4ydllHL1RYTmNG?= =?utf-8?B?MG9EZ2FWTGtPRlBSR3FSU3RDVDl0aXlqd1IyUE9zRmNrQ25sZGtmaks4cTlu?= =?utf-8?B?N0VQdHY4MWhJMjNRY3lPbTVUbW9VWERPcExhYUkxajVFdGNlMlJIVnRRNUhn?= =?utf-8?B?RjNJWlJhVk9TbVNRMEdwdDFZcXM0bkRPRjZrUURQMS9xZ3ZSYUZBNVNHWHQ3?= =?utf-8?B?TWJkNDJISUhRRjlqalBtaWttQ0wvbXUxQ3Y1blVYc05EK3JjRU9jRE5vbWs0?= =?utf-8?B?eFpKSVhjM280dmRsYlpuSnNlRzZiT0hQU1JCWTFwamtkTVVZcktISHpMZGwy?= =?utf-8?B?elB6YkgxR2hBV2xDa0t3L0lMUkZBVkpJZ1Z2VENWYStheUd3KzViV0JUVnNi?= =?utf-8?B?T2ZhUml3cFRxOFUwYkl2SDd2OGxsWWlZNzVGcDh3ZTB2eDd4MllyYlI2bzJo?= =?utf-8?B?STByODlvWDFDbmUwbVUwQlFlSnZGYWlOcUYrVWRReWR6YjJXUndSdmtqeUZm?= =?utf-8?B?cEwrLythTGdQR3BhdmgxOWcxZjQ0N2NJTGx1VUxheG1PVzduRzVWSURta2tO?= =?utf-8?B?ck9DczdGZU5FYWtBMW5LS0pnVTdzK3dEckdBQTY0WnE1bzJsOFQvMGpYM1Bo?= =?utf-8?B?STc0TjdBTjFKb0pIV2J3czVUanZ6d1d5S01GOHRSQU81ckJISXk5Z20vV0dD?= =?utf-8?B?OUlrZGJmaXBmOFhPQUJ3UWduRnJ1eGxULzVHQlJCU0tFa2cyTlBmUGpsS1pZ?= =?utf-8?B?Qit0OEJZZjZDVmoxVmxwVjVjY3dwWFpyQU05L2pqL1E4MWNzRjA1QVhaeXU2?= =?utf-8?B?MjZTazZia0hFblZUWWtpWXdrT2dLTUxHbmpjMFM0WWJYZlN4aVVsYVdkN0FQ?= =?utf-8?B?b1dHMmd0Nmtld21xYUlCK1JiaVlLcWxMeUl0blhscThUTzJWU3hIcXpGUEoz?= =?utf-8?B?M3N0cThwTVdMdSs1N2hPMVgvUGtOdmlLS3RjV0VBTExCbUhteXZwVmMva2V0?= =?utf-8?B?VmRxbUd3WTNLeXlYd2p6cWFEcTBJd3FMZkhpaUNMNEs0NlNnS1hmWTgrYnpz?= =?utf-8?B?Q05lWjBNb0JwR0tXT1hwai92b3RYWXdxbkluZ05tbHAxdS9CdXU5eU44VlFP?= =?utf-8?B?ODIwdExCaFlrcWR6eVltandTdERBQWtTdGlQbW9ZMWhjbEc1TTZ6b0ducXRB?= =?utf-8?B?K3ZmN251WXJKL0N4RXJCVk9FampoTXJZL285bi8vVitndHBTQ2V3eHlmNzRq?= =?utf-8?B?M1phMzY4RkJzK292UFVVRmxzVVZBVFFnK2FRQ3ZreXpzMUlQeFhpSUh3dFlz?= =?utf-8?B?MC9OV0NGb2l3NlByK2NRTVVEZ1pUNUhSSkY5NkUrcXFQT0EyWVZ6RkwvUlBC?= =?utf-8?B?bmRoVkVrZ0JlbVRhRThieFVnQytCVHJISGg2ejhBVWxlRmprRkl4TFRiMWU4?= =?utf-8?B?RmJabkRIZll4NGJkeENhWFJMb1A0Umo5Qi9Kd2RlNWxLaC9WSFZyb2R4aGky?= =?utf-8?B?K3lnUzhlVGdVV0RNdWpCei90UXM5M2xlMkNGWmhHWVRpdUVjVVZVV1FQODA2?= =?utf-8?B?UDJnQVYyeXgxY2IxTW40VG5sakhmZ3NVUUJHYWFvbFdlTi9SRkthaUV4WDdQ?= =?utf-8?B?aUh4emhOVzlTNjkwYVJxUE43b0dNYlRRMTZkcDVTaTFnZ2pZOXdUZUIzanVv?= =?utf-8?B?bWtlY2crYm1rdDZHdnNqV3dVQmE4WVF1MFVvdlJUbmMxa2h3WWhtWVBiWkNu?= =?utf-8?B?cEtFN1lRZFNNZnEzVVFaeHhRZ1NSRlF1VE45U1JBdGJsZWRkaFJGY3c2U3ZH?= =?utf-8?B?T05TL3I4L2NxZEl4NGxRbUJUS0k2RnJ4SUczT3d2OERrQ0xiaVJTMUNseW9R?= =?utf-8?B?dGowR3VISDJVbkUraUJ1RlU5K3NSd0xtN0J0RHd4Snhqb3lwc2gwWVE5MHNK?= =?utf-8?B?dGJtamM0N1IxNEJKUjdNOWRDWjJDYlpHVjBESUx5S1A3ZlB1YXN3RDBtSjFD?= =?utf-8?B?cTdyNVVMcVNnUDhHaTR3UGcvOTVPaktyU2o4VHdodmkvOW02a2ZvR3QwS0ha?= =?utf-8?B?bkxubHVaN2pPdjQyM3h6bFkrdlpnPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(7416014)(376014)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xELlVRpwcDc+x1o+tvlFJbWXonFMQ4pXMAOkmt6kubkxzxX76Txjew/Ni9rfiRS8spCpNgVg+6e42RYCTdgGLAsc/9uDFyHbtwgPqUxqtI/mMD8tVSFvunggzDVqRGmwU4ZILdaxnU4IHOp22qkUbGV3hHR8TGPnc8ktoF2165x7tqVYVRwVC5N/24v5CTMnnUwRZOonMVc2HFI/7ukzVweylx/OI3G0fuNOgsGhlx5hylQkcHufg+N9E+fnKGHVuygEoRiv7Gm3HwR4AE5z7LnUNWrcl6lMFzmwu/NxmjXNSdoMPhUBWEqMJ3H3lQVJY/P2KBY8ptxVd35VGICdxjPyn8j+Dfj4N/W11/0B6jgx9Qi9dxdcgIJlB6luV+FoF63XzLbbr+3t2Uk5E0hlCYWi398de0n/eiH3okM87RFDISUH/87Seca6iIZOupue X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:48.3018 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 64f1fdb6-1521-429a-dcdd-08de62630c79 X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019F.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR10MB5754 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX1u3V8svhDjhQ bG2qZvHMr883pa7cPYNkjzx8V/N1dGhcr24c6sKIrMTiUpzP7stujTaDr0VXk1Wh1qC4vPBj5xD 8Ei2pyNBAdZlSnAk3LBueaFp+kwLCys+5S9jhOSGjTAlxHqbFQweEN5wobpW8d9ZtaaYoDSk1Sv Sl6zULe/hV3AwuOMzeOi/LkkOdh+vDJOp7MpopB8TZjwxHuVPpX7+i+ScVYRzHm8o7rfJYriIbw S/zkQaoj2l3bbLRfXdPh2xyLMLKUumdrVbKsr2+8G+WVJWiQ6f+9D71rWiKAPITzb1hMlH010WW hVHFyLeBhDYJTjwyC1Gngcg5c5cRcpZFZYYIYlLIWcIIPTt7Ju6snNtUOCSXP1Is41UrGINWp0u GVRaDQypC5UXxGqRjxGxLrHWbOPec16SO/GDSTPQR2LtRrTnRa0rhCPIOqzG4lDn4pAfvlCR26V 7KrR2M3xsYhodmGo4Tg== X-Authority-Analysis: v=2.4 cv=LLBrgZW9 c=1 sm=1 tr=0 ts=6980ad63 cx=c_pps a=Hnq3Tjo4AW3aKPKNM5RF8w==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=w34_h8Ukgoz9b-3liUIA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: mekN2OFROoPkltIr_HEVcCXvqJ1SSIKW X-Proofpoint-ORIG-GUID: mekN2OFROoPkltIr_HEVcCXvqJ1SSIKW X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 With the introduction of stm32mp25 containing several capture devices, it becomes necessary to share the media_pipeline structure among all capture devices since subdev pads can be shared between several capture devices. Signed-off-by: Alain Volmat --- drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 3 +-- drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c index 0b1d1fbda5d6..2fb34cac89c6 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -125,7 +125,6 @@ struct dcmipp_bytecap_device { /* mutex used as vdev and queue lock */ struct mutex lock; u32 sequence; - struct media_pipeline pipe; struct v4l2_subdev *s_subdev; u32 s_subdev_pad_nb; =20 @@ -408,7 +407,7 @@ static int dcmipp_bytecap_start_streaming(struct vb2_qu= eue *vq, goto err_buffer_done; } =20 - ret =3D media_pipeline_start(entity->pads, &vcap->pipe); + ret =3D media_pipeline_start(entity->pads, &vcap->ved.dcmipp->pipe); if (ret) { dev_dbg(vcap->dev, "%s: Failed to start streaming, media pipeline start = error (%d)\n", __func__, ret); diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index 2d26425b0b0f..ee9f36268e64 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -73,6 +73,7 @@ struct dcmipp_device { =20 /* The Associated media_device parent */ struct media_device mdev; + struct media_pipeline pipe; =20 /* Internal v4l2 parent device*/ struct v4l2_device v4l2_dev; --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A15C36A018; Mon, 2 Feb 2026 13:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; cv=fail; b=K/d5RkR9bRE2v0G4xpiLOEMK2IyKVJIE98+pycGulM8jCjJa1276lnXU0ggzB5B8c3XtlqpxhLe+0J2meNpQLhJnxvC4icOsDuEg1/qqlXpAyc4qenrRSKggYJOgLCl+dDj7rGBOrm8FMql5oXniwWrTSu57o1wZxpnF81KZWWc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; c=relaxed/simple; bh=ririOBkaZtJeuAeASLNG+11CKSX81NVLBASPGzuofTo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=iwVmm1x6vVHOdzX+qhfCtElJnJZuhpGFxamdJD/91w0K4sc6I0mIxxp1IYuheJ1pQNrQ7bEjdXG570jgwfxTvnGPpAb/N1xgbHyZ5uWaICSzNWsQO/XCibhrkQz5pFvhEAPe0TIu5pr0juVfX2lBIH9+dUTLoCrdwr7S8Eazu8I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=SvP5/mlC; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="SvP5/mlC" Received: from pps.filterd (m0369458.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DnJlJ2373383; Mon, 2 Feb 2026 14:57:55 +0100 Received: from am0pr02cu008.outbound.protection.outlook.com (mail-westeuropeazon11013050.outbound.protection.outlook.com [52.101.72.50]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1v654deg-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:55 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TCOKcDQ12RJ0DBh6pIzhF/9cgdRlt6prhp+2tooUtj6Ovc9ekSYfEVgZ9j7J7Vd9msG87LcUWrFjAqkPNu4Q8JbP+Gej2pW7bIX+NcAa8HM+oOgqnDu2ayyLJWg2d1NCvzRg/uaqb4LobvXh6vKtiqnshwaRO8ag7SPT40oOHkfmLh0LLiNc9FY5gBoNioRG9gjtXPvRdqEv61WGkBHO4ZvysPkf/DdieOfTe75wHX9szonQ0RVGsti2CJknD8InDXVlR491T2Bj75cfx44Y7t6YBAjYF0ehVLvIuvxiVJxMXbK7/cknDrhyvSRBNGIjv2UD4IPPerZYqIRa6F56dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UJT3eHN4UeJHXwVRCq2QVa4sM69W7PTrhVHDLRqcdMQ=; b=lHiQq4Ge2RhMrMm1jiXmj3KqD618W5mpHN0ZKm2x+evjLAyJRGgzsv+O+T341cnrCpvy0mq3AG0WSOhceftIgENtlsOLrrvrY4YzYXJYPTri1M0DYgCzJ6X9y0PqM+2WeWnDo49qBmtYBOqKQ6mF/zRaPuOv0Cfyw8znPKgjFp3IE96E/9JcbBSMsS8Ozt9KTeOrUU3GpxMN6mO2eI/INSRHDK2B5RNGbYJ5WLJAjLlX+ySIZtW/HMarb0F4cx/BBDe4QErc8IvD3NxcRRyJRrDVTrHxmUAPYch7UD8oJrX4yzC9zqX4TmoiMAVNda1jDhSKCyfYdHnRJgJCc6OMJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UJT3eHN4UeJHXwVRCq2QVa4sM69W7PTrhVHDLRqcdMQ=; b=SvP5/mlCr0CCKquIOxsVU39/pJ/LXjsX/ZQH7MhGDcaMD4AVyNgskzZe2CyN946+s4QoRt8j4oioPxdRIpCuVR1GW5zRYGyD7iL0AhcctPkI38n0uZIT7HyfvOWCPZWek/Q+50lHnykOhBpqoyhDvFmUNQV7271jZPWEx4PNCV4y0OYTHRkxypq9EI3XZg0I3czOxSm/fwTjhDkyvCurRQ7p8ZnN/MTes9kXQGekGyg1/GH5n+F4IQcVFdEHdpMyudH6h+RjGpdfncWpgtwbZ3DWwYVZkU+fKfhmPN2zZjFOsUY64hn5/CKUAoUq5rqsFFzMtKdAmQZvcuNO70nGtQ== Received: from AM8P251CA0020.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::25) by VI1PR10MB3982.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:800:141::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.15; Mon, 2 Feb 2026 13:57:52 +0000 Received: from AM2PEPF0001C716.eurprd05.prod.outlook.com (2603:10a6:20b:21b:cafe::21) by AM8P251CA0020.outlook.office365.com (2603:10a6:20b:21b::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.11 via Frontend Transport; Mon, 2 Feb 2026 13:57:23 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C716.mail.protection.outlook.com (10.167.16.186) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:52 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:27 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:48 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:33 +0100 Subject: [PATCH 08/13] media: stm32: dcmipp: add pixel pipes helper functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-8-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C716:EE_|VI1PR10MB3982:EE_ X-MS-Office365-Filtering-Correlation-Id: 54e878e9-3f2e-4e6c-9111-08de62630edd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?TUFabHAwTnJUT2dBQnhNSlFvU1AzVm9hVWJBZ2x6dEQrSDh1K1pNK2JvWnNv?= =?utf-8?B?ZlM5MWg5eEtQQWQ1UEtEemVLUHRHMlZ6cW9hTkRURithNDZjb1F2WmI0MVBU?= =?utf-8?B?cDBpdlg1RmtGN2w2dVRhYjFzV3V0RmdwUHBYMjBVLzUrQlByOWVIcHNlVmxJ?= =?utf-8?B?b3BPQUtVakU0WEd2aXNDaVZUTmYzZ1FMQ2JMK0Rra3hrbVVkYTNENFdHYkFx?= =?utf-8?B?dmJCQ1k5ajcrcHEzUXUvMU5UeFU1N2pKdmUzRWovc1JGM2hKOUlRaVJsMVNr?= =?utf-8?B?SmNHTHZ5RHovdnk4b29tVFRKUEYwNjByYjd2bUtPRE5CamMxVTQ3ZlFtR0Nm?= =?utf-8?B?d1RKWWpaS3JFNDJBamVXV3gvWnJsZ1YwNFFUZC9zWjhSNFRJaURNczNtS0ZR?= =?utf-8?B?Rk5XMnVnamtaYjhsRDB6bFR1VmFicjZuZ3JvRGxGNk4wSzQxQmNVeXVoWTZS?= =?utf-8?B?cnBsR2doRDVsU1RaNHlOdkpRL2llRWR5Z1F1Q0RWbFR2WWNQUkpnL2xyOFow?= =?utf-8?B?ZzE3MVhST25DakFycVVNV2FCL2pzVlpIT05NU1BEeldlV2h5U2hEaTBGZHBE?= =?utf-8?B?Z3BSTzdQN2liMm03eTIwT0RzYTZVNGQrd2ZVZEN2Ung2aW5xOXBmWXpXbXA5?= =?utf-8?B?QTQyS3hIdHJLWGF1Y2JyNURTYjZua1RYWE5pMElIVUZaVW14S3Nyanpkdkxm?= =?utf-8?B?WmhSbVFjZG9xZ0pjdEdCNWhZaStnWGsyL1R6VmRHM3RHWGJwMlNpN3VQYWI0?= =?utf-8?B?eVpJdDBjMEpqc0RpNEtyeDhGQmNTLzZMU0hadXhCclRUMnBGSkQrM01lVXNu?= =?utf-8?B?cW9jcXNqK2huNzRBK2pqMUdGYkxtWjlDTzVuR1VBRENXMy9OZVZLeU9jUkhF?= =?utf-8?B?WlZjbGkvSy95d3JGdTRubE1IZmU0Q1h1R3ppWXVHMSttYVlVRjd6b0dYbVVC?= =?utf-8?B?TldtaEJOT0FaODkySFM5Q2V1Y0ovWElOajFWWDh5RG1aZWpERFJqYzBLZlNC?= =?utf-8?B?YUdWNStueGRIUGE5K3lWV1ZRY0JCQ0ZFa3cyaFl5bUpkRjhaZlFzUE0zMytK?= =?utf-8?B?alhKVUFxUjZQY01CYjhWVUtoWENPMC9xcnlWektCd1VxYzNQbFZYeEgrTExB?= =?utf-8?B?YXJoT0FKbTFNQlA1OGkyanExeEZTRGxhRis2SnlkZ1RTYW0vQ0pqQjV6QXly?= =?utf-8?B?N2k5UENzNis4UDZlaDhxeEhZRHJJVDlsWm9mSThmSEMvTmJLaXMwQ2hLK2p2?= =?utf-8?B?clJWWURSM290NnJsK2RCNXF0MGdEUVRUMDVsdm1Ba3JxODVmL2dCSm9EbE9M?= =?utf-8?B?U0hsb2ZsVHVKTWxVa0J2N3V2dWMySVduQWg2RldvM1d1RjBsdnoybEk4Lzg0?= =?utf-8?B?b3ZEbDBJTEpJVmdJN1RQWWpkS3NoaFNPbDJScE1zWGNlV2MvTHpUWGJrNDkv?= =?utf-8?B?dUp2amdBcnV0bTBpdFcvZmgxZzlLcVFZRUFaOFNXN1g2a3BiVEljL0UxWnBi?= =?utf-8?B?c2lNMy9vcWZyVjB2TDU5aVZNdjlNV2JLcFZONTVyclo2dVA2a0tDTHVyWFBN?= =?utf-8?B?ZTA3dURieGhSUW1tWVIyaEpJUmNibU9renRwMWZmSUc5cGFqVFNDQ0VQYWUw?= =?utf-8?B?U3Y4RkxZTkdGNTY2TFlxR2tQSDdXOEZRZHdNSEFIRklqcW5yUkZLSTFnVVU2?= =?utf-8?B?b1NuTlkvZ2hOZGNScThFcmxYcmt5cUJxK25Sc1BNQkYzek1MWk8vNUxmaHBv?= =?utf-8?B?S0EzK21POTV6REU0SG83UUl4aUFSbnphM0Y5VWRpZDNlTFRFL3NKRDZ5RU9p?= =?utf-8?B?WkpOSEIzOGFGSWVQMmtEUWwvZFZ2UE1HdlV6V3ZLckF0dG5saFh3SzNmRzZT?= =?utf-8?B?SzRrT0I5MS9WRExPcGVrN3doc1ZtUTExT0psYkxyaHh2TUUyS3NxZUN2OGVS?= =?utf-8?B?ZklvMlpEYlF4djRrajUyaXhsSFM5ZHZIY2RjNFN1NWY4VW5wTEpka09wSnp5?= =?utf-8?B?VmtZcTNoT2dQVTN0L05vU2tqNFk4cjNocEF4U2IzSkxvZHFSWlc5QjlwSUov?= =?utf-8?B?ZWgrK29xbWFNNmRaRVA2M1N5VDRsb0JlTVZwR3g1YWpVbTdXUk01QlhReWIr?= =?utf-8?B?eDhmeWJ2V3ovOERnekNGVThVSjRjaGJTU2tLY2tmQU1ISlRXVlJyc0dybnFZ?= =?utf-8?B?Z3hEZVhabVlOVUVBa1M5OS91KzJqbjZZT1c2SjlYYmVOb0tGb2cwQkVjTkQ5?= =?utf-8?B?TTF0SWdNNmVKNC91bEI4ZENuL3l3PT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /o1OhXdxHpYvn1S8V7Ci+HS4Xzf11MOM0AHS3YiFabyfF8t8fE/+emquv9bXhpj6Nol1Ciash8PcHgWmQVXwfedMNn6Rmy6vJ7lkckZhTtP7Vz9lrBIQgVh+wrc8y9aP3t9C4Ip+1NFQuIhq2h/8CRu3GGnCiob9wqyAfmFPqk8EYkfZ12DHe/HsYkQTAXG30ET4PQRvl/FrM3DKv7YNz53bZxNFJlPkCvWQozlf5nErrkZ3CGnqdloYJfEttJVnR+iJqnelpULXWvYSvSRJ92rpgAlxE4GYz5xZH2YCmN/UGkVylkdrM2zvP7bTvNr8Vs8SElsbEO70LqzS3EpnWm9mY5EruWxX9OZ1VkBv6mZYrsTqYRUIlgvh/BrsaEFiV2QddKT7L3+QO+9EUF2+BCkfgcAwhElGlhFUoK0aYkBYjluV1owlsJv9o37mtgWm X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:52.3057 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 54e878e9-3f2e-4e6c-9111-08de62630edd X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C716.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR10MB3982 X-Authority-Analysis: v=2.4 cv=XvL3+FF9 c=1 sm=1 tr=0 ts=6980ad63 cx=c_pps a=v0EG2prNrbZAmvYa4Zp51w==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=74FJOY0JTvdEtNMZuwsA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: CfgTKLzm5dyE6O6Y7mtZUwVkhse8fF9x X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX5et2rPhUcMoW w3RmkqNheDGiz1ZSKVqZ1P2UqadvVz7UWI2x2AQ5NKMuLy8tTGbxwREjnqeQb+jUmUezXlItR26 yz+eWyJpPLlhJgZX+6XHe+WPKgVqxLejdWq4WCZBm82ngLsya6JEsyRdK4ugs+luP+eYY+qGX4o 1uCEtSY/VynKroL2DNqSQngxCL8kxdZFjYCjrSDf7gO6bEe7dDNg9c4A7ZePvqMDLkI+jsPZsSw qEhLiKSNbpFRw88FLRDUX0eASuRj/JLlBR+HWpL1aZ9/ZF0sLSuC/fomwtKStIjrPaa/8+3zRD3 70x6TIARHf2RM+8lSE4+NUheldh8fjzkgA9gqj+WnyYLQl0cydF8eYEKp2YPNKXRLFn//l7rf8D tLlwJCDIjIHkGbueQIFSox3yiJt/uTzWkV1hgps843e/dwQZw3Eyq1eT+kdNZvA5GLgMbCuxZib 4bZPSaLATEEZ/OI3nrg== X-Proofpoint-ORIG-GUID: CfgTKLzm5dyE6O6Y7mtZUwVkhse8fF9x X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 Pixel pipes are made of an isp subdev (only main pipe) and a postproc subdev. This commit add a helper functions common to those 2 subdevs such as for handling format enumeration, set_selection handling, so that they do not have to be duplicated in the two subdeves. Signed-off-by: Alain Volmat --- .../media/platform/st/stm32/stm32-dcmipp/Makefile | 1 + .../st/stm32/stm32-dcmipp/dcmipp-pixelcommon.c | 180 +++++++++++++++++= ++++ .../st/stm32/stm32-dcmipp/dcmipp-pixelcommon.h | 41 +++++ 3 files changed, 222 insertions(+) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile b/driver= s/media/platform/st/stm32/stm32-dcmipp/Makefile index 159105fb40b8..54231569ed6f 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 stm32-dcmipp-y :=3D dcmipp-core.o dcmipp-common.o dcmipp-input.o dcmipp-by= teproc.o dcmipp-bytecap.o +stm32-dcmipp-y +=3D dcmipp-pixelcommon.o =20 obj-$(CONFIG_VIDEO_STM32_DCMIPP) +=3D stm32-dcmipp.o diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommo= n.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommon.c new file mode 100644 index 000000000000..142463bee226 --- /dev/null +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommon.c @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for STM32 Digital Camera Memory Interface Pixel Processor + * + * Copyright (C) STMicroelectronics SA 2026 + * Authors: Hugues Fruchet + * Alain Volmat + * for STMicroelectronics. + */ + +#include +#include +#include + +#include "dcmipp-common.h" +#include "dcmipp-pixelcommon.h" + +#define DCMIPP_ENT(id, pad) (1 << (2 * (id) + (pad))) +#define DCMIPP_ISP_SINK (DCMIPP_ENT(DCMIPP_ISP, 0)) +#define DCMIPP_ISP_SRC (DCMIPP_ENT(DCMIPP_ISP, 1)) +#define DCMIPP_ISP_INOUT (DCMIPP_ISP_SINK | DCMIPP_ISP_SRC) +#define DCMIPP_MAIN_POSTPROC_SINK (DCMIPP_ENT(DCMIPP_MAIN, 0)) +#define DCMIPP_MAIN_POSTPROC_SRC (DCMIPP_ENT(DCMIPP_MAIN, 1)) +#define DCMIPP_MAIN_POSTPROC_INOUT \ + (DCMIPP_MAIN_POSTPROC_SINK | DCMIPP_MAIN_POSTPROC_SRC) +#define DCMIPP_AUX_POSTPROC_SINK (DCMIPP_ENT(DCMIPP_AUX, 0)) +#define DCMIPP_AUX_POSTPROC_SRC (DCMIPP_ENT(DCMIPP_AUX, 1)) +#define DCMIPP_AUX_POSTPROC_INOUT \ + (DCMIPP_AUX_POSTPROC_SINK | DCMIPP_AUX_POSTPROC_SRC) +#define DCMIPP_ALL_POSTPROC_SINK \ + (DCMIPP_MAIN_POSTPROC_SINK | DCMIPP_AUX_POSTPROC_SINK) +#define DCMIPP_ALL_POSTPROC_INOUT \ + (DCMIPP_MAIN_POSTPROC_INOUT | DCMIPP_AUX_POSTPROC_INOUT) + +#define PIXMAP_MBUS(mbus, applicable_pipes) \ + { \ + .code =3D MEDIA_BUS_FMT_##mbus, \ + .pipes =3D applicable_pipes, \ + } +const struct dcmipp_pixelpipe_pix_map +dcmipp_pixel_formats_list[] =3D { + /* RGB formats */ + /* RGB565 / RGB888 */ + PIXMAP_MBUS(RGB565_2X8_LE, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(RGB565_1X16, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(RGB888_3X8, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(RGB888_1X24, DCMIPP_ALL_POSTPROC_INOUT | DCMIPP_ISP_INOUT), + /* YUV formats */ + PIXMAP_MBUS(YUYV8_2X8, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(UYVY8_1X16, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(YUV8_1X24, DCMIPP_ALL_POSTPROC_INOUT | DCMIPP_ISP_SRC), + /* GREY */ + PIXMAP_MBUS(Y8_1X8, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(Y10_1X10, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(Y12_1X12, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + PIXMAP_MBUS(Y14_1X14, DCMIPP_AUX_POSTPROC_SINK | DCMIPP_ISP_SINK), + /* Raw Bayer */ + /* Raw 8 */ + PIXMAP_MBUS(SBGGR8_1X8, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGBRG8_1X8, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGRBG8_1X8, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SRGGB8_1X8, DCMIPP_ISP_SINK), + /* Raw 10 */ + PIXMAP_MBUS(SBGGR10_1X10, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGBRG10_1X10, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGRBG10_1X10, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SRGGB10_1X10, DCMIPP_ISP_SINK), + /* Raw 12 */ + PIXMAP_MBUS(SBGGR12_1X12, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGBRG12_1X12, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGRBG12_1X12, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SRGGB12_1X12, DCMIPP_ISP_SINK), + /* Raw 14 */ + PIXMAP_MBUS(SBGGR14_1X14, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGBRG14_1X14, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SGRBG14_1X14, DCMIPP_ISP_SINK), + PIXMAP_MBUS(SRGGB14_1X14, DCMIPP_ISP_SINK), +}; + +const struct dcmipp_pixelpipe_pix_map * +dcmipp_pixelpipe_pix_map_by_code(__u32 code, unsigned int id, unsigned int= pad) +{ + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(dcmipp_pixel_formats_list); i++) { + if (dcmipp_pixel_formats_list[i].code =3D=3D code && + dcmipp_pixel_formats_list[i].pipes & DCMIPP_ENT(id, pad)) + return &dcmipp_pixel_formats_list[i]; + } + + return NULL; +} + +int dcmipp_pixelpipe_enum_mbus_code(unsigned int id, + struct v4l2_subdev_mbus_code_enum *code) +{ + unsigned int index =3D code->index; + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(dcmipp_pixel_formats_list); i++) { + if (!(dcmipp_pixel_formats_list[i].pipes & + DCMIPP_ENT(id, code->pad))) + continue; + + if (index =3D=3D 0) + break; + + index--; + } + + if (i =3D=3D ARRAY_SIZE(dcmipp_pixel_formats_list)) + return -EINVAL; + + code->code =3D dcmipp_pixel_formats_list[i].code; + + return 0; +} + +int dcmipp_pixelpipe_enum_frame_size(unsigned int id, + struct v4l2_subdev_frame_size_enum *fse) +{ + const struct dcmipp_pixelpipe_pix_map *vpix; + + if (fse->index) + return -EINVAL; + + /* Only accept code in the pix map table */ + vpix =3D dcmipp_pixelpipe_pix_map_by_code(fse->code, id, fse->pad); + if (!vpix) + return -EINVAL; + + fse->min_width =3D DCMIPP_FRAME_MIN_WIDTH; + fse->max_width =3D DCMIPP_FRAME_MAX_WIDTH; + fse->min_height =3D DCMIPP_FRAME_MIN_HEIGHT; + fse->max_height =3D DCMIPP_FRAME_MAX_HEIGHT; + + return 0; +} + +int dcmipp_pixelpipe_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_selection *s) +{ + struct v4l2_mbus_framefmt *sink_fmt; + + if (IS_SRC(s->pad)) + return -EINVAL; + + switch (s->target) { + case V4L2_SEL_TGT_CROP: + case V4L2_SEL_TGT_COMPOSE_BOUNDS: + case V4L2_SEL_TGT_COMPOSE_DEFAULT: + s->r =3D *v4l2_subdev_state_get_crop(state, s->pad); + break; + case V4L2_SEL_TGT_CROP_BOUNDS: + case V4L2_SEL_TGT_CROP_DEFAULT: + sink_fmt =3D v4l2_subdev_state_get_format(state, s->pad); + s->r.top =3D 0; + s->r.left =3D 0; + s->r.width =3D sink_fmt->width; + s->r.height =3D sink_fmt->height; + break; + case V4L2_SEL_TGT_COMPOSE: + s->r =3D *v4l2_subdev_state_get_compose(state, s->pad); + break; + default: + return -EINVAL; + } + + return 0; +} + +__u32 dcmipp_pixelpipe_src_format(__u32 input_format) +{ + if (input_format >=3D MEDIA_BUS_FMT_Y8_1X8 && + input_format < MEDIA_BUS_FMT_SBGGR8_1X8) + return MEDIA_BUS_FMT_YUV8_1X24; + + return MEDIA_BUS_FMT_RGB888_1X24; +} diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommo= n.h b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommon.h new file mode 100644 index 000000000000..db29e1fe939e --- /dev/null +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelcommon.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Driver for STM32 Digital Camera Memory Interface Pixel Processor + * + * Copyright (C) STMicroelectronics SA 2026 + * Authors: Hugues Fruchet + * Alain Volmat + * for STMicroelectronics. + */ + +#ifndef _DCMIPP_PIXELCOMMON_H +#define _DCMIPP_PIXELCOMMON_H + +#define IS_SINK(pad) (!(pad)) +#define IS_SRC(pad) ((pad)) + +#define DCMIPP_ISP 0 +#define DCMIPP_MAIN 1 +#define DCMIPP_AUX 2 + +struct dcmipp_pixelpipe_pix_map { + __u32 code; + __u32 pipes; +}; + +const struct dcmipp_pixelpipe_pix_map * +dcmipp_pixelpipe_pix_map_by_code(__u32 code, unsigned int id, unsigned int= pad); + +int dcmipp_pixelpipe_enum_mbus_code(unsigned int id, + struct v4l2_subdev_mbus_code_enum *code); + +int dcmipp_pixelpipe_enum_frame_size(unsigned int id, + struct v4l2_subdev_frame_size_enum *fse); + +int dcmipp_pixelpipe_get_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_selection *s); + +__u32 dcmipp_pixelpipe_src_format(__u32 input_format); + +#endif --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A0D136A012; Mon, 2 Feb 2026 13:58:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; cv=fail; b=jM6KvpaTEkX5thcpGk5URVsVSuFScH4bZ0vaGfNFSLr/Qyl75mLwiKju6TzwvIhjI/PIZdGJPRtnJM/MIeM7mhRsIaJaTCf7Yh4kuxWOQshT3RT9yi6dOFeNu8NJ8dG7gjbH0h5JHoU5JbZHdYN++Kopr7BJGAxaL7n2+mktdRY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; c=relaxed/simple; bh=xls2GFaFl8RwD7O61Kza8/8Kffsrdcf7JYyHlFkHSHw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=mO5iLdyWgKMcoP10KRZoeabRroPh6YvvMTZpXwJxvzeMoNwnNoyFJ6Mt7+firvmGU6FTQtpB/mgoZRfq/ycHMZRun0J0iAu9o5yvzLNs8DMnAV6hqhk7KCi3K7vQJueKPV+2YxvHqal0jaMhKYq2eZrriaeZcxSEzFhMcGn6nGE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=AWZRye9c; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="AWZRye9c" Received: from pps.filterd (m0369458.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DmTNo2371893; Mon, 2 Feb 2026 14:57:57 +0100 Received: from am0pr02cu008.outbound.protection.outlook.com (mail-westeuropeazon11013006.outbound.protection.outlook.com [52.101.72.6]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1v654dfp-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:56 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dbKLzsjTUkv8McwYzAQhuw468dHpgTRLgzOe1Rqlm8xxRc7YMbfeS/EhUXM4WWKk1TnuSHVTBKEBZihpmIVN+1ckiV7twmMKjcZYOxmSBtfbJjwzauOpdHA0GNri2j9LySnvzV54RhdBhH2DUw84b5nWfJqQbOf7tvRsJH9Q3Gs49gKmPBc1HpA9nMdv7oA/exyl0Pf9mtM2TefQTS6U4hb1XH1VWFpvRAOjwNlJxvfH0YC7KErZNhXyNi4V0KFRItl6mKGyOMeyUd2hmPChKzOUsJhkoALUqMEqDTyPNcGmAZJd0wBhN9Iz3/GjC67GEZep1SDc9FtTGIw78FY+dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=UDXs3NUVh4lqsy31xUUf4fYjv3K6xAsm/8geEs0rf6k=; b=G6IkY9tn6RK7TYsgFVeOUsyqfLUS+/7zO9+iSpd0iAnEshPUwup9pxJXY5eOoXZr4P1kh6CYW85GAqSwuXkhR6+S25bZRwHtvBTVDxHHpQFNAYHOluX3mgaynPA2WuW8JJyTOEEDRtLDrll7ds3wDGBr6fUxviYybkdnjTM+N71sVeubUjc+ZzNjNiBE8K9Tm+jS9MpxNY1UvB1NENrCwM8ya2GBKC68Io4wkKfQqjvMpXQfkBCEKuxxg08yTKLtyFbXrUrxw/uMrpvWWlnowL0t7gGDIdiVxvYFQfNEJxw6gxYJWMNXXItfH2/lYVOjFPB5JzmpxqYvOR/zyBnW/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UDXs3NUVh4lqsy31xUUf4fYjv3K6xAsm/8geEs0rf6k=; b=AWZRye9cHmCGGlkwxtexs4LJ5GRT/nt4dsxfXB5lfHtktW0UTA7goqAkYFSlepu7fQgUBU1CL+N603blCPIxOQwoWzwpuPdKb89ogI5UXlfJkAPWcNuB9qfhS0UoqtK/FjmJXHFg6/d/fOZGsMJ5eUY7NO3VBCSdwxK3kGxQuiPLDHU4/ry1qXTQ8lvoQ3pDYYvQxGr4TGSXIfLxKksukJxuN5ejWucoDyh3ysEd0E7XQbvGvLFxGflvZ8TUgres66vcZiWn6gRIFWIgLNV+ATYxeKbl1W0x3YSBnu2ijgWs5g1Es9G5FmvsdiaRtxKKwltbja9TEl+Sx8qAjCRVbA== Received: from CWLP265CA0435.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1d7::8) by DU4PR10MB8832.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:560::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:50 +0000 Received: from AMS0EPF0000019F.eurprd05.prod.outlook.com (2603:10a6:400:1d7:cafe::54) by CWLP265CA0435.outlook.office365.com (2603:10a6:400:1d7::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.15 via Frontend Transport; Mon, 2 Feb 2026 13:57:53 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019F.mail.protection.outlook.com (10.167.16.251) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:50 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:35 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:49 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:34 +0100 Subject: [PATCH 09/13] media: stm32: dcmipp: addition of a dcmipp-isp subdev Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-9-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019F:EE_|DU4PR10MB8832:EE_ X-MS-Office365-Filtering-Correlation-Id: 88c49902-704b-4025-4162-08de62630dcc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|7416014|376014|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QVZ6ZGRhbzhlckdpTDg2dnhWWjV1SzliMlpNNHdwQW1UZDFSOFJBb2t5MlIv?= =?utf-8?B?Q241VFJiK21ld3VhOGhqQjgrYWVPS29IckdneTNvZjFiWnZOQVQxdjBNbWFj?= =?utf-8?B?eUNwcENuTlpuRUk5UUNKQjB3VVJzdEc4MXZvN0RlcHdCdzR0Z3RCK25hRWkw?= =?utf-8?B?eUZhVUxaOFB2MHM3M1d5NVRZZ3JYTjkza0xMcWQxSzR1ZFZVbnIrTmd2TEdn?= =?utf-8?B?ZTh0MVNTaVFqUWQ0eGpKeXgzbE5tVmRrY09FbGFKT3JGQzJCOXJQbWFpUDRI?= =?utf-8?B?SWZxT2xHQnlibEZqWkVrUnRpdnhHdTArTkF0aCtTeVZSNFpRKzk4OVptV0h0?= =?utf-8?B?eHd5RXY4WVE2bXBRUFV1cVQ3ckV1ZDFDZ1ByN0NhdGpYSDlHWTNiWmRYWHJZ?= =?utf-8?B?RUpYbU96WjVrL1NsNUFGRDl6a2NsT0lxQ0F0NEtxcmNjMDZTTlpmWm84ak1N?= =?utf-8?B?NWF1TnVWeTA3VlozSFV5WDFqdDJpWXlZbjRDREczN0psVUN0a0JoZW56VHNB?= =?utf-8?B?WkNwZ1g4MzZVa29zaVBaNXVBUkZzKzMvbUZCSWx2VUxiM0V1ZktoekZYSHli?= =?utf-8?B?TUdIWGJaUDdEdXo1aUxWMVZxT2xMQ0tFSWg3WTRhdEV3VnlPWFMvL0o0dTBW?= =?utf-8?B?bEJzZlhUQzdvY2lCcU9XTy9kM2JOdVJLRm1YVVE3ZDJvZzBmN2JabzhzOUg3?= =?utf-8?B?TW16UjJzdzhCak4wYm8zdmVtZGhFUjdzSzRJVEpBdmlhYXdOdUUrbmphcklI?= =?utf-8?B?a2lXOFJWK1NhczlBUCs1WHd4cjVwNVZmdDR2N1lxeWpWV2UyUmJXV3dFcU1l?= =?utf-8?B?ZmV0ZitJUTl5aks1dldJeUxmVWt3ckJYaWdhMHJFUGhaVm9yak1adVRzbGlo?= =?utf-8?B?RWo4YVRIeXBrcElBRU90UngwM0lFMEVLSDRkNnpOY3VySnBKbDdONWdHYWMx?= =?utf-8?B?U1FzaERSeHdRRVlJdmdGVmVxYjNnbTRSYS9MelE1czRZbWJIVFlaNk5Delky?= =?utf-8?B?ek9jS1FBc3FrdldCNUFzZVhiMWdqcUdzUERmMVhCZzBWcktCR1JFS1NQWEU0?= =?utf-8?B?dmRBck04RzFrTFRReDBnTHdlVUl3REZ5eFdlWmRnSTB4S1hvNlE4VHhZOEI2?= =?utf-8?B?R1lCOWZnZUZCMGtzQWd3UFVVVW13OXh3c01FWnN0cVZmL1RLMGF0SUl5TjR4?= =?utf-8?B?KytWbGRoS2ZReUxjWU5UZ3VPKzZCcnJqZkVoMVJTaXlXMWFWdXJOVlRnb1hT?= =?utf-8?B?WThYM05WUnRIZ0tSNVA2S2RpTGhZQnA0bWVIUEd1cFAyYWlaOGU2djB0ZVN0?= =?utf-8?B?cTFMMmpKblFKOUNLTExzNlJPY2pKRUdzVEp4WkNXS1Aya2NLeEtIZnFDNTRJ?= =?utf-8?B?djVSTkhCd1ZVUFJBUEJZSm1zTmlOWHNQK05ISTUzRUI2MFN4SEJEcjR6NlpQ?= =?utf-8?B?Ynp6emZVSXJqR2M4QzNzeDM0eU1QVUp6d0J1bFZaMEhkelducmxHRk1aZm4y?= =?utf-8?B?dVZhOWJwN0JTck9mVlJ1Mmt5aFlEcFZXaWhGaXlqMjlvZERsV1ZvM0dRVS92?= =?utf-8?B?MFh5dkhjK1o2cjQzSkpiUGtWQ2haV1FadGxEQW5ibWgxLzZOMUJ5cnJ4RWV6?= =?utf-8?B?Nm1heDB3VUdUWlpUVEhFN1ZoZ3NRd2o5cUZEUmZMMklJcklHRHZTeFAyUVhW?= =?utf-8?B?RUp1enBkZkRKdit3N2t5TzVnbFozdzgvMThkdUx0YkFzc2lNelVETi9yczZZ?= =?utf-8?B?M3diWkhTVzFTWnF0NmkyY3R0Z1dMaVlUMjZlbFpiSEFkM3dZbVl2em5DS3Jj?= =?utf-8?B?NkEzWC9SZzZtRVh6MTFwSXEycDFUM2FQell3cUJrN01UK3UzRzlNUWxMYkJD?= =?utf-8?B?eDlhYjhUQXZ1TkZkeVQ2U3FmNWRQT05HaXZiUzJGd25tbkhMZnFZdjJXQkxG?= =?utf-8?B?RFpzWXhLbEg1czVXdFZURVBoWURQcmdtdWlHNU9JU3BZaWJoaE1jdkdad3Iy?= =?utf-8?B?NmZCRUFjNFN4a3pHVzlrbXcvTkxMSjh6YTFweUtPcjVUNEtYWXR5MHRxRGZ3?= =?utf-8?B?dEhwSkdQaUdZLy8vc2o3NkRiUXg2TTVPSmZUR1QzdmcrVy9ncTFUUTN4eHFq?= =?utf-8?B?YkhNendKTXBGZFBhcEMvK3ZJbklCV3JjQmRpcGRDMWpVcTVZNFdlNnFsSkZI?= =?utf-8?B?bUh6OUk1bTQ0RU83UXhzSHBWenJxYmhQcXUzcU5aSi9rdnJmVlRXZVR5eGtC?= =?utf-8?B?bVM0WEVJcUFiT2JVL2lZcHhQbFhnPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(7416014)(376014)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NKjCx2UBW4shnc+SEFroLe81oKTTtO6X8wW1KtYRcZkELgeLwiw2/6q9mQzJVDmuL0JKvA7LrCzvxZek2bI41wfLPe3n2Vzz7Jn7dV+to55wNpLb9tEkXbijFdYmqzuzZ/SBx2kcrxZyAkPHbS2HqfdZOvsdCha78bC4FMRey1B5xEZe/z0oI/Kh9eYwSxLMFii6Fwl62oqz8ELq59GLYS6QqxfD6xao/LWHNxw6iu0OpBdCy249g1U5wJX2ggle/NEWfIrzNLzwRp5MeYReBNuAtcCdizubZZw3P8GMSU4tNkRtV0NQN9pSrTO56egaGjSHHTreR3UYFwOdgCHfFw9Fy0bNtl2ug56TzyM8N+vDrtQWa3Ko22uPInx6HrizOZ0l0+NFuvOy6dlxbroHEvZBoUSYf70acIJN8HzPDnakvtLnNKl8PmhzGZFapLHg X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:50.5075 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 88c49902-704b-4025-4162-08de62630dcc X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019F.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR10MB8832 X-Authority-Analysis: v=2.4 cv=XvL3+FF9 c=1 sm=1 tr=0 ts=6980ad64 cx=c_pps a=q0G+tp7u1Bk0++rDIKb9hg==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=kGmWPbZ9RRP9_EoALOUA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: LuOKlP2xjPVNGInZjOvwar7y_Ak20Kpf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX39FsIJW0p6lM lnSMaNbw0QwStQUYeFC7eLeGwhhhcdtNjqn3UPZTsgFdkp5ODIS8+kvtLCsyIzkxz/vzq2M660+ sUH6jm5Bfarlzam+IHPsPE0AJDJjZVBXgjQlh9+CUwAwy4dQvkxxzr/MmKem1+aL7PDrYoPuNrC 8SeuWPT4rDts5aZjWLT+wkiW4zHjvv7n7nfZ/qbav2RMk2xHAIN6UQP7EWEdxu4nA8TiazCjmzA qa3B9AtZ5pB6L/+NceswkpiUdxYT5CUFuY0c0+QjOwo827ba+nY4abF2U5zegajrdq3Z+ekXe79 RQGoiapcggp1yBxFPAJDd+7B+VTaeBQPz8hitN+Ytf0xih93P7dZaOtop+FtU7nt9mHUXjYj48J JXP3+id1dptyJ420S61xERh/7I+TWU3grhJUscAI8yexojbaQjlL4MpsudxyldoE66fTaZERMb/ Hq4tzz36QrwuJbF9yxg== X-Proofpoint-ORIG-GUID: LuOKlP2xjPVNGInZjOvwar7y_Ak20Kpf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 The ISP subdev is the first element after input of the main pipeline. Part (static configuration) of this block is done via this subdev while other configuration done on a per-frame basis will be done via a output metadata device attached to this subdev. This subdev handled the following features of the ISP block: - statistic removal (top / bottom of the frame) - decimation - demosaicing - control of frame export to the aux pipeline Signed-off-by: Alain Volmat --- .../media/platform/st/stm32/stm32-dcmipp/Makefile | 2 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 3 + .../platform/st/stm32/stm32-dcmipp/dcmipp-isp.c | 482 +++++++++++++++++= ++++ 3 files changed, 486 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile b/driver= s/media/platform/st/stm32/stm32-dcmipp/Makefile index 54231569ed6f..a708534a51af 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 stm32-dcmipp-y :=3D dcmipp-core.o dcmipp-common.o dcmipp-input.o dcmipp-by= teproc.o dcmipp-bytecap.o -stm32-dcmipp-y +=3D dcmipp-pixelcommon.o +stm32-dcmipp-y +=3D dcmipp-pixelcommon.o dcmipp-isp.o =20 obj-$(CONFIG_VIDEO_STM32_DCMIPP) +=3D stm32-dcmipp.o diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index ee9f36268e64..e04fde86550a 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -282,5 +282,8 @@ void dcmipp_byteproc_ent_release(struct dcmipp_ent_devi= ce *ved); struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, struct dcmipp_device *dcmipp); void dcmipp_bytecap_ent_release(struct dcmipp_ent_device *ved); +struct dcmipp_ent_device *dcmipp_isp_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp); +void dcmipp_isp_ent_release(struct dcmipp_ent_device *ved); =20 #endif diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-isp.c b/dr= ivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-isp.c new file mode 100644 index 000000000000..dfd2b10ffa50 --- /dev/null +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-isp.c @@ -0,0 +1,482 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for STM32 Digital Camera Memory Interface Pixel Processor + * + * Copyright (C) STMicroelectronics SA 2026 + * Authors: Hugues Fruchet + * Alain Volmat + * for STMicroelectronics. + */ + +#include +#include +#include + +#include "dcmipp-common.h" +#include "dcmipp-pixelcommon.h" + +#define DCMIPP_P1FSCR 0x804 +#define DCMIPP_P1FSCR_PIPEDIFF BIT(18) + +#define DCMIPP_P1SRCR 0x820 +#define DCMIPP_P1SRCR_LASTLINE_SHIFT 0 +#define DCMIPP_P1SRCR_FIRSTLINEDEL_SHIFT 12 +#define DCMIPP_P1SRCR_CROPEN BIT(15) + +#define DCMIPP_P1DECR 0x830 +#define DCMIPP_P1DECR_ENABLE BIT(0) +#define DCMIPP_P1DECR_HDEC_SHIFT 1 +#define DCMIPP_P1DECR_VDEC_SHIFT 3 + +#define DCMIPP_P1DMCR 0x870 +#define DCMIPP_P1DMCR_ENABLE BIT(0) +#define DCMIPP_P1DMCR_TYPE_SHIFT 1 +#define DCMIPP_P1DMCR_TYPE_MASK GENMASK(2, 1) +#define DCMIPP_P1DMCR_TYPE_RGGB 0x0 +#define DCMIPP_P1DMCR_TYPE_GRBG 0x1 +#define DCMIPP_P1DMCR_TYPE_GBRG 0x2 +#define DCMIPP_P1DMCR_TYPE_BGGR 0x3 + +#define ISP_MEDIA_BUS_SINK_FMT_DEFAULT MEDIA_BUS_FMT_RGB565_1X16 +#define ISP_MEDIA_BUS_SRC_FMT_DEFAULT MEDIA_BUS_FMT_RGB888_1X24 + +struct dcmipp_isp_device { + struct dcmipp_ent_device ved; + struct v4l2_subdev sd; + struct device *dev; + + void __iomem *regs; +}; + +static const struct v4l2_mbus_framefmt fmt_default =3D { + .width =3D DCMIPP_FMT_WIDTH_DEFAULT, + .height =3D DCMIPP_FMT_HEIGHT_DEFAULT, + .code =3D ISP_MEDIA_BUS_SINK_FMT_DEFAULT, + .field =3D V4L2_FIELD_NONE, + .colorspace =3D DCMIPP_COLORSPACE_DEFAULT, + .ycbcr_enc =3D DCMIPP_YCBCR_ENC_DEFAULT, + .quantization =3D DCMIPP_QUANTIZATION_DEFAULT, + .xfer_func =3D DCMIPP_XFER_FUNC_DEFAULT, +}; + +static inline unsigned int dcmipp_isp_set_compose(__u32 size, __u32 req) +{ + unsigned int i =3D 0; + + if (req > size) + return size; + + /* Maximum decimation factor is 8 */ + while (size > req && i++ < 3) + size /=3D 2; + + return size; +} + +static void dcmipp_isp_adjust_fmt(struct v4l2_mbus_framefmt *fmt, u32 pad) +{ + /* Only accept code in the pix map table */ + if (!dcmipp_pixelpipe_pix_map_by_code(fmt->code, DCMIPP_ISP, pad)) + fmt->code =3D IS_SRC(pad) ? ISP_MEDIA_BUS_SRC_FMT_DEFAULT : + ISP_MEDIA_BUS_SINK_FMT_DEFAULT; + + fmt->width =3D clamp_t(u32, fmt->width, DCMIPP_FRAME_MIN_WIDTH, + DCMIPP_FRAME_MAX_WIDTH) & ~1; + fmt->height =3D clamp_t(u32, fmt->height, DCMIPP_FRAME_MIN_HEIGHT, + DCMIPP_FRAME_MAX_HEIGHT); + + if (fmt->field =3D=3D V4L2_FIELD_ANY || fmt->field =3D=3D V4L2_FIELD_ALTE= RNATE) + fmt->field =3D V4L2_FIELD_NONE; + + dcmipp_colorimetry_clamp(fmt); +} + +static int dcmipp_isp_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + for (unsigned int i =3D 0; i < sd->entity.num_pads; i++) { + struct v4l2_mbus_framefmt *mf; + + mf =3D v4l2_subdev_state_get_format(state, i); + *mf =3D fmt_default; + mf->code =3D IS_SRC(i) ? ISP_MEDIA_BUS_SRC_FMT_DEFAULT : + ISP_MEDIA_BUS_SINK_FMT_DEFAULT; + + if (IS_SINK(i)) { + struct v4l2_rect r =3D { + .top =3D 0, + .left =3D 0, + .width =3D DCMIPP_FMT_WIDTH_DEFAULT, + .height =3D DCMIPP_FMT_HEIGHT_DEFAULT, + }; + + *v4l2_subdev_state_get_crop(state, i) =3D r; + *v4l2_subdev_state_get_compose(state, i) =3D r; + } + } + + return 0; +} + +static int dcmipp_isp_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_mbus_code_enum *code) +{ + return dcmipp_pixelpipe_enum_mbus_code(DCMIPP_ISP, code); +} + +static int dcmipp_isp_enum_frame_size(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_frame_size_enum *fse) +{ + return dcmipp_pixelpipe_enum_frame_size(DCMIPP_ISP, fse); +} + +static int dcmipp_isp_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_format *fmt) +{ + if (v4l2_subdev_is_streaming(sd)) + return -EBUSY; + + dcmipp_isp_adjust_fmt(&fmt->format, fmt->pad); + + if (IS_SINK(fmt->pad)) { + struct v4l2_mbus_framefmt *src_fmt =3D + v4l2_subdev_state_get_format(state, 1); + struct v4l2_rect r =3D { + .top =3D 0, + .left =3D 0, + .width =3D fmt->format.width, + .height =3D fmt->format.height, + }; + + /* Adjust SINK pad crop/compose */ + *v4l2_subdev_state_get_crop(state, 0) =3D r; + *v4l2_subdev_state_get_compose(state, 0) =3D r; + + /* Forward format to SRC pads */ + *src_fmt =3D fmt->format; + src_fmt->code =3D dcmipp_pixelpipe_src_format(fmt->format.code); + *v4l2_subdev_state_get_format(state, 2) =3D *src_fmt; + } else { + struct v4l2_mbus_framefmt *sink_fmt =3D + v4l2_subdev_state_get_format(state, 0); + struct v4l2_rect *compose =3D + v4l2_subdev_state_get_compose(state, 0); + + fmt->format =3D *sink_fmt; + fmt->format.code =3D dcmipp_pixelpipe_src_format(sink_fmt->code); + if (compose->width && compose->height) { + fmt->format.width =3D compose->width; + fmt->format.height =3D compose->height; + } + /* Set to the 2nd SRC pad */ + *v4l2_subdev_state_get_format(state, fmt->pad =3D=3D 1 ? 2 : 1) =3D + fmt->format; + } + + /* Update the selected pad format */ + *v4l2_subdev_state_get_format(state, fmt->pad) =3D fmt->format; + + return 0; +} + +static void dcmipp_isp_adjust_crop(struct v4l2_rect *r, + const struct v4l2_mbus_framefmt *fmt) +{ + struct v4l2_rect src_rect =3D { + .top =3D 0, + .left =3D 0, + .width =3D fmt->width, + .height =3D fmt->height, + }; + struct v4l2_rect crop_min =3D { + .top =3D 8, + .left =3D 0, + .width =3D fmt->width, + .height =3D 1, + }; + + /* Disallow rectangles smaller than the minimal one. */ + v4l2_rect_set_min_size(r, &crop_min); + v4l2_rect_map_inside(r, &src_rect); +} + +static int dcmipp_isp_set_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_selection *s) +{ + struct dcmipp_isp_device *isp =3D v4l2_get_subdevdata(sd); + struct v4l2_mbus_framefmt *sink_fmt, *src_fmt; + struct v4l2_rect *crop, *compose; + + if (IS_SRC(s->pad)) + return -EINVAL; + + if (v4l2_subdev_is_streaming(sd)) + return -EBUSY; + + crop =3D v4l2_subdev_state_get_crop(state, s->pad); + compose =3D v4l2_subdev_state_get_compose(state, s->pad); + + switch (s->target) { + case V4L2_SEL_TGT_CROP: + sink_fmt =3D v4l2_subdev_state_get_format(state, s->pad); + dcmipp_isp_adjust_crop(&s->r, sink_fmt); + + *crop =3D s->r; + *compose =3D s->r; + + dev_dbg(isp->dev, "s_selection: crop (%d,%d)/%ux%u\n", + crop->left, crop->top, crop->width, crop->height); + break; + case V4L2_SEL_TGT_COMPOSE: + s->r.top =3D 0; + s->r.left =3D 0; + s->r.width =3D dcmipp_isp_set_compose(crop->width, s->r.width); + s->r.height =3D dcmipp_isp_set_compose(crop->height, s->r.height); + *compose =3D s->r; + + dev_dbg(isp->dev, "s_selection: compose (%d,%d)/%ux%u\n", + compose->left, compose->top, + compose->width, compose->height); + break; + default: + return -EINVAL; + } + + /* Update the source pad size */ + src_fmt =3D v4l2_subdev_state_get_format(state, 1); + src_fmt->width =3D s->r.width; + src_fmt->height =3D s->r.height; + + return 0; +} + +#define STM32_DCMIPP_IS_BAYER_VARIANT(code, variant) \ + ((code) =3D=3D MEDIA_BUS_FMT_S##variant##8_1X8 || \ + (code) =3D=3D MEDIA_BUS_FMT_S##variant##10_1X10 || \ + (code) =3D=3D MEDIA_BUS_FMT_S##variant##12_1X12 || \ + (code) =3D=3D MEDIA_BUS_FMT_S##variant##14_1X14 || \ + (code) =3D=3D MEDIA_BUS_FMT_S##variant##16_1X16) +static void dcmipp_isp_config_demosaicing(struct dcmipp_isp_device *isp, + struct v4l2_subdev_state *state) +{ + __u32 code =3D v4l2_subdev_state_get_format(state, 0)->code; + unsigned int val =3D 0; + + /* Disable demosaicing */ + reg_clear(isp, DCMIPP_P1DMCR, + DCMIPP_P1DMCR_ENABLE | DCMIPP_P1DMCR_TYPE_MASK); + + /* Only perform demosaicing if format is bayer */ + if (code < MEDIA_BUS_FMT_SBGGR8_1X8 || code >=3D MEDIA_BUS_FMT_JPEG_1X8) + return; + + dev_dbg(isp->dev, "Input is RawBayer, enable Demosaicing\n"); + + if (STM32_DCMIPP_IS_BAYER_VARIANT(code, BGGR)) + val =3D DCMIPP_P1DMCR_TYPE_BGGR << DCMIPP_P1DMCR_TYPE_SHIFT; + else if (STM32_DCMIPP_IS_BAYER_VARIANT(code, GBRG)) + val =3D DCMIPP_P1DMCR_TYPE_GBRG << DCMIPP_P1DMCR_TYPE_SHIFT; + else if (STM32_DCMIPP_IS_BAYER_VARIANT(code, GRBG)) + val =3D DCMIPP_P1DMCR_TYPE_GRBG << DCMIPP_P1DMCR_TYPE_SHIFT; + else if (STM32_DCMIPP_IS_BAYER_VARIANT(code, RGGB)) + val =3D DCMIPP_P1DMCR_TYPE_RGGB << DCMIPP_P1DMCR_TYPE_SHIFT; + + val |=3D DCMIPP_P1DMCR_ENABLE; + + reg_set(isp, DCMIPP_P1DMCR, val); +} + +static bool dcmipp_isp_is_aux_output_enabled(struct dcmipp_isp_device *isp) +{ + struct media_link *link; + + for_each_media_entity_data_link(isp->ved.ent, link) { + if (link->source !=3D &isp->ved.pads[2]) + continue; + + if (!(link->flags & MEDIA_LNK_FL_ENABLED)) + continue; + + if (!strcmp(link->sink->entity->name, "dcmipp_aux_postproc")) + return true; + } + + return false; +} + +static void dcmipp_isp_config_decimation(struct dcmipp_isp_device *isp, + struct v4l2_subdev_state *state) +{ + struct v4l2_rect *crop =3D v4l2_subdev_state_get_crop(state, 0); + struct v4l2_rect *compose =3D v4l2_subdev_state_get_compose(state, 0); + u32 decr; + + decr =3D (fls(crop->width / compose->width) - 1) << DCMIPP_P1DECR_HDEC_SH= IFT | + (fls(crop->height / compose->height) - 1) << DCMIPP_P1DECR_VDEC_SH= IFT; + if (decr) + decr |=3D DCMIPP_P1DECR_ENABLE; + + reg_write(isp, DCMIPP_P1DECR, decr); +} + +static int dcmipp_isp_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 pad, u64 streams_mask) +{ + struct dcmipp_isp_device *isp =3D v4l2_get_subdevdata(sd); + struct v4l2_rect *crop =3D v4l2_subdev_state_get_crop(state, 0); + struct v4l2_subdev *s_subdev; + struct media_pad *s_pad; + int ret; + + /* Perform configuration only if no other pad is enabled */ + if (sd->enabled_pads) + return 0; + + /* Get source subdev */ + s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); + if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) + return -EINVAL; + s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); + + /* Check if link between ISP & Pipe2 postproc is enabled */ + if (dcmipp_isp_is_aux_output_enabled(isp)) + reg_clear(isp, DCMIPP_P1FSCR, DCMIPP_P1FSCR_PIPEDIFF); + else + reg_set(isp, DCMIPP_P1FSCR, DCMIPP_P1FSCR_PIPEDIFF); + + /* Configure Statistic Removal */ + crop =3D v4l2_subdev_state_get_crop(state, 0); + reg_write(isp, DCMIPP_P1SRCR, + ((crop->top << DCMIPP_P1SRCR_FIRSTLINEDEL_SHIFT) | + (crop->height << DCMIPP_P1SRCR_LASTLINE_SHIFT) | + DCMIPP_P1SRCR_CROPEN)); + + /* Configure Decimation */ + dcmipp_isp_config_decimation(isp, state); + + /* Configure Demosaicing */ + dcmipp_isp_config_demosaicing(isp, state); + + ret =3D v4l2_subdev_enable_streams(s_subdev, s_pad->index, BIT_ULL(0)); + if (ret < 0) { + dev_err(isp->dev, + "failed to start source subdev streaming (%d)\n", ret); + return ret; + } + + return 0; +} + +static int dcmipp_isp_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 pad, u64 streams_mask) +{ + struct dcmipp_isp_device *isp =3D v4l2_get_subdevdata(sd); + struct v4l2_subdev *s_subdev; + struct media_pad *s_pad; + int ret; + + /* Don't do anything if there are still other pads enabled */ + if ((sd->enabled_pads & ~BIT(pad))) + return 0; + + /* Get source subdev */ + s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); + if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) + return -EINVAL; + s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); + + /* Disable all blocks */ + reg_write(isp, DCMIPP_P1SRCR, 0); + reg_write(isp, DCMIPP_P1DECR, 0); + reg_write(isp, DCMIPP_P1DMCR, 0); + + ret =3D v4l2_subdev_disable_streams(s_subdev, s_pad->index, BIT_ULL(0)); + if (ret < 0) { + dev_err(isp->dev, + "failed to start source subdev streaming (%d)\n", ret); + return ret; + } + + return 0; +} + +static const struct v4l2_subdev_pad_ops dcmipp_isp_pad_ops =3D { + .enum_mbus_code =3D dcmipp_isp_enum_mbus_code, + .enum_frame_size =3D dcmipp_isp_enum_frame_size, + .get_fmt =3D v4l2_subdev_get_fmt, + .set_fmt =3D dcmipp_isp_set_fmt, + .get_selection =3D dcmipp_pixelpipe_get_selection, + .set_selection =3D dcmipp_isp_set_selection, + .enable_streams =3D dcmipp_isp_enable_streams, + .disable_streams =3D dcmipp_isp_disable_streams, +}; + +static const struct v4l2_subdev_video_ops dcmipp_isp_video_ops =3D { + .s_stream =3D v4l2_subdev_s_stream_helper, +}; + +static const struct v4l2_subdev_ops dcmipp_isp_ops =3D { + .pad =3D &dcmipp_isp_pad_ops, + .video =3D &dcmipp_isp_video_ops, +}; + +static void dcmipp_isp_release(struct v4l2_subdev *sd) +{ + struct dcmipp_isp_device *isp =3D v4l2_get_subdevdata(sd); + + kfree(isp); +} + +static const struct v4l2_subdev_internal_ops dcmipp_isp_int_ops =3D { + .init_state =3D dcmipp_isp_init_state, + .release =3D dcmipp_isp_release, +}; + +void dcmipp_isp_ent_release(struct dcmipp_ent_device *ved) +{ + struct dcmipp_isp_device *isp =3D + container_of(ved, struct dcmipp_isp_device, ved); + + dcmipp_ent_sd_unregister(ved, &isp->sd); +} + +struct dcmipp_ent_device *dcmipp_isp_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp) +{ + struct dcmipp_isp_device *isp; + const unsigned long pads_flag[] =3D { + MEDIA_PAD_FL_SINK, MEDIA_PAD_FL_SOURCE, + MEDIA_PAD_FL_SOURCE, + }; + int ret; + + /* Allocate the isp struct */ + isp =3D kzalloc(sizeof(*isp), GFP_KERNEL); + if (!isp) + return ERR_PTR(-ENOMEM); + + isp->regs =3D dcmipp->regs; + + /* Initialize ved and sd */ + ret =3D dcmipp_ent_sd_register(&isp->ved, &isp->sd, + &dcmipp->v4l2_dev, entity_name, + MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER, + ARRAY_SIZE(pads_flag), pads_flag, + &dcmipp_isp_int_ops, &dcmipp_isp_ops, + NULL, NULL); + if (ret) { + kfree(isp); + return ERR_PTR(ret); + } + + isp->ved.dcmipp =3D dcmipp; + isp->dev =3D dcmipp->dev; + + return &isp->ved; +} --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx08-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EE6F236A032; Mon, 2 Feb 2026 13:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=91.207.212.93 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040697; cv=fail; b=tfbDWYbYKKi8dCICFQcIrTJbdCwxkx9MG5na3CzCFEsx+apON1w2d6H+vVJW3Tcm/d+Mm3rm1pMbi+wxOv2JjawTjkRTJoYSykhznEeNvC1MUTq0qTS6br+PuE2CwqkAbKnYIT/OwHo2cqolX2g968r+YgY4O5h/fTmLxJGSMxM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040697; c=relaxed/simple; bh=L5dX4qLuAgZ7KkmjQEWotN8iV6N9qIDGa2AtIH1YSeA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=AF7xcivG/bbn/mvTc7ga07WOixL3BcJy8H63XSctqstYbq8WCednaHgcIQ4ZLY4temOqhbHTmlz5O5dIWj18PLj4XToFzxLqrnp4ySUap9pFf0spkZuoUUTc1PSfk14JCIMFVZ4qCuJa/0cCJLfwlHDdQcIHhUBjlusHfWW1qBQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=VISlH8Ow; arc=fail smtp.client-ip=91.207.212.93 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="VISlH8Ow" Received: from pps.filterd (m0369457.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DtCE92975980; Mon, 2 Feb 2026 14:57:59 +0100 Received: from db3pr0202cu003.outbound.protection.outlook.com (mail-northeuropeazon11010018.outbound.protection.outlook.com [52.101.84.18]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1wjq45px-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:57:58 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cAVIvivjnhnumZCVQkSHnXDWL4eGGc3X410EpBQoDEV1PkEVvWlSzLa5/3ghIdYq2URK0DnyqXzEgFaE8IHpjr9SJCC2jdhHW8x/DFjtWebt4bgv25bbEdoq/Qyx8hRiS72oKMFOEU6OiS3Xo759MX8UKLNgWrQ/mneVukQv1PR3k1v520kddxFCVxyrmffUcxuqAhQXteJhD4/NBObMt8WYmOc2nK4MKIcgMlDjpVYjROTur9agWUBBGo7ifOOtkjwMpl42QM28o2jNazgGgHmW4lmS7ajcSMWONvXdBX3qAsYGxOS/OqxgkoQW23zCPbGQQ+14Y+y1shB/UwGc0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6CuO/sQuqWEWrS3o0n1r9GRLxcR+iIZqbpxDgAY8VmQ=; b=gEZ5NKqrvXO/BWK/VZ83VnZ1HpLRrM7yP2jqRxfPGaCmZVwy8LKW5Z05YMEy3DWxfipJ296UOG8UvomfLBMl5X5TP1HiUfozNwn70+9lXQQMSj8zF2u6WgdNP/uy8cB6AxAgNwsv13dBKTfiRJegH4yGL9jXVfGA5pi0HM0WDHDnQmZgvzeoomev/fQs8DUOpubDzuGquyiBxlfQP8j9jDPUKZmAh/ivTpXxMlzTIOo9aKn87LuHbZkWsjMM82uIrSCuDVRyvfTs0vhxz/VwfoGEoIaeBeMlVw+eEkAMWTAPoQ9thudravDQze/eVFUCxGKMS9aw4/uBixE15BUXHA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6CuO/sQuqWEWrS3o0n1r9GRLxcR+iIZqbpxDgAY8VmQ=; b=VISlH8OwhnEt0H/JsxAUgUZLdou3HuB6Iu5aDU/lEqJoDx4+zzOMnj/C9Smc4FKVUMezF6W9Wwqvsl/HGOja9OWHVSB9fFlIiYNwdtuCV3IA5wLEAZAn9cnNjo+UyNQ+7Gxk9XPywSMdNDtB/UkGu8h6JUf8Oi1CgOe/pAxo78yypPu85cIBckrXZilfpEyuzgL1p8rXOMM8vET/wxqVnlOu+Z1n2mIKk3VrFtIMCSJkWiFQjQhUGSFIOCdi/OPJRPkXRYcJISel/zKBRIZcEIXprNQGDvhnt0C24kdDDR/krVrLURDkLM5iAArlTe/l7/F2xb1tYm1wrJkEAvGlCA== Received: from AM8P251CA0024.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::29) by AS1PR10MB5237.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:4a5::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:53 +0000 Received: from AM2PEPF0001C716.eurprd05.prod.outlook.com (2603:10a6:20b:21b:cafe::7f) by AM8P251CA0024.outlook.office365.com (2603:10a6:20b:21b::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.11 via Frontend Transport; Mon, 2 Feb 2026 13:57:45 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C716.mail.protection.outlook.com (10.167.16.186) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:53 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:29 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:50 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:35 +0100 Subject: [PATCH 10/13] media: stm32: dcmipp: pixelproc: addition of dcmipp-pixelproc subdev Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-10-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C716:EE_|AS1PR10MB5237:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a224b3b-45a6-474a-4456-08de62630f4b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700013|4022899009|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ekhsMEdzYlpyZGIrUVZtR21UYzBBbkk4ZFhNYTgybWMraHFFcURJcjJHS0Qz?= =?utf-8?B?ZWJMaWRIUVc2ZldsWjBPaFY5dWxqVExOaWlBSFRHS1dMOXdqaU5kNUQwcXIz?= =?utf-8?B?TnJUUXUzeElCa2NqcHBuZTlTYndPU3NZNjhLRE5qcy9JM0ZFVlk5RE5YR1ZJ?= =?utf-8?B?VXFDREVtaGd6czZ6UTIvWkwwdERUY1l5QXp2MDdDVFdQRElkSU4zWHRjdjNB?= =?utf-8?B?OGYzY3hZdE5VK2JnRVFYMDFxVHlKdlRBdnNSM2pUdWhmbXhrYklqeEtLSUhu?= =?utf-8?B?bkFVUTNWNXJnOXZLaTFWU0g0WnhRQ0R2ZVVtaXhBakVaeDVzU1pndEZGaDNo?= =?utf-8?B?cVVKYnRtbDRGUUM0RTdnOS8yVFIzemNEWEQ2cDVyMjFhT0JSenJHL3R1ZUoy?= =?utf-8?B?Ukk0RytuNFY1UEZjaUlpblZNTXZobHdhUmJWOGprWnlRQmhvSlJNd2RjR1lR?= =?utf-8?B?QU01VytpRWpWdHNRcGtYTTVVdXRvY2ZXbkV0TGtMOEZzbm50b2ZzRzlDL1or?= =?utf-8?B?dmwyZlNCdWduNjBSSWtUNFQ1OVl2ZWdFVURRLzJxWFdoMHVZa0tpeFgwd2tj?= =?utf-8?B?RGhkNjEyN3puT1grcmpxNkhpYUlwU21RWGpsVW01ZnJjSHdidWVWbzlQcEZP?= =?utf-8?B?Q2kzdGl4TkFaMm5SWHpSK2N5d1ZKTFN1bittMlZsRVJxeUZxVnRlKzEyR1ZI?= =?utf-8?B?SXNDMndoYmxiTEJaTWF6b3lsdFlxbWhOc0N4Rk85OFFpQi93SUVncWRyVDZx?= =?utf-8?B?ZjhPSFBYSXVqYkthNDhCYU1xOE5VeFpldG1BZnNGUnNmb1FwbS9ieGwrRG9E?= =?utf-8?B?TGROejVCUzkzMm1GczB3OE1vRktLTlFvamZCeEkydFdxcWl3VUtGeXFONEZh?= =?utf-8?B?TEorOFozbGlVWUgxMFE1bGQxSmhkMHVyR2ZCb2s1NDRLc1EzejE0Vm5hUG1Y?= =?utf-8?B?aWJyQlVzcFkvTjBMajdLM3VtYllxdnJVUUE5UmtYVHVnYlJVMnV3dnhDdXFl?= =?utf-8?B?OXNrT2hSbkZnakdJQmhZcHhzdGFKWDZ1UGRGL0xIbEFOMzZMei8vb2hNcXlB?= =?utf-8?B?N0E2b0UxRjZmSXhkUUNiWjREL2dYZ01KZW12S29zUXZaNFdJcEN0UVByU2FO?= =?utf-8?B?eEFCYVBQWlhUWUtHTHI3bzhESEhCMHJzSHo0WmxkekU4NTVXZFFMZmZkdTM2?= =?utf-8?B?YWtoN2l2VnRYREZXQldaQnY1UEtXeDV2dFJ0TEpxK2hvd3I0d2JDOUNlUzJW?= =?utf-8?B?UkxZVC9ESmFERlVTV2pVVFF4U0VEQkNUMHhKSG4yWnExNStTcHp3R2tDWE4y?= =?utf-8?B?RDcwOTRpN2RJQlVTcjhCWTJaMVJaOG8wWWkwR3Iwb2FPQ0pGcXZnN3ovRlQ0?= =?utf-8?B?eHpoSThRYm9yN2xPckVRUVdSSmZiUXh5dkJWdHVRM1FmZkMrNXpaSjdXaEV6?= =?utf-8?B?SUlEZktBVzhneVV1K0Nzc3ZCVmQ2YzdlSFhSaXdzWEl1b01XREpjTHZYamNX?= =?utf-8?B?VVNBdTViL1RzY3J0Zzl1cnpaK0hnWDA4b25QVWJRNHI3QXY3eXhTaWFMSkhy?= =?utf-8?B?RjlIRDd3RkY2YkxibmltL0wza1hIRU1reXh0QjRWMFdYNjMvUkcwRHVXSXl5?= =?utf-8?B?aGJxNzBESHNhdU1EZ2c2aVROM2F0R2Z6blVWMm5NZ0Z5WVRtcnU0KzR3SXJV?= =?utf-8?B?cGZsa0JZRVZQeEc5dmxjYmMxOXhNbDIzTUtFMXE5R0NrZHdXYm0vYy9FSG5p?= =?utf-8?B?RHNqTzEvZENGZWVNM1M5SDVMZGk4bUpPOG1PN3ZjemNSWkRHTHByVGNma01B?= =?utf-8?B?UnpyZmZabSthMHZESllqYzdYb252OFNBWU1pTkFMUlFMZWc0TmpLWGJhYUpJ?= =?utf-8?B?dk5PZDJzaXh2R3JrOTVmYi9mYlVLK2daOEJGdE9BREhWa1pUVkNTSjdDSDk5?= =?utf-8?B?S1FPdlRBSSt4YnBkeTVsMUNnaXk2WkdLWE42UXhKRU1BSTJseTdSTW05S2ZG?= =?utf-8?B?ZVJxZTVRRndsOFlmcUhXQytoV2Y0K3Q0cEFWMXZNaVZUWjFtelk4VVFvNGJF?= =?utf-8?B?S1luY3JtcVdQU1dTOVozSVBVM08yQW5UcktiYXk2VStTTHZiMHZYeDVnd1Vi?= =?utf-8?B?bE04c1JNYjJNQkFTYlVJY3JkZ1M0bFBiQjRxaWNTSktIeHVHNzJpSXdIbTN5?= =?utf-8?B?Y2JPVmNlTEJ4a01FUlY5bzVkb1dkdmNFaXlGcWhzV1VCdWtqUElmbm9LWlhz?= =?utf-8?B?Smk2aFdablEvV1ZwcHhtTVBVaER3PT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700013)(4022899009)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9Z11Wj1+BCxaDhzW/G0+nJVjJCE0nePC3Pd9UBo/mhoixsNRRPFRwqH2pvwKpD80Q0HmvqnCM4RTxx3N4eX7iRc7OIcGt4DLbaITg6J6UnL49uyP331z7SFcQdrFZ4XemK9gjPSyq5bHOj029xUUPRDsg/PxCg1r5xKuOE/BQkWGFG8ZOkX0WM5RUai5LBGW4Tun2bloI979ziQhmlnmhUDDwb95S8IzUhFk+vg36qmGOqE7aFzTxS2jJt5HaL/HOyYvhw8uoPQjUaE8Dx/N3wzXoqJRbSGdKaSMX2shLhfEgEr+9HmEIeLj+3qFwt2yH301lBgBVZyF8xdVWyRsDtSwc3FsOjzVEaQvCW/6Z0rzdPoKlTBkbbEGGn5I6omYOti+tkFi8Ne8hZ1pkDWYUJgBBl7Au6g0MbyT6C7KjRqrhJU+rUy7BzXXOE//e8Kx X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:53.0190 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6a224b3b-45a6-474a-4456-08de62630f4b X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C716.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR10MB5237 X-Proofpoint-GUID: 9Oimm3E0H1Yy49TpWbG51u-SyWBKEMDn X-Proofpoint-ORIG-GUID: 9Oimm3E0H1Yy49TpWbG51u-SyWBKEMDn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX1eE9UB+ik7rD hhTVJ83Au9xSmewKOwkkEW5XGdc+Uqbvgtu46muFQrIuhYFcBTEOQfylH1AyXNjYDMtkLF8ydBQ Hm86hS8VkCFDVzoaZCy8GlSR4vK90y8ZQiSdvpOgXse0BI4RQaeopS4bYYfTNAkWUsFcmsdVmuL n1zszCuD9kXVRIlxvydyezO5Wr8QpPkyZ9A9rfMGnMx6Akd5rPMV/F5BJgtrCThtqPRdzo10Lry FLZv5JqjIViUn6widTzFcUmlNsqECCLnAqg5Isnv2uE74eljW4TbOaW2K/u1hCwEDslM9QADzER XW1GjzGt+2AHde31BttGsV/lYqOk2Y1EyqUpl8zKxIQhIpDpYwj13vA9Lnsc6ZPGsYcKcVMJ9SU vGmh5Wzam9EAwCuz1fnLW3TVz+K/foXpa2GVaKaQp9CEllgJITOroJZ2CeYUG+bE2819cey9I6n fpOVobDiSwfSuXbNdWw== X-Authority-Analysis: v=2.4 cv=HuZ72kTS c=1 sm=1 tr=0 ts=6980ad66 cx=c_pps a=DgIaLv4a7V6WkyF3S++/Og==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=zt1vZa14LoBnRwpJZbQA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0 priorityscore=1501 bulkscore=0 adultscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 Addition of the driver for dcmipp-pixelproc subdev. This subdev is the last one before the capture device at the tail of both main and aux pipelines. It is in charge of: - framerate adjustment - downscale - gamma correction - color conversion - pixel packing Signed-off-by: Alain Volmat --- .../media/platform/st/stm32/stm32-dcmipp/Makefile | 2 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 4 + .../st/stm32/stm32-dcmipp/dcmipp-pixelproc.c | 937 +++++++++++++++++= ++++ 3 files changed, 942 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile b/driver= s/media/platform/st/stm32/stm32-dcmipp/Makefile index a708534a51af..7178934bb116 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 stm32-dcmipp-y :=3D dcmipp-core.o dcmipp-common.o dcmipp-input.o dcmipp-by= teproc.o dcmipp-bytecap.o -stm32-dcmipp-y +=3D dcmipp-pixelcommon.o dcmipp-isp.o +stm32-dcmipp-y +=3D dcmipp-pixelcommon.o dcmipp-isp.o dcmipp-pixelproc.o =20 obj-$(CONFIG_VIDEO_STM32_DCMIPP) +=3D stm32-dcmipp.o diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index e04fde86550a..8f41473605aa 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -285,5 +285,9 @@ void dcmipp_bytecap_ent_release(struct dcmipp_ent_devic= e *ved); struct dcmipp_ent_device *dcmipp_isp_ent_init(const char *entity_name, struct dcmipp_device *dcmipp); void dcmipp_isp_ent_release(struct dcmipp_ent_device *ved); +struct dcmipp_ent_device * +dcmipp_pixelproc_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp); +void dcmipp_pixelproc_ent_release(struct dcmipp_ent_device *ved); =20 #endif diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelproc.= c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelproc.c new file mode 100644 index 000000000000..afecef21d42c --- /dev/null +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-pixelproc.c @@ -0,0 +1,937 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for STM32 Digital Camera Memory Interface Pixel Processor + * + * Copyright (C) STMicroelectronics SA 2026 + * Authors: Hugues Fruchet + * Alain Volmat + * for STMicroelectronics. + */ + +#include +#include +#include +#include +#include +#include + +#include "dcmipp-common.h" +#include "dcmipp-pixelcommon.h" + +#define DCMIPP_P1CRSTR 0x904 +#define DCMIPP_P2CRSTR 0xD04 +#define DCMIPP_PxCRSTR(id) (((id) =3D=3D 1) ? DCMIPP_P1CRSTR :\ + DCMIPP_P2CRSTR) +#define DCMIPP_PxCRSTR_HSTART_SHIFT 0 +#define DCMIPP_PxCRSTR_VSTART_SHIFT 16 +#define DCMIPP_P1CRSZR 0x908 +#define DCMIPP_P2CRSZR 0xD08 +#define DCMIPP_PxCRSZR(id) (((id) =3D=3D 1) ? DCMIPP_P1CRSZR :\ + DCMIPP_P2CRSZR) +#define DCMIPP_PxCRSZR_ENABLE BIT(31) +#define DCMIPP_PxCRSZR_HSIZE_SHIFT 0 +#define DCMIPP_PxCRSZR_VSIZE_SHIFT 16 + +#define DCMIPP_P1DCCR 0x90C +#define DCMIPP_P2DCCR 0xD0C +#define DCMIPP_PxDCCR(id) (((id) =3D=3D 1) ? DCMIPP_P1DCCR :\ + DCMIPP_P2DCCR) +#define DCMIPP_PxDCCR_ENABLE BIT(0) +#define DCMIPP_PxDCCR_HDEC_SHIFT 1 +#define DCMIPP_PxDCCR_VDEC_SHIFT 3 + +#define DCMIPP_P1DSCR 0x910 +#define DCMIPP_P2DSCR 0xD10 +#define DCMIPP_PxDSCR(id) (((id) =3D=3D 1) ? DCMIPP_P1DSCR :\ + DCMIPP_P2DSCR) +#define DCMIPP_PxDSCR_HDIV_SHIFT 0 +#define DCMIPP_PxDSCR_VDIV_SHIFT 16 +#define DCMIPP_PxDSCR_ENABLE BIT(31) + +#define DCMIPP_P1DSRTIOR 0x914 +#define DCMIPP_P2DSRTIOR 0xD14 +#define DCMIPP_PxDSRTIOR(id) (((id) =3D=3D 1) ? DCMIPP_P1DSRTIOR :\ + DCMIPP_P2DSRTIOR) +#define DCMIPP_PxDSRTIOR_HRATIO_SHIFT 0 +#define DCMIPP_PxDSRTIOR_HRATIO_MASK GENMASK(15, 0) +#define DCMIPP_PxDSRTIOR_VRATIO_SHIFT 16 +#define DCMIPP_PxDSRTIOR_VRATIO_MASK GENMASK(31, 16) + +#define DCMIPP_P1DSSZR 0x918 +#define DCMIPP_P2DSSZR 0xD18 +#define DCMIPP_PxDSSZR(id) (((id) =3D=3D 1) ? DCMIPP_P1DSSZR :\ + DCMIPP_P2DSSZR) +#define DCMIPP_PxDSSZR_HSIZE_SHIFT 0 +#define DCMIPP_PxDSSZR_HSIZE_MASK GENMASK(11, 0) +#define DCMIPP_PxDSSZR_VSIZE_SHIFT 16 +#define DCMIPP_PxDSSZR_VSIZE_MASK GENMASK(27, 16) + +#define DCMIPP_P1GMCR 0x970 +#define DCMIPP_P2GMCR 0xD70 +#define DCMIPP_PxGMCR(id) (((id) =3D=3D 1) ? DCMIPP_P1GMCR :\ + DCMIPP_P2GMCR) +#define DCMIPP_PxGMCR_ENABLE BIT(0) + +#define DCMIPP_P1YUVCR 0x980 +#define DCMIPP_P1YUVCR_ENABLE BIT(0) +#define DCMIPP_P1YUVCR_TYPE_RGB BIT(1) +#define DCMIPP_P1YUVCR_CLAMP BIT(2) +#define DCMIPP_P1YUVRR1 0x984 +#define DCMIPP_P1YUVRR2 0x988 +#define DCMIPP_P1YUVGR1 0x98C +#define DCMIPP_P1YUVGR2 0x990 +#define DCMIPP_P1YUVBR1 0x994 +#define DCMIPP_P1YUVBR2 0x998 + +#define PIXELPROC_MEDIA_BUS_FMT_DEFAULT MEDIA_BUS_FMT_RGB888_1X24 + +/* Macro for negative coefficient, 11 bits coded */ +#define N11(val) (((val) ^ 0x7ff) + 1) +/* Macro for added value, 10 bits coded */ +#define N10(val) (((val) ^ 0x3ff) + 1) + +/* Macro to convert row matrix to DCMIPP PxCCCyy register value */ +#define CCTBL(rr, rg, rb, ra, gr, gg, gb, ga, br, bg, bb, ba) \ + .conv_matrix =3D { \ + ((rg) << 16 | (rr)), ((ra) << 16 | (rb)), \ + ((gg) << 16 | (gr)), ((ga) << 16 | (gb)), \ + ((bg) << 16 | (br)), ((ba) << 16 | (bb)) } + +struct dcmipp_colorconv_config { + unsigned int conv_matrix[6]; + bool clamping; + bool clamping_as_rgb; +}; + +static const struct dcmipp_colorconv_config dcmipp_rgbfull_to_yuv601full = =3D { + /* R G B Add */ + CCTBL(131, N11(110), N11(21), 128, /* Cr */ + 77, 150, 29, 0, /* Y */ + N11(44), N11(87), 131, 128), /* Cb */ +}; + +static const struct dcmipp_colorconv_config dcmipp_rgbfull_to_yuv601lim = =3D { + /* R G B Add */ + CCTBL(112, N11(94), N11(18), 128, /* Cr */ + 66, 129, 25, 16, /* Y */ + N11(38), N11(74), 112, 128), /* Cb */ + .clamping =3D true, +}; + +static const struct dcmipp_colorconv_config dcmipp_rgbfull_to_yuv709full = =3D { + /* R G B Add */ + CCTBL(131, N11(119), N11(12), 128, /* Cr */ + 55, 183, 18, 0, /* Y */ + N11(30), N11(101), 131, 128), /* Cb */ +}; + +static const struct dcmipp_colorconv_config dcmipp_rgbfull_to_yuv709lim = =3D { + /* R G B Add */ + CCTBL(112, N11(102), N11(10), 128, /* Cr */ + 47, 157, 16, 16, /* Y */ + N11(26), N11(87), 112, 128), /* Cb */ + .clamping =3D true, +}; + +static const struct dcmipp_colorconv_config dcmipp_rgblim_to_yuv601lim =3D= { + /* R G B Add */ + CCTBL(131, N11(110), N11(21), 128, /* Cr */ + 77, 150, 29, 0, /* Y */ + N11(44), N11(87), 131, 128), /* Cb */ + .clamping =3D true, +}; + +static const struct dcmipp_colorconv_config dcmipp_rgblim_to_yuv709lim =3D= { + /* R G B Add */ + CCTBL(131, N11(119), N11(12), 128, /* Cr */ + 55, 183, 18, 0, /* Y */ + N11(30), N11(101), 131, 128), /* Cb */ + .clamping =3D true, +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv601full_to_rgbfull = =3D { + /* Cr Y Cb Add */ + CCTBL(351, 256, 0, N10(175), /* R */ + N11(179), 256, N11(86), 132, /* G */ + 0, 256, 443, N10(222)), /* B */ +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv601lim_to_rgbfull = =3D { + /* Cr Y Cb Add */ + CCTBL(409, 298, 0, N10(223), /* R */ + N11(208), 298, N11(100), 135, /* G */ + 0, 298, 517, N10(277)), /* B */ +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv601lim_to_rgblim =3D= { + /* Cr Y Cb Add */ + CCTBL(351, 256, 0, N10(175), /* R */ + N11(179), 256, N11(86), 132, /* G */ + 0, 256, 443, N10(222)), /* B */ + .clamping =3D true, + .clamping_as_rgb =3D true, +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv709full_to_rgbfull = =3D { + /* Cr Y Cb Add */ + CCTBL(394, 256, 0, N10(197), /* R */ + N11(118), 256, N11(47), 82, /* G */ + 0, 256, 456, N10(232)), /* B */ +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv709lim_to_rgbfull = =3D { + /* Cr Y Cb Add */ + CCTBL(459, 298, 0, N10(248), /* R */ + N11(137), 298, N11(55), 77, /* G */ + 0, 298, 541, N10(289)), /* B */ +}; + +static const struct dcmipp_colorconv_config dcmipp_yuv709lim_to_rgblim =3D= { + /* Cr Y Cb Add */ + CCTBL(394, 256, 0, N10(197), /* R */ + N11(118), 256, N11(47), 82, /* G */ + 0, 256, 465, N10(232)), /* B */ + .clamping =3D true, + .clamping_as_rgb =3D true, +}; + +/* cconv_matrices[src_fmt][src_range][sink_fmt][sink_range] */ +static const struct dcmipp_colorconv_config *dcmipp_cconv_cfgs[3][2][3][2]= =3D { + /* RGB */ + { + /* RGB full range */ + { + /* RGB full range =3D> RGB */ + { + NULL, NULL, + }, + /* RGB full range =3D> YUV601 */ + { + &dcmipp_rgbfull_to_yuv601full, + &dcmipp_rgbfull_to_yuv601lim, + }, + /* RGB full range =3D> YUV709 */ + { + &dcmipp_rgbfull_to_yuv709full, + &dcmipp_rgbfull_to_yuv709lim, + }, + }, + /* RGB limited range */ + { + /* RGB limited range =3D> RGB */ + { + NULL, NULL, + }, + /* RGB limited range =3D> YUV601 */ + { + NULL, &dcmipp_rgblim_to_yuv601lim, + }, + /* RGB limited range =3D> YUV709 */ + { + NULL, &dcmipp_rgblim_to_yuv709lim, + }, + }, + }, + /* YUV601 */ + { + /* YUV601 full range */ + { + /* YUV601 full range =3D> RGB */ + { + &dcmipp_yuv601full_to_rgbfull, NULL, + }, + /* YUV601 full range =3D> YUV601 */ + { + NULL, NULL, + }, + /* YUV601 full range =3D> YUV709 */ + { + NULL, NULL, + }, + }, + /* YUV601 limited range */ + { + /* YUV601 limited range =3D> RGB */ + { + &dcmipp_yuv601lim_to_rgbfull, + &dcmipp_yuv601lim_to_rgblim, + }, + /* YUV601 limited range =3D> YUV601 */ + { + NULL, NULL, + }, + /* YUV601 limited range =3D> YUV709 */ + { + NULL, NULL, + }, + }, + }, + /* YUV709 */ + { + /* YUV709 full range */ + { + /* YUV709 full range =3D> RGB */ + { + &dcmipp_yuv709full_to_rgbfull, NULL, + }, + /* YUV709 full range =3D> YUV601 */ + { + NULL, NULL, + }, + /* YUV709 full range =3D> YUV709 */ + { + NULL, NULL, + }, + }, + /* YUV709 limited range */ + { + /* YUV709 limited range =3D> RGB */ + { + &dcmipp_yuv709lim_to_rgbfull, + &dcmipp_yuv709lim_to_rgblim, + }, + /* YUV709 limited range =3D> YUV601 */ + { + NULL, NULL, + }, + /* YUV709 limited range =3D> YUV709 */ + { + NULL, NULL, + }, + }, + }, +}; + +enum dcmipp_cconv_fmt { + FMT_RGB =3D 0, + FMT_YUV601, + FMT_YUV709 +}; + +static inline enum dcmipp_cconv_fmt to_cconv_fmt(struct v4l2_mbus_framefmt= *fmt) +{ + /* YUV format codes are within the 0x2xxx */ + if (fmt->code >=3D MEDIA_BUS_FMT_Y8_1X8 && + fmt->code < MEDIA_BUS_FMT_SBGGR8_1X8) { + if (fmt->ycbcr_enc =3D=3D V4L2_YCBCR_ENC_709) + return FMT_YUV709; + else + return FMT_YUV601; + } + + /* All other formats are referred as RGB, indeed, demosaicing bloc + * generate RGB format + */ + return FMT_RGB; +}; + +#define FMT_STR(f) ({ \ + typeof(f) __f =3D (f); \ + (__f) =3D=3D FMT_RGB ? "RGB" : \ + (__f) =3D=3D FMT_YUV601 ? "YUV601" : \ + (__f) =3D=3D FMT_YUV709 ? "YUV709" : "?"; }) + +enum dcmipp_cconv_range { + RANGE_FULL =3D 0, + RANGE_LIMITED, +}; + +static inline enum dcmipp_cconv_range +to_cconv_range(struct v4l2_mbus_framefmt *fmt) +{ + if (fmt->quantization =3D=3D V4L2_QUANTIZATION_FULL_RANGE) + return RANGE_FULL; + + return RANGE_LIMITED; +}; + +#define RANGE_STR(range) ((range) =3D=3D RANGE_FULL ? "full" : "limited") + +struct dcmipp_pixelproc_device { + struct dcmipp_ent_device ved; + struct v4l2_subdev sd; + struct device *dev; + bool streaming; + + void __iomem *regs; + struct v4l2_ctrl_handler ctrls; + + u32 pipe_id; +}; + +static const struct v4l2_mbus_framefmt fmt_default =3D { + .width =3D DCMIPP_FMT_WIDTH_DEFAULT, + .height =3D DCMIPP_FMT_HEIGHT_DEFAULT, + .code =3D PIXELPROC_MEDIA_BUS_FMT_DEFAULT, + .field =3D V4L2_FIELD_NONE, + .colorspace =3D DCMIPP_COLORSPACE_DEFAULT, + .ycbcr_enc =3D DCMIPP_YCBCR_ENC_DEFAULT, + .quantization =3D DCMIPP_QUANTIZATION_DEFAULT, + .xfer_func =3D DCMIPP_XFER_FUNC_DEFAULT, +}; + +static const struct v4l2_rect crop_min =3D { + .width =3D DCMIPP_FRAME_MIN_WIDTH, + .height =3D DCMIPP_FRAME_MIN_HEIGHT, + .top =3D 0, + .left =3D 0, +}; + +/* + * Downscale is a combination of both decimation block (1/2/4/8) + * and downsize block (up to 8x) for a total of maximum downscale of 64 + */ +#define DCMIPP_MAX_DECIMATION_RATIO 8 +#define DCMIPP_MAX_DOWNSIZE_RATIO 8 +#define DCMIPP_MAX_DOWNSCALE_RATIO 64 + +/* + * Functions handling controls + */ +#define V4L2_CID_PIXELPROC_GAMMA_CORRECTION (V4L2_CID_USER_BASE | 0x1001) + +static int dcmipp_pixelproc_s_ctrl(struct v4l2_ctrl *ctrl) +{ + struct dcmipp_pixelproc_device *pixelproc =3D + container_of(ctrl->handler, + struct dcmipp_pixelproc_device, ctrls); + + if (pm_runtime_get_if_in_use(pixelproc->dev) =3D=3D 0) + return 0; + + switch (ctrl->id) { + case V4L2_CID_PIXELPROC_GAMMA_CORRECTION: + reg_write(pixelproc, DCMIPP_PxGMCR(pixelproc->pipe_id), + (ctrl->val ? DCMIPP_PxGMCR_ENABLE : 0)); + break; + } + + pm_runtime_put(pixelproc->dev); + + return 0; +}; + +static const struct v4l2_ctrl_ops dcmipp_pixelproc_ctrl_ops =3D { + .s_ctrl =3D dcmipp_pixelproc_s_ctrl, +}; + +static const struct v4l2_ctrl_config dcmipp_pixelproc_ctrls[] =3D { + { + .ops =3D &dcmipp_pixelproc_ctrl_ops, + .id =3D V4L2_CID_PIXELPROC_GAMMA_CORRECTION, + .type =3D V4L2_CTRL_TYPE_BOOLEAN, + .name =3D "Gamma correction", + .min =3D 0, + .max =3D 1, + .step =3D 1, + .def =3D 0, + } +}; + +static void dcmipp_pixelproc_adjust_crop(struct v4l2_rect *r, + const struct v4l2_mbus_framefmt *fmt) +{ + struct v4l2_rect src_rect =3D { + .top =3D 0, + .left =3D 0, + .width =3D fmt->width, + .height =3D fmt->height, + }; + + /* Disallow rectangles smaller than the minimal one. */ + v4l2_rect_set_min_size(r, &crop_min); + v4l2_rect_map_inside(r, &src_rect); +} + +static void +dcmipp_pixelproc_adjust_fmt(struct dcmipp_pixelproc_device *pixelproc, + struct v4l2_mbus_framefmt *fmt, u32 pad) +{ + const struct dcmipp_pixelpipe_pix_map *vpix; + + /* Only accept code in the pix map table */ + vpix =3D dcmipp_pixelpipe_pix_map_by_code(fmt->code, + pixelproc->pipe_id =3D=3D 1 ? DCMIPP_MAIN : DCMIPP_AUX, + pad); + if (!vpix) + fmt->code =3D PIXELPROC_MEDIA_BUS_FMT_DEFAULT; + + fmt->width =3D clamp_t(u32, fmt->width, DCMIPP_FRAME_MIN_WIDTH, + DCMIPP_FRAME_MAX_WIDTH); + fmt->height =3D clamp_t(u32, fmt->height, DCMIPP_FRAME_MIN_HEIGHT, + DCMIPP_FRAME_MAX_HEIGHT); + + if (fmt->field =3D=3D V4L2_FIELD_ANY || fmt->field =3D=3D V4L2_FIELD_ALTE= RNATE) + fmt->field =3D V4L2_FIELD_NONE; + + dcmipp_colorimetry_clamp(fmt); +} + +static int dcmipp_pixelproc_init_state(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state) +{ + unsigned int i; + + for (i =3D 0; i < sd->entity.num_pads; i++) { + *v4l2_subdev_state_get_format(state, i) =3D fmt_default; + + if (IS_SINK(i)) { + struct v4l2_rect r =3D { + .top =3D 0, + .left =3D 0, + .width =3D DCMIPP_FMT_WIDTH_DEFAULT, + .height =3D DCMIPP_FMT_HEIGHT_DEFAULT, + }; + *v4l2_subdev_state_get_crop(state, i) =3D r; + *v4l2_subdev_state_get_compose(state, i) =3D r; + } + } + + return 0; +} + +static int +dcmipp_pixelproc_enum_mbus_code(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_mbus_code_enum *code) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + + return dcmipp_pixelpipe_enum_mbus_code( + pixelproc->pipe_id =3D=3D 1 ? DCMIPP_MAIN : DCMIPP_AUX, + code); +} + +static int +dcmipp_pixelproc_enum_frame_size(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_frame_size_enum *fse) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + + return dcmipp_pixelpipe_enum_frame_size( + pixelproc->pipe_id =3D=3D 1 ? DCMIPP_MAIN : DCMIPP_AUX, + fse); +} + +static int dcmipp_pixelproc_set_fmt(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_format *fmt) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + + if (v4l2_subdev_is_streaming(sd)) + return -EBUSY; + + dcmipp_pixelproc_adjust_fmt(pixelproc, &fmt->format, fmt->pad); + + if (IS_SINK(fmt->pad)) { + struct v4l2_mbus_framefmt *src_fmt =3D + v4l2_subdev_state_get_format(state, 1); + struct v4l2_rect r =3D { + .top =3D 0, + .left =3D 0, + .width =3D fmt->format.width, + .height =3D fmt->format.height, + }; + + /* Adjust SINK pad crop/compose */ + *v4l2_subdev_state_get_crop(state, 0) =3D r; + *v4l2_subdev_state_get_compose(state, 0) =3D r; + + /* Forward format to SRC pad */ + *src_fmt =3D fmt->format; + src_fmt->code =3D dcmipp_pixelpipe_src_format(fmt->format.code); + } else { + struct v4l2_rect *compose =3D + v4l2_subdev_state_get_compose(state, 0); + + /* AUX (pipe_nb 2) cannot perform color conv */ + if (pixelproc->pipe_id =3D=3D 2) { + struct v4l2_mbus_framefmt *sink_fmt =3D + v4l2_subdev_state_get_format(state, 0); + + fmt->format =3D *sink_fmt; + fmt->format.code =3D + dcmipp_pixelpipe_src_format(fmt->format.code); + } + + fmt->format.width =3D compose->width; + fmt->format.height =3D compose->height; + } + + /* Update the selected pad format */ + *v4l2_subdev_state_get_format(state, fmt->pad) =3D fmt->format; + + return 0; +} + +static int dcmipp_pixelproc_set_selection(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + struct v4l2_subdev_selection *s) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + struct v4l2_mbus_framefmt *sink_fmt, *src_fmt; + struct v4l2_rect *crop, *compose; + + if (IS_SRC(s->pad)) + return -EINVAL; + + if (v4l2_subdev_is_streaming(sd)) + return -EBUSY; + + crop =3D v4l2_subdev_state_get_crop(state, s->pad); + compose =3D v4l2_subdev_state_get_compose(state, s->pad); + + switch (s->target) { + case V4L2_SEL_TGT_CROP: + sink_fmt =3D v4l2_subdev_state_get_format(state, s->pad); + dcmipp_pixelproc_adjust_crop(&s->r, sink_fmt); + + *crop =3D s->r; + *compose =3D s->r; + + dev_dbg(pixelproc->dev, "s_selection: crop (%d,%d)/%ux%u\n", + crop->left, crop->top, crop->width, crop->height); + break; + case V4L2_SEL_TGT_COMPOSE: + s->r.top =3D 0; + s->r.left =3D 0; + s->r.width =3D clamp_t(u32, s->r.width, + crop->width / DCMIPP_MAX_DOWNSCALE_RATIO, + crop->width); + s->r.height =3D clamp_t(u32, s->r.height, + crop->height / DCMIPP_MAX_DOWNSCALE_RATIO, + crop->height); + *compose =3D s->r; + + dev_dbg(pixelproc->dev, "s_selection: compose (%d,%d)/%ux%u\n", + compose->left, compose->top, + compose->width, compose->height); + break; + default: + return -EINVAL; + } + + /* Update the source pad size */ + src_fmt =3D v4l2_subdev_state_get_format(state, 1); + src_fmt->width =3D s->r.width; + src_fmt->height =3D s->r.height; + + return 0; +} + +static int +dcmipp_pixelproc_colorconv_config(struct dcmipp_pixelproc_device *pixelpro= c, + struct v4l2_mbus_framefmt *sink, + struct v4l2_mbus_framefmt *src) +{ + const struct dcmipp_colorconv_config *cconv_cfg; + enum dcmipp_cconv_fmt sink_fmt =3D to_cconv_fmt(sink); + enum dcmipp_cconv_range sink_range =3D to_cconv_range(sink); + enum dcmipp_cconv_fmt src_fmt =3D to_cconv_fmt(src); + enum dcmipp_cconv_range src_range =3D to_cconv_range(src); + unsigned int val =3D 0; + int i; + + /* Disable color conversion by default */ + reg_write(pixelproc, DCMIPP_P1YUVCR, 0); + + if (sink_fmt =3D=3D src_fmt && sink_range =3D=3D src_range) + return 0; + + /* color conversion */ + cconv_cfg =3D dcmipp_cconv_cfgs[sink_fmt][sink_range][src_fmt][src_range]; + if (!cconv_cfg) { + dev_err(pixelproc->dev, + "Unsupported color conversion %s-%s =3D> %s-%s\n", + FMT_STR(sink_fmt), RANGE_STR(sink_range), + FMT_STR(src_fmt), RANGE_STR(src_range)); + return -EINVAL; + } + + dev_dbg(pixelproc->dev, "color conversion %s-%s =3D> %s-%s\n", + FMT_STR(sink_fmt), RANGE_STR(sink_range), + FMT_STR(src_fmt), RANGE_STR(src_range)); + + for (i =3D 0; i < 6; i++) + reg_write(pixelproc, DCMIPP_P1YUVRR1 + (4 * i), + cconv_cfg->conv_matrix[i]); + + if (cconv_cfg->clamping) + val |=3D DCMIPP_P1YUVCR_CLAMP; + if (cconv_cfg->clamping_as_rgb) + val |=3D DCMIPP_P1YUVCR_TYPE_RGB; + val |=3D DCMIPP_P1YUVCR_ENABLE; + + reg_write(pixelproc, DCMIPP_P1YUVCR, val); + + return 0; +} + +#define DCMIPP_PIXELPROC_HVRATIO_CONS 8192 +#define DCMIPP_PIXELPROC_HVRATIO_MAX 65535 +#define DCMIPP_PIXELPROC_HVDIV_CONS 1024 +#define DCMIPP_PIXELPROC_HVDIV_MAX 1023 +static void +dcmipp_pixelproc_set_crop_downscale(struct dcmipp_pixelproc_device *pixelp= roc, + struct v4l2_rect *compose, + struct v4l2_rect *crop) +{ + unsigned int hratio, vratio, hdiv, vdiv; + unsigned int hdec =3D 0, vdec =3D 0; + unsigned int h_post_dec =3D crop->width; + unsigned int v_post_dec =3D crop->height; + + /* Configure cropping */ + reg_write(pixelproc, DCMIPP_PxCRSTR(pixelproc->pipe_id), + (crop->top << DCMIPP_PxCRSTR_VSTART_SHIFT) | + (crop->left << DCMIPP_PxCRSTR_HSTART_SHIFT)); + reg_write(pixelproc, DCMIPP_PxCRSZR(pixelproc->pipe_id), + (crop->width << DCMIPP_PxCRSZR_HSIZE_SHIFT) | + (crop->height << DCMIPP_PxCRSZR_VSIZE_SHIFT) | + DCMIPP_PxCRSZR_ENABLE); + + /* Compute decimation factors (HDEC/VDEC) */ + while (compose->width * DCMIPP_MAX_DOWNSIZE_RATIO < h_post_dec) { + hdec++; + h_post_dec /=3D 2; + } + while (compose->height * DCMIPP_MAX_DOWNSIZE_RATIO < v_post_dec) { + vdec++; + v_post_dec /=3D 2; + } + + /* Compute downsize factor */ + hratio =3D h_post_dec * DCMIPP_PIXELPROC_HVRATIO_CONS / + compose->width; + if (hratio > DCMIPP_PIXELPROC_HVRATIO_MAX) + hratio =3D DCMIPP_PIXELPROC_HVRATIO_MAX; + vratio =3D v_post_dec * DCMIPP_PIXELPROC_HVRATIO_CONS / + compose->height; + if (vratio > DCMIPP_PIXELPROC_HVRATIO_MAX) + vratio =3D DCMIPP_PIXELPROC_HVRATIO_MAX; + hdiv =3D (DCMIPP_PIXELPROC_HVDIV_CONS * compose->width) / + h_post_dec; + if (hdiv > DCMIPP_PIXELPROC_HVDIV_MAX) + hdiv =3D DCMIPP_PIXELPROC_HVDIV_MAX; + vdiv =3D (DCMIPP_PIXELPROC_HVDIV_CONS * compose->height) / + v_post_dec; + if (vdiv > DCMIPP_PIXELPROC_HVDIV_MAX) + vdiv =3D DCMIPP_PIXELPROC_HVDIV_MAX; + + dev_dbg(pixelproc->dev, "%s: decimation config: hdec: 0x%x, vdec: 0x%x\n", + pixelproc->sd.name, + hdec, vdec); + dev_dbg(pixelproc->dev, "%s: downsize config: hratio: 0x%x, vratio: 0x%x,= hdiv: 0x%x, vdiv: 0x%x\n", + pixelproc->sd.name, + hratio, vratio, + hdiv, vdiv); + + reg_clear(pixelproc, DCMIPP_PxDCCR(pixelproc->pipe_id), + DCMIPP_PxDCCR_ENABLE); + if (hdec || vdec) + reg_write(pixelproc, DCMIPP_PxDCCR(pixelproc->pipe_id), + (hdec << DCMIPP_PxDCCR_HDEC_SHIFT) | + (vdec << DCMIPP_PxDCCR_VDEC_SHIFT) | + DCMIPP_PxDCCR_ENABLE); + + reg_clear(pixelproc, DCMIPP_PxDSCR(pixelproc->pipe_id), + DCMIPP_PxDSCR_ENABLE); + reg_write(pixelproc, DCMIPP_PxDSRTIOR(pixelproc->pipe_id), + (hratio << DCMIPP_PxDSRTIOR_HRATIO_SHIFT) | + (vratio << DCMIPP_PxDSRTIOR_VRATIO_SHIFT)); + reg_write(pixelproc, DCMIPP_PxDSSZR(pixelproc->pipe_id), + (compose->width << DCMIPP_PxDSSZR_HSIZE_SHIFT) | + (compose->height << DCMIPP_PxDSSZR_VSIZE_SHIFT)); + reg_write(pixelproc, DCMIPP_PxDSCR(pixelproc->pipe_id), + (hdiv << DCMIPP_PxDSCR_HDIV_SHIFT) | + (vdiv << DCMIPP_PxDSCR_VDIV_SHIFT) | + DCMIPP_PxDSCR_ENABLE); +} + +static int dcmipp_pixelproc_enable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 pad, u64 streams_mask) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + struct v4l2_subdev *s_subdev; + struct media_pad *s_pad; + int ret; + + /* Get source subdev */ + s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); + if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) + return -EINVAL; + s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); + + /* Configure crop/downscale */ + dcmipp_pixelproc_set_crop_downscale(pixelproc, + v4l2_subdev_state_get_compose(state, 0), + v4l2_subdev_state_get_crop(state, 0)); + + /* Configure YUV Conversion (if applicable) */ + if (pixelproc->pipe_id =3D=3D 1) { + ret =3D dcmipp_pixelproc_colorconv_config(pixelproc, + v4l2_subdev_state_get_format(state, 0), + v4l2_subdev_state_get_format(state, 1)); + if (ret) + return ret; + } + + /* Apply customized values from user when stream starts. */ + ret =3D v4l2_ctrl_handler_setup(pixelproc->sd.ctrl_handler); + if (ret < 0) { + dev_err(pixelproc->dev, + "failed to start source subdev streaming (%d)\n", ret); + return ret; + } + + ret =3D v4l2_subdev_enable_streams(s_subdev, s_pad->index, BIT_ULL(0)); + if (ret < 0) { + dev_err(pixelproc->dev, + "failed to start source subdev streaming (%d)\n", ret); + return ret; + } + + return 0; +} + +static int dcmipp_pixelproc_disable_streams(struct v4l2_subdev *sd, + struct v4l2_subdev_state *state, + u32 pad, u64 streams_mask) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + struct v4l2_subdev *s_subdev; + struct media_pad *s_pad; + int ret; + + /* Get source subdev */ + s_pad =3D media_pad_remote_pad_first(&sd->entity.pads[0]); + if (!s_pad || !is_media_entity_v4l2_subdev(s_pad->entity)) + return -EINVAL; + s_subdev =3D media_entity_to_v4l2_subdev(s_pad->entity); + + ret =3D v4l2_subdev_disable_streams(s_subdev, s_pad->index, BIT_ULL(0)); + if (ret < 0) + dev_err(pixelproc->dev, + "failed to stop source subdev streaming (%d)\n", + ret); + return ret; +} + +static const struct v4l2_subdev_pad_ops dcmipp_pixelproc_pad_ops =3D { + .enum_mbus_code =3D dcmipp_pixelproc_enum_mbus_code, + .enum_frame_size =3D dcmipp_pixelproc_enum_frame_size, + .get_fmt =3D v4l2_subdev_get_fmt, + .set_fmt =3D dcmipp_pixelproc_set_fmt, + .get_selection =3D dcmipp_pixelpipe_get_selection, + .set_selection =3D dcmipp_pixelproc_set_selection, + .enable_streams =3D dcmipp_pixelproc_enable_streams, + .disable_streams =3D dcmipp_pixelproc_disable_streams, +}; + +static const struct v4l2_subdev_core_ops dcmipp_pixelproc_core_ops =3D { + .subscribe_event =3D v4l2_ctrl_subdev_subscribe_event, + .unsubscribe_event =3D v4l2_event_subdev_unsubscribe, +}; + +static const struct v4l2_subdev_video_ops dcmipp_pixelproc_video_ops =3D { + .s_stream =3D v4l2_subdev_s_stream_helper, +}; + +static const struct v4l2_subdev_ops dcmipp_pixelproc_ops =3D { + .core =3D &dcmipp_pixelproc_core_ops, + .pad =3D &dcmipp_pixelproc_pad_ops, + .video =3D &dcmipp_pixelproc_video_ops, +}; + +static void dcmipp_pixelproc_release(struct v4l2_subdev *sd) +{ + struct dcmipp_pixelproc_device *pixelproc =3D v4l2_get_subdevdata(sd); + + kfree(pixelproc); +} + +static const struct v4l2_subdev_internal_ops dcmipp_pixelproc_int_ops =3D { + .init_state =3D dcmipp_pixelproc_init_state, + .release =3D dcmipp_pixelproc_release, +}; + +void dcmipp_pixelproc_ent_release(struct dcmipp_ent_device *ved) +{ + struct dcmipp_pixelproc_device *pixelproc =3D + container_of(ved, struct dcmipp_pixelproc_device, ved); + + dcmipp_ent_sd_unregister(ved, &pixelproc->sd); +} + +static int dcmipp_name_to_pipe_id(const char *name) +{ + if (strstr(name, "main")) + return 1; + else if (strstr(name, "aux")) + return 2; + else + return -EINVAL; +} + +struct dcmipp_ent_device * +dcmipp_pixelproc_ent_init(const char *entity_name, + struct dcmipp_device *dcmipp) +{ + struct dcmipp_pixelproc_device *pixelproc; + const unsigned long pads_flag[] =3D { + MEDIA_PAD_FL_SINK, MEDIA_PAD_FL_SOURCE, + }; + int ret, i; + + /* Allocate the pixelproc struct */ + pixelproc =3D kzalloc(sizeof(*pixelproc), GFP_KERNEL); + if (!pixelproc) + return ERR_PTR(-ENOMEM); + + pixelproc->regs =3D dcmipp->regs; + pixelproc->dev =3D dcmipp->dev; + + /* Pipe identifier */ + pixelproc->pipe_id =3D dcmipp_name_to_pipe_id(entity_name); + if (pixelproc->pipe_id !=3D 1 && pixelproc->pipe_id !=3D 2) { + dev_err(pixelproc->dev, "failed to retrieve pipe_id\n"); + kfree(pixelproc); + return ERR_PTR(-EIO); + } + + /* Initialize controls */ + v4l2_ctrl_handler_init(&pixelproc->ctrls, + ARRAY_SIZE(dcmipp_pixelproc_ctrls)); + + for (i =3D 0; i < ARRAY_SIZE(dcmipp_pixelproc_ctrls); i++) + v4l2_ctrl_new_custom(&pixelproc->ctrls, + &dcmipp_pixelproc_ctrls[i], NULL); + + pixelproc->sd.ctrl_handler =3D &pixelproc->ctrls; + if (pixelproc->ctrls.error) { + ret =3D pixelproc->ctrls.error; + dev_err(pixelproc->dev, "control initialization error %d\n", ret); + kfree(pixelproc); + return ERR_PTR(ret); + } + + /* Initialize ved and sd */ + ret =3D dcmipp_ent_sd_register(&pixelproc->ved, &pixelproc->sd, + &dcmipp->v4l2_dev, entity_name, + MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER, + ARRAY_SIZE(pads_flag), pads_flag, + &dcmipp_pixelproc_int_ops, + &dcmipp_pixelproc_ops, + NULL, NULL); + if (ret) { + kfree(pixelproc); + return ERR_PTR(ret); + } + + pixelproc->ved.dcmipp =3D dcmipp; + + return &pixelproc->ved; +} --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24E6F36D4ED; Mon, 2 Feb 2026 13:58:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040699; cv=fail; b=jVqlSCRrTQMr6BiKJh3OfjSQphqN8Gg9mcCyj6gGA2/lZeSV0kQjxCkGwfsfcxiG23P+hzSmvkDgVkapzqaw2t88gw5H5GUCDFyME4KLNdK6uWMbMCxIY6U+5TTLdosZMvpyIVhRl0toNm14+x1sXEzgd8H3Q8L8FHgREyzXzxc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040699; c=relaxed/simple; bh=I/IagQkiLKt9/m5/X0eE+BXLL1MEAsCCTnXDvqmJXN0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=rr8v5R1JmGgOLODB5knIxh6oWh49phlkVWRsCUPX7XnQm0PTZAc4HSAkem66Lx8ogfPWMv0fhpjGU+AJvgcy/WA1qCf8jzsUQt+yFP2IlP64N0Ajjg3iKnm+PESSZyVezWqYalnW5gjCxM6LCQP/+qjZbovIWsv38NWqCPwaGPs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=ViyOJ30P; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="ViyOJ30P" Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DcUIm294926; Mon, 2 Feb 2026 14:58:00 +0100 Received: from mrwpr03cu001.outbound.protection.outlook.com (mail-francesouthazon11011058.outbound.protection.outlook.com [40.107.130.58]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1aq7p39t-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:58:00 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eDkKqtyVjPzoC+0u/o0MZdhapBu85akEvpOhWt9urhYcJ5gWI/IWNVn5jsSlrgCykNTh3OwvKubVi65Soay6Y5FAoARV2qZVgUSHYHT3eX3WUXaj0Uyg9rn/ROxmwJRyXaArX2XC4sicAO/NUR8qf+gqLMNkSeyFH5bDY6boHYrd65dYjzIOlDMrGwzTblcTUuIW8iXK8mF5TBHIJsQuqQH/6jj7FLoxGpZF/649SV/jJH9hR4j94NQJSIPK48e58Ox5Sd40XfBYqy1y69NO0nQvncz+fjvkonFZX6X0vG8dk/tTzMcvC18+wUHR+jlQzAM7PonDY9XIc3nRUerkuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sk4Ym5XNYu+tAp9SzfPnnwR8yBDUjTo3q68puuxuqeE=; b=yDOmO75SYyJLw1GpxiVapYS9XEbiFDPVP8VI7RGp+XXVVVr2Nxs4G95/uOr7FBX6jamebysZsGnCNYjmk15M3OeIfDCt2ki2pOVTamqho8+XBSviWIIhlRho99MMX+E7MywthB/O+BR7B0xH26vsv8XZnXIuELJKLCwvIa2HetvvC+YZLgrhnnkvx9FUg/Mtaaq47MfidachpR59weT7dONyDP0yviiNRlDqHVwRN6YwSziosY2aBjFKqZU6x5pvm90CtIDq6RP6GG9UiWEA3nvPzsdHkDxIok9RzPyZRI21N2G6y7BQeQhNd3gvl5MHAeSVFKLatWqI+V93fiqs+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sk4Ym5XNYu+tAp9SzfPnnwR8yBDUjTo3q68puuxuqeE=; b=ViyOJ30Phz1eYhRqnt+VmZgnHyzhlMvlGacGu9dzgYGyzvrnxUPza6hcRirJ6O4goHcW9+e7XrZIGA2FdBlGEGegmwqldvbX/G9xTq9w7x/3lRoGx7EjMqeOgb6alwaHz3nZ1Sx6EqhOheyW4S6DuXMB6kdUU6ty5pcWwSQ190rRY7O0NyvWaojeUVk/S1YiANo3+QTlv/AIoNRu1kDLclp5lUgJNFqE7Lt+Z9wOCmMngurq8r14Eu6tYyndfBmB6GuZflYfvIxST7AKyPAo5jwMYpNli+JuIr7qLmljfTczX2Uzo4QXjUyE22Al5tItOOe96eH7SFUtmTZ860Qotg== Received: from AS4P191CA0002.EURP191.PROD.OUTLOOK.COM (2603:10a6:20b:5d5::6) by VE1PR10MB3951.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:800:161::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:53 +0000 Received: from AMS0EPF0000019D.eurprd05.prod.outlook.com (2603:10a6:20b:5d5:cafe::30) by AS4P191CA0002.outlook.office365.com (2603:10a6:20b:5d5::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:44 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF0000019D.mail.protection.outlook.com (10.167.16.249) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:52 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:38 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:51 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:36 +0100 Subject: [PATCH 11/13] media: stm32: dcmipp: add pixel-pipe support in bytecap Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-11-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF0000019D:EE_|VE1PR10MB3951:EE_ X-MS-Office365-Filtering-Correlation-Id: af1773c7-e9ff-497b-4d52-08de62630efa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|7416014|36860700013; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QWlGMWxvUHkyaWxFRFRRaXIvd1VBWENBSmFqZUJqNTduSGZ4bHFCK1E1ZUNi?= =?utf-8?B?THN1elFOd3B0TmxmcjVUQ205d0dWUkZMUTltQkQyVGVubXhETU9sZXIwMHRt?= =?utf-8?B?WEF2L1VFTExFZFprdXFvMVBmZ08yQkptcHNSR0ViRFFxQXBqM3JlekxjZlJS?= =?utf-8?B?NVBNVVdiL0s0QzVEcHdGQjBwM2JpeFJpbmZnek9jVllwMUV6dlRrdmxGKzBS?= =?utf-8?B?MktXU0t6TVJtR3pleDdtRGZKSDM3dXc3VEZMaUFmVmZWb0ZBWDhlRDdFK0lE?= =?utf-8?B?R2M3RFNaNFQwMjhuNEJKY091RG5EazJLWFkvRmErVUQvSnpMQ0VaMWVoeGYy?= =?utf-8?B?NnlGSmxkcmhrOG9adDdNNlFNbWdjdk0xRy9EUXN5WDYwY3k0N2x3OGF3YlZz?= =?utf-8?B?eElOY2NGdllLZlU2ajRQYXB1bTF1ZlJRM0J4cHVMUTZiYVVxWXBpZEVwWjFQ?= =?utf-8?B?bU9SMWZ2bHVVcjZ1S3hNZXN4UmZ5TlFtY3hEeDBwMlRmTnhFWnM4Wk1tRU5X?= =?utf-8?B?N2hjTmdxMFdoeEVJdGhRZVJ3ek5FZW1OUmVKdEt3ZWNKYUpIbzhqQUhNRUs5?= =?utf-8?B?WmtpOEs1NnRFLzVUTVhVRTQ1bHBFNEpZNVZoRzBBMHJJZVM1RmwrWjEybUw4?= =?utf-8?B?UVlOZmhsTUFjajQ5b2pjRVpnSmkva0wyRlBycGFVUTY1QjZmTUV1OTlkMUh3?= =?utf-8?B?RiswM0tLWjRVdExLdnMvcHBTeWd6YmVoa2lmNzIxQ29sKzBFUmxUZzF0ZmZa?= =?utf-8?B?L2ZiajhaSmpYRjF4V2hDSmZvb0tJcUhUL211VXhtblFoR0ZUcmMxeEdzbTBV?= =?utf-8?B?d1ZQa3h0ejN5cUNWNnRGMklEanhtZ1ZPZ0QyWXpaS1FWQ2pPQVN0WVAyR3Ju?= =?utf-8?B?ZkxyZWRaZk9GMFhxYTA0SmNvMWpJOFBiYmNlWkJUWGZKRXJvdWthUDRnVTZP?= =?utf-8?B?eXVnRTh6elRvbDhTb0dUbmN3VGZSdldpaC9sbktNckVwTzFHS3dROXhCa1Ft?= =?utf-8?B?NkxmUTZzVGI2NmxTUWpGNXU3Z0dWVytrNmFxcFRkL3h1Tk4yRHZmV01adUN5?= =?utf-8?B?bEpLc1F3RzZLalF6MjVEL28yeWNDSG1BQ0RQZkp1Tm1NdS9qTk8rN01tc0t4?= =?utf-8?B?SDdZZUU3dVZYYURTYThuZVptTGRBRnROaEFGUzVyT1RoQ1g4TEJkMHN4YTQ0?= =?utf-8?B?cW82VVVtOFM5aEw2NkRkNWxuYmZZQUxwd2ZTT241ZjFHenVRSTNYRk9sOUI5?= =?utf-8?B?QWtuaVBMdVhySTIrMElFamRTNmJLMzhXRVpCM1lUeXNsYWtxUUV5SHVzWm83?= =?utf-8?B?cVhHVUNhMXBLcUxmWWkreDBFelVkVTB2M2UxRy96WmZBM0ZZQ0JNMEp1dmhP?= =?utf-8?B?UFZsM2k1RTBaL0srb1BGTnN6Tld4eU9MY0JqMzRWSE9IT2ZCYXM5THc4WnNw?= =?utf-8?B?MVBmQjJLVFR3L2FZa1NWblR5QkhVRGVBYTBhRmhnc3R4WittZmNPd2V3S0h3?= =?utf-8?B?Y0V3ZllDcSttNkoxamFEWDR4MThpdERSZmsxR05FSWhWL21kVi9YaUxBaHpx?= =?utf-8?B?WDJtdXgrMGZKY2R0THFZR25hc0lRVDVNM1lWKzJmS0xoeThRQis4WjlOQWM0?= =?utf-8?B?aldMM2V1K0E5UTFlZk5TczBQZTFXUVlZZlU3b1RpNllYMUJsdlJIaDZ5c2Q2?= =?utf-8?B?SXZzTjl2N3RxVW1mUE42VVZaRDIwdnlhbGJsdzBDdlZIK1BqclR1dWtrL3c5?= =?utf-8?B?dkY3ZUJFelMrZWMxUDVlS01SUm9Mb2ZhdlVQNzdPbGFGdnVGOG1aMCt0RTNF?= =?utf-8?B?YXVYMVJyU0M0T1huWS85WXkvcFNSSUVGeEFKdHlYZHE0ODl0dVdLTnplRCsy?= =?utf-8?B?K3FmZEtuL3BoRGxnaTc0S2R4eUZiSTh4ek5ncXlQSnJHUmtwMjhnb0VKeXZW?= =?utf-8?B?dE9zK1NmSlYxZTRvUGl1czdJZ0tIdS85d1NnWlF3aFBjSU9qYnpxc1ZhSWVD?= =?utf-8?B?V0FTYjNzSXYwdlN1NUFjZm1TeEFzRHplc0tOYXlJa0ROY2dQZnJBS3N0MDVN?= =?utf-8?B?eVFrcjFTVUxCdDhPdm1HeWtBdGxYRU82VG1GN0lpL1Z5QVNnbm9BRVRMTW9r?= =?utf-8?B?a0JYa1BOazZZbEpKNWc3ekJlbGo0di96eGZHMzl2UDFWZVloZDRqb3pLbTJQ?= =?utf-8?B?c3VGN1RpWGlhYTNDejdKSkQ3MitpZGVUQVFNZ0kwbEZnaGgvVVBTbllxSm1p?= =?utf-8?B?dXQ2dE5nT0NXWVJLOUFwaXdreWN3PT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(7416014)(36860700013);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZfDJlrMM5iV+wi7gj7+MOe4ShZIa9OSC9Y9rbwNTg/4ElclRBJo/unCxUnf+yBGXdZlztTptDtd1WzUOIZDJqL06DQqR/KD076QKcK4PRI8DoslwiwitKO3a/AnCZLrLGoVOuFz1DkZVTaIsUwv8EP2yAC7fzz4ijid6/RfSiMQWPTAxufOhABAOxWo5p/52VutyBD862ImnfDQYwL2kqMIoGzi60QA1kwS5Zg19T0WtsZrjgPBGtipcM69iwaH6z4P30oqF1LsmLQtzY4F7klVfh4RNrpSLtt9jkmQWAVBF1PXEHSTSTkecS/cyFaXnq9GmfAnQUoqDe1cS6BGcbkSPpyfODS37oydLTqVsuvwlpNUZwDt0GgLPzVaZD96E3nVq82W5yoKmmcWH8TK1sK/rDdzqH6rNDmqpv6UIMG5/Z+LPd0aJNuwN5YSoUxZ1 X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:52.4968 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: af1773c7-e9ff-497b-4d52-08de62630efa X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF0000019D.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR10MB3951 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX8/8/RuERMmMh QyIADKm1EA04lJrrb/dE/nOAG2xatVttZujpMlOVwXCWKOYmg3Yvu/NB9uauINWNyOEeIZ7C/CT m6kNwXP0josfHS2GCvOFBhMqbGvcVyDBGQTGUXZNTbbYYVWhaaTWdizAgEkO4qxPtQzgnausMRk VEZeLISUGyOZV8TsxcBUBJlTARtaBmr52+9T2LwEm1CdcYZ8a2QV45F0CGMWEfOl/E3pMa58Mpt kUGMHwFMerpRfLpGTpmDNXmtK2DMiywMX9YUcoZONm5PeG8t10v6NOFibAa2erqigrfWp4fsN9d zLJGuzS5UpaEDsmjs6KygfIqSy9GcHLyhUNpheOyFgWFBRKnyd3U3efhiB5y64LrvJfHq150o5/ 0JWA8x4+AM/5ztqQPmEE45ktJDV3K2GDOo7cAxnvHkIVJZ0kQEwpZp47vH0PDeQCkhB4TC4mh8S l3Am0wFoiZ439rscDsg== X-Authority-Analysis: v=2.4 cv=LLBrgZW9 c=1 sm=1 tr=0 ts=6980ad68 cx=c_pps a=9AYPsD8W/ECldZET4Imr7g==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=MSClPMRaPwh2puV3uXMA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: vlF4B7PvpGiNypoR_uZ7tQMqlNvQAE-8 X-Proofpoint-ORIG-GUID: vlF4B7PvpGiNypoR_uZ7tQMqlNvQAE-8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 The dump pipe and pixel pipes capture part (tail of each pipe) is different in that pixel pipes have a pixel packer capable of generating various output format while the on dump pipe no such manipulation is possible. Still, all the buffer handling, format related manipulations are all same hence both dump and pixel pipe capture part are put together to avoid having large duplication of code. This patch adds the pixel pipe capture within bytecap hence name isn't modified and a further commit should rename the file and probably function name to not only highlight byte capture (aka dump pipe). Signed-off-by: Alain Volmat --- .../st/stm32/stm32-dcmipp/dcmipp-bytecap.c | 414 +++++++++++++++++= +--- 1 file changed, 353 insertions(+), 61 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c index 2fb34cac89c6..e96ba7931b27 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c @@ -25,27 +25,82 @@ #define DCMIPP_CMIER_P0ALL (DCMIPP_CMIER_P0VSYNCIE |\ DCMIPP_CMIER_P0FRAMEIE |\ DCMIPP_CMIER_P0OVRIE) +#define DCMIPP_CMIER_P1FRAMEIE BIT(17) +#define DCMIPP_CMIER_P1VSYNCIE BIT(18) +#define DCMIPP_CMIER_P1OVRIE BIT(23) +#define DCMIPP_CMIER_P1ALL (DCMIPP_CMIER_P1VSYNCIE |\ + DCMIPP_CMIER_P1FRAMEIE |\ + DCMIPP_CMIER_P1OVRIE) +#define DCMIPP_CMIER_P2FRAMEIE BIT(25) +#define DCMIPP_CMIER_P2VSYNCIE BIT(26) +#define DCMIPP_CMIER_P2OVRIE BIT(31) +#define DCMIPP_CMIER_P2ALL (DCMIPP_CMIER_P2VSYNCIE |\ + DCMIPP_CMIER_P2FRAMEIE |\ + DCMIPP_CMIER_P2OVRIE) +#define DCMIPP_CMIER_PxALL(id) (((id) =3D=3D 0) ? DCMIPP_CMIER_P0ALL : \ + (((id) =3D=3D 1) ? DCMIPP_CMIER_P1ALL : \ + DCMIPP_CMIER_P2ALL)) #define DCMIPP_CMSR1 0x3f4 #define DCMIPP_CMSR2 0x3f8 #define DCMIPP_CMSR2_P0FRAMEF BIT(9) #define DCMIPP_CMSR2_P0VSYNCF BIT(10) #define DCMIPP_CMSR2_P0OVRF BIT(15) +#define DCMIPP_CMSR2_P1FRAMEF BIT(17) +#define DCMIPP_CMSR2_P1VSYNCF BIT(18) +#define DCMIPP_CMSR2_P1OVRF BIT(23) +#define DCMIPP_CMSR2_P2FRAMEF BIT(25) +#define DCMIPP_CMSR2_P2VSYNCF BIT(26) +#define DCMIPP_CMSR2_P2OVRF BIT(31) +#define DCMIPP_CMSR2_PxFRAMEF(id) (((id) =3D=3D 0) ? DCMIPP_CMSR2_P0FRAMEF= :\ + (((id) =3D=3D 1) ? DCMIPP_CMSR2_P1FRAMEF :\ + DCMIPP_CMSR2_P2FRAMEF)) +#define DCMIPP_CMSR2_PxVSYNCF(id) (((id) =3D=3D 0) ? DCMIPP_CMSR2_P0VSYNCF= :\ + (((id) =3D=3D 1) ? DCMIPP_CMSR2_P1VSYNCF :\ + DCMIPP_CMSR2_P2VSYNCF)) +#define DCMIPP_CMSR2_PxOVRF(id) (((id) =3D=3D 0) ? DCMIPP_CMSR2_P0OVRF :\ + (((id) =3D=3D 1) ? DCMIPP_CMSR2_P1OVRF :\ + DCMIPP_CMSR2_P2OVRF)) #define DCMIPP_CMFCR 0x3fc -#define DCMIPP_P0FSCR 0x404 -#define DCMIPP_P0FSCR_PIPEN BIT(31) -#define DCMIPP_P0FCTCR 0x500 -#define DCMIPP_P0FCTCR_CPTREQ BIT(3) +#define DCMIPP_PxFSCR(id) (0x404 + ((id) * 0x400)) +#define DCMIPP_PxFSCR_PIPEN BIT(31) +#define DCMIPP_PxFCTCR(id) (0x500 + ((id) * 0x400)) +#define DCMIPP_PxFCTCR_CPTREQ BIT(3) #define DCMIPP_P0DCCNTR 0x5b0 #define DCMIPP_P0DCLMTR 0x5b4 #define DCMIPP_P0DCLMTR_ENABLE BIT(31) #define DCMIPP_P0DCLMTR_LIMIT_MASK GENMASK(23, 0) -#define DCMIPP_P0PPM0AR1 0x5c4 -#define DCMIPP_P0SR 0x5f8 -#define DCMIPP_P0SR_CPTACT BIT(23) + +#define DCMIPP_PxPPM0AR1(id) (0x5c4 + ((id) * 0x400)) +#define DCMIPP_PxPPM0PR(id) (0x9cc + (((id) - 1) * 0x400)) +#define DCMIPP_P1PPM1AR1 0x9d4 +#define DCMIPP_P1PPM1PR 0x9dc +#define DCMIPP_P1PPM2AR1 0x9e4 + + +#define DCMIPP_PxSR(id) (0x5f8 + ((id) * 0x400)) +#define DCMIPP_PxSR_CPTACT BIT(23) + +#define DCMIPP_PxPPCR(id) (0x9c0 + (((id) - 1) * 0x400)) +#define DCMIPP_PxPPCR_FORMAT_RGB888 0x0 +#define DCMIPP_PxPPCR_FORMAT_RGB565 0x1 +#define DCMIPP_PxPPCR_FORMAT_ARGB8888 0x2 +#define DCMIPP_PxPPCR_FORMAT_RGBA8888 0x3 +#define DCMIPP_PxPPCR_FORMAT_Y8 0x4 +#define DCMIPP_PxPPCR_FORMAT_YUV444 0x5 +#define DCMIPP_PxPPCR_FORMAT_YUYV 0x6 +#define DCMIPP_P1PPCR_FORMAT_NV61 0x7 +#define DCMIPP_P1PPCR_FORMAT_NV21 0x8 +#define DCMIPP_P1PPCR_FORMAT_YV12 0x9 +#define DCMIPP_PxPPCR_FORMAT_UYVY 0xa + +#define DCMIPP_PxPPCR_SWAPRB BIT(4) =20 struct dcmipp_bytecap_pix_map { unsigned int code; u32 pixelformat; + u32 plane_nb; + unsigned int ppcr_fmt; + unsigned int swap_uv; }; =20 #define PIXMAP_MBUS_PFMT(mbus, fmt) \ @@ -54,7 +109,7 @@ struct dcmipp_bytecap_pix_map { .pixelformat =3D V4L2_PIX_FMT_##fmt \ } =20 -static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_pix_map_list[] = =3D { +static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_dump_pix_map_lis= t[] =3D { PIXMAP_MBUS_PFMT(RGB565_2X8_LE, RGB565), PIXMAP_MBUS_PFMT(RGB565_1X16, RGB565), PIXMAP_MBUS_PFMT(RGB888_1X24, RGB24), @@ -89,24 +144,47 @@ static const struct dcmipp_bytecap_pix_map dcmipp_byte= cap_pix_map_list[] =3D { PIXMAP_MBUS_PFMT(JPEG_1X8, JPEG), }; =20 -static const struct dcmipp_bytecap_pix_map * -dcmipp_bytecap_pix_map_by_pixelformat(u32 pixelformat) -{ - unsigned int i; - - for (i =3D 0; i < ARRAY_SIZE(dcmipp_bytecap_pix_map_list); i++) { - if (dcmipp_bytecap_pix_map_list[i].pixelformat =3D=3D pixelformat) - return &dcmipp_bytecap_pix_map_list[i]; +#define PIXMAP_MBUS_PIXEL_PFMT(mbus, fmt, nb_plane, pp_code, swap) \ + { \ + .code =3D MEDIA_BUS_FMT_##mbus, \ + .pixelformat =3D V4L2_PIX_FMT_##fmt, \ + .plane_nb =3D nb_plane, \ + .ppcr_fmt =3D pp_code, \ + .swap_uv =3D swap, \ } =20 - return NULL; -} +static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_pixel_pix_map_li= st[] =3D { + /* Coplanar formats are supported on main & aux pipe */ + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, RGB565, 1, DCMIPP_PxPPCR_FORMAT_RGB56= 5, 0), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, YUYV, 1, DCMIPP_PxPPCR_FORMAT_YUYV, 0), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, YVYU, 1, DCMIPP_PxPPCR_FORMAT_YUYV, 1), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, UYVY, 1, DCMIPP_PxPPCR_FORMAT_UYVY, 0), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, VYUY, 1, DCMIPP_PxPPCR_FORMAT_UYVY, 1), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, GREY, 1, DCMIPP_PxPPCR_FORMAT_Y8, 0), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, RGB24, 1, DCMIPP_PxPPCR_FORMAT_RGB888= , 1), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, BGR24, 1, DCMIPP_PxPPCR_FORMAT_RGB888= , 0), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, ARGB32, 1, DCMIPP_PxPPCR_FORMAT_RGBA8= 888, 1), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, ABGR32, 1, DCMIPP_PxPPCR_FORMAT_ARGB8= 888, 0), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, RGBA32, 1, DCMIPP_PxPPCR_FORMAT_ARGB8= 888, 1), + PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, BGRA32, 1, DCMIPP_PxPPCR_FORMAT_RGBA8= 888, 0), + + /* Semiplanar & planar formats (plane_nb > 1) are only supported on main = pipe */ + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, NV12, 2, DCMIPP_P1PPCR_FORMAT_NV21, 0), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, NV21, 2, DCMIPP_P1PPCR_FORMAT_NV21, 1), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, NV16, 2, DCMIPP_P1PPCR_FORMAT_NV61, 0), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, NV61, 2, DCMIPP_P1PPCR_FORMAT_NV61, 1), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, YUV420, 3, DCMIPP_P1PPCR_FORMAT_YV12, 0= ), + PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, YVU420, 3, DCMIPP_P1PPCR_FORMAT_YV12, 1= ), +}; =20 struct dcmipp_buf { struct vb2_v4l2_buffer vb; bool prepared; dma_addr_t addr; size_t size; + dma_addr_t addrs[3]; + u32 strides[3]; + u64 sizes[3]; struct list_head list; }; =20 @@ -140,6 +218,11 @@ struct dcmipp_bytecap_device { =20 void __iomem *regs; =20 + u32 pipe_id; + + const struct dcmipp_bytecap_pix_map *pix_map; + unsigned int pix_map_array_size; + u32 cmsr2; =20 struct { @@ -155,6 +238,30 @@ struct dcmipp_bytecap_device { } count; }; =20 +static const struct dcmipp_bytecap_pix_map * +dcmipp_bytecap_pix_map_by_pixelformat(struct dcmipp_bytecap_device *vcap, + u32 pixelformat) +{ + for (unsigned int i =3D 0; i < vcap->pix_map_array_size; i++) { + if (vcap->pix_map[i].pixelformat =3D=3D pixelformat) + return &vcap->pix_map[i]; + } + + return NULL; +} + +static bool dcmipp_bytecap_is_format_valid(struct dcmipp_bytecap_device *v= cap, + unsigned int pixelformat) +{ + const struct dcmipp_bytecap_pix_map *vpix =3D + dcmipp_bytecap_pix_map_by_pixelformat(vcap, pixelformat); + + if (!vpix || (vpix->plane_nb > 1 && vcap->pipe_id !=3D 1)) + return false; + + return true; +} + static const struct v4l2_pix_format fmt_default =3D { .width =3D DCMIPP_FMT_WIDTH_DEFAULT, .height =3D DCMIPP_FMT_HEIGHT_DEFAULT, @@ -168,6 +275,73 @@ static const struct v4l2_pix_format fmt_default =3D { .xfer_func =3D DCMIPP_XFER_FUNC_DEFAULT, }; =20 +static inline int hdw_pixel_alignment(u32 format) +{ + /* 16 bytes alignment required by hardware */ + switch (format) { + case V4L2_PIX_FMT_NV12: + case V4L2_PIX_FMT_NV21: + case V4L2_PIX_FMT_YUV420: + case V4L2_PIX_FMT_YVU420: + case V4L2_PIX_FMT_NV16: + case V4L2_PIX_FMT_NV61: + case V4L2_PIX_FMT_GREY: + return 4;/* 2^4 =3D 16 pixels =3D 16 bytes */ + case V4L2_PIX_FMT_RGB565: + case V4L2_PIX_FMT_YUYV: + case V4L2_PIX_FMT_YVYU: + case V4L2_PIX_FMT_UYVY: + case V4L2_PIX_FMT_VYUY: + return 3;/* 2^3 =3D 8 pixels =3D 16 bytes */ + case V4L2_PIX_FMT_RGB24: + case V4L2_PIX_FMT_BGR24: + return 4;/* 2^4 =3D 16 pixels =3D 48 bytes */ + case V4L2_PIX_FMT_ARGB32: + case V4L2_PIX_FMT_ABGR32: + case V4L2_PIX_FMT_RGBA32: + case V4L2_PIX_FMT_BGRA32: + return 2;/* 2^2 =3D 4 pixels =3D 16 bytes */ + default: + return 0; + } +} + +static inline int frame_planes(dma_addr_t base_addr, dma_addr_t addrs[], + u32 strides[], u64 sizes[], + u32 width, u32 height, u32 format) +{ + const struct v4l2_format_info *info; + + /* Only used by dump pipe hence addrs[0] is enough */ + if (format =3D=3D V4L2_PIX_FMT_JPEG) { + addrs[0] =3D base_addr; + return 0; + } + + info =3D v4l2_format_info(format); + if (!info) + return -EINVAL; + + /* Fill-in each plane information */ + addrs[0] =3D base_addr; + strides[0] =3D width * info->bpp[0]; + sizes[0] =3D strides[0] * height; + + if (info->comp_planes > 1) { + addrs[1] =3D addrs[0] + sizes[0]; + strides[1] =3D width * info->bpp[1] / info->hdiv; + sizes[1] =3D strides[1] * height / info->vdiv; + } + + if (info->comp_planes > 2) { + addrs[2] =3D addrs[1] + sizes[1]; + strides[2] =3D width * info->bpp[2] / info->hdiv; + sizes[2] =3D strides[2] * height / info->vdiv; + } + + return 0; +} + static int dcmipp_bytecap_querycap(struct file *file, void *priv, struct v4l2_capability *cap) { @@ -192,19 +366,20 @@ static int dcmipp_bytecap_try_fmt_vid_cap(struct file= *file, void *priv, { struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); struct v4l2_pix_format *format =3D &f->fmt.pix; - const struct dcmipp_bytecap_pix_map *vpix; + /* Take into consideration the width constraint of the pixel packer */ + unsigned int walign =3D (vcap->pipe_id !=3D 0 ? + hdw_pixel_alignment(format->pixelformat) : 0); u32 in_w, in_h; =20 /* Don't accept a pixelformat that is not on the table */ - vpix =3D dcmipp_bytecap_pix_map_by_pixelformat(format->pixelformat); - if (!vpix) + if (!dcmipp_bytecap_is_format_valid(vcap, format->pixelformat)) format->pixelformat =3D fmt_default.pixelformat; =20 /* Adjust width & height */ in_w =3D format->width; in_h =3D format->height; v4l_bound_align_image(&format->width, DCMIPP_FRAME_MIN_WIDTH, - DCMIPP_FRAME_MAX_WIDTH, 0, &format->height, + DCMIPP_FRAME_MAX_WIDTH, walign, &format->height, DCMIPP_FRAME_MIN_HEIGHT, DCMIPP_FRAME_MAX_HEIGHT, 0, 0); if (format->width !=3D in_w || format->height !=3D in_h) @@ -262,7 +437,7 @@ static int dcmipp_bytecap_s_fmt_vid_cap(struct file *fi= le, void *priv, static int dcmipp_bytecap_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *f) { - const struct dcmipp_bytecap_pix_map *vpix; + struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); unsigned int index =3D f->index; unsigned int i, prev_pixelformat =3D 0; =20 @@ -271,17 +446,20 @@ static int dcmipp_bytecap_enum_fmt_vid_cap(struct fil= e *file, void *priv, * care of removing duplicated entries (due to support of both * parallel & csi 16 bits formats */ - for (i =3D 0; i < ARRAY_SIZE(dcmipp_bytecap_pix_map_list); i++) { - vpix =3D &dcmipp_bytecap_pix_map_list[i]; + for (i =3D 0; i < vcap->pix_map_array_size; i++) { + /* Only main pipe supports (Semi)-planar formats */ + if (vcap->pipe_id !=3D 1 && vcap->pix_map[i].plane_nb > 1) + continue; + /* Skip formats not matching requested mbus code */ - if (f->mbus_code && vpix->code !=3D f->mbus_code) + if (f->mbus_code && vcap->pix_map[i].code !=3D f->mbus_code) continue; =20 /* Skip duplicated pixelformat */ - if (vpix->pixelformat =3D=3D prev_pixelformat) + if (vcap->pix_map[i].pixelformat =3D=3D prev_pixelformat) continue; =20 - prev_pixelformat =3D vpix->pixelformat; + prev_pixelformat =3D vcap->pix_map[i].pixelformat; =20 if (index =3D=3D 0) break; @@ -289,10 +467,10 @@ static int dcmipp_bytecap_enum_fmt_vid_cap(struct fil= e *file, void *priv, index--; } =20 - if (i =3D=3D ARRAY_SIZE(dcmipp_bytecap_pix_map_list)) + if (i =3D=3D vcap->pix_map_array_size) return -EINVAL; =20 - f->pixelformat =3D vpix->pixelformat; + f->pixelformat =3D vcap->pix_map[i].pixelformat; =20 return 0; } @@ -300,14 +478,14 @@ static int dcmipp_bytecap_enum_fmt_vid_cap(struct fil= e *file, void *priv, static int dcmipp_bytecap_enum_framesizes(struct file *file, void *fh, struct v4l2_frmsizeenum *fsize) { - const struct dcmipp_bytecap_pix_map *vpix; + struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + =20 if (fsize->index) return -EINVAL; =20 /* Only accept code in the pix map table */ - vpix =3D dcmipp_bytecap_pix_map_by_pixelformat(fsize->pixel_format); - if (!vpix) + if (!dcmipp_bytecap_is_format_valid(vcap, fsize->pixel_format)) return -EINVAL; =20 fsize->type =3D V4L2_FRMSIZE_TYPE_CONTINUOUS; @@ -355,14 +533,27 @@ static void dcmipp_start_capture(struct dcmipp_byteca= p_device *vcap, struct dcmipp_buf *buf) { /* Set buffer address */ - reg_write(vcap, DCMIPP_P0PPM0AR1, buf->addr); + reg_write(vcap, DCMIPP_PxPPM0AR1(vcap->pipe_id), buf->addrs[0]); + + if (vcap->pipe_id =3D=3D 0) { + /* Set buffer size */ + reg_write(vcap, DCMIPP_P0DCLMTR, DCMIPP_P0DCLMTR_ENABLE | + ((buf->size / 4) & DCMIPP_P0DCLMTR_LIMIT_MASK)); + } else { + reg_write(vcap, DCMIPP_PxPPM0PR(vcap->pipe_id), + buf->strides[0]); + + if (buf->addrs[1]) { + reg_write(vcap, DCMIPP_P1PPM1AR1, buf->addrs[1]); + reg_write(vcap, DCMIPP_P1PPM1PR, buf->strides[1]); + } =20 - /* Set buffer size */ - reg_write(vcap, DCMIPP_P0DCLMTR, DCMIPP_P0DCLMTR_ENABLE | - ((buf->size / 4) & DCMIPP_P0DCLMTR_LIMIT_MASK)); + if (buf->addrs[2]) + reg_write(vcap, DCMIPP_P1PPM2AR1, buf->addrs[2]); + } =20 /* Capture request */ - reg_set(vcap, DCMIPP_P0FCTCR, DCMIPP_P0FCTCR_CPTREQ); + reg_set(vcap, DCMIPP_PxFCTCR(vcap->pipe_id), DCMIPP_PxFCTCR_CPTREQ); } =20 static void dcmipp_bytecap_all_buffers_done(struct dcmipp_bytecap_device *= vcap, @@ -421,8 +612,25 @@ static int dcmipp_bytecap_start_streaming(struct vb2_q= ueue *vq, =20 spin_lock_irq(&vcap->irqlock); =20 + if (vcap->pipe_id !=3D 0) { + const struct dcmipp_bytecap_pix_map *vpix =3D + dcmipp_bytecap_pix_map_by_pixelformat(vcap, vcap->format.pixelformat); + unsigned int ppcr =3D 0; + + /* + * Configure the Pixel Packer + * vpix is guaranteed to be valid since pixelformat is validated + * in dcmipp_pixelcap_s_fmt_vid_cap function before + */ + ppcr =3D vpix->ppcr_fmt; + if (vpix->swap_uv) + ppcr |=3D DCMIPP_PxPPCR_SWAPRB; + + reg_write(vcap, DCMIPP_PxPPCR(vcap->pipe_id), ppcr); + } + /* Enable pipe at the end of programming */ - reg_set(vcap, DCMIPP_P0FSCR, DCMIPP_P0FSCR_PIPEN); + reg_set(vcap, DCMIPP_PxFSCR(vcap->pipe_id), DCMIPP_PxFSCR_PIPEN); =20 /* * vb2 framework guarantee that we have at least 'min_queued_buffers' @@ -436,7 +644,7 @@ static int dcmipp_bytecap_start_streaming(struct vb2_qu= eue *vq, =20 /* Enable interruptions */ spin_lock(&vcap->vdev.v4l2_dev->lock); - reg_set(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL); + reg_set(vcap, DCMIPP_CMIER, DCMIPP_CMIER_PxALL(vcap->pipe_id)); spin_unlock(&vcap->vdev.v4l2_dev->lock); =20 vcap->state =3D DCMIPP_RUNNING; @@ -467,7 +675,7 @@ static void dcmipp_dump_status(struct dcmipp_bytecap_de= vice *vcap) struct device *dev =3D vcap->dev; =20 dev_dbg(dev, "[DCMIPP_PRSR] =3D%#10.8x\n", reg_read(vcap, DCMIPP_PRSR)); - dev_dbg(dev, "[DCMIPP_P0SR] =3D%#10.8x\n", reg_read(vcap, DCMIPP_P0SR)); + dev_dbg(dev, "[DCMIPP_P0SR] =3D%#10.8x\n", reg_read(vcap, DCMIPP_PxSR(0))= ); dev_dbg(dev, "[DCMIPP_P0DCCNTR]=3D%#10.8x\n", reg_read(vcap, DCMIPP_P0DCCNTR)); dev_dbg(dev, "[DCMIPP_CMSR1] =3D%#10.8x\n", reg_read(vcap, DCMIPP_CMSR1)); @@ -494,25 +702,26 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_= queue *vq) =20 /* Disable interruptions */ spin_lock(&vcap->vdev.v4l2_dev->lock); - reg_clear(vcap, DCMIPP_CMIER, DCMIPP_CMIER_P0ALL); + reg_clear(vcap, DCMIPP_CMIER, DCMIPP_CMIER_PxALL(vcap->pipe_id)); spin_unlock(&vcap->vdev.v4l2_dev->lock); =20 /* Stop capture */ - reg_clear(vcap, DCMIPP_P0FCTCR, DCMIPP_P0FCTCR_CPTREQ); + reg_clear(vcap, DCMIPP_PxFCTCR(vcap->pipe_id), DCMIPP_PxFCTCR_CPTREQ); =20 /* Wait until CPTACT become 0 */ - ret =3D readl_relaxed_poll_timeout(vcap->regs + DCMIPP_P0SR, status, - !(status & DCMIPP_P0SR_CPTACT), + ret =3D readl_relaxed_poll_timeout(vcap->regs + DCMIPP_PxSR(vcap->pipe_id= ), + status, + !(status & DCMIPP_PxSR_CPTACT), 20 * USEC_PER_MSEC, 1000 * USEC_PER_MSEC); if (ret) dev_warn(vcap->dev, "Timeout when stopping\n"); =20 /* Disable pipe */ - reg_clear(vcap, DCMIPP_P0FSCR, DCMIPP_P0FSCR_PIPEN); + reg_clear(vcap, DCMIPP_PxFSCR(vcap->pipe_id), DCMIPP_PxFSCR_PIPEN); =20 /* Clear any pending interrupts */ - reg_write(vcap, DCMIPP_CMFCR, DCMIPP_CMIER_P0ALL); + reg_write(vcap, DCMIPP_CMFCR, DCMIPP_CMIER_PxALL(vcap->pipe_id)); =20 spin_lock_irq(&vcap->irqlock); =20 @@ -525,7 +734,8 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_qu= eue *vq) =20 spin_unlock_irq(&vcap->irqlock); =20 - dcmipp_dump_status(vcap); + if (vcap->pipe_id =3D=3D 0) + dcmipp_dump_status(vcap); =20 pm_runtime_put(vcap->dev); =20 @@ -541,7 +751,9 @@ static int dcmipp_bytecap_buf_prepare(struct vb2_buffer= *vb) struct dcmipp_bytecap_device *vcap =3D vb2_get_drv_priv(vb->vb2_queue); struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct dcmipp_buf *buf =3D container_of(vbuf, struct dcmipp_buf, vb); + struct v4l2_pix_format *format =3D &vcap->format; unsigned long size; + int ret; =20 size =3D vcap->format.sizeimage; =20 @@ -557,6 +769,24 @@ static int dcmipp_bytecap_buf_prepare(struct vb2_buffe= r *vb) /* Get memory addresses */ buf->addr =3D vb2_dma_contig_plane_dma_addr(&buf->vb.vb2_buf, 0); buf->size =3D vb2_plane_size(&buf->vb.vb2_buf, 0); + + ret =3D frame_planes(buf->addr, + buf->addrs, buf->strides, buf->sizes, + format->width, format->height, + format->pixelformat); + if (ret) { + dev_err(vcap->dev, "%s: Unsupported pixel format (%x)\n", + __func__, format->pixelformat); + return ret; + } + + /* Check for 16 bytes alignment required by hardware */ + WARN_ON(buf->addrs[0] & 15); + WARN_ON(buf->strides[0] & 15); + WARN_ON(buf->addrs[1] & 15); + WARN_ON(buf->strides[1] & 15); + WARN_ON(buf->addrs[2] & 15); + buf->prepared =3D true; =20 vb2_set_plane_payload(&buf->vb.vb2_buf, 0, buf->size); @@ -690,7 +920,7 @@ dcmipp_bytecap_set_next_frame_or_stop(struct dcmipp_byt= ecap_device *vcap) * for next frame). On-going frame capture will continue until * FRAME END but no further capture will be done. */ - reg_clear(vcap, DCMIPP_P0FCTCR, DCMIPP_P0FCTCR_CPTREQ); + reg_clear(vcap, DCMIPP_PxFCTCR(vcap->pipe_id), DCMIPP_PxFCTCR_CPTREQ); =20 dev_dbg(vcap->dev, "Capture restart is deferred to next buffer queueing\= n"); vcap->next =3D NULL; @@ -707,7 +937,13 @@ dcmipp_bytecap_set_next_frame_or_stop(struct dcmipp_by= tecap_device *vcap) * This register is shadowed and will be taken into * account on next VSYNC (start of next frame) */ - reg_write(vcap, DCMIPP_P0PPM0AR1, vcap->next->addr); + reg_write(vcap, DCMIPP_PxPPM0AR1(vcap->pipe_id), vcap->next->addrs[0]); + if (vcap->pipe_id =3D=3D 1) { + if (vcap->next->addrs[1]) + reg_write(vcap, DCMIPP_P1PPM1AR1, vcap->next->addrs[1]); + if (vcap->next->addrs[2]) + reg_write(vcap, DCMIPP_P1PPM2AR1, vcap->next->addrs[2]); + } dev_dbg(vcap->dev, "Write [%d] %p phy=3D%pad\n", vcap->next->vb.vb2_buf.index, vcap->next, &vcap->next->addr); } @@ -743,29 +979,39 @@ static irqreturn_t dcmipp_bytecap_irq_thread(int irq,= void *arg) { struct dcmipp_bytecap_device *vcap =3D container_of(arg, struct dcmipp_bytecap_device, ved); + u32 cmsr2_pxframef; + u32 cmsr2_pxvsyncf; + u32 cmsr2_pxovrf; size_t bytesused =3D 0; =20 spin_lock_irq(&vcap->irqlock); =20 + cmsr2_pxovrf =3D DCMIPP_CMSR2_PxOVRF(vcap->pipe_id); + cmsr2_pxvsyncf =3D DCMIPP_CMSR2_PxVSYNCF(vcap->pipe_id); + cmsr2_pxframef =3D DCMIPP_CMSR2_PxFRAMEF(vcap->pipe_id); + /* * If we have an overrun, a frame-end will probably not be generated, * in that case the active buffer will be recycled as next buffer by * the VSYNC handler */ - if (vcap->cmsr2 & DCMIPP_CMSR2_P0OVRF) { + if (vcap->cmsr2 & cmsr2_pxovrf) { vcap->count.errors++; vcap->count.overrun++; } =20 - if (vcap->cmsr2 & DCMIPP_CMSR2_P0FRAMEF) { + if (vcap->cmsr2 & cmsr2_pxframef) { vcap->count.frame++; =20 /* Read captured buffer size */ - bytesused =3D reg_read(vcap, DCMIPP_P0DCCNTR); + if (vcap->pipe_id =3D=3D 0) + bytesused =3D reg_read(vcap, DCMIPP_P0DCCNTR); + else + bytesused =3D vcap->format.sizeimage; dcmipp_bytecap_process_frame(vcap, bytesused); } =20 - if (vcap->cmsr2 & DCMIPP_CMSR2_P0VSYNCF) { + if (vcap->cmsr2 & cmsr2_pxvsyncf) { vcap->count.vsync++; if (vcap->state =3D=3D DCMIPP_WAIT_FOR_BUFFER) { vcap->count.underrun++; @@ -797,7 +1043,7 @@ static irqreturn_t dcmipp_bytecap_irq_callback(int irq= , void *arg) struct dcmipp_ent_device *ved =3D arg; =20 /* Store interrupt status register */ - vcap->cmsr2 =3D ved->cmsr2 & DCMIPP_CMIER_P0ALL; + vcap->cmsr2 =3D ved->cmsr2 & DCMIPP_CMIER_PxALL(vcap->pipe_id); if (!vcap->cmsr2) return IRQ_HANDLED; vcap->count.it++; @@ -826,6 +1072,26 @@ static int dcmipp_bytecap_link_validate(struct media_= link *link) if (ret < 0) return 0; =20 + /* On pixel pipes there can be alignment constraints */ + if (vcap->pipe_id !=3D 0) { + u32 width_aligned; + /* + * Depending on the format & pixelpacker constraints, vcap width is + * different from mbus width. Compute expected vcap width based on + * mbus width + */ + width_aligned =3D round_up(source_fmt.format.width, + 1 << hdw_pixel_alignment(vcap->format.pixelformat)); + + if (width_aligned !=3D vcap->format.width || + source_fmt.format.height !=3D vcap->format.height) { + dev_err(vcap->dev, "Wrong width or height %ux%u (%ux%u expected)\n", + vcap->format.width, vcap->format.height, + width_aligned, source_fmt.format.height); + return -EINVAL; + } + } + if (source_fmt.format.width !=3D vcap->format.width || source_fmt.format.height !=3D vcap->format.height) { dev_err(vcap->dev, "Wrong width or height %ux%u (%ux%u expected)\n", @@ -834,15 +1100,13 @@ static int dcmipp_bytecap_link_validate(struct media= _link *link) return -EINVAL; } =20 - for (i =3D 0; i < ARRAY_SIZE(dcmipp_bytecap_pix_map_list); i++) { - if (dcmipp_bytecap_pix_map_list[i].pixelformat =3D=3D - vcap->format.pixelformat && - dcmipp_bytecap_pix_map_list[i].code =3D=3D - source_fmt.format.code) + for (i =3D 0; i < vcap->pix_map_array_size; i++) { + if (vcap->pix_map[i].pixelformat =3D=3D vcap->format.pixelformat && + vcap->pix_map[i].code =3D=3D source_fmt.format.code) break; } =20 - if (i =3D=3D ARRAY_SIZE(dcmipp_bytecap_pix_map_list)) { + if (i =3D=3D vcap->pix_map_array_size) { dev_err(vcap->dev, "mbus code 0x%x do not match capture device format (0= x%x)\n", vcap->format.pixelformat, source_fmt.format.code); return -EINVAL; @@ -855,6 +1119,18 @@ static const struct media_entity_operations dcmipp_by= tecap_entity_ops =3D { .link_validate =3D dcmipp_bytecap_link_validate, }; =20 +static int dcmipp_name_to_pipe_id(const char *name) +{ + if (strstr(name, "dump")) + return 0; + else if (strstr(name, "main")) + return 1; + else if (strstr(name, "aux")) + return 2; + else + return -EINVAL; +} + struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, struct dcmipp_device *dcmipp) { @@ -870,6 +1146,22 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(con= st char *entity_name, if (!vcap) return ERR_PTR(-ENOMEM); =20 + /* Retrieve the pipe_id */ + vcap->pipe_id =3D dcmipp_name_to_pipe_id(entity_name); + if (vcap->pipe_id < 0) { + dev_err(dev, "failed to retrieve pipe_id\n"); + goto err_free_vcap; + } + + /* Initialize supported format table format */ + if (vcap->pipe_id =3D=3D 0) { + vcap->pix_map =3D dcmipp_bytecap_dump_pix_map_list; + vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_bytecap_dump_pix_map_list= ); + } else { + vcap->pix_map =3D dcmipp_bytecap_pixel_pix_map_list; + vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_bytecap_pixel_pix_map_lis= t); + } + /* Allocate the pads */ vcap->ved.pads =3D dcmipp_pads_init(1, &pad_flag); if (IS_ERR(vcap->ved.pads)) { --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3F8236B069; Mon, 2 Feb 2026 13:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040697; cv=fail; b=nxUY7wZjD2mZq1+OMLEYNHypo2sp9msUmEgjir4pmCzRWnYpGwyWi4F1skkukdPiqrMLK5KReTIt1/FVWtstRkpYcWxvSPkHR1RMNOSFEYL43yOFE5GKXqLYJoftrBtOUY0o3cSUOAMbvrATd+f0bjWjmrFF4zCHbCaxB1WA+FA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040697; c=relaxed/simple; bh=6N+lzR8i8KlHFHP49PSD9SxcCGl818MqnvwHjTFhmYQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=UxUOLQZxaNfb1utgxp380GklCS6poMwM3Gf4A0wOJvwO27xp8F2zqNZFRkJ7NHRTcJmdTi0iM+SDAwxSrP/599dCV7KiJOc4+uLhtpxShQANcwZayavVaPikD7rqdyYcCKLOEn+OP9tajyacEvgBwbMPqmTh+ZrA3VayRGuOXqg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=dHmkv5Ge; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="dHmkv5Ge" Received: from pps.filterd (m0369458.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612DfobJ2359518; Mon, 2 Feb 2026 14:58:00 +0100 Received: from pa4pr04cu001.outbound.protection.outlook.com (mail-francecentralazon11013000.outbound.protection.outlook.com [40.107.162.0]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1v654dg1-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:58:00 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kF6vY/6E/zD5RQCVCh6UfSSX40TXwk2EcsTZnS51686OEi8XaKtthdutxO6j272k1oBGOW435nfeDG9dMxUHAQIt1cBgSxqVXe7nlUOLuSKX9dNC5ric84DBgxHjBMg2JdDymkvWgHzBP99pPv3fooXcg3YByWhIQD2VCuvg8OwxMBo22mIymN2K4IHjTzaoMWEyIKivynhQYu89BBLb7ACiGJW6Z/J/194szbRVgNGDuZiLIEN1QVpwLbGCHhog/1PVhU/RRN4Pm10vLjGOVvZa9VkVanSWb+wojdc9E17lL2otf129DyADAx41nl+7X29s9KSLpNXF5Qc6db3f8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=PCf31ZmIEzai8pdGne0lASQmkXN93lRUWAkwiLc9F1Q=; b=OXjT0aonV73cBbRdBDZ4AylS/oOQNJE0tHNUPHx7o1c7yfWAm6RWJaRmWLFaFQvSxvJCKbG/YUgWu0/Zujrw8jmkg34lfbG9MDRrcdreyxDSu3ZX4pkdupC/2FKlRWY+KSBZdT9gKWys2yuBa+kyqZjPwsNNhCiSa69REFU2dgZeO/PU6hUpeU+SS63vY2271V7Byb5eaTi2OOgKFad+nBY+vVwBs0Wqk618DSh3hmcJjov5ZC0NSPujgaQNFCF+t55aC9OfNXQyfJx90EFuBs9yFGueuBB+b7Wpys12yhJsfT+fm8T1xLG4x8qwxfQsptb1GvnkbhAuocDkIlHSgQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.60) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PCf31ZmIEzai8pdGne0lASQmkXN93lRUWAkwiLc9F1Q=; b=dHmkv5GedskNlPvZQcV9R9bNC0CiviIuRBFgfA6wc2DnpOlVDj0Yns0yfuTKdw8xAI61dRHrgY63zvgG4gFh1xfUZHZQFF5R4uD3/447b0oEE8G8yqIUaVVGJ8okXaVV94LHdFSyACQjnDo/VOiO5ELvIIfQs32yObgIlkzTidZ8/DxO/H+Lm6oZjVq6gxgDvBSWyjwl04jk2w60FgnGktCNOL6tpGaeMW00tTMcJY8VNzPakN3B5UboxsPIfQCsrGcW3CVfXEW2UYnrezgML9JkZtCQcdkA180++l7O3U+JHl5fUyDhoY0cRneJAIkKel6llqHmJb+pIS1NkVXflg== Received: from AM8P251CA0024.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::29) by AS8PR10MB7280.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:614::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:55 +0000 Received: from AM2PEPF0001C716.eurprd05.prod.outlook.com (2603:10a6:20b:21b:cafe::7f) by AM8P251CA0024.outlook.office365.com (2603:10a6:20b:21b::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.11 via Frontend Transport; Mon, 2 Feb 2026 13:57:47 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.60) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.60 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.60; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.60) by AM2PEPF0001C716.mail.protection.outlook.com (10.167.16.186) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:54 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpO365.st.com (10.250.44.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:31 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:52 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:37 +0100 Subject: [PATCH 12/13] media: stm32: dcmipp: rename bytecap into capture Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-12-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM2PEPF0001C716:EE_|AS8PR10MB7280:EE_ X-MS-Office365-Filtering-Correlation-Id: 17c47691-9ddd-4081-58ce-08de6263106e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UWR1aDNyZUZHaVdKYnFpTmlrSHc0Z0pLNHRubDJBdzUya1Nhbi9Rd2pSRlF4?= =?utf-8?B?NjlBRWJnKytNQVF1UGd0WDhUUmxlQ2VwM095RUp3dW8xQzc0amZ6QjJMWUJo?= =?utf-8?B?aFF5VjJ3aFJDUUFqSjVkQjY0bDlmRHVIWEdDQjBGb2Z3M0ZneDlNM1UyN3dQ?= =?utf-8?B?eDhFWk0yYlZmUVo4b0lQVE5HQk5qSDVoa2FpdHpUZDJNRGYzb0VTR3QzMkNq?= =?utf-8?B?aXR2YnVtWlVhU1lkWFQ4b213bzViRDhmNnR4SnZPL0dFbjJnZWM3bzluTSt1?= =?utf-8?B?Wi8xQldCRjB2N2syRTNaUHdHLzhzTW0zck1Xa3pqSmw1T01TbEhnVndQVDZj?= =?utf-8?B?aXVhY1VDdWFwSmhlQ0dPcXZOUk1iTzN5ekVqK3NaZlRrYmp3YWd4eHRVRFJt?= =?utf-8?B?V2tFcFlvTTMzdXNlVWdQbzdtQUdTNU9nMm1RQWVSNWphdlhTMmp4VllySFJz?= =?utf-8?B?SUF6OXNpN2p0cVFybW5JcHJQL3FIYVl3RzNVVFU3QlpzQ2l0SFdMV21CMmpC?= =?utf-8?B?RUFQMTdKcVArN0ZnMkI5RGI3WXJrWmtya3R0SndoVVZ0QVJvSjlIRjdHS0pi?= =?utf-8?B?ZzA4blpJZnZSM3c3ekxiSkxNUDFsSW5TUE5MYWxBcGlodEdMV1YwUjN2dm8v?= =?utf-8?B?cXdHejk1d0U0eU5SSEJuOU9rdUwvcFdaM1VNZUx0T1lTYzZTYThxMHJWSHVk?= =?utf-8?B?RWhpa0krOEdQc2pjREFZZlhDenhkUFFpQklFMStBL0Vac0ovdm5sYXpmZGxQ?= =?utf-8?B?ZGRUdmVwaytja0tVYUsrQ3B4UFl4ckFDTDF6WTVqTVBpMHF1Q3hWMTN4aUMz?= =?utf-8?B?WTA0aDB1NjFTWE1Xd0IwWWNMS1FrZ1NvWnNTVFlPV0tmaHBYcjlQQnlpRitH?= =?utf-8?B?ZGZSNGxhV0lUWGRmRldYbEVYWm8vQk5CNkMwTVRQdmk5M2xjTmQ2Y0VMUkxh?= =?utf-8?B?R1VzMC9abHAxaENsblNwT3dHeHJONW45aGZPQzhSVURRRlhrMEsxOUEzUTdJ?= =?utf-8?B?bXd5bkdWbVRnUEUzY2xUYkZ5ay8ycDhqd0Vyd2NLd2ZZa3pmRDgyOTBzaFA0?= =?utf-8?B?cytia0xGQ2EwUks3YWlsSWV5RlI4MzhOcjhmRFBEOCtaOFhqN3l1R2FLbkU1?= =?utf-8?B?anVYaVdER1JBeFVWVVVVU2dLMmtwcEtSL0thelIvc1d4UU04Um16K1JBQnQ2?= =?utf-8?B?TGdLTkl0SSsyd21EaXNudDRpMTQwWkFlVnY5bTJHU3kreXVmSjUxM0IyVDFI?= =?utf-8?B?VWhFNEdkNm41bnBGREhzRDdvc09YKzc0bktRRkpUdzJkdE5yS2N2R1FONXBr?= =?utf-8?B?ZjFadEFLZS9GVS9kVmFiM0lvNXZ4UVlYaGI1WUUzdVJhUmtLSm9VZTR1MldE?= =?utf-8?B?c3FrNHBlcVZ4OXlWNllrVTdEZkpWcnVudityYmVVT09MUGxjWjV6ZVpQbWY4?= =?utf-8?B?T1czQzVuL29SM0ZNQzdJMW1KdUkwZnBHZzd5RUVLWGtUc2sxdTNWQWF6QStU?= =?utf-8?B?V3hEUmNadFlGeHVXdm9iNkNzV3ovL2dHb2dFaytmRC94YnBYbGRhcFZkc21v?= =?utf-8?B?U0FSUUdkTGRBcXdrZGNldXVuUkUxalVyUFcvQjRPYmlreDd3azlWdkFRQW9T?= =?utf-8?B?dUlSNmFqaEFOekovRHJtTFZRc0FPWTdQZzc3akVpeCtCVkpsS2NKNTIxYmNM?= =?utf-8?B?SFhTNXFhRWNDNGtWWXlXaTZlSUJ6RW83bzk0bGVOT2lONDdacHVSTEMvYjV1?= =?utf-8?B?Q2t5b1krRzVBTDF5QVNuYzVMcDVVcXh0YnhnZUR5TUxqSXAvbmFKNnVLcEtk?= =?utf-8?B?UTE5ei9SeTBLM0p0a29VMnZwL2o3eG1rdEdDbGl0NktFbjRmdjVvT0tTaXNO?= =?utf-8?B?OEZML2JBU2U5N29lY3V0ajF2b3lHcTR4RnN3SjVVR1hmUkpmNEJ4NW1HcGVM?= =?utf-8?B?Tnd4UEl4dnFBN0RYMzZ2MDdsczM0emZoZWdGUSt5U1B6Si83enRMcXRmK2xs?= =?utf-8?B?RVhjc1J6K285QmVlY0RpbktFeXZUSHM4Ky8wZkF0UEwzbGFyV3V5YkM4MFpG?= =?utf-8?B?di92UDlkeWdQb1BCZWFJUGozbXpQdHZHdjliMGpoTzE3eHhiR1hqN1EyQlNy?= =?utf-8?B?MVpFY1M1bHZ4b1Q4ZXFQTVBXODAyUlcwYWVtWkk5S1QrTWFtNytxMmpESmw4?= =?utf-8?B?UGxyWjYrc2NXTjRGVUVMd05LYkhNSWVkd1RadTQ1OGV4TTR6TEphZkJySG9s?= =?utf-8?B?MzJMRWp5ZDl5dFduNW0ycWtvZjFBPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.60;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: RjAzq5p/dGiIXHX3suxVKZgyTk+sLssWMHAnV2L6hqsIhL1LkDNGXREG2rJSB3XBm13nOAikpzDKKtc14jYP05k6CiKERMlO+jftLFTOTFr48MmHGGQFD5uA1O8EHPtu8sNdLiPUv2FjxZYDE3y2joBaUWbKuYBUb9TQfJQo7TD/TCz0EUwg8R7a3FYD1U4pz935qGw4U2E8kzA6nrvAtHojlkHbWwH5BtKe07C+M+Ik+yomth2GuS3uip3eD+S8f0qbxu9BFHJ819IlgLcbzH5tEJ9zUNg4WCylFQ0ZRgSsjUSPvTyJu0yWmxB4LBNZ7GkBNqExR2SKMFP0bMYxWzsTwhMy7WvJ2dZn50XClckW+QrFBpZ4JOWhHScA/3GQVdWR5/XYC7Vz3TTN92h4/F2WM1PhmLWDAXH1K008KSRr+rlC03D8UQ9qTDlFsYhH X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:54.9246 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 17c47691-9ddd-4081-58ce-08de6263106e X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.60];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AM2PEPF0001C716.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR10MB7280 X-Authority-Analysis: v=2.4 cv=XvL3+FF9 c=1 sm=1 tr=0 ts=6980ad68 cx=c_pps a=MgKGjZA+ld+Omnnxn8FnZw==:117 a=uCuRqK4WZKO1kjFMGfU4lQ==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=a74OAJdhv809jlhGsvcA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: 6ZUw0INmZbi14a8KbMteLh9BFwnPOfvM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfX8U1W2bPlrFt2 Tg7CefJz4KYfq3HjAsR1+wIR5Jc59zG1kvE7WTEf1elpnkQGNloRms3YKNPd18pCagB7APHRG+F DdZQZBURtaSDAX8ohOPcZstCPCiK45zP9m1AhV1vGH0vSm/hsLB+HhgJODxoLYlTldlFG7mccTx +Qo3kwhYHxOTW4xVqv0I+E8/lV0qXVzXPJ82SqY07fPiJUbiJqiXfTwHRUWVtdQFZ8XjzNd0ixG LpwzrPWNWK5hMCskhsm5nK6LEyeba7O9TGyRORgVbiDwS+IiBEgKvuWBGzWnd4h0en5BXvsmV/t jl72pXgHR/dmd3wqsmbFbWs+Ef3jZxMtKcvmp2BgUxk6xb/KMGlNIGlfrpeVWbe0nbPwD0Dar5G sB1IUHxY+E5Xww/UHO5tp9zL/HPP5UqyF8lDyRPFJCS3UG5Pauamd6wcslvOER1+5y+hQI37Y3n o5tbyLZUA3QYOSnektQ== X-Proofpoint-ORIG-GUID: 6ZUw0INmZbi14a8KbMteLh9BFwnPOfvM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 malwarescore=0 bulkscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 Since the bytecap video driver is now handling all capture (byte & pixel), rename the file and structs *into capture. This is done by: - renaming of dcmipp-bytecap.c into dcmipp-capture.c - replace of dcmipp_bytecap strings into dcmipp_capture Signed-off-by: Alain Volmat --- .../media/platform/st/stm32/stm32-dcmipp/Makefile | 2 +- .../{dcmipp-bytecap.c =3D> dcmipp-capture.c} | 188 ++++++++++-----= ------ .../platform/st/stm32/stm32-dcmipp/dcmipp-common.h | 4 +- .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 8 +- 4 files changed, 101 insertions(+), 101 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile b/driver= s/media/platform/st/stm32/stm32-dcmipp/Makefile index 7178934bb116..e35d45a0aca2 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/Makefile @@ -1,5 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -stm32-dcmipp-y :=3D dcmipp-core.o dcmipp-common.o dcmipp-input.o dcmipp-by= teproc.o dcmipp-bytecap.o +stm32-dcmipp-y :=3D dcmipp-core.o dcmipp-common.o dcmipp-input.o dcmipp-by= teproc.o dcmipp-capture.o stm32-dcmipp-y +=3D dcmipp-pixelcommon.o dcmipp-isp.o dcmipp-pixelproc.o =20 obj-$(CONFIG_VIDEO_STM32_DCMIPP) +=3D stm32-dcmipp.o diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c = b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-capture.c similarity index 85% rename from drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c rename to drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-capture.c index e96ba7931b27..d9a2b7f159ea 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-bytecap.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-capture.c @@ -95,7 +95,7 @@ =20 #define DCMIPP_PxPPCR_SWAPRB BIT(4) =20 -struct dcmipp_bytecap_pix_map { +struct dcmipp_capture_pix_map { unsigned int code; u32 pixelformat; u32 plane_nb; @@ -109,7 +109,7 @@ struct dcmipp_bytecap_pix_map { .pixelformat =3D V4L2_PIX_FMT_##fmt \ } =20 -static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_dump_pix_map_lis= t[] =3D { +static const struct dcmipp_capture_pix_map dcmipp_capture_dump_pix_map_lis= t[] =3D { PIXMAP_MBUS_PFMT(RGB565_2X8_LE, RGB565), PIXMAP_MBUS_PFMT(RGB565_1X16, RGB565), PIXMAP_MBUS_PFMT(RGB888_1X24, RGB24), @@ -153,7 +153,7 @@ static const struct dcmipp_bytecap_pix_map dcmipp_bytec= ap_dump_pix_map_list[] =3D .swap_uv =3D swap, \ } =20 -static const struct dcmipp_bytecap_pix_map dcmipp_bytecap_pixel_pix_map_li= st[] =3D { +static const struct dcmipp_capture_pix_map dcmipp_capture_pixel_pix_map_li= st[] =3D { /* Coplanar formats are supported on main & aux pipe */ PIXMAP_MBUS_PIXEL_PFMT(RGB888_1X24, RGB565, 1, DCMIPP_PxPPCR_FORMAT_RGB56= 5, 0), PIXMAP_MBUS_PIXEL_PFMT(YUV8_1X24, YUYV, 1, DCMIPP_PxPPCR_FORMAT_YUYV, 0), @@ -188,7 +188,7 @@ struct dcmipp_buf { struct list_head list; }; =20 -struct dcmipp_bytecap_device { +struct dcmipp_capture_device { struct dcmipp_ent_device ved; struct video_device vdev; struct device *dev; @@ -220,7 +220,7 @@ struct dcmipp_bytecap_device { =20 u32 pipe_id; =20 - const struct dcmipp_bytecap_pix_map *pix_map; + const struct dcmipp_capture_pix_map *pix_map; unsigned int pix_map_array_size; =20 u32 cmsr2; @@ -238,8 +238,8 @@ struct dcmipp_bytecap_device { } count; }; =20 -static const struct dcmipp_bytecap_pix_map * -dcmipp_bytecap_pix_map_by_pixelformat(struct dcmipp_bytecap_device *vcap, +static const struct dcmipp_capture_pix_map * +dcmipp_capture_pix_map_by_pixelformat(struct dcmipp_capture_device *vcap, u32 pixelformat) { for (unsigned int i =3D 0; i < vcap->pix_map_array_size; i++) { @@ -250,11 +250,11 @@ dcmipp_bytecap_pix_map_by_pixelformat(struct dcmipp_b= ytecap_device *vcap, return NULL; } =20 -static bool dcmipp_bytecap_is_format_valid(struct dcmipp_bytecap_device *v= cap, +static bool dcmipp_capture_is_format_valid(struct dcmipp_capture_device *v= cap, unsigned int pixelformat) { - const struct dcmipp_bytecap_pix_map *vpix =3D - dcmipp_bytecap_pix_map_by_pixelformat(vcap, pixelformat); + const struct dcmipp_capture_pix_map *vpix =3D + dcmipp_capture_pix_map_by_pixelformat(vcap, pixelformat); =20 if (!vpix || (vpix->plane_nb > 1 && vcap->pipe_id !=3D 1)) return false; @@ -342,7 +342,7 @@ static inline int frame_planes(dma_addr_t base_addr, dm= a_addr_t addrs[], return 0; } =20 -static int dcmipp_bytecap_querycap(struct file *file, void *priv, +static int dcmipp_capture_querycap(struct file *file, void *priv, struct v4l2_capability *cap) { strscpy(cap->driver, DCMIPP_PDEV_NAME, sizeof(cap->driver)); @@ -351,20 +351,20 @@ static int dcmipp_bytecap_querycap(struct file *file,= void *priv, return 0; } =20 -static int dcmipp_bytecap_g_fmt_vid_cap(struct file *file, void *priv, +static int dcmipp_capture_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *f) { - struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + struct dcmipp_capture_device *vcap =3D video_drvdata(file); =20 f->fmt.pix =3D vcap->format; =20 return 0; } =20 -static int dcmipp_bytecap_try_fmt_vid_cap(struct file *file, void *priv, +static int dcmipp_capture_try_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *f) { - struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + struct dcmipp_capture_device *vcap =3D video_drvdata(file); struct v4l2_pix_format *format =3D &f->fmt.pix; /* Take into consideration the width constraint of the pixel packer */ unsigned int walign =3D (vcap->pipe_id !=3D 0 ? @@ -372,7 +372,7 @@ static int dcmipp_bytecap_try_fmt_vid_cap(struct file *= file, void *priv, u32 in_w, in_h; =20 /* Don't accept a pixelformat that is not on the table */ - if (!dcmipp_bytecap_is_format_valid(vcap, format->pixelformat)) + if (!dcmipp_capture_is_format_valid(vcap, format->pixelformat)) format->pixelformat =3D fmt_default.pixelformat; =20 /* Adjust width & height */ @@ -402,17 +402,17 @@ static int dcmipp_bytecap_try_fmt_vid_cap(struct file= *file, void *priv, return 0; } =20 -static int dcmipp_bytecap_s_fmt_vid_cap(struct file *file, void *priv, +static int dcmipp_capture_s_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *f) { - struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + struct dcmipp_capture_device *vcap =3D video_drvdata(file); int ret; =20 /* Do not change the format while stream is on */ if (vb2_is_busy(&vcap->queue)) return -EBUSY; =20 - ret =3D dcmipp_bytecap_try_fmt_vid_cap(file, priv, f); + ret =3D dcmipp_capture_try_fmt_vid_cap(file, priv, f); if (ret) return ret; =20 @@ -434,10 +434,10 @@ static int dcmipp_bytecap_s_fmt_vid_cap(struct file *= file, void *priv, return 0; } =20 -static int dcmipp_bytecap_enum_fmt_vid_cap(struct file *file, void *priv, +static int dcmipp_capture_enum_fmt_vid_cap(struct file *file, void *priv, struct v4l2_fmtdesc *f) { - struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + struct dcmipp_capture_device *vcap =3D video_drvdata(file); unsigned int index =3D f->index; unsigned int i, prev_pixelformat =3D 0; =20 @@ -475,17 +475,17 @@ static int dcmipp_bytecap_enum_fmt_vid_cap(struct fil= e *file, void *priv, return 0; } =20 -static int dcmipp_bytecap_enum_framesizes(struct file *file, void *fh, +static int dcmipp_capture_enum_framesizes(struct file *file, void *fh, struct v4l2_frmsizeenum *fsize) { - struct dcmipp_bytecap_device *vcap =3D video_drvdata(file); + struct dcmipp_capture_device *vcap =3D video_drvdata(file); =20 =20 if (fsize->index) return -EINVAL; =20 /* Only accept code in the pix map table */ - if (!dcmipp_bytecap_is_format_valid(vcap, fsize->pixel_format)) + if (!dcmipp_capture_is_format_valid(vcap, fsize->pixel_format)) return -EINVAL; =20 fsize->type =3D V4L2_FRMSIZE_TYPE_CONTINUOUS; @@ -499,7 +499,7 @@ static int dcmipp_bytecap_enum_framesizes(struct file *= file, void *fh, return 0; } =20 -static const struct v4l2_file_operations dcmipp_bytecap_fops =3D { +static const struct v4l2_file_operations dcmipp_capture_fops =3D { .owner =3D THIS_MODULE, .open =3D v4l2_fh_open, .release =3D vb2_fop_release, @@ -509,14 +509,14 @@ static const struct v4l2_file_operations dcmipp_bytec= ap_fops =3D { .mmap =3D vb2_fop_mmap, }; =20 -static const struct v4l2_ioctl_ops dcmipp_bytecap_ioctl_ops =3D { - .vidioc_querycap =3D dcmipp_bytecap_querycap, +static const struct v4l2_ioctl_ops dcmipp_capture_ioctl_ops =3D { + .vidioc_querycap =3D dcmipp_capture_querycap, =20 - .vidioc_g_fmt_vid_cap =3D dcmipp_bytecap_g_fmt_vid_cap, - .vidioc_s_fmt_vid_cap =3D dcmipp_bytecap_s_fmt_vid_cap, - .vidioc_try_fmt_vid_cap =3D dcmipp_bytecap_try_fmt_vid_cap, - .vidioc_enum_fmt_vid_cap =3D dcmipp_bytecap_enum_fmt_vid_cap, - .vidioc_enum_framesizes =3D dcmipp_bytecap_enum_framesizes, + .vidioc_g_fmt_vid_cap =3D dcmipp_capture_g_fmt_vid_cap, + .vidioc_s_fmt_vid_cap =3D dcmipp_capture_s_fmt_vid_cap, + .vidioc_try_fmt_vid_cap =3D dcmipp_capture_try_fmt_vid_cap, + .vidioc_enum_fmt_vid_cap =3D dcmipp_capture_enum_fmt_vid_cap, + .vidioc_enum_framesizes =3D dcmipp_capture_enum_framesizes, =20 .vidioc_reqbufs =3D vb2_ioctl_reqbufs, .vidioc_create_bufs =3D vb2_ioctl_create_bufs, @@ -529,7 +529,7 @@ static const struct v4l2_ioctl_ops dcmipp_bytecap_ioctl= _ops =3D { .vidioc_streamoff =3D vb2_ioctl_streamoff, }; =20 -static void dcmipp_start_capture(struct dcmipp_bytecap_device *vcap, +static void dcmipp_start_capture(struct dcmipp_capture_device *vcap, struct dcmipp_buf *buf) { /* Set buffer address */ @@ -556,7 +556,7 @@ static void dcmipp_start_capture(struct dcmipp_bytecap_= device *vcap, reg_set(vcap, DCMIPP_PxFCTCR(vcap->pipe_id), DCMIPP_PxFCTCR_CPTREQ); } =20 -static void dcmipp_bytecap_all_buffers_done(struct dcmipp_bytecap_device *= vcap, +static void dcmipp_capture_all_buffers_done(struct dcmipp_capture_device *= vcap, enum vb2_buffer_state state) { struct dcmipp_buf *buf, *node; @@ -567,10 +567,10 @@ static void dcmipp_bytecap_all_buffers_done(struct dc= mipp_bytecap_device *vcap, } } =20 -static int dcmipp_bytecap_start_streaming(struct vb2_queue *vq, +static int dcmipp_capture_start_streaming(struct vb2_queue *vq, unsigned int count) { - struct dcmipp_bytecap_device *vcap =3D vb2_get_drv_priv(vq); + struct dcmipp_capture_device *vcap =3D vb2_get_drv_priv(vq); struct media_entity *entity =3D &vcap->vdev.entity; struct dcmipp_buf *buf; struct media_pad *pad; @@ -581,7 +581,7 @@ static int dcmipp_bytecap_start_streaming(struct vb2_qu= eue *vq, =20 /* * Get source subdev - since link is IMMUTABLE, pointer is cached - * within the dcmipp_bytecap_device structure + * within the dcmipp_capture_device structure */ if (!vcap->s_subdev) { pad =3D media_pad_remote_pad_first(&vcap->vdev.entity.pads[0]); @@ -613,8 +613,8 @@ static int dcmipp_bytecap_start_streaming(struct vb2_qu= eue *vq, spin_lock_irq(&vcap->irqlock); =20 if (vcap->pipe_id !=3D 0) { - const struct dcmipp_bytecap_pix_map *vpix =3D - dcmipp_bytecap_pix_map_by_pixelformat(vcap, vcap->format.pixelformat); + const struct dcmipp_capture_pix_map *vpix =3D + dcmipp_capture_pix_map_by_pixelformat(vcap, vcap->format.pixelformat); unsigned int ppcr =3D 0; =20 /* @@ -663,14 +663,14 @@ static int dcmipp_bytecap_start_streaming(struct vb2_= queue *vq, * Return all buffers to vb2 in QUEUED state. * This will give ownership back to userspace */ - dcmipp_bytecap_all_buffers_done(vcap, VB2_BUF_STATE_QUEUED); + dcmipp_capture_all_buffers_done(vcap, VB2_BUF_STATE_QUEUED); vcap->active =3D NULL; spin_unlock_irq(&vcap->irqlock); =20 return ret; } =20 -static void dcmipp_dump_status(struct dcmipp_bytecap_device *vcap) +static void dcmipp_dump_status(struct dcmipp_capture_device *vcap) { struct device *dev =3D vcap->dev; =20 @@ -686,9 +686,9 @@ static void dcmipp_dump_status(struct dcmipp_bytecap_de= vice *vcap) * Stop the stream engine. Any remaining buffers in the stream queue are * dequeued and passed on to the vb2 framework marked as STATE_ERROR. */ -static void dcmipp_bytecap_stop_streaming(struct vb2_queue *vq) +static void dcmipp_capture_stop_streaming(struct vb2_queue *vq) { - struct dcmipp_bytecap_device *vcap =3D vb2_get_drv_priv(vq); + struct dcmipp_capture_device *vcap =3D vb2_get_drv_priv(vq); int ret; u32 status; =20 @@ -726,7 +726,7 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_qu= eue *vq) spin_lock_irq(&vcap->irqlock); =20 /* Return all queued buffers to vb2 in ERROR state */ - dcmipp_bytecap_all_buffers_done(vcap, VB2_BUF_STATE_ERROR); + dcmipp_capture_all_buffers_done(vcap, VB2_BUF_STATE_ERROR); INIT_LIST_HEAD(&vcap->buffers); =20 vcap->active =3D NULL; @@ -746,9 +746,9 @@ static void dcmipp_bytecap_stop_streaming(struct vb2_qu= eue *vq) vcap->count.underrun, vcap->count.buffers); } =20 -static int dcmipp_bytecap_buf_prepare(struct vb2_buffer *vb) +static int dcmipp_capture_buf_prepare(struct vb2_buffer *vb) { - struct dcmipp_bytecap_device *vcap =3D vb2_get_drv_priv(vb->vb2_queue); + struct dcmipp_capture_device *vcap =3D vb2_get_drv_priv(vb->vb2_queue); struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct dcmipp_buf *buf =3D container_of(vbuf, struct dcmipp_buf, vb); struct v4l2_pix_format *format =3D &vcap->format; @@ -798,9 +798,9 @@ static int dcmipp_bytecap_buf_prepare(struct vb2_buffer= *vb) return 0; } =20 -static void dcmipp_bytecap_buf_queue(struct vb2_buffer *vb2_buf) +static void dcmipp_capture_buf_queue(struct vb2_buffer *vb2_buf) { - struct dcmipp_bytecap_device *vcap =3D + struct dcmipp_capture_device *vcap =3D vb2_get_drv_priv(vb2_buf->vb2_queue); struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb2_buf); struct dcmipp_buf *buf =3D container_of(vbuf, struct dcmipp_buf, vb); @@ -824,13 +824,13 @@ static void dcmipp_bytecap_buf_queue(struct vb2_buffe= r *vb2_buf) spin_unlock_irq(&vcap->irqlock); } =20 -static int dcmipp_bytecap_queue_setup(struct vb2_queue *vq, +static int dcmipp_capture_queue_setup(struct vb2_queue *vq, unsigned int *nbuffers, unsigned int *nplanes, unsigned int sizes[], struct device *alloc_devs[]) { - struct dcmipp_bytecap_device *vcap =3D vb2_get_drv_priv(vq); + struct dcmipp_capture_device *vcap =3D vb2_get_drv_priv(vq); unsigned int size; =20 size =3D vcap->format.sizeimage; @@ -848,7 +848,7 @@ static int dcmipp_bytecap_queue_setup(struct vb2_queue = *vq, return 0; } =20 -static int dcmipp_bytecap_buf_init(struct vb2_buffer *vb) +static int dcmipp_capture_buf_init(struct vb2_buffer *vb) { struct vb2_v4l2_buffer *vbuf =3D to_vb2_v4l2_buffer(vb); struct dcmipp_buf *buf =3D container_of(vbuf, struct dcmipp_buf, vb); @@ -858,19 +858,19 @@ static int dcmipp_bytecap_buf_init(struct vb2_buffer = *vb) return 0; } =20 -static const struct vb2_ops dcmipp_bytecap_qops =3D { - .start_streaming =3D dcmipp_bytecap_start_streaming, - .stop_streaming =3D dcmipp_bytecap_stop_streaming, - .buf_init =3D dcmipp_bytecap_buf_init, - .buf_prepare =3D dcmipp_bytecap_buf_prepare, - .buf_queue =3D dcmipp_bytecap_buf_queue, - .queue_setup =3D dcmipp_bytecap_queue_setup, +static const struct vb2_ops dcmipp_capture_qops =3D { + .start_streaming =3D dcmipp_capture_start_streaming, + .stop_streaming =3D dcmipp_capture_stop_streaming, + .buf_init =3D dcmipp_capture_buf_init, + .buf_prepare =3D dcmipp_capture_buf_prepare, + .buf_queue =3D dcmipp_capture_buf_queue, + .queue_setup =3D dcmipp_capture_queue_setup, }; =20 -static void dcmipp_bytecap_release(struct video_device *vdev) +static void dcmipp_capture_release(struct video_device *vdev) { - struct dcmipp_bytecap_device *vcap =3D - container_of(vdev, struct dcmipp_bytecap_device, vdev); + struct dcmipp_capture_device *vcap =3D + container_of(vdev, struct dcmipp_capture_device, vdev); =20 dcmipp_pads_cleanup(vcap->ved.pads); mutex_destroy(&vcap->lock); @@ -878,16 +878,16 @@ static void dcmipp_bytecap_release(struct video_devic= e *vdev) kfree(vcap); } =20 -void dcmipp_bytecap_ent_release(struct dcmipp_ent_device *ved) +void dcmipp_capture_ent_release(struct dcmipp_ent_device *ved) { - struct dcmipp_bytecap_device *vcap =3D - container_of(ved, struct dcmipp_bytecap_device, ved); + struct dcmipp_capture_device *vcap =3D + container_of(ved, struct dcmipp_capture_device, ved); =20 media_entity_cleanup(ved->ent); vb2_video_unregister_device(&vcap->vdev); } =20 -static void dcmipp_buffer_done(struct dcmipp_bytecap_device *vcap, +static void dcmipp_buffer_done(struct dcmipp_capture_device *vcap, struct dcmipp_buf *buf, size_t bytesused, int err) @@ -911,7 +911,7 @@ static void dcmipp_buffer_done(struct dcmipp_bytecap_de= vice *vcap, =20 /* irqlock must be held */ static void -dcmipp_bytecap_set_next_frame_or_stop(struct dcmipp_bytecap_device *vcap) +dcmipp_capture_set_next_frame_or_stop(struct dcmipp_capture_device *vcap) { if (!vcap->next && list_is_singular(&vcap->buffers)) { /* @@ -949,7 +949,7 @@ dcmipp_bytecap_set_next_frame_or_stop(struct dcmipp_byt= ecap_device *vcap) } =20 /* irqlock must be held */ -static void dcmipp_bytecap_process_frame(struct dcmipp_bytecap_device *vca= p, +static void dcmipp_capture_process_frame(struct dcmipp_capture_device *vca= p, size_t bytesused) { int err =3D 0; @@ -975,10 +975,10 @@ static void dcmipp_bytecap_process_frame(struct dcmip= p_bytecap_device *vcap, vcap->active =3D NULL; } =20 -static irqreturn_t dcmipp_bytecap_irq_thread(int irq, void *arg) +static irqreturn_t dcmipp_capture_irq_thread(int irq, void *arg) { - struct dcmipp_bytecap_device *vcap =3D - container_of(arg, struct dcmipp_bytecap_device, ved); + struct dcmipp_capture_device *vcap =3D + container_of(arg, struct dcmipp_capture_device, ved); u32 cmsr2_pxframef; u32 cmsr2_pxvsyncf; u32 cmsr2_pxovrf; @@ -1008,7 +1008,7 @@ static irqreturn_t dcmipp_bytecap_irq_thread(int irq,= void *arg) bytesused =3D reg_read(vcap, DCMIPP_P0DCCNTR); else bytesused =3D vcap->format.sizeimage; - dcmipp_bytecap_process_frame(vcap, bytesused); + dcmipp_capture_process_frame(vcap, bytesused); } =20 if (vcap->cmsr2 & cmsr2_pxvsyncf) { @@ -1028,7 +1028,7 @@ static irqreturn_t dcmipp_bytecap_irq_thread(int irq,= void *arg) * active (but not used) buffer and put it back into next. */ swap(vcap->active, vcap->next); - dcmipp_bytecap_set_next_frame_or_stop(vcap); + dcmipp_capture_set_next_frame_or_stop(vcap); } =20 out: @@ -1036,10 +1036,10 @@ static irqreturn_t dcmipp_bytecap_irq_thread(int ir= q, void *arg) return IRQ_HANDLED; } =20 -static irqreturn_t dcmipp_bytecap_irq_callback(int irq, void *arg) +static irqreturn_t dcmipp_capture_irq_callback(int irq, void *arg) { - struct dcmipp_bytecap_device *vcap =3D - container_of(arg, struct dcmipp_bytecap_device, ved); + struct dcmipp_capture_device *vcap =3D + container_of(arg, struct dcmipp_capture_device, ved); struct dcmipp_ent_device *ved =3D arg; =20 /* Store interrupt status register */ @@ -1054,12 +1054,12 @@ static irqreturn_t dcmipp_bytecap_irq_callback(int = irq, void *arg) return IRQ_WAKE_THREAD; } =20 -static int dcmipp_bytecap_link_validate(struct media_link *link) +static int dcmipp_capture_link_validate(struct media_link *link) { struct media_entity *entity =3D link->sink->entity; struct video_device *vd =3D media_entity_to_video_device(entity); - struct dcmipp_bytecap_device *vcap =3D container_of(vd, - struct dcmipp_bytecap_device, vdev); + struct dcmipp_capture_device *vcap =3D container_of(vd, + struct dcmipp_capture_device, vdev); struct v4l2_subdev *source_sd =3D media_entity_to_v4l2_subdev(link->source->entity); struct v4l2_subdev_format source_fmt =3D { @@ -1115,8 +1115,8 @@ static int dcmipp_bytecap_link_validate(struct media_= link *link) return 0; } =20 -static const struct media_entity_operations dcmipp_bytecap_entity_ops =3D { - .link_validate =3D dcmipp_bytecap_link_validate, +static const struct media_entity_operations dcmipp_capture_entity_ops =3D { + .link_validate =3D dcmipp_capture_link_validate, }; =20 static int dcmipp_name_to_pipe_id(const char *name) @@ -1131,17 +1131,17 @@ static int dcmipp_name_to_pipe_id(const char *name) return -EINVAL; } =20 -struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, +struct dcmipp_ent_device *dcmipp_capture_ent_init(const char *entity_name, struct dcmipp_device *dcmipp) { - struct dcmipp_bytecap_device *vcap; + struct dcmipp_capture_device *vcap; struct device *dev =3D dcmipp->dev; struct video_device *vdev; struct vb2_queue *q; const unsigned long pad_flag =3D MEDIA_PAD_FL_SINK; int ret =3D 0; =20 - /* Allocate the dcmipp_bytecap_device struct */ + /* Allocate the dcmipp_capture_device struct */ vcap =3D kzalloc(sizeof(*vcap), GFP_KERNEL); if (!vcap) return ERR_PTR(-ENOMEM); @@ -1155,11 +1155,11 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(c= onst char *entity_name, =20 /* Initialize supported format table format */ if (vcap->pipe_id =3D=3D 0) { - vcap->pix_map =3D dcmipp_bytecap_dump_pix_map_list; - vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_bytecap_dump_pix_map_list= ); + vcap->pix_map =3D dcmipp_capture_dump_pix_map_list; + vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_capture_dump_pix_map_list= ); } else { - vcap->pix_map =3D dcmipp_bytecap_pixel_pix_map_list; - vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_bytecap_pixel_pix_map_lis= t); + vcap->pix_map =3D dcmipp_capture_pixel_pix_map_list; + vcap->pix_map_array_size =3D ARRAY_SIZE(dcmipp_capture_pixel_pix_map_lis= t); } =20 /* Allocate the pads */ @@ -1174,7 +1174,7 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(con= st char *entity_name, /* Initialize the media entity */ vcap->vdev.entity.name =3D entity_name; vcap->vdev.entity.function =3D MEDIA_ENT_F_IO_V4L; - vcap->vdev.entity.ops =3D &dcmipp_bytecap_entity_ops; + vcap->vdev.entity.ops =3D &dcmipp_capture_entity_ops; ret =3D media_entity_pads_init(&vcap->vdev.entity, 1, vcap->ved.pads); if (ret) goto err_clean_pads; @@ -1189,7 +1189,7 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(con= st char *entity_name, q->lock =3D &vcap->lock; q->drv_priv =3D vcap; q->buf_struct_size =3D sizeof(struct dcmipp_buf); - q->ops =3D &dcmipp_bytecap_qops; + q->ops =3D &dcmipp_capture_qops; q->mem_ops =3D &vb2_dma_contig_memops; q->timestamp_flags =3D V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; q->min_queued_buffers =3D 1; @@ -1218,8 +1218,8 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(con= st char *entity_name, =20 /* Fill the dcmipp_ent_device struct */ vcap->ved.ent =3D &vcap->vdev.entity; - vcap->ved.handler =3D dcmipp_bytecap_irq_callback; - vcap->ved.thread_fn =3D dcmipp_bytecap_irq_thread; + vcap->ved.handler =3D dcmipp_capture_irq_callback; + vcap->ved.thread_fn =3D dcmipp_capture_irq_thread; vcap->dev =3D dev; vcap->regs =3D dcmipp->regs; =20 @@ -1227,9 +1227,9 @@ struct dcmipp_ent_device *dcmipp_bytecap_ent_init(con= st char *entity_name, vdev =3D &vcap->vdev; vdev->device_caps =3D V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING | V4L2_CAP_IO_MC; - vdev->release =3D dcmipp_bytecap_release; - vdev->fops =3D &dcmipp_bytecap_fops; - vdev->ioctl_ops =3D &dcmipp_bytecap_ioctl_ops; + vdev->release =3D dcmipp_capture_release; + vdev->fops =3D &dcmipp_capture_fops; + vdev->ioctl_ops =3D &dcmipp_capture_ioctl_ops; vdev->lock =3D &vcap->lock; vdev->queue =3D q; vdev->v4l2_dev =3D &dcmipp->v4l2_dev; diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h b= /drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h index 8f41473605aa..c0f7ed3acbfc 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-common.h @@ -279,9 +279,9 @@ struct dcmipp_ent_device * dcmipp_byteproc_ent_init(const char *entity_name, struct dcmipp_device *dcmipp); void dcmipp_byteproc_ent_release(struct dcmipp_ent_device *ved); -struct dcmipp_ent_device *dcmipp_bytecap_ent_init(const char *entity_name, +struct dcmipp_ent_device *dcmipp_capture_ent_init(const char *entity_name, struct dcmipp_device *dcmipp); -void dcmipp_bytecap_ent_release(struct dcmipp_ent_device *ved); +void dcmipp_capture_ent_release(struct dcmipp_ent_device *ved); struct dcmipp_ent_device *dcmipp_isp_ent_init(const char *entity_name, struct dcmipp_device *dcmipp); void dcmipp_isp_ent_release(struct dcmipp_ent_device *ved); diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index 9aba16096d28..a52b3b0e3c37 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -50,8 +50,8 @@ static const struct dcmipp_ent_config stm32mp13_ent_confi= g[] =3D { }, { .name =3D "dcmipp_dump_capture", - .init =3D dcmipp_bytecap_ent_init, - .release =3D dcmipp_bytecap_ent_release, + .init =3D dcmipp_capture_ent_init, + .release =3D dcmipp_capture_ent_release, }, }; =20 @@ -88,8 +88,8 @@ static const struct dcmipp_ent_config stm32mp25_ent_confi= g[] =3D { }, { .name =3D "dcmipp_dump_capture", - .init =3D dcmipp_bytecap_ent_init, - .release =3D dcmipp_bytecap_ent_release, + .init =3D dcmipp_capture_ent_init, + .release =3D dcmipp_capture_ent_release, }, }; =20 --=20 2.34.1 From nobody Mon Feb 9 01:11:38 2026 Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 407A8369988; Mon, 2 Feb 2026 13:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=185.132.182.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; cv=fail; b=Ba6vnhDg5f7M7pnMWGxql2fo+ILJRlrKBrpGsxvqJQKc1vcOcVAyaCf6eud/s8nGCMEy70T6HamHfGqNqN0Htn6xonF61+z1e/LM4+Ibmy5WO7i3EkkBLLwDyRVlBiPLGpiIHsYXU5Rx9DwnpCOoIeFavuE5ISOfNnbVIGr8Cws= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770040695; c=relaxed/simple; bh=EAHTRW9E75QcK5pTeCd94V6QVtQZjgjQg5ZvqAG50a8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=tZUl7kmIn2ptOazTKMUrQjlu9OO3IJNTPWD6KKlPKac/8oCkOorAoY+PYkxxKp0nAVKgYAOzCT7wMWol8mapCQm285Z6AILQTPECP7s7+N0cgQ+wcYlR5obYQ5KWGXXqtGADpVnmNnJoMmPvxHLazq15XvCt7KDvFGm9ktB+JHQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com; spf=pass smtp.mailfrom=foss.st.com; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b=XyO1WDKq; arc=fail smtp.client-ip=185.132.182.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=foss.st.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=foss.st.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=foss.st.com header.i=@foss.st.com header.b="XyO1WDKq" Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 612Da6Mk2888215; Mon, 2 Feb 2026 14:58:01 +0100 Received: from osppr02cu001.outbound.protection.outlook.com (mail-norwayeastazon11013000.outbound.protection.outlook.com [40.107.159.0]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 4c1apvx2qa-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Mon, 02 Feb 2026 14:58:00 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OzJjIr+KvBGQPyBW67KG0EmDr2dUmcg2yq+d07SAqJsmEWNShRJP2lm4z4JKA9yVZRKuA041TsCCWf0D48Wo5w0ui0TcTqJl1AjAc3Sl3KmsAmkVUzxld82kk2+LAo0v/dHREoRzuqcduvYISfPMfjAZOLDk6hVhb0bwjh+fjemSPUq4T1oFRCCqmTJc2ys8Xc1YOsYdP2BBs3qGmCEY+8IkJLe1wvAB+47Z3qieZTU/y5p9LgdvCH+bIr8McU8CwARhhSAP57g8/Jg0cUpuUOuxz81FJDK8hNUN8k7v0d6DsrbOUhoVEu91fF8ftmR7Ll8+9EkxO2Y26qm731Keqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hp5517Pusd7fHxVUXRM0gf5oDQeFk1ntBoqH6qnQnrM=; b=D9zLZcDvFgUNV6ah8izMf5fsGqRFT8cZjNOlGx03s8uVeuDj/kaWW998gVJI0fl0SLWz2PtQMKq+Av2WMOsA9ZBByscssyez1hXlhhnZwlr06CEcCWF0UD7Z4yzgaDOj0PIviURVZwSsl7PSWaJG672lHB7V6bmtjuNV07Oe84a/hywQWjiWb0T24IZ3dFtsKbdcz8GnO4ck5cQ1ppPzTZc1NvJg1HPGmT4qt9jFdoNI/tP9KTkvowxr1ISZyIjZTl0Eg2vH+N2QTHGQLnEle3VnLFXhdl3N/OxFLRji2gHNKKBBejf8frGop9hYr5RS0Z5vc/UN2AkuI+y9NFHhDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=fail (sender ip is 164.130.1.59) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=foss.st.com; dmarc=fail (p=none sp=none pct=100) action=none header.from=foss.st.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hp5517Pusd7fHxVUXRM0gf5oDQeFk1ntBoqH6qnQnrM=; b=XyO1WDKqHrLowLGiFTStzuAHzNJWYXG9CeonC9hSgJ2ukOL2MTR+6c9e2IU+3OQHh2jGqJfc0sYmdLbq8a3aFTDsm1RDsVwF/l/kf9oIHYiFGI9RMTMaIkxuRILx4MlkboybrzZpRJoSPlagAOcI7taD3DqR9tTW8XR3hjDNGMlqZpDJZ5f8BPg4VucShvs+pJbI40IhXgP4mbqgJ1XXS8YbklXFKq7Rvf15OllC1ukE8+mcb4iQ6EZt4GLhPGZTPO7ZCGaSe5BE0oBgvrQSaCW7s6fTqGy0JCCyTiw3CWVuV3LUKJ3RhaFfLUBbTzVCvu0UX4GmNel2BPkDYRT9Kw== Received: from AS4P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:20b:5de::7) by DB9PR10MB5593.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:30c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 13:57:55 +0000 Received: from AMS0EPF00000199.eurprd05.prod.outlook.com (2603:10a6:20b:5de:cafe::68) by AS4P190CA0001.outlook.office365.com (2603:10a6:20b:5de::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9564.16 via Frontend Transport; Mon, 2 Feb 2026 13:57:56 +0000 X-MS-Exchange-Authentication-Results: spf=fail (sender IP is 164.130.1.59) smtp.mailfrom=foss.st.com; dkim=none (message not signed) header.d=none;dmarc=fail action=none header.from=foss.st.com; Received-SPF: Fail (protection.outlook.com: domain of foss.st.com does not designate 164.130.1.59 as permitted sender) receiver=protection.outlook.com; client-ip=164.130.1.59; helo=smtpO365.st.com; Received: from smtpO365.st.com (164.130.1.59) by AMS0EPF00000199.mail.protection.outlook.com (10.167.16.245) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.10 via Frontend Transport; Mon, 2 Feb 2026 13:57:55 +0000 Received: from STKDAG1NODE2.st.com (10.75.128.133) by smtpo365.st.com (10.250.44.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:59:40 +0100 Received: from localhost (10.252.7.227) by STKDAG1NODE2.st.com (10.75.128.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Mon, 2 Feb 2026 14:57:54 +0100 From: Alain Volmat Date: Mon, 2 Feb 2026 14:57:38 +0100 Subject: [PATCH 13/13] media: stm32: dcmipp: instantiate & link stm32mp25 subdevs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-ID: <20260202-stm32-dcmipp-pixel-pipes-support-v1-13-8d8d51f5e014@foss.st.com> References: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> In-Reply-To: <20260202-stm32-dcmipp-pixel-pipes-support-v1-0-8d8d51f5e014@foss.st.com> To: Hugues Fruchet , Mauro Carvalho Chehab , Maxime Coquelin , "Alexandre Torgue" , Rob Herring , Krzysztof Kozlowski , Conor Dooley CC: , , , , , Alain Volmat X-Mailer: b4 0.14.3 X-ClientProxiedBy: STKCAS1NODE1.st.com (10.75.128.134) To STKDAG1NODE2.st.com (10.75.128.133) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS0EPF00000199:EE_|DB9PR10MB5593:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b582dd4-fc98-44fe-83d0-08de62631086 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YlhuYmV1S2tkN0RqV2NFZVRLZFQ0aFN5ZEZvL3FVM0QwZlkxSStLSGZrV2pL?= =?utf-8?B?TjVxOW84WjB2WHlVd2ZxNHFpSmtHUmU3NUtDY1RPMGlZSmhVMGlpRjkvMFBI?= =?utf-8?B?R0g4aUcyamhzMmNYaC9BTFBNbHFzb0JLQUFzV0JWRWUzRnhYTlFoSzIrcXgw?= =?utf-8?B?TDVab3hsclpaQ2tCUzl5eG53eTBGbURZR2l3RmlnblZlcUpkVXNTQXVtWFlo?= =?utf-8?B?VjNtOENmS2xrdkhoUUpnTkdUMFV4eFlrZjF5R1FqYnloQlBRRDNqQUZMTTF1?= =?utf-8?B?bmkvcFM0bk1OL01yUUF3MDc5LzREK3pOYTU5TXAySTZmbGFmWkkwZkpNL2Z4?= =?utf-8?B?eitwd2dWdFJ5ZStUbmFPeVlJUlNWcVRIZDgzQ0xhTG0xYmI1WVp6VVJhL1FO?= =?utf-8?B?N3F2NDF0STB1a1RtWXNpZjVObmJnbFdPUm4zUlNjS2plVjJ2eW0rMkNPeXZB?= =?utf-8?B?OXM0cU5DQjYvU3FxMkRxenU5ZUpPK3lMQjFEYmk3UHEvY1JSM2pGWDFjTDYy?= =?utf-8?B?M3ZESHVaeU1MVG1jWUp5eTZ0VDlKck5KNElRZm1hY2IybkVhd1FuWm9TaXVW?= =?utf-8?B?K3N5anRTU0NmY2dOcmQ0NEU4TjhQc0NvVGs4b2hiMFN6TS9CVUVnaDR6Nm9Z?= =?utf-8?B?N0xTdEcrb3VkRkRoM0grT3JtN3VuUW5NNThhT01GUVRUWVlrS2ZHYWhGakhW?= =?utf-8?B?eDVKWlNCUjNnMFZISGluSWRzVk9UMG5VOFhaZktIQkJzdmgrdVMyTWxOekJQ?= =?utf-8?B?VnZLZHdUTmFTemQ4bmI3amExNTlUSWxBUXVSNnFKbW1DSGVaQ2ZrL1hiUjhC?= =?utf-8?B?d2lLejA5d1U1cTBPVGF3bVBmeFdFV0lHOXdYWkZqcUU5UU93M3dFczVNNFhw?= =?utf-8?B?ODRZTEdJS0cvTlBRWDMwRHpqOVRtT3FnUjh3bW5LMVNrUlczYXlhUHlZZHBH?= =?utf-8?B?MVFEUXNtcTZhYUE4V2x1NC9kUE1RdHR0UlZGUmM5U0VzcUtuazhSQjF4Rmpq?= =?utf-8?B?NHV5Qm1zaGxybmpUYTdEUXdPQW9VQk9SekNyNkRQVGE1MVVQTW5zTUZLK3E4?= =?utf-8?B?em5iQjJheFMyRE9oTE9yUmhRZDF2a0ZtTWhYRmVlMkF4dEIvRS8wTmkyYkNP?= =?utf-8?B?WmxwcndxV1pBQWFpWkZ5MDY3dW01K3VGUlNaVmw3NjZnR0NDaXJncVZwUjFs?= =?utf-8?B?aWFNdE9IOVlyNTZlVFJneVlXKzlBQ0IwWFNKNFRZSmNUSXJKYTlXaEI4N0k4?= =?utf-8?B?M0Q0cUtLS0tCNzJmREtqQ0VaQ1FaSHdNZzVEeWx3VGVvWHBlWWg5TytFd0ly?= =?utf-8?B?ZXM2RUhzTVNPWmdvazlMOWMwOEx5Y3Bjekt6OHd0Wjg5a29mNXZIUlBqdDA2?= =?utf-8?B?Y0x1Rk9BTENWYVphTERsYW5TSDNBbnRZbmsyVlpIMjhjU1d5enJ1bmJyWjRR?= =?utf-8?B?c2FreEhGL0RNRXpTT0ovM0JTTlhxQS9mQzcydlI3a013cXJ4c2UxOFFKN3Fx?= =?utf-8?B?ZFI4ell2NjlCWHFsZVRLcXdCaTl4RXN5c0xHS3hWOTV6YzFLWSt1Wm1PYjZ3?= =?utf-8?B?cUcwZ0pmRXJFcFBkMUlYNWNidE1LWjVTTkZYL2VKb2s3elVlTitoY29ncjlY?= =?utf-8?B?U3E1QVBpNldqRUxRWVdOZTdqT3cvODJwbWVEU3lScEprOTYwaUpOak9WQ0d2?= =?utf-8?B?bVhLRlBlRmZueVozdjFZM3RNQTlOd1Avd3RYUW9OWjdOQnFuSmlGaS9EMXRt?= =?utf-8?B?Y2JSaFQyVkZUYlowUTR4M1NFeHhTS1V4R3VKOWdkRHgyOFlVazFvNWRQNDc0?= =?utf-8?B?d2NQRm1RelVGMTdVMElnTm0zQ0orK3NCWGViM09PRVRPR0VqOEl4WHpBT0lL?= =?utf-8?B?ODFkWkF0QnlabnlsY0szZUIxa29nUWVVaGIwYWFmdzByWjhseEZXZ0V0dDlB?= =?utf-8?B?VWExRGdIL1MzelJGdW1YdmNtT2tpWEFzaUtCRi8xSWhsN0pSSnJIb3U3ZEk4?= =?utf-8?B?bDh1WFVURllyeWk3WklRVHdQY1VOL2NsbUpkWHZhNGlFSE1FZitEUkJqZmZo?= =?utf-8?B?ME9XVVdCa3A3YWhlU2lrN1dFZXJSeEpnNHRhc2YxWlZkOHQ4Tys0OWttd3lq?= =?utf-8?B?WGtIRTBKTDJiY3BxanZ2cW96Z0Q2bkFIbitId1JOenFhdXdjU0RTbkFJc2xV?= =?utf-8?B?NDQ3bjg3dDhwbWhSUmNtOFA1MXpPNnAwTGhabDRvdHZJL291RGhHSXNwbDh6?= =?utf-8?B?NGtYZU95engwWU9rZnpzVjlvT0ZnPT0=?= X-Forefront-Antispam-Report: CIP:164.130.1.59;CTRY:IT;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:smtpO365.st.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(36860700013)(82310400026);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kz52gn3YQeOj0HlIY67nGKH0zgkiZ6mFuWOZLCrLwJmoKXTGzBnoEUkiut1k0lPSt5RhM1TPokKjQ9c9O5MkIv0Jja9kSD58OYcyeP3z4VZVHLu7WzJRcFNlSwzImvVCZ4xXo4ZQrXXkCGPPn4ZIlDlOKDQfxftCeqKxwFCrKZGrWEBdNdo7kOMf7J+5NNyfgFFsVztl5dkO1WdcZRr/d1ezbVok6y9ZI34RVqm/3/QeuPE9gGbIgSAJZBAKHVLMrlzSyzGF9XBzkEDdXuRbFKeL2HgIKmI+3eTfPW9ZO3e6+fGdWM9qz8vO7ceyLKprPW1+t2FbZgcYLyxEcnVeqtSaqZrgPZdpao8JgOgU7SUHDlS4Jwl9dTLfhhyp1y+kYSl9dUrx0KGhdlbgF/diFBldYDVaqPf2SleNk21YcRvyKOE/ITOnXTGj3hYhjztF X-OriginatorOrg: foss.st.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 13:57:55.0830 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b582dd4-fc98-44fe-83d0-08de62631086 X-MS-Exchange-CrossTenant-Id: 75e027c9-20d5-47d5-b82f-77d7cd041e8f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=75e027c9-20d5-47d5-b82f-77d7cd041e8f;Ip=[164.130.1.59];Helo=[smtpO365.st.com] X-MS-Exchange-CrossTenant-AuthSource: AMS0EPF00000199.eurprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5593 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjAyMDEwOSBTYWx0ZWRfXzU0cqVqnXvxe N3P7ykY10Yxwnh2r9eg0r3pSyYosqXudcOXCokCiElbhge+lfhBi4ukkhgb3NQgctT8ctKljtkD OT4jZ0ci/QO5OJ8UaOu3AMKiCFvDY9zeKSB9mYIAIGfK7RuAlT2NZdTcTm2Z25RPleIqzE2VVJj PxOm5yRTgMcuddExYzrMBWfL1sQ5sKVksnsNRsLFb8jONssbYlfsEbYhMgIJ1xUlGWVXp8klo21 YLmFmCIxS+/NMwqIyjqwzhqFzpACNhNfR3i2I1pKUhlkM0yoVoJusLrlGQiS54dCEtaRbegmNx+ NB230q1rtIblqIODb02Cnnza3cIuSD3kiOVMXkMS8Z00cbZgla3AXhzVlkFmujEC9SoC05o0PxU oDxBYJGQ5cLA5VaPu39eIPj53J/7P5rV6QvVGE2lyihkf6CGAz5eyEc0+CsHnN2AUV2iOl1p5Am OMPoNthoQZ757wn1s5g== X-Authority-Analysis: v=2.4 cv=ILwPywvG c=1 sm=1 tr=0 ts=6980ad69 cx=c_pps a=896zWVB3lkap0gFnCg6oog==:117 a=d6reE3nDawwanmLcZTMRXA==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=Xa52oM6mtQYA:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s63m1ICgrNkA:10 a=KrXZwBdWH7kA:10 a=VkNPw1HP01LnGYTKEx00:22 a=8b9GpE9nAAAA:8 a=GFosw7tHZT6EbzkxW0YA:9 a=QEXdDO2ut3YA:10 a=T3LWEMljR5ZiDmsYVIUa:22 X-Proofpoint-GUID: NP5-ck1UpfT4XBS0HrBf56tHIO8-RS6- X-Proofpoint-ORIG-GUID: NP5-ck1UpfT4XBS0HrBf56tHIO8-RS6- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-02_04,2026-01-30_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 adultscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 malwarescore=0 spamscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602020109 Add topology of the two pixel pipes (main & aux) of the stm32mp25. Do not make the link from dcmipp_input immutable and enabled by default since not all pipes are always used together so when a pipeline is not being used its link should be disconnected to allow proper pipeline check. Not doing this would most probably lead to pipeline start failure due to incompatible pads configurations on the unused pipe. Signed-off-by: Alain Volmat --- .../platform/st/stm32/stm32-dcmipp/dcmipp-core.c | 42 ++++++++++++++++++= ++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c b/d= rivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c index a52b3b0e3c37..44440f8ea9f5 100644 --- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c +++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-core.c @@ -75,6 +75,11 @@ static const struct dcmipp_pipeline_config stm32mp13_pip= e_cfg =3D { .hw_revision =3D DCMIPP_STM32MP13_VERR }; =20 +#define ID_MAIN_ISP 3 +#define ID_MAIN_POSTPROC 4 +#define ID_MAIN_CAPTURE 5 +#define ID_AUX_POSTPROC 6 +#define ID_AUX_CAPTURE 7 static const struct dcmipp_ent_config stm32mp25_ent_config[] =3D { { .name =3D "dcmipp_input", @@ -91,13 +96,46 @@ static const struct dcmipp_ent_config stm32mp25_ent_con= fig[] =3D { .init =3D dcmipp_capture_ent_init, .release =3D dcmipp_capture_ent_release, }, + { + .name =3D "dcmipp_main_isp", + .init =3D dcmipp_isp_ent_init, + .release =3D dcmipp_isp_ent_release, + }, + { + .name =3D "dcmipp_main_postproc", + .init =3D dcmipp_pixelproc_ent_init, + .release =3D dcmipp_pixelproc_ent_release, + }, + { + .name =3D "dcmipp_main_capture", + .init =3D dcmipp_capture_ent_init, + .release =3D dcmipp_capture_ent_release, + }, + { + .name =3D "dcmipp_aux_postproc", + .init =3D dcmipp_pixelproc_ent_init, + .release =3D dcmipp_pixelproc_ent_release, + }, + { + .name =3D "dcmipp_aux_capture", + .init =3D dcmipp_capture_ent_init, + .release =3D dcmipp_capture_ent_release, + }, }; =20 static const struct dcmipp_ent_link stm32mp25_ent_links[] =3D { - DCMIPP_ENT_LINK(ID_INPUT, 1, ID_DUMP_BYTEPROC, 0, - MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + DCMIPP_ENT_LINK(ID_INPUT, 1, ID_DUMP_BYTEPROC, 0, 0), DCMIPP_ENT_LINK(ID_DUMP_BYTEPROC, 1, ID_DUMP_CAPTURE, 0, MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + DCMIPP_ENT_LINK(ID_INPUT, 2, ID_MAIN_ISP, 0, 0), + DCMIPP_ENT_LINK(ID_MAIN_ISP, 1, ID_MAIN_POSTPROC, 0, + MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + DCMIPP_ENT_LINK(ID_MAIN_ISP, 2, ID_AUX_POSTPROC, 0, 0), + DCMIPP_ENT_LINK(ID_MAIN_POSTPROC, 1, ID_MAIN_CAPTURE, 0, + MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), + DCMIPP_ENT_LINK(ID_INPUT, 3, ID_AUX_POSTPROC, 0, 0), + DCMIPP_ENT_LINK(ID_AUX_POSTPROC, 1, ID_AUX_CAPTURE, 0, + MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE), }; =20 #define DCMIPP_STM32MP25_VERR 0x30 --=20 2.34.1