xref: /rockchip-linux_mpp/mpp/hal/rkenc/common/vepu580_common.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2025 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #ifndef __VEPU580_COMMON_H__
7*437bfbebSnyanmisaka #define __VEPU580_COMMON_H__
8*437bfbebSnyanmisaka 
9*437bfbebSnyanmisaka #include "vepu5xx_common.h"
10*437bfbebSnyanmisaka 
11*437bfbebSnyanmisaka #define VEPU580_SLICE_FIFO_LEN          32
12*437bfbebSnyanmisaka #define VEPU580_OSD_ADDR_IDX_BASE       3092
13*437bfbebSnyanmisaka 
14*437bfbebSnyanmisaka typedef struct Vepu580OsdPltColor_t {
15*437bfbebSnyanmisaka     /* V component */
16*437bfbebSnyanmisaka     RK_U32  v                       : 8;
17*437bfbebSnyanmisaka     /* U component */
18*437bfbebSnyanmisaka     RK_U32  u                       : 8;
19*437bfbebSnyanmisaka     /* Y component */
20*437bfbebSnyanmisaka     RK_U32  y                       : 8;
21*437bfbebSnyanmisaka     /* Alpha */
22*437bfbebSnyanmisaka     RK_U32  alpha                   : 8;
23*437bfbebSnyanmisaka } Vepu580OsdPltColor;
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka typedef struct Vepu580OsdPos_t {
26*437bfbebSnyanmisaka     /* X coordinate/16 of OSD region's left-top point. */
27*437bfbebSnyanmisaka     RK_U32  osd_lt_x                : 10;
28*437bfbebSnyanmisaka     RK_U32  reserved0               : 6;
29*437bfbebSnyanmisaka     /* Y coordinate/16 of OSD region's left-top point. */
30*437bfbebSnyanmisaka     RK_U32  osd_lt_y                : 10;
31*437bfbebSnyanmisaka     RK_U32  reserved1               : 6;
32*437bfbebSnyanmisaka     /* X coordinate/16 of OSD region's right-bottom point. */
33*437bfbebSnyanmisaka     RK_U32  osd_rb_x                : 10;
34*437bfbebSnyanmisaka     RK_U32  reserved2               : 6;
35*437bfbebSnyanmisaka     /* Y coordinate/16 of OSD region's right-bottom point. */
36*437bfbebSnyanmisaka     RK_U32  osd_rb_y                : 10;
37*437bfbebSnyanmisaka     RK_U32  reserved3               : 6;
38*437bfbebSnyanmisaka } Vepu580OsdPos;
39*437bfbebSnyanmisaka 
40*437bfbebSnyanmisaka typedef struct Vepu580OsdReg_t {
41*437bfbebSnyanmisaka     /*
42*437bfbebSnyanmisaka      * OSD_INV_CFG
43*437bfbebSnyanmisaka      * Address offset: 0x00003000 Access type: read and write
44*437bfbebSnyanmisaka      * OSD color inverse  configuration
45*437bfbebSnyanmisaka      */
46*437bfbebSnyanmisaka     struct {
47*437bfbebSnyanmisaka         /*
48*437bfbebSnyanmisaka          * OSD color inverse enable of luma component,
49*437bfbebSnyanmisaka          * each bit controls corresponding region.
50*437bfbebSnyanmisaka          */
51*437bfbebSnyanmisaka         RK_U32  osd_lu_inv_en           : 8;
52*437bfbebSnyanmisaka 
53*437bfbebSnyanmisaka         /* OSD color inverse enable of chroma component,
54*437bfbebSnyanmisaka         * each bit controls corresponding region.
55*437bfbebSnyanmisaka         */
56*437bfbebSnyanmisaka         RK_U32  osd_ch_inv_en               : 8;
57*437bfbebSnyanmisaka         /*
58*437bfbebSnyanmisaka          * OSD color inverse expression switch for luma component
59*437bfbebSnyanmisaka          * each bit controls corresponding region.
60*437bfbebSnyanmisaka          * 1'h0: Expression need to determine the condition;
61*437bfbebSnyanmisaka          * 1'h1: Expression don't need to determine the condition;
62*437bfbebSnyanmisaka          */
63*437bfbebSnyanmisaka         RK_U32  osd_lu_inv_msk          : 8;
64*437bfbebSnyanmisaka         /*
65*437bfbebSnyanmisaka          * OSD color inverse expression switch for chroma component
66*437bfbebSnyanmisaka          * each bit controls corresponding region.
67*437bfbebSnyanmisaka          * 1'h0: Expression need to determine the condition;
68*437bfbebSnyanmisaka          * 1'h1: Expression don't need to determine the condition;
69*437bfbebSnyanmisaka          */
70*437bfbebSnyanmisaka         RK_U32  osd_ch_inv_msk          : 8;
71*437bfbebSnyanmisaka     } reg3072;
72*437bfbebSnyanmisaka 
73*437bfbebSnyanmisaka     /*
74*437bfbebSnyanmisaka      * OSD_INV
75*437bfbebSnyanmisaka      * Address offset: 0x3004 Access type: read and write
76*437bfbebSnyanmisaka      * OSD color inverse configuration
77*437bfbebSnyanmisaka      */
78*437bfbebSnyanmisaka     struct {
79*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region0. */
80*437bfbebSnyanmisaka         RK_U32  osd_ithd_r0             : 4;
81*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region1. */
82*437bfbebSnyanmisaka         RK_U32  osd_ithd_r1             : 4;
83*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region2. */
84*437bfbebSnyanmisaka         RK_U32  osd_ithd_r2             : 4;
85*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region3. */
86*437bfbebSnyanmisaka         RK_U32  osd_ithd_r3             : 4;
87*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region4. */
88*437bfbebSnyanmisaka         RK_U32  osd_ithd_r4             : 4;
89*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region5. */
90*437bfbebSnyanmisaka         RK_U32  osd_ithd_r5             : 4;
91*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region6. */
92*437bfbebSnyanmisaka         RK_U32  osd_ithd_r6             : 4;
93*437bfbebSnyanmisaka         /* Color inverse theshold for OSD region7. */
94*437bfbebSnyanmisaka         RK_U32  osd_ithd_r7             : 4;
95*437bfbebSnyanmisaka     } reg3073;
96*437bfbebSnyanmisaka 
97*437bfbebSnyanmisaka     /*
98*437bfbebSnyanmisaka      * OSD_CFG
99*437bfbebSnyanmisaka      * Address offset: 0x3008 Access type: read and write
100*437bfbebSnyanmisaka      * OSD configuration
101*437bfbebSnyanmisaka      */
102*437bfbebSnyanmisaka     struct {
103*437bfbebSnyanmisaka         /* OSD region enable, each bit controls corresponding OSD region. */
104*437bfbebSnyanmisaka         RK_U32  osd_e                   : 8;
105*437bfbebSnyanmisaka         /*
106*437bfbebSnyanmisaka          * OSD color inverse expression type
107*437bfbebSnyanmisaka          * each bit controls corresponding region.
108*437bfbebSnyanmisaka          * 1'h0: AND;
109*437bfbebSnyanmisaka          * 1'h1: OR
110*437bfbebSnyanmisaka          */
111*437bfbebSnyanmisaka         RK_U32  osd_itype           : 8;
112*437bfbebSnyanmisaka         /*
113*437bfbebSnyanmisaka          * OSD palette clock selection.
114*437bfbebSnyanmisaka          * 1'h0: Configure bus clock domain.
115*437bfbebSnyanmisaka          * 1'h1: Core clock domain.
116*437bfbebSnyanmisaka          */
117*437bfbebSnyanmisaka         RK_U32  osd_plt_cks             : 1;
118*437bfbebSnyanmisaka         /*
119*437bfbebSnyanmisaka          * OSD palette type.
120*437bfbebSnyanmisaka          * 1'h1: Default type.
121*437bfbebSnyanmisaka          * 1'h0: User defined type.
122*437bfbebSnyanmisaka          */
123*437bfbebSnyanmisaka         RK_U32  osd_plt_typ             : 1;
124*437bfbebSnyanmisaka         RK_U32  reserved                : 14;
125*437bfbebSnyanmisaka     } reg3074;
126*437bfbebSnyanmisaka 
127*437bfbebSnyanmisaka     RK_U32 reserved_3075;
128*437bfbebSnyanmisaka     /*
129*437bfbebSnyanmisaka      * OSD_POS reg3076_reg3091
130*437bfbebSnyanmisaka      * Address offset: 0x3010~0x304c Access type: read and write
131*437bfbebSnyanmisaka      * OSD region position
132*437bfbebSnyanmisaka      */
133*437bfbebSnyanmisaka     Vepu580OsdPos  osd_pos[8];
134*437bfbebSnyanmisaka 
135*437bfbebSnyanmisaka     /*
136*437bfbebSnyanmisaka      * ADR_OSD reg3092_reg3099
137*437bfbebSnyanmisaka      * Address offset: 0x00003050~reg306c Access type: read and write
138*437bfbebSnyanmisaka      * Base address for OSD region, 16B aligned
139*437bfbebSnyanmisaka      */
140*437bfbebSnyanmisaka     RK_U32  osd_addr[8];
141*437bfbebSnyanmisaka 
142*437bfbebSnyanmisaka     RK_U32 reserved3100_3103[4];
143*437bfbebSnyanmisaka     Vepu580OsdPltColor plt_data[256];
144*437bfbebSnyanmisaka } Vepu580OsdReg;
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka MPP_RET vepu580_set_osd(Vepu5xxOsdCfg *cfg);
147*437bfbebSnyanmisaka 
148*437bfbebSnyanmisaka #endif /* __VEPU580_COMMON_H__ */
149