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 __PIXELGEN_PRIVATE_H_INCLUDED__
17 #define __PIXELGEN_PRIVATE_H_INCLUDED__
18 #include "pixelgen_public.h"
19 #include "PixelGen_SysBlock_defs.h"
20 #include "device_access.h"	/* ia_css_device_load_uint32 */
21 #include "assert_support.h" /* assert */
22 
23 /*****************************************************
24  *
25  * Native command interface (NCI).
26  *
27  *****************************************************/
28 /**
29  * @brief Get the pixelgen state.
30  * Refer to "pixelgen_public.h" for details.
31  */
32 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_get_state(
33     const pixelgen_ID_t ID,
34     pixelgen_ctrl_state_t *state)
35 {
36 	state->com_enable =
37 	    pixelgen_ctrl_reg_load(ID, _PXG_COM_ENABLE_REG_IDX);
38 	state->prbs_rstval0 =
39 	    pixelgen_ctrl_reg_load(ID, _PXG_PRBS_RSTVAL_REG0_IDX);
40 	state->prbs_rstval1 =
41 	    pixelgen_ctrl_reg_load(ID, _PXG_PRBS_RSTVAL_REG1_IDX);
42 	state->syng_sid =
43 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_SID_REG_IDX);
44 	state->syng_free_run =
45 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_FREE_RUN_REG_IDX);
46 	state->syng_pause =
47 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_PAUSE_REG_IDX);
48 	state->syng_nof_frames =
49 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_FRAME_REG_IDX);
50 	state->syng_nof_pixels =
51 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_PIXEL_REG_IDX);
52 	state->syng_nof_line =
53 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_NOF_LINE_REG_IDX);
54 	state->syng_hblank_cyc =
55 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_HBLANK_CYC_REG_IDX);
56 	state->syng_vblank_cyc =
57 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_VBLANK_CYC_REG_IDX);
58 	state->syng_stat_hcnt =
59 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_HCNT_REG_IDX);
60 	state->syng_stat_vcnt =
61 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_VCNT_REG_IDX);
62 	state->syng_stat_fcnt =
63 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_FCNT_REG_IDX);
64 	state->syng_stat_done =
65 	    pixelgen_ctrl_reg_load(ID, _PXG_SYNG_STAT_DONE_REG_IDX);
66 	state->tpg_mode =
67 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_MODE_REG_IDX);
68 	state->tpg_hcnt_mask =
69 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_HCNT_MASK_REG_IDX);
70 	state->tpg_vcnt_mask =
71 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_VCNT_MASK_REG_IDX);
72 	state->tpg_xycnt_mask =
73 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_XYCNT_MASK_REG_IDX);
74 	state->tpg_hcnt_delta =
75 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_HCNT_DELTA_REG_IDX);
76 	state->tpg_vcnt_delta =
77 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_VCNT_DELTA_REG_IDX);
78 	state->tpg_r1 =
79 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_R1_REG_IDX);
80 	state->tpg_g1 =
81 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_G1_REG_IDX);
82 	state->tpg_b1 =
83 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_B1_REG_IDX);
84 	state->tpg_r2 =
85 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_R2_REG_IDX);
86 	state->tpg_g2 =
87 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_G2_REG_IDX);
88 	state->tpg_b2 =
89 	    pixelgen_ctrl_reg_load(ID, _PXG_TPG_B2_REG_IDX);
90 }
91 
92 /**
93  * @brief Dump the pixelgen state.
94  * Refer to "pixelgen_public.h" for details.
95  */
96 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_dump_state(
97     const pixelgen_ID_t ID,
98     pixelgen_ctrl_state_t *state)
99 {
100 	ia_css_print("Pixel Generator ID %d Enable  0x%x\n", ID, state->com_enable);
101 	ia_css_print("Pixel Generator ID %d PRBS reset value 0 0x%x\n", ID,
102 		     state->prbs_rstval0);
103 	ia_css_print("Pixel Generator ID %d PRBS reset value 1 0x%x\n", ID,
104 		     state->prbs_rstval1);
105 	ia_css_print("Pixel Generator ID %d SYNC SID 0x%x\n", ID, state->syng_sid);
106 	ia_css_print("Pixel Generator ID %d syng free run 0x%x\n", ID,
107 		     state->syng_free_run);
108 	ia_css_print("Pixel Generator ID %d syng pause 0x%x\n", ID, state->syng_pause);
109 	ia_css_print("Pixel Generator ID %d syng no of frames 0x%x\n", ID,
110 		     state->syng_nof_frames);
111 	ia_css_print("Pixel Generator ID %d syng no of pixels 0x%x\n", ID,
112 		     state->syng_nof_pixels);
113 	ia_css_print("Pixel Generator ID %d syng no of line 0x%x\n", ID,
114 		     state->syng_nof_line);
115 	ia_css_print("Pixel Generator ID %d syng hblank cyc  0x%x\n", ID,
116 		     state->syng_hblank_cyc);
117 	ia_css_print("Pixel Generator ID %d syng vblank cyc  0x%x\n", ID,
118 		     state->syng_vblank_cyc);
119 	ia_css_print("Pixel Generator ID %d syng stat hcnt  0x%x\n", ID,
120 		     state->syng_stat_hcnt);
121 	ia_css_print("Pixel Generator ID %d syng stat vcnt  0x%x\n", ID,
122 		     state->syng_stat_vcnt);
123 	ia_css_print("Pixel Generator ID %d syng stat fcnt  0x%x\n", ID,
124 		     state->syng_stat_fcnt);
125 	ia_css_print("Pixel Generator ID %d syng stat done  0x%x\n", ID,
126 		     state->syng_stat_done);
127 	ia_css_print("Pixel Generator ID %d tpg modee  0x%x\n", ID, state->tpg_mode);
128 	ia_css_print("Pixel Generator ID %d tpg hcnt mask  0x%x\n", ID,
129 		     state->tpg_hcnt_mask);
130 	ia_css_print("Pixel Generator ID %d tpg hcnt mask  0x%x\n", ID,
131 		     state->tpg_hcnt_mask);
132 	ia_css_print("Pixel Generator ID %d tpg xycnt mask  0x%x\n", ID,
133 		     state->tpg_xycnt_mask);
134 	ia_css_print("Pixel Generator ID %d tpg hcnt delta  0x%x\n", ID,
135 		     state->tpg_hcnt_delta);
136 	ia_css_print("Pixel Generator ID %d tpg vcnt delta  0x%x\n", ID,
137 		     state->tpg_vcnt_delta);
138 	ia_css_print("Pixel Generator ID %d tpg r1 0x%x\n", ID, state->tpg_r1);
139 	ia_css_print("Pixel Generator ID %d tpg g1 0x%x\n", ID, state->tpg_g1);
140 	ia_css_print("Pixel Generator ID %d tpg b1 0x%x\n", ID, state->tpg_b1);
141 	ia_css_print("Pixel Generator ID %d tpg r2 0x%x\n", ID, state->tpg_r2);
142 	ia_css_print("Pixel Generator ID %d tpg g2 0x%x\n", ID, state->tpg_g2);
143 	ia_css_print("Pixel Generator ID %d tpg b2 0x%x\n", ID, state->tpg_b2);
144 }
145 
146 /* end of NCI */
147 /*****************************************************
148  *
149  * Device level interface (DLI).
150  *
151  *****************************************************/
152 /**
153  * @brief Load the register value.
154  * Refer to "pixelgen_public.h" for details.
155  */
156 STORAGE_CLASS_PIXELGEN_C hrt_data pixelgen_ctrl_reg_load(
157     const pixelgen_ID_t ID,
158     const hrt_address reg)
159 {
160 	assert(ID < N_PIXELGEN_ID);
161 	assert(PIXELGEN_CTRL_BASE[ID] != (hrt_address) - 1);
162 	return ia_css_device_load_uint32(PIXELGEN_CTRL_BASE[ID] + reg * sizeof(
163 					     hrt_data));
164 }
165 
166 /**
167  * @brief Store a value to the register.
168  * Refer to "pixelgen_ctrl_public.h" for details.
169  */
170 STORAGE_CLASS_PIXELGEN_C void pixelgen_ctrl_reg_store(
171     const pixelgen_ID_t ID,
172     const hrt_address reg,
173     const hrt_data value)
174 {
175 	assert(ID < N_PIXELGEN_ID);
176 	assert(PIXELGEN_CTRL_BASE[ID] != (hrt_address)-1);
177 
178 	ia_css_device_store_uint32(PIXELGEN_CTRL_BASE[ID] + reg * sizeof(hrt_data),
179 				   value);
180 }
181 
182 /* end of DLI */
183 #endif /* __PIXELGEN_PRIVATE_H_INCLUDED__ */
184