1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  * Copyright (c) 2015, Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  */
15 
16 #ifndef __DEBUG_GLOBAL_H_INCLUDED__
17 #define __DEBUG_GLOBAL_H_INCLUDED__
18 
19 #include <type_support.h>
20 
21 #define DEBUG_BUF_SIZE	1024
22 #define DEBUG_BUF_MASK	(DEBUG_BUF_SIZE - 1)
23 
24 #define DEBUG_DATA_ENABLE_ADDR		0x00
25 #define DEBUG_DATA_BUF_MODE_ADDR	0x04
26 #define DEBUG_DATA_HEAD_ADDR		0x08
27 #define DEBUG_DATA_TAIL_ADDR		0x0C
28 #define DEBUG_DATA_BUF_ADDR			0x10
29 
30 #define DEBUG_DATA_ENABLE_DDR_ADDR		0x00
31 #define DEBUG_DATA_BUF_MODE_DDR_ADDR	HIVE_ISP_DDR_WORD_BYTES
32 #define DEBUG_DATA_HEAD_DDR_ADDR		(2 * HIVE_ISP_DDR_WORD_BYTES)
33 #define DEBUG_DATA_TAIL_DDR_ADDR		(3 * HIVE_ISP_DDR_WORD_BYTES)
34 #define DEBUG_DATA_BUF_DDR_ADDR			(4 * HIVE_ISP_DDR_WORD_BYTES)
35 
36 #define DEBUG_BUFFER_ISP_DMEM_ADDR       0x0
37 
38 /*
39  * The linear buffer mode will accept data until the first
40  * overflow and then stop accepting new data
41  * The circular buffer mode will accept if there is place
42  * and discard the data if the buffer is full
43  */
44 typedef enum {
45 	DEBUG_BUFFER_MODE_LINEAR = 0,
46 	DEBUG_BUFFER_MODE_CIRCULAR,
47 	N_DEBUG_BUFFER_MODE
48 } debug_buf_mode_t;
49 
50 struct debug_data_s {
51 	u32			enable;
52 	u32			bufmode;
53 	u32			head;
54 	u32			tail;
55 	u32			buf[DEBUG_BUF_SIZE];
56 };
57 
58 /* thread.sp.c doesn't have a notion of HIVE_ISP_DDR_WORD_BYTES
59    still one point of control is needed for debug purposes */
60 
61 #ifdef HIVE_ISP_DDR_WORD_BYTES
62 struct debug_data_ddr_s {
63 	u32			enable;
64 	s8				padding1[HIVE_ISP_DDR_WORD_BYTES - sizeof(uint32_t)];
65 	u32			bufmode;
66 	s8				padding2[HIVE_ISP_DDR_WORD_BYTES - sizeof(uint32_t)];
67 	u32			head;
68 	s8				padding3[HIVE_ISP_DDR_WORD_BYTES - sizeof(uint32_t)];
69 	u32			tail;
70 	s8				padding4[HIVE_ISP_DDR_WORD_BYTES - sizeof(uint32_t)];
71 	u32			buf[DEBUG_BUF_SIZE];
72 };
73 #endif
74 
75 #endif /* __DEBUG_GLOBAL_H_INCLUDED__ */
76