* [PATCH 0/4] media: atomisp: remove the circbuf library
@ 2026-10-12 23:07 Rareș-Mihai Vladu
2026-10-12 23:07 ` [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly Rareș-Mihai Vladu
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: Rareș-Mihai Vladu @ 2026-10-12 23:07 UTC (permalink / raw)
To: Hans de Goede, Mauro Carvalho Chehab
Cc: Sakari Ailus, Andy Shevchenko, Greg Kroah-Hartman, linux-media,
linux-staging, linux-kernel, Rareș-Mihai Vladu
Thanks to Andy for suggesting, in review of my earlier typedef
patch [1], that I look at converting the custom circbuf code to
circ_buf or kfifo.
While looking into it, it turned out that the circbuf API is only
used by the local queue path, and ia_css_queue_local_init() has no
callers, so that path is unused. The remote queues only need the
descriptor and element layout shared with the SP firmware and a few
small helpers.
So this series removes the unused local path, moves those few pieces
into ia_css_queue_comm.h and drops base/circbuf/. Please let me know
if you would prefer a different approach and I will rework it.
Patch 3 only moves code, apart from dropping OP___assert(), so I did
not touch the existing style issues there.
Compile-tested only, as I don't have the hardware.
This supersedes the typedef patch [1].
[1] https://lore.kernel.org/all/20260918214132.1135549-1-vladurares@gmail.com/
Rareș-Mihai Vladu (4):
media: atomisp: sh_css_mipi: include assert_support.h directly
media: atomisp: queue: remove unused local queue support
media: atomisp: queue: move circbuf types and helpers to queue_comm.h
media: atomisp: remove unused circbuf library
drivers/staging/media/atomisp/Makefile | 2 -
.../base/circbuf/interface/ia_css_circbuf.h | 363 ------------------
.../circbuf/interface/ia_css_circbuf_comm.h | 56 ---
.../circbuf/interface/ia_css_circbuf_desc.h | 160 --------
.../atomisp/pci/base/circbuf/src/circbuf.c | 312 ---------------
.../runtime/queue/interface/ia_css_queue.h | 29 --
.../queue/interface/ia_css_queue_comm.h | 139 ++++++-
.../atomisp/pci/runtime/queue/src/queue.c | 112 +-----
.../pci/runtime/queue/src/queue_access.c | 1 -
.../pci/runtime/queue/src/queue_access.h | 4 +-
.../media/atomisp/pci/sh_css_internal.h | 2 +-
.../staging/media/atomisp/pci/sh_css_mipi.c | 1 +
12 files changed, 148 insertions(+), 1033 deletions(-)
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_desc.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/src/circbuf.c
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
@ 2026-10-12 23:07 ` Rareș-Mihai Vladu
2026-10-13 16:06 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 2/4] media: atomisp: queue: remove unused local queue support Rareș-Mihai Vladu
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Rareș-Mihai Vladu @ 2026-10-12 23:07 UTC (permalink / raw)
To: Hans de Goede, Mauro Carvalho Chehab
Cc: Sakari Ailus, Andy Shevchenko, Greg Kroah-Hartman, linux-media,
linux-staging, linux-kernel, Rareș-Mihai Vladu
sh_css_mipi.c uses assert() but only gets its definition indirectly
through the circbuf headers. Include assert_support.h directly so the
file does not depend on that include chain.
Signed-off-by: Rareș-Mihai Vladu <vladurares@gmail.com>
---
drivers/staging/media/atomisp/pci/sh_css_mipi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/staging/media/atomisp/pci/sh_css_mipi.c b/drivers/staging/media/atomisp/pci/sh_css_mipi.c
index 971b685cdb58b..d73edd2c7c5e4 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_mipi.c
+++ b/drivers/staging/media/atomisp/pci/sh_css_mipi.c
@@ -20,6 +20,7 @@
#include "sh_css_defs.h"
#include "sh_css_sp.h" /* sh_css_update_host2sp_mipi_frame sh_css_update_host2sp_num_mipi_frames ... */
#include "sw_event_global.h" /* IA_CSS_PSYS_SW_EVENT_MIPI_BUFFERS_READY */
+#include "assert_support.h"
static u32
ref_count_mipi_allocation[N_CSI_PORTS]; /* Initialized in mipi_init */
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/4] media: atomisp: queue: remove unused local queue support
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
2026-10-12 23:07 ` [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly Rareș-Mihai Vladu
@ 2026-10-12 23:07 ` Rareș-Mihai Vladu
2026-10-13 16:14 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h Rareș-Mihai Vladu
` (2 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Rareș-Mihai Vladu @ 2026-10-12 23:07 UTC (permalink / raw)
To: Hans de Goede, Mauro Carvalho Chehab
Cc: Sakari Ailus, Andy Shevchenko, Greg Kroah-Hartman, linux-media,
linux-staging, linux-kernel, Rareș-Mihai Vladu
ia_css_queue_local_init() has no callers, so IA_CSS_QUEUE_TYPE_LOCAL
is never set and every local queue branch in queue.c is unreachable.
ia_css_queue_uninit() only tore down local queues and has no callers
either.
Remove both functions, the local branches, struct ia_css_queue_local
and the local member of the struct ia_css_queue union. Only remote
queues, shared with the SP firmware, are used by the driver.
Signed-off-by: Rareș-Mihai Vladu <vladurares@gmail.com>
---
.../runtime/queue/interface/ia_css_queue.h | 29 -----
.../queue/interface/ia_css_queue_comm.h | 1 -
.../atomisp/pci/runtime/queue/src/queue.c | 110 ++----------------
.../pci/runtime/queue/src/queue_access.h | 3 +-
4 files changed, 9 insertions(+), 134 deletions(-)
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue.h b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue.h
index c097d912d87f8..87207c355e8e2 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue.h
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue.h
@@ -13,32 +13,12 @@
#include "ia_css_queue_comm.h"
#include "../src/queue_access.h"
-/* Local Queue object descriptor */
-struct ia_css_queue_local {
- ia_css_circbuf_desc_t *cb_desc; /*Circbuf desc for local queues*/
- ia_css_circbuf_elem_t *cb_elems; /*Circbuf elements*/
-};
-
-typedef struct ia_css_queue_local ia_css_queue_local_t;
-
/* Handle for queue object*/
typedef struct ia_css_queue ia_css_queue_t;
/*****************************************************************************
* Queue Public APIs
*****************************************************************************/
-/* @brief Initialize a local queue instance.
- *
- * @param[out] qhandle. Handle to queue instance for use with API
- * @param[in] desc. Descriptor with queue properties filled-in
- * @return 0 - Successful init of local queue instance.
- * @return -EINVAL - Invalid argument.
- *
- */
-int ia_css_queue_local_init(
- ia_css_queue_t *qhandle,
- ia_css_queue_local_t *desc);
-
/* @brief Initialize a remote queue instance
*
* @param[out] qhandle. Handle to queue instance for use with API
@@ -50,15 +30,6 @@ int ia_css_queue_remote_init(
ia_css_queue_t *qhandle,
ia_css_queue_remote_t *desc);
-/* @brief Uninitialize a queue instance
- *
- * @param[in] qhandle. Handle to queue instance
- * @return 0 - Successful uninit.
- *
- */
-int ia_css_queue_uninit(
- ia_css_queue_t *qhandle);
-
/* @brief Enqueue an item in the queue instance
*
* @param[in] qhandle. Handle to queue instance
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
index 0bed6425a07f0..14f2c8de3b910 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
@@ -21,7 +21,6 @@
/* Queue type specifier */
/* Avoiding enums to save space */
-#define IA_CSS_QUEUE_TYPE_LOCAL 0
#define IA_CSS_QUEUE_TYPE_REMOTE 1
/* for DDR Allocated queues,
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
index d27c6567daeb0..e4dacc812931d 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
@@ -13,24 +13,6 @@
/*****************************************************************************
* Queue Public APIs
*****************************************************************************/
-int ia_css_queue_local_init(ia_css_queue_t *qhandle, ia_css_queue_local_t *desc)
-{
- if (NULL == qhandle || NULL == desc
- || NULL == desc->cb_elems || NULL == desc->cb_desc) {
- /* Invalid parameters, return error*/
- return -EINVAL;
- }
-
- /* Mark the queue as Local */
- qhandle->type = IA_CSS_QUEUE_TYPE_LOCAL;
-
- /* Create a local circular buffer queue*/
- ia_css_circbuf_create(&qhandle->desc.cb_local,
- desc->cb_elems,
- desc->cb_desc);
-
- return 0;
-}
int ia_css_queue_remote_init(ia_css_queue_t *qhandle, ia_css_queue_remote_t *desc)
{
@@ -56,20 +38,6 @@ int ia_css_queue_remote_init(ia_css_queue_t *qhandle, ia_css_queue_remote_t *des
return 0;
}
-int ia_css_queue_uninit(ia_css_queue_t *qhandle)
-{
- if (!qhandle)
- return -EINVAL;
-
- /* Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Local queues are created. Destroy it*/
- ia_css_circbuf_destroy(&qhandle->desc.cb_local);
- }
-
- return 0;
-}
-
int ia_css_queue_enqueue(ia_css_queue_t *qhandle, uint32_t item)
{
int error;
@@ -78,18 +46,7 @@ int ia_css_queue_enqueue(ia_css_queue_t *qhandle, uint32_t item)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- if (ia_css_circbuf_is_full(&qhandle->desc.cb_local)) {
- /* Cannot push the element. Return*/
- return -ENOBUFS;
- }
-
- /* Push the element*/
- ia_css_circbuf_push(&qhandle->desc.cb_local, item);
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
ia_css_circbuf_desc_t cb_desc;
ia_css_circbuf_elem_t cb_elem;
u32 ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG;
@@ -135,17 +92,7 @@ int ia_css_queue_dequeue(ia_css_queue_t *qhandle, uint32_t *item)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- if (ia_css_circbuf_is_empty(&qhandle->desc.cb_local)) {
- /* Nothing to pop. Return empty queue*/
- return -ENODATA;
- }
-
- *item = ia_css_circbuf_pop(&qhandle->desc.cb_local);
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
ia_css_circbuf_elem_t cb_elem;
@@ -190,13 +137,7 @@ int ia_css_queue_is_full(ia_css_queue_t *qhandle, bool *is_full)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- *is_full = ia_css_circbuf_is_full(&qhandle->desc.cb_local);
- return 0;
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
u32 ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG;
@@ -222,13 +163,7 @@ int ia_css_queue_get_free_space(ia_css_queue_t *qhandle, uint32_t *size)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- *size = ia_css_circbuf_get_free_elems(&qhandle->desc.cb_local);
- return 0;
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
u32 ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG;
@@ -254,13 +189,7 @@ int ia_css_queue_get_used_space(ia_css_queue_t *qhandle, uint32_t *size)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- *size = ia_css_circbuf_get_num_elems(&qhandle->desc.cb_local);
- return 0;
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
u32 ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG;
@@ -287,18 +216,7 @@ int ia_css_queue_peek(ia_css_queue_t *qhandle, u32 offset, uint32_t *element)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- /* Check if offset is valid */
- num_elems = ia_css_circbuf_get_num_elems(&qhandle->desc.cb_local);
- if (offset > num_elems)
- return -EINVAL;
-
- *element = ia_css_circbuf_peek_from_start(&qhandle->desc.cb_local, (int)offset);
- return 0;
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
ia_css_circbuf_elem_t cb_elem;
@@ -335,13 +253,7 @@ int ia_css_queue_is_empty(ia_css_queue_t *qhandle, bool *is_empty)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- *is_empty = ia_css_circbuf_is_empty(&qhandle->desc.cb_local);
- return 0;
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
u32 ignore_desc_flags = QUEUE_IGNORE_STEP_FLAG;
@@ -367,13 +279,7 @@ int ia_css_queue_get_size(ia_css_queue_t *qhandle, uint32_t *size)
return -EINVAL;
/* 1. Load the required queue object */
- if (qhandle->type == IA_CSS_QUEUE_TYPE_LOCAL) {
- /* Directly de-ref the object and
- * operate on the queue
- */
- /* Return maximum usable capacity */
- *size = ia_css_circbuf_get_size(&qhandle->desc.cb_local);
- } else if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
+ if (qhandle->type == IA_CSS_QUEUE_TYPE_REMOTE) {
/* a. Load the queue from remote */
ia_css_circbuf_desc_t cb_desc;
u32 ignore_desc_flags = QUEUE_IGNORE_START_END_STEP_FLAGS;
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
index d62133a8fe6f8..5319818872626 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
@@ -43,11 +43,10 @@
} while (0)
struct ia_css_queue {
- u8 type; /* Specify remote/local type of access */
+ u8 type; /* Specify remote type of access */
u8 location; /* Cell location for queue */
u8 proc_id; /* Processor id for queue access */
union {
- ia_css_circbuf_t cb_local;
struct {
u32 cb_desc_addr; /*Circbuf desc address for remote queues*/
u32 cb_elems_addr; /*Circbuf elements addr for remote queue*/
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
2026-10-12 23:07 ` [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly Rareș-Mihai Vladu
2026-10-12 23:07 ` [PATCH 2/4] media: atomisp: queue: remove unused local queue support Rareș-Mihai Vladu
@ 2026-10-12 23:07 ` Rareș-Mihai Vladu
2026-10-13 16:20 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 4/4] media: atomisp: remove unused circbuf library Rareș-Mihai Vladu
2026-10-13 7:38 ` [PATCH 0/4] media: atomisp: remove the " Andy Shevchenko
4 siblings, 1 reply; 10+ messages in thread
From: Rareș-Mihai Vladu @ 2026-10-12 23:07 UTC (permalink / raw)
To: Hans de Goede, Mauro Carvalho Chehab
Cc: Sakari Ailus, Andy Shevchenko, Greg Kroah-Hartman, linux-media,
linux-staging, linux-kernel, Rareș-Mihai Vladu
The remote queue code only needs the circbuf descriptor and element
layouts plus five small descriptor helpers from the circbuf library.
Move them into ia_css_queue_comm.h and include that header instead of
the circbuf ones.
The descriptor and element layouts are shared with the SP firmware and
are moved unchanged, including their static_asserts.
While at it, drop the OP___assert() NULL checks from the moved helpers:
every caller passes the address of a local variable, so the pointer can
never be NULL.
Signed-off-by: Rareș-Mihai Vladu <vladurares@gmail.com>
---
.../queue/interface/ia_css_queue_comm.h | 138 +++++++++++++++++-
.../atomisp/pci/runtime/queue/src/queue.c | 2 -
.../pci/runtime/queue/src/queue_access.c | 1 -
.../pci/runtime/queue/src/queue_access.h | 1 -
.../media/atomisp/pci/sh_css_internal.h | 2 +-
5 files changed, 138 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
index 14f2c8de3b910..a18373608169a 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/interface/ia_css_queue_comm.h
@@ -7,8 +7,144 @@
#ifndef __IA_CSS_QUEUE_COMM_H
#define __IA_CSS_QUEUE_COMM_H
+#include <linux/build_bug.h>
+#include <linux/types.h>
+
#include "type_support.h"
-#include "ia_css_circbuf.h"
+
+/****************************************************************
+ *
+ * Portable Data structures
+ *
+ ****************************************************************/
+/*
+ * @brief Data structure for the circular descriptor.
+ */
+typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t;
+struct ia_css_circbuf_desc_s {
+ u8 size; /* the maximum number of elements*/
+ u8 step; /* number of bytes per element */
+ u8 start; /* index of the oldest element */
+ u8 end; /* index at which to write the new element */
+};
+
+#define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT \
+ (4 * sizeof(uint8_t))
+
+static_assert(sizeof(struct ia_css_circbuf_desc_s) == SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT);
+
+/*
+ * @brief Data structure for the circular buffer element.
+ */
+typedef struct ia_css_circbuf_elem_s ia_css_circbuf_elem_t;
+struct ia_css_circbuf_elem_s {
+ u32 val; /* the value stored in the element */
+};
+
+#define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT \
+ (sizeof(uint32_t))
+
+static_assert(sizeof(struct ia_css_circbuf_elem_s) == SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT);
+
+/****************************************************************
+ *
+ * Inline functions.
+ *
+ ****************************************************************/
+/*
+ * @brief Test if the circular buffer is empty.
+ *
+ * @param cb_desc The pointer to the circular buffer descriptor.
+ *
+ * @return
+ * - true when it is empty.
+ * - false when it is not empty.
+ */
+static inline bool ia_css_circbuf_desc_is_empty(
+ ia_css_circbuf_desc_t *cb_desc)
+{
+ return (cb_desc->end == cb_desc->start);
+}
+
+/*
+ * @brief Test if the circular buffer descriptor is full.
+ *
+ * @param cb_desc The pointer to the circular buffer
+ * descriptor.
+ *
+ * @return
+ * - true when it is full.
+ * - false when it is not full.
+ */
+static inline bool ia_css_circbuf_desc_is_full(
+ ia_css_circbuf_desc_t *cb_desc)
+{
+ return ((cb_desc->end + 1) % cb_desc->size) == cb_desc->start;
+}
+
+/*
+ * @brief Get the offset between two positions in the circular buffer
+ * descriptor.
+ * Get the offset from the source position to the terminal position,
+ * along the direction in which the new elements come in.
+ *
+ * @param cb_desc The pointer to the circular buffer descriptor.
+ * @param src_pos The source position.
+ * @param dest_pos The terminal position.
+ *
+ * @return the offset.
+ */
+static inline int ia_css_circbuf_desc_get_offset(
+ ia_css_circbuf_desc_t *cb_desc,
+ u32 src_pos,
+ uint32_t dest_pos)
+{
+ int offset;
+
+ offset = (int)(dest_pos - src_pos);
+ offset += (offset < 0) ? cb_desc->size : 0;
+
+ return offset;
+}
+
+/*
+ * @brief Get the number of available elements.
+ *
+ * @param cb_desc The pointer to the circular buffer.
+ *
+ * @return The number of available elements.
+ */
+static inline uint32_t ia_css_circbuf_desc_get_num_elems(
+ ia_css_circbuf_desc_t *cb_desc)
+{
+ int num;
+
+ num = ia_css_circbuf_desc_get_offset(cb_desc,
+ cb_desc->start,
+ cb_desc->end);
+
+ return (uint32_t)num;
+}
+
+/*
+ * @brief Get the number of free elements.
+ *
+ * @param cb_desc The pointer to the circular buffer descriptor.
+ *
+ * @return: The number of free elements.
+ */
+static inline uint32_t ia_css_circbuf_desc_get_free_elems(
+ ia_css_circbuf_desc_t *cb_desc)
+{
+ u32 num;
+
+ num = ia_css_circbuf_desc_get_offset(cb_desc,
+ cb_desc->start,
+ cb_desc->end);
+
+ return (cb_desc->size - num);
+}
+
/*****************************************************************************
* Queue Public Data Structures
*****************************************************************************/
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
index e4dacc812931d..ac71330c7d7ff 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue.c
@@ -6,8 +6,6 @@
#include "ia_css_queue.h"
#include <math_support.h>
-#include <ia_css_circbuf.h>
-#include <ia_css_circbuf_desc.h>
#include "queue_access.h"
/*****************************************************************************
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.c b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.c
index 2591d157870ce..65835420a13c0 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.c
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.c
@@ -8,7 +8,6 @@
#include "type_support.h"
#include "queue_access.h"
-#include "ia_css_circbuf.h"
#include "sp.h"
#include "assert_support.h"
diff --git a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
index 5319818872626..afc0801af509e 100644
--- a/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
+++ b/drivers/staging/media/atomisp/pci/runtime/queue/src/queue_access.h
@@ -11,7 +11,6 @@
#include <type_support.h>
#include <ia_css_queue_comm.h>
-#include <ia_css_circbuf.h>
#define QUEUE_IGNORE_START_FLAG 0x0001
#define QUEUE_IGNORE_END_FLAG 0x0002
diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
index ec68c16d42722..f08f918b361c4 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
+++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
@@ -29,7 +29,7 @@
#include "sh_css_defs.h"
#include "sh_css_uds.h"
#include "dma.h" /* N_DMA_CHANNEL_ID */
-#include "ia_css_circbuf_comm.h" /* Circular buffer */
+#include "ia_css_queue_comm.h"
#include "ia_css_frame_comm.h"
#include "ia_css_3a.h"
#include "ia_css_dvs.h"
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 4/4] media: atomisp: remove unused circbuf library
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
` (2 preceding siblings ...)
2026-10-12 23:07 ` [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h Rareș-Mihai Vladu
@ 2026-10-12 23:07 ` Rareș-Mihai Vladu
2026-10-13 16:21 ` Andy Shevchenko
2026-10-13 7:38 ` [PATCH 0/4] media: atomisp: remove the " Andy Shevchenko
4 siblings, 1 reply; 10+ messages in thread
From: Rareș-Mihai Vladu @ 2026-10-12 23:07 UTC (permalink / raw)
To: Hans de Goede, Mauro Carvalho Chehab
Cc: Sakari Ailus, Andy Shevchenko, Greg Kroah-Hartman, linux-media,
linux-staging, linux-kernel, Rareș-Mihai Vladu
After the previous changes nothing in the driver uses the custom
circular buffer implementation in base/circbuf/ anymore. Remove it
together with its Makefile entries.
Signed-off-by: Rareș-Mihai Vladu <vladurares@gmail.com>
---
drivers/staging/media/atomisp/Makefile | 2 -
.../base/circbuf/interface/ia_css_circbuf.h | 363 ------------------
.../circbuf/interface/ia_css_circbuf_comm.h | 56 ---
.../circbuf/interface/ia_css_circbuf_desc.h | 160 --------
.../atomisp/pci/base/circbuf/src/circbuf.c | 312 ---------------
5 files changed, 893 deletions(-)
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_desc.h
delete mode 100644 drivers/staging/media/atomisp/pci/base/circbuf/src/circbuf.c
diff --git a/drivers/staging/media/atomisp/Makefile b/drivers/staging/media/atomisp/Makefile
index 1d0fbe22036bd..65e09be95bc99 100644
--- a/drivers/staging/media/atomisp/Makefile
+++ b/drivers/staging/media/atomisp/Makefile
@@ -35,7 +35,6 @@ atomisp-objs += \
pci/sh_css_sp.o \
pci/sh_css_stream_format.o \
pci/sh_css_version.o \
- pci/base/circbuf/src/circbuf.o \
pci/base/refcount/src/refcount.o \
pci/camera/pipe/src/pipe_binarydesc.o \
pci/camera/pipe/src/pipe_stagedesc.o \
@@ -162,7 +161,6 @@ INCLUDES += \
-I$(atomisp)/include/hmm/ \
-I$(atomisp)/include/mmu/ \
-I$(atomisp)/pci/ \
- -I$(atomisp)/pci/base/circbuf/interface/ \
-I$(atomisp)/pci/base/refcount/interface/ \
-I$(atomisp)/pci/camera/pipe/interface/ \
-I$(atomisp)/pci/camera/util/interface/ \
diff --git a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf.h b/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf.h
deleted file mode 100644
index fbcd73b711baf..0000000000000
--- a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf.h
+++ /dev/null
@@ -1,363 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Support for Intel Camera Imaging ISP subsystem.
- * Copyright (c) 2015, Intel Corporation.
- */
-
-#ifndef _IA_CSS_CIRCBUF_H
-#define _IA_CSS_CIRCBUF_H
-
-#include <sp.h>
-#include <type_support.h>
-#include <math_support.h>
-#include <assert_support.h>
-#include <platform_support.h>
-#include "ia_css_circbuf_comm.h"
-#include "ia_css_circbuf_desc.h"
-
-/****************************************************************
- *
- * Data structures.
- *
- ****************************************************************/
-/*
- * @brief Data structure for the circular buffer.
- */
-typedef struct ia_css_circbuf_s ia_css_circbuf_t;
-struct ia_css_circbuf_s {
- ia_css_circbuf_desc_t *desc; /* Pointer to the descriptor of the circbuf */
- ia_css_circbuf_elem_t *elems; /* an array of elements */
-};
-
-/*
- * @brief Create the circular buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param elems An array of elements.
- * @param desc The descriptor set to the size using ia_css_circbuf_desc_init().
- */
-void ia_css_circbuf_create(
- ia_css_circbuf_t *cb,
- ia_css_circbuf_elem_t *elems,
- ia_css_circbuf_desc_t *desc);
-
-/*
- * @brief Destroy the circular buffer.
- *
- * @param cb The pointer to the circular buffer.
- */
-void ia_css_circbuf_destroy(
- ia_css_circbuf_t *cb);
-
-/*
- * @brief Pop a value out of the circular buffer.
- * Get a value at the head of the circular buffer.
- * The user should call "ia_css_circbuf_is_empty()"
- * to avoid accessing to an empty buffer.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return the pop-out value.
- */
-uint32_t ia_css_circbuf_pop(
- ia_css_circbuf_t *cb);
-
-/*
- * @brief Extract a value out of the circular buffer.
- * Get a value at an arbitrary position in the circular
- * buffer. The user should call "ia_css_circbuf_is_empty()"
- * to avoid accessing to an empty buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param offset The offset from "start" to the target position.
- *
- * @return the extracted value.
- */
-uint32_t ia_css_circbuf_extract(
- ia_css_circbuf_t *cb,
- int offset);
-
-/****************************************************************
- *
- * Inline functions.
- *
- ****************************************************************/
-/*
- * @brief Set the "val" field in the element.
- *
- * @param elem The pointer to the element.
- * @param val The value to be set.
- */
-static inline void ia_css_circbuf_elem_set_val(
- ia_css_circbuf_elem_t *elem,
- uint32_t val)
-{
- OP___assert(elem);
-
- elem->val = val;
-}
-
-/*
- * @brief Initialize the element.
- *
- * @param elem The pointer to the element.
- */
-static inline void ia_css_circbuf_elem_init(
- ia_css_circbuf_elem_t *elem)
-{
- OP___assert(elem);
- ia_css_circbuf_elem_set_val(elem, 0);
-}
-
-/*
- * @brief Copy an element.
- *
- * @param src The element as the copy source.
- * @param dest The element as the copy destination.
- */
-static inline void ia_css_circbuf_elem_cpy(
- ia_css_circbuf_elem_t *src,
- ia_css_circbuf_elem_t *dest)
-{
- OP___assert(src);
- OP___assert(dest);
-
- ia_css_circbuf_elem_set_val(dest, src->val);
-}
-
-/*
- * @brief Get position in the circular buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param base The base position.
- * @param offset The offset.
- *
- * @return the position at offset.
- */
-static inline uint8_t ia_css_circbuf_get_pos_at_offset(
- ia_css_circbuf_t *cb,
- u32 base,
- int offset)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
- OP___assert(cb->desc->size > 0);
-
- /* step 1: adjudst the offset */
- while (offset < 0)
- offset += cb->desc->size;
-
- /* step 2: shift and round by the upper limit */
- return (base + offset) % cb->desc->size;
-}
-
-/*
- * @brief Get the offset between two positions in the circular buffer.
- * Get the offset from the source position to the terminal position,
- * along the direction in which the new elements come in.
- *
- * @param cb The pointer to the circular buffer.
- * @param src_pos The source position.
- * @param dest_pos The terminal position.
- *
- * @return the offset.
- */
-static inline int ia_css_circbuf_get_offset(
- ia_css_circbuf_t *cb,
- u32 src_pos,
- uint32_t dest_pos)
-{
- int offset;
-
- OP___assert(cb);
- OP___assert(cb->desc);
-
- offset = (int)(dest_pos - src_pos);
- offset += (offset < 0) ? cb->desc->size : 0;
-
- return offset;
-}
-
-/*
- * @brief Get the maximum number of elements.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return the maximum number of elements.
- *
- * TODO: Test this API.
- */
-static inline uint32_t ia_css_circbuf_get_size(
- ia_css_circbuf_t *cb)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
-
- return cb->desc->size;
-}
-
-/*
- * @brief Get the number of available elements.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return the number of available elements.
- */
-static inline uint32_t ia_css_circbuf_get_num_elems(
- ia_css_circbuf_t *cb)
-{
- int num;
-
- OP___assert(cb);
- OP___assert(cb->desc);
-
- num = ia_css_circbuf_get_offset(cb, cb->desc->start, cb->desc->end);
-
- return (uint32_t)num;
-}
-
-/*
- * @brief Test if the circular buffer is empty.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return
- * - true when it is empty.
- * - false when it is not empty.
- */
-static inline bool ia_css_circbuf_is_empty(
- ia_css_circbuf_t *cb)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
-
- return ia_css_circbuf_desc_is_empty(cb->desc);
-}
-
-/*
- * @brief Test if the circular buffer is full.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return
- * - true when it is full.
- * - false when it is not full.
- */
-static inline bool ia_css_circbuf_is_full(ia_css_circbuf_t *cb)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
-
- return ia_css_circbuf_desc_is_full(cb->desc);
-}
-
-/*
- * @brief Write a new element into the circular buffer.
- * Write a new element WITHOUT checking whether the
- * circular buffer is full or not. So it also overwrites
- * the oldest element when the buffer is full.
- *
- * @param cb The pointer to the circular buffer.
- * @param elem The new element.
- */
-static inline void ia_css_circbuf_write(
- ia_css_circbuf_t *cb,
- ia_css_circbuf_elem_t elem)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
-
- /* Cannot continue as the queue is full*/
- assert(!ia_css_circbuf_is_full(cb));
-
- ia_css_circbuf_elem_cpy(&elem, &cb->elems[cb->desc->end]);
-
- cb->desc->end = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->end, 1);
-}
-
-/*
- * @brief Push a value in the circular buffer.
- * Put a new value at the tail of the circular buffer.
- * The user should call "ia_css_circbuf_is_full()"
- * to avoid accessing to a full buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param val The value to be pushed in.
- */
-static inline void ia_css_circbuf_push(
- ia_css_circbuf_t *cb,
- uint32_t val)
-{
- ia_css_circbuf_elem_t elem;
-
- OP___assert(cb);
-
- /* set up an element */
- ia_css_circbuf_elem_init(&elem);
- ia_css_circbuf_elem_set_val(&elem, val);
-
- /* write the element into the buffer */
- ia_css_circbuf_write(cb, elem);
-}
-
-/*
- * @brief Get the number of free elements.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return: The number of free elements.
- */
-static inline uint32_t ia_css_circbuf_get_free_elems(
- ia_css_circbuf_t *cb)
-{
- OP___assert(cb);
- OP___assert(cb->desc);
-
- return ia_css_circbuf_desc_get_free_elems(cb->desc);
-}
-
-/*
- * @brief Peek an element in Circular Buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param offset Offset to the element.
- *
- * @return the elements value.
- */
-uint32_t ia_css_circbuf_peek(
- ia_css_circbuf_t *cb,
- int offset);
-
-/*
- * @brief Get an element in Circular Buffer.
- *
- * @param cb The pointer to the circular buffer.
- * @param offset Offset to the element.
- *
- * @return the elements value.
- */
-uint32_t ia_css_circbuf_peek_from_start(
- ia_css_circbuf_t *cb,
- int offset);
-
-/*
- * @brief Increase Size of a Circular Buffer.
- * Use 'CAUTION' before using this function, This was added to
- * support / fix issue with increasing size for tagger only
- *
- * @param cb The pointer to the circular buffer.
- * @param sz_delta delta increase for new size
- * @param elems (optional) pointers to new additional elements
- * cb element array size will not be increased dynamically,
- * but new elements should be added at the end to existing
- * cb element array which if of max_size >= new size
- *
- * @return true on successfully increasing the size
- * false on failure
- */
-bool ia_css_circbuf_increase_size(
- ia_css_circbuf_t *cb,
- unsigned int sz_delta,
- ia_css_circbuf_elem_t *elems);
-
-#endif /*_IA_CSS_CIRCBUF_H */
diff --git a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h b/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
deleted file mode 100644
index 090e2e7640421..0000000000000
--- a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_comm.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Support for Intel Camera Imaging ISP subsystem.
- * Copyright (c) 2015, Intel Corporation.
- */
-
-#ifndef _IA_CSS_CIRCBUF_COMM_H
-#define _IA_CSS_CIRCBUF_COMM_H
-
-#include <linux/build_bug.h>
-
-#include <type_support.h> /* uint8_t, uint32_t */
-
-#define IA_CSS_CIRCBUF_PADDING 1 /* The circular buffer is implemented in lock-less manner, wherein
- * the head and tail can advance independently without any locks.
- * But to achieve this, an extra buffer element is required to detect
- * queue full & empty conditions, wherein the tail trails the head for
- * full and is equal to head for empty condition. This causes 1 buffer
- * not being available for use.
- */
-
-/****************************************************************
- *
- * Portable Data structures
- *
- ****************************************************************/
-/*
- * @brief Data structure for the circular descriptor.
- */
-typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t;
-struct ia_css_circbuf_desc_s {
- u8 size; /* the maximum number of elements*/
- u8 step; /* number of bytes per element */
- u8 start; /* index of the oldest element */
- u8 end; /* index at which to write the new element */
-};
-
-#define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT \
- (4 * sizeof(uint8_t))
-
-static_assert(sizeof(struct ia_css_circbuf_desc_s) == SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT);
-
-/*
- * @brief Data structure for the circular buffer element.
- */
-typedef struct ia_css_circbuf_elem_s ia_css_circbuf_elem_t;
-struct ia_css_circbuf_elem_s {
- u32 val; /* the value stored in the element */
-};
-
-#define SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT \
- (sizeof(uint32_t))
-
-static_assert(sizeof(struct ia_css_circbuf_elem_s) == SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT);
-
-#endif /*_IA_CSS_CIRCBUF_COMM_H*/
diff --git a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_desc.h b/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_desc.h
deleted file mode 100644
index 3306a7a0fa5eb..0000000000000
--- a/drivers/staging/media/atomisp/pci/base/circbuf/interface/ia_css_circbuf_desc.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Support for Intel Camera Imaging ISP subsystem.
- * Copyright (c) 2015, Intel Corporation.
- */
-
-#ifndef _IA_CSS_CIRCBUF_DESC_H_
-#define _IA_CSS_CIRCBUF_DESC_H_
-
-#include <type_support.h>
-#include <math_support.h>
-#include <platform_support.h>
-#include <sp.h>
-#include "ia_css_circbuf_comm.h"
-/****************************************************************
- *
- * Inline functions.
- *
- ****************************************************************/
-/*
- * @brief Test if the circular buffer is empty.
- *
- * @param cb_desc The pointer to the circular buffer descriptor.
- *
- * @return
- * - true when it is empty.
- * - false when it is not empty.
- */
-static inline bool ia_css_circbuf_desc_is_empty(
- ia_css_circbuf_desc_t *cb_desc)
-{
- OP___assert(cb_desc);
- return (cb_desc->end == cb_desc->start);
-}
-
-/*
- * @brief Test if the circular buffer descriptor is full.
- *
- * @param cb_desc The pointer to the circular buffer
- * descriptor.
- *
- * @return
- * - true when it is full.
- * - false when it is not full.
- */
-static inline bool ia_css_circbuf_desc_is_full(
- ia_css_circbuf_desc_t *cb_desc)
-{
- OP___assert(cb_desc);
- return ((cb_desc->end + 1) % cb_desc->size) == cb_desc->start;
-}
-
-/*
- * @brief Initialize the circular buffer descriptor
- *
- * @param cb_desc The pointer circular buffer descriptor
- * @param size The size of the circular buffer
- */
-static inline void ia_css_circbuf_desc_init(
- ia_css_circbuf_desc_t *cb_desc,
- int8_t size)
-{
- OP___assert(cb_desc);
- cb_desc->size = size;
-}
-
-/*
- * @brief Get a position in the circular buffer descriptor.
- *
- * @param cb The pointer to the circular buffer descriptor.
- * @param base The base position.
- * @param offset The offset.
- *
- * @return the position in the circular buffer descriptor.
- */
-static inline uint8_t ia_css_circbuf_desc_get_pos_at_offset(
- ia_css_circbuf_desc_t *cb_desc,
- u32 base,
- int offset)
-{
- OP___assert(cb_desc);
- OP___assert(cb_desc->size > 0);
-
- /* step 1: adjust the offset */
- while (offset < 0)
- offset += cb_desc->size;
-
- /* step 2: shift and round by the upper limit */
- return (base + offset) % cb_desc->size;
-}
-
-/*
- * @brief Get the offset between two positions in the circular buffer
- * descriptor.
- * Get the offset from the source position to the terminal position,
- * along the direction in which the new elements come in.
- *
- * @param cb_desc The pointer to the circular buffer descriptor.
- * @param src_pos The source position.
- * @param dest_pos The terminal position.
- *
- * @return the offset.
- */
-static inline int ia_css_circbuf_desc_get_offset(
- ia_css_circbuf_desc_t *cb_desc,
- u32 src_pos,
- uint32_t dest_pos)
-{
- int offset;
-
- OP___assert(cb_desc);
-
- offset = (int)(dest_pos - src_pos);
- offset += (offset < 0) ? cb_desc->size : 0;
-
- return offset;
-}
-
-/*
- * @brief Get the number of available elements.
- *
- * @param cb_desc The pointer to the circular buffer.
- *
- * @return The number of available elements.
- */
-static inline uint32_t ia_css_circbuf_desc_get_num_elems(
- ia_css_circbuf_desc_t *cb_desc)
-{
- int num;
-
- OP___assert(cb_desc);
-
- num = ia_css_circbuf_desc_get_offset(cb_desc,
- cb_desc->start,
- cb_desc->end);
-
- return (uint32_t)num;
-}
-
-/*
- * @brief Get the number of free elements.
- *
- * @param cb_desc The pointer to the circular buffer descriptor.
- *
- * @return: The number of free elements.
- */
-static inline uint32_t ia_css_circbuf_desc_get_free_elems(
- ia_css_circbuf_desc_t *cb_desc)
-{
- u32 num;
-
- OP___assert(cb_desc);
-
- num = ia_css_circbuf_desc_get_offset(cb_desc,
- cb_desc->start,
- cb_desc->end);
-
- return (cb_desc->size - num);
-}
-#endif /*_IA_CSS_CIRCBUF_DESC_H_ */
diff --git a/drivers/staging/media/atomisp/pci/base/circbuf/src/circbuf.c b/drivers/staging/media/atomisp/pci/base/circbuf/src/circbuf.c
deleted file mode 100644
index cb34d0b5abb5e..0000000000000
--- a/drivers/staging/media/atomisp/pci/base/circbuf/src/circbuf.c
+++ /dev/null
@@ -1,312 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Support for Intel Camera Imaging ISP subsystem.
- * Copyright (c) 2015, Intel Corporation.
- */
-
-#include "ia_css_circbuf.h"
-
-#include <assert_support.h>
-
-/**********************************************************************
- *
- * Forward declarations.
- *
- **********************************************************************/
-/*
- * @brief Read the oldest element from the circular buffer.
- * Read the oldest element WITHOUT checking whether the
- * circular buffer is empty or not. The oldest element is
- * also removed out from the circular buffer.
- *
- * @param cb The pointer to the circular buffer.
- *
- * @return the oldest element.
- */
-static inline ia_css_circbuf_elem_t
-ia_css_circbuf_read(ia_css_circbuf_t *cb);
-
-/*
- * @brief Shift a chunk of elements in the circular buffer.
- * A chunk of elements (i.e. the ones from the "start" position
- * to the "chunk_src" position) are shifted in the circular buffer,
- * along the direction of new elements coming.
- *
- * @param cb The pointer to the circular buffer.
- * @param chunk_src The position at which the first element in the chunk is.
- * @param chunk_dest The position to which the first element in the chunk would be shift.
- */
-static inline void ia_css_circbuf_shift_chunk(ia_css_circbuf_t *cb,
- u32 chunk_src,
- uint32_t chunk_dest);
-
-/*
- * @brief Get the "val" field in the element.
- *
- * @param elem The pointer to the element.
- *
- * @return the "val" field.
- */
-static inline uint32_t
-ia_css_circbuf_elem_get_val(ia_css_circbuf_elem_t *elem);
-
-/**********************************************************************
- *
- * Non-inline functions.
- *
- **********************************************************************/
-/*
- * @brief Create the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-void
-ia_css_circbuf_create(ia_css_circbuf_t *cb,
- ia_css_circbuf_elem_t *elems,
- ia_css_circbuf_desc_t *desc)
-{
- u32 i;
-
- OP___assert(desc);
-
- cb->desc = desc;
- /* Initialize to defaults */
- cb->desc->start = 0;
- cb->desc->end = 0;
- cb->desc->step = 0;
-
- for (i = 0; i < cb->desc->size; i++)
- ia_css_circbuf_elem_init(&elems[i]);
-
- cb->elems = elems;
-}
-
-/*
- * @brief Destroy the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-void ia_css_circbuf_destroy(ia_css_circbuf_t *cb)
-{
- cb->desc = NULL;
-
- cb->elems = NULL;
-}
-
-/*
- * @brief Pop a value out of the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-uint32_t ia_css_circbuf_pop(ia_css_circbuf_t *cb)
-{
- u32 ret;
- ia_css_circbuf_elem_t elem;
-
- assert(!ia_css_circbuf_is_empty(cb));
-
- /* read an element from the buffer */
- elem = ia_css_circbuf_read(cb);
- ret = ia_css_circbuf_elem_get_val(&elem);
- return ret;
-}
-
-/*
- * @brief Extract a value out of the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-uint32_t ia_css_circbuf_extract(ia_css_circbuf_t *cb, int offset)
-{
- int max_offset;
- u32 val;
- u32 pos;
- u32 src_pos;
- u32 dest_pos;
-
- /* get the maximum offset */
- max_offset = ia_css_circbuf_get_offset(cb, cb->desc->start, cb->desc->end);
- max_offset--;
-
- /*
- * Step 1: When the target element is at the "start" position.
- */
- if (offset == 0) {
- val = ia_css_circbuf_pop(cb);
- return val;
- }
-
- /*
- * Step 2: When the target element is out of the range.
- */
- if (offset > max_offset) {
- val = 0;
- return val;
- }
-
- /*
- * Step 3: When the target element is between the "start" and
- * "end" position.
- */
- /* get the position of the target element */
- pos = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->start, offset);
-
- /* get the value from the target element */
- val = ia_css_circbuf_elem_get_val(&cb->elems[pos]);
-
- /* shift the elements */
- src_pos = ia_css_circbuf_get_pos_at_offset(cb, pos, -1);
- dest_pos = pos;
- ia_css_circbuf_shift_chunk(cb, src_pos, dest_pos);
-
- return val;
-}
-
-/*
- * @brief Peek an element from the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-uint32_t ia_css_circbuf_peek(ia_css_circbuf_t *cb, int offset)
-{
- int pos;
-
- pos = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->end, offset);
-
- /* get the value at the position */
- return cb->elems[pos].val;
-}
-
-/*
- * @brief Get the value of an element from the circular buffer.
- * Refer to "ia_css_circbuf.h" for details.
- */
-uint32_t ia_css_circbuf_peek_from_start(ia_css_circbuf_t *cb, int offset)
-{
- int pos;
-
- pos = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->start, offset);
-
- /* get the value at the position */
- return cb->elems[pos].val;
-}
-
-/* @brief increase size of a circular buffer.
- * Use 'CAUTION' before using this function. This was added to
- * support / fix issue with increasing size for tagger only
- * Please refer to "ia_css_circbuf.h" for details.
- */
-bool ia_css_circbuf_increase_size(
- ia_css_circbuf_t *cb,
- unsigned int sz_delta,
- ia_css_circbuf_elem_t *elems)
-{
- u8 curr_size;
- u8 curr_end;
- unsigned int i;
-
- if (!cb || sz_delta == 0)
- return false;
-
- curr_size = cb->desc->size;
- curr_end = cb->desc->end;
- /* We assume cb was pre defined as global to allow
- * increase in size */
- /* FM: are we sure this cannot cause size to become too big? */
- if (((uint8_t)(cb->desc->size + (uint8_t)sz_delta) > cb->desc->size) &&
- ((uint8_t)sz_delta == sz_delta))
- cb->desc->size += (uint8_t)sz_delta;
- else
- return false; /* overflow in size */
-
- /* If elems are passed update them else we assume its been taken
- * care before calling this function */
- if (elems) {
- /* cb element array size will not be increased dynamically,
- * but pointers to new elements can be added at the end
- * of existing pre defined cb element array of
- * size >= new size if not already added */
- for (i = curr_size; i < cb->desc->size; i++)
- cb->elems[i] = elems[i - curr_size];
- }
- /* Fix Start / End */
- if (curr_end < cb->desc->start) {
- if (curr_end == 0) {
- /* Easily fix End */
- cb->desc->end = curr_size;
- } else {
- /* Move elements and fix Start*/
- ia_css_circbuf_shift_chunk(cb,
- curr_size - 1,
- curr_size + sz_delta - 1);
- }
- }
-
- return true;
-}
-
-/****************************************************************
- *
- * Inline functions.
- *
- ****************************************************************/
-/*
- * @brief Get the "val" field in the element.
- * Refer to "Forward declarations" for details.
- */
-static inline uint32_t
-ia_css_circbuf_elem_get_val(ia_css_circbuf_elem_t *elem)
-{
- return elem->val;
-}
-
-/*
- * @brief Read the oldest element from the circular buffer.
- * Refer to "Forward declarations" for details.
- */
-static inline ia_css_circbuf_elem_t
-ia_css_circbuf_read(ia_css_circbuf_t *cb)
-{
- ia_css_circbuf_elem_t elem;
-
- /* get the element from the target position */
- elem = cb->elems[cb->desc->start];
-
- /* clear the target position */
- ia_css_circbuf_elem_init(&cb->elems[cb->desc->start]);
-
- /* adjust the "start" position */
- cb->desc->start = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->start, 1);
- return elem;
-}
-
-/*
- * @brief Shift a chunk of elements in the circular buffer.
- * Refer to "Forward declarations" for details.
- */
-static inline void
-ia_css_circbuf_shift_chunk(ia_css_circbuf_t *cb,
- u32 chunk_src, uint32_t chunk_dest)
-{
- int chunk_offset;
- int chunk_sz;
- int i;
-
- /* get the chunk offset and size */
- chunk_offset = ia_css_circbuf_get_offset(cb,
- chunk_src, chunk_dest);
- chunk_sz = ia_css_circbuf_get_offset(cb, cb->desc->start, chunk_src) + 1;
-
- /* shift each element to its terminal position */
- for (i = 0; i < chunk_sz; i++) {
- /* copy the element from the source to the destination */
- ia_css_circbuf_elem_cpy(&cb->elems[chunk_src],
- &cb->elems[chunk_dest]);
-
- /* clear the source position */
- ia_css_circbuf_elem_init(&cb->elems[chunk_src]);
-
- /* adjust the source/terminal positions */
- chunk_src = ia_css_circbuf_get_pos_at_offset(cb, chunk_src, -1);
- chunk_dest = ia_css_circbuf_get_pos_at_offset(cb, chunk_dest, -1);
- }
-
- /* adjust the index "start" */
- cb->desc->start = ia_css_circbuf_get_pos_at_offset(cb, cb->desc->start,
- chunk_offset);
-}
--
2.43.0
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 0/4] media: atomisp: remove the circbuf library
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
` (3 preceding siblings ...)
2026-10-12 23:07 ` [PATCH 4/4] media: atomisp: remove unused circbuf library Rareș-Mihai Vladu
@ 2026-10-13 7:38 ` Andy Shevchenko
4 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2026-10-13 7:38 UTC (permalink / raw)
To: Rareș-Mihai Vladu
Cc: Hans de Goede, Mauro Carvalho Chehab, Sakari Ailus,
Andy Shevchenko, Greg Kroah-Hartman, linux-media, linux-staging,
linux-kernel
On Mon, Oct 12, 2026 at 11:07:49PM +0000, Rareș-Mihai Vladu wrote:
> Thanks to Andy for suggesting, in review of my earlier typedef
> patch [1], that I look at converting the custom circbuf code to
> circ_buf or kfifo.
>
> While looking into it, it turned out that the circbuf API is only
> used by the local queue path, and ia_css_queue_local_init() has no
> callers, so that path is unused. The remote queues only need the
> descriptor and element layout shared with the SP firmware and a few
> small helpers.
>
> So this series removes the unused local path, moves those few pieces
> into ia_css_queue_comm.h and drops base/circbuf/. Please let me know
> if you would prefer a different approach and I will rework it.
>
> Patch 3 only moves code, apart from dropping OP___assert(), so I did
> not touch the existing style issues there.
Cool! That's what we prioritize for this driver (from people who don't possess
the HW), thanks a lot for doing this! I will look into the code later on.
> Compile-tested only, as I don't have the hardware.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly
2026-10-12 23:07 ` [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly Rareș-Mihai Vladu
@ 2026-10-13 16:06 ` Andy Shevchenko
0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2026-10-13 16:06 UTC (permalink / raw)
To: Rareș-Mihai Vladu
Cc: Hans de Goede, Mauro Carvalho Chehab, Sakari Ailus,
Andy Shevchenko, Greg Kroah-Hartman, linux-media, linux-staging,
linux-kernel
On Mon, Oct 12, 2026 at 11:07:50PM +0000, Rareș-Mihai Vladu wrote:
> sh_css_mipi.c uses assert() but only gets its definition indirectly
> through the circbuf headers. Include assert_support.h directly so the
> file does not depend on that include chain.
...
> #include "sh_css_defs.h"
> #include "sh_css_sp.h" /* sh_css_update_host2sp_mipi_frame sh_css_update_host2sp_num_mipi_frames ... */
> #include "sw_event_global.h" /* IA_CSS_PSYS_SW_EVENT_MIPI_BUFFERS_READY */
> +#include "assert_support.h"
Keep it ordered by name.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/4] media: atomisp: queue: remove unused local queue support
2026-10-12 23:07 ` [PATCH 2/4] media: atomisp: queue: remove unused local queue support Rareș-Mihai Vladu
@ 2026-10-13 16:14 ` Andy Shevchenko
0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2026-10-13 16:14 UTC (permalink / raw)
To: Rareș-Mihai Vladu
Cc: Hans de Goede, Mauro Carvalho Chehab, Sakari Ailus,
Andy Shevchenko, Greg Kroah-Hartman, linux-media, linux-staging,
linux-kernel
On Mon, Oct 12, 2026 at 11:07:51PM +0000, Rareș-Mihai Vladu wrote:
> ia_css_queue_local_init() has no callers, so IA_CSS_QUEUE_TYPE_LOCAL
> is never set and every local queue branch in queue.c is unreachable.
> ia_css_queue_uninit() only tore down local queues and has no callers
> either.
>
> Remove both functions, the local branches, struct ia_css_queue_local
> and the local member of the struct ia_css_queue union. Only remote
> queues, shared with the SP firmware, are used by the driver.
...
> /* Queue type specifier */
> /* Avoiding enums to save space */
> -#define IA_CSS_QUEUE_TYPE_LOCAL 0
> #define IA_CSS_QUEUE_TYPE_REMOTE 1
This is a slippery slope. 0 can be default by implicit zeroed data type, so you
need to really carefully check all call sites that use qhandle and/or allocate
it. Since there are two possible values only, the IA_CSS_QUEUE_TYPE_REMOTE
must gone together (in case this patch is proved to be correct). TL;DR: there
is more homework to do and clean up more at the end.
...
> struct ia_css_queue {
> - u8 type; /* Specify remote/local type of access */
> + u8 type; /* Specify remote type of access */
This is FW interface, I don't think we may drop the comment above.
> u8 location; /* Cell location for queue */
> u8 proc_id; /* Processor id for queue access */
> union {
> - ia_css_circbuf_t cb_local;
Not sure about this, but since it's union the only thing to check is
the sizeof(struct ia_css_queue) to be the same after removal.
> struct {
> u32 cb_desc_addr; /*Circbuf desc address for remote queues*/
> u32 cb_elems_addr; /*Circbuf elements addr for remote queue*/
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h
2026-10-12 23:07 ` [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h Rareș-Mihai Vladu
@ 2026-10-13 16:20 ` Andy Shevchenko
0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2026-10-13 16:20 UTC (permalink / raw)
To: Rareș-Mihai Vladu
Cc: Hans de Goede, Mauro Carvalho Chehab, Sakari Ailus,
Andy Shevchenko, Greg Kroah-Hartman, linux-media, linux-staging,
linux-kernel
On Mon, Oct 12, 2026 at 11:07:52PM +0000, Rareș-Mihai Vladu wrote:
> The remote queue code only needs the circbuf descriptor and element
> layouts plus five small descriptor helpers from the circbuf library.
> Move them into ia_css_queue_comm.h and include that header instead of
> the circbuf ones.
>
> The descriptor and element layouts are shared with the SP firmware and
> are moved unchanged, including their static_asserts.
>
> While at it, drop the OP___assert() NULL checks from the moved helpers:
> every caller passes the address of a local variable, so the pointer can
> never be NULL.
...
> +/*
> + * @brief Data structure for the circular descriptor.
> + */
> +typedef struct ia_css_circbuf_desc_s ia_css_circbuf_desc_t;
> +struct ia_css_circbuf_desc_s {
> + u8 size; /* the maximum number of elements*/
> + u8 step; /* number of bytes per element */
> + u8 start; /* index of the oldest element */
> + u8 end; /* index at which to write the new element */
> +};
> +
> +#define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT \
> + (4 * sizeof(uint8_t))
Why not sizeof(u8) ?
#define SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT (4 * sizeof(u8))
...
In the same way for the rest of the similar pieces of code below.
...
> +static inline bool ia_css_circbuf_desc_is_empty(
> + ia_css_circbuf_desc_t *cb_desc)
Don't repeat wrong style, correct it here
static inline bool ia_css_circbuf_desc_is_empty(ia_css_circbuf_desc_t *cb_desc)
...
In the same way for the rest of the similar pieces of code below.
...
> +static inline uint32_t ia_css_circbuf_desc_get_num_elems(
While at it, use uXX types directly. Would it compile?
> + ia_css_circbuf_desc_t *cb_desc)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 4/4] media: atomisp: remove unused circbuf library
2026-10-12 23:07 ` [PATCH 4/4] media: atomisp: remove unused circbuf library Rareș-Mihai Vladu
@ 2026-10-13 16:21 ` Andy Shevchenko
0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2026-10-13 16:21 UTC (permalink / raw)
To: Rareș-Mihai Vladu
Cc: Hans de Goede, Mauro Carvalho Chehab, Sakari Ailus,
Andy Shevchenko, Greg Kroah-Hartman, linux-media, linux-staging,
linux-kernel
On Mon, Oct 12, 2026 at 11:07:53PM +0000, Rareș-Mihai Vladu wrote:
> After the previous changes nothing in the driver uses the custom
> circular buffer implementation in base/circbuf/ anymore. Remove it
> together with its Makefile entries.
The best patch of the series!
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
(assuming it compiles and likely works)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-10-13 16:21 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-12 23:07 [PATCH 0/4] media: atomisp: remove the circbuf library Rareș-Mihai Vladu
2026-10-12 23:07 ` [PATCH 1/4] media: atomisp: sh_css_mipi: include assert_support.h directly Rareș-Mihai Vladu
2026-10-13 16:06 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 2/4] media: atomisp: queue: remove unused local queue support Rareș-Mihai Vladu
2026-10-13 16:14 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 3/4] media: atomisp: queue: move circbuf types and helpers to queue_comm.h Rareș-Mihai Vladu
2026-10-13 16:20 ` Andy Shevchenko
2026-10-12 23:07 ` [PATCH 4/4] media: atomisp: remove unused circbuf library Rareș-Mihai Vladu
2026-10-13 16:21 ` Andy Shevchenko
2026-10-13 7:38 ` [PATCH 0/4] media: atomisp: remove the " Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®