Lines Matching full:ch
118 struct dcss_dpr_ch ch[3]; member
121 static void dcss_dpr_write(struct dcss_dpr_ch *ch, u32 val, u32 ofs) in dcss_dpr_write() argument
123 struct dcss_dpr *dpr = ch->dpr; in dcss_dpr_write()
125 dcss_ctxld_write(dpr->ctxld, dpr->ctx_id, val, ch->base_ofs + ofs); in dcss_dpr_write()
130 struct dcss_dpr_ch *ch; in dcss_dpr_ch_init_all() local
134 ch = &dpr->ch[i]; in dcss_dpr_ch_init_all()
136 ch->base_ofs = dpr_base + i * 0x1000; in dcss_dpr_ch_init_all()
138 ch->base_reg = devm_ioremap(dpr->dev, ch->base_ofs, SZ_4K); in dcss_dpr_ch_init_all()
139 if (!ch->base_reg) { in dcss_dpr_ch_init_all()
140 dev_err(dpr->dev, "dpr: unable to remap ch %d base\n", in dcss_dpr_ch_init_all()
145 ch->dpr = dpr; in dcss_dpr_ch_init_all()
146 ch->ch_num = i; in dcss_dpr_ch_init_all()
148 dcss_writel(0xff, ch->base_reg + DCSS_DPR_IRQ_MASK); in dcss_dpr_ch_init_all()
179 struct dcss_dpr_ch *ch = &dpr->ch[ch_no]; in dcss_dpr_exit() local
181 dcss_writel(0, ch->base_reg + DCSS_DPR_SYSTEM_CTRL0); in dcss_dpr_exit()
185 static u32 dcss_dpr_x_pix_wide_adjust(struct dcss_dpr_ch *ch, u32 pix_wide, in dcss_dpr_x_pix_wide_adjust() argument
197 pix_in_64byte = pix_in_64byte_map[ch->pix_size][ch->tile]; in dcss_dpr_x_pix_wide_adjust()
205 static u32 dcss_dpr_y_pix_high_adjust(struct dcss_dpr_ch *ch, u32 pix_high, in dcss_dpr_y_pix_high_adjust() argument
208 u8 num_rows_buf = ch->rtram_4line_en ? 4 : 8; in dcss_dpr_y_pix_high_adjust()
219 struct dcss_dpr_ch *ch = &dpr->ch[ch_num]; in dcss_dpr_set_res() local
220 u32 pix_format = ch->format.format; in dcss_dpr_set_res()
232 pix_x_wide = dcss_dpr_x_pix_wide_adjust(ch, xres, pix_format); in dcss_dpr_set_res()
233 pix_y_high = dcss_dpr_y_pix_high_adjust(ch, yres, pix_format); in dcss_dpr_set_res()
235 dcss_dpr_write(ch, pix_x_wide, in dcss_dpr_set_res()
237 dcss_dpr_write(ch, pix_y_high, in dcss_dpr_set_res()
240 dcss_dpr_write(ch, 2, DCSS_DPR_FRAME_1P_CTRL0 + plane * gap); in dcss_dpr_set_res()
247 struct dcss_dpr_ch *ch = &dpr->ch[ch_num]; in dcss_dpr_addr_set() local
249 dcss_dpr_write(ch, luma_base_addr, DCSS_DPR_FRAME_1P_BASE_ADDR); in dcss_dpr_addr_set()
251 dcss_dpr_write(ch, chroma_base_addr, DCSS_DPR_FRAME_2P_BASE_ADDR); in dcss_dpr_addr_set()
253 ch->frame_ctrl &= ~PITCH_MASK; in dcss_dpr_addr_set()
254 ch->frame_ctrl |= (((u32)pitch << PITCH_POS) & PITCH_MASK); in dcss_dpr_addr_set()
257 static void dcss_dpr_argb_comp_sel(struct dcss_dpr_ch *ch, int a_sel, int r_sel, in dcss_dpr_argb_comp_sel() argument
267 ch->mode_ctrl &= ~(A_COMP_SEL_MASK | R_COMP_SEL_MASK | in dcss_dpr_argb_comp_sel()
269 ch->mode_ctrl |= sel; in dcss_dpr_argb_comp_sel()
272 static void dcss_dpr_pix_size_set(struct dcss_dpr_ch *ch, in dcss_dpr_pix_size_set() argument
295 ch->pix_size = val; in dcss_dpr_pix_size_set()
297 ch->mode_ctrl &= ~PIX_SIZE_MASK; in dcss_dpr_pix_size_set()
298 ch->mode_ctrl |= ((val << PIX_SIZE_POS) & PIX_SIZE_MASK); in dcss_dpr_pix_size_set()
301 static void dcss_dpr_uv_swap(struct dcss_dpr_ch *ch, bool swap) in dcss_dpr_uv_swap() argument
303 ch->mode_ctrl &= ~PIX_UV_SWAP; in dcss_dpr_uv_swap()
304 ch->mode_ctrl |= (swap ? PIX_UV_SWAP : 0); in dcss_dpr_uv_swap()
307 static void dcss_dpr_y_uv_swap(struct dcss_dpr_ch *ch, bool swap) in dcss_dpr_y_uv_swap() argument
309 ch->mode_ctrl &= ~PIX_LUMA_UV_SWAP; in dcss_dpr_y_uv_swap()
310 ch->mode_ctrl |= (swap ? PIX_LUMA_UV_SWAP : 0); in dcss_dpr_y_uv_swap()
313 static void dcss_dpr_2plane_en(struct dcss_dpr_ch *ch, bool en) in dcss_dpr_2plane_en() argument
315 ch->mode_ctrl &= ~COMP_2PLANE_EN; in dcss_dpr_2plane_en()
316 ch->mode_ctrl |= (en ? COMP_2PLANE_EN : 0); in dcss_dpr_2plane_en()
319 static void dcss_dpr_yuv_en(struct dcss_dpr_ch *ch, bool en) in dcss_dpr_yuv_en() argument
321 ch->mode_ctrl &= ~YUV_EN; in dcss_dpr_yuv_en()
322 ch->mode_ctrl |= (en ? YUV_EN : 0); in dcss_dpr_yuv_en()
327 struct dcss_dpr_ch *ch = &dpr->ch[ch_num]; in dcss_dpr_enable() local
333 dcss_dpr_write(ch, ch->mode_ctrl, DCSS_DPR_MODE_CTRL0); in dcss_dpr_enable()
334 dcss_dpr_write(ch, ch->frame_ctrl, DCSS_DPR_FRAME_CTRL0); in dcss_dpr_enable()
335 dcss_dpr_write(ch, ch->rtram_ctrl, DCSS_DPR_RTRAM_CTRL0); in dcss_dpr_enable()
338 if (ch->sys_ctrl != sys_ctrl) in dcss_dpr_enable()
339 ch->sys_ctrl_chgd = true; in dcss_dpr_enable()
341 ch->sys_ctrl = sys_ctrl; in dcss_dpr_enable()
382 static void dcss_dpr_rtram_set(struct dcss_dpr_ch *ch, u32 pix_format) in dcss_dpr_rtram_set() argument
389 ch->rtram_3buf_en = true; in dcss_dpr_rtram_set()
390 ch->rtram_4line_en = false; in dcss_dpr_rtram_set()
394 ch->rtram_3buf_en = true; in dcss_dpr_rtram_set()
395 ch->rtram_4line_en = true; in dcss_dpr_rtram_set()
399 val = (ch->rtram_4line_en ? RTR_4LINE_BUF_EN : 0); in dcss_dpr_rtram_set()
400 val |= (ch->rtram_3buf_en ? RTR_3BUF_EN : 0); in dcss_dpr_rtram_set()
403 ch->mode_ctrl &= ~mask; in dcss_dpr_rtram_set()
404 ch->mode_ctrl |= (val & mask); in dcss_dpr_rtram_set()
406 val = (ch->rtram_4line_en ? 0 : NUM_ROWS_ACTIVE); in dcss_dpr_rtram_set()
411 ch->rtram_ctrl &= ~mask; in dcss_dpr_rtram_set()
412 ch->rtram_ctrl |= (val & mask); in dcss_dpr_rtram_set()
415 static void dcss_dpr_setup_components(struct dcss_dpr_ch *ch, in dcss_dpr_setup_components() argument
444 dcss_dpr_uv_swap(ch, uv_swap); in dcss_dpr_setup_components()
446 dcss_dpr_y_uv_swap(ch, y_uv_swap); in dcss_dpr_setup_components()
451 dcss_dpr_argb_comp_sel(ch, a_sel, r_sel, g_sel, b_sel); in dcss_dpr_setup_components()
453 dcss_dpr_argb_comp_sel(ch, 3, 2, 1, 0); in dcss_dpr_setup_components()
456 dcss_dpr_argb_comp_sel(ch, 0, 0, 0, 0); in dcss_dpr_setup_components()
460 static void dcss_dpr_tile_set(struct dcss_dpr_ch *ch, uint64_t modifier) in dcss_dpr_tile_set() argument
462 switch (ch->ch_num) { in dcss_dpr_tile_set()
466 ch->tile = TILE_LINEAR; in dcss_dpr_tile_set()
469 ch->tile = TILE_GPU_STANDARD; in dcss_dpr_tile_set()
472 ch->tile = TILE_GPU_SUPER; in dcss_dpr_tile_set()
481 ch->tile = TILE_LINEAR; in dcss_dpr_tile_set()
488 ch->mode_ctrl &= ~TILE_TYPE_MASK; in dcss_dpr_tile_set()
489 ch->mode_ctrl |= ((ch->tile << TILE_TYPE_POS) & TILE_TYPE_MASK); in dcss_dpr_tile_set()
495 struct dcss_dpr_ch *ch = &dpr->ch[ch_num]; in dcss_dpr_format_set() local
497 ch->format = *format; in dcss_dpr_format_set()
499 dcss_dpr_yuv_en(ch, format->is_yuv); in dcss_dpr_format_set()
501 dcss_dpr_pix_size_set(ch, format); in dcss_dpr_format_set()
503 dcss_dpr_setup_components(ch, format); in dcss_dpr_format_set()
505 dcss_dpr_2plane_en(ch, format->num_planes == 2); in dcss_dpr_format_set()
507 dcss_dpr_rtram_set(ch, format->format); in dcss_dpr_format_set()
509 dcss_dpr_tile_set(ch, modifier); in dcss_dpr_format_set()
520 struct dcss_dpr_ch *ch = &dpr->ch[chnum]; in dcss_dpr_write_sysctrl() local
522 if (ch->sys_ctrl_chgd) { in dcss_dpr_write_sysctrl()
524 ch->sys_ctrl, in dcss_dpr_write_sysctrl()
525 ch->base_ofs + in dcss_dpr_write_sysctrl()
527 ch->sys_ctrl_chgd = false; in dcss_dpr_write_sysctrl()
534 struct dcss_dpr_ch *ch = &dpr->ch[ch_num]; in dcss_dpr_set_rotation() local
536 ch->frame_ctrl &= ~(HFLIP_EN | VFLIP_EN | ROT_ENC_MASK); in dcss_dpr_set_rotation()
538 ch->frame_ctrl |= rotation & DRM_MODE_REFLECT_X ? HFLIP_EN : 0; in dcss_dpr_set_rotation()
539 ch->frame_ctrl |= rotation & DRM_MODE_REFLECT_Y ? VFLIP_EN : 0; in dcss_dpr_set_rotation()
542 ch->frame_ctrl |= 1 << ROT_ENC_POS; in dcss_dpr_set_rotation()
544 ch->frame_ctrl |= 2 << ROT_ENC_POS; in dcss_dpr_set_rotation()
546 ch->frame_ctrl |= 3 << ROT_ENC_POS; in dcss_dpr_set_rotation()