root/drivers/media/platform/ti/vpe/vpe_regs.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2013 Texas Instruments Inc.
 *
 * David Griego, <dagriego@biglakesoftware.com>
 * Dale Farnsworth, <dale@farnsworth.org>
 * Archit Taneja, <archit@ti.com>
 */

#ifndef __TI_VPE_REGS_H
#define __TI_VPE_REGS_H

/* VPE register offsets and field selectors */

/* VPE top level regs */
#define VPE_PID                         0x0000
#define VPE_PID_MINOR_MASK              0x3f
#define VPE_PID_MINOR_SHIFT             0
#define VPE_PID_CUSTOM_MASK             0x03
#define VPE_PID_CUSTOM_SHIFT            6
#define VPE_PID_MAJOR_MASK              0x07
#define VPE_PID_MAJOR_SHIFT             8
#define VPE_PID_RTL_MASK                0x1f
#define VPE_PID_RTL_SHIFT               11
#define VPE_PID_FUNC_MASK               0xfff
#define VPE_PID_FUNC_SHIFT              16
#define VPE_PID_SCHEME_MASK             0x03
#define VPE_PID_SCHEME_SHIFT            30

#define VPE_SYSCONFIG                   0x0010
#define VPE_SYSCONFIG_IDLE_MASK         0x03
#define VPE_SYSCONFIG_IDLE_SHIFT        2
#define VPE_SYSCONFIG_STANDBY_MASK      0x03
#define VPE_SYSCONFIG_STANDBY_SHIFT     4
#define VPE_FORCE_IDLE_MODE             0
#define VPE_NO_IDLE_MODE                1
#define VPE_SMART_IDLE_MODE             2
#define VPE_SMART_IDLE_WAKEUP_MODE      3
#define VPE_FORCE_STANDBY_MODE          0
#define VPE_NO_STANDBY_MODE             1
#define VPE_SMART_STANDBY_MODE          2
#define VPE_SMART_STANDBY_WAKEUP_MODE   3

#define VPE_INT0_STATUS0_RAW_SET        0x0020
#define VPE_INT0_STATUS0_RAW            VPE_INT0_STATUS0_RAW_SET
#define VPE_INT0_STATUS0_CLR            0x0028
#define VPE_INT0_STATUS0                VPE_INT0_STATUS0_CLR
#define VPE_INT0_ENABLE0_SET            0x0030
#define VPE_INT0_ENABLE0                VPE_INT0_ENABLE0_SET
#define VPE_INT0_ENABLE0_CLR            0x0038
#define VPE_INT0_LIST0_COMPLETE         BIT(0)
#define VPE_INT0_LIST0_NOTIFY           BIT(1)
#define VPE_INT0_LIST1_COMPLETE         BIT(2)
#define VPE_INT0_LIST1_NOTIFY           BIT(3)
#define VPE_INT0_LIST2_COMPLETE         BIT(4)
#define VPE_INT0_LIST2_NOTIFY           BIT(5)
#define VPE_INT0_LIST3_COMPLETE         BIT(6)
#define VPE_INT0_LIST3_NOTIFY           BIT(7)
#define VPE_INT0_LIST4_COMPLETE         BIT(8)
#define VPE_INT0_LIST4_NOTIFY           BIT(9)
#define VPE_INT0_LIST5_COMPLETE         BIT(10)
#define VPE_INT0_LIST5_NOTIFY           BIT(11)
#define VPE_INT0_LIST6_COMPLETE         BIT(12)
#define VPE_INT0_LIST6_NOTIFY           BIT(13)
#define VPE_INT0_LIST7_COMPLETE         BIT(14)
#define VPE_INT0_LIST7_NOTIFY           BIT(15)
#define VPE_INT0_DESCRIPTOR             BIT(16)
#define VPE_DEI_FMD_INT                 BIT(18)

#define VPE_INT0_STATUS1_RAW_SET        0x0024
#define VPE_INT0_STATUS1_RAW            VPE_INT0_STATUS1_RAW_SET
#define VPE_INT0_STATUS1_CLR            0x002c
#define VPE_INT0_STATUS1                VPE_INT0_STATUS1_CLR
#define VPE_INT0_ENABLE1_SET            0x0034
#define VPE_INT0_ENABLE1                VPE_INT0_ENABLE1_SET
#define VPE_INT0_ENABLE1_CLR            0x003c
#define VPE_INT0_CHANNEL_GROUP0         BIT(0)
#define VPE_INT0_CHANNEL_GROUP1         BIT(1)
#define VPE_INT0_CHANNEL_GROUP2         BIT(2)
#define VPE_INT0_CHANNEL_GROUP3         BIT(3)
#define VPE_INT0_CHANNEL_GROUP4         BIT(4)
#define VPE_INT0_CHANNEL_GROUP5         BIT(5)
#define VPE_INT0_CLIENT                 BIT(7)
#define VPE_DEI_ERROR_INT               BIT(16)
#define VPE_DS1_UV_ERROR_INT            BIT(22)

#define VPE_INTC_EOI                    0x00a0

#define VPE_CLK_ENABLE                  0x0100
#define VPE_VPEDMA_CLK_ENABLE           BIT(0)
#define VPE_DATA_PATH_CLK_ENABLE        BIT(1)

#define VPE_CLK_RESET                   0x0104
#define VPE_VPDMA_CLK_RESET_MASK        0x1
#define VPE_VPDMA_CLK_RESET_SHIFT       0
#define VPE_DATA_PATH_CLK_RESET_MASK    0x1
#define VPE_DATA_PATH_CLK_RESET_SHIFT   1
#define VPE_MAIN_RESET_MASK             0x1
#define VPE_MAIN_RESET_SHIFT            31

#define VPE_CLK_FORMAT_SELECT           0x010c
#define VPE_CSC_SRC_SELECT_MASK         0x03
#define VPE_CSC_SRC_SELECT_SHIFT        0
#define VPE_RGB_OUT_SELECT              BIT(8)
#define VPE_DS_SRC_SELECT_MASK          0x07
#define VPE_DS_SRC_SELECT_SHIFT         9
#define VPE_DS_BYPASS                   BIT(16)
#define VPE_COLOR_SEPARATE_422          BIT(18)

#define VPE_DS_SRC_DEI_SCALER           (5 << VPE_DS_SRC_SELECT_SHIFT)
#define VPE_CSC_SRC_DEI_SCALER          (3 << VPE_CSC_SRC_SELECT_SHIFT)

#define VPE_CLK_RANGE_MAP               0x011c
#define VPE_RANGE_RANGE_MAP_Y_MASK      0x07
#define VPE_RANGE_RANGE_MAP_Y_SHIFT     0
#define VPE_RANGE_RANGE_MAP_UV_MASK     0x07
#define VPE_RANGE_RANGE_MAP_UV_SHIFT    3
#define VPE_RANGE_MAP_ON                BIT(6)
#define VPE_RANGE_REDUCTION_ON          BIT(28)

/* VPE chrominance upsampler regs */
#define VPE_US1_R0                      0x0304
#define VPE_US2_R0                      0x0404
#define VPE_US3_R0                      0x0504
#define VPE_US_C1_MASK                  0x3fff
#define VPE_US_C1_SHIFT                 2
#define VPE_US_C0_MASK                  0x3fff
#define VPE_US_C0_SHIFT                 18
#define VPE_US_MODE_MASK                0x03
#define VPE_US_MODE_SHIFT               16
#define VPE_ANCHOR_FID0_C1_MASK         0x3fff
#define VPE_ANCHOR_FID0_C1_SHIFT        2
#define VPE_ANCHOR_FID0_C0_MASK         0x3fff
#define VPE_ANCHOR_FID0_C0_SHIFT        18

#define VPE_US1_R1                      0x0308
#define VPE_US2_R1                      0x0408
#define VPE_US3_R1                      0x0508
#define VPE_ANCHOR_FID0_C3_MASK         0x3fff
#define VPE_ANCHOR_FID0_C3_SHIFT        2
#define VPE_ANCHOR_FID0_C2_MASK         0x3fff
#define VPE_ANCHOR_FID0_C2_SHIFT        18

#define VPE_US1_R2                      0x030c
#define VPE_US2_R2                      0x040c
#define VPE_US3_R2                      0x050c
#define VPE_INTERP_FID0_C1_MASK         0x3fff
#define VPE_INTERP_FID0_C1_SHIFT        2
#define VPE_INTERP_FID0_C0_MASK         0x3fff
#define VPE_INTERP_FID0_C0_SHIFT        18

#define VPE_US1_R3                      0x0310
#define VPE_US2_R3                      0x0410
#define VPE_US3_R3                      0x0510
#define VPE_INTERP_FID0_C3_MASK         0x3fff
#define VPE_INTERP_FID0_C3_SHIFT        2
#define VPE_INTERP_FID0_C2_MASK         0x3fff
#define VPE_INTERP_FID0_C2_SHIFT        18

#define VPE_US1_R4                      0x0314
#define VPE_US2_R4                      0x0414
#define VPE_US3_R4                      0x0514
#define VPE_ANCHOR_FID1_C1_MASK         0x3fff
#define VPE_ANCHOR_FID1_C1_SHIFT        2
#define VPE_ANCHOR_FID1_C0_MASK         0x3fff
#define VPE_ANCHOR_FID1_C0_SHIFT        18

#define VPE_US1_R5                      0x0318
#define VPE_US2_R5                      0x0418
#define VPE_US3_R5                      0x0518
#define VPE_ANCHOR_FID1_C3_MASK         0x3fff
#define VPE_ANCHOR_FID1_C3_SHIFT        2
#define VPE_ANCHOR_FID1_C2_MASK         0x3fff
#define VPE_ANCHOR_FID1_C2_SHIFT        18

#define VPE_US1_R6                      0x031c
#define VPE_US2_R6                      0x041c
#define VPE_US3_R6                      0x051c
#define VPE_INTERP_FID1_C1_MASK         0x3fff
#define VPE_INTERP_FID1_C1_SHIFT        2
#define VPE_INTERP_FID1_C0_MASK         0x3fff
#define VPE_INTERP_FID1_C0_SHIFT        18

#define VPE_US1_R7                      0x0320
#define VPE_US2_R7                      0x0420
#define VPE_US3_R7                      0x0520
#define VPE_INTERP_FID0_C3_MASK         0x3fff
#define VPE_INTERP_FID0_C3_SHIFT        2
#define VPE_INTERP_FID0_C2_MASK         0x3fff
#define VPE_INTERP_FID0_C2_SHIFT        18

/* VPE de-interlacer regs */
#define VPE_DEI_FRAME_SIZE              0x0600
#define VPE_DEI_WIDTH_MASK              0x07ff
#define VPE_DEI_WIDTH_SHIFT             0
#define VPE_DEI_HEIGHT_MASK             0x07ff
#define VPE_DEI_HEIGHT_SHIFT            16
#define VPE_DEI_INTERLACE_BYPASS        BIT(29)
#define VPE_DEI_FIELD_FLUSH             BIT(30)
#define VPE_DEI_PROGRESSIVE             BIT(31)

#define VPE_MDT_BYPASS                  0x0604
#define VPE_MDT_TEMPMAX_BYPASS          BIT(0)
#define VPE_MDT_SPATMAX_BYPASS          BIT(1)

#define VPE_MDT_SF_THRESHOLD            0x0608
#define VPE_MDT_SF_SC_THR1_MASK         0xff
#define VPE_MDT_SF_SC_THR1_SHIFT        0
#define VPE_MDT_SF_SC_THR2_MASK         0xff
#define VPE_MDT_SF_SC_THR2_SHIFT        0
#define VPE_MDT_SF_SC_THR3_MASK         0xff
#define VPE_MDT_SF_SC_THR3_SHIFT        0

#define VPE_EDI_CONFIG                  0x060c
#define VPE_EDI_INP_MODE_MASK           0x03
#define VPE_EDI_INP_MODE_SHIFT          0
#define VPE_EDI_ENABLE_3D               BIT(2)
#define VPE_EDI_ENABLE_CHROMA_3D        BIT(3)
#define VPE_EDI_CHROMA3D_COR_THR_MASK   0xff
#define VPE_EDI_CHROMA3D_COR_THR_SHIFT  8
#define VPE_EDI_DIR_COR_LOWER_THR_MASK  0xff
#define VPE_EDI_DIR_COR_LOWER_THR_SHIFT 16
#define VPE_EDI_COR_SCALE_FACTOR_MASK   0xff
#define VPE_EDI_COR_SCALE_FACTOR_SHIFT  23

#define VPE_DEI_EDI_LUT_R0              0x0610
#define VPE_EDI_LUT0_MASK               0x1f
#define VPE_EDI_LUT0_SHIFT              0
#define VPE_EDI_LUT1_MASK               0x1f
#define VPE_EDI_LUT1_SHIFT              8
#define VPE_EDI_LUT2_MASK               0x1f
#define VPE_EDI_LUT2_SHIFT              16
#define VPE_EDI_LUT3_MASK               0x1f
#define VPE_EDI_LUT3_SHIFT              24

#define VPE_DEI_EDI_LUT_R1              0x0614
#define VPE_EDI_LUT0_MASK               0x1f
#define VPE_EDI_LUT0_SHIFT              0
#define VPE_EDI_LUT1_MASK               0x1f
#define VPE_EDI_LUT1_SHIFT              8
#define VPE_EDI_LUT2_MASK               0x1f
#define VPE_EDI_LUT2_SHIFT              16
#define VPE_EDI_LUT3_MASK               0x1f
#define VPE_EDI_LUT3_SHIFT              24

#define VPE_DEI_EDI_LUT_R2              0x0618
#define VPE_EDI_LUT4_MASK               0x1f
#define VPE_EDI_LUT4_SHIFT              0
#define VPE_EDI_LUT5_MASK               0x1f
#define VPE_EDI_LUT5_SHIFT              8
#define VPE_EDI_LUT6_MASK               0x1f
#define VPE_EDI_LUT6_SHIFT              16
#define VPE_EDI_LUT7_MASK               0x1f
#define VPE_EDI_LUT7_SHIFT              24

#define VPE_DEI_EDI_LUT_R3              0x061c
#define VPE_EDI_LUT8_MASK               0x1f
#define VPE_EDI_LUT8_SHIFT              0
#define VPE_EDI_LUT9_MASK               0x1f
#define VPE_EDI_LUT9_SHIFT              8
#define VPE_EDI_LUT10_MASK              0x1f
#define VPE_EDI_LUT10_SHIFT             16
#define VPE_EDI_LUT11_MASK              0x1f
#define VPE_EDI_LUT11_SHIFT             24

#define VPE_DEI_FMD_WINDOW_R0           0x0620
#define VPE_FMD_WINDOW_MINX_MASK        0x07ff
#define VPE_FMD_WINDOW_MINX_SHIFT       0
#define VPE_FMD_WINDOW_MAXX_MASK        0x07ff
#define VPE_FMD_WINDOW_MAXX_SHIFT       16
#define VPE_FMD_WINDOW_ENABLE           BIT(31)

#define VPE_DEI_FMD_WINDOW_R1           0x0624
#define VPE_FMD_WINDOW_MINY_MASK        0x07ff
#define VPE_FMD_WINDOW_MINY_SHIFT       0
#define VPE_FMD_WINDOW_MAXY_MASK        0x07ff
#define VPE_FMD_WINDOW_MAXY_SHIFT       16

#define VPE_DEI_FMD_CONTROL_R0          0x0628
#define VPE_FMD_ENABLE                  BIT(0)
#define VPE_FMD_LOCK                    BIT(1)
#define VPE_FMD_JAM_DIR                 BIT(2)
#define VPE_FMD_BED_ENABLE              BIT(3)
#define VPE_FMD_CAF_FIELD_THR_MASK      0xff
#define VPE_FMD_CAF_FIELD_THR_SHIFT     16
#define VPE_FMD_CAF_LINE_THR_MASK       0xff
#define VPE_FMD_CAF_LINE_THR_SHIFT      24

#define VPE_DEI_FMD_CONTROL_R1          0x062c
#define VPE_FMD_CAF_THR_MASK            0x000fffff
#define VPE_FMD_CAF_THR_SHIFT           0

#define VPE_DEI_FMD_STATUS_R0           0x0630
#define VPE_FMD_CAF_MASK                0x000fffff
#define VPE_FMD_CAF_SHIFT               0
#define VPE_FMD_RESET                   BIT(24)

#define VPE_DEI_FMD_STATUS_R1           0x0634
#define VPE_FMD_FIELD_DIFF_MASK         0x0fffffff
#define VPE_FMD_FIELD_DIFF_SHIFT        0

#define VPE_DEI_FMD_STATUS_R2           0x0638
#define VPE_FMD_FRAME_DIFF_MASK         0x000fffff
#define VPE_FMD_FRAME_DIFF_SHIFT        0

#endif