Loading drivers/gpu/drm/msm/sde/sde_hw_catalog_8996.cdeleted 100644 → 0 +0 −671 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. 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 version 2 and * only version 2 as published by the Free Software Foundation. * * 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. */ #include "sde_hw_catalog.h" #include "sde_hw_mdss.h" #include "sde_hwio.h" /* VIG layer capability */ #define VIG_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_QSEED2) |\ BIT(SDE_SSPP_CSC) | BIT(SDE_SSPP_HSIC) |\ BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\ BIT(SDE_SSPP_MEMCOLOR) | BIT(SDE_SSPP_QOS)) /* RGB layer capability */ #define RGB_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_RGB) |\ BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) | BIT(SDE_SSPP_QOS)) /* DMA layer capability */ #define DMA_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\ BIT(SDE_SSPP_QOS)) /* Cursor layer capability */ #define CURSOR_17X_MASK (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_CURSOR)) #define MIXER_17X_MASK (BIT(SDE_MIXER_SOURCESPLIT) |\ BIT(SDE_MIXER_GC)) #define DSPP_17X_MASK \ (BIT(SDE_DSPP_IGC) | BIT(SDE_DSPP_PCC) |\ BIT(SDE_DSPP_GC) | BIT(SDE_DSPP_HSIC) | BIT(SDE_DSPP_GAMUT) |\ BIT(SDE_DSPP_DITHER) | BIT(SDE_DSPP_HIST) | BIT(SDE_DSPP_MEMCOLOR) |\ BIT(SDE_DSPP_SIXZONE) | BIT(SDE_DSPP_AD) | BIT(SDE_DSPP_VLUT)) #define PINGPONG_17X_MASK \ (BIT(SDE_PINGPONG_TE) | BIT(SDE_PINGPONG_DSC)) #define PINGPONG_17X_SPLIT_MASK \ (PINGPONG_17X_MASK | BIT(SDE_PINGPONG_SPLIT) |\ BIT(SDE_PINGPONG_TE2)) #define WB01_17X_MASK \ (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_BLOCK_MODE) |\ BIT(SDE_WB_CSC) | BIT(SDE_WB_CHROMA_DOWN) | BIT(SDE_WB_DOWNSCALE) |\ BIT(SDE_WB_DITHER) | BIT(SDE_WB_TRAFFIC_SHAPER) |\ BIT(SDE_WB_UBWC_1_0) | BIT(SDE_WB_YUV_CONFIG)) #define WB2_17X_MASK \ (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_TRAFFIC_SHAPER) |\ BIT(SDE_WB_YUV_CONFIG)) #define DECIMATION_17X_MAX_H 4 #define DECIMATION_17X_MAX_V 4 #define RES_1080p ((u64)(1088*1920)) #define RES_UHD ((u64)(3840*2160)) static const struct sde_format_extended plane_formats[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {0, 0}, }; static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_NV21, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_NV61, 0}, {DRM_FORMAT_VYUY, 0}, {DRM_FORMAT_UYVY, 0}, {DRM_FORMAT_YUYV, 0}, {DRM_FORMAT_YVYU, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_YVU420, 0}, {0, 0}, }; static const struct sde_format_extended wb0_formats[] = { {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_NV21, 0}, {DRM_FORMAT_NV61, 0}, {DRM_FORMAT_UYVY, 0}, {DRM_FORMAT_YUYV, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_AYUV, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {0, 0}, }; static const struct sde_format_extended wb2_formats[] = { {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_YUYV, 0}, {0, 0}, }; /** * set_cfg_1xx_init(): populate sde sub-blocks reg offsets and instance counts */ static inline int set_cfg_1xx_init(struct sde_mdss_cfg *cfg) { /* Layer capability */ static const struct sde_sspp_sub_blks vig_layer = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 4, .maxupscale = 20, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2, .base = 0x200, .len = 0x70,}, .csc_blk = {.id = SDE_SSPP_CSC, .base = 0x320, .len = 0x44,}, .format_list = plane_formats_yuv, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hsic = {.id = SDE_SSPP_HSIC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .memcolor = {.id = SDE_SSPP_MEMCOLOR, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks layer = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 4, .maxupscale = 20, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2, .base = 0x200, .len = 0x70,}, .csc_blk = {.id = SDE_SSPP_CSC, .base = 0x320, .len = 0x44,}, .format_list = plane_formats, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks dma = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 1, .maxupscale = 1, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .format_list = plane_formats, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks cursor = { .maxlinewidth = 128, .maxdwnscale = 1, .maxupscale = 1, .maxhdeciexp = 0, .maxvdeciexp = 0, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .format_list = plane_formats, }; /* MIXER capability */ static const struct sde_lm_sub_blks lm = { .maxwidth = 2560, .maxblendstages = 7, /* excluding base layer */ .blendstage_base = { /* offsets relative to mixer base */ 0x20, 0x50, 0x80, 0xB0, 0x230, 0x260, 0x290 }, .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; /* DSPP capability */ static const struct sde_dspp_sub_blks dspp = { .igc = {.id = SDE_DSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc = {.id = SDE_DSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .gamut = {.id = SDE_DSPP_GAMUT, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .dither = {.id = SDE_DSPP_DITHER, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hsic = {.id = SDE_DSPP_HSIC, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .memcolor = {.id = SDE_DSPP_MEMCOLOR, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .sixzone = {.id = SDE_DSPP_SIXZONE, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hist = {.id = SDE_DSPP_HIST, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .ad = {.id = SDE_DSPP_AD, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x3, 0x0)}, .vlut = {.id = SDE_DSPP_VLUT, .base = 0x1400, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; /* PINGPONG capability */ static const struct sde_pingpong_sub_blks pingpong = { .te = {.id = SDE_PINGPONG_TE, .base = 0x0000, .len = 0x0, .version = 0x1}, .te2 = {.id = SDE_PINGPONG_TE2, .base = 0x2000, .len = 0x0, .version = 0x1}, .dsc = {.id = SDE_PINGPONG_DSC, .base = 0x10000, .len = 0x0, .version = 0x1}, }; /* Writeback 0/1 capability */ static const struct sde_wb_sub_blocks wb0 = { .maxlinewidth = 2048, }; /* Writeback 2 capability */ static const struct sde_wb_sub_blocks wb2 = { .maxlinewidth = 4096, }; static const struct sde_vbif_dynamic_ot_cfg dynamic_ot_cfg[] = { {RES_1080p * 30, 2}, {RES_1080p * 60, 4}, {RES_UHD * 30, 16}, }; /* Setup Register maps and defaults */ *cfg = (struct sde_mdss_cfg){ .mdss_count = 1, .mdss = { {.id = MDP_TOP, .base = 0x00000000, .features = 0} }, .mdp_count = 1, .mdp = { {.id = MDP_TOP, .base = 0x00001000, .features = 0, .highest_bank_bit = 0x2, .clk_ctrls[SDE_CLK_CTRL_VIG0] = { .reg_off = 0x2AC, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG1] = { .reg_off = 0x2B4, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG2] = { .reg_off = 0x2BC, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG3] = { .reg_off = 0x2C4, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_RGB0] = { .reg_off = 0x2AC, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB1] = { .reg_off = 0x2B4, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB2] = { .reg_off = 0x2BC, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB3] = { .reg_off = 0x2C4, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_DMA0] = { .reg_off = 0x2AC, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_DMA1] = { .reg_off = 0x2B4, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_CURSOR0] = { .reg_off = 0x3A8, .bit_off = 16}, .clk_ctrls[SDE_CLK_CTRL_CURSOR1] = { .reg_off = 0x3B0, .bit_off = 16}, .clk_ctrls[SDE_CLK_CTRL_WB0] = { .reg_off = 0x2BC, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_WB1] = { .reg_off = 0x2BC, .bit_off = 12}, .clk_ctrls[SDE_CLK_CTRL_WB2] = { .reg_off = 0x2BC, .bit_off = 16}, }, }, .ctl_count = 5, .ctl = { {.id = CTL_0, .base = 0x00002000, .features = BIT(SDE_CTL_SPLIT_DISPLAY) | BIT(SDE_CTL_PINGPONG_SPLIT) }, {.id = CTL_1, .base = 0x00002200, .features = BIT(SDE_CTL_SPLIT_DISPLAY) }, {.id = CTL_2, .base = 0x00002400}, {.id = CTL_3, .base = 0x00002600}, {.id = CTL_4, .base = 0x00002800}, }, /* 4 VIG, + 4 RGB + 2 DMA + 2 CURSOR */ .sspp_count = 12, .sspp = { {.id = SSPP_VIG0, .base = 0x00005000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 0, .clk_ctrl = SDE_CLK_CTRL_VIG0}, {.id = SSPP_VIG1, .base = 0x00007000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 4, .clk_ctrl = SDE_CLK_CTRL_VIG1}, {.id = SSPP_VIG2, .base = 0x00009000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 8, .clk_ctrl = SDE_CLK_CTRL_VIG2}, {.id = SSPP_VIG3, .base = 0x0000b000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 12, .clk_ctrl = SDE_CLK_CTRL_VIG3}, {.id = SSPP_RGB0, .base = 0x00015000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 1, .clk_ctrl = SDE_CLK_CTRL_RGB0}, {.id = SSPP_RGB1, .base = 0x00017000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 5, .clk_ctrl = SDE_CLK_CTRL_RGB1}, {.id = SSPP_RGB2, .base = 0x00019000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 9, .clk_ctrl = SDE_CLK_CTRL_RGB2}, {.id = SSPP_RGB3, .base = 0x0001B000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 13, .clk_ctrl = SDE_CLK_CTRL_RGB3}, {.id = SSPP_DMA0, .base = 0x00025000, .features = DMA_17X_MASK, .sblk = &dma, .xin_id = 2, .clk_ctrl = SDE_CLK_CTRL_DMA0}, {.id = SSPP_DMA1, .base = 0x00027000, .features = DMA_17X_MASK, .sblk = &dma, .xin_id = 10, .clk_ctrl = SDE_CLK_CTRL_DMA1}, {.id = SSPP_CURSOR0, .base = 0x00035000, .features = CURSOR_17X_MASK, .sblk = &cursor, .xin_id = 7, .clk_ctrl = SDE_CLK_CTRL_CURSOR0}, {.id = SSPP_CURSOR1, .base = 0x00037000, .features = CURSOR_17X_MASK, .sblk = &cursor, .xin_id = 7, .clk_ctrl = SDE_CLK_CTRL_CURSOR1}, }, .mixer_count = 6, .mixer = { {.id = LM_0, .base = 0x00045000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_0, .pingpong = PINGPONG_0, .lm_pair_mask = (1 << LM_1) }, {.id = LM_1, .base = 0x00046000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_1, .pingpong = PINGPONG_1, .lm_pair_mask = (1 << LM_0) }, {.id = LM_2, .base = 0x00047000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_2, .lm_pair_mask = (1 << LM_5) }, {.id = LM_3, .base = 0x00048000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_MAX}, {.id = LM_4, .base = 0x00049000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_MAX}, {.id = LM_5, .base = 0x0004a000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_3, .lm_pair_mask = (1 << LM_2) }, }, .dspp_count = 2, .dspp = { {.id = DSPP_0, .base = 0x00055000, .features = DSPP_17X_MASK, .sblk = &dspp}, {.id = DSPP_1, .base = 0x00057000, .features = DSPP_17X_MASK, .sblk = &dspp}, }, .pingpong_count = 4, .pingpong = { {.id = PINGPONG_0, .base = 0x00071000, .features = PINGPONG_17X_SPLIT_MASK, .sblk = &pingpong}, {.id = PINGPONG_1, .base = 0x00071800, .features = PINGPONG_17X_SPLIT_MASK, .sblk = &pingpong}, {.id = PINGPONG_2, .base = 0x00072000, .features = PINGPONG_17X_MASK, .sblk = &pingpong}, {.id = PINGPONG_3, .base = 0x00072800, .features = PINGPONG_17X_MASK, .sblk = &pingpong}, }, .cdm_count = 1, .cdm = { {.id = CDM_0, .base = 0x0007A200, .features = 0, .intf_connect = BIT(INTF_3), .wb_connect = BIT(WB_2),} }, .intf_count = 4, .intf = { {.id = INTF_0, .base = 0x0006B000, .type = INTF_NONE, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, {.id = INTF_1, .base = 0x0006B800, .type = INTF_DSI, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, {.id = INTF_2, .base = 0x0006C000, .type = INTF_DSI, .controller_id = 1, .prog_fetch_lines_worst_case = 21}, {.id = INTF_3, .base = 0x0006C800, .type = INTF_HDMI, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, }, .wb_count = 3, .wb = { {.id = WB_0, .base = 0x00065000, .features = WB01_17X_MASK, .sblk = &wb0, .format_list = wb0_formats, .vbif_idx = VBIF_NRT, .xin_id = 3, .clk_ctrl = SDE_CLK_CTRL_WB0}, {.id = WB_1, .base = 0x00065800, .features = WB01_17X_MASK, .sblk = &wb0, .format_list = wb0_formats, .vbif_idx = VBIF_NRT, .xin_id = 11, .clk_ctrl = SDE_CLK_CTRL_WB1}, {.id = WB_2, .base = 0x00066000, .features = WB2_17X_MASK, .sblk = &wb2, .format_list = wb2_formats, .vbif_idx = VBIF_NRT, .xin_id = 6, .clk_ctrl = SDE_CLK_CTRL_WB2}, }, .vbif_count = 2, .vbif = { {.id = VBIF_0, .base = 0, /* 0x000B0000 */ .features = BIT(SDE_VBIF_QOS_OTLIM), .default_ot_rd_limit = 32, .default_ot_wr_limit = 16, .xin_halt_timeout = 0x4000, .dynamic_ot_rd_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, .dynamic_ot_wr_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, }, {.id = VBIF_1, .base = 0, /* 0x000B8000 */ .features = BIT(SDE_VBIF_QOS_OTLIM), .default_ot_rd_limit = 32, .default_ot_wr_limit = 16, .xin_halt_timeout = 0x4000, .dynamic_ot_rd_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, .dynamic_ot_wr_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, }, }, }; return 0; } /** * sde_mdp_cfg_170_init(): Populate the sde sub-blocks catalog information */ struct sde_mdss_cfg *sde_mdss_cfg_170_init(u32 step) { struct sde_mdss_cfg *m = NULL; /* * This function, for each sub-block sets, * instance count, IO regions, * default capabilities and this version capabilities, * Additional catalog items */ m = kzalloc(sizeof(*m), GFP_KERNEL); if (!m) return NULL; set_cfg_1xx_init(m); m->hwversion = SDE_HW_VER(1, 7, step); return m; } Loading
drivers/gpu/drm/msm/sde/sde_hw_catalog_8996.cdeleted 100644 → 0 +0 −671 Original line number Diff line number Diff line /* Copyright (c) 2015-2017, The Linux Foundation. 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 version 2 and * only version 2 as published by the Free Software Foundation. * * 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. */ #include "sde_hw_catalog.h" #include "sde_hw_mdss.h" #include "sde_hwio.h" /* VIG layer capability */ #define VIG_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_QSEED2) |\ BIT(SDE_SSPP_CSC) | BIT(SDE_SSPP_HSIC) |\ BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\ BIT(SDE_SSPP_MEMCOLOR) | BIT(SDE_SSPP_QOS)) /* RGB layer capability */ #define RGB_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_SCALER_RGB) |\ BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) | BIT(SDE_SSPP_QOS)) /* DMA layer capability */ #define DMA_17X_MASK \ (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_PCC) | BIT(SDE_SSPP_IGC) |\ BIT(SDE_SSPP_QOS)) /* Cursor layer capability */ #define CURSOR_17X_MASK (BIT(SDE_SSPP_SRC) | BIT(SDE_SSPP_CURSOR)) #define MIXER_17X_MASK (BIT(SDE_MIXER_SOURCESPLIT) |\ BIT(SDE_MIXER_GC)) #define DSPP_17X_MASK \ (BIT(SDE_DSPP_IGC) | BIT(SDE_DSPP_PCC) |\ BIT(SDE_DSPP_GC) | BIT(SDE_DSPP_HSIC) | BIT(SDE_DSPP_GAMUT) |\ BIT(SDE_DSPP_DITHER) | BIT(SDE_DSPP_HIST) | BIT(SDE_DSPP_MEMCOLOR) |\ BIT(SDE_DSPP_SIXZONE) | BIT(SDE_DSPP_AD) | BIT(SDE_DSPP_VLUT)) #define PINGPONG_17X_MASK \ (BIT(SDE_PINGPONG_TE) | BIT(SDE_PINGPONG_DSC)) #define PINGPONG_17X_SPLIT_MASK \ (PINGPONG_17X_MASK | BIT(SDE_PINGPONG_SPLIT) |\ BIT(SDE_PINGPONG_TE2)) #define WB01_17X_MASK \ (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_BLOCK_MODE) |\ BIT(SDE_WB_CSC) | BIT(SDE_WB_CHROMA_DOWN) | BIT(SDE_WB_DOWNSCALE) |\ BIT(SDE_WB_DITHER) | BIT(SDE_WB_TRAFFIC_SHAPER) |\ BIT(SDE_WB_UBWC_1_0) | BIT(SDE_WB_YUV_CONFIG)) #define WB2_17X_MASK \ (BIT(SDE_WB_LINE_MODE) | BIT(SDE_WB_TRAFFIC_SHAPER) |\ BIT(SDE_WB_YUV_CONFIG)) #define DECIMATION_17X_MAX_H 4 #define DECIMATION_17X_MAX_V 4 #define RES_1080p ((u64)(1088*1920)) #define RES_UHD ((u64)(3840*2160)) static const struct sde_format_extended plane_formats[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {0, 0}, }; static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_NV21, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_NV61, 0}, {DRM_FORMAT_VYUY, 0}, {DRM_FORMAT_UYVY, 0}, {DRM_FORMAT_YUYV, 0}, {DRM_FORMAT_YVYU, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_YVU420, 0}, {0, 0}, }; static const struct sde_format_extended wb0_formats[] = { {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGBA8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_NV21, 0}, {DRM_FORMAT_NV61, 0}, {DRM_FORMAT_UYVY, 0}, {DRM_FORMAT_YUYV, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_AYUV, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {0, 0}, }; static const struct sde_format_extended wb2_formats[] = { {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_BGRX4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_YUYV, 0}, {0, 0}, }; /** * set_cfg_1xx_init(): populate sde sub-blocks reg offsets and instance counts */ static inline int set_cfg_1xx_init(struct sde_mdss_cfg *cfg) { /* Layer capability */ static const struct sde_sspp_sub_blks vig_layer = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 4, .maxupscale = 20, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2, .base = 0x200, .len = 0x70,}, .csc_blk = {.id = SDE_SSPP_CSC, .base = 0x320, .len = 0x44,}, .format_list = plane_formats_yuv, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hsic = {.id = SDE_SSPP_HSIC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .memcolor = {.id = SDE_SSPP_MEMCOLOR, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks layer = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 4, .maxupscale = 20, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = SDE_SSPP_SCALER_QSEED2, .base = 0x200, .len = 0x70,}, .csc_blk = {.id = SDE_SSPP_CSC, .base = 0x320, .len = 0x44,}, .format_list = plane_formats, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks dma = { .maxlinewidth = 2560, .danger_lut_linear = 0x000f, .safe_lut_linear = 0xfffc, .danger_lut_tile = 0xffff, .safe_lut_tile = 0xff00, .danger_lut_nrt = 0x0, .safe_lut_nrt = 0xffff, .creq_lut_nrt = 0x0, .creq_vblank = 0x2, .danger_vblank = 0, .pixel_ram_size = 50 * 1024, .maxdwnscale = 1, .maxupscale = 1, .maxhdeciexp = DECIMATION_17X_MAX_H, .maxvdeciexp = DECIMATION_17X_MAX_V, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .format_list = plane_formats, .igc_blk = {.id = SDE_SSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc_blk = {.id = SDE_SSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; static const struct sde_sspp_sub_blks cursor = { .maxlinewidth = 128, .maxdwnscale = 1, .maxupscale = 1, .maxhdeciexp = 0, .maxvdeciexp = 0, .src_blk = {.id = SDE_SSPP_SRC, .base = 0x00, .len = 0x150,}, .scaler_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .csc_blk = {.id = 0, .base = 0x00, .len = 0x0,}, .format_list = plane_formats, }; /* MIXER capability */ static const struct sde_lm_sub_blks lm = { .maxwidth = 2560, .maxblendstages = 7, /* excluding base layer */ .blendstage_base = { /* offsets relative to mixer base */ 0x20, 0x50, 0x80, 0xB0, 0x230, 0x260, 0x290 }, .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; /* DSPP capability */ static const struct sde_dspp_sub_blks dspp = { .igc = {.id = SDE_DSPP_IGC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .pcc = {.id = SDE_DSPP_PCC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .gamut = {.id = SDE_DSPP_GAMUT, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .dither = {.id = SDE_DSPP_DITHER, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hsic = {.id = SDE_DSPP_HSIC, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .memcolor = {.id = SDE_DSPP_MEMCOLOR, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .sixzone = {.id = SDE_DSPP_SIXZONE, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .hist = {.id = SDE_DSPP_HIST, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .gc = {.id = SDE_DSPP_GC, .base = 0x0, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, .ad = {.id = SDE_DSPP_AD, .base = 0x00, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x3, 0x0)}, .vlut = {.id = SDE_DSPP_VLUT, .base = 0x1400, .len = 0x0, .version = SDE_COLOR_PROCESS_VER(0x1, 0x0)}, }; /* PINGPONG capability */ static const struct sde_pingpong_sub_blks pingpong = { .te = {.id = SDE_PINGPONG_TE, .base = 0x0000, .len = 0x0, .version = 0x1}, .te2 = {.id = SDE_PINGPONG_TE2, .base = 0x2000, .len = 0x0, .version = 0x1}, .dsc = {.id = SDE_PINGPONG_DSC, .base = 0x10000, .len = 0x0, .version = 0x1}, }; /* Writeback 0/1 capability */ static const struct sde_wb_sub_blocks wb0 = { .maxlinewidth = 2048, }; /* Writeback 2 capability */ static const struct sde_wb_sub_blocks wb2 = { .maxlinewidth = 4096, }; static const struct sde_vbif_dynamic_ot_cfg dynamic_ot_cfg[] = { {RES_1080p * 30, 2}, {RES_1080p * 60, 4}, {RES_UHD * 30, 16}, }; /* Setup Register maps and defaults */ *cfg = (struct sde_mdss_cfg){ .mdss_count = 1, .mdss = { {.id = MDP_TOP, .base = 0x00000000, .features = 0} }, .mdp_count = 1, .mdp = { {.id = MDP_TOP, .base = 0x00001000, .features = 0, .highest_bank_bit = 0x2, .clk_ctrls[SDE_CLK_CTRL_VIG0] = { .reg_off = 0x2AC, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG1] = { .reg_off = 0x2B4, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG2] = { .reg_off = 0x2BC, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_VIG3] = { .reg_off = 0x2C4, .bit_off = 0}, .clk_ctrls[SDE_CLK_CTRL_RGB0] = { .reg_off = 0x2AC, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB1] = { .reg_off = 0x2B4, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB2] = { .reg_off = 0x2BC, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_RGB3] = { .reg_off = 0x2C4, .bit_off = 4}, .clk_ctrls[SDE_CLK_CTRL_DMA0] = { .reg_off = 0x2AC, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_DMA1] = { .reg_off = 0x2B4, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_CURSOR0] = { .reg_off = 0x3A8, .bit_off = 16}, .clk_ctrls[SDE_CLK_CTRL_CURSOR1] = { .reg_off = 0x3B0, .bit_off = 16}, .clk_ctrls[SDE_CLK_CTRL_WB0] = { .reg_off = 0x2BC, .bit_off = 8}, .clk_ctrls[SDE_CLK_CTRL_WB1] = { .reg_off = 0x2BC, .bit_off = 12}, .clk_ctrls[SDE_CLK_CTRL_WB2] = { .reg_off = 0x2BC, .bit_off = 16}, }, }, .ctl_count = 5, .ctl = { {.id = CTL_0, .base = 0x00002000, .features = BIT(SDE_CTL_SPLIT_DISPLAY) | BIT(SDE_CTL_PINGPONG_SPLIT) }, {.id = CTL_1, .base = 0x00002200, .features = BIT(SDE_CTL_SPLIT_DISPLAY) }, {.id = CTL_2, .base = 0x00002400}, {.id = CTL_3, .base = 0x00002600}, {.id = CTL_4, .base = 0x00002800}, }, /* 4 VIG, + 4 RGB + 2 DMA + 2 CURSOR */ .sspp_count = 12, .sspp = { {.id = SSPP_VIG0, .base = 0x00005000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 0, .clk_ctrl = SDE_CLK_CTRL_VIG0}, {.id = SSPP_VIG1, .base = 0x00007000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 4, .clk_ctrl = SDE_CLK_CTRL_VIG1}, {.id = SSPP_VIG2, .base = 0x00009000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 8, .clk_ctrl = SDE_CLK_CTRL_VIG2}, {.id = SSPP_VIG3, .base = 0x0000b000, .features = VIG_17X_MASK, .sblk = &vig_layer, .xin_id = 12, .clk_ctrl = SDE_CLK_CTRL_VIG3}, {.id = SSPP_RGB0, .base = 0x00015000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 1, .clk_ctrl = SDE_CLK_CTRL_RGB0}, {.id = SSPP_RGB1, .base = 0x00017000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 5, .clk_ctrl = SDE_CLK_CTRL_RGB1}, {.id = SSPP_RGB2, .base = 0x00019000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 9, .clk_ctrl = SDE_CLK_CTRL_RGB2}, {.id = SSPP_RGB3, .base = 0x0001B000, .features = RGB_17X_MASK, .sblk = &layer, .xin_id = 13, .clk_ctrl = SDE_CLK_CTRL_RGB3}, {.id = SSPP_DMA0, .base = 0x00025000, .features = DMA_17X_MASK, .sblk = &dma, .xin_id = 2, .clk_ctrl = SDE_CLK_CTRL_DMA0}, {.id = SSPP_DMA1, .base = 0x00027000, .features = DMA_17X_MASK, .sblk = &dma, .xin_id = 10, .clk_ctrl = SDE_CLK_CTRL_DMA1}, {.id = SSPP_CURSOR0, .base = 0x00035000, .features = CURSOR_17X_MASK, .sblk = &cursor, .xin_id = 7, .clk_ctrl = SDE_CLK_CTRL_CURSOR0}, {.id = SSPP_CURSOR1, .base = 0x00037000, .features = CURSOR_17X_MASK, .sblk = &cursor, .xin_id = 7, .clk_ctrl = SDE_CLK_CTRL_CURSOR1}, }, .mixer_count = 6, .mixer = { {.id = LM_0, .base = 0x00045000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_0, .pingpong = PINGPONG_0, .lm_pair_mask = (1 << LM_1) }, {.id = LM_1, .base = 0x00046000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_1, .pingpong = PINGPONG_1, .lm_pair_mask = (1 << LM_0) }, {.id = LM_2, .base = 0x00047000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_2, .lm_pair_mask = (1 << LM_5) }, {.id = LM_3, .base = 0x00048000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_MAX}, {.id = LM_4, .base = 0x00049000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_MAX}, {.id = LM_5, .base = 0x0004a000, .features = MIXER_17X_MASK, .sblk = &lm, .dspp = DSPP_MAX, .pingpong = PINGPONG_3, .lm_pair_mask = (1 << LM_2) }, }, .dspp_count = 2, .dspp = { {.id = DSPP_0, .base = 0x00055000, .features = DSPP_17X_MASK, .sblk = &dspp}, {.id = DSPP_1, .base = 0x00057000, .features = DSPP_17X_MASK, .sblk = &dspp}, }, .pingpong_count = 4, .pingpong = { {.id = PINGPONG_0, .base = 0x00071000, .features = PINGPONG_17X_SPLIT_MASK, .sblk = &pingpong}, {.id = PINGPONG_1, .base = 0x00071800, .features = PINGPONG_17X_SPLIT_MASK, .sblk = &pingpong}, {.id = PINGPONG_2, .base = 0x00072000, .features = PINGPONG_17X_MASK, .sblk = &pingpong}, {.id = PINGPONG_3, .base = 0x00072800, .features = PINGPONG_17X_MASK, .sblk = &pingpong}, }, .cdm_count = 1, .cdm = { {.id = CDM_0, .base = 0x0007A200, .features = 0, .intf_connect = BIT(INTF_3), .wb_connect = BIT(WB_2),} }, .intf_count = 4, .intf = { {.id = INTF_0, .base = 0x0006B000, .type = INTF_NONE, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, {.id = INTF_1, .base = 0x0006B800, .type = INTF_DSI, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, {.id = INTF_2, .base = 0x0006C000, .type = INTF_DSI, .controller_id = 1, .prog_fetch_lines_worst_case = 21}, {.id = INTF_3, .base = 0x0006C800, .type = INTF_HDMI, .controller_id = 0, .prog_fetch_lines_worst_case = 21}, }, .wb_count = 3, .wb = { {.id = WB_0, .base = 0x00065000, .features = WB01_17X_MASK, .sblk = &wb0, .format_list = wb0_formats, .vbif_idx = VBIF_NRT, .xin_id = 3, .clk_ctrl = SDE_CLK_CTRL_WB0}, {.id = WB_1, .base = 0x00065800, .features = WB01_17X_MASK, .sblk = &wb0, .format_list = wb0_formats, .vbif_idx = VBIF_NRT, .xin_id = 11, .clk_ctrl = SDE_CLK_CTRL_WB1}, {.id = WB_2, .base = 0x00066000, .features = WB2_17X_MASK, .sblk = &wb2, .format_list = wb2_formats, .vbif_idx = VBIF_NRT, .xin_id = 6, .clk_ctrl = SDE_CLK_CTRL_WB2}, }, .vbif_count = 2, .vbif = { {.id = VBIF_0, .base = 0, /* 0x000B0000 */ .features = BIT(SDE_VBIF_QOS_OTLIM), .default_ot_rd_limit = 32, .default_ot_wr_limit = 16, .xin_halt_timeout = 0x4000, .dynamic_ot_rd_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, .dynamic_ot_wr_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, }, {.id = VBIF_1, .base = 0, /* 0x000B8000 */ .features = BIT(SDE_VBIF_QOS_OTLIM), .default_ot_rd_limit = 32, .default_ot_wr_limit = 16, .xin_halt_timeout = 0x4000, .dynamic_ot_rd_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, .dynamic_ot_wr_tbl = { .count = ARRAY_SIZE(dynamic_ot_cfg), .cfg = dynamic_ot_cfg}, }, }, }; return 0; } /** * sde_mdp_cfg_170_init(): Populate the sde sub-blocks catalog information */ struct sde_mdss_cfg *sde_mdss_cfg_170_init(u32 step) { struct sde_mdss_cfg *m = NULL; /* * This function, for each sub-block sets, * instance count, IO regions, * default capabilities and this version capabilities, * Additional catalog items */ m = kzalloc(sizeof(*m), GFP_KERNEL); if (!m) return NULL; set_cfg_1xx_init(m); m->hwversion = SDE_HW_VER(1, 7, step); return m; }