1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Support for Intel Camera Imaging ISP subsystem.
4 * Copyright (c) 2010 - 2015, Intel Corporation.
5 */
6
7 #include "input_system.h"
8
9 #include "ia_css_isys.h"
10 #include "platform_support.h"
11
12 #include "isys_dma_public.h" /* isys2401_dma_set_max_burst_size() */
13 #include "isys_irq.h"
14
ia_css_isys_2400_init(void)15 static input_system_err_t ia_css_isys_2400_init(void)
16 {
17 backend_channel_cfg_t backend_ch0;
18 backend_channel_cfg_t backend_ch1;
19 target_cfg2400_t targetB;
20 target_cfg2400_t targetC;
21 u32 acq_mem_region_size = 24;
22 u32 acq_nof_mem_regions = 2;
23 input_system_err_t error = INPUT_SYSTEM_ERR_NO_ERROR;
24
25 memset(&backend_ch0, 0, sizeof(backend_channel_cfg_t));
26 memset(&backend_ch1, 0, sizeof(backend_channel_cfg_t));
27 memset(&targetB, 0, sizeof(targetB));
28 memset(&targetC, 0, sizeof(targetC));
29
30 error = input_system_configuration_reset();
31 if (error != INPUT_SYSTEM_ERR_NO_ERROR)
32 return error;
33
34 error = input_system_csi_xmem_channel_cfg(
35 0, /*ch_id */
36 INPUT_SYSTEM_PORT_A, /*port */
37 backend_ch0, /*backend_ch */
38 32, /*mem_region_size */
39 6, /*nof_mem_regions */
40 acq_mem_region_size, /*acq_mem_region_size */
41 acq_nof_mem_regions, /*acq_nof_mem_regions */
42 targetB, /*target */
43 3); /*nof_xmem_buffers */
44 if (error != INPUT_SYSTEM_ERR_NO_ERROR)
45 return error;
46
47 error = input_system_csi_xmem_channel_cfg(
48 1, /*ch_id */
49 INPUT_SYSTEM_PORT_B, /*port */
50 backend_ch0, /*backend_ch */
51 16, /*mem_region_size */
52 3, /*nof_mem_regions */
53 acq_mem_region_size, /*acq_mem_region_size */
54 acq_nof_mem_regions, /*acq_nof_mem_regions */
55 targetB, /*target */
56 3); /*nof_xmem_buffers */
57 if (error != INPUT_SYSTEM_ERR_NO_ERROR)
58 return error;
59
60 error = input_system_csi_xmem_channel_cfg(
61 2, /*ch_id */
62 INPUT_SYSTEM_PORT_C, /*port */
63 backend_ch1, /*backend_ch */
64 32, /*mem_region_size */
65 3, /*nof_mem_regions */
66 acq_mem_region_size, /*acq_mem_region_size */
67 acq_nof_mem_regions, /*acq_nof_mem_regions */
68 targetC, /*target */
69 2); /*nof_xmem_buffers */
70 if (error != INPUT_SYSTEM_ERR_NO_ERROR)
71 return error;
72
73 error = input_system_configuration_commit();
74
75 return error;
76 }
77
ia_css_isys_2401_init(void)78 static input_system_err_t ia_css_isys_2401_init(void)
79 {
80 ia_css_isys_csi_rx_lut_rmgr_init();
81 ia_css_isys_ibuf_rmgr_init();
82 ia_css_isys_dma_channel_rmgr_init();
83 ia_css_isys_stream2mmio_sid_rmgr_init();
84
85 isys2401_dma_set_max_burst_size(ISYS2401_DMA0_ID,
86 1 /* Non Burst DMA transactions */);
87
88 /* Enable 2401 input system IRQ status for driver to retrieve */
89 isys_irqc_status_enable(ISYS_IRQ0_ID);
90 isys_irqc_status_enable(ISYS_IRQ1_ID);
91 isys_irqc_status_enable(ISYS_IRQ2_ID);
92
93 return INPUT_SYSTEM_ERR_NO_ERROR;
94 }
95
ia_css_isys_init(void)96 input_system_err_t ia_css_isys_init(void)
97 {
98 if (IS_ISP2401)
99 return ia_css_isys_2401_init();
100
101 return ia_css_isys_2400_init();
102 }
103
ia_css_isys_uninit(void)104 void ia_css_isys_uninit(void)
105 {
106 if (IS_ISP2401) {
107 ia_css_isys_csi_rx_lut_rmgr_uninit();
108 ia_css_isys_ibuf_rmgr_uninit();
109 ia_css_isys_dma_channel_rmgr_uninit();
110 ia_css_isys_stream2mmio_sid_rmgr_uninit();
111 }
112 }
113