aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos/include/mach/regs-mfc.h
blob: 1fe42f03dffd326bf2baf79ca34c0acba6c45f66 (plain)
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
/*
 * linux/arch/arm/mach-exynos/include/mach/regs-mfc.h
 *
 * Copyright (c) 2010 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com/
 *
 * Register definition for Samsung MFC (Multi Function Codec - FIMV) driver
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef __REGS_MFC_H
#define __REGS_MFC_H __FILE__

#define S5P_MFCREG(x)			(x)

#define MFC_START_ADDR			S5P_MFCREG(0x0000)
#define MFC_END_ADDR			S5P_MFCREG(0xe008)

#define MFC_SW_RESET			S5P_MFCREG(0x0000)
#define MFC_RISC_HOST_INT		S5P_MFCREG(0x0008)

/* Command from HOST to RISC */
#define MFC_HOST2RISC_CMD		S5P_MFCREG(0x0030)
#define MFC_HOST2RISC_ARG1		S5P_MFCREG(0x0034)
#define MFC_HOST2RISC_ARG2		S5P_MFCREG(0x0038)
#define MFC_HOST2RISC_ARG3		S5P_MFCREG(0x003c)
#define MFC_HOST2RISC_ARG4		S5P_MFCREG(0x0040)

/* Command from RISC to HOST */
#define MFC_RISC2HOST_CMD		S5P_MFCREG(0x0044)
#define MFC_RISC2HOST_ARG1		S5P_MFCREG(0x0048)
#define MFC_RISC2HOST_ARG2		S5P_MFCREG(0x004c)
#define MFC_RISC2HOST_ARG3		S5P_MFCREG(0x0050)
#define MFC_RISC2HOST_ARG4		S5P_MFCREG(0x0054)

#define MFC_FW_VERSION			S5P_MFCREG(0x0058)
#define MFC_SYS_MEM_SZ			S5P_MFCREG(0x005c)
#define MFC_FW_STATUS			S5P_MFCREG(0x0080)

/* Memory controller register */
#define MFC_MC_DRAMBASE_ADR_A		S5P_MFCREG(0x0508)
#define MFC_MC_DRAMBASE_ADR_B		S5P_MFCREG(0x050c)
#define MFC_MC_STATUS			S5P_MFCREG(0x0510)

/* Common register */
#define MFC_SYS_MEM_ADR			S5P_MFCREG(0x0600) /* firmware buffer */
#define MFC_CPB_BUF_ADR			S5P_MFCREG(0x0604) /* stream buffer */
#define MFC_DESC_BUF_ADR		S5P_MFCREG(0x0608) /* descriptor buffer */
#define MFC_LUMA_ADR			S5P_MFCREG(0x0700) /* Luma0 ~ Luma18 */
#define MFC_CHROMA_ADR			S5P_MFCREG(0x0600) /* Chroma0 ~ Chroma18 */

#define MFC_B_RECON_LUMA_ADR		S5P_MFCREG(0x062c)
#define MFC_B_RECON_CHROMA_ADR		S5P_MFCREG(0x0630)

/* H264 decoding */
#define MFC_VERT_NB_MV_ADR		S5P_MFCREG(0x068c) /* vertical neighbor motion vector */
#define MFC_VERT_NB_IP_ADR		S5P_MFCREG(0x0690) /* neighbor pixels for intra pred */
#define MFC_MV_ADR			S5P_MFCREG(0x0780) /* H264 motion vector */

/* H263/MPEG4/MPEG2/VC-1 decoding */
#define MFC_NB_DCAC_ADR			S5P_MFCREG(0x068c) /* neighbor AC/DC coeff. buffer */
#define MFC_UP_NB_MV_ADR		S5P_MFCREG(0x0690) /* upper neighbor motion vector buffer */
#define MFC_SA_MV_ADR			S5P_MFCREG(0x0694) /* subseq. anchor motion vector buffer */
#define MFC_OT_LINE_ADR			S5P_MFCREG(0x0698) /* overlap transform line buffer */
#define MFC_BITPLANE3_ADR		S5P_MFCREG(0x069c) /* bitplane3 addr */
#define MFC_BITPLANE2_ADR		S5P_MFCREG(0x06a0) /* bitplane2 addr */
#define MFC_BITPLANE1_ADR		S5P_MFCREG(0x06a4) /* bitplane1 addr */
#define MFC_SP_ADR			S5P_MFCREG(0x06a8) /* syntax parser addr */

/* Encoder register */
#define MFC_UP_MV_ADR			S5P_MFCREG(0x0600) /* upper motion vector addr */
#define MFC_COLZERO_FLAG_ADR		S5P_MFCREG(0x0610) /* direct colocaated zero flag addr */
#define MFC_UP_INTRA_MD_ADR		S5P_MFCREG(0x0608) /* upper intra MD addr */
#define MFC_UP_INTRA_PRED_ADR		S5P_MFCREG(0x0740) /* upper intra PRED addr */
#define MFC_NBOR_INFO_ADR		S5P_MFCREG(0x0604) /* entropy engine's neighbor inform and AC/DC coeff. */

#define MFC_ENC_REF0_LUMA_ADR		S5P_MFCREG(0x061c) /* ref0 Luma addr */
#define MFC_ENC_REF0_CHROMA_ADR		S5P_MFCREG(0x0700) /* ref0 Chroma addr */
#define MFC_ENC_REF1_LUMA_ADR		S5P_MFCREG(0x0620) /* ref1 Luma addr */
#define MFC_ENC_REF1_CHROMA_ADR		S5P_MFCREG(0x0704) /* ref1 Chroma addr */
#define MFC_ENC_REF2_LUMA_ADR		S5P_MFCREG(0x0710) /* ref2 Luma addr */
#define MFC_ENC_REF2_CHROMA_ADR		S5P_MFCREG(0x0708) /* ref2 Chroma addr */
#define MFC_ENC_REF3_LUMA_ADR		S5P_MFCREG(0x0714) /* ref3 Luma addr */
#define MFC_ENC_REF3_CHROMA_ADR		S5P_MFCREG(0x070c) /* ref3 Chroma addr */

/* Codec common register */
#define MFC_ENC_HSIZE_PX		S5P_MFCREG(0x0818) /* frame width at encoder */
#define MFC_ENC_VSIZE_PX		S5P_MFCREG(0x081c) /* frame height at encoder */
#define MFC_ENC_PROFILE			S5P_MFCREG(0x0830) /* profile register */
#define MFC_ENC_PIC_STRUCT		S5P_MFCREG(0x083c) /* picture field/frame flag */
#define MFC_ENC_LF_CTRL			S5P_MFCREG(0x0848) /* loop filter control */
#define MFC_ENC_ALPHA_OFF		S5P_MFCREG(0x084c) /* loop filter alpha offset */
#define MFC_ENC_BETA_OFF		S5P_MFCREG(0x0850) /* loop filter beta offset */
#define MFC_MR_BUSIF_CTRL		S5P_MFCREG(0x0854) /* hidden, bus interface ctrl */
#define MFC_ENC_PXL_CACHE_CTRL		S5P_MFCREG(0x0a00) /* pixel cache control */

/* Channel & stream interface register */
#define MFC_SI_RTN_CHID			S5P_MFCREG(0x2000) /* Return CH instance ID register */
#define MFC_SI_CH1_INST_ID		S5P_MFCREG(0x2040) /* codec instance ID */
#define MFC_SI_CH2_INST_ID		S5P_MFCREG(0x2080) /* codec instance ID */

/* Decoder */
#define MFC_SI_VRESOL			S5P_MFCREG(0x2004) /* vertical resolution of decoder */
#define MFC_SI_HRESOL			S5P_MFCREG(0x2008) /* horizontal resolution of decoder */
#define MFC_SI_BUF_NUMBER		S5P_MFCREG(0x200c) /* number of frames in the decoded pic */
#define MFC_SI_DISPLAY_Y_ADR		S5P_MFCREG(0x2010) /* luma address of displayed pic */
#define MFC_SI_DISPLAY_C_ADR		S5P_MFCREG(0x2014) /* chroma address of displayed pic */
#define MFC_SI_FRM_COUNT		S5P_MFCREG(0x2018) /* the number of frames so far decoded */
#define MFC_SI_DISPLAY_STATUS		S5P_MFCREG(0x201c) /* Display status of decoded picture */
#define MFC_SI_FRAME_TYPE		S5P_MFCREG(0x2020) /* frame type such as skip/I/P/B */
#define MFC_SI_DECODE_Y_ADR		S5P_MFCREG(0x2024) /* luma address of decoded pic */
#define MFC_SI_DECODE_C_ADR		S5P_MFCREG(0x2028) /* chroma address of decoded pic */
#define MFC_SI_DECODE_STATUS		S5P_MFCREG(0x202c) /* decoded status */

#define MFC_SI_CH1_ES_ADR		S5P_MFCREG(0x2044) /* start addr of stream buf */
#define MFC_SI_CH1_ES_SIZE		S5P_MFCREG(0x2048) /* size of stream buf */
#define MFC_SI_CH1_DESC_ADR		S5P_MFCREG(0x204c) /* addr of descriptor buf */
#define MFC_SI_CH1_CPB_SIZE		S5P_MFCREG(0x2058) /* max size of coded pic. buf */
#define MFC_SI_CH1_DESC_SIZE		S5P_MFCREG(0x205c) /* max size of descriptor buf */
#define MFC_SI_CH1_RELEASE_BUF		S5P_MFCREG(0x2060) /* release buffer register */
#define MFC_SI_CH1_HOST_WR_ADR		S5P_MFCREG(0x2064) /* shared memory address */
#define MFC_SI_CH1_DPB_CONF_CTRL	S5P_MFCREG(0x2068) /* DPB Configuration Control Register */

#define MFC_SI_CH2_ES_ADR		S5P_MFCREG(0x2084) /* start addr of stream buf */
#define MFC_SI_CH2_ES_SIZE		S5P_MFCREG(0x2088) /* size of stream buf */
#define MFC_SI_CH2_DESC_ADR		S5P_MFCREG(0x208c) /* addr of descriptor buf */
#define MFC_SI_CH2_CPB_SIZE		S5P_MFCREG(0x2098) /* max size of coded pic. buf */
#define MFC_SI_CH2_DESC_SIZE		S5P_MFCREG(0x209c) /* max size of descriptor buf */
#define MFC_SI_CH2_RELEASE_BUF		S5P_MFCREG(0x20a0) /* release buffer register */
#define MFC_SI_CH2_HOST_WR_ADR		S5P_MFCREG(0x20a4) /* shared memory address */
#define MFC_SI_CH2_DPB_CONF_CTRL	S5P_MFCREG(0x20a8) /* DPB Configuration Control Register */

#define MFC_SI_FIMV1_VRESOL		S5P_MFCREG(0x2050) /* vertical resolution */
#define MFC_SI_FIMV1_HRESOL		S5P_MFCREG(0x2054) /* horizontal resolution */
#define MFC_CRC_LUMA0			S5P_MFCREG(0x2030) /* luma crc data per frame(or top field) */
#define MFC_CRC_CHROMA0			S5P_MFCREG(0x2034) /* chroma crc data per frame(or top field) */
#define MFC_CRC_LUMA1			S5P_MFCREG(0x2038) /* luma crc data per bottom field */
#define MFC_CRC_CHROMA1			S5P_MFCREG(0x203c) /* chroma crc data per bottom field */

/* Encoder */
#define MFC_ENC_SI_STRM_SIZE		S5P_MFCREG(0x2004) /* stream size */
#define MFC_ENC_SI_PIC_CNT		S5P_MFCREG(0x2008) /* picture count */
#define MFC_ENC_SI_WRITE_PTR		S5P_MFCREG(0x200c) /* write pointer */
#define MFC_ENC_SI_SLICE_TYPE		S5P_MFCREG(0x2010) /* slice type(I/P/B/IDR) */
#define MFC_ENCODED_Y_ADDR		S5P_MFCREG(0x2014) /* the address of the encoded luminance picture */
#define MFC_ENCODED_C_ADDR		S5P_MFCREG(0x2018) /* the address of the encoded chrominance picture */

#define MFC_ENC_SI_CH1_SB_ADR		S5P_MFCREG(0x2044) /* addr of stream buf */
#define MFC_ENC_SI_CH1_SB_SIZE		S5P_MFCREG(0x204c) /* size of stream buf */
#define MFC_ENC_SI_CH1_CUR_Y_ADR	S5P_MFCREG(0x2050) /* current Luma addr */
#define MFC_ENC_SI_CH1_CUR_C_ADR	S5P_MFCREG(0x2054) /* current Chroma addr */
#define MFC_ENC_SI_CH1_FRAME_INS	S5P_MFCREG(0x2058) /* frame insertion control register */
#define MFC_ENC_SI_CH1_INPUT_FLUSH	S5P_MFCREG(0x2068) /* flusing input buffer */

#define MFC_ENC_SI_CH2_SB_ADR		S5P_MFCREG(0x2084) /* addr of stream buf */
#define MFC_ENC_SI_CH2_SB_SIZE		S5P_MFCREG(0x208c) /* size of stream buf */
#define MFC_ENC_SI_CH2_CUR_Y_ADR	S5P_MFCREG(0x2090) /* current Luma addr */
#define MFC_ENC_SI_CH2_CUR_C_ADR	S5P_MFCREG(0x2094) /* current Chroma addr */
#define MFC_ENC_SI_CH2_FRAME_INS	S5P_MFCREG(0x2098) /* frame insertion control register */
#define MFC_ENC_SI_CH2_INPUT_FLUSH	S5P_MFCREG(0x20A8) /* flusing input buffer */

#define MFC_ENC_PIC_TYPE_CTRL		S5P_MFCREG(0xc504) /* pic type level control */
#define MFC_ENC_B_RECON_WRITE_ON	S5P_MFCREG(0xc508) /* B frame recon data write cotrl */
#define MFC_ENC_MSLICE_CTRL		S5P_MFCREG(0xc50c) /* multi slice control */
#define MFC_ENC_MSLICE_MB		S5P_MFCREG(0xc510) /* MB number in the one slice */
#define MFC_ENC_MSLICE_BIT		S5P_MFCREG(0xc514) /* bit count number for one slice */
#define MFC_ENC_CIR_CTRL		S5P_MFCREG(0xc518) /* number of intra refresh MB */
#define MFC_ENC_MAP_FOR_CUR		S5P_MFCREG(0xc51c) /* linear or 64x32 tiled mode */
#define MFC_ENC_PADDING_CTRL		S5P_MFCREG(0xc520) /* padding control */

#define MFC_ENC_NV21_SEL		S5P_MFCREG(0xc548) /* chroma interleaving order */

#define MFC_ENC_INTRA_BIAS		S5P_MFCREG(0xc588) /* intra mode bias for the MB mode */
#define MFC_ENC_BI_DIRECT_BIAS		S5P_MFCREG(0xc58c) /* bi-directional mode bias for the MB mode */

#define MFC_ENC_RC_CONFIG		S5P_MFCREG(0xc5a0) /* RC config */
#define MFC_ENC_RC_BIT_RATE		S5P_MFCREG(0xc5a8) /* bit rate */
#define MFC_ENC_RC_QBOUND		S5P_MFCREG(0xc5ac) /* max/min QP */
#define MFC_ENC_RC_RPARA		S5P_MFCREG(0xc5b0) /* rate control reaction coeff. */
#define MFC_ENC_RC_MB_CTRL		S5P_MFCREG(0xc5b4) /* MB adaptive scaling */

/* Encoder for H264 */
#define MFC_ENC_H264_ENTRP_MODE		S5P_MFCREG(0xd004) /* CAVLC or CABAC */
#define MFC_ENC_H264_ALPHA_OFF		S5P_MFCREG(0xd008) /* loop filter alpha offset */
#define MFC_ENC_H264_BETA_OFF		S5P_MFCREG(0xd00c) /* loop filter beta offset */
#define MFC_ENC_H264_NUM_OF_REF		S5P_MFCREG(0xd010) /* number of reference for P/B */
#define MFC_ENC_H264_TRANS_FLAG		S5P_MFCREG(0xd034) /* 8x8 transform flag in PPS & high profile */

#define MFC_ENC_RC_FRAME_RATE		S5P_MFCREG(0xd0d0) /* frame rate */

/* Encoder for MPEG4 */
#define MFC_ENC_MPEG4_QUART_PXL		S5P_MFCREG(0xe008) /* quarter pel interpolation control */

#endif /* __REGS_MFC_H */