blob: 863c6098db7e4a217d9f7521b1f32a56ad597d56 [file] [log] [blame]
/*
* drivers/amlogic/drm/vpu-hw/meson_vpu_osd_mif.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef _MESON_VPU_OSD_MIF_H_
#define _MESON_VPU_OSD_MIF_H_
#define HW_OSD_MIF_NUM 3
#define VIU_OSD1_CTRL_STAT 0x1a10
#define VIU_OSD1_CTRL_STAT2 0x1a2d
#define VIU_OSD1_COLOR_ADDR 0x1a11
#define VIU_OSD1_COLOR 0x1a12
#define VIU_OSD1_TCOLOR_AG0 0x1a17
#define VIU_OSD1_TCOLOR_AG1 0x1a18
#define VIU_OSD1_TCOLOR_AG2 0x1a19
#define VIU_OSD1_TCOLOR_AG3 0x1a1a
#define VIU_OSD1_BLK0_CFG_W0 0x1a1b
#define VIU_OSD1_BLK1_CFG_W0 0x1a1f
#define VIU_OSD1_BLK2_CFG_W0 0x1a23
#define VIU_OSD1_BLK3_CFG_W0 0x1a27
#define VIU_OSD1_BLK0_CFG_W1 0x1a1c
#define VIU_OSD1_BLK1_CFG_W1 0x1a20
#define VIU_OSD1_BLK2_CFG_W1 0x1a24
#define VIU_OSD1_BLK3_CFG_W1 0x1a28
#define VIU_OSD1_BLK0_CFG_W2 0x1a1d
#define VIU_OSD1_BLK1_CFG_W2 0x1a21
#define VIU_OSD1_BLK2_CFG_W2 0x1a25
#define VIU_OSD1_BLK3_CFG_W2 0x1a29
#define VIU_OSD1_BLK0_CFG_W3 0x1a1e
#define VIU_OSD1_BLK1_CFG_W3 0x1a22
#define VIU_OSD1_BLK2_CFG_W3 0x1a26
#define VIU_OSD1_BLK3_CFG_W3 0x1a2a
#define VIU_OSD1_BLK0_CFG_W4 0x1a13
#define VIU_OSD1_BLK1_CFG_W4 0x1a14
#define VIU_OSD1_BLK2_CFG_W4 0x1a15
#define VIU_OSD1_BLK3_CFG_W4 0x1a16
#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_DIMM_CTRL 0x1adf
#define VIU_OSD2_CTRL_STAT 0x1a30
#define VIU_OSD2_CTRL_STAT2 0x1a4d
#define VIU_OSD2_COLOR_ADDR 0x1a31
#define VIU_OSD2_COLOR 0x1a32
#define VIU_OSD2_HL1_H_START_END 0x1a33
#define VIU_OSD2_HL1_V_START_END 0x1a34
#define VIU_OSD2_HL2_H_START_END 0x1a35
#define VIU_OSD2_HL2_V_START_END 0x1a36
#define VIU_OSD2_TCOLOR_AG0 0x1a37
#define VIU_OSD2_TCOLOR_AG1 0x1a38
#define VIU_OSD2_TCOLOR_AG2 0x1a39
#define VIU_OSD2_TCOLOR_AG3 0x1a3a
#define VIU_OSD2_BLK0_CFG_W0 0x1a3b
#define VIU_OSD2_BLK1_CFG_W0 0x1a3f
#define VIU_OSD2_BLK2_CFG_W0 0x1a43
#define VIU_OSD2_BLK3_CFG_W0 0x1a47
#define VIU_OSD2_BLK0_CFG_W1 0x1a3c
#define VIU_OSD2_BLK1_CFG_W1 0x1a40
#define VIU_OSD2_BLK2_CFG_W1 0x1a44
#define VIU_OSD2_BLK3_CFG_W1 0x1a48
#define VIU_OSD2_BLK0_CFG_W2 0x1a3d
#define VIU_OSD2_BLK1_CFG_W2 0x1a41
#define VIU_OSD2_BLK2_CFG_W2 0x1a45
#define VIU_OSD2_BLK3_CFG_W2 0x1a49
#define VIU_OSD2_BLK0_CFG_W3 0x1a3e
#define VIU_OSD2_BLK1_CFG_W3 0x1a42
#define VIU_OSD2_BLK2_CFG_W3 0x1a46
#define VIU_OSD2_BLK3_CFG_W3 0x1a4a
#define VIU_OSD2_BLK0_CFG_W4 0x1a64
#define VIU_OSD2_BLK1_CFG_W4 0x1a65
#define VIU_OSD2_BLK2_CFG_W4 0x1a66
#define VIU_OSD2_BLK3_CFG_W4 0x1a67
#define VIU_OSD2_FIFO_CTRL_STAT 0x1a4b
#define VIU_OSD2_TEST_RDDATA 0x1a4c
#define VIU_OSD2_PROT_CTRL 0x1a4e
#define VIU_OSD2_MALI_UNPACK_CTRL 0x1abd
#define VIU_OSD2_DIMM_CTRL 0x1acf
#define VIU_OSD3_CTRL_STAT 0x3d80
#define VIU_OSD3_CTRL_STAT2 0x3d81
#define VIU_OSD3_COLOR_ADDR 0x3d82
#define VIU_OSD3_COLOR 0x3d83
#define VIU_OSD3_TCOLOR_AG0 0x3d84
#define VIU_OSD3_TCOLOR_AG1 0x3d85
#define VIU_OSD3_TCOLOR_AG2 0x3d86
#define VIU_OSD3_TCOLOR_AG3 0x3d87
#define VIU_OSD3_BLK0_CFG_W0 0x3d88
#define VIU_OSD3_BLK0_CFG_W1 0x3d8c
#define VIU_OSD3_BLK0_CFG_W2 0x3d90
#define VIU_OSD3_BLK0_CFG_W3 0x3d94
#define VIU_OSD3_BLK0_CFG_W4 0x3d98
#define VIU_OSD3_BLK1_CFG_W4 0x3d99
#define VIU_OSD3_BLK2_CFG_W4 0x3d9a
#define VIU_OSD3_FIFO_CTRL_STAT 0x3d9c
#define VIU_OSD3_TEST_RDDATA 0x3d9d
#define VIU_OSD3_PROT_CTRL 0x3d9e
#define VIU_OSD3_MALI_UNPACK_CTRL 0x3d9f
#define VIU_OSD3_DIMM_CTRL 0x3da0
struct osd_mif_reg_s {
u32 viu_osd_ctrl_stat;
u32 viu_osd_ctrl_stat2;
u32 viu_osd_color_addr;
u32 viu_osd_color;
u32 viu_osd_tcolor_ag0;
u32 viu_osd_tcolor_ag1;
u32 viu_osd_tcolor_ag2;
u32 viu_osd_tcolor_ag3;
u32 viu_osd_blk0_cfg_w0;
u32 viu_osd_blk0_cfg_w1;
u32 viu_osd_blk0_cfg_w2;
u32 viu_osd_blk0_cfg_w3;
u32 viu_osd_blk0_cfg_w4;
u32 viu_osd_blk1_cfg_w4;
u32 viu_osd_blk2_cfg_w4;
u32 viu_osd_fifo_ctrl_stat;
u32 viu_osd_test_rddata;
u32 viu_osd_prot_ctrl;
u32 viu_osd_mali_unpack_ctrl;
u32 viu_osd_dimm_ctrl;
};
/**
* struct meson_drm_format_info - information about a DRM format
* @format: 4CC format identifier (DRM_FORMAT_*)
* @hw_blkmode: Define the OSD block’s input pixel format
* @hw_colormat: Applicable only to 16-bit color mode (OSD_BLK_MODE=4),
* 32-bit mode (OSD_BLK_MODE=5) and 24-bit mode (OSD_BLK_MODE=7),
* defines the bit-field allocation of the pixel data.
*/
struct meson_drm_format_info {
u32 format;
u8 hw_blkmode;
u8 hw_colormat;
u8 alpha_replace;
};
enum osd_blk_mode_e {
BLOCK_MODE_2BIT_PER_PIXEL = 0,
BLOCK_MODE_4BIT_PER_PIXEL,
BLOCK_MODE_8BIT_PER_PIXEL,
BLOCK_MODE_422,
BLOCK_MODE_16BIT,
BLOCK_MODE_32BIT,
BLOCK_MODE_24BIT = 7,
/*bellow is for afbc mode*/
BLOCK_MODE_R8 = 0,
BLOCK_MODE_YUV422_8BIT,
BLOCK_MODE_RGB565,
BLOCK_MODE_RGBA5551,
BLOCK_MODE_RGBA4444,
BLOCK_MODE_RGBA8888,
BLOCK_MODE_RGB888 = 7,
BLOCK_MODE_YUV422_10BIT,
BLOCK_MODE_RGBA1010102,
};
enum osd_color_matrix_e {
/*for 16bit:blk-mode=BLOCK_MODE_16BIT*/
COLOR_MATRIX_655 = 0,
COLOR_MATRIX_844,
COLOR_MATRIX_565 = 4,
/*for 32bit:blk-mode=BLOCK_MODE_32BIT*/
COLOR_MATRIX_RGBA8888 = 0,
COLOR_MATRIX_ARGB8888,
COLOR_MATRIX_ABGR8888,
COLOR_MATRIX_BGRA8888,
/*for 24bit:blk-mode=BLOCK_MODE_24BIT*/
COLOR_MATRIX_RGB888 = 0,
COLOR_MATRIX_BGR888 = 5,
};
const struct meson_drm_format_info *meson_drm_format_info(u32 format,
bool afbc_en);
#endif