1/* SPDX-License-Identifier: GPL-2.0 */ 2/** 3Support for Intel Camera Imaging ISP subsystem. 4Copyright (c) 2010 - 2015, Intel Corporation. 5 6This program is free software; you can redistribute it and/or modify it 7under the terms and conditions of the GNU General Public License, 8version 2, as published by the Free Software Foundation. 9 10This program is distributed in the hope it will be useful, but WITHOUT 11ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13more details. 14*/ 15 16#ifndef _COMMON_ISP_CONST_H_ 17#define _COMMON_ISP_CONST_H_ 18 19/*#include "isp.h"*/ /* ISP_VEC_NELEMS */ 20 21/* Binary independent constants */ 22 23#ifndef NO_HOIST 24# define NO_HOIST HIVE_ATTRIBUTE((no_hoist)) 25#endif 26 27#define NO_HOIST_CSE HIVE_ATTRIBUTE((no_hoist, no_cse)) 28 29#define UNION struct /* Union constructors not allowed in C++ */ 30 31#define XMEM_WIDTH_BITS HIVE_ISP_DDR_WORD_BITS 32#define XMEM_SHORTS_PER_WORD (HIVE_ISP_DDR_WORD_BITS / 16) 33#define XMEM_INTS_PER_WORD (HIVE_ISP_DDR_WORD_BITS / 32) 34#define XMEM_POW2_BYTES_PER_WORD HIVE_ISP_DDR_WORD_BYTES 35 36#define BITS8_ELEMENTS_PER_XMEM_ADDR CEIL_DIV(XMEM_WIDTH_BITS, 8) 37#define BITS16_ELEMENTS_PER_XMEM_ADDR CEIL_DIV(XMEM_WIDTH_BITS, 16) 38 39#define ISP_NWAY_LOG2 6 40 41/* ***************************** 42 * ISP input/output buffer sizes 43 * ****************************/ 44/* input image */ 45#define INPUT_BUF_DMA_HEIGHT 2 46#define INPUT_BUF_HEIGHT 2 /* double buffer */ 47#define OUTPUT_BUF_DMA_HEIGHT 2 48#define OUTPUT_BUF_HEIGHT 2 /* double buffer */ 49#define OUTPUT_NUM_TRANSFERS 4 50 51/* GDC accelerator: Up/Down Scaling */ 52/* These should be moved to the gdc_defs.h in the device */ 53#define UDS_SCALING_N HRT_GDC_N 54/* AB: This should cover the zooming up to 16MP */ 55#define UDS_MAX_OXDIM 5000 56/* We support maximally 2 planes with different parameters 57 - luma and chroma (YUV420) */ 58#define UDS_MAX_PLANES 2 59#define UDS_BLI_BLOCK_HEIGHT 2 60#define UDS_BCI_BLOCK_HEIGHT 4 61#define UDS_BLI_INTERP_ENVELOPE 1 62#define UDS_BCI_INTERP_ENVELOPE 3 63#define UDS_MAX_ZOOM_FAC 64 64/* Make it always one FPGA vector. 65 Four FPGA vectors are required and 66 four of them fit in one ASIC vector.*/ 67#define UDS_MAX_CHUNKS 16 68 69#define ISP_LEFT_PADDING _ISP_LEFT_CROP_EXTRA(ISP_LEFT_CROPPING) 70#define ISP_LEFT_PADDING_VECS CEIL_DIV(ISP_LEFT_PADDING, ISP_VEC_NELEMS) 71/* in case of continuous the croppong of the current binary doesn't matter for the buffer calculation, but the cropping of the sp copy should be used */ 72#define ISP_LEFT_PADDING_CONT _ISP_LEFT_CROP_EXTRA(SH_CSS_MAX_LEFT_CROPPING) 73#define ISP_LEFT_PADDING_VECS_CONT CEIL_DIV(ISP_LEFT_PADDING_CONT, ISP_VEC_NELEMS) 74 75#define CEIL_ROUND_DIV_STRIPE(width, stripe, padding) \ 76 CEIL_MUL(padding + CEIL_DIV(width - padding, stripe), ((ENABLE_RAW_BINNING || ENABLE_FIXED_BAYER_DS) ? 4 : 2)) 77 78/* output (Y,U,V) image, 4:2:0 */ 79#define MAX_VECTORS_PER_LINE \ 80 CEIL_ROUND_DIV_STRIPE(CEIL_DIV(ISP_MAX_INTERNAL_WIDTH, ISP_VEC_NELEMS), \ 81 ISP_NUM_STRIPES, \ 82 ISP_LEFT_PADDING_VECS) 83 84/* 85 * ITERATOR_VECTOR_INCREMENT' explanation: 86 * when striping an even number of iterations, one of the stripes is 87 * one iteration wider than the other to account for overlap 88 * so the calc for the output buffer vmem size is: 89 * ((width[vectors]/num_of_stripes) + 2[vectors]) 90 */ 91#define MAX_VECTORS_PER_OUTPUT_LINE \ 92 CEIL_DIV(CEIL_DIV(ISP_MAX_OUTPUT_WIDTH, ISP_NUM_STRIPES) + ISP_LEFT_PADDING, ISP_VEC_NELEMS) 93 94/* Must be even due to interlaced bayer input */ 95#define MAX_VECTORS_PER_INPUT_LINE CEIL_MUL((CEIL_DIV(ISP_MAX_INPUT_WIDTH, ISP_VEC_NELEMS) + ISP_LEFT_PADDING_VECS), 2) 96#define MAX_VECTORS_PER_INPUT_STRIPE CEIL_ROUND_DIV_STRIPE(MAX_VECTORS_PER_INPUT_LINE, \ 97 ISP_NUM_STRIPES, \ 98 ISP_LEFT_PADDING_VECS) 99 100/* Add 2 for left croppping */ 101#define MAX_SP_RAW_COPY_VECTORS_PER_INPUT_LINE (CEIL_DIV(ISP_MAX_INPUT_WIDTH, ISP_VEC_NELEMS) + 2) 102 103#define MAX_VECTORS_PER_BUF_LINE \ 104 (MAX_VECTORS_PER_LINE + DUMMY_BUF_VECTORS) 105#define MAX_VECTORS_PER_BUF_INPUT_LINE \ 106 (MAX_VECTORS_PER_INPUT_STRIPE + DUMMY_BUF_VECTORS) 107#define MAX_OUTPUT_Y_FRAME_WIDTH \ 108 (MAX_VECTORS_PER_LINE * ISP_VEC_NELEMS) 109#define MAX_OUTPUT_Y_FRAME_SIMDWIDTH \ 110 MAX_VECTORS_PER_LINE 111#define MAX_OUTPUT_C_FRAME_WIDTH \ 112 (MAX_OUTPUT_Y_FRAME_WIDTH / 2) 113#define MAX_OUTPUT_C_FRAME_SIMDWIDTH \ 114 CEIL_DIV(MAX_OUTPUT_C_FRAME_WIDTH, ISP_VEC_NELEMS) 115 116/* should be even */ 117#define NO_CHUNKING (OUTPUT_NUM_CHUNKS == 1) 118 119#define MAX_VECTORS_PER_CHUNK \ 120 (NO_CHUNKING ? MAX_VECTORS_PER_LINE \ 121 : 2 * CEIL_DIV(MAX_VECTORS_PER_LINE, \ 122 2 * OUTPUT_NUM_CHUNKS)) 123 124#define MAX_C_VECTORS_PER_CHUNK \ 125 (MAX_VECTORS_PER_CHUNK / 2) 126 127/* should be even */ 128#define MAX_VECTORS_PER_OUTPUT_CHUNK \ 129 (NO_CHUNKING ? MAX_VECTORS_PER_OUTPUT_LINE \ 130 : 2 * CEIL_DIV(MAX_VECTORS_PER_OUTPUT_LINE, \ 131 2 * OUTPUT_NUM_CHUNKS)) 132 133#define MAX_C_VECTORS_PER_OUTPUT_CHUNK \ 134 (MAX_VECTORS_PER_OUTPUT_CHUNK / 2) 135 136/* should be even */ 137#define MAX_VECTORS_PER_INPUT_CHUNK \ 138 (INPUT_NUM_CHUNKS == 1 ? MAX_VECTORS_PER_INPUT_STRIPE \ 139 : 2 * CEIL_DIV(MAX_VECTORS_PER_INPUT_STRIPE, \ 140 2 * OUTPUT_NUM_CHUNKS)) 141 142#define DEFAULT_C_SUBSAMPLING 2 143 144/****** DMA buffer properties */ 145 146#define RAW_BUF_LINES ((ENABLE_RAW_BINNING || ENABLE_FIXED_BAYER_DS) ? 4 : 2) 147 148/* [isp vmem] table size[vectors] per line per color (GR,R,B,GB), 149 multiples of NWAY */ 150#define ISP2400_SCTBL_VECTORS_PER_LINE_PER_COLOR \ 151 CEIL_DIV(SH_CSS_MAX_SCTBL_WIDTH_PER_COLOR, ISP_VEC_NELEMS) 152#define ISP2401_SCTBL_VECTORS_PER_LINE_PER_COLOR \ 153 CEIL_DIV(SH_CSS_MAX_SCTBL_WIDTH_PER_COLOR, ISP_VEC_NELEMS) 154/* [isp vmem] table size[vectors] per line for 4colors (GR,R,B,GB), 155 multiples of NWAY */ 156#define SCTBL_VECTORS_PER_LINE \ 157 (SCTBL_VECTORS_PER_LINE_PER_COLOR * IA_CSS_SC_NUM_COLORS) 158 159/*************/ 160 161/* Format for fixed primaries */ 162 163#define ISP_FIXED_PRIMARY_FORMAT IA_CSS_FRAME_FORMAT_NV12 164 165#endif /* _COMMON_ISP_CONST_H_ */ 166