95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (C) Rockchip Electronics Co., Ltd.
|
|
*
|
|
* Author: Huang Lee <Putin.li@rock-chips.com>
|
|
*/
|
|
|
|
#ifndef __LINUX_RGA_HW_CONFIG_H_
|
|
#define __LINUX_RGA_HW_CONFIG_H_
|
|
|
|
#include "rga_drv.h"
|
|
|
|
enum rga_mmu {
|
|
RGA_NONE_MMU = 0,
|
|
RGA_MMU = 1,
|
|
RGA_IOMMU = 2,
|
|
};
|
|
|
|
enum rga_hw_support_format_index {
|
|
RGA_RASTER_INDEX,
|
|
RGA_AFBC16x16_INDEX,
|
|
RGA_TILE8x8_INDEX,
|
|
RGA_TILE4x4_INDEX,
|
|
RGA_RKFBC64x4_INDEX,
|
|
RGA_AFBC32x8_INDEX,
|
|
RGA_FORMAT_INDEX_BUTT,
|
|
};
|
|
|
|
enum rga_hw_issue {
|
|
RGA_HW_ISSUE_DIS_AUTO_RST,
|
|
};
|
|
|
|
struct rga_win_data {
|
|
const char *name;
|
|
const uint32_t *formats[RGA_FORMAT_INDEX_BUTT];
|
|
uint32_t formats_count[RGA_FORMAT_INDEX_BUTT];
|
|
|
|
uint32_t supported_rotations;
|
|
uint32_t scale_up_mode;
|
|
uint32_t scale_down_mode;
|
|
uint32_t rd_mode;
|
|
};
|
|
|
|
struct rga_rect {
|
|
int width;
|
|
int height;
|
|
};
|
|
|
|
struct rga_rect_range {
|
|
struct rga_rect min;
|
|
struct rga_rect max;
|
|
};
|
|
|
|
struct rga_hw_data {
|
|
uint32_t version;
|
|
uint32_t feature;
|
|
|
|
uint32_t csc_r2y_mode;
|
|
uint32_t csc_y2r_mode;
|
|
|
|
struct rga_rect_range input_range;
|
|
struct rga_rect_range output_range;
|
|
|
|
unsigned int max_upscale_factor;
|
|
unsigned int max_downscale_factor;
|
|
|
|
uint32_t byte_stride_align;
|
|
uint32_t max_byte_stride;
|
|
|
|
const struct rga_win_data *win;
|
|
unsigned int win_size;
|
|
|
|
enum rga_mmu mmu;
|
|
};
|
|
|
|
extern const struct rga_hw_data rga3_data;
|
|
extern const struct rga_hw_data rga2e_data;
|
|
extern const struct rga_hw_data rga2e_1106_data;
|
|
extern const struct rga_hw_data rga2e_3506_data;
|
|
extern const struct rga_hw_data rga2e_iommu_data;
|
|
extern const struct rga_hw_data rga2p_iommu_data;
|
|
extern const struct rga_hw_data rga2p_lite_1103b_data;
|
|
|
|
#define rga_hw_has_issue(scheduler, issue) test_bit(issue, &((scheduler)->hw_issues_mask))
|
|
#define rga_hw_set_issue_mask(scheduler, issue) set_bit(issue, &((scheduler)->hw_issues_mask))
|
|
|
|
/* Returns false if in range, true otherwise */
|
|
static inline bool rga_hw_out_of_range(const struct rga_rect_range *range, int width, int height)
|
|
{
|
|
return (width > range->max.width || height > range->max.height ||
|
|
width < range->min.width || height < range->min.height);
|
|
}
|
|
|
|
#endif /* __LINUX_RGA_HW_CONFIG_H_ */
|