| .. | .. |
|---|
| 33 | 33 | |
|---|
| 34 | 34 | #define RKVDEC_DRIVER_NAME "mpp_rkvdec2" |
|---|
| 35 | 35 | |
|---|
| 36 | +#define RKVDEC_REG_IMPORTANT_BASE 0x2c |
|---|
| 37 | +#define RKVDEC_REG_IMPORTANT_INDEX 11 |
|---|
| 38 | +#define RKVDEC_SOFTREST_EN BIT(20) |
|---|
| 39 | + |
|---|
| 36 | 40 | #define RKVDEC_SESSION_MAX_BUFFERS 40 |
|---|
| 37 | 41 | /* The maximum registers number of all the version */ |
|---|
| 38 | 42 | #define RKVDEC_REG_NUM 279 |
|---|
| .. | .. |
|---|
| 51 | 55 | #define RKVDEC_START_EN BIT(0) |
|---|
| 52 | 56 | |
|---|
| 53 | 57 | #define RKVDEC_REG_YSTRIDE_INDEX 20 |
|---|
| 58 | +#define RKVDEC_REG_CORE_CTRL_INDEX 28 |
|---|
| 59 | +#define RKVDEC_REG_FILM_IDX_MASK (0x3ff0000) |
|---|
| 54 | 60 | |
|---|
| 55 | 61 | #define RKVDEC_REG_RLC_BASE 0x200 |
|---|
| 56 | 62 | #define RKVDEC_REG_RLC_BASE_INDEX (128) |
|---|
| .. | .. |
|---|
| 71 | 77 | RKVDEC_BUF_EMPTY_STA |\ |
|---|
| 72 | 78 | RKVDEC_TIMEOUT_STA |\ |
|---|
| 73 | 79 | RKVDEC_ERROR_STA) |
|---|
| 80 | +#define RKVDEC_PERF_WORKING_CNT 0x41c |
|---|
| 74 | 81 | |
|---|
| 75 | 82 | /* perf sel reference register */ |
|---|
| 76 | 83 | #define RKVDEC_PERF_SEL_OFFSET 0x20000 |
|---|
| .. | .. |
|---|
| 143 | 150 | int slot_idx; |
|---|
| 144 | 151 | u32 need_hack; |
|---|
| 145 | 152 | |
|---|
| 146 | | - /* event for task wait timeout or session timeout */ |
|---|
| 147 | | - wait_queue_head_t wait; |
|---|
| 153 | + /* link table DMA buffer */ |
|---|
| 154 | + struct mpp_dma_buffer *table; |
|---|
| 148 | 155 | }; |
|---|
| 149 | 156 | |
|---|
| 150 | 157 | struct rkvdec2_session_priv { |
|---|
| .. | .. |
|---|
| 169 | 176 | struct mpp_clk_info core_clk_info; |
|---|
| 170 | 177 | struct mpp_clk_info cabac_clk_info; |
|---|
| 171 | 178 | struct mpp_clk_info hevc_cabac_clk_info; |
|---|
| 179 | + struct mpp_clk_info *cycle_clk; |
|---|
| 180 | + |
|---|
| 172 | 181 | u32 default_max_load; |
|---|
| 173 | 182 | #ifdef CONFIG_ROCKCHIP_MPP_PROC_FS |
|---|
| 174 | 183 | struct proc_dir_entry *procfs; |
|---|
| .. | .. |
|---|
| 198 | 207 | dma_addr_t rcb_iova; |
|---|
| 199 | 208 | struct page *rcb_page; |
|---|
| 200 | 209 | u32 rcb_min_width; |
|---|
| 210 | + u32 rcb_info_count; |
|---|
| 211 | + u32 rcb_infos[RKVDEC_MAX_RCB_NUM * 2]; |
|---|
| 201 | 212 | |
|---|
| 202 | 213 | /* for link mode */ |
|---|
| 203 | 214 | struct rkvdec_link_dev *link_dec; |
|---|
| 204 | 215 | struct mpp_dma_buffer *fix; |
|---|
| 216 | + |
|---|
| 217 | + /* for ccu link mode */ |
|---|
| 218 | + struct rkvdec2_ccu *ccu; |
|---|
| 219 | + u32 core_mask; |
|---|
| 220 | + u32 task_index; |
|---|
| 221 | + /* mmu info */ |
|---|
| 222 | + void __iomem *mmu_base; |
|---|
| 223 | + u32 mmu_fault; |
|---|
| 205 | 224 | }; |
|---|
| 206 | 225 | |
|---|
| 226 | +int mpp_set_rcbbuf(struct mpp_dev *mpp, struct mpp_session *session, |
|---|
| 227 | + struct mpp_task *task); |
|---|
| 228 | +int rkvdec2_task_init(struct mpp_dev *mpp, struct mpp_session *session, |
|---|
| 229 | + struct rkvdec2_task *task, struct mpp_task_msgs *msgs); |
|---|
| 207 | 230 | void *rkvdec2_alloc_task(struct mpp_session *session, |
|---|
| 208 | 231 | struct mpp_task_msgs *msgs); |
|---|
| 209 | 232 | int rkvdec2_free_task(struct mpp_session *session, struct mpp_task *mpp_task); |
|---|
| .. | .. |
|---|
| 212 | 235 | |
|---|
| 213 | 236 | int rkvdec2_result(struct mpp_dev *mpp, struct mpp_task *mpp_task, |
|---|
| 214 | 237 | struct mpp_task_msgs *msgs); |
|---|
| 238 | +int rkvdec2_reset(struct mpp_dev *mpp); |
|---|
| 239 | + |
|---|
| 240 | +void mpp_devfreq_set_core_rate(struct mpp_dev *mpp, enum MPP_CLOCK_MODE mode); |
|---|
| 215 | 241 | |
|---|
| 216 | 242 | #endif |
|---|