drm/meson: add AFBC decoder registers for GXM and G12A
authorNeil Armstrong <narmstrong@baylibre.com>
Mon, 21 Oct 2019 09:15:01 +0000 (11:15 +0200)
committerNeil Armstrong <narmstrong@baylibre.com>
Tue, 10 Dec 2019 09:08:09 +0000 (10:08 +0100)
Add the registers used to program the ARM Framebuffer Compression decoders
used in the Amlogic GXM and G12A SoCs families.

This also adds the routing and pipeline configuration bits and registers
needed to enable AFBC support.

Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191021091509.3864-2-narmstrong@baylibre.com
drivers/gpu/drm/meson/meson_registers.h
drivers/gpu/drm/meson/meson_viu.h

index 05fce48..547bee0 100644 (file)
 #define VIU_ADDR_START 0x1a00
 #define VIU_ADDR_END 0x1aff
 #define VIU_SW_RESET 0x1a01
+#define                VIU_SW_RESET_OSD1_AFBCD         BIT(31)
+#define                VIU_SW_RESET_G12A_OSD1_AFBCD    BIT(21)
+#define                VIU_SW_RESET_G12A_AFBC_ARB      BIT(19)
 #define                VIU_SW_RESET_OSD1               BIT(0)
 #define VIU_MISC_CTRL0 0x1a06
 #define                VIU_CTRL0_VD1_AFBC_MASK         0x170000
 #define VIU_MISC_CTRL1 0x1a07
+#define                MALI_AFBC_MISC                  GENMASK(15, 8)
 #define D2D3_INTF_LENGTH 0x1a08
 #define D2D3_INTF_CTRL0 0x1a09
 #define VIU_OSD1_CTRL_STAT 0x1a10
 #define                VIU_OSD1_OSD_BLK_ENABLE         BIT(0)
+#define                VIU_OSD1_OSD_MEM_MODE_LINEAR    BIT(2)
 #define                VIU_OSD1_POSTBLD_SRC_VD1        (1 << 8)
 #define                VIU_OSD1_POSTBLD_SRC_VD2        (2 << 8)
 #define                VIU_OSD1_POSTBLD_SRC_OSD1       (3 << 8)
 #define                VIU_OSD1_POSTBLD_SRC_OSD2       (4 << 8)
 #define                VIU_OSD1_OSD_ENABLE             BIT(21)
+#define                VIU_OSD1_CFG_SYN_EN             BIT(31)
 #define VIU_OSD1_CTRL_STAT2 0x1a2d
 #define VIU_OSD1_COLOR_ADDR 0x1a11
 #define VIU_OSD1_COLOR 0x1a12
 #define VIU_OSD1_FIFO_CTRL_STAT 0x1a2b
 #define VIU_OSD1_TEST_RDDATA 0x1a2c
 #define VIU_OSD1_PROT_CTRL 0x1a2e
+#define VIU_OSD1_MALI_UNPACK_CTRL 0x1a2f
+#define                VIU_OSD1_MALI_UNPACK_EN         BIT(31)
+#define                VIU_OSD1_MALI_AFBCD_R_REORDER   GENMASK(15, 12)
+#define                VIU_OSD1_MALI_AFBCD_G_REORDER   GENMASK(11, 8)
+#define                VIU_OSD1_MALI_AFBCD_B_REORDER   GENMASK(7, 4)
+#define                VIU_OSD1_MALI_AFBCD_A_REORDER   GENMASK(3, 0)
+#define                VIU_OSD1_MALI_REORDER_R         1
+#define                VIU_OSD1_MALI_REORDER_G         2
+#define                VIU_OSD1_MALI_REORDER_B         3
+#define                VIU_OSD1_MALI_REORDER_A         4
 #define VIU_OSD2_CTRL_STAT 0x1a30
 #define VIU_OSD2_CTRL_STAT2 0x1a4d
 #define VIU_OSD2_COLOR_ADDR 0x1a31
 
 /* osd afbcd on gxtvbb */
 #define OSD1_AFBCD_ENABLE 0x31a0
+#define                OSD1_AFBCD_ID_FIFO_THRD                 GENMASK(15, 9)
+#define                OSD1_AFBCD_DEC_ENABLE                   BIT(8)
+#define                OSD1_AFBCD_FRM_START                    BIT(0)
 #define OSD1_AFBCD_MODE 0x31a1
+#define                OSD1_AFBCD_SOFT_RESET                   BIT(31)
+#define                OSD1_AFBCD_AXI_REORDER_MODE             BIT(28)
+#define                OSD1_AFBCD_MIF_URGENT                   GENMASK(25, 24)
+#define                OSD1_AFBCD_HOLD_LINE_NUM                GENMASK(22, 16)
+#define                OSD1_AFBCD_RGBA_EXCHAN_CTRL             GENMASK(15, 8)
+#define                OSD1_AFBCD_HREG_BLOCK_SPLIT             BIT(6)
+#define                OSD1_AFBCD_HREG_HALF_BLOCK              BIT(5)
+#define                OSD1_AFBCD_HREG_PIXEL_PACKING_FMT       GENMASK(4, 0)
 #define OSD1_AFBCD_SIZE_IN 0x31a2
+#define                OSD1_AFBCD_HREG_VSIZE_IN                GENMASK(31, 16)
+#define                OSD1_AFBCD_HREG_HSIZE_IN                GENMASK(15, 0)
 #define OSD1_AFBCD_HDR_PTR 0x31a3
 #define OSD1_AFBCD_FRAME_PTR 0x31a4
 #define OSD1_AFBCD_CHROMA_PTR 0x31a5
 #define OSD1_AFBCD_CONV_CTRL 0x31a6
+#define                OSD1_AFBCD_CONV_LBUF_LEN                GENMASK(15, 0)
 #define OSD1_AFBCD_STATUS 0x31a8
 #define OSD1_AFBCD_PIXEL_HSCOPE 0x31a9
+#define                OSD1_AFBCD_DEC_PIXEL_BGN_H              GENMASK(31, 16)
+#define                OSD1_AFBCD_DEC_PIXEL_END_H              GENMASK(15, 0)
 #define OSD1_AFBCD_PIXEL_VSCOPE 0x31aa
+#define                OSD1_AFBCD_DEC_PIXEL_BGN_V              GENMASK(31, 16)
+#define                OSD1_AFBCD_DEC_PIXEL_END_V              GENMASK(15, 0)
 
 /* add for gxm and 962e dv core2 */
 #define DOLBY_CORE2A_SWAP_CTRL1        0x3434
 #define VPU_MAFBC_IRQ_CLEAR 0x3a02
 #define VPU_MAFBC_IRQ_MASK 0x3a03
 #define VPU_MAFBC_IRQ_STATUS 0x3a04
+#define                VPU_MAFBC_IRQ_SECURE_ID_ERROR           BIT(5)
+#define                VPU_MAFBC_IRQ_AXI_ERROR                 BIT(4)
+#define                VPU_MAFBC_IRQ_DETILING_ERROR            BIT(3)
+#define                VPU_MAFBC_IRQ_DECODE_ERROR              BIT(2)
+#define                VPU_MAFBC_IRQ_CONFIGURATION_SWAPPED     BIT(1)
+#define                VPU_MAFBC_IRQ_SURFACES_COMPLETED        BIT(0)
 #define VPU_MAFBC_COMMAND 0x3a05
+#define                VPU_MAFBC_PENDING_SWAP  BIT(1)
+#define                VPU_MAFBC_DIRECT_SWAP   BIT(0)
 #define VPU_MAFBC_STATUS 0x3a06
+#define                VPU_MAFBC_ERROR         BIT(2)
+#define                VPU_MAFBC_SWAPPING      BIT(1)
+#define                VPU_MAFBC_ACTIVE        BIT(0)
 #define VPU_MAFBC_SURFACE_CFG 0x3a07
+#define                VPU_MAFBC_CONTINUOUS_DECODING_ENABLE    BIT(16)
+#define                VPU_MAFBC_S3_ENABLE                     BIT(3)
+#define                VPU_MAFBC_S2_ENABLE                     BIT(2)
+#define                VPU_MAFBC_S1_ENABLE                     BIT(1)
+#define                VPU_MAFBC_S0_ENABLE                     BIT(0)
 #define VPU_MAFBC_HEADER_BUF_ADDR_LOW_S0 0x3a10
 #define VPU_MAFBC_HEADER_BUF_ADDR_HIGH_S0 0x3a11
 #define VPU_MAFBC_FORMAT_SPECIFIER_S0 0x3a12
+#define                VPU_MAFBC_PAYLOAD_LIMIT_EN      BIT(19)
+#define                VPU_MAFBC_TILED_HEADER_EN       BIT(18)
+#define                VPU_MAFBC_SUPER_BLOCK_ASPECT    GENMASK(17, 16)
+#define                VPU_MAFBC_BLOCK_SPLIT           BIT(9)
+#define                VPU_MAFBC_YUV_TRANSFORM         BIT(8)
+#define                VPU_MAFBC_PIXEL_FORMAT          GENMASK(3, 0)
 #define VPU_MAFBC_BUFFER_WIDTH_S0 0x3a13
 #define VPU_MAFBC_BUFFER_HEIGHT_S0 0x3a14
 #define VPU_MAFBC_BOUNDING_BOX_X_START_S0 0x3a15
 #define VPU_MAFBC_OUTPUT_BUF_ADDR_HIGH_S0 0x3a1a
 #define VPU_MAFBC_OUTPUT_BUF_STRIDE_S0 0x3a1b
 #define VPU_MAFBC_PREFETCH_CFG_S0 0x3a1c
+#define                VPU_MAFBC_PREFETCH_READ_DIRECTION_Y     BIT(1)
+#define                VPU_MAFBC_PREFETCH_READ_DIRECTION_X     BIT(0)
 
 #define VPU_MAFBC_HEADER_BUF_ADDR_LOW_S1 0x3a30
 #define VPU_MAFBC_HEADER_BUF_ADDR_HIGH_S1 0x3a31
 #define DOLBY_PATH_CTRL 0x1a0c
 #define                DOLBY_BYPASS_EN(val)            (val & 0xf)
 #define OSD_PATH_MISC_CTRL 0x1a0e
+#define                OSD_PATH_OSD_AXI_SEL_OSD1_AFBCD BIT(4)
+#define                OSD_PATH_OSD_AXI_SEL_OSD2_AFBCD BIT(5)
+#define                OSD_PATH_OSD_AXI_SEL_OSD3_AFBCD BIT(6)
 #define MALI_AFBCD_TOP_CTRL 0x1a0f
+#define                MALI_AFBCD_MANUAL_RESET         BIT(23)
 
 #define VIU_OSD_BLEND_CTRL 0x39b0
 #define                VIU_OSD_BLEND_REORDER(dest, src)      ((src) << (dest * 4))
index a112e8d..e297772 100644 (file)
@@ -10,6 +10,8 @@
 #define __MESON_VIU_H
 
 /* OSDx_BLKx_CFG */
+#define OSD_MALI_SRC_EN                BIT(30)
+
 #define OSD_CANVAS_SEL         16
 
 #define OSD_ENDIANNESS_LE      BIT(15)
 #define OSD_COLOR_MATRIX_16_RGB655     (0x00 << 2)
 #define OSD_COLOR_MATRIX_16_RGB565     (0x04 << 2)
 
+#define OSD_MALI_COLOR_MODE_R8         (0 << 8)
+#define OSD_MALI_COLOR_MODE_YUV422     (1 << 8)
+#define OSD_MALI_COLOR_MODE_RGB565     (2 << 8)
+#define OSD_MALI_COLOR_MODE_RGBA5551   (3 << 8)
+#define OSD_MALI_COLOR_MODE_RGBA4444   (4 << 8)
+#define OSD_MALI_COLOR_MODE_RGBA8888   (5 << 8)
+#define OSD_MALI_COLOR_MODE_RGB888     (7 << 8)
+#define OSD_MALI_COLOR_MODE_YUV422_10B (8 << 8)
+#define OSD_MALI_COLOR_MODE_RGBA1010102        (9 << 8)
+
 #define OSD_INTERLACE_ENABLED  BIT(1)
 #define OSD_INTERLACE_ODD      BIT(0)
 #define OSD_INTERLACE_EVEN     (0)
 
 /* OSDx_CTRL_STAT */
 #define OSD_ENABLE             BIT(21)
+#define OSD_MEM_LINEAR_ADDR    BIT(2)
 #define OSD_BLK0_ENABLE                BIT(0)
 
 #define OSD_GLOBAL_ALPHA_SHIFT 12
 
 /* OSDx_CTRL_STAT2 */
+#define OSD_DPATH_MALI_AFBCD   BIT(15)
 #define OSD_REPLACE_EN         BIT(14)
 #define OSD_REPLACE_SHIFT      6
+#define OSD_PENDING_STAT_CLEAN BIT(1)
 
 void meson_viu_osd1_reset(struct meson_drm *priv);
 void meson_viu_init(struct meson_drm *priv);