Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.18-rc2 129 lines 3.8 kB view raw
1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright 2024 NXP 4 */ 5 6#ifndef __DC_FETCHUNIT_H__ 7#define __DC_FETCHUNIT_H__ 8 9#include <linux/bitfield.h> 10#include <linux/bits.h> 11#include <linux/regmap.h> 12#include <linux/types.h> 13 14#include <drm/drm_fourcc.h> 15 16#include "dc-pe.h" 17 18#define FRAC_OFFSET 0x28 19 20#define STATICCONTROL 0x8 21#define BURSTBUFFERMANAGEMENT 0xc 22 23/* COLORCOMPONENTBITS */ 24#define R_BITS(x) FIELD_PREP_CONST(GENMASK(27, 24), (x)) 25#define G_BITS(x) FIELD_PREP_CONST(GENMASK(19, 16), (x)) 26#define B_BITS(x) FIELD_PREP_CONST(GENMASK(11, 8), (x)) 27#define A_BITS(x) FIELD_PREP_CONST(GENMASK(3, 0), (x)) 28 29/* COLORCOMPONENTSHIFT */ 30#define R_SHIFT(x) FIELD_PREP_CONST(GENMASK(28, 24), (x)) 31#define G_SHIFT(x) FIELD_PREP_CONST(GENMASK(20, 16), (x)) 32#define B_SHIFT(x) FIELD_PREP_CONST(GENMASK(12, 8), (x)) 33#define A_SHIFT(x) FIELD_PREP_CONST(GENMASK(4, 0), (x)) 34 35/* LAYERPROPERTY */ 36#define YUVCONVERSIONMODE_MASK GENMASK(18, 17) 37#define YUVCONVERSIONMODE(x) FIELD_PREP(YUVCONVERSIONMODE_MASK, (x)) 38#define SOURCEBUFFERENABLE BIT(31) 39 40/* FRAMEDIMENSIONS */ 41#define FRAMEWIDTH(x) FIELD_PREP(GENMASK(13, 0), (x)) 42#define FRAMEHEIGHT(x) FIELD_PREP(GENMASK(29, 16), (x)) 43 44/* CONTROL */ 45#define INPUTSELECT_MASK GENMASK(4, 3) 46#define INPUTSELECT(x) FIELD_PREP(INPUTSELECT_MASK, (x)) 47#define RASTERMODE_MASK GENMASK(2, 0) 48#define RASTERMODE(x) FIELD_PREP(RASTERMODE_MASK, (x)) 49 50enum dc_yuvconversionmode { 51 YUVCONVERSIONMODE_OFF, 52}; 53 54enum dc_inputselect { 55 INPUTSELECT_INACTIVE, 56}; 57 58enum dc_rastermode { 59 RASTERMODE_NORMAL, 60}; 61 62enum { 63 DC_FETCHUNIT_FL0, 64 DC_FETCHUNIT_FW2, 65}; 66 67enum dc_fu_frac { 68 DC_FETCHUNIT_FRAC0, 69 DC_FETCHUNIT_FRAC1, 70 DC_FETCHUNIT_FRAC2, 71 DC_FETCHUNIT_FRAC3, 72 DC_FETCHUNIT_FRAC4, 73 DC_FETCHUNIT_FRAC5, 74 DC_FETCHUNIT_FRAC6, 75 DC_FETCHUNIT_FRAC7, 76 DC_FETCHUNIT_FRAC_NUM 77}; 78 79struct dc_fu; 80struct dc_lb; 81 82struct dc_fu_ops { 83 void (*init)(struct dc_fu *fu); 84 void (*set_burstlength)(struct dc_fu *fu, dma_addr_t baddr); 85 void (*set_baseaddress)(struct dc_fu *fu, enum dc_fu_frac frac, 86 dma_addr_t baddr); 87 void (*set_src_stride)(struct dc_fu *fu, enum dc_fu_frac frac, 88 unsigned int stride); 89 void (*set_src_buf_dimensions)(struct dc_fu *fu, enum dc_fu_frac frac, 90 int w, int h); 91 void (*set_fmt)(struct dc_fu *fu, enum dc_fu_frac frac, 92 const struct drm_format_info *format); 93 void (*enable_src_buf)(struct dc_fu *fu, enum dc_fu_frac frac); 94 void (*disable_src_buf)(struct dc_fu *fu, enum dc_fu_frac frac); 95 void (*set_framedimensions)(struct dc_fu *fu, int w, int h); 96 void (*set_layerblend)(struct dc_fu *fu, struct dc_lb *lb); 97 enum dc_link_id (*get_link_id)(struct dc_fu *fu); 98 const char *(*get_name)(struct dc_fu *fu); 99}; 100 101struct dc_fu { 102 struct regmap *reg_pec; 103 struct regmap *reg_cfg; 104 char name[21]; 105 u32 reg_baseaddr[DC_FETCHUNIT_FRAC_NUM]; 106 u32 reg_sourcebufferattributes[DC_FETCHUNIT_FRAC_NUM]; 107 u32 reg_sourcebufferdimension[DC_FETCHUNIT_FRAC_NUM]; 108 u32 reg_layeroffset[DC_FETCHUNIT_FRAC_NUM]; 109 u32 reg_clipwindowoffset[DC_FETCHUNIT_FRAC_NUM]; 110 u32 reg_clipwindowdimensions[DC_FETCHUNIT_FRAC_NUM]; 111 u32 reg_constantcolor[DC_FETCHUNIT_FRAC_NUM]; 112 u32 reg_layerproperty[DC_FETCHUNIT_FRAC_NUM]; 113 unsigned int id; 114 enum dc_link_id link_id; 115 struct dc_fu_ops ops; 116 struct dc_lb *lb; 117}; 118 119extern const struct dc_fu_ops dc_fu_common_ops; 120 121void dc_fu_get_pixel_format_bits(struct dc_fu *fu, u32 format, u32 *bits); 122void dc_fu_get_pixel_format_shifts(struct dc_fu *fu, u32 format, u32 *shifts); 123void dc_fu_shdldreq_sticky(struct dc_fu *fu, u8 layer_mask); 124void dc_fu_set_src_bpp(struct dc_fu *fu, enum dc_fu_frac frac, unsigned int bpp); 125void dc_fu_common_hw_init(struct dc_fu *fu); 126 127const struct dc_fu_ops *dc_fu_get_ops(struct dc_fu *fu); 128 129#endif /* __DC_FETCHUNIT_H__ */