media: atomisp: Clean up unused macros from math_support.h

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>
Link: https://lore.kernel.org/r/20240424184421.1737776-2-andriy.shevchenko@linux.intel.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
Andy Shevchenko 2024-04-24 21:43:31 +03:00 committed by Hans Verkuil
parent e323de473d
commit 143fd8feb8
7 changed files with 20 additions and 139 deletions

View File

@ -100,17 +100,6 @@ bool ia_css_util_res_leq(
bool ia_css_util_resolution_is_zero( bool ia_css_util_resolution_is_zero(
const struct ia_css_resolution resolution); 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 /* @brief check width and height
* *
* @param[in] stream_format * @param[in] stream_format

View File

@ -119,17 +119,6 @@ int ia_css_util_check_vf_out_info(
return 0; 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 */ /* ISP2401 */
bool ia_css_util_res_leq(struct ia_css_resolution a, struct ia_css_resolution b) 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); return (resolution.width == 0) || (resolution.height == 0);
} }
/* ISP2401 */ int ia_css_util_check_res(unsigned int width, unsigned int height)
bool ia_css_util_resolution_is_even(const struct ia_css_resolution resolution)
{ {
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) bool ia_css_util_is_input_format_raw(enum atomisp_input_format format)

View File

@ -16,133 +16,27 @@
#ifndef __MATH_SUPPORT_H #ifndef __MATH_SUPPORT_H
#define __MATH_SUPPORT_H #define __MATH_SUPPORT_H
#include <linux/kernel.h> /* Override the definition of max/min from linux kernel*/ /* Override the definition of max/min from Linux kernel */
#include <linux/minmax.h>
#define IS_ODD(a) ((a) & 0x1)
#define IS_EVEN(a) (!IS_ODD(a))
/* force a value to a lower even value */ /* force a value to a lower even value */
#define EVEN_FLOOR(x) ((x) & ~1) #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 /* for preprocessor and array sizing use MIN and MAX
otherwise use min and max */ otherwise use min and max */
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) #define MAX(a, b) (((a) > (b)) ? (a) : (b))
#define MIN(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_DIV(a, b) (((b) != 0) ? ((a) + (b) - 1) / (b) : 0)
#define CEIL_MUL(a, b) (CEIL_DIV(a, b) * (b)) #define CEIL_MUL(a, b) (CEIL_DIV(a, b) * (b))
#define CEIL_MUL2(a, b) (((a) + (b) - 1) & ~((b) - 1)) #define CEIL_MUL2(a, b) (((a) + (b) - 1) & ~((b) - 1))
#define CEIL_SHIFT(a, b) (((a) + (1 << (b)) - 1) >> (b)) #define CEIL_SHIFT(a, b) (((a) + (1 << (b)) - 1) >> (b))
#define CEIL_SHIFT_MUL(a, b) (CEIL_SHIFT(a, b) << (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) #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)) #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) */ #endif /* !defined(PIPE_GENERATION) */
/* /*

View File

@ -20,6 +20,7 @@
* This file contains types used for 3A statistics * This file contains types used for 3A statistics
*/ */
#include <math_support.h>
#include <type_support.h> #include <type_support.h>
#include "ia_css_types.h" #include "ia_css_types.h"
#include "ia_css_err.h" #include "ia_css_err.h"

View File

@ -13,6 +13,8 @@
* more details. * more details.
*/ */
#include <linux/log2.h>
#include "type_support.h" #include "type_support.h"
#include "math_support.h" #include "math_support.h"
#include "sh_css_defs.h" #include "sh_css_defs.h"
@ -137,9 +139,7 @@ ia_css_xnr3_encode(
unsigned int size) unsigned int size)
{ {
int kernel_size = XNR_FILTER_SIZE; int kernel_size = XNR_FILTER_SIZE;
/* The adjust factor is the next power of 2 int adjust_factor = roundup_pow_of_two(kernel_size);
w.r.t. the kernel size*/
int adjust_factor = ceil_pow2(kernel_size);
s32 max_diff = (1 << (ISP_VEC_ELEMBITS - 1)) - 1; s32 max_diff = (1 << (ISP_VEC_ELEMBITS - 1)) - 1;
s32 min_diff = -(1 << (ISP_VEC_ELEMBITS - 1)); s32 min_diff = -(1 << (ISP_VEC_ELEMBITS - 1));

View File

@ -43,8 +43,6 @@
#include "assert_support.h" #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 *all_binaries; /* ISP binaries only (no SP) */
static struct ia_css_binary_xinfo static struct ia_css_binary_xinfo
*binary_infos[IA_CSS_BINARY_NUM_MODES] = { NULL, }; *binary_infos[IA_CSS_BINARY_NUM_MODES] = { NULL, };

View File

@ -16,7 +16,9 @@
#ifndef __SH_CSS_FRAC_H #ifndef __SH_CSS_FRAC_H
#define __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 sISP_REG_BIT ISP_VEC_ELEMBITS
#define uISP_REG_BIT ((unsigned int)(sISP_REG_BIT - 1)) #define uISP_REG_BIT ((unsigned int)(sISP_REG_BIT - 1))