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

rga.h (2145B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
      4 * Author: Jacob Chen <jacob-chen@iotwrt.com>
      5 */
      6#ifndef __RGA_H__
      7#define __RGA_H__
      8
      9#include <linux/platform_device.h>
     10#include <media/videobuf2-v4l2.h>
     11#include <media/v4l2-ctrls.h>
     12#include <media/v4l2-device.h>
     13
     14#define RGA_NAME "rockchip-rga"
     15
     16struct rga_fmt {
     17	u32 fourcc;
     18	int depth;
     19	u8 uv_factor;
     20	u8 y_div;
     21	u8 x_div;
     22	u8 color_swap;
     23	u8 hw_format;
     24};
     25
     26struct rga_frame {
     27	/* Original dimensions */
     28	u32 width;
     29	u32 height;
     30	u32 colorspace;
     31
     32	/* Crop */
     33	struct v4l2_rect crop;
     34
     35	/* Image format */
     36	struct rga_fmt *fmt;
     37
     38	/* Variables that can calculated once and reused */
     39	u32 stride;
     40	u32 size;
     41};
     42
     43struct rockchip_rga_version {
     44	u32 major;
     45	u32 minor;
     46};
     47
     48struct rga_ctx {
     49	struct v4l2_fh fh;
     50	struct rockchip_rga *rga;
     51	struct rga_frame in;
     52	struct rga_frame out;
     53	struct v4l2_ctrl_handler ctrl_handler;
     54
     55	/* Control values */
     56	u32 op;
     57	u32 hflip;
     58	u32 vflip;
     59	u32 rotate;
     60	u32 fill_color;
     61};
     62
     63struct rockchip_rga {
     64	struct v4l2_device v4l2_dev;
     65	struct v4l2_m2m_dev *m2m_dev;
     66	struct video_device *vfd;
     67
     68	struct device *dev;
     69	struct regmap *grf;
     70	void __iomem *regs;
     71	struct clk *sclk;
     72	struct clk *aclk;
     73	struct clk *hclk;
     74	struct rockchip_rga_version version;
     75
     76	/* vfd lock */
     77	struct mutex mutex;
     78	/* ctrl parm lock */
     79	spinlock_t ctrl_lock;
     80
     81	struct rga_ctx *curr;
     82	dma_addr_t cmdbuf_phy;
     83	void *cmdbuf_virt;
     84	unsigned int *src_mmu_pages;
     85	unsigned int *dst_mmu_pages;
     86};
     87
     88struct rga_frame *rga_get_frame(struct rga_ctx *ctx, enum v4l2_buf_type type);
     89
     90/* RGA Buffers Manage */
     91extern const struct vb2_ops rga_qops;
     92void rga_buf_map(struct vb2_buffer *vb);
     93
     94/* RGA Hardware */
     95static inline void rga_write(struct rockchip_rga *rga, u32 reg, u32 value)
     96{
     97	writel(value, rga->regs + reg);
     98};
     99
    100static inline u32 rga_read(struct rockchip_rga *rga, u32 reg)
    101{
    102	return readl(rga->regs + reg);
    103};
    104
    105static inline void rga_mod(struct rockchip_rga *rga, u32 reg, u32 val, u32 mask)
    106{
    107	u32 temp = rga_read(rga, reg) & ~(mask);
    108
    109	temp |= val & mask;
    110	rga_write(rga, reg, temp);
    111};
    112
    113void rga_hw_start(struct rockchip_rga *rga);
    114
    115#endif