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