cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mtk_mdp_regs.c (4255B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2015-2016 MediaTek Inc.
      4 * Author: Houlong Wei <houlong.wei@mediatek.com>
      5 *         Ming Hsiu Tsai <minghsiu.tsai@mediatek.com>
      6 */
      7
      8#include <linux/platform_device.h>
      9
     10#include "mtk_mdp_core.h"
     11#include "mtk_mdp_regs.h"
     12
     13
     14#define MDP_COLORFMT_PACK(VIDEO, PLANE, COPLANE, HF, VF, BITS, GROUP, SWAP, ID)\
     15	(((VIDEO) << 27) | ((PLANE) << 24) | ((COPLANE) << 22) |\
     16	((HF) << 20) | ((VF) << 18) | ((BITS) << 8) | ((GROUP) << 6) |\
     17	((SWAP) << 5) | ((ID) << 0))
     18
     19enum MDP_COLOR_ENUM {
     20	MDP_COLOR_UNKNOWN = 0,
     21	MDP_COLOR_NV12 = MDP_COLORFMT_PACK(0, 2, 1, 1, 1, 8, 1, 0, 12),
     22	MDP_COLOR_I420 = MDP_COLORFMT_PACK(0, 3, 0, 1, 1, 8, 1, 0, 8),
     23	MDP_COLOR_YV12 = MDP_COLORFMT_PACK(0, 3, 0, 1, 1, 8, 1, 1, 8),
     24	/* Mediatek proprietary format */
     25	MDP_COLOR_420_MT21 = MDP_COLORFMT_PACK(5, 2, 1, 1, 1, 256, 1, 0, 12),
     26};
     27
     28static int32_t mtk_mdp_map_color_format(int v4l2_format)
     29{
     30	switch (v4l2_format) {
     31	case V4L2_PIX_FMT_NV12M:
     32	case V4L2_PIX_FMT_NV12:
     33		return MDP_COLOR_NV12;
     34	case V4L2_PIX_FMT_MT21C:
     35		return MDP_COLOR_420_MT21;
     36	case V4L2_PIX_FMT_YUV420M:
     37	case V4L2_PIX_FMT_YUV420:
     38		return MDP_COLOR_I420;
     39	case V4L2_PIX_FMT_YVU420:
     40		return MDP_COLOR_YV12;
     41	}
     42
     43	mtk_mdp_err("Unknown format 0x%x", v4l2_format);
     44
     45	return MDP_COLOR_UNKNOWN;
     46}
     47
     48void mtk_mdp_hw_set_input_addr(struct mtk_mdp_ctx *ctx,
     49			       struct mtk_mdp_addr *addr)
     50{
     51	struct mdp_buffer *src_buf = &ctx->vpu.vsi->src_buffer;
     52	int i;
     53
     54	for (i = 0; i < ARRAY_SIZE(addr->addr); i++)
     55		src_buf->addr_mva[i] = (uint64_t)addr->addr[i];
     56}
     57
     58void mtk_mdp_hw_set_output_addr(struct mtk_mdp_ctx *ctx,
     59				struct mtk_mdp_addr *addr)
     60{
     61	struct mdp_buffer *dst_buf = &ctx->vpu.vsi->dst_buffer;
     62	int i;
     63
     64	for (i = 0; i < ARRAY_SIZE(addr->addr); i++)
     65		dst_buf->addr_mva[i] = (uint64_t)addr->addr[i];
     66}
     67
     68void mtk_mdp_hw_set_in_size(struct mtk_mdp_ctx *ctx)
     69{
     70	struct mtk_mdp_frame *frame = &ctx->s_frame;
     71	struct mdp_config *config = &ctx->vpu.vsi->src_config;
     72
     73	/* Set input pixel offset */
     74	config->crop_x = frame->crop.left;
     75	config->crop_y = frame->crop.top;
     76
     77	/* Set input cropped size */
     78	config->crop_w = frame->crop.width;
     79	config->crop_h = frame->crop.height;
     80
     81	/* Set input original size */
     82	config->x = 0;
     83	config->y = 0;
     84	config->w = frame->width;
     85	config->h = frame->height;
     86}
     87
     88void mtk_mdp_hw_set_in_image_format(struct mtk_mdp_ctx *ctx)
     89{
     90	unsigned int i;
     91	struct mtk_mdp_frame *frame = &ctx->s_frame;
     92	struct mdp_config *config = &ctx->vpu.vsi->src_config;
     93	struct mdp_buffer *src_buf = &ctx->vpu.vsi->src_buffer;
     94
     95	src_buf->plane_num = frame->fmt->num_comp;
     96	config->format = mtk_mdp_map_color_format(frame->fmt->pixelformat);
     97	config->w_stride = 0; /* MDP will calculate it by color format. */
     98	config->h_stride = 0; /* MDP will calculate it by color format. */
     99
    100	for (i = 0; i < src_buf->plane_num; i++)
    101		src_buf->plane_size[i] = frame->payload[i];
    102}
    103
    104void mtk_mdp_hw_set_out_size(struct mtk_mdp_ctx *ctx)
    105{
    106	struct mtk_mdp_frame *frame = &ctx->d_frame;
    107	struct mdp_config *config = &ctx->vpu.vsi->dst_config;
    108
    109	config->crop_x = frame->crop.left;
    110	config->crop_y = frame->crop.top;
    111	config->crop_w = frame->crop.width;
    112	config->crop_h = frame->crop.height;
    113	config->x = 0;
    114	config->y = 0;
    115	config->w = frame->width;
    116	config->h = frame->height;
    117}
    118
    119void mtk_mdp_hw_set_out_image_format(struct mtk_mdp_ctx *ctx)
    120{
    121	unsigned int i;
    122	struct mtk_mdp_frame *frame = &ctx->d_frame;
    123	struct mdp_config *config = &ctx->vpu.vsi->dst_config;
    124	struct mdp_buffer *dst_buf = &ctx->vpu.vsi->dst_buffer;
    125
    126	dst_buf->plane_num = frame->fmt->num_comp;
    127	config->format = mtk_mdp_map_color_format(frame->fmt->pixelformat);
    128	config->w_stride = 0; /* MDP will calculate it by color format. */
    129	config->h_stride = 0; /* MDP will calculate it by color format. */
    130	for (i = 0; i < dst_buf->plane_num; i++)
    131		dst_buf->plane_size[i] = frame->payload[i];
    132}
    133
    134void mtk_mdp_hw_set_rotation(struct mtk_mdp_ctx *ctx)
    135{
    136	struct mdp_config_misc *misc = &ctx->vpu.vsi->misc;
    137
    138	misc->orientation = ctx->ctrls.rotate->val;
    139	misc->hflip = ctx->ctrls.hflip->val;
    140	misc->vflip = ctx->ctrls.vflip->val;
    141}
    142
    143void mtk_mdp_hw_set_global_alpha(struct mtk_mdp_ctx *ctx)
    144{
    145	struct mdp_config_misc *misc = &ctx->vpu.vsi->misc;
    146
    147	misc->alpha = ctx->ctrls.global_alpha->val;
    148}