Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * (C) COPYRIGHT 2018 ARM Limited. All rights reserved.
 * Author: James.Qian.Wang <james.qian.wang@arm.com>
 *
 */
#ifndef _D71_REG_H_
#define _D71_REG_H_

/* Common block registers offset */
#define BLK_BLOCK_INFO		0x000
#define BLK_PIPELINE_INFO	0x004
#define BLK_VALID_INPUT_ID0	0x020
#define BLK_OUTPUT_ID0		0x060
#define BLK_INPUT_ID0		0x080
#define BLK_IRQ_RAW_STATUS	0x0A0
#define BLK_IRQ_CLEAR		0x0A4
#define BLK_IRQ_MASK		0x0A8
#define BLK_IRQ_STATUS		0x0AC
#define BLK_STATUS		0x0B0
#define BLK_INFO		0x0C0
#define BLK_CONTROL		0x0D0
#define BLK_SIZE		0x0D4
#define BLK_IN_SIZE		0x0E0

#define BLK_P0_PTR_LOW		0x100
#define BLK_P0_PTR_HIGH		0x104
#define BLK_P0_STRIDE		0x108
#define BLK_P1_PTR_LOW		0x110
#define BLK_P1_PTR_HIGH		0x114
#define BLK_P1_STRIDE		0x118
#define BLK_P2_PTR_LOW		0x120
#define BLK_P2_PTR_HIGH		0x124

#define BLOCK_INFO_N_SUBBLKS(x)	((x) & 0x000F)
#define BLOCK_INFO_BLK_ID(x)	(((x) & 0x00F0) >> 4)
#define BLOCK_INFO_BLK_TYPE(x)	(((x) & 0xFF00) >> 8)
#define BLOCK_INFO_INPUT_ID(x)	((x) & 0xFFF0)
#define BLOCK_INFO_TYPE_ID(x)	(((x) & 0x0FF0) >> 4)

#define PIPELINE_INFO_N_OUTPUTS(x)	((x) & 0x000F)
#define PIPELINE_INFO_N_VALID_INPUTS(x)	(((x) & 0x0F00) >> 8)

/* Common block control register bits */
#define BLK_CTRL_EN		BIT(0)
/* Common size macro */
#define HV_SIZE(h, v)		(((h) & 0x1FFF) + (((v) & 0x1FFF) << 16))
#define HV_OFFSET(h, v)		(((h) & 0xFFF) + (((v) & 0xFFF) << 16))
#define HV_CROP(h, v)		(((h) & 0xFFF) + (((v) & 0xFFF) << 16))

/* AD_CONTROL register */
#define AD_CONTROL		0x160

/* AD_CONTROL register bits */
#define AD_AEN			BIT(0)
#define AD_YT			BIT(1)
#define AD_BS			BIT(2)
#define AD_WB			BIT(3)
#define AD_TH			BIT(4)

/* Global Control Unit */
#define GLB_ARCH_ID		0x000
#define GLB_CORE_ID		0x004
#define GLB_CORE_INFO		0x008
#define GLB_IRQ_STATUS		0x010

#define GCU_CONFIG_VALID0	0x0D4
#define GCU_CONFIG_VALID1	0x0D8

/* GCU_CONTROL_BITS */
#define GCU_CONTROL_MODE(x)	((x) & 0x7)
#define GCU_CONTROL_SRST	BIT(16)

/* GCU opmode */
#define INACTIVE_MODE		0
#define TBU_CONNECT_MODE	1
#define TBU_DISCONNECT_MODE	2
#define DO0_ACTIVE_MODE		3
#define DO1_ACTIVE_MODE		4
#define DO01_ACTIVE_MODE	5

/* GLB_IRQ_STATUS bits */
#define GLB_IRQ_STATUS_GCU	BIT(0)
#define GLB_IRQ_STATUS_LPU0	BIT(8)
#define GLB_IRQ_STATUS_LPU1	BIT(9)
#define GLB_IRQ_STATUS_ATU0	BIT(10)
#define GLB_IRQ_STATUS_ATU1	BIT(11)
#define GLB_IRQ_STATUS_ATU2	BIT(12)
#define GLB_IRQ_STATUS_ATU3	BIT(13)
#define GLB_IRQ_STATUS_CU0	BIT(16)
#define GLB_IRQ_STATUS_CU1	BIT(17)
#define GLB_IRQ_STATUS_DOU0	BIT(24)
#define GLB_IRQ_STATUS_DOU1	BIT(25)

#define GLB_IRQ_STATUS_PIPE0	(GLB_IRQ_STATUS_LPU0 |\
				 GLB_IRQ_STATUS_ATU0 |\
				 GLB_IRQ_STATUS_ATU1 |\
				 GLB_IRQ_STATUS_CU0 |\
				 GLB_IRQ_STATUS_DOU0)

#define GLB_IRQ_STATUS_PIPE1	(GLB_IRQ_STATUS_LPU1 |\
				 GLB_IRQ_STATUS_ATU2 |\
				 GLB_IRQ_STATUS_ATU3 |\
				 GLB_IRQ_STATUS_CU1 |\
				 GLB_IRQ_STATUS_DOU1)

#define GLB_IRQ_STATUS_ATU	(GLB_IRQ_STATUS_ATU0 |\
				 GLB_IRQ_STATUS_ATU1 |\
				 GLB_IRQ_STATUS_ATU2 |\
				 GLB_IRQ_STATUS_ATU3)

/* GCU_IRQ_BITS */
#define GCU_IRQ_CVAL0		BIT(0)
#define GCU_IRQ_CVAL1		BIT(1)
#define GCU_IRQ_MODE		BIT(4)
#define GCU_IRQ_ERR		BIT(11)

/* GCU_STATUS_BITS */
#define GCU_STATUS_MODE(x)	((x) & 0x7)
#define GCU_STATUS_MERR		BIT(4)
#define GCU_STATUS_TCS0		BIT(8)
#define GCU_STATUS_TCS1		BIT(9)
#define GCU_STATUS_ACTIVE	BIT(31)

/* GCU_CONFIG_VALIDx BITS */
#define GCU_CONFIG_CVAL		BIT(0)

/* PERIPHERAL registers */
#define PERIPH_MAX_LINE_SIZE	BIT(0)
#define PERIPH_NUM_RICH_LAYERS	BIT(4)
#define PERIPH_SPLIT_EN		BIT(8)
#define PERIPH_TBU_EN		BIT(12)
#define PERIPH_AFBC_DMA_EN	BIT(16)
#define PERIPH_CONFIGURATION_ID	0x1D4

/* LPU register */
#define LPU_TBU_STATUS		0x0B4
#define LPU_RAXI_CONTROL	0x0D0
#define LPU_WAXI_CONTROL	0x0D4
#define LPU_TBU_CONTROL		0x0D8

/* LPU_xAXI_CONTROL_BITS */
#define TO_RAXI_AOUTSTDCAPB(x)	(x)
#define TO_RAXI_BOUTSTDCAPB(x)	((x) << 8)
#define TO_RAXI_BEN(x)		((x) << 15)
#define TO_xAXI_BURSTLEN(x)	((x) << 16)
#define TO_xAXI_AxQOS(x)	((x) << 24)
#define TO_xAXI_ORD(x)		((x) << 31)
#define TO_WAXI_OUTSTDCAPB(x)	(x)

#define RAXI_AOUTSTDCAPB_MASK	0x7F
#define RAXI_BOUTSTDCAPB_MASK	0x7F00
#define RAXI_BEN_MASK		BIT(15)
#define xAXI_BURSTLEN_MASK	0x3F0000
#define xAXI_AxQOS_MASK		0xF000000
#define xAXI_ORD_MASK		BIT(31)
#define WAXI_OUTSTDCAPB_MASK	0x3F

/* LPU_TBU_CONTROL BITS */
#define TO_TBU_DOUTSTDCAPB(x)	(x)
#define TBU_DOUTSTDCAPB_MASK	0x3F

/* LPU_IRQ_BITS */
#define LPU_IRQ_IBSY		BIT(10)
#define LPU_IRQ_ERR		BIT(11)
#define LPU_IRQ_EOW		BIT(12)
#define LPU_IRQ_PL0		BIT(13)

/* LPU_STATUS_BITS */
#define LPU_STATUS_AXIED(x)	((x) & 0xF)
#define LPU_STATUS_AXIE		BIT(4)
#define LPU_STATUS_AXIRP	BIT(5)
#define LPU_STATUS_AXIWP	BIT(6)
#define LPU_STATUS_ACE0		BIT(16)
#define LPU_STATUS_ACE1		BIT(17)
#define LPU_STATUS_ACE2		BIT(18)
#define LPU_STATUS_ACE3		BIT(19)
#define LPU_STATUS_ACTIVE	BIT(31)

#define AXIEID_MASK		0xF
#define AXIE_MASK		LPU_STATUS_AXIE
#define AXIRP_MASK		LPU_STATUS_AXIRP
#define AXIWP_MASK		LPU_STATUS_AXIWP

#define FROM_AXIEID(reg)	((reg) & AXIEID_MASK)
#define TO_AXIE(x)		((x) << 4)
#define FROM_AXIRP(reg)		(((reg) & AXIRP_MASK) >> 5)
#define FROM_AXIWP(reg)		(((reg) & AXIWP_MASK) >> 6)

/* LPU_TBU_STATUS_BITS */
#define LPU_TBU_STATUS_TCF	BIT(1)
#define LPU_TBU_STATUS_TTNG	BIT(2)
#define LPU_TBU_STATUS_TITR	BIT(8)
#define LPU_TBU_STATUS_TEMR	BIT(16)
#define LPU_TBU_STATUS_TTF	BIT(31)

/* LPU_TBU_CONTROL BITS */
#define LPU_TBU_CTRL_TLBPEN	BIT(16)

/* CROSSBAR CONTROL BITS */
#define CBU_INPUT_CTRL_EN	BIT(0)
#define CBU_NUM_INPUT_IDS	5
#define CBU_NUM_OUTPUT_IDS	5

/* CU register */
#define CU_BG_COLOR		0x0DC
#define CU_INPUT0_SIZE		0x0E0
#define CU_INPUT0_OFFSET	0x0E4
#define CU_INPUT0_CONTROL	0x0E8
#define CU_INPUT1_SIZE		0x0F0
#define CU_INPUT1_OFFSET	0x0F4
#define CU_INPUT1_CONTROL	0x0F8
#define CU_INPUT2_SIZE		0x100
#define CU_INPUT2_OFFSET	0x104
#define CU_INPUT2_CONTROL	0x108
#define CU_INPUT3_SIZE		0x110
#define CU_INPUT3_OFFSET	0x114
#define CU_INPUT3_CONTROL	0x118
#define CU_INPUT4_SIZE		0x120
#define CU_INPUT4_OFFSET	0x124
#define CU_INPUT4_CONTROL	0x128

#define CU_PER_INPUT_REGS	4

#define CU_NUM_INPUT_IDS	5
#define CU_NUM_OUTPUT_IDS	1

/* CU control register bits */
#define CU_CTRL_COPROC		BIT(0)

/* CU_IRQ_BITS */
#define CU_IRQ_OVR		BIT(9)
#define CU_IRQ_ERR		BIT(11)

/* CU_STATUS_BITS */
#define CU_STATUS_CPE		BIT(0)
#define CU_STATUS_ZME		BIT(1)
#define CU_STATUS_CFGE		BIT(2)
#define CU_STATUS_ACTIVE	BIT(31)

/* CU input control register bits */
#define CU_INPUT_CTRL_EN	BIT(0)
#define CU_INPUT_CTRL_PAD	BIT(1)
#define CU_INPUT_CTRL_PMUL	BIT(2)
#define CU_INPUT_CTRL_ALPHA(x)	(((x) & 0xFF) << 8)

/* DOU register */

/* DOU_IRQ_BITS */
#define DOU_IRQ_UND		BIT(8)
#define DOU_IRQ_ERR		BIT(11)
#define DOU_IRQ_PL0		BIT(13)
#define DOU_IRQ_PL1		BIT(14)

/* DOU_STATUS_BITS */
#define DOU_STATUS_DRIFTTO	BIT(0)
#define DOU_STATUS_FRAMETO	BIT(1)
#define DOU_STATUS_TETO		BIT(2)
#define DOU_STATUS_CSCE		BIT(8)
#define DOU_STATUS_ACTIVE	BIT(31)

/* Layer registers */
#define LAYER_INFO		0x0C0
#define LAYER_R_CONTROL		0x0D4
#define LAYER_FMT		0x0D8
#define LAYER_LT_COEFFTAB	0x0DC
#define LAYER_PALPHA		0x0E4

#define LAYER_YUV_RGB_COEFF0	0x130

#define LAYER_AD_H_CROP		0x164
#define LAYER_AD_V_CROP		0x168

#define LAYER_RGB_RGB_COEFF0	0x170

/* L_CONTROL_BITS */
#define L_EN			BIT(0)
#define L_IT			BIT(4)
#define L_R2R			BIT(5)
#define L_FT			BIT(6)
#define L_ROT(x)		(((x) & 3) << 8)
#define L_HFLIP			BIT(10)
#define L_VFLIP			BIT(11)
#define L_TBU_EN		BIT(16)
#define L_A_RCACHE(x)		(((x) & 0xF) << 28)
#define L_ROT_R0		0
#define L_ROT_R90		1
#define L_ROT_R180		2
#define L_ROT_R270		3

/* LAYER_R_CONTROL BITS */
#define LR_CHI422_BILINEAR	0
#define LR_CHI422_REPLICATION	1
#define LR_CHI420_JPEG		(0 << 2)
#define LR_CHI420_MPEG		(1 << 2)

#define L_ITSEL(x)		((x) & 0xFFF)
#define L_FTSEL(x)		(((x) & 0xFFF) << 16)

#define LAYER_PER_PLANE_REGS	4

/* Layer_WR registers */
#define LAYER_WR_PROG_LINE	0x0D4
#define LAYER_WR_FORMAT		0x0D8

/* Layer_WR control bits */
#define LW_OFM			BIT(4)
#define LW_LALPHA(x)		(((x) & 0xFF) << 8)
#define LW_A_WCACHE(x)		(((x) & 0xF) << 28)
#define LW_TBU_EN		BIT(16)

#define AxCACHE_MASK		0xF0000000

/* Layer AXI R/W cache setting */
#define AxCACHE_B		BIT(0)	/* Bufferable */
#define AxCACHE_M		BIT(1)	/* Modifiable */
#define AxCACHE_RA		BIT(2)	/* Read-Allocate */
#define AxCACHE_WA		BIT(3)	/* Write-Allocate */

/* Layer info bits */
#define L_INFO_RF		BIT(0)
#define L_INFO_CM		BIT(1)
#define L_INFO_ABUF_SIZE(x)	(((x) >> 4) & 0x7)

/* Scaler registers */
#define SC_COEFFTAB		0x0DC
#define SC_OUT_SIZE		0x0E4
#define SC_H_CROP		0x0E8
#define SC_V_CROP		0x0EC
#define SC_H_INIT_PH		0x0F0
#define SC_H_DELTA_PH		0x0F4
#define SC_V_INIT_PH		0x0F8
#define SC_V_DELTA_PH		0x0FC
#define SC_ENH_LIMITS		0x130
#define SC_ENH_COEFF0		0x134

#define SC_MAX_ENH_COEFF	9

/* SC_CTRL_BITS */
#define SC_CTRL_SCL		BIT(0)
#define SC_CTRL_LS		BIT(1)
#define SC_CTRL_AP		BIT(4)
#define SC_CTRL_IENH		BIT(8)
#define SC_CTRL_RGBSM		BIT(16)
#define SC_CTRL_ASM		BIT(17)

#define SC_VTSEL(vtal)		((vtal) << 16)

#define SC_NUM_INPUTS_IDS	1
#define SC_NUM_OUTPUTS_IDS	1

#define MG_NUM_INPUTS_IDS	2
#define MG_NUM_OUTPUTS_IDS	1

/* Merger registers */
#define MG_INPUT_ID0		BLK_INPUT_ID0
#define MG_INPUT_ID1		(MG_INPUT_ID0 + 4)
#define MG_SIZE			BLK_SIZE

/* Splitter registers */
#define SP_OVERLAP_SIZE		0xD8

/* Backend registers */
#define BS_INFO			0x0C0
#define BS_PROG_LINE		0x0D4
#define BS_PREFETCH_LINE	0x0D8
#define BS_BG_COLOR		0x0DC
#define BS_ACTIVESIZE		0x0E0
#define BS_HINTERVALS		0x0E4
#define BS_VINTERVALS		0x0E8
#define BS_SYNC			0x0EC
#define BS_DRIFT_TO		0x100
#define BS_FRAME_TO		0x104
#define BS_TE_TO		0x108
#define BS_T0_INTERVAL		0x110
#define BS_T1_INTERVAL		0x114
#define BS_T2_INTERVAL		0x118
#define BS_CRC0_LOW		0x120
#define BS_CRC0_HIGH		0x124
#define BS_CRC1_LOW		0x128
#define BS_CRC1_HIGH		0x12C
#define BS_USER			0x130

/* BS control register bits */
#define BS_CTRL_EN		BIT(0)
#define BS_CTRL_VM		BIT(1)
#define BS_CTRL_BM		BIT(2)
#define BS_CTRL_HMASK		BIT(4)
#define BS_CTRL_VD		BIT(5)
#define BS_CTRL_TE		BIT(8)
#define BS_CTRL_TS		BIT(9)
#define BS_CTRL_TM		BIT(12)
#define BS_CTRL_DL		BIT(16)
#define BS_CTRL_SBS		BIT(17)
#define BS_CTRL_CRC		BIT(18)
#define BS_CTRL_PM		BIT(20)

/* BS active size/intervals */
#define BS_H_INTVALS(hfp, hbp)	(((hfp) & 0xFFF) + (((hbp) & 0x3FF) << 16))
#define BS_V_INTVALS(vfp, vbp)  (((vfp) & 0x3FFF) + (((vbp) & 0xFF) << 16))

/* BS_SYNC bits */
#define BS_SYNC_HSW(x)		((x) & 0x3FF)
#define BS_SYNC_HSP		BIT(12)
#define BS_SYNC_VSW(x)		(((x) & 0xFF) << 16)
#define BS_SYNC_VSP		BIT(28)

#define BS_NUM_INPUT_IDS	0
#define BS_NUM_OUTPUT_IDS	0

/* Image process registers */
#define IPS_DEPTH		0x0D8
#define IPS_RGB_RGB_COEFF0	0x130
#define IPS_RGB_YUV_COEFF0	0x170

#define IPS_DEPTH_MARK		0xF

/* IPS control register bits */
#define IPS_CTRL_RGB		BIT(0)
#define IPS_CTRL_FT		BIT(4)
#define IPS_CTRL_YUV		BIT(8)
#define IPS_CTRL_CHD422		BIT(9)
#define IPS_CTRL_CHD420		BIT(10)
#define IPS_CTRL_LPF		BIT(11)
#define IPS_CTRL_DITH		BIT(12)
#define IPS_CTRL_CLAMP		BIT(16)
#define IPS_CTRL_SBS		BIT(17)

/* IPS info register bits */
#define IPS_INFO_CHD420		BIT(10)

#define IPS_NUM_INPUT_IDS	2
#define IPS_NUM_OUTPUT_IDS	1

/* FT_COEFF block registers */
#define FT_COEFF0		0x80
#define GLB_IT_COEFF		0x80

/* GLB_SC_COEFF registers */
#define GLB_SC_COEFF_ADDR	0x0080
#define GLB_SC_COEFF_DATA	0x0084
#define GLB_LT_COEFF_DATA	0x0080

#define GLB_SC_COEFF_MAX_NUM	1024
#define GLB_LT_COEFF_NUM	65
/* GLB_SC_ADDR */
#define SC_COEFF_R_ADDR		BIT(18)
#define SC_COEFF_G_ADDR		BIT(17)
#define SC_COEFF_B_ADDR		BIT(16)

#define SC_COEFF_DATA(x, y)	(((y) & 0xFFFF) | (((x) & 0xFFFF) << 16))

enum d71_blk_type {
	D71_BLK_TYPE_GCU		= 0x00,
	D71_BLK_TYPE_LPU		= 0x01,
	D71_BLK_TYPE_CU			= 0x02,
	D71_BLK_TYPE_DOU		= 0x03,
	D71_BLK_TYPE_AEU		= 0x04,
	D71_BLK_TYPE_GLB_LT_COEFF	= 0x05,
	D71_BLK_TYPE_GLB_SCL_COEFF	= 0x06, /* SH/SV scaler coeff */
	D71_BLK_TYPE_GLB_SC_COEFF	= 0x07,
	D71_BLK_TYPE_PERIPH		= 0x08,
	D71_BLK_TYPE_LPU_TRUSTED	= 0x09,
	D71_BLK_TYPE_AEU_TRUSTED	= 0x0A,
	D71_BLK_TYPE_LPU_LAYER		= 0x10,
	D71_BLK_TYPE_LPU_WB_LAYER	= 0x11,
	D71_BLK_TYPE_CU_SPLITTER	= 0x20,
	D71_BLK_TYPE_CU_SCALER		= 0x21,
	D71_BLK_TYPE_CU_MERGER		= 0x22,
	D71_BLK_TYPE_DOU_IPS		= 0x30,
	D71_BLK_TYPE_DOU_BS		= 0x31,
	D71_BLK_TYPE_DOU_FT_COEFF	= 0x32,
	D71_BLK_TYPE_AEU_DS		= 0x40,
	D71_BLK_TYPE_AEU_AES		= 0x41,
	D71_BLK_TYPE_RESERVED		= 0xFF
};

/* Constant of components */
#define D71_MAX_PIPELINE		2
#define D71_PIPELINE_MAX_SCALERS	2
#define D71_PIPELINE_MAX_LAYERS		4

#define D71_MAX_GLB_IT_COEFF		3
#define D71_MAX_GLB_SCL_COEFF		4

#define D71_MAX_LAYERS_PER_LPU		4
#define D71_BLOCK_MAX_INPUT		9
#define D71_BLOCK_MAX_OUTPUT		5
#define D71_MAX_SC_PER_CU		2

#define D71_BLOCK_OFFSET_PERIPH		0xFE00
#define D71_BLOCK_SIZE			0x0200

#define D71_DEFAULT_PREPRETCH_LINE	5
#define D71_BUS_WIDTH_16_BYTES		16

#define D71_MIN_LINE_SIZE		64
#define D71_MIN_VERTICAL_SIZE		64
#define D71_SC_MIN_LIN_SIZE		4
#define D71_SC_MIN_VERTICAL_SIZE	4
#define D71_SC_MAX_LIN_SIZE		2048
#define D71_SC_MAX_VERTICAL_SIZE	4096

#define D71_SC_MAX_UPSCALING		64
#define D71_SC_MAX_DOWNSCALING		6
#define D71_SC_SPLIT_OVERLAP		8
#define D71_SC_ENH_SPLIT_OVERLAP	1

#define D71_MG_MIN_MERGED_SIZE		4
#define D71_MG_MAX_MERGED_HSIZE		4032
#define D71_MG_MAX_MERGED_VSIZE		4096

#define D71_PALPHA_DEF_MAP		0xFFAA5500
#define D71_LAYER_CONTROL_DEFAULT	0x30000000
#define D71_WB_LAYER_CONTROL_DEFAULT	0x3000FF00
#define D71_BS_CONTROL_DEFAULT		0x00000002

struct block_header {
	u32 block_info;
	u32 pipeline_info;
	u32 input_ids[D71_BLOCK_MAX_INPUT];
	u32 output_ids[D71_BLOCK_MAX_OUTPUT];
};

static inline u32 get_block_type(struct block_header *blk)
{
	return BLOCK_INFO_BLK_TYPE(blk->block_info);
}

#endif /* !_D71_REG_H_ */