SSU_DRM私有属性
及接口说明


1. 客制化properties

1.1. CRTC

Name type Description R/W
preferred range 在DTS中设置的值,app优先选择带有preferred属性的CRTC R

1.2. Plane

Name type Description R/W
sstar type enum Plane所在的layer,GOP UI/Cursor或MOPG、MOPS R
colorkey range 通过这个property设置colorkey,只有sstar type为GOP的plane会带这个property R/W
mop_layer_id range MOPG/S的layerid,当使用mop merge功能时通过这个ID来确认plane所属的layer R
realtime_mode range 是否使用realtime mode,设置此属性的话创建mop layer时将选择realtime模式,用于接收前级HVP的输出。可在dts中设置disp是否支持realtime mode,支持的话该disp上的某个sstar type为MOPS的plane将带有这个property R/W

1.3. Connector

Name type Description R/W
preferred range 在DTS中设置的值,app优先选择带有preferred属性的Connector R
backlight brightness range 背光亮度,通过此property设置屏的背光亮度 R/W

2. 客制化modifiers

User通过modifier设置一张framebuffer的属性,kernel中原生已定义了一些modifier(如ARM的afbc压缩的格式AFBC_FORMAT_MOD_YTR等)。各个厂商可按照这套模式定义自己的modifier,为了支持MOP特有的tile modecompress mode功能我们定义了一些私有的modifier,客户使用时需include我们的头文件sstar_drm.h。这里将新增的modifier列举如下:

Vendor code:

#deifne DRM_FORMAT_MOD_VENDOR_SSTAR 0x0b
Mode Option
Tile mode SSTAR_MOP_TILE_MODE_16x16
SSTAR_MOP_TILE_MODE_16x32
SSTAR_MOP_TILE_MODE_32x16
SSTAR_MOP_TILE_MODE_32x32
Compress mode SSTAR_MOP_COMPRESS_MODE_SEG
SSTAR_MOP_COMPRESS_MODE_LINE
SSTAR_MOP_COMPRESS_MODE_FRAME
SSTAR_MOP_COMPRESS_MODE_TO_8BIT
SSTAR_MOP_COMPRESS_MODE_TO_6BIT
SSTAR_MOP_COMPRESS_MODE_IFC
SSTAR_MOP_COMPRESS_MODE_SFBC0
SSTAR_MOP_COMPRESS_MODE__SFBC1
SSTAR_MOP_COMPRESS_MODE__SFBC2
SSTAR_MOP_COMPRESS_MODE_BUTT

3. 客制化IOCTL接口

  • IOCTL定义

    #define DRM_SSTAR_TUNNEL_UPDATE       0x00
    #define DRM_SSTAR_SET_SSC             0x01
    #define DRM_SSTAR_LOAD_PQ             0x02
    #define DRM_SSTAR_SET_COLOR_TEMPETURE 0x03
    #define DRM_SSTAR_OUTPUT_PARAM        0x04
    
    #define DRM_IOCTL_SSTAR_TUNNEL_UPDATE     \
        DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_TUNNEL_UPDATE, struct drm_sstar_tunnel_update)
    #define DRM_IOCTL_SSTAR_SET_SSC DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_SET_SSC, struct drm_sstar_set_ssc)
    #define DRM_IOCTL_SSTAR_LOAD_PQ DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_LOAD_PQ, struct drm_sstar_load_pq)
    #define DRM_IOCTL_SSTAR_SET_COLOR_TEMPETURE     \
        DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_SET_COLOR_TEMPETURE, struct drm_sstar_set_color_tempeture)
    #define DRM_IOCTL_SSTAR_OUTPUT_PARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_SSTAR_OUTPUT_PARAM, struct drm_sstar_output_param)
    
  • 相应的数据结构定义

    ///< Define sstar op type
    typedef enum
    {
        SSTAR_OP_GET = 0,
        SSTAR_OP_SET = 1,
    } SSTAR_OP_T;
    
    struct drm_sstar_tunnel_update
    {
        // fenceId / buffer address ...
        uint32_t crtcId;
        uint32_t planeId;
    };
    
    struct drm_sstar_set_ssc
    {
        bool     bEn;    ///< 1 : enable, 0 : disalbe
        uint32_t crtcId; ///< crtc id
        uint16_t step;   ///< step of SSC
        uint16_t span;   ///< span of SSC
    };
    
    ///< Define the flag of PQ
    typedef enum
    {
        SSTAR_PQ_FLAG_NONE                  = 0x0000, ///< No action
        SSTAR_PQ_FLAG_LOAD_BIN              = 0x0001, ///< Load binary file
        SSTAR_PQ_FLAG_SET_SRC_ID            = 0x0002, ///< Set source ID
        SSTAR_PQ_FLAG_PROCESS               = 0x0003, ///< Aplly PQ Setting
        SSTAR_PQ_FLAG_SET_LOAD_SETTING_TYPE = 0x0004, ///< Set load type
        SSTAR_PQ_FLAG_FREE_BIN              = 0x0005, ///< Free binary file
        SSTAR_PQ_FLAG_BYPASS                = 0x0006, ///< OFF device pq setting.
    } SSTAR_PQFLAG_E;
    
    struct drm_sstar_load_pq
    {
        uint32_t       crtcId;   ///< crtc id
        SSTAR_PQFLAG_E pqFlags;  ///< The flag of pq action
        uint32_t       dataSize; ///< size of PQ binary
        uint64_t       data;     ///< Data of PQ binary
    };
    
    struct drm_sstar_set_color_tempeture
    {
        uint32_t crtcId;      ///< crtc id
        uint16_t redOffset;   ///< Offset of color R
        uint16_t greenOffset; ///< Offset of color G
        uint16_t blueOffset;  ///< Offset of color B
        uint16_t redColor;    ///< Gain of Color R
        uint16_t greenColor;  ///< Gain of Color G
        uint16_t blueColor;   ///< Gain of Color B
    };
    
    ///< Define CSC matrix type
    typedef enum
    {
        SSTAR_CSC_MATRIX_BYPASS = 0, ///< Do not change color space
    
        SSTAR_CSC_MATRIX_BT601_TO_BT709, ///< Change color space from BT.601 to BT.709
        SSTAR_CSC_MATRIX_BT709_TO_BT601, ///< Change color space from BT.709 to BT.601
    
        SSTAR_CSC_MATRIX_BT601_TO_RGB_PC, ///< Change color space from BT.601 to RGB
        SSTAR_CSC_MATRIX_BT709_TO_RGB_PC, ///< Change color space from BT.709 to RGB
    
        SSTAR_CSC_MATRIX_RGB_TO_BT601_PC, ///< Change color space from RGB to BT.601
        SSTAR_CSC_MATRIX_RGB_TO_BT709_PC, ///< Change color space from RGB to BT.709
        SSTAR_CSC_MATRIX_USER,
    
        SSTAR_CSC_MATRIX_MAX
    } SSTAR_CSC_MATRIX_E;
    
    ///< Define color space transform inforamtion
    typedef struct
    {
        SSTAR_CSC_MATRIX_E cscMatrix;  ///< CSC matrix type
        uint32_t           luma;       ///< Adjustment of luminance, Range: 0 ~ 100
        uint32_t           contrast;   ///< Adjustment of contrast, Range:   0 ~ 100
        uint32_t           hue;        ///< Adjustment of Hue, Range: 0 ~ 100
        uint32_t           saturation; ///< Adjustment of saturation, Range: 0 ~ 100
    } SSTAR_CSC_T;
    
    struct drm_sstar_output_param
    {
        uint32_t    crtcId;      ///< crtc id
        uint32_t    connectorId; ///< connector id
        SSTAR_OP_T  op;          ///< get or set parameter
        SSTAR_CSC_T csc;         ///< Adjustment of CSC
        uint32_t    sharpness;   ///< Adjustment of sharpness
        uint32_t    gain;        ///< Adjustment of driving current, only for VGA
    };