linux-staging.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] media: atomisp: A couple of cleanups
@ 2024-04-24 18:43 Andy Shevchenko
  2024-04-24 18:43 ` [PATCH v1 1/2] media: atomisp: Clean up unused macros from math_support.h Andy Shevchenko
  2024-04-24 18:43 ` [PATCH v1 2/2] media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert() Andy Shevchenko
  0 siblings, 2 replies; 3+ messages in thread
From: Andy Shevchenko @ 2024-04-24 18:43 UTC (permalink / raw)
  To: Andy Shevchenko, Kate Hsuan, Hans de Goede, linux-media,
	linux-staging, linux-kernel
  Cc: Mauro Carvalho Chehab, Sakari Ailus, Greg Kroah-Hartman

1/ Drop a lot of unused math related macros.
2/ Replace homegrown static_assert()

Andy Shevchenko (2):
  media: atomisp: Clean up unused macros from math_support.h
  media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert()

 .../circbuf/interface/ia_css_circbuf_comm.h   |   6 +
 .../pci/camera/util/interface/ia_css_util.h   |  11 --
 .../media/atomisp/pci/camera/util/src/util.c  |  25 ++--
 .../pci/hive_isp_css_include/assert_support.h |  23 ----
 .../pci/hive_isp_css_include/math_support.h   | 110 +-----------------
 .../pci/hive_isp_css_include/type_support.h   |   5 +-
 drivers/staging/media/atomisp/pci/ia_css_3a.h |   5 +
 .../staging/media/atomisp/pci/ia_css_dvs.h    |   4 +
 .../media/atomisp/pci/ia_css_metadata.h       |   4 +
 .../staging/media/atomisp/pci/ia_css_types.h  |   2 +
 .../kernels/xnr/xnr_3.0/ia_css_xnr3.host.c    |   6 +-
 .../atomisp/pci/runtime/binary/src/binary.c   |   2 -
 .../spctrl/interface/ia_css_spctrl_comm.h     |   4 +
 drivers/staging/media/atomisp/pci/sh_css.c    |  38 ------
 .../staging/media/atomisp/pci/sh_css_frac.h   |   4 +-
 .../media/atomisp/pci/sh_css_internal.h       |  15 ++-
 16 files changed, 60 insertions(+), 204 deletions(-)

-- 
2.43.0.rc1.1336.g36b5255a03ac


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v1 1/2] media: atomisp: Clean up unused macros from math_support.h
  2024-04-24 18:43 [PATCH v1 0/2] media: atomisp: A couple of cleanups Andy Shevchenko
@ 2024-04-24 18:43 ` Andy Shevchenko
  2024-04-24 18:43 ` [PATCH v1 2/2] media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert() Andy Shevchenko
  1 sibling, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2024-04-24 18:43 UTC (permalink / raw)
  To: Andy Shevchenko, Kate Hsuan, Hans de Goede, linux-media,
	linux-staging, linux-kernel
  Cc: Mauro Carvalho Chehab, Sakari Ailus, Greg Kroah-Hartman

Clean up unused macros from math_support.h and replace rarely
used by generic ones from Linux kernel headers.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 .../pci/camera/util/interface/ia_css_util.h   |  11 --
 .../media/atomisp/pci/camera/util/src/util.c  |  25 ++--
 .../pci/hive_isp_css_include/math_support.h   | 110 +-----------------
 drivers/staging/media/atomisp/pci/ia_css_3a.h |   1 +
 .../kernels/xnr/xnr_3.0/ia_css_xnr3.host.c    |   6 +-
 .../atomisp/pci/runtime/binary/src/binary.c   |   2 -
 .../staging/media/atomisp/pci/sh_css_frac.h   |   4 +-
 7 files changed, 20 insertions(+), 139 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/camera/util/interface/ia_css_util.h b/drivers/staging/media/atomisp/pci/camera/util/interface/ia_css_util.h
index 59df44d696a0..d4de1e9293a1 100644
--- a/drivers/staging/media/atomisp/pci/camera/util/interface/ia_css_util.h
+++ b/drivers/staging/media/atomisp/pci/camera/util/interface/ia_css_util.h
@@ -100,17 +100,6 @@ bool ia_css_util_res_leq(
 bool ia_css_util_resolution_is_zero(
     const struct ia_css_resolution resolution);
 
-/* ISP2401 */
-/**
- * @brief Check if resolution is even
- *
- * @param[in] resolution The resolution to check
- *
- * @returns true if resolution is even
- */
-bool ia_css_util_resolution_is_even(
-    const struct ia_css_resolution resolution);
-
 /* @brief check width and height
  *
  * @param[in] stream_format
diff --git a/drivers/staging/media/atomisp/pci/camera/util/src/util.c b/drivers/staging/media/atomisp/pci/camera/util/src/util.c
index 40a71e37cc4e..9d7025a00beb 100644
--- a/drivers/staging/media/atomisp/pci/camera/util/src/util.c
+++ b/drivers/staging/media/atomisp/pci/camera/util/src/util.c
@@ -119,17 +119,6 @@ int ia_css_util_check_vf_out_info(
 	return 0;
 }
 
-int ia_css_util_check_res(unsigned int width, unsigned int height)
-{
-	/* height can be odd number for jpeg/embedded data from ISYS2401 */
-	if (((width  == 0)   ||
-	     (height == 0)   ||
-	     IS_ODD(width))) {
-		return -EINVAL;
-	}
-	return 0;
-}
-
 /* ISP2401 */
 bool ia_css_util_res_leq(struct ia_css_resolution a, struct ia_css_resolution b)
 {
@@ -142,10 +131,18 @@ bool ia_css_util_resolution_is_zero(const struct ia_css_resolution resolution)
 	return (resolution.width == 0) || (resolution.height == 0);
 }
 
-/* ISP2401 */
-bool ia_css_util_resolution_is_even(const struct ia_css_resolution resolution)
+int ia_css_util_check_res(unsigned int width, unsigned int height)
 {
-	return IS_EVEN(resolution.height) && IS_EVEN(resolution.width);
+	const struct ia_css_resolution resolution = { .width = width, .height = height };
+
+	if (ia_css_util_resolution_is_zero(resolution))
+		return -EINVAL;
+
+	/* height can be odd number for jpeg/embedded data from ISYS2401 */
+	if (width & 1)
+		return -EINVAL;
+
+	return 0;
 }
 
 bool ia_css_util_is_input_format_raw(enum atomisp_input_format format)
diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_include/math_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/math_support.h
index a444ec14ff9d..7349943bba2b 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/math_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/math_support.h
@@ -16,133 +16,27 @@
 #ifndef __MATH_SUPPORT_H
 #define __MATH_SUPPORT_H
 
-#include <linux/kernel.h> /* Override the definition of max/min from linux kernel*/
-
-#define IS_ODD(a)            ((a) & 0x1)
-#define IS_EVEN(a)           (!IS_ODD(a))
+/* Override the definition of max/min from Linux kernel */
+#include <linux/minmax.h>
 
 /* force a value to a lower even value */
 #define EVEN_FLOOR(x)        ((x) & ~1)
 
-/* ISP2401 */
-/* If the number is odd, find the next even number */
-#define EVEN_CEIL(x)         ((IS_ODD(x)) ? ((x) + 1) : (x))
-
-/* A => B */
-#define IMPLIES(a, b)        (!(a) || (b))
-
 /* for preprocessor and array sizing use MIN and MAX
    otherwise use min and max */
 #define MAX(a, b)            (((a) > (b)) ? (a) : (b))
 #define MIN(a, b)            (((a) < (b)) ? (a) : (b))
 
-#define ROUND_DIV(a, b)      (((b) != 0) ? ((a) + ((b) >> 1)) / (b) : 0)
 #define CEIL_DIV(a, b)       (((b) != 0) ? ((a) + (b) - 1) / (b) : 0)
 #define CEIL_MUL(a, b)       (CEIL_DIV(a, b) * (b))
 #define CEIL_MUL2(a, b)      (((a) + (b) - 1) & ~((b) - 1))
 #define CEIL_SHIFT(a, b)     (((a) + (1 << (b)) - 1) >> (b))
 #define CEIL_SHIFT_MUL(a, b) (CEIL_SHIFT(a, b) << (b))
-#define ROUND_HALF_DOWN_DIV(a, b)	(((b) != 0) ? ((a) + (b / 2) - 1) / (b) : 0)
-#define ROUND_HALF_DOWN_MUL(a, b)	(ROUND_HALF_DOWN_DIV(a, b) * (b))
-
-/*To Find next power of 2 number from x */
-#define bit2(x)            ((x)      | ((x) >> 1))
-#define bit4(x)            (bit2(x)  | (bit2(x) >> 2))
-#define bit8(x)            (bit4(x)  | (bit4(x) >> 4))
-#define bit16(x)           (bit8(x)  | (bit8(x) >> 8))
-#define bit32(x)           (bit16(x) | (bit16(x) >> 16))
-#define NEXT_POWER_OF_2(x) (bit32(x - 1) + 1)
-
-/* min and max should not be macros as they will evaluate their arguments twice.
-   if you really need a macro (e.g. for CPP or for initializing an array)
-   use MIN() and MAX(), otherwise use min() and max().
-
-*/
 
 #if !defined(PIPE_GENERATION)
 
-/*
-This macro versions are added back as we are mixing types in usage of inline.
-This causes corner cases of calculations to be incorrect due to conversions
-between signed and unsigned variables or overflows.
-Before the addition of the inline functions, max, min and ceil_div were macros
-and therefore adding them back.
-
-Leaving out the other math utility functions as they are newly added
-*/
-
 #define ceil_div(a, b)		(CEIL_DIV(a, b))
 
-static inline unsigned int ceil_mul(unsigned int a, unsigned int b)
-{
-	return CEIL_MUL(a, b);
-}
-
-static inline unsigned int ceil_mul2(unsigned int a, unsigned int b)
-{
-	return CEIL_MUL2(a, b);
-}
-
-static inline unsigned int ceil_shift(unsigned int a, unsigned int b)
-{
-	return CEIL_SHIFT(a, b);
-}
-
-static inline unsigned int ceil_shift_mul(unsigned int a, unsigned int b)
-{
-	return CEIL_SHIFT_MUL(a, b);
-}
-
-/* ISP2401 */
-static inline unsigned int round_half_down_div(unsigned int a, unsigned int b)
-{
-	return ROUND_HALF_DOWN_DIV(a, b);
-}
-
-/* ISP2401 */
-static inline unsigned int round_half_down_mul(unsigned int a, unsigned int b)
-{
-	return ROUND_HALF_DOWN_MUL(a, b);
-}
-
-/* @brief Next Power of Two
- *
- *  @param[in] unsigned number
- *
- *  @return next power of two
- *
- * This function rounds input to the nearest power of 2 (2^x)
- * towards infinity
- *
- * Input Range: 0 .. 2^(8*sizeof(int)-1)
- *
- * IF input is a power of 2
- *     out = in
- * OTHERWISE
- *     out = 2^(ceil(log2(in))
- *
- */
-
-static inline unsigned int ceil_pow2(unsigned int a)
-{
-	if (a == 0) {
-		return 1;
-	}
-	/* IF input is already a power of two*/
-	else if ((!((a) & ((a) - 1)))) {
-		return a;
-	} else {
-		unsigned int v = a;
-
-		v |= v >> 1;
-		v |= v >> 2;
-		v |= v >> 4;
-		v |= v >> 8;
-		v |= v >> 16;
-		return (v + 1);
-	}
-}
-
 #endif /* !defined(PIPE_GENERATION) */
 
 /*
diff --git a/drivers/staging/media/atomisp/pci/ia_css_3a.h b/drivers/staging/media/atomisp/pci/ia_css_3a.h
index 70cfc915cc56..506910dd5c18 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_3a.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_3a.h
@@ -20,6 +20,7 @@
  * This file contains types used for 3A statistics
  */
 
+#include <math_support.h>
 #include <type_support.h>
 #include "ia_css_types.h"
 #include "ia_css_err.h"
diff --git a/drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c b/drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c
index 9c9d9b9a453e..70132d955e9b 100644
--- a/drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c
+++ b/drivers/staging/media/atomisp/pci/isp/kernels/xnr/xnr_3.0/ia_css_xnr3.host.c
@@ -13,6 +13,8 @@
  * more details.
  */
 
+#include <linux/log2.h>
+
 #include "type_support.h"
 #include "math_support.h"
 #include "sh_css_defs.h"
@@ -137,9 +139,7 @@ ia_css_xnr3_encode(
     unsigned int size)
 {
 	int kernel_size = XNR_FILTER_SIZE;
-	/* The adjust factor is the next power of 2
-	   w.r.t. the kernel size*/
-	int adjust_factor = ceil_pow2(kernel_size);
+	int adjust_factor = roundup_pow_of_two(kernel_size);
 	s32 max_diff = (1 << (ISP_VEC_ELEMBITS - 1)) - 1;
 	s32 min_diff = -(1 << (ISP_VEC_ELEMBITS - 1));
 
diff --git a/drivers/staging/media/atomisp/pci/runtime/binary/src/binary.c b/drivers/staging/media/atomisp/pci/runtime/binary/src/binary.c
index 130662f8e768..b0f904a5e442 100644
--- a/drivers/staging/media/atomisp/pci/runtime/binary/src/binary.c
+++ b/drivers/staging/media/atomisp/pci/runtime/binary/src/binary.c
@@ -43,8 +43,6 @@
 
 #include "assert_support.h"
 
-#define IMPLIES(a, b)           (!(a) || (b))   /* A => B */
-
 static struct ia_css_binary_xinfo *all_binaries; /* ISP binaries only (no SP) */
 static struct ia_css_binary_xinfo
 	*binary_infos[IA_CSS_BINARY_NUM_MODES] = { NULL, };
diff --git a/drivers/staging/media/atomisp/pci/sh_css_frac.h b/drivers/staging/media/atomisp/pci/sh_css_frac.h
index 8f08df5c88cc..b90b5b330dfa 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_frac.h
+++ b/drivers/staging/media/atomisp/pci/sh_css_frac.h
@@ -16,7 +16,9 @@
 #ifndef __SH_CSS_FRAC_H
 #define __SH_CSS_FRAC_H
 
-#include <math_support.h>
+#include <linux/minmax.h>
+
+#include "mamoiada_params.h"
 
 #define sISP_REG_BIT		      ISP_VEC_ELEMBITS
 #define uISP_REG_BIT		      ((unsigned int)(sISP_REG_BIT - 1))
-- 
2.43.0.rc1.1336.g36b5255a03ac


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v1 2/2] media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert()
  2024-04-24 18:43 [PATCH v1 0/2] media: atomisp: A couple of cleanups Andy Shevchenko
  2024-04-24 18:43 ` [PATCH v1 1/2] media: atomisp: Clean up unused macros from math_support.h Andy Shevchenko
@ 2024-04-24 18:43 ` Andy Shevchenko
  1 sibling, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2024-04-24 18:43 UTC (permalink / raw)
  To: Andy Shevchenko, Kate Hsuan, Hans de Goede, linux-media,
	linux-staging, linux-kernel
  Cc: Mauro Carvalho Chehab, Sakari Ailus, Greg Kroah-Hartman

Replace COMPILATION_ERROR_IF() by static_assert().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 .../circbuf/interface/ia_css_circbuf_comm.h   |  6 +++
 .../pci/hive_isp_css_include/assert_support.h | 23 -----------
 .../pci/hive_isp_css_include/type_support.h   |  5 ++-
 drivers/staging/media/atomisp/pci/ia_css_3a.h |  4 ++
 .../staging/media/atomisp/pci/ia_css_dvs.h    |  4 ++
 .../media/atomisp/pci/ia_css_metadata.h       |  4 ++
 .../staging/media/atomisp/pci/ia_css_types.h  |  2 +
 .../spctrl/interface/ia_css_spctrl_comm.h     |  4 ++
 drivers/staging/media/atomisp/pci/sh_css.c    | 38 -------------------
 .../media/atomisp/pci/sh_css_internal.h       | 15 +++++++-
 10 files changed, 40 insertions(+), 65 deletions(-)

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
index 6fa6da859158..b0f20563c3a3 100644
--- 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
@@ -16,6 +16,8 @@
 #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
@@ -45,6 +47,8 @@ struct ia_css_circbuf_desc_s {
 #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.
  */
@@ -56,4 +60,6 @@ struct ia_css_circbuf_elem_s {
 #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/hive_isp_css_include/assert_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
index 7382c0bbf7cb..d294ac402de8 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/assert_support.h
@@ -16,29 +16,6 @@
 #ifndef __ASSERT_SUPPORT_H_INCLUDED__
 #define __ASSERT_SUPPORT_H_INCLUDED__
 
-/**
- * The following macro can help to test the size of a struct at compile
- * time rather than at run-time. It does not work for all compilers; see
- * below.
- *
- * Depending on the value of 'condition', the following macro is expanded to:
- * - condition==true:
- *     an expression containing an array declaration with negative size,
- *     usually resulting in a compilation error
- * - condition==false:
- *     (void) 1; // C statement with no effect
- *
- * example:
- *  COMPILATION_ERROR_IF( sizeof(struct host_sp_queues) != SIZE_OF_HOST_SP_QUEUES_STRUCT);
- *
- * verify that the macro indeed triggers a compilation error with your compiler:
- *  COMPILATION_ERROR_IF( sizeof(struct host_sp_queues) != (sizeof(struct host_sp_queues)+1) );
- *
- * Not all compilers will trigger an error with this macro; use a search engine to search for
- * BUILD_BUG_ON to find other methods.
- */
-#define COMPILATION_ERROR_IF(condition) ((void)sizeof(char[1 - 2 * !!(condition)]))
-
 /* Compile time assertion */
 #ifndef CT_ASSERT
 #define CT_ASSERT(cnd) ((void)sizeof(char[(cnd) ? 1 :  -1]))
diff --git a/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h b/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
index b996ee54d4a5..9a640f18eed9 100644
--- a/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
+++ b/drivers/staging/media/atomisp/pci/hive_isp_css_include/type_support.h
@@ -33,9 +33,10 @@
 
 #define CHAR_BIT (8)
 
-#include <linux/types.h>
-#include <linux/limits.h>
 #include <linux/errno.h>
+#include <linux/limits.h>
+#include <linux/types.h>
+
 #define HOST_ADDRESS(x) (unsigned long)(x)
 
 #endif /* __TYPE_SUPPORT_H_INCLUDED__ */
diff --git a/drivers/staging/media/atomisp/pci/ia_css_3a.h b/drivers/staging/media/atomisp/pci/ia_css_3a.h
index 506910dd5c18..fc2075c7bd01 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_3a.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_3a.h
@@ -20,6 +20,8 @@
  * This file contains types used for 3A statistics
  */
 
+#include <linux/build_bug.h>
+
 #include <math_support.h>
 #include <type_support.h>
 #include "ia_css_types.h"
@@ -80,6 +82,8 @@ struct ia_css_isp_3a_statistics {
 	 SIZE_OF_IA_CSS_PTR +						\
 	 4 * sizeof(uint32_t))
 
+static_assert(sizeof(struct ia_css_isp_3a_statistics) == SIZE_OF_IA_CSS_ISP_3A_STATISTICS_STRUCT);
+
 /* Map with host-side pointers to ISP-format statistics.
  * These pointers can either be copies of ISP data or memory mapped
  * ISP pointers.
diff --git a/drivers/staging/media/atomisp/pci/ia_css_dvs.h b/drivers/staging/media/atomisp/pci/ia_css_dvs.h
index 3367dfd64050..41a81561bbef 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_dvs.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_dvs.h
@@ -20,6 +20,8 @@
  * This file contains types for DVS statistics
  */
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 #include "ia_css_types.h"
 #include "ia_css_err.h"
@@ -55,6 +57,8 @@ struct ia_css_isp_skc_dvs_statistics;
 	((3 * SIZE_OF_IA_CSS_PTR) +					\
 	 (4 * sizeof(uint32_t)))
 
+static_assert(sizeof(struct ia_css_isp_dvs_statistics) == SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT);
+
 /* Map with host-side pointers to ISP-format statistics.
  * These pointers can either be copies of ISP data or memory mapped
  * ISP pointers.
diff --git a/drivers/staging/media/atomisp/pci/ia_css_metadata.h b/drivers/staging/media/atomisp/pci/ia_css_metadata.h
index 9eb1b76a3b2a..a3e759a3eee7 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_metadata.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_metadata.h
@@ -20,6 +20,8 @@
  * This file contains structure for processing sensor metadata.
  */
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 #include "ia_css_types.h"
 #include "ia_css_stream_format.h"
@@ -50,6 +52,8 @@ struct ia_css_metadata {
 
 #define SIZE_OF_IA_CSS_METADATA_STRUCT sizeof(struct ia_css_metadata)
 
+static_assert(sizeof(struct ia_css_metadata) == SIZE_OF_IA_CSS_METADATA_STRUCT);
+
 /* @brief Allocate a metadata buffer.
  * @param[in]   metadata_info Metadata info struct, contains details on metadata buffers.
  * @return      Pointer of metadata buffer or NULL (if error)
diff --git a/drivers/staging/media/atomisp/pci/ia_css_types.h b/drivers/staging/media/atomisp/pci/ia_css_types.h
index 6e34d401f9df..f5df564c86e8 100644
--- a/drivers/staging/media/atomisp/pci/ia_css_types.h
+++ b/drivers/staging/media/atomisp/pci/ia_css_types.h
@@ -84,6 +84,8 @@ struct ia_css_state_memory_offsets;
 /* Virtual address within the CSS address space. */
 typedef u32 ia_css_ptr;
 
+#define SIZE_OF_IA_CSS_PTR		sizeof(uint32_t)
+
 /* Generic resolution structure.
  */
 struct ia_css_resolution {
diff --git a/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h b/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
index 78e0f3096f60..de68616482f0 100644
--- a/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
+++ b/drivers/staging/media/atomisp/pci/runtime/spctrl/interface/ia_css_spctrl_comm.h
@@ -16,6 +16,8 @@
 #ifndef __IA_CSS_SPCTRL_COMM_H__
 #define __IA_CSS_SPCTRL_COMM_H__
 
+#include <linux/build_bug.h>
+
 #include <type_support.h>
 
 /* state of SP */
@@ -43,4 +45,6 @@ struct ia_css_sp_init_dmem_cfg {
 	(4 * sizeof(uint32_t)) +		\
 	(1 * sizeof(sp_ID_t))
 
+static_assert(sizeof(struct ia_css_sp_init_dmem_cfg) == SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT);
+
 #endif /* __IA_CSS_SPCTRL_COMM_H__ */
diff --git a/drivers/staging/media/atomisp/pci/sh_css.c b/drivers/staging/media/atomisp/pci/sh_css.c
index 42a69b26db01..e2497fc4dfc9 100644
--- a/drivers/staging/media/atomisp/pci/sh_css.c
+++ b/drivers/staging/media/atomisp/pci/sh_css.c
@@ -1345,47 +1345,9 @@ ia_css_init(struct device *dev, const struct ia_css_env *env,
 {
 	int err;
 	ia_css_spctrl_cfg spctrl_cfg;
-
 	void (*flush_func)(struct ia_css_acc_fw *fw);
 	hrt_data select, enable;
 
-	/*
-	 * The C99 standard does not specify the exact object representation of structs;
-	 * the representation is compiler dependent.
-	 *
-	 * The structs that are communicated between host and SP/ISP should have the
-	 * exact same object representation. The compiler that is used to compile the
-	 * firmware is hivecc.
-	 *
-	 * To check if a different compiler, used to compile a host application, uses
-	 * another object representation, macros are defined specifying the size of
-	 * the structs as expected by the firmware.
-	 *
-	 * A host application shall verify that a sizeof( ) of the struct is equal to
-	 * the SIZE_OF_XXX macro of the corresponding struct. If they are not
-	 * equal, functionality will break.
-	 */
-
-	/* Check struct sh_css_ddr_address_map */
-	COMPILATION_ERROR_IF(sizeof(struct sh_css_ddr_address_map)		!= SIZE_OF_SH_CSS_DDR_ADDRESS_MAP_STRUCT);
-	/* Check struct host_sp_queues */
-	COMPILATION_ERROR_IF(sizeof(struct host_sp_queues)			!= SIZE_OF_HOST_SP_QUEUES_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_circbuf_desc_s)		!= SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_circbuf_elem_s)		!= SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT);
-
-	/* Check struct host_sp_communication */
-	COMPILATION_ERROR_IF(sizeof(struct host_sp_communication)		!= SIZE_OF_HOST_SP_COMMUNICATION_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct sh_css_event_irq_mask)		!= SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT);
-
-	/* Check struct sh_css_hmm_buffer */
-	COMPILATION_ERROR_IF(sizeof(struct sh_css_hmm_buffer)			!= SIZE_OF_SH_CSS_HMM_BUFFER_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_isp_3a_statistics)		!= SIZE_OF_IA_CSS_ISP_3A_STATISTICS_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_isp_dvs_statistics)		!= SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT);
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_metadata)			!= SIZE_OF_IA_CSS_METADATA_STRUCT);
-
-	/* Check struct ia_css_init_dmem_cfg */
-	COMPILATION_ERROR_IF(sizeof(struct ia_css_sp_init_dmem_cfg)		!= SIZE_OF_IA_CSS_SP_INIT_DMEM_CFG_STRUCT);
-
 	if (!env)
 		return -EINVAL;
 
diff --git a/drivers/staging/media/atomisp/pci/sh_css_internal.h b/drivers/staging/media/atomisp/pci/sh_css_internal.h
index bef2b8c5132b..1501046cebb9 100644
--- a/drivers/staging/media/atomisp/pci/sh_css_internal.h
+++ b/drivers/staging/media/atomisp/pci/sh_css_internal.h
@@ -16,11 +16,13 @@
 #ifndef _SH_CSS_INTERNAL_H_
 #define _SH_CSS_INTERNAL_H_
 
+#include <linux/build_bug.h>
+#include <linux/stdarg.h>
+
 #include <system_global.h>
 #include <math_support.h>
 #include <type_support.h>
 #include <platform_support.h>
-#include <linux/stdarg.h>
 
 #include "input_formatter.h"
 #include "input_system.h"
@@ -104,7 +106,6 @@
  */
 #define CALC_ALIGNMENT_MEMBER(x, y)	(CEIL_MUL(x, y) - x)
 #define SIZE_OF_HRT_VADDRESS		sizeof(hive_uint32)
-#define SIZE_OF_IA_CSS_PTR		sizeof(uint32_t)
 
 /* Number of SP's */
 #define NUM_OF_SPS 1
@@ -202,6 +203,8 @@ struct sh_css_ddr_address_map {
 	(SH_CSS_MAX_STAGES * IA_CSS_NUM_MEMORIES * SIZE_OF_HRT_VADDRESS) +	\
 	(16 * SIZE_OF_HRT_VADDRESS))
 
+static_assert(sizeof(struct sh_css_ddr_address_map) == SIZE_OF_SH_CSS_DDR_ADDRESS_MAP_STRUCT);
+
 /* xmem address map allocation per pipeline */
 struct sh_css_ddr_address_map_size {
 	size_t isp_param;
@@ -705,6 +708,8 @@ struct sh_css_hmm_buffer {
 	SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT +			\
 	CALC_ALIGNMENT_MEMBER(SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT, 8))
 
+static_assert(sizeof(struct sh_css_hmm_buffer) == SIZE_OF_SH_CSS_HMM_BUFFER_STRUCT);
+
 enum sh_css_queue_type {
 	sh_css_invalid_queue_type = -1,
 	sh_css_host2sp_buffer_queue,
@@ -724,6 +729,8 @@ struct sh_css_event_irq_mask {
 #define SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT				\
 	(2 * sizeof(uint16_t))
 
+static_assert(sizeof(struct sh_css_event_irq_mask) == SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT);
+
 struct host_sp_communication {
 	/*
 	 * Don't use enum host2sp_commands, because the sizeof an enum is
@@ -761,6 +768,8 @@ struct host_sp_communication {
 	((3 + N_CSI_PORTS) * sizeof(uint32_t)) +						\
 	(NR_OF_PIPELINES * SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT))
 
+static_assert(sizeof(struct host_sp_communication) == SIZE_OF_HOST_SP_COMMUNICATION_STRUCT);
+
 struct host_sp_queues {
 	/*
 	 * Queues for the dynamic frame information,
@@ -831,6 +840,8 @@ struct host_sp_queues {
 #define SIZE_OF_HOST_SP_QUEUES_STRUCT		\
 	(SIZE_OF_QUEUES_ELEMS + SIZE_OF_QUEUES_DESC)
 
+static_assert(sizeof(struct host_sp_queues) == SIZE_OF_HOST_SP_QUEUES_STRUCT);
+
 extern int  __printf(1, 0) (*sh_css_printf)(const char *fmt, va_list args);
 
 static inline void  __printf(1, 2) sh_css_print(const char *fmt, ...)
-- 
2.43.0.rc1.1336.g36b5255a03ac


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-04-24 18:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-24 18:43 [PATCH v1 0/2] media: atomisp: A couple of cleanups Andy Shevchenko
2024-04-24 18:43 ` [PATCH v1 1/2] media: atomisp: Clean up unused macros from math_support.h Andy Shevchenko
2024-04-24 18:43 ` [PATCH v1 2/2] media: atomisp: Replace COMPILATION_ERROR_IF() by static_assert() Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).