1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef _SH_CSS_INTERNAL_H_
17#define _SH_CSS_INTERNAL_H_
18
19#include <system_global.h>
20#include <math_support.h>
21#include <type_support.h>
22#include <platform_support.h>
23#include <linux/stdarg.h>
24
25#if !defined(ISP2401)
26#include "input_formatter.h"
27#endif
28#include "input_system.h"
29
30#include "ia_css_types.h"
31#include "ia_css_acc_types.h"
32#include "ia_css_buffer.h"
33
34#include "ia_css_binary.h"
35#include "sh_css_firmware.h"
36#include "sh_css_legacy.h"
37#include "sh_css_defs.h"
38#include "sh_css_uds.h"
39#include "dma.h"
40#include "ia_css_circbuf_comm.h"
41#include "ia_css_frame_comm.h"
42#include "ia_css_3a.h"
43#include "ia_css_dvs.h"
44#include "ia_css_metadata.h"
45#include "runtime/bufq/interface/ia_css_bufq.h"
46#include "ia_css_timer.h"
47
48
49#define IA_CSS_NUM_CB_SEM_READ_RESOURCE 2
50#define IA_CSS_NUM_CB_SEM_WRITE_RESOURCE 1
51#define IA_CSS_NUM_CBS 2
52#define IA_CSS_CB_MAX_ELEMS 2
53
54
55
56
57
58#define IA_CSS_COPYSINK_SEM_INDEX 0
59#define IA_CSS_TAGGER_SEM_INDEX 1
60
61
62#define IA_CSS_POST_OUT_EVENT_FORCE 2
63
64#define SH_CSS_MAX_BINARY_NAME 64
65
66#define SP_DEBUG_NONE (0)
67#define SP_DEBUG_DUMP (1)
68#define SP_DEBUG_COPY (2)
69#define SP_DEBUG_TRACE (3)
70#define SP_DEBUG_MINIMAL (4)
71
72#define SP_DEBUG SP_DEBUG_NONE
73#define SP_DEBUG_MINIMAL_OVERWRITE 1
74
75#define SH_CSS_TNR_BIT_DEPTH 8
76#define SH_CSS_REF_BIT_DEPTH 8
77
78
79#define NUM_CONTINUOUS_FRAMES 15
80#define NUM_MIPI_FRAMES_PER_STREAM 2
81
82#define NUM_ONLINE_INIT_CONTINUOUS_FRAMES 2
83
84#define NR_OF_PIPELINES IA_CSS_PIPE_ID_NUM
85
86#define SH_CSS_MAX_IF_CONFIGS 3
87#define SH_CSS_IF_CONFIG_NOT_NEEDED 0xFF
88
89#define SH_CSS_ENABLE_METADATA
90
91#if defined(SH_CSS_ENABLE_METADATA) && !defined(ISP2401)
92#define SH_CSS_ENABLE_METADATA_THREAD
93#endif
94
95
96
97
98
99
100
101
102
103
104#if defined(SH_CSS_ENABLE_METADATA_THREAD)
105#define SH_CSS_SP_INTERNAL_METADATA_THREAD 1
106#else
107#define SH_CSS_SP_INTERNAL_METADATA_THREAD 0
108#endif
109
110#define SH_CSS_SP_INTERNAL_SERVICE_THREAD 1
111
112#define SH_CSS_MAX_SP_THREADS 5
113
114#define SH_CSS_MAX_SP_INTERNAL_THREADS (\
115 SH_CSS_SP_INTERNAL_SERVICE_THREAD +\
116 SH_CSS_SP_INTERNAL_METADATA_THREAD)
117
118#define SH_CSS_MAX_PIPELINES SH_CSS_MAX_SP_THREADS
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136#define CALC_ALIGNMENT_MEMBER(x, y) (CEIL_MUL(x, y) - x)
137#define SIZE_OF_HRT_VADDRESS sizeof(hive_uint32)
138#define SIZE_OF_IA_CSS_PTR sizeof(uint32_t)
139
140
141#define NUM_OF_SPS 1
142
143#define NUM_OF_BLS 0
144
145
146enum sh_css_order_binaries {
147 SP_FIRMWARE = 0,
148 ISP_FIRMWARE
149};
150
151
152
153
154
155enum sh_css_pipe_config_override {
156 SH_CSS_PIPE_CONFIG_OVRD_NONE = 0,
157 SH_CSS_PIPE_CONFIG_OVRD_NO_OVRD = 0xffff
158};
159
160enum host2sp_commands {
161 host2sp_cmd_error = 0,
162
163
164
165
166
167
168
169 host2sp_cmd_ready = 1,
170
171 host2sp_cmd_dummy,
172 host2sp_cmd_start_flash,
173 host2sp_cmd_terminate,
174 N_host2sp_cmd
175};
176
177
178
179
180
181
182
183
184
185
186enum sh_css_sp_event_type {
187 SH_CSS_SP_EVENT_OUTPUT_FRAME_DONE,
188 SH_CSS_SP_EVENT_SECOND_OUTPUT_FRAME_DONE,
189 SH_CSS_SP_EVENT_VF_OUTPUT_FRAME_DONE,
190 SH_CSS_SP_EVENT_SECOND_VF_OUTPUT_FRAME_DONE,
191 SH_CSS_SP_EVENT_3A_STATISTICS_DONE,
192 SH_CSS_SP_EVENT_DIS_STATISTICS_DONE,
193 SH_CSS_SP_EVENT_PIPELINE_DONE,
194 SH_CSS_SP_EVENT_FRAME_TAGGED,
195 SH_CSS_SP_EVENT_INPUT_FRAME_DONE,
196 SH_CSS_SP_EVENT_METADATA_DONE,
197 SH_CSS_SP_EVENT_LACE_STATISTICS_DONE,
198 SH_CSS_SP_EVENT_ACC_STAGE_COMPLETE,
199 SH_CSS_SP_EVENT_TIMER,
200 SH_CSS_SP_EVENT_PORT_EOF,
201 SH_CSS_SP_EVENT_FW_WARNING,
202 SH_CSS_SP_EVENT_FW_ASSERT,
203 SH_CSS_SP_EVENT_NR_OF_TYPES
204};
205
206
207
208
209
210struct sh_css_ddr_address_map {
211 ia_css_ptr isp_param;
212 ia_css_ptr isp_mem_param[SH_CSS_MAX_STAGES][IA_CSS_NUM_MEMORIES];
213 ia_css_ptr macc_tbl;
214 ia_css_ptr fpn_tbl;
215 ia_css_ptr sc_tbl;
216 ia_css_ptr tetra_r_x;
217 ia_css_ptr tetra_r_y;
218 ia_css_ptr tetra_gr_x;
219 ia_css_ptr tetra_gr_y;
220 ia_css_ptr tetra_gb_x;
221 ia_css_ptr tetra_gb_y;
222 ia_css_ptr tetra_b_x;
223 ia_css_ptr tetra_b_y;
224 ia_css_ptr tetra_ratb_x;
225 ia_css_ptr tetra_ratb_y;
226 ia_css_ptr tetra_batr_x;
227 ia_css_ptr tetra_batr_y;
228 ia_css_ptr dvs_6axis_params_y;
229};
230
231#define SIZE_OF_SH_CSS_DDR_ADDRESS_MAP_STRUCT \
232 (SIZE_OF_HRT_VADDRESS + \
233 (SH_CSS_MAX_STAGES * IA_CSS_NUM_MEMORIES * SIZE_OF_HRT_VADDRESS) + \
234 (16 * SIZE_OF_HRT_VADDRESS))
235
236
237struct sh_css_ddr_address_map_size {
238 size_t isp_param;
239 size_t isp_mem_param[SH_CSS_MAX_STAGES][IA_CSS_NUM_MEMORIES];
240 size_t macc_tbl;
241 size_t fpn_tbl;
242 size_t sc_tbl;
243 size_t tetra_r_x;
244 size_t tetra_r_y;
245 size_t tetra_gr_x;
246 size_t tetra_gr_y;
247 size_t tetra_gb_x;
248 size_t tetra_gb_y;
249 size_t tetra_b_x;
250 size_t tetra_b_y;
251 size_t tetra_ratb_x;
252 size_t tetra_ratb_y;
253 size_t tetra_batr_x;
254 size_t tetra_batr_y;
255 size_t dvs_6axis_params_y;
256};
257
258struct sh_css_ddr_address_map_compound {
259 struct sh_css_ddr_address_map map;
260 struct sh_css_ddr_address_map_size size;
261};
262
263struct ia_css_isp_parameter_set_info {
264 struct sh_css_ddr_address_map
265 mem_map;
266
267 u32
268 isp_parameters_id;
269 ia_css_ptr
270 output_frame_ptr;
271};
272
273
274
275struct sh_css_binary_args {
276 struct ia_css_frame *in_frame;
277 const struct ia_css_frame
278 *delay_frames[MAX_NUM_VIDEO_DELAY_FRAMES];
279 const struct ia_css_frame *tnr_frames[NUM_TNR_FRAMES];
280 struct ia_css_frame
281 *out_frame[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
282 struct ia_css_frame *out_vf_frame;
283 bool copy_vf;
284 bool copy_output;
285 unsigned int vf_downscale_log2;
286};
287
288#if SP_DEBUG == SP_DEBUG_DUMP
289
290#define SH_CSS_NUM_SP_DEBUG 48
291
292struct sh_css_sp_debug_state {
293 unsigned int error;
294 unsigned int debug[SH_CSS_NUM_SP_DEBUG];
295};
296
297#elif SP_DEBUG == SP_DEBUG_COPY
298
299#define SH_CSS_SP_DBG_TRACE_DEPTH (40)
300
301struct sh_css_sp_debug_trace {
302 u16 frame;
303 u16 line;
304 u16 pixel_distance;
305 u16 mipi_used_dword;
306 u16 sp_index;
307};
308
309struct sh_css_sp_debug_state {
310 u16 if_start_line;
311 u16 if_start_column;
312 u16 if_cropped_height;
313 u16 if_cropped_width;
314 unsigned int index;
315 struct sh_css_sp_debug_trace
316 trace[SH_CSS_SP_DBG_TRACE_DEPTH];
317};
318
319#elif SP_DEBUG == SP_DEBUG_TRACE
320
321
322#define SH_CSS_SP_DBG_NR_OF_TRACES (1)
323#define SH_CSS_SP_DBG_TRACE_DEPTH (40)
324
325#define SH_CSS_SP_DBG_TRACE_FILE_ID_BIT_POS (13)
326
327struct sh_css_sp_debug_trace {
328 u16 time_stamp;
329 u16 location;
330 u32 data;
331};
332
333struct sh_css_sp_debug_state {
334 struct sh_css_sp_debug_trace
335 trace[SH_CSS_SP_DBG_NR_OF_TRACES][SH_CSS_SP_DBG_TRACE_DEPTH];
336 u16 index_last[SH_CSS_SP_DBG_NR_OF_TRACES];
337 u8 index[SH_CSS_SP_DBG_NR_OF_TRACES];
338};
339
340#elif SP_DEBUG == SP_DEBUG_MINIMAL
341
342#define SH_CSS_NUM_SP_DEBUG 128
343
344struct sh_css_sp_debug_state {
345 unsigned int error;
346 unsigned int debug[SH_CSS_NUM_SP_DEBUG];
347};
348
349#endif
350
351struct sh_css_sp_debug_command {
352
353
354
355
356
357
358
359
360
361
362
363 u32 dma_sw_reg;
364};
365
366#if !defined(ISP2401)
367
368struct sh_css_sp_input_formatter_set {
369 u32 stream_format;
370 input_formatter_cfg_t config_a;
371 input_formatter_cfg_t config_b;
372};
373#endif
374
375#define IA_CSS_MIPI_SIZE_CHECK_MAX_NOF_ENTRIES_PER_PORT (3)
376
377
378struct sh_css_sp_config {
379 u8 no_isp_sync;
380 u8 enable_raw_pool_locking;
381 u8 lock_all;
382
383
384
385
386#if !defined(ISP2401)
387 struct {
388 u8 a_changed;
389 u8 b_changed;
390 u8 isp_2ppc;
391 struct sh_css_sp_input_formatter_set
392 set[SH_CSS_MAX_IF_CONFIGS];
393 } input_formatter;
394#endif
395#if !defined(ISP2401)
396 sync_generator_cfg_t sync_gen;
397 tpg_cfg_t tpg;
398 prbs_cfg_t prbs;
399 input_system_cfg_t input_circuit;
400 u8 input_circuit_cfg_changed;
401 u32 mipi_sizes_for_check[N_CSI_PORTS][IA_CSS_MIPI_SIZE_CHECK_MAX_NOF_ENTRIES_PER_PORT];
402#endif
403 u8 enable_isys_event_queue;
404 u8 disable_cont_vf;
405};
406
407enum sh_css_stage_type {
408 SH_CSS_SP_STAGE_TYPE = 0,
409 SH_CSS_ISP_STAGE_TYPE = 1
410};
411
412#define SH_CSS_NUM_STAGE_TYPES 2
413
414#define SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS BIT(0)
415#define SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS_MASK \
416 ((SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << SH_CSS_MAX_SP_THREADS) - 1)
417
418#if defined(ISP2401)
419struct sh_css_sp_pipeline_terminal {
420 union {
421
422 virtual_input_system_stream_t
423 virtual_input_system_stream[IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH];
424 } context;
425
426
427
428
429 union {
430
431 virtual_input_system_stream_cfg_t
432 virtual_input_system_stream_cfg[IA_CSS_STREAM_MAX_ISYS_STREAM_PER_CH];
433 } ctrl;
434};
435
436struct sh_css_sp_pipeline_io {
437 struct sh_css_sp_pipeline_terminal input;
438
439
440};
441
442
443
444
445
446struct sh_css_sp_pipeline_io_status {
447 u32 active[N_INPUT_SYSTEM_CSI_PORT];
448 u32 running[N_INPUT_SYSTEM_CSI_PORT];
449};
450
451#endif
452enum sh_css_port_dir {
453 SH_CSS_PORT_INPUT = 0,
454 SH_CSS_PORT_OUTPUT = 1
455};
456
457enum sh_css_port_type {
458 SH_CSS_HOST_TYPE = 0,
459 SH_CSS_COPYSINK_TYPE = 1,
460 SH_CSS_TAGGERSINK_TYPE = 2
461};
462
463
464#define SH_CSS_PORT_FLD_WIDTH_IN_BITS (4)
465#define SH_CSS_PORT_TYPE_BIT_FLD(pt) (0x1 << (pt))
466#define SH_CSS_PORT_FLD(pd) ((pd) ? SH_CSS_PORT_FLD_WIDTH_IN_BITS : 0)
467#define SH_CSS_PIPE_PORT_CONFIG_ON(p, pd, pt) ((p) |= (SH_CSS_PORT_TYPE_BIT_FLD(pt) << SH_CSS_PORT_FLD(pd)))
468#define SH_CSS_PIPE_PORT_CONFIG_OFF(p, pd, pt) ((p) &= ~(SH_CSS_PORT_TYPE_BIT_FLD(pt) << SH_CSS_PORT_FLD(pd)))
469#define SH_CSS_PIPE_PORT_CONFIG_SET(p, pd, pt, val) ((val) ? \
470 SH_CSS_PIPE_PORT_CONFIG_ON(p, pd, pt) : SH_CSS_PIPE_PORT_CONFIG_OFF(p, pd, pt))
471#define SH_CSS_PIPE_PORT_CONFIG_GET(p, pd, pt) ((p) & (SH_CSS_PORT_TYPE_BIT_FLD(pt) << SH_CSS_PORT_FLD(pd)))
472#define SH_CSS_PIPE_PORT_CONFIG_IS_CONTINUOUS(p) \
473 (!(SH_CSS_PIPE_PORT_CONFIG_GET(p, SH_CSS_PORT_INPUT, SH_CSS_HOST_TYPE) && \
474 SH_CSS_PIPE_PORT_CONFIG_GET(p, SH_CSS_PORT_OUTPUT, SH_CSS_HOST_TYPE)))
475
476#define IA_CSS_ACQUIRE_ISP_POS 31
477
478
479#define SH_CSS_METADATA_ENABLED 0x01
480#define SH_CSS_METADATA_PROCESSED 0x02
481#define SH_CSS_METADATA_OFFLINE_MODE 0x04
482#define SH_CSS_METADATA_WAIT_INPUT 0x08
483
484
485
486
487
488
489
490
491void
492ia_css_metadata_free_multiple(unsigned int num_bufs,
493 struct ia_css_metadata **bufs);
494
495
496#define QOS_INVALID (~0U)
497#define QOS_ALL_STAGES_DISABLED (0U)
498#define QOS_STAGE_MASK(num) (0x00000001 << num)
499#define SH_CSS_IS_QOS_PIPE(pipe) ((pipe)->pipe_qos_config != QOS_INVALID)
500#define SH_CSS_QOS_STAGE_ENABLE(pipe, num) ((pipe)->pipe_qos_config |= QOS_STAGE_MASK(num))
501#define SH_CSS_QOS_STAGE_DISABLE(pipe, num) ((pipe)->pipe_qos_config &= ~QOS_STAGE_MASK(num))
502#define SH_CSS_QOS_STAGE_IS_ENABLED(pipe, num) ((pipe)->pipe_qos_config & QOS_STAGE_MASK(num))
503#define SH_CSS_QOS_STAGE_IS_ALL_DISABLED(pipe) ((pipe)->pipe_qos_config == QOS_ALL_STAGES_DISABLED)
504#define SH_CSS_QOS_MODE_PIPE_ADD(mode, pipe) ((mode) |= (0x1 << (pipe)->pipe_id))
505#define SH_CSS_QOS_MODE_PIPE_REMOVE(mode, pipe) ((mode) &= ~(0x1 << (pipe)->pipe_id))
506#define SH_CSS_IS_QOS_ONLY_MODE(mode) ((mode) == (0x1 << IA_CSS_PIPE_ID_ACC))
507
508
509struct sh_css_sp_pipeline {
510 u32 pipe_id;
511 u32 pipe_num;
512 u32 thread_id;
513 u32 pipe_config;
514 u32 pipe_qos_config;
515
516 u32 inout_port_config;
517 u32 required_bds_factor;
518 u32 dvs_frame_delay;
519 u32 input_system_mode;
520 u32 port_id;
521 u32 num_stages;
522 u32 running;
523 ia_css_ptr sp_stage_addr[SH_CSS_MAX_STAGES];
524 ia_css_ptr scaler_pp_lut;
525 u32 dummy;
526
527 s32 num_execs;
528
529#if defined(SH_CSS_ENABLE_METADATA)
530 struct {
531 u32 format;
532 u32 width;
533 u32 height;
534 u32 stride;
535 u32 size;
536 ia_css_ptr cont_buf;
537 } metadata;
538#endif
539#if defined(SH_CSS_ENABLE_PER_FRAME_PARAMS)
540 u32 output_frame_queue_id;
541#endif
542 union {
543 struct {
544 u32 bytes_available;
545 } bin;
546 struct {
547 u32 height;
548 u32 width;
549 u32 padded_width;
550 u32 max_input_width;
551 u32 raw_bit_depth;
552 } raw;
553 } copy;
554
555
556
557
558 struct {
559 u32 internal_frame_origin_x_bqs_on_sctbl;
560 u32 internal_frame_origin_y_bqs_on_sctbl;
561 } shading;
562};
563
564
565
566
567
568
569
570
571
572
573#define SH_CSS_NUM_DYNAMIC_FRAME_IDS (3)
574
575struct ia_css_frames_sp {
576 struct ia_css_frame_sp in;
577 struct ia_css_frame_sp out[IA_CSS_BINARY_MAX_OUTPUT_PORTS];
578 struct ia_css_resolution effective_in_res;
579 struct ia_css_frame_sp out_vf;
580 struct ia_css_frame_sp_info internal_frame_info;
581 struct ia_css_buffer_sp s3a_buf;
582 struct ia_css_buffer_sp dvs_buf;
583#if defined SH_CSS_ENABLE_METADATA
584 struct ia_css_buffer_sp metadata_buf;
585#endif
586};
587
588
589struct sh_css_isp_stage {
590
591
592
593
594
595
596
597
598 struct ia_css_blob_info blob_info;
599 struct ia_css_binary_info binary_info;
600 char binary_name[SH_CSS_MAX_BINARY_NAME];
601 struct ia_css_isp_param_css_segments mem_initializers;
602};
603
604
605struct sh_css_sp_stage {
606
607
608
609
610
611
612
613
614 u8 num;
615 u8 isp_online;
616 u8 isp_copy_vf;
617 u8 isp_copy_output;
618 u8 sp_enable_xnr;
619 u8 isp_deci_log_factor;
620 u8 isp_vf_downscale_bits;
621 u8 deinterleaved;
622
623
624
625
626
627 u8 program_input_circuit;
628
629 u8 func;
630
631
632 u8 stage_type;
633 u8 num_stripes;
634 u8 isp_pipe_version;
635 struct {
636 u8 vf_output;
637 u8 s3a;
638 u8 sdis;
639 u8 dvs_stats;
640 u8 lace_stats;
641 } enable;
642
643
644
645 struct sh_css_crop_pos sp_out_crop_pos;
646 struct ia_css_frames_sp frames;
647 struct ia_css_resolution dvs_envelope;
648 struct sh_css_uds_info uds;
649 ia_css_ptr isp_stage_addr;
650 ia_css_ptr xmem_bin_addr;
651 ia_css_ptr xmem_map_addr;
652
653 u16 top_cropping;
654 u16 row_stripes_height;
655 u16 row_stripes_overlap_lines;
656 u8 if_config_index;
657};
658
659
660
661
662
663
664
665
666
667
668
669
670
671struct sh_css_sp_group {
672 struct sh_css_sp_config config;
673 struct sh_css_sp_pipeline pipe[SH_CSS_MAX_SP_THREADS];
674#if defined(ISP2401)
675 struct sh_css_sp_pipeline_io pipe_io[SH_CSS_MAX_SP_THREADS];
676 struct sh_css_sp_pipeline_io_status pipe_io_status;
677#endif
678 struct sh_css_sp_debug_command debug;
679};
680
681
682struct sh_css_sp_per_frame_data {
683
684 ia_css_ptr sp_group_addr;
685};
686
687#define SH_CSS_NUM_SDW_IRQS 3
688
689
690struct sh_css_sp_output {
691 unsigned int bin_copy_bytes_copied;
692#if SP_DEBUG != SP_DEBUG_NONE
693 struct sh_css_sp_debug_state debug;
694#endif
695 unsigned int sw_interrupt_value[SH_CSS_NUM_SDW_IRQS];
696};
697
698#define CONFIG_ON_FRAME_ENQUEUE() 0
699
700
701
702
703
704
705
706
707#define IA_CSS_NUM_ELEMS_HOST2SP_BUFFER_QUEUE 6
708#define IA_CSS_NUM_ELEMS_HOST2SP_PARAM_QUEUE 3
709#define IA_CSS_NUM_ELEMS_HOST2SP_TAG_CMD_QUEUE 6
710
711
712
713
714#define IA_CSS_NUM_ELEMS_SP2HOST_ISYS_EVENT_QUEUE (2 * N_CSI_PORTS)
715
716
717
718#define IA_CSS_NUM_ELEMS_HOST2SP_ISYS_EVENT_QUEUE (2 * N_CSI_PORTS)
719
720#define IA_CSS_NUM_ELEMS_HOST2SP_PSYS_EVENT_QUEUE 13
721#define IA_CSS_NUM_ELEMS_SP2HOST_BUFFER_QUEUE 19
722#define IA_CSS_NUM_ELEMS_SP2HOST_PSYS_EVENT_QUEUE 26
723
724struct sh_css_hmm_buffer {
725 union {
726 struct ia_css_isp_3a_statistics s3a;
727 struct ia_css_isp_dvs_statistics dis;
728 ia_css_ptr skc_dvs_statistics;
729 ia_css_ptr lace_stat;
730 struct ia_css_metadata metadata;
731 struct frame_data_wrapper {
732 ia_css_ptr frame_data;
733 u32 flashed;
734 u32 exp_id;
735 u32 isp_parameters_id;
736
737#if CONFIG_ON_FRAME_ENQUEUE()
738 struct sh_css_config_on_frame_enqueue config_on_frame_enqueue;
739#endif
740 } frame;
741 ia_css_ptr ddr_ptrs;
742 } payload;
743
744
745
746
747
748
749 CSS_ALIGN(u64 cookie_ptr, 8);
750 u64 kernel_ptr;
751 struct ia_css_time_meas timing_data;
752 clock_value_t isys_eof_clock_tick;
753};
754
755#if CONFIG_ON_FRAME_ENQUEUE()
756#define SIZE_OF_FRAME_STRUCT \
757 (SIZE_OF_HRT_VADDRESS + \
758 (3 * sizeof(uint32_t)) + \
759 sizeof(uint32_t))
760#else
761#define SIZE_OF_FRAME_STRUCT \
762 (SIZE_OF_HRT_VADDRESS + \
763 (3 * sizeof(uint32_t)))
764#endif
765
766#define SIZE_OF_PAYLOAD_UNION \
767 (MAX(MAX(MAX(MAX( \
768 SIZE_OF_IA_CSS_ISP_3A_STATISTICS_STRUCT, \
769 SIZE_OF_IA_CSS_ISP_DVS_STATISTICS_STRUCT), \
770 SIZE_OF_IA_CSS_METADATA_STRUCT), \
771 SIZE_OF_FRAME_STRUCT), \
772 SIZE_OF_HRT_VADDRESS))
773
774
775#define SIZE_OF_SH_CSS_HMM_BUFFER_STRUCT \
776 (SIZE_OF_PAYLOAD_UNION + \
777 CALC_ALIGNMENT_MEMBER(SIZE_OF_PAYLOAD_UNION, 8) + \
778 8 + \
779 8 + \
780 SIZE_OF_IA_CSS_TIME_MEAS_STRUCT + \
781 SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT + \
782 CALC_ALIGNMENT_MEMBER(SIZE_OF_IA_CSS_CLOCK_TICK_STRUCT, 8))
783
784enum sh_css_queue_type {
785 sh_css_invalid_queue_type = -1,
786 sh_css_host2sp_buffer_queue,
787 sh_css_sp2host_buffer_queue,
788 sh_css_host2sp_psys_event_queue,
789 sh_css_sp2host_psys_event_queue,
790 sh_css_sp2host_isys_event_queue,
791 sh_css_host2sp_isys_event_queue,
792 sh_css_host2sp_tag_cmd_queue,
793};
794
795struct sh_css_event_irq_mask {
796 u16 or_mask;
797 u16 and_mask;
798};
799
800#define SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT \
801 (2 * sizeof(uint16_t))
802
803struct host_sp_communication {
804
805
806
807
808 u32 host2sp_command;
809
810
811
812
813
814
815
816
817
818
819
820 ia_css_ptr host2sp_offline_frames[NUM_CONTINUOUS_FRAMES];
821 ia_css_ptr host2sp_offline_metadata[NUM_CONTINUOUS_FRAMES];
822
823 ia_css_ptr host2sp_mipi_frames[N_CSI_PORTS][NUM_MIPI_FRAMES_PER_STREAM];
824 ia_css_ptr host2sp_mipi_metadata[N_CSI_PORTS][NUM_MIPI_FRAMES_PER_STREAM];
825 u32 host2sp_num_mipi_frames[N_CSI_PORTS];
826 u32 host2sp_cont_avail_num_raw_frames;
827 u32 host2sp_cont_extra_num_raw_frames;
828 u32 host2sp_cont_target_num_raw_frames;
829 struct sh_css_event_irq_mask host2sp_event_irq_mask[NR_OF_PIPELINES];
830
831};
832
833#define SIZE_OF_HOST_SP_COMMUNICATION_STRUCT \
834 (sizeof(uint32_t) + \
835 (NUM_CONTINUOUS_FRAMES * SIZE_OF_HRT_VADDRESS * 2) + \
836 (N_CSI_PORTS * NUM_MIPI_FRAMES_PER_STREAM * SIZE_OF_HRT_VADDRESS * 2) + \
837 ((3 + N_CSI_PORTS) * sizeof(uint32_t)) + \
838 (NR_OF_PIPELINES * SIZE_OF_SH_CSS_EVENT_IRQ_MASK_STRUCT))
839
840struct host_sp_queues {
841
842
843
844
845
846 ia_css_circbuf_desc_t host2sp_buffer_queues_desc
847 [SH_CSS_MAX_SP_THREADS][SH_CSS_MAX_NUM_QUEUES];
848 ia_css_circbuf_elem_t host2sp_buffer_queues_elems
849 [SH_CSS_MAX_SP_THREADS][SH_CSS_MAX_NUM_QUEUES]
850 [IA_CSS_NUM_ELEMS_HOST2SP_BUFFER_QUEUE];
851 ia_css_circbuf_desc_t sp2host_buffer_queues_desc
852 [SH_CSS_MAX_NUM_QUEUES];
853 ia_css_circbuf_elem_t sp2host_buffer_queues_elems
854 [SH_CSS_MAX_NUM_QUEUES][IA_CSS_NUM_ELEMS_SP2HOST_BUFFER_QUEUE];
855
856
857
858
859 ia_css_circbuf_desc_t host2sp_psys_event_queue_desc;
860
861 ia_css_circbuf_elem_t host2sp_psys_event_queue_elems
862 [IA_CSS_NUM_ELEMS_HOST2SP_PSYS_EVENT_QUEUE];
863 ia_css_circbuf_desc_t sp2host_psys_event_queue_desc;
864
865 ia_css_circbuf_elem_t sp2host_psys_event_queue_elems
866 [IA_CSS_NUM_ELEMS_SP2HOST_PSYS_EVENT_QUEUE];
867
868
869
870
871 ia_css_circbuf_desc_t host2sp_isys_event_queue_desc;
872
873 ia_css_circbuf_elem_t host2sp_isys_event_queue_elems
874 [IA_CSS_NUM_ELEMS_HOST2SP_ISYS_EVENT_QUEUE];
875 ia_css_circbuf_desc_t sp2host_isys_event_queue_desc;
876
877 ia_css_circbuf_elem_t sp2host_isys_event_queue_elems
878 [IA_CSS_NUM_ELEMS_SP2HOST_ISYS_EVENT_QUEUE];
879
880
881
882
883 ia_css_circbuf_desc_t host2sp_tag_cmd_queue_desc;
884
885 ia_css_circbuf_elem_t host2sp_tag_cmd_queue_elems
886 [IA_CSS_NUM_ELEMS_HOST2SP_TAG_CMD_QUEUE];
887};
888
889#define SIZE_OF_QUEUES_ELEMS \
890 (SIZE_OF_IA_CSS_CIRCBUF_ELEM_S_STRUCT * \
891 ((SH_CSS_MAX_SP_THREADS * SH_CSS_MAX_NUM_QUEUES * IA_CSS_NUM_ELEMS_HOST2SP_BUFFER_QUEUE) + \
892 (SH_CSS_MAX_NUM_QUEUES * IA_CSS_NUM_ELEMS_SP2HOST_BUFFER_QUEUE) + \
893 (IA_CSS_NUM_ELEMS_HOST2SP_PSYS_EVENT_QUEUE) + \
894 (IA_CSS_NUM_ELEMS_SP2HOST_PSYS_EVENT_QUEUE) + \
895 (IA_CSS_NUM_ELEMS_HOST2SP_ISYS_EVENT_QUEUE) + \
896 (IA_CSS_NUM_ELEMS_SP2HOST_ISYS_EVENT_QUEUE) + \
897 (IA_CSS_NUM_ELEMS_HOST2SP_TAG_CMD_QUEUE)))
898
899#define IA_CSS_NUM_CIRCBUF_DESCS 5
900
901#define SIZE_OF_QUEUES_DESC \
902 ((SH_CSS_MAX_SP_THREADS * SH_CSS_MAX_NUM_QUEUES * \
903 SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT) + \
904 (SH_CSS_MAX_NUM_QUEUES * SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT) + \
905 (IA_CSS_NUM_CIRCBUF_DESCS * SIZE_OF_IA_CSS_CIRCBUF_DESC_S_STRUCT))
906
907#define SIZE_OF_HOST_SP_QUEUES_STRUCT \
908 (SIZE_OF_QUEUES_ELEMS + SIZE_OF_QUEUES_DESC)
909
910extern int __printf(1, 0) (*sh_css_printf)(const char *fmt, va_list args);
911
912static inline void __printf(1, 2) sh_css_print(const char *fmt, ...)
913{
914 va_list ap;
915
916 if (sh_css_printf) {
917 va_start(ap, fmt);
918 sh_css_printf(fmt, ap);
919 va_end(ap);
920 }
921}
922
923static inline void __printf(1, 0) sh_css_vprint(const char *fmt, va_list args)
924{
925 if (sh_css_printf)
926 sh_css_printf(fmt, args);
927}
928
929
930
931
932
933
934ia_css_ptr sh_css_params_ddr_address_map(void);
935
936int
937sh_css_params_init(void);
938
939void
940sh_css_params_uninit(void);
941
942
943void sh_css_flush(struct ia_css_acc_fw *fw);
944
945void
946sh_css_binary_args_reset(struct sh_css_binary_args *args);
947
948
949bool
950sh_css_frame_equal_types(const struct ia_css_frame *frame_a,
951 const struct ia_css_frame *frame_b);
952
953bool
954sh_css_frame_info_equal_resolution(const struct ia_css_frame_info *info_a,
955 const struct ia_css_frame_info *info_b);
956
957void
958sh_css_capture_enable_bayer_downscaling(bool enable);
959
960void
961sh_css_binary_print(const struct ia_css_binary *binary);
962
963
964
965void
966sh_css_frame_info_set_width(struct ia_css_frame_info *info,
967 unsigned int width,
968 unsigned int aligned);
969
970#if !defined(ISP2401)
971
972unsigned int
973sh_css_get_mipi_sizes_for_check(const unsigned int port,
974 const unsigned int idx);
975
976#endif
977
978ia_css_ptr
979sh_css_store_sp_group_to_ddr(void);
980
981ia_css_ptr
982sh_css_store_sp_stage_to_ddr(unsigned int pipe, unsigned int stage);
983
984ia_css_ptr
985sh_css_store_isp_stage_to_ddr(unsigned int pipe, unsigned int stage);
986
987void
988sh_css_update_uds_and_crop_info(
989 const struct ia_css_binary_info *info,
990 const struct ia_css_frame_info *in_frame_info,
991 const struct ia_css_frame_info *out_frame_info,
992 const struct ia_css_resolution *dvs_env,
993 const struct ia_css_dz_config *zoom,
994 const struct ia_css_vector *motion_vector,
995 struct sh_css_uds_info *uds,
996 struct sh_css_crop_pos *sp_out_crop_pos,
997
998 bool enable_zoom
999);
1000
1001void
1002sh_css_invalidate_shading_tables(struct ia_css_stream *stream);
1003
1004struct ia_css_pipeline *
1005ia_css_pipe_get_pipeline(const struct ia_css_pipe *pipe);
1006
1007unsigned int
1008ia_css_pipe_get_pipe_num(const struct ia_css_pipe *pipe);
1009
1010unsigned int
1011ia_css_pipe_get_isp_pipe_version(const struct ia_css_pipe *pipe);
1012
1013bool
1014sh_css_continuous_is_enabled(uint8_t pipe_num);
1015
1016struct ia_css_pipe *
1017find_pipe_by_num(uint32_t pipe_num);
1018
1019#ifdef ISP2401
1020void
1021ia_css_get_crop_offsets(
1022 struct ia_css_pipe *pipe,
1023 struct ia_css_frame_info *in_frame);
1024#endif
1025
1026#endif
1027