xref: /linux/drivers/media/platform/ti/vpe/vip.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * TI VIP capture driver
4  *
5  * Copyright (C) 2025 Texas Instruments Incorpated - http://www.ti.com/
6  * David Griego, <dagriego@biglakesoftware.com>
7  * Dale Farnsworth, <dale@farnsworth.org>
8  * Yemike Abhilash Chandra, <y-abhilashchandra@ti.com>
9  */
10 
11 #ifndef __TI_VIP_H
12 #define __TI_VIP_H
13 
14 #include <linux/videodev2.h>
15 #include <media/v4l2-ctrls.h>
16 #include <media/v4l2-device.h>
17 #include <media/v4l2-event.h>
18 #include <media/v4l2-ioctl.h>
19 #include <media/videobuf2-core.h>
20 #include <media/videobuf2-dma-contig.h>
21 #include <media/videobuf2-memops.h>
22 #include <media/v4l2-fwnode.h>
23 #include <media/v4l2-async.h>
24 
25 #include "vpdma.h"
26 #include "vpdma_priv.h"
27 #include "sc.h"
28 #include "csc.h"
29 
30 #define VIP_INSTANCE1	1
31 #define VIP_INSTANCE2	2
32 #define VIP_INSTANCE3	3
33 
34 #define VIP_SLICE1	0
35 #define VIP_SLICE2	1
36 #define VIP_NUM_SLICES	2
37 
38 /*
39  * Additional client identifiers used for VPDMA configuration descriptors
40  */
41 #define VIP_SLICE1_CFD_SC_CLIENT	7
42 #define VIP_SLICE2_CFD_SC_CLIENT	8
43 
44 #define VIP_PORTA	0
45 #define VIP_PORTB	1
46 #define VIP_NUM_PORTS	2
47 
48 #define VIP_MAX_PLANES	2
49 #define	VIP_LUMA	0
50 #define VIP_CHROMA	1
51 
52 #define VIP_CAP_STREAMS_PER_PORT	16
53 #define VIP_VBI_STREAMS_PER_PORT	16
54 
55 #define VIP_MAX_SUBDEV			5
56 
57 #define VPDMA_FIRMWARE	"vpdma-1b8.bin"
58 
59 /*
60  * This value needs to be at least as large as the number of entry in
61  * vip_formats[].
62  * When vip_formats[] is modified make sure to adjust this value also.
63  */
64 #define VIP_MAX_ACTIVE_FMT		16
65 /*
66  * Colorspace conversion unit can be in one of 3 modes:
67  * NA  - Not Available on this port
68  * Y2R - Needed for YUV to RGB on this port
69  * R2Y - Needed for RGB to YUV on this port
70  */
71 enum vip_csc_state {
72 	VIP_CSC_NA = 0,
73 	VIP_CSC_Y2R,
74 	VIP_CSC_R2Y,
75 };
76 
77 /* buffer for one video frame */
78 struct vip_buffer {
79 	/* common v4l buffer stuff */
80 	struct vb2_v4l2_buffer	vb;
81 	struct list_head	list;
82 	bool			drop;
83 };
84 
85 /*
86  * struct vip_fmt - VIP media bus format information
87  * @fourcc: V4L2 pixel format FCC identifier
88  * @code: V4L2 media bus format code
89  * @colorspace: V4L2 colorspace identifier
90  * @coplanar: 1 if unpacked Luma and Chroma, 0 otherwise (packed/interleaved)
91  * @vpdma_fmt: VPDMA data format per plane.
92  * @finfo: Cache v4l2_format_info for associated fourcc
93  */
94 struct vip_fmt {
95 	u32	fourcc;
96 	u32	code;
97 	u32	colorspace;
98 	u8	coplanar;
99 	const struct vpdma_data_format *vpdma_fmt[VIP_MAX_PLANES];
100 	const struct v4l2_format_info *finfo;
101 };
102 
103 /*
104  * The vip_parser_data structures contains the memory mapped
105  * info to access the parser registers.
106  */
107 struct vip_parser_data {
108 	void __iomem		*base;
109 
110 	struct platform_device *pdev;
111 };
112 
113 /*
114  * The vip_shared structure contains data that is shared by both
115  * the VIP1 and VIP2 slices.
116  */
117 struct vip_shared {
118 	struct list_head	list;
119 	void __iomem		*base;
120 	struct vpdma_data	vpdma_data;
121 	struct vpdma_data	*vpdma;
122 	struct v4l2_device	v4l2_dev;
123 	struct vip_dev		*devs[VIP_NUM_SLICES];
124 	struct v4l2_ctrl_handler ctrl_handler;
125 };
126 
127 struct vip_ctrl_module {
128 	struct regmap	*syscon_pol;
129 	u32		syscon_offset;
130 	u32		syscon_bit_field[4];
131 };
132 
133 /*
134  * There are two vip_dev structure, one for each vip slice: VIP1 & VIP2.
135  */
136 struct vip_dev {
137 	struct v4l2_device	v4l2_dev;
138 	struct platform_device	*pdev;
139 	struct vip_shared	*shared;
140 	struct vip_ctrl_module	*syscon;
141 	int			instance_id;
142 	int			slice_id;
143 	int			num_ports;	/* count of open ports */
144 	struct mutex		mutex;
145 	/* protects access to stream buffer queues */
146 	spinlock_t		slock;
147 
148 	int			irq;
149 	void __iomem		*base;
150 
151 	struct vip_port		*ports[VIP_NUM_PORTS];
152 
153 	char			name[16];
154 	/* parser data handle */
155 	struct vip_parser_data	*parser;
156 	/* scaler data handle */
157 	struct sc_data		*sc;
158 	/* scaler port assignation */
159 	int			sc_assigned;
160 	/* csc data handle */
161 	struct csc_data		*csc;
162 	/* csc port assignation */
163 	int			csc_assigned;
164 };
165 
166 /*
167  * There are two vip_port structures for each vip_dev, one for port A
168  * and one for port B.
169  */
170 struct vip_port {
171 	struct vip_dev		*dev;
172 	int			port_id;
173 
174 	unsigned int		flags;
175 	struct v4l2_rect	c_rect;		/* crop rectangle */
176 	struct v4l2_mbus_framefmt mbus_framefmt;
177 	struct v4l2_mbus_framefmt try_mbus_framefmt;
178 
179 	char			name[16];
180 	struct vip_fmt		*fmt;		/* current format info */
181 	/* Number of channels/streams configured */
182 	int			num_streams_configured;
183 	int			num_streams;	/* count of open streams */
184 	struct vip_stream	*cap_streams[VIP_CAP_STREAMS_PER_PORT];
185 
186 	struct v4l2_async_notifier notifier;
187 	struct v4l2_subdev	*subdev;
188 	struct v4l2_fwnode_endpoint endpoint;
189 	struct vip_fmt		*active_fmt[VIP_MAX_ACTIVE_FMT];
190 	int			num_active_fmt;
191 	/* have new shadow reg values */
192 	bool			load_mmrs;
193 	/* shadow reg addr/data block */
194 	struct vpdma_buf	mmr_adb;
195 	/* h coeff buffer */
196 	struct vpdma_buf	sc_coeff_h;
197 	/* v coeff buffer */
198 	struct vpdma_buf	sc_coeff_v;
199 	/* Show if scaler resource is available on this port */
200 	bool			scaler;
201 	/* Show the csc resource state on this port */
202 	enum vip_csc_state	csc;
203 };
204 
205 /*
206  * When handling multiplexed video, there can be multiple streams for each
207  * port.  The vip_stream structure holds per-stream data.
208  */
209 struct vip_stream {
210 	struct video_device	*vfd;
211 	struct vip_port		*port;
212 	int			stream_id;
213 	int			list_num;
214 	int			vfl_type;
215 	char			name[16];
216 	struct work_struct	recovery_work;
217 	int			num_recovery;
218 	enum v4l2_field		field;		/* current field */
219 	unsigned int		sequence;	/* current frame/field seq */
220 	enum v4l2_field		sup_field;	/* supported field value */
221 	unsigned int		width;		/* frame width */
222 	unsigned int		height;		/* frame height */
223 	unsigned int		bytesperline;	/* bytes per line in memory */
224 	unsigned int		sizeimage;	/* image size in memory */
225 	struct list_head	vidq;		/* incoming vip_bufs queue */
226 	struct list_head	dropq;		/* drop vip_bufs queue */
227 	struct list_head	post_bufs;	/* vip_bufs to be DMAed */
228 	/* Maintain a list of used channels - Needed for VPDMA cleanup */
229 	int			vpdma_channels[VPDMA_MAX_CHANNELS];
230 	int			vpdma_channels_to_abort[VPDMA_MAX_CHANNELS];
231 	struct vpdma_desc_list	desc_list;	/* DMA descriptor list */
232 	struct vpdma_dtd	*write_desc;
233 	/* next unused desc_list addr */
234 	void			*desc_next;
235 	struct vb2_queue	vb_vidq;
236 };
237 
238 /*
239  * VIP Enumerations
240  */
241 enum data_path_select {
242 	ALL_FIELDS_DATA_SELECT = 0,
243 	VIP_CSC_SRC_DATA_SELECT,
244 	VIP_SC_SRC_DATA_SELECT,
245 	VIP_RGB_SRC_DATA_SELECT,
246 	VIP_RGB_OUT_LO_DATA_SELECT,
247 	VIP_RGB_OUT_HI_DATA_SELECT,
248 	VIP_CHR_DS_1_SRC_DATA_SELECT,
249 	VIP_CHR_DS_2_SRC_DATA_SELECT,
250 	VIP_MULTI_CHANNEL_DATA_SELECT,
251 	VIP_CHR_DS_1_DATA_BYPASS,
252 	VIP_CHR_DS_2_DATA_BYPASS,
253 };
254 
255 enum data_interface_modes {
256 	SINGLE_24B_INTERFACE = 0,
257 	SINGLE_16B_INTERFACE = 1,
258 	DUAL_8B_INTERFACE = 2,
259 };
260 
261 enum sync_types {
262 	EMBEDDED_SYNC_SINGLE_YUV422 = 0,
263 	EMBEDDED_SYNC_2X_MULTIPLEXED_YUV422 = 1,
264 	EMBEDDED_SYNC_4X_MULTIPLEXED_YUV422 = 2,
265 	EMBEDDED_SYNC_LINE_MULTIPLEXED_YUV422 = 3,
266 	DISCRETE_SYNC_SINGLE_YUV422 = 4,
267 	EMBEDDED_SYNC_SINGLE_RGB_OR_YUV444 = 5,
268 	DISCRETE_SYNC_SINGLE_RGB_24B = 10,
269 };
270 
271 #define VIP_NOT_ASSIGNED	-1
272 
273 /*
274  * Register offsets and field selectors
275  */
276 #define VIP_PID_FUNC			0xf02
277 
278 #define VIP_PID				0x0000
279 #define VIP_PID_MINOR_MASK              0x3f
280 #define VIP_PID_MINOR_SHIFT             0
281 #define VIP_PID_CUSTOM_MASK             0x03
282 #define VIP_PID_CUSTOM_SHIFT            6
283 #define VIP_PID_MAJOR_MASK              0x07
284 #define VIP_PID_MAJOR_SHIFT             8
285 #define VIP_PID_RTL_MASK                0x1f
286 #define VIP_PID_RTL_SHIFT               11
287 #define VIP_PID_FUNC_MASK               0xfff
288 #define VIP_PID_FUNC_SHIFT              16
289 #define VIP_PID_SCHEME_MASK             0x03
290 #define VIP_PID_SCHEME_SHIFT            30
291 
292 #define VIP_SYSCONFIG			0x0010
293 #define VIP_SYSCONFIG_IDLE_MASK         0x03
294 #define VIP_SYSCONFIG_IDLE_SHIFT        2
295 #define VIP_SYSCONFIG_STANDBY_MASK      0x03
296 #define VIP_SYSCONFIG_STANDBY_SHIFT     4
297 #define VIP_FORCE_IDLE_MODE             0
298 #define VIP_NO_IDLE_MODE                1
299 #define VIP_SMART_IDLE_MODE             2
300 #define VIP_SMART_IDLE_WAKEUP_MODE      3
301 #define VIP_FORCE_STANDBY_MODE          0
302 #define VIP_NO_STANDBY_MODE             1
303 #define VIP_SMART_STANDBY_MODE          2
304 #define VIP_SMART_STANDBY_WAKEUP_MODE   3
305 
306 #define VIP_INTC_INTX_OFFSET		0x0020
307 
308 #define VIP_INT0_STATUS0_RAW_SET	0x0020
309 #define VIP_INT0_STATUS0_RAW		VIP_INT0_STATUS0_RAW_SET
310 #define VIP_INT0_STATUS0_CLR		0x0028
311 #define VIP_INT0_STATUS0		VIP_INT0_STATUS0_CLR
312 #define VIP_INT0_ENABLE0_SET		0x0030
313 #define VIP_INT0_ENABLE0		VIP_INT0_ENABLE0_SET
314 #define VIP_INT0_ENABLE0_CLR		0x0038
315 #define VIP_INT0_LIST0_COMPLETE         BIT(0)
316 #define VIP_INT0_LIST0_NOTIFY           BIT(1)
317 #define VIP_INT0_LIST1_COMPLETE         BIT(2)
318 #define VIP_INT0_LIST1_NOTIFY           BIT(3)
319 #define VIP_INT0_LIST2_COMPLETE         BIT(4)
320 #define VIP_INT0_LIST2_NOTIFY           BIT(5)
321 #define VIP_INT0_LIST3_COMPLETE         BIT(6)
322 #define VIP_INT0_LIST3_NOTIFY           BIT(7)
323 #define VIP_INT0_LIST4_COMPLETE         BIT(8)
324 #define VIP_INT0_LIST4_NOTIFY           BIT(9)
325 #define VIP_INT0_LIST5_COMPLETE         BIT(10)
326 #define VIP_INT0_LIST5_NOTIFY           BIT(11)
327 #define VIP_INT0_LIST6_COMPLETE         BIT(12)
328 #define VIP_INT0_LIST6_NOTIFY           BIT(13)
329 #define VIP_INT0_LIST7_COMPLETE         BIT(14)
330 #define VIP_INT0_LIST7_NOTIFY           BIT(15)
331 #define VIP_INT0_DESCRIPTOR             BIT(16)
332 #define VIP_VIP1_PARSER_INT		BIT(20)
333 #define VIP_VIP2_PARSER_INT		BIT(21)
334 
335 #define VIP_INT0_STATUS1_RAW_SET        0x0024
336 #define VIP_INT0_STATUS1_RAW            VIP_INT0_STATUS0_RAW_SET
337 #define VIP_INT0_STATUS1_CLR            0x002c
338 #define VIP_INT0_STATUS1                VIP_INT0_STATUS0_CLR
339 #define VIP_INT0_ENABLE1_SET            0x0034
340 #define VIP_INT0_ENABLE1                VIP_INT0_ENABLE0_SET
341 #define VIP_INT0_ENABLE1_CLR            0x003c
342 #define VIP_INT0_ENABLE1_STAT		0x004c
343 #define VIP_INT0_CHANNEL_GROUP0		BIT(0)
344 #define VIP_INT0_CHANNEL_GROUP1		BIT(1)
345 #define VIP_INT0_CHANNEL_GROUP2		BIT(2)
346 #define VIP_INT0_CHANNEL_GROUP3		BIT(3)
347 #define VIP_INT0_CHANNEL_GROUP4		BIT(4)
348 #define VIP_INT0_CHANNEL_GROUP5		BIT(5)
349 #define VIP_INT0_CLIENT			BIT(7)
350 #define VIP_VIP1_DS1_UV_ERROR_INT	BIT(22)
351 #define VIP_VIP1_DS2_UV_ERROR_INT	BIT(23)
352 #define VIP_VIP2_DS1_UV_ERROR_INT	BIT(24)
353 #define VIP_VIP2_DS2_UV_ERROR_INT	BIT(25)
354 
355 #define VIP_INTC_E0I			0x00a0
356 
357 #define VIP_CLK_ENABLE			0x0100
358 #define VIP_VPDMA_CLK_ENABLE		BIT(0)
359 #define VIP_VIP1_DATA_PATH_CLK_ENABLE	BIT(16)
360 #define VIP_VIP2_DATA_PATH_CLK_ENABLE	BIT(17)
361 
362 #define VIP_CLK_RESET			0x0104
363 #define VIP_VPDMA_RESET			BIT(0)
364 #define VIP_VPDMA_CLK_RESET_MASK	0x1
365 #define VIP_VPDMA_CLK_RESET_SHIFT	0
366 #define VIP_DATA_PATH_CLK_RESET_MASK	0x1
367 #define VIP_VIP1_DATA_PATH_RESET_SHIFT	16
368 #define VIP_VIP2_DATA_PATH_RESET_SHIFT	17
369 #define VIP_VIP1_DATA_PATH_RESET	BIT(16)
370 #define VIP_VIP2_DATA_PATH_RESET	BIT(17)
371 #define VIP_VIP1_PARSER_RESET		BIT(18)
372 #define VIP_VIP2_PARSER_RESET		BIT(19)
373 #define VIP_VIP1_CSC_RESET		BIT(20)
374 #define VIP_VIP2_CSC_RESET		BIT(21)
375 #define VIP_VIP1_SC_RESET		BIT(22)
376 #define VIP_VIP2_SC_RESET		BIT(23)
377 #define VIP_VIP1_DS1_RESET		BIT(25)
378 #define VIP_VIP2_DS1_RESET		BIT(26)
379 #define VIP_VIP1_DS2_RESET		BIT(27)
380 #define VIP_VIP2_DS2_RESET		BIT(28)
381 #define VIP_MAIN_RESET			BIT(31)
382 
383 #define VIP_VIP1_DATA_PATH_SELECT	0x010c
384 #define VIP_VIP2_DATA_PATH_SELECT	0x0110
385 #define VIP_CSC_SRC_SELECT_MASK		0x07
386 #define VIP_CSC_SRC_SELECT_SHFT		0
387 #define VIP_SC_SRC_SELECT_MASK		0x07
388 #define VIP_SC_SRC_SELECT_SHFT		3
389 #define VIP_RGB_SRC_SELECT		BIT(6)
390 #define VIP_RGB_OUT_LO_SRC_SELECT	BIT(7)
391 #define VIP_RGB_OUT_HI_SRC_SELECT	BIT(8)
392 #define VIP_DS1_SRC_SELECT_MASK		0x07
393 #define VIP_DS1_SRC_SELECT_SHFT		9
394 #define VIP_DS2_SRC_SELECT_MASK		0x07
395 #define VIP_DS2_SRC_SELECT_SHFT		12
396 #define VIP_MULTI_CHANNEL_SELECT	BIT(15)
397 #define VIP_DS1_BYPASS			BIT(16)
398 #define VIP_DS2_BYPASS			BIT(17)
399 #define VIP_TESTPORT_B_SELECT		BIT(26)
400 #define VIP_TESTPORT_A_SELECT		BIT(27)
401 #define VIP_DATAPATH_SELECT_MASK	0x0f
402 #define VIP_DATAPATH_SELECT_SHFT	28
403 
404 #define VIP_PARSER_MAIN_CFG		0x0000
405 #define VIP_DATA_INTERFACE_MODE_MASK	0x03
406 #define VIP_DATA_INTERFACE_MODE_SHFT	0
407 #define VIP_CLIP_BLANK			BIT(4)
408 #define VIP_CLIP_ACTIVE			BIT(5)
409 
410 #define VIP_SLICE0_PARSER		0x5500
411 #define VIP_SLICE1_PARSER		0x5a00
412 #define VIP_PARSER_PORTA_0		0x0004
413 #define VIP_PARSER_PORTB_0		0x000c
414 #define VIP_SYNC_TYPE_MASK		0x0f
415 #define VIP_SYNC_TYPE_SHFT		0
416 #define VIP_CTRL_CHANNEL_SEL_MASK	0x03
417 #define VIP_CTRL_CHANNEL_SEL_SHFT	4
418 #define VIP_ASYNC_FIFO_WR		BIT(6)
419 #define VIP_ASYNC_FIFO_RD		BIT(7)
420 #define VIP_PORT_ENABLE			BIT(8)
421 #define VIP_FID_POLARITY		BIT(9)
422 #define VIP_PIXCLK_EDGE_POLARITY	BIT(10)
423 #define VIP_HSYNC_POLARITY		BIT(11)
424 #define VIP_VSYNC_POLARITY		BIT(12)
425 #define VIP_ACTVID_POLARITY		BIT(13)
426 #define VIP_FID_DETECT_MODE		BIT(14)
427 #define VIP_USE_ACTVID_HSYNC_ONLY	BIT(15)
428 #define VIP_FID_SKEW_PRECOUNT_MASK	0x3f
429 #define VIP_FID_SKEW_PRECOUNT_SHFT	16
430 #define VIP_DISCRETE_BASIC_MODE		BIT(22)
431 #define VIP_SW_RESET			BIT(23)
432 #define VIP_FID_SKEW_POSTCOUNT_MASK	0x3f
433 #define VIP_FID_SKEW_POSTCOUNT_SHFT	24
434 #define VIP_ANALYZER_2X4X_SRCNUM_POS	BIT(30)
435 #define VIP_ANALYZER_FVH_ERR_COR_EN	BIT(31)
436 
437 #define VIP_PARSER_PORTA_1		0x0008
438 #define VIP_PARSER_PORTB_1		0x0010
439 #define VIP_SRC0_NUMLINES_MASK		0x0fff
440 #define VIP_SRC0_NUMLINES_SHFT		0
441 #define VIP_ANC_CHAN_SEL_8B_MASK	0x03
442 #define VIP_ANC_CHAN_SEL_8B_SHFT	13
443 #define VIP_SRC0_NUMPIX_MASK		0x0fff
444 #define VIP_SRC0_NUMPIX_SHFT		16
445 #define VIP_REPACK_SEL_MASK		0x07
446 #define VIP_REPACK_SEL_SHFT		28
447 
448 #define VIP_PARSER_FIQ_MASK		0x0014
449 #define VIP_PARSER_FIQ_CLR		0x0018
450 #define VIP_PARSER_FIQ_STATUS		0x001c
451 #define VIP_PORTA_VDET			BIT(0)
452 #define VIP_PORTB_VDET			BIT(1)
453 #define VIP_PORTA_ASYNC_FIFO_OF		BIT(2)
454 #define VIP_PORTB_ASYNC_FIFO_OF		BIT(3)
455 #define VIP_PORTA_OUTPUT_FIFO_YUV	BIT(4)
456 #define VIP_PORTA_OUTPUT_FIFO_ANC	BIT(6)
457 #define VIP_PORTB_OUTPUT_FIFO_YUV	BIT(7)
458 #define VIP_PORTB_OUTPUT_FIFO_ANC	BIT(9)
459 #define VIP_PORTA_CONN			BIT(10)
460 #define VIP_PORTA_DISCONN		BIT(11)
461 #define VIP_PORTB_CONN			BIT(12)
462 #define VIP_PORTB_DISCONN		BIT(13)
463 #define VIP_PORTA_SRC0_SIZE		BIT(14)
464 #define VIP_PORTB_SRC0_SIZE		BIT(15)
465 #define VIP_PORTA_YUV_PROTO_VIOLATION	BIT(16)
466 #define VIP_PORTA_ANC_PROTO_VIOLATION	BIT(17)
467 #define VIP_PORTB_YUV_PROTO_VIOLATION	BIT(18)
468 #define VIP_PORTB_ANC_PROTO_VIOLATION	BIT(19)
469 #define VIP_PORTA_CFG_DISABLE_COMPLETE	BIT(20)
470 #define VIP_PORTB_CFG_DISABLE_COMPLETE	BIT(21)
471 
472 #define VIP_PARSER_PORTA_SOURCE_FID	0x0020
473 #define VIP_PARSER_PORTA_ENCODER_FID	0x0024
474 #define VIP_PARSER_PORTB_SOURCE_FID	0x0028
475 #define VIP_PARSER_PORTB_ENCODER_FID	0x002c
476 
477 #define VIP_PARSER_PORTA_SRC0_SIZE	0x0030
478 #define VIP_PARSER_PORTB_SRC0_SIZE	0x0070
479 #define VIP_SOURCE_HEIGHT_MASK		0x0fff
480 #define VIP_SOURCE_HEIGHT_SHFT		0
481 #define VIP_SOURCE_WIDTH_MASK		0x0fff
482 #define VIP_SOURCE_WIDTH_SHFT		16
483 
484 #define VIP_PARSER_PORTA_VDET_VEC	0x00b0
485 #define VIP_PARSER_PORTB_VDET_VEC	0x00b4
486 
487 #define VIP_PARSER_PORTA_EXTRA2		0x00b8
488 #define VIP_PARSER_PORTB_EXTRA2		0x00c8
489 #define VIP_ANC_SKIP_NUMPIX_MASK	0x0fff
490 #define VIP_ANC_SKIP_NUMPIX_SHFT	0
491 #define VIP_ANC_BYPASS			BIT(15)
492 #define VIP_ANC_USE_NUMPIX_MASK		0x0fff
493 #define VIP_ANC_USE_NUMPIX_SHFT		16
494 #define VIP_ANC_TARGET_SRCNUM_MASK	0x0f
495 #define VIP_ANC_TARGET_SRCNUM_SHFT	28
496 
497 #define VIP_PARSER_PORTA_EXTRA3		0x00bc
498 #define VIP_PARSER_PORTB_EXTRA3		0x00cc
499 #define VIP_ANC_SKIP_NUMLINES_MASK	0x0fff
500 #define VIP_ANC_SKIP_NUMLINES_SHFT	0
501 #define VIP_ANC_USE_NUMLINES_MASK	0x0fff
502 #define VIP_ANC_USE_NUMLINES_SHFT	16
503 
504 #define VIP_PARSER_PORTA_EXTRA4		0x00c0
505 #define VIP_PARSER_PORTB_EXTRA4		0x00d0
506 #define VIP_ACT_SKIP_NUMPIX_MASK	0x0fff
507 #define VIP_ACT_SKIP_NUMPIX_SHFT	0
508 #define VIP_ACT_BYPASS			BIT(15)
509 #define VIP_ACT_USE_NUMPIX_MASK		0x0fff
510 #define VIP_ACT_USE_NUMPIX_SHFT		16
511 #define VIP_ACT_TARGET_SRCNUM_MASK	0x0f
512 #define VIP_ACT_TARGET_SRCNUM_SHFT	28
513 
514 #define VIP_PARSER_PORTA_EXTRA5		0x00c4
515 #define VIP_PARSER_PORTB_EXTRA5		0x00d4
516 #define VIP_ACT_SKIP_NUMLINES_MASK	0x0fff
517 #define VIP_ACT_SKIP_NUMLINES_SHFT	0
518 #define VIP_ACT_USE_NUMLINES_MASK	0x0fff
519 #define VIP_ACT_USE_NUMLINES_SHFT	16
520 
521 #define VIP_PARSER_PORTA_EXTRA6		0x00d8
522 #define VIP_PARSER_PORTB_EXTRA6		0x00dc
523 #define VIP_ANC_SRCNUM_STOP_IMM_SHFT	0
524 #define VIP_YUV_SRCNUM_STOP_IMM_SHFT	16
525 
526 #define VIP_SLICE0_CSC			0x5700
527 #define VIP_SLICE1_CSC			0x5c00
528 #define VIP_CSC_CSC00			0x0200
529 #define VIP_CSC_A0_MASK			0x1fff
530 #define VIP_CSC_A0_SHFT			0
531 #define VIP_CSC_B0_MASK			0x1fff
532 #define VIP_CSC_B0_SHFT			16
533 
534 #define VIP_CSC_CSC01			0x0204
535 #define VIP_CSC_C0_MASK			0x1fff
536 #define VIP_CSC_C0_SHFT			0
537 #define VIP_CSC_A1_MASK			0x1fff
538 #define VIP_CSC_A1_SHFT			16
539 
540 #define VIP_CSC_CSC02			0x0208
541 #define VIP_CSC_B1_MASK			0x1fff
542 #define VIP_CSC_B1_SHFT			0
543 #define VIP_CSC_C1_MASK			0x1fff
544 #define VIP_CSC_C1_SHFT			16
545 
546 #define VIP_CSC_CSC03			0x020c
547 #define VIP_CSC_A2_MASK			0x1fff
548 #define VIP_CSC_A2_SHFT			0
549 #define VIP_CSC_B2_MASK			0x1fff
550 #define VIP_CSC_B2_SHFT			16
551 
552 #define VIP_CSC_CSC04			0x0210
553 #define VIP_CSC_C2_MASK			0x1fff
554 #define VIP_CSC_C2_SHFT			0
555 #define VIP_CSC_D0_MASK			0x0fff
556 #define VIP_CSC_D0_SHFT			16
557 
558 #define VIP_CSC_CSC05			0x0214
559 #define VIP_CSC_D1_MASK			0x0fff
560 #define VIP_CSC_D1_SHFT			0
561 #define VIP_CSC_D2_MASK			0x0fff
562 #define VIP_CSC_D2_SHFT			16
563 #define VIP_CSC_BYPASS			BIT(28)
564 
565 #define VIP_SLICE0_SC			0x5800
566 #define VIP_SLICE1_SC			0x5d00
567 #define VIP_SC_MP_SC0			0x0300
568 #define VIP_INTERLACE_O			BIT(0)
569 #define VIP_LINEAR			BIT(1)
570 #define VIP_SC_BYPASS			BIT(2)
571 #define VIP_INVT_FID			BIT(3)
572 #define VIP_USE_RAV			BIT(4)
573 #define VIP_ENABLE_EV			BIT(5)
574 #define VIP_AUTH_HS			BIT(6)
575 #define VIP_DCM_2X			BIT(7)
576 #define VIP_DCM_4X			BIT(8)
577 #define VIP_HP_BYPASS			BIT(9)
578 #define VIP_INTERLACE_I			BIT(10)
579 #define VIP_ENABLE_SIN2_VER_INTP	BIT(11)
580 #define VIP_Y_PK_EN			BIT(14)
581 #define VIP_TRIM			BIT(15)
582 #define VIP_SELFGEN_FID			BIT(16)
583 
584 #define VIP_SC_MP_SC1			0x0304
585 #define VIP_ROW_ACC_INC_MASK		0x07ffffff
586 #define VIP_ROW_ACC_INC_SHFT		0
587 
588 #define VIP_SC_MP_SC2			0x0308
589 #define VIP_ROW_ACC_OFFSET_MASK		0x0fffffff
590 #define VIP_ROW_ACC_OFFSET_SHFT		0
591 
592 #define VIP_SC_MP_SC3			0x030c
593 #define VIP_ROW_ACC_OFFSET_B_MASK	0x0fffffff
594 #define VIP_ROW_ACC_OFFSET_B_SHFT	0
595 
596 #define VIP_SC_MP_SC4			0x0310
597 #define VIP_TAR_H_MASK			0x07ff
598 #define VIP_TAR_H_SHFT			0
599 #define VIP_TAR_W_MASK			0x07ff
600 #define VIP_TAR_W_SHFT			12
601 #define VIP_LIN_ACC_INC_U_MASK		0x07
602 #define VIP_LIN_ACC_INC_U_SHFT		24
603 #define VIP_NLIN_ACC_INIT_U_MASK	0x07
604 #define VIP_NLIN_ACC_INIT_U_SHFT	28
605 
606 #define VIP_SC_MP_SC5			0x0314
607 #define VIP_SRC_H_MASK			0x03ff
608 #define VIP_SRC_H_SHFT			0
609 #define VIP_SRC_W_MASK			0x07ff
610 #define VIP_SRC_W_SHFT			12
611 #define VIP_NLIN_ACC_INC_U_MASK		0x07
612 #define VIP_NLIN_ACC_INC_U_SHFT		24
613 
614 #define VIP_SC_MP_SC6			0x0318
615 #define VIP_ROW_ACC_INIT_RAV_MASK	0x03ff
616 #define VIP_ROW_ACC_INIT_RAV_SHFT	0
617 #define VIP_ROW_ACC_INIT_RAV_B_MASK	0x03ff
618 #define VIP_ROW_ACC_INIT_RAV_B_SHFT	10
619 
620 #define VIP_SC_MP_SC8			0x0320
621 #define VIP_NLIN_LEFT_MASK		0x07ff
622 #define VIP_NLIN_LEFT_SHFT		0
623 #define VIP_NLIN_RIGHT_MASK		0x07ff
624 #define VIP_NLIN_RIGHT_SHFT		12
625 
626 #define VIP_SC_MP_SC9			0x0324
627 #define VIP_LIN_ACC_INC			VIP_SC_MP_SC9
628 
629 #define VIP_SC_MP_SC10			0x0328
630 #define VIP_NLIN_ACC_INIT		VIP_SC_MP_SC10
631 
632 #define VIP_SC_MP_SC11			0x032c
633 #define VIP_NLIN_ACC_INC		VIP_SC_MP_SC11
634 
635 #define VIP_SC_MP_SC12			0x0330
636 #define VIP_COL_ACC_OFFSET_MASK		0x01ffffff
637 #define VIP_COL_ACC_OFFSET_SHFT		0
638 
639 #define VIP_SC_MP_SC13			0x0334
640 #define VIP_SC_FACTOR_RAV_MASK		0x03ff
641 #define VIP_SC_FACTOR_RAV_SHFT		0
642 #define VIP_CHROMA_INTP_THR_MASK	0x03ff
643 #define VIP_CHROMA_INTP_THR_SHFT	12
644 #define VIP_DELTA_CHROMA_THR_MASK	0x0f
645 #define VIP_DELTA_CHROMA_THR_SHFT	24
646 
647 #define VIP_SC_MP_SC17			0x0344
648 #define VIP_EV_THR_MASK			0x03ff
649 #define VIP_EV_THR_SHFT			12
650 #define VIP_DELTA_LUMA_THR_MASK		0x0f
651 #define VIP_DELTA_LUMA_THR_SHFT		24
652 #define VIP_DELTA_EV_THR_MASK		0x0f
653 #define VIP_DELTA_EV_THR_SHFT		28
654 
655 #define VIP_SC_MP_SC18			0x0348
656 #define VIP_HS_FACTOR_MASK		0x03ff
657 #define VIP_HS_FACTOR_SHFT		0
658 #define VIP_CONF_DEFAULT_MASK		0x01ff
659 #define VIP_CONF_DEFAULT_SHFT		16
660 
661 #define VIP_SC_MP_SC19			0x034c
662 #define VIP_HPF_COEFF0_MASK		0xff
663 #define VIP_HPF_COEFF0_SHFT		0
664 #define VIP_HPF_COEFF1_MASK		0xff
665 #define VIP_HPF_COEFF1_SHFT		8
666 #define VIP_HPF_COEFF2_MASK		0xff
667 #define VIP_HPF_COEFF2_SHFT		16
668 #define VIP_HPF_COEFF3_MASK		0xff
669 #define VIP_HPF_COEFF3_SHFT		23
670 
671 #define VIP_SC_MP_SC20			0x0350
672 #define VIP_HPF_COEFF4_MASK		0xff
673 #define VIP_HPF_COEFF4_SHFT		0
674 #define VIP_HPF_COEFF5_MASK		0xff
675 #define VIP_HPF_COEFF5_SHFT		8
676 #define VIP_HPF_NORM_SHFT_MASK		0x07
677 #define VIP_HPF_NORM_SHFT_SHFT		16
678 #define VIP_NL_LIMIT_MASK		0x1ff
679 #define VIP_NL_LIMIT_SHFT		20
680 
681 #define VIP_SC_MP_SC21			0x0354
682 #define VIP_NL_LO_THR_MASK		0x01ff
683 #define VIP_NL_LO_THR_SHFT		0
684 #define VIP_NL_LO_SLOPE_MASK		0xff
685 #define VIP_NL_LO_SLOPE_SHFT		16
686 
687 #define VIP_SC_MP_SC22			0x0358
688 #define VIP_NL_HI_THR_MASK		0x01ff
689 #define VIP_NL_HI_THR_SHFT		0
690 #define VIP_NL_HI_SLOPE_SH_MASK		0x07
691 #define VIP_NL_HI_SLOPE_SH_SHFT		16
692 
693 #define VIP_SC_MP_SC23			0x035c
694 #define VIP_GRADIENT_THR_MASK		0x07ff
695 #define VIP_GRADIENT_THR_SHFT		0
696 #define VIP_GRADIENT_THR_RANGE_MASK	0x0f
697 #define VIP_GRADIENT_THR_RANGE_SHFT	12
698 #define VIP_MIN_GY_THR_MASK		0xff
699 #define VIP_MIN_GY_THR_SHFT		16
700 #define VIP_MIN_GY_THR_RANGE_MASK	0x0f
701 #define VIP_MIN_GY_THR_RANGE_SHFT	28
702 
703 #define VIP_SC_MP_SC24			0x0360
704 #define VIP_ORG_H_MASK			0x07ff
705 #define VIP_ORG_H_SHFT			0
706 #define VIP_ORG_W_MASK			0x07ff
707 #define VIP_ORG_W_SHFT			16
708 
709 #define VIP_SC_MP_SC25			0x0364
710 #define VIP_OFF_H_MASK			0x07ff
711 #define VIP_OFF_H_SHFT			0
712 #define VIP_OFF_W_MASK			0x07ff
713 #define VIP_OFF_W_SHFT			16
714 
715 #define VIP_VPDMA_BASE			0xd000
716 
717 #endif
718