From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (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 D1CF337C0FA; Fri, 26 Jun 2026 15:14:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782486855; cv=none; b=dkzj0KW0v60PEAQneVyDPUMcTDnpag3PIKIKlYGVIzlZosFBFp4jJNkkHpQQ3kJjqTZKWiXVjwrQSJydq7gV0adg0EYArSV+6HoH7oSMEQt+9c/Q7h738eqI6a3v7Gaeewf7Dpm8pxwokEHXdXzbxHApgJ4npJftkf3LmtIiJbI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782486855; c=relaxed/simple; bh=pN3B8OxTXhw9zdo/mDjsTrybctnUfEi30+EQzaGZfKc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fNAmDM1eUvhphJeMaL73PQYuwU31ZGkrScilT9QEdskv1sVjtcxGqq37DQ2lepPuhk5GW9GPktEzqfd/bXGuwnF0Jo8UoV4QHDpmjM2dfj+m7efGTnxa3jcFjJfHaesLShXioZf/kTmjBXaDV6NaeSNGtmOH+YEw7ym5zvoM2Jc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=vNXpWkYN; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="vNXpWkYN" Received: from [10.1.1.1] (net-93-65-100-155.cust.vodafonedsl.it [93.65.100.155]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id F2E521AED; Fri, 26 Jun 2026 17:12:58 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1782486779; bh=pN3B8OxTXhw9zdo/mDjsTrybctnUfEi30+EQzaGZfKc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=vNXpWkYNamU38I/rF4J3elB+yUZwJB0JVq2VXIhsdiRR5pxnNX00NIZWrrVzD+4d+ jVRueo8mP6W9uQLDTW6mhEe8bZrECHafEHm1TqyAf0nrnwdTueIwQJ7l7QAkW8ox0L wir1UOYGZOugsLADN+jB3eV72LLROvGlAzzqlIeg= From: Jacopo Mondi Date: Fri, 26 Jun 2026 17:13:25 +0200 Subject: [PATCH v2 6/6] media: v4l2-isp: Add helpers for stats buffer 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: 8bit Message-Id: <20260626-extensible-stats-v2-6-41fdd5cf728b@ideasonboard.com> References: <20260626-extensible-stats-v2-0-41fdd5cf728b@ideasonboard.com> In-Reply-To: <20260626-extensible-stats-v2-0-41fdd5cf728b@ideasonboard.com> To: Mauro Carvalho Chehab , Daniel Scally , Keke Li , Antoine Bouyer , Jai Luthra , =?utf-8?q?Niklas_S=C3=B6derlund?= , Ricardo Ribalda Cc: Laurent Pinchart , Sakari Ailus , Hans Verkuil , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6derlund?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6316; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=pN3B8OxTXhw9zdo/mDjsTrybctnUfEi30+EQzaGZfKc=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqPpce3Zp0Wh3TJEQhwILJ/dS5ZfG7WYr/aNjLP jlbWD8yz0SJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaj6XHgAKCRByNAaPFqFW PNKrD/9gFQzoNMIze9bqRL6XpTfHjSdehe34a1hO4HyZgZO3yWVMCxb1BKJqc6VyKhLXOvuLFCp FD2RmViNKoN7WS1PMXFOBzzTcqtcUwDj6A0a8/jG9LQQInCUhfPT0Cy1VdrIP8hqqumgteenbWU ARmglQWtd5QSujC5ruVlojTJfX3Fw3c1tQo+pTMBCbJyGBi/XiLIV5ngnkSwP60/V1sD50QfYs3 gvUsAUMgm4IU3zGG0sQgOMyQQxgyx3jRTAQ9ALqi+YAxksGXJCwPFj4bXmJERzhY6XcJLztWX/L GiiOKGZDHlp6jsEFO3LuxPpKUxSkrZWPNqjTNjZ/zuXdDNoFWgXmtiaens827YWTxEXX9ZS6MFt aYqONeAPztIxkC0FI86yBKLUAhf/5YjT8d7sPuTxUWFOnqZTIJ8b3ybxLd7IT0tmKYU/FDp60Vu BwbIXcMnPlXbbUMBi79m37ZsrkBPysp7IJwh7AhHp7pTJl6JYdhQLbjrADDZtIoRcqxR1OwZWez macPFxVxq7XuwqHz2PiAngE4aPSWtX2Z0gqIVOxVzwRmcpKiZ5mxikXPgIjufrCcpMmgOIE+nNV c91H2CjeNyUz5d6037c5AmLsth4XOADA5OEDLJi2go0fkwv0fpyBHaBlSanq8kOmCoq931zR4jE L+VpYvzbmqe5BCQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B Add two helper functions to v4l2-isp to handle statistics: - v4l2_isp_stats_init_buffer() to initialize a statistics buffer - v4l2_isp_stats_init_block() to initialize a statistics block in the next available memory location of a buffer The v4l2_isp_stats_init_buffer() resets the data size counter of the buffer and initializes its 'version' field. The v4l2_isp_stats_init_block() helper accepts the type of the stats block about to be populated, an array of per-block-type information and the maximum size of the v4l2-isp buffer. If enough space for the new block is available, the function increments the v4l2_isp_buffer.data_size counter, initializes the new stats block header and returns a pointer to the block for the driver to populate it. Reviewed-by: Niklas Söderlund Signed-off-by: Jacopo Mondi --- drivers/media/v4l2-core/v4l2-isp.c | 52 +++++++++++++++++++++++++++++++++ include/media/v4l2-isp.h | 59 +++++++++++++++++++++++++++++++++++++- 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/drivers/media/v4l2-core/v4l2-isp.c b/drivers/media/v4l2-core/v4l2-isp.c index 10760659f8a3..8482010776d4 100644 --- a/drivers/media/v4l2-core/v4l2-isp.c +++ b/drivers/media/v4l2-core/v4l2-isp.c @@ -131,6 +131,58 @@ int v4l2_isp_params_validate_buffer(struct device *dev, struct vb2_buffer *vb, } EXPORT_SYMBOL_GPL(v4l2_isp_params_validate_buffer); +void v4l2_isp_stats_init_buffer(struct v4l2_isp_buffer *buf, + enum v4l2_isp_version version) +{ + if (WARN_ON(!buf)) + return; + + if (WARN_ON(version > V4L2_ISP_VERSION_V1)) + return; + + buf->version = version; + buf->data_size = 0; +} +EXPORT_SYMBOL_GPL(v4l2_isp_stats_init_buffer); + +struct v4l2_isp_block_header * +v4l2_isp_stats_init_block(struct device *dev, struct v4l2_isp_buffer *buf, + const struct v4l2_isp_stats_block_type_info *type_info, + size_t num_block_types, unsigned int block_type, + size_t max_size) +{ + const struct v4l2_isp_stats_block_type_info *block_info; + struct v4l2_isp_block_header *header; + size_t used; + + if (WARN_ON(!dev || !buf || !type_info)) + return ERR_PTR(-EINVAL); + + if (block_type >= num_block_types) { + dev_err(dev, "Invalid block type %u\n", block_type); + return ERR_PTR(-EINVAL); + } + + block_info = &type_info[block_type]; + used = buf->data_size; + + if (used + block_info->size > max_size) { + dev_err(dev, "No space for stats block type %u of size %zu\n", + block_type, block_info->size); + return ERR_PTR(-ENOMEM); + } + + buf->data_size += block_info->size; + + header = (struct v4l2_isp_block_header *)&buf->data[used]; + header->type = block_type; + header->size = block_info->size; + header->flags = 0; + + return header; +} +EXPORT_SYMBOL_GPL(v4l2_isp_stats_init_block); + MODULE_LICENSE("GPL"); MODULE_AUTHOR("Jacopo Mondi