Lines Matching refs:req
92 static void rotate_dst_addr_x(struct mdp_blit_req *req, struct mdp_regs *regs) in rotate_dst_addr_x() argument
94 regs->dst0 += (req->dst_rect.w - in rotate_dst_addr_x()
95 min((uint32_t)16, req->dst_rect.w)) * regs->dst_bpp; in rotate_dst_addr_x()
96 regs->dst1 += (req->dst_rect.w - in rotate_dst_addr_x()
97 min((uint32_t)16, req->dst_rect.w)) * regs->dst_bpp; in rotate_dst_addr_x()
100 static void rotate_dst_addr_y(struct mdp_blit_req *req, struct mdp_regs *regs) in rotate_dst_addr_y() argument
102 regs->dst0 += (req->dst_rect.h - in rotate_dst_addr_y()
103 min((uint32_t)16, req->dst_rect.h)) * in rotate_dst_addr_y()
105 regs->dst1 += (req->dst_rect.h - in rotate_dst_addr_y()
106 min((uint32_t)16, req->dst_rect.h)) * in rotate_dst_addr_y()
110 static void blit_rotate(struct mdp_blit_req *req, in blit_rotate() argument
113 if (req->flags == MDP_ROT_NOP) in blit_rotate()
117 if ((req->flags & MDP_ROT_90 || req->flags & MDP_FLIP_LR) && in blit_rotate()
118 !(req->flags & MDP_ROT_90 && req->flags & MDP_FLIP_LR)) in blit_rotate()
119 rotate_dst_addr_x(req, regs); in blit_rotate()
120 if (req->flags & MDP_ROT_90) in blit_rotate()
122 if (req->flags & MDP_FLIP_UD) { in blit_rotate()
124 rotate_dst_addr_y(req, regs); in blit_rotate()
126 if (req->flags & MDP_FLIP_LR) in blit_rotate()
130 static void blit_convert(struct mdp_blit_req *req, struct mdp_regs *regs) in blit_convert() argument
132 if (req->src.format == req->dst.format) in blit_convert()
134 if (IS_RGB(req->src.format) && IS_YCRCB(req->dst.format)) { in blit_convert()
136 } else if (IS_YCRCB(req->src.format) && IS_RGB(req->dst.format)) { in blit_convert()
138 if (req->dst.format == MDP_RGB_565) in blit_convert()
145 static uint32_t transp_convert(struct mdp_blit_req *req) in transp_convert() argument
148 if (req->src.format == MDP_RGB_565) { in transp_convert()
151 transp |= ((GET_BIT_RANGE(req->transp_mask, 15, 11) << 3) | in transp_convert()
152 (GET_BIT_RANGE(req->transp_mask, 15, 13))) << 16; in transp_convert()
154 transp |= ((GET_BIT_RANGE(req->transp_mask, 4, 0) << 3) | in transp_convert()
155 (GET_BIT_RANGE(req->transp_mask, 4, 2))) << 8; in transp_convert()
157 transp |= (GET_BIT_RANGE(req->transp_mask, 10, 5) << 2) | in transp_convert()
158 (GET_BIT_RANGE(req->transp_mask, 10, 9)); in transp_convert()
161 transp |= (GET_BIT_RANGE(req->transp_mask, 15, 8)) | in transp_convert()
162 (GET_BIT_RANGE(req->transp_mask, 23, 16) << 16) | in transp_convert()
163 (GET_BIT_RANGE(req->transp_mask, 7, 0) << 8); in transp_convert()
169 static void blit_blend(struct mdp_blit_req *req, struct mdp_regs *regs) in blit_blend() argument
172 if (req->transp_mask != MDP_TRANSP_NOP) { in blit_blend()
173 req->transp_mask = transp_convert(req); in blit_blend()
174 if (req->alpha != MDP_ALPHA_NOP) { in blit_blend()
191 req->alpha &= 0xff; in blit_blend()
193 if (HAS_ALPHA(req->src.format)) { in blit_blend()
196 } else if (req->alpha < MDP_ALPHA_NOP) { in blit_blend()
203 regs->op |= bg_op_chroma[req->dst.format]; in blit_blend()
336 static int get_edge_cond(struct mdp_blit_req *req, struct mdp_regs *regs) in get_edge_cond() argument
352 if (req->flags & MDP_ROT_90) { in get_edge_cond()
353 dst_w = req->dst_rect.h; in get_edge_cond()
354 dst_h = req->dst_rect.w; in get_edge_cond()
356 dst_w = req->dst_rect.w; in get_edge_cond()
357 dst_h = req->dst_rect.h; in get_edge_cond()
361 get_edge_info(req->src_rect.h, req->src_rect.y, dst_h, in get_edge_cond()
364 get_edge_info(req->src_rect.w, req->src_rect.x, dst_w, in get_edge_cond()
368 luma_interp[IMG_LEFT] = req->src_rect.x; in get_edge_cond()
369 luma_interp[IMG_RIGHT] = req->src_rect.x + req->src_rect.w - 1; in get_edge_cond()
370 luma_interp[IMG_TOP] = req->src_rect.y; in get_edge_cond()
371 luma_interp[IMG_BOTTOM] = req->src_rect.y + req->src_rect.h - 1; in get_edge_cond()
383 chroma_bound[IMG_LEFT] = req->src_rect.x; in get_edge_cond()
384 chroma_bound[IMG_RIGHT] = req->src_rect.x + req->src_rect.w - 1; in get_edge_cond()
385 chroma_bound[IMG_TOP] = req->src_rect.y; in get_edge_cond()
386 chroma_bound[IMG_BOTTOM] = req->src_rect.y + req->src_rect.h - 1; in get_edge_cond()
388 if (IS_YCRCB(req->src.format)) { in get_edge_cond()
396 if (req->src.format == MDP_Y_CBCR_H2V2 || in get_edge_cond()
397 req->src.format == MDP_Y_CRCB_H2V2) { in get_edge_cond()
435 static int blit_scale(const struct mdp_info *mdp, struct mdp_blit_req *req, in blit_scale() argument
443 if (req->flags & MDP_ROT_90) { in blit_scale()
444 dst_w = req->dst_rect.h; in blit_scale()
445 dst_h = req->dst_rect.w; in blit_scale()
447 dst_w = req->dst_rect.w; in blit_scale()
448 dst_h = req->dst_rect.h; in blit_scale()
450 if ((req->src_rect.w == dst_w) && (req->src_rect.h == dst_h) && in blit_scale()
451 !(req->flags & MDP_BLUR)) { in blit_scale()
459 if (scale_params(req->src_rect.w, dst_w, 1, &phase_init_x, in blit_scale()
461 scale_params(req->src_rect.h, dst_h, 1, &phase_init_y, in blit_scale()
465 scale_factor_x = (dst_w * 10) / req->src_rect.w; in blit_scale()
466 scale_factor_y = (dst_h * 10) / req->src_rect.h; in blit_scale()
503 static void blit_blur(const struct mdp_info *mdp, struct mdp_blit_req *req, in blit_blur() argument
506 if (!(req->flags & MDP_BLUR)) in blit_blur()
538 struct mdp_blit_req *req, struct mdp_regs *regs) in valid_src_dst() argument
545 get_len(&req->src, &req->src_rect, regs->src_bpp, &src0_len, in valid_src_dst()
547 get_len(&req->dst, &req->dst_rect, regs->dst_bpp, &dst0_len, in valid_src_dst()
579 static void flush_imgs(struct mdp_blit_req *req, struct mdp_regs *regs, in flush_imgs() argument
604 static int send_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, in send_blit() argument
622 mdp_writel(mdp, (req->alpha << 24) | (req->transp_mask & 0xffffff), in send_blit()
637 mdp_writel(mdp, src_img_cfg[req->dst.format], PPP_ADDR_BG_CFG); in send_blit()
638 mdp_writel(mdp, pack_pattern[req->dst.format], in send_blit()
641 flush_imgs(req, regs, src_file, dst_file); in send_blit()
646 int mdp_ppp_blit(const struct mdp_info *mdp, struct mdp_blit_req *req, in mdp_ppp_blit() argument
652 if (unlikely(req->src.format >= MDP_IMGTYPE_LIMIT || in mdp_ppp_blit()
653 req->dst.format >= MDP_IMGTYPE_LIMIT)) { in mdp_ppp_blit()
658 if (unlikely(req->src_rect.x > req->src.width || in mdp_ppp_blit()
659 req->src_rect.y > req->src.height || in mdp_ppp_blit()
660 req->dst_rect.x > req->dst.width || in mdp_ppp_blit()
661 req->dst_rect.y > req->dst.height)) { in mdp_ppp_blit()
667 regs.src_cfg = src_img_cfg[req->src.format]; in mdp_ppp_blit()
668 regs.src_cfg |= (req->src_rect.x & 0x1) ? PPP_SRC_BPP_ROI_ODD_X : 0; in mdp_ppp_blit()
669 regs.src_cfg |= (req->src_rect.y & 0x1) ? PPP_SRC_BPP_ROI_ODD_Y : 0; in mdp_ppp_blit()
670 regs.src_rect = (req->src_rect.h << 16) | req->src_rect.w; in mdp_ppp_blit()
671 regs.src_pack = pack_pattern[req->src.format]; in mdp_ppp_blit()
674 regs.dst_cfg = dst_img_cfg[req->dst.format] | PPP_DST_OUT_SEL_AXI; in mdp_ppp_blit()
675 regs.dst_rect = (req->dst_rect.h << 16) | req->dst_rect.w; in mdp_ppp_blit()
676 regs.dst_pack = pack_pattern[req->dst.format]; in mdp_ppp_blit()
679 regs.src_bpp = bytes_per_pixel[req->src.format]; in mdp_ppp_blit()
680 regs.src0 = src_start + req->src.offset; in mdp_ppp_blit()
681 regs.src_ystride = req->src.width * regs.src_bpp; in mdp_ppp_blit()
682 get_chroma_addr(&req->src, &req->src_rect, regs.src0, regs.src_bpp, in mdp_ppp_blit()
684 regs.src0 += (req->src_rect.x + (req->src_rect.y * req->src.width)) * in mdp_ppp_blit()
688 regs.dst_bpp = bytes_per_pixel[req->dst.format]; in mdp_ppp_blit()
689 regs.dst0 = dst_start + req->dst.offset; in mdp_ppp_blit()
690 regs.dst_ystride = req->dst.width * regs.dst_bpp; in mdp_ppp_blit()
691 get_chroma_addr(&req->dst, &req->dst_rect, regs.dst0, regs.dst_bpp, in mdp_ppp_blit()
693 regs.dst0 += (req->dst_rect.x + (req->dst_rect.y * req->dst.width)) * in mdp_ppp_blit()
696 if (!valid_src_dst(src_start, src_len, dst_start, dst_len, req, in mdp_ppp_blit()
706 blit_rotate(req, ®s); in mdp_ppp_blit()
707 blit_convert(req, ®s); in mdp_ppp_blit()
708 if (req->flags & MDP_DITHER) in mdp_ppp_blit()
710 blit_blend(req, ®s); in mdp_ppp_blit()
711 if (blit_scale(mdp, req, ®s)) { in mdp_ppp_blit()
715 blit_blur(mdp, req, ®s); in mdp_ppp_blit()
716 regs.op |= dst_op_chroma[req->dst.format] | in mdp_ppp_blit()
717 src_op_chroma[req->src.format]; in mdp_ppp_blit()
720 if (unlikely(req->src.format == MDP_YCRYCB_H2V1)) { in mdp_ppp_blit()
721 req->src_rect.x = req->src_rect.x & (~0x1); in mdp_ppp_blit()
722 req->src_rect.w = req->src_rect.w & (~0x1); in mdp_ppp_blit()
723 req->dst_rect.x = req->dst_rect.x & (~0x1); in mdp_ppp_blit()
724 req->dst_rect.w = req->dst_rect.w & (~0x1); in mdp_ppp_blit()
726 if (get_edge_cond(req, ®s)) in mdp_ppp_blit()
729 send_blit(mdp, req, ®s, src_file, dst_file); in mdp_ppp_blit()