1 /* SPDX-License-Identifier: GPL-2.0 */ 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 /* 4 * (c) 2020 Mauro Carvalho Chehab <mchehab+huawei@kernel.org> 5 */ 6 7 #ifndef __SYSTEM_GLOBAL_H_INCLUDED__ 8 #define __SYSTEM_GLOBAL_H_INCLUDED__ 9 10 /* 11 * Create a list of HAS and IS properties that defines the system 12 * Those are common for both ISP2400 and ISP2401 13 * 14 * The configuration assumes the following 15 * - The system is hetereogeneous; Multiple cells and devices classes 16 * - The cell and device instances are homogeneous, each device type 17 * belongs to the same class 18 * - Device instances supporting a subset of the class capabilities are 19 * allowed 20 * 21 * We could manage different device classes through the enumerated 22 * lists (C) or the use of classes (C++), but that is presently not 23 * fully supported 24 * 25 * N.B. the 3 input formatters are of 2 different classess 26 */ 27 28 #define DMA_DDR_TO_VAMEM_WORKAROUND 29 #define DMA_DDR_TO_HMEM_WORKAROUND 30 31 /* 32 * The longest allowed (uninteruptible) bus transfer, does not 33 * take stalling into account 34 */ 35 #define HIVE_ISP_MAX_BURST_LENGTH 1024 36 37 /* 38 * Maximum allowed burst length in words for the ISP DMA 39 * This value is set to 2 to prevent the ISP DMA from blocking 40 * the bus for too long; as the input system can only buffer 41 * 2 lines on Moorefield and Cherrytrail, the input system buffers 42 * may overflow if blocked for too long (BZ 2726). 43 */ 44 #define ISP2400_DMA_MAX_BURST_LENGTH 128 45 #define ISP2401_DMA_MAX_BURST_LENGTH 2 46 47 #include <hive_isp_css_defs.h> 48 #include <type_support.h> 49 50 /* This interface is deprecated */ 51 #include "hive_types.h" 52 53 /* 54 * Semi global. "HRT" is accessible from SP, but the HRT types do not fully apply 55 */ 56 #define HRT_VADDRESS_WIDTH 32 57 58 #define SIZEOF_HRT_REG (HRT_DATA_WIDTH >> 3) 59 #define HIVE_ISP_CTRL_DATA_BYTES (HIVE_ISP_CTRL_DATA_WIDTH / 8) 60 61 /* The main bus connecting all devices */ 62 #define HRT_BUS_WIDTH HIVE_ISP_CTRL_DATA_WIDTH 63 #define HRT_BUS_BYTES HIVE_ISP_CTRL_DATA_BYTES 64 65 typedef u32 hrt_bus_align_t; 66 67 /* 68 * Enumerate the devices, device access through the API is by ID, 69 * through the DLI by address. The enumerator terminators are used 70 * to size the wiring arrays and as an exception value. 71 */ 72 typedef enum { 73 DDR0_ID = 0, 74 N_DDR_ID 75 } ddr_ID_t; 76 77 typedef enum { 78 ISP0_ID = 0, 79 N_ISP_ID 80 } isp_ID_t; 81 82 typedef enum { 83 SP0_ID = 0, 84 N_SP_ID 85 } sp_ID_t; 86 87 typedef enum { 88 MMU0_ID = 0, 89 MMU1_ID, 90 N_MMU_ID 91 } mmu_ID_t; 92 93 typedef enum { 94 DMA0_ID = 0, 95 N_DMA_ID 96 } dma_ID_t; 97 98 typedef enum { 99 GDC0_ID = 0, 100 GDC1_ID, 101 N_GDC_ID 102 } gdc_ID_t; 103 104 /* this extra define is needed because we want to use it also 105 in the preprocessor, and that doesn't work with enums. 106 */ 107 #define N_GDC_ID_CPP 2 108 109 typedef enum { 110 VAMEM0_ID = 0, 111 VAMEM1_ID, 112 VAMEM2_ID, 113 N_VAMEM_ID 114 } vamem_ID_t; 115 116 typedef enum { 117 BAMEM0_ID = 0, 118 N_BAMEM_ID 119 } bamem_ID_t; 120 121 typedef enum { 122 HMEM0_ID = 0, 123 N_HMEM_ID 124 } hmem_ID_t; 125 126 typedef enum { 127 IRQ0_ID = 0, /* GP IRQ block */ 128 IRQ1_ID, /* Input formatter */ 129 IRQ2_ID, /* input system */ 130 IRQ3_ID, /* input selector */ 131 N_IRQ_ID 132 } irq_ID_t; 133 134 typedef enum { 135 FIFO_MONITOR0_ID = 0, 136 N_FIFO_MONITOR_ID 137 } fifo_monitor_ID_t; 138 139 typedef enum { 140 GP_DEVICE0_ID = 0, 141 N_GP_DEVICE_ID 142 } gp_device_ID_t; 143 144 typedef enum { 145 GP_TIMER0_ID = 0, 146 GP_TIMER1_ID, 147 GP_TIMER2_ID, 148 GP_TIMER3_ID, 149 GP_TIMER4_ID, 150 GP_TIMER5_ID, 151 GP_TIMER6_ID, 152 GP_TIMER7_ID, 153 N_GP_TIMER_ID 154 } gp_timer_ID_t; 155 156 typedef enum { 157 GPIO0_ID = 0, 158 N_GPIO_ID 159 } gpio_ID_t; 160 161 typedef enum { 162 TIMED_CTRL0_ID = 0, 163 N_TIMED_CTRL_ID 164 } timed_ctrl_ID_t; 165 166 typedef enum { 167 INPUT_FORMATTER0_ID = 0, 168 INPUT_FORMATTER1_ID, 169 INPUT_FORMATTER2_ID, 170 INPUT_FORMATTER3_ID, 171 N_INPUT_FORMATTER_ID 172 } input_formatter_ID_t; 173 174 /* The IF RST is outside the IF */ 175 #define INPUT_FORMATTER0_SRST_OFFSET 0x0824 176 #define INPUT_FORMATTER1_SRST_OFFSET 0x0624 177 #define INPUT_FORMATTER2_SRST_OFFSET 0x0424 178 #define INPUT_FORMATTER3_SRST_OFFSET 0x0224 179 180 #define INPUT_FORMATTER0_SRST_MASK 0x0001 181 #define INPUT_FORMATTER1_SRST_MASK 0x0002 182 #define INPUT_FORMATTER2_SRST_MASK 0x0004 183 #define INPUT_FORMATTER3_SRST_MASK 0x0008 184 185 typedef enum { 186 INPUT_SYSTEM0_ID = 0, 187 N_INPUT_SYSTEM_ID 188 } input_system_ID_t; 189 190 typedef enum { 191 RX0_ID = 0, 192 N_RX_ID 193 } rx_ID_t; 194 195 enum mipi_port_id { 196 MIPI_PORT0_ID = 0, 197 MIPI_PORT1_ID, 198 MIPI_PORT2_ID, 199 N_MIPI_PORT_ID 200 }; 201 202 #define N_RX_CHANNEL_ID 4 203 204 /* Generic port enumeration with an internal port type ID */ 205 typedef enum { 206 CSI_PORT0_ID = 0, 207 CSI_PORT1_ID, 208 CSI_PORT2_ID, 209 TPG_PORT0_ID, 210 PRBS_PORT0_ID, 211 FIFO_PORT0_ID, 212 MEMORY_PORT0_ID, 213 N_INPUT_PORT_ID 214 } input_port_ID_t; 215 216 typedef enum { 217 CAPTURE_UNIT0_ID = 0, 218 CAPTURE_UNIT1_ID, 219 CAPTURE_UNIT2_ID, 220 ACQUISITION_UNIT0_ID, 221 DMA_UNIT0_ID, 222 CTRL_UNIT0_ID, 223 GPREGS_UNIT0_ID, 224 FIFO_UNIT0_ID, 225 IRQ_UNIT0_ID, 226 N_SUB_SYSTEM_ID 227 } sub_system_ID_t; 228 229 #define N_CAPTURE_UNIT_ID 3 230 #define N_ACQUISITION_UNIT_ID 1 231 #define N_CTRL_UNIT_ID 1 232 233 234 enum ia_css_isp_memories { 235 IA_CSS_ISP_PMEM0 = 0, 236 IA_CSS_ISP_DMEM0, 237 IA_CSS_ISP_VMEM0, 238 IA_CSS_ISP_VAMEM0, 239 IA_CSS_ISP_VAMEM1, 240 IA_CSS_ISP_VAMEM2, 241 IA_CSS_ISP_HMEM0, 242 IA_CSS_SP_DMEM0, 243 IA_CSS_DDR, 244 N_IA_CSS_MEMORIES 245 }; 246 247 #define IA_CSS_NUM_MEMORIES 9 248 /* For driver compatibility */ 249 #define N_IA_CSS_ISP_MEMORIES IA_CSS_NUM_MEMORIES 250 #define IA_CSS_NUM_ISP_MEMORIES IA_CSS_NUM_MEMORIES 251 252 /* 253 * ISP2401 specific enums 254 */ 255 256 typedef enum { 257 ISYS_IRQ0_ID = 0, /* port a */ 258 ISYS_IRQ1_ID, /* port b */ 259 ISYS_IRQ2_ID, /* port c */ 260 N_ISYS_IRQ_ID 261 } isys_irq_ID_t; 262 263 264 /* 265 * Input-buffer Controller. 266 */ 267 typedef enum { 268 IBUF_CTRL0_ID = 0, /* map to ISYS2401_IBUF_CNTRL_A */ 269 IBUF_CTRL1_ID, /* map to ISYS2401_IBUF_CNTRL_B */ 270 IBUF_CTRL2_ID, /* map ISYS2401_IBUF_CNTRL_C */ 271 N_IBUF_CTRL_ID 272 } ibuf_ctrl_ID_t; 273 /* end of Input-buffer Controller */ 274 275 /* 276 * Stream2MMIO. 277 */ 278 typedef enum { 279 STREAM2MMIO0_ID = 0, /* map to ISYS2401_S2M_A */ 280 STREAM2MMIO1_ID, /* map to ISYS2401_S2M_B */ 281 STREAM2MMIO2_ID, /* map to ISYS2401_S2M_C */ 282 N_STREAM2MMIO_ID 283 } stream2mmio_ID_t; 284 285 typedef enum { 286 /* 287 * Stream2MMIO 0 has 8 SIDs that are indexed by 288 * [STREAM2MMIO_SID0_ID...STREAM2MMIO_SID7_ID]. 289 * 290 * Stream2MMIO 1 has 4 SIDs that are indexed by 291 * [STREAM2MMIO_SID0_ID...TREAM2MMIO_SID3_ID]. 292 * 293 * Stream2MMIO 2 has 4 SIDs that are indexed by 294 * [STREAM2MMIO_SID0_ID...STREAM2MMIO_SID3_ID]. 295 */ 296 STREAM2MMIO_SID0_ID = 0, 297 STREAM2MMIO_SID1_ID, 298 STREAM2MMIO_SID2_ID, 299 STREAM2MMIO_SID3_ID, 300 STREAM2MMIO_SID4_ID, 301 STREAM2MMIO_SID5_ID, 302 STREAM2MMIO_SID6_ID, 303 STREAM2MMIO_SID7_ID, 304 N_STREAM2MMIO_SID_ID 305 } stream2mmio_sid_ID_t; 306 /* end of Stream2MMIO */ 307 308 /** 309 * Input System 2401: CSI-MIPI recevier. 310 */ 311 typedef enum { 312 CSI_RX_BACKEND0_ID = 0, /* map to ISYS2401_MIPI_BE_A */ 313 CSI_RX_BACKEND1_ID, /* map to ISYS2401_MIPI_BE_B */ 314 CSI_RX_BACKEND2_ID, /* map to ISYS2401_MIPI_BE_C */ 315 N_CSI_RX_BACKEND_ID 316 } csi_rx_backend_ID_t; 317 318 typedef enum { 319 CSI_RX_FRONTEND0_ID = 0, /* map to ISYS2401_CSI_RX_A */ 320 CSI_RX_FRONTEND1_ID, /* map to ISYS2401_CSI_RX_B */ 321 CSI_RX_FRONTEND2_ID, /* map to ISYS2401_CSI_RX_C */ 322 #define N_CSI_RX_FRONTEND_ID (CSI_RX_FRONTEND2_ID + 1) 323 } csi_rx_frontend_ID_t; 324 325 typedef enum { 326 CSI_RX_DLANE0_ID = 0, /* map to DLANE0 in CSI RX */ 327 CSI_RX_DLANE1_ID, /* map to DLANE1 in CSI RX */ 328 CSI_RX_DLANE2_ID, /* map to DLANE2 in CSI RX */ 329 CSI_RX_DLANE3_ID, /* map to DLANE3 in CSI RX */ 330 N_CSI_RX_DLANE_ID 331 } csi_rx_fe_dlane_ID_t; 332 /* end of CSI-MIPI receiver */ 333 334 typedef enum { 335 ISYS2401_DMA0_ID = 0, 336 N_ISYS2401_DMA_ID 337 } isys2401_dma_ID_t; 338 339 /** 340 * Pixel-generator. ("system_global.h") 341 */ 342 typedef enum { 343 PIXELGEN0_ID = 0, 344 PIXELGEN1_ID, 345 PIXELGEN2_ID, 346 N_PIXELGEN_ID 347 } pixelgen_ID_t; 348 /* end of pixel-generator. ("system_global.h") */ 349 350 typedef enum { 351 INPUT_SYSTEM_CSI_PORT0_ID = 0, 352 INPUT_SYSTEM_CSI_PORT1_ID, 353 INPUT_SYSTEM_CSI_PORT2_ID, 354 355 INPUT_SYSTEM_PIXELGEN_PORT0_ID, 356 INPUT_SYSTEM_PIXELGEN_PORT1_ID, 357 INPUT_SYSTEM_PIXELGEN_PORT2_ID, 358 359 N_INPUT_SYSTEM_INPUT_PORT_ID 360 } input_system_input_port_ID_t; 361 362 #define N_INPUT_SYSTEM_CSI_PORT 3 363 364 typedef enum { 365 ISYS2401_DMA_CHANNEL_0 = 0, 366 ISYS2401_DMA_CHANNEL_1, 367 ISYS2401_DMA_CHANNEL_2, 368 ISYS2401_DMA_CHANNEL_3, 369 ISYS2401_DMA_CHANNEL_4, 370 ISYS2401_DMA_CHANNEL_5, 371 ISYS2401_DMA_CHANNEL_6, 372 ISYS2401_DMA_CHANNEL_7, 373 ISYS2401_DMA_CHANNEL_8, 374 ISYS2401_DMA_CHANNEL_9, 375 ISYS2401_DMA_CHANNEL_10, 376 ISYS2401_DMA_CHANNEL_11, 377 N_ISYS2401_DMA_CHANNEL 378 } isys2401_dma_channel; 379 380 #endif /* __SYSTEM_GLOBAL_H_INCLUDED__ */ 381