Lines Matching refs:ch

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