197fb5e8dSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. 325fdd593SJeykumar Sankaran */ 425fdd593SJeykumar Sankaran 525fdd593SJeykumar Sankaran #define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__ 625fdd593SJeykumar Sankaran #include <linux/slab.h> 725fdd593SJeykumar Sankaran #include <linux/of_address.h> 825fdd593SJeykumar Sankaran #include <linux/platform_device.h> 925fdd593SJeykumar Sankaran #include "dpu_hw_mdss.h" 10597762d5SDmitry Baryshkov #include "dpu_hw_interrupts.h" 1125fdd593SJeykumar Sankaran #include "dpu_hw_catalog.h" 1225fdd593SJeykumar Sankaran #include "dpu_kms.h" 1325fdd593SJeykumar Sankaran 147bdc0c4bSKalyan Thota #define VIG_MASK \ 157bdc0c4bSKalyan Thota (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\ 16b8dab65bSAngeloGioacchino Del Regno BIT(DPU_SSPP_CSC_10BIT) | BIT(DPU_SSPP_CDP) |\ 1725fdd593SJeykumar Sankaran BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_EXCL_RECT)) 1825fdd593SJeykumar Sankaran 197bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \ 20b8dab65bSAngeloGioacchino Del Regno (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3)) 217bdc0c4bSKalyan Thota 227bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \ 23b8dab65bSAngeloGioacchino Del Regno (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4)) 247bdc0c4bSKalyan Thota 25d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \ 26095eed89SDmitry Baryshkov (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE)) 27d21fc5dfSDmitry Baryshkov 2825fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \ 2925fdd593SJeykumar Sankaran (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\ 3025fdd593SJeykumar Sankaran BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\ 3125fdd593SJeykumar Sankaran BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT)) 3225fdd593SJeykumar Sankaran 3307ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \ 3407ca1fc0SSravanthi Kollukuduru (DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR)) 3507ca1fc0SSravanthi Kollukuduru 3625fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \ 3725fdd593SJeykumar Sankaran (BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER)) 3825fdd593SJeykumar Sankaran 397bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \ 407bdc0c4bSKalyan Thota (BIT(DPU_DIM_LAYER)) 417bdc0c4bSKalyan Thota 4225fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER) 4325fdd593SJeykumar Sankaran 4425fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \ 4525fdd593SJeykumar Sankaran (PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2)) 4625fdd593SJeykumar Sankaran 47591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \ 48591e34a0SKrishna Manikandan (BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE)) 49591e34a0SKrishna Manikandan 504369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0) 514369c93cSDmitry Baryshkov 524259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC) 53e47616dfSKalyan Thota 54cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0) 55cace3ac4SJonathan Marek 56cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE) 57cace3ac4SJonathan Marek 58591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN) 59591e34a0SKrishna Manikandan 60597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 61597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 62597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 63597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 64597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 65597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 66597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 67597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR) | \ 68597762d5SDmitry Baryshkov BIT(MDP_AD4_0_INTR) | \ 69597762d5SDmitry Baryshkov BIT(MDP_AD4_1_INTR)) 70597762d5SDmitry Baryshkov 71597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 72597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 73597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 74597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 75597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR)) 76597762d5SDmitry Baryshkov 77597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 78597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 79597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 80597762d5SDmitry Baryshkov BIT(MDP_INTF0_7xxx_INTR) | \ 81597762d5SDmitry Baryshkov BIT(MDP_INTF1_7xxx_INTR) | \ 82597762d5SDmitry Baryshkov BIT(MDP_INTF5_7xxx_INTR)) 83597762d5SDmitry Baryshkov 84597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 85597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 86597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 87597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 88597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 89597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 90597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 91597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR)) 92597762d5SDmitry Baryshkov 93597762d5SDmitry Baryshkov 9425fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE (50 * 1024) 9525fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH 2048 9625fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH 2560 9725fdd593SJeykumar Sankaran 9825fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION 4 9925fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION 4 10025fdd593SJeykumar Sankaran 10125fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO 20 10225fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO 4 10325fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE 1 10425fdd593SJeykumar Sankaran 10525fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y) 10625fdd593SJeykumar Sankaran 10709c7e370SLee Jones static const uint32_t plane_formats[] = { 10809c7e370SLee Jones DRM_FORMAT_ARGB8888, 10909c7e370SLee Jones DRM_FORMAT_ABGR8888, 11009c7e370SLee Jones DRM_FORMAT_RGBA8888, 11109c7e370SLee Jones DRM_FORMAT_BGRA8888, 11209c7e370SLee Jones DRM_FORMAT_XRGB8888, 11309c7e370SLee Jones DRM_FORMAT_RGBX8888, 11409c7e370SLee Jones DRM_FORMAT_BGRX8888, 11509c7e370SLee Jones DRM_FORMAT_XBGR8888, 11609c7e370SLee Jones DRM_FORMAT_RGB888, 11709c7e370SLee Jones DRM_FORMAT_BGR888, 11809c7e370SLee Jones DRM_FORMAT_RGB565, 11909c7e370SLee Jones DRM_FORMAT_BGR565, 12009c7e370SLee Jones DRM_FORMAT_ARGB1555, 12109c7e370SLee Jones DRM_FORMAT_ABGR1555, 12209c7e370SLee Jones DRM_FORMAT_RGBA5551, 12309c7e370SLee Jones DRM_FORMAT_BGRA5551, 12409c7e370SLee Jones DRM_FORMAT_XRGB1555, 12509c7e370SLee Jones DRM_FORMAT_XBGR1555, 12609c7e370SLee Jones DRM_FORMAT_RGBX5551, 12709c7e370SLee Jones DRM_FORMAT_BGRX5551, 12809c7e370SLee Jones DRM_FORMAT_ARGB4444, 12909c7e370SLee Jones DRM_FORMAT_ABGR4444, 13009c7e370SLee Jones DRM_FORMAT_RGBA4444, 13109c7e370SLee Jones DRM_FORMAT_BGRA4444, 13209c7e370SLee Jones DRM_FORMAT_XRGB4444, 13309c7e370SLee Jones DRM_FORMAT_XBGR4444, 13409c7e370SLee Jones DRM_FORMAT_RGBX4444, 13509c7e370SLee Jones DRM_FORMAT_BGRX4444, 13609c7e370SLee Jones }; 13709c7e370SLee Jones 13809c7e370SLee Jones static const uint32_t plane_formats_yuv[] = { 13909c7e370SLee Jones DRM_FORMAT_ARGB8888, 14009c7e370SLee Jones DRM_FORMAT_ABGR8888, 14109c7e370SLee Jones DRM_FORMAT_RGBA8888, 14209c7e370SLee Jones DRM_FORMAT_BGRX8888, 14309c7e370SLee Jones DRM_FORMAT_BGRA8888, 14409c7e370SLee Jones DRM_FORMAT_XRGB8888, 14509c7e370SLee Jones DRM_FORMAT_XBGR8888, 14609c7e370SLee Jones DRM_FORMAT_RGBX8888, 14709c7e370SLee Jones DRM_FORMAT_RGB888, 14809c7e370SLee Jones DRM_FORMAT_BGR888, 14909c7e370SLee Jones DRM_FORMAT_RGB565, 15009c7e370SLee Jones DRM_FORMAT_BGR565, 15109c7e370SLee Jones DRM_FORMAT_ARGB1555, 15209c7e370SLee Jones DRM_FORMAT_ABGR1555, 15309c7e370SLee Jones DRM_FORMAT_RGBA5551, 15409c7e370SLee Jones DRM_FORMAT_BGRA5551, 15509c7e370SLee Jones DRM_FORMAT_XRGB1555, 15609c7e370SLee Jones DRM_FORMAT_XBGR1555, 15709c7e370SLee Jones DRM_FORMAT_RGBX5551, 15809c7e370SLee Jones DRM_FORMAT_BGRX5551, 15909c7e370SLee Jones DRM_FORMAT_ARGB4444, 16009c7e370SLee Jones DRM_FORMAT_ABGR4444, 16109c7e370SLee Jones DRM_FORMAT_RGBA4444, 16209c7e370SLee Jones DRM_FORMAT_BGRA4444, 16309c7e370SLee Jones DRM_FORMAT_XRGB4444, 16409c7e370SLee Jones DRM_FORMAT_XBGR4444, 16509c7e370SLee Jones DRM_FORMAT_RGBX4444, 16609c7e370SLee Jones DRM_FORMAT_BGRX4444, 16709c7e370SLee Jones 16809c7e370SLee Jones DRM_FORMAT_NV12, 16909c7e370SLee Jones DRM_FORMAT_NV21, 17009c7e370SLee Jones DRM_FORMAT_NV16, 17109c7e370SLee Jones DRM_FORMAT_NV61, 17209c7e370SLee Jones DRM_FORMAT_VYUY, 17309c7e370SLee Jones DRM_FORMAT_UYVY, 17409c7e370SLee Jones DRM_FORMAT_YUYV, 17509c7e370SLee Jones DRM_FORMAT_YVYU, 17609c7e370SLee Jones DRM_FORMAT_YUV420, 17709c7e370SLee Jones DRM_FORMAT_YVU420, 17809c7e370SLee Jones }; 17909c7e370SLee Jones 18025fdd593SJeykumar Sankaran /************************************************************* 18125fdd593SJeykumar Sankaran * DPU sub blocks config 18225fdd593SJeykumar Sankaran *************************************************************/ 18325fdd593SJeykumar Sankaran /* DPU top level caps */ 18425fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = { 18525fdd593SJeykumar Sankaran .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 18625fdd593SJeykumar Sankaran .max_mixer_blendstages = 0xb, 18725fdd593SJeykumar Sankaran .qseed_type = DPU_SSPP_SCALER_QSEED3, 18825fdd593SJeykumar Sankaran .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 18925fdd593SJeykumar Sankaran .ubwc_version = DPU_HW_UBWC_VER_20, 19025fdd593SJeykumar Sankaran .has_src_split = true, 19125fdd593SJeykumar Sankaran .has_dim_layer = true, 19225fdd593SJeykumar Sankaran .has_idle_pc = true, 19342a558b7SKalyan Thota .has_3d_merge = true, 1947e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 1957e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 1967e9d4cddSJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 1977e9d4cddSJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 19825fdd593SJeykumar Sankaran }; 19925fdd593SJeykumar Sankaran 2007bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = { 2017bdc0c4bSKalyan Thota .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2027bdc0c4bSKalyan Thota .max_mixer_blendstages = 0x9, 2037bdc0c4bSKalyan Thota .qseed_type = DPU_SSPP_SCALER_QSEED4, 2047bdc0c4bSKalyan Thota .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 2057bdc0c4bSKalyan Thota .ubwc_version = DPU_HW_UBWC_VER_20, 2067bdc0c4bSKalyan Thota .has_dim_layer = true, 2077bdc0c4bSKalyan Thota .has_idle_pc = true, 2087e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2097e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 2107bdc0c4bSKalyan Thota }; 2117bdc0c4bSKalyan Thota 212386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = { 213386fced3SJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 214386fced3SJonathan Marek .max_mixer_blendstages = 0xb, 215386fced3SJonathan Marek .qseed_type = DPU_SSPP_SCALER_QSEED3, 216386fced3SJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 217386fced3SJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_30, 218386fced3SJonathan Marek .has_src_split = true, 219386fced3SJonathan Marek .has_dim_layer = true, 220386fced3SJonathan Marek .has_idle_pc = true, 221386fced3SJonathan Marek .has_3d_merge = true, 222386fced3SJonathan Marek .max_linewidth = 4096, 223386fced3SJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 224386fced3SJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 225386fced3SJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 226386fced3SJonathan Marek }; 227386fced3SJonathan Marek 228af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = { 229af776a3eSJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 230af776a3eSJonathan Marek .max_mixer_blendstages = 0xb, 231d21fc5dfSDmitry Baryshkov .qseed_type = DPU_SSPP_SCALER_QSEED3LITE, 232af776a3eSJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 233af776a3eSJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_40, 234af776a3eSJonathan Marek .has_src_split = true, 235af776a3eSJonathan Marek .has_dim_layer = true, 236af776a3eSJonathan Marek .has_idle_pc = true, 237af776a3eSJonathan Marek .has_3d_merge = true, 238af776a3eSJonathan Marek .max_linewidth = 4096, 239af776a3eSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 240af776a3eSJonathan Marek }; 241af776a3eSJonathan Marek 242591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = { 243591e34a0SKrishna Manikandan .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 244591e34a0SKrishna Manikandan .max_mixer_blendstages = 0x7, 245591e34a0SKrishna Manikandan .qseed_type = DPU_SSPP_SCALER_QSEED4, 246591e34a0SKrishna Manikandan .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 247591e34a0SKrishna Manikandan .ubwc_version = DPU_HW_UBWC_VER_30, 248591e34a0SKrishna Manikandan .has_dim_layer = true, 249591e34a0SKrishna Manikandan .has_idle_pc = true, 250591e34a0SKrishna Manikandan .max_linewidth = 2400, 251591e34a0SKrishna Manikandan .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 252591e34a0SKrishna Manikandan }; 253591e34a0SKrishna Manikandan 254abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = { 25525fdd593SJeykumar Sankaran { 25625fdd593SJeykumar Sankaran .name = "top_0", .id = MDP_TOP, 25725fdd593SJeykumar Sankaran .base = 0x0, .len = 0x45C, 25825fdd593SJeykumar Sankaran .features = 0, 25925fdd593SJeykumar Sankaran .highest_bank_bit = 0x2, 26025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 26125fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 0}, 26225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 26325fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 0}, 26425fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 26525fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 0}, 26625fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 26725fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 0}, 26825fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 26925fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 8}, 27025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 27125fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 8}, 27225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 27325fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 8}, 27425fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 27525fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 8}, 27625fdd593SJeykumar Sankaran }, 27725fdd593SJeykumar Sankaran }; 27825fdd593SJeykumar Sankaran 2797bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = { 2807bdc0c4bSKalyan Thota { 2817bdc0c4bSKalyan Thota .name = "top_0", .id = MDP_TOP, 2827bdc0c4bSKalyan Thota .base = 0x0, .len = 0x494, 2837bdc0c4bSKalyan Thota .features = 0, 2847bdc0c4bSKalyan Thota .highest_bank_bit = 0x3, 2857bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 2867bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 0}, 2877bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 2887bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 8}, 2897bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 2907b149f2bSKalyan Thota .reg_off = 0x2B4, .bit_off = 8}, 2917b149f2bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 2927b149f2bSKalyan Thota .reg_off = 0x2C4, .bit_off = 8}, 2937bdc0c4bSKalyan Thota }, 2947bdc0c4bSKalyan Thota }; 2957bdc0c4bSKalyan Thota 296af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = { 297af776a3eSJonathan Marek { 298af776a3eSJonathan Marek .name = "top_0", .id = MDP_TOP, 299af776a3eSJonathan Marek .base = 0x0, .len = 0x45C, 300af776a3eSJonathan Marek .features = 0, 301af776a3eSJonathan Marek .highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */ 302af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 303af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 0}, 304af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 305af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 0}, 306af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 307af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 0}, 308af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 309af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 0}, 310af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 311af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 8}, 312af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 313af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 8}, 314af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 315af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 8}, 316af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 317af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 8}, 318af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_REG_DMA] = { 319af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 20}, 320af776a3eSJonathan Marek }, 321af776a3eSJonathan Marek }; 322af776a3eSJonathan Marek 323591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = { 324591e34a0SKrishna Manikandan { 325591e34a0SKrishna Manikandan .name = "top_0", .id = MDP_TOP, 326591e34a0SKrishna Manikandan .base = 0x0, .len = 0x2014, 327591e34a0SKrishna Manikandan .highest_bank_bit = 0x1, 328591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 329591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 0}, 330591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 331591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 8}, 332591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 333591e34a0SKrishna Manikandan .reg_off = 0x2B4, .bit_off = 8}, 334591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 335591e34a0SKrishna Manikandan .reg_off = 0x2C4, .bit_off = 8}, 336591e34a0SKrishna Manikandan }, 337591e34a0SKrishna Manikandan }; 338591e34a0SKrishna Manikandan 33925fdd593SJeykumar Sankaran /************************************************************* 34025fdd593SJeykumar Sankaran * CTL sub blocks config 34125fdd593SJeykumar Sankaran *************************************************************/ 342abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = { 34325fdd593SJeykumar Sankaran { 34425fdd593SJeykumar Sankaran .name = "ctl_0", .id = CTL_0, 34525fdd593SJeykumar Sankaran .base = 0x1000, .len = 0xE4, 346667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 347667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 34825fdd593SJeykumar Sankaran }, 34925fdd593SJeykumar Sankaran { 35025fdd593SJeykumar Sankaran .name = "ctl_1", .id = CTL_1, 35125fdd593SJeykumar Sankaran .base = 0x1200, .len = 0xE4, 352667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 353667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 35425fdd593SJeykumar Sankaran }, 35525fdd593SJeykumar Sankaran { 35625fdd593SJeykumar Sankaran .name = "ctl_2", .id = CTL_2, 35725fdd593SJeykumar Sankaran .base = 0x1400, .len = 0xE4, 358667e9985SDmitry Baryshkov .features = 0, 359667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 36025fdd593SJeykumar Sankaran }, 36125fdd593SJeykumar Sankaran { 36225fdd593SJeykumar Sankaran .name = "ctl_3", .id = CTL_3, 36325fdd593SJeykumar Sankaran .base = 0x1600, .len = 0xE4, 364667e9985SDmitry Baryshkov .features = 0, 365667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 36625fdd593SJeykumar Sankaran }, 36725fdd593SJeykumar Sankaran { 36825fdd593SJeykumar Sankaran .name = "ctl_4", .id = CTL_4, 36925fdd593SJeykumar Sankaran .base = 0x1800, .len = 0xE4, 370667e9985SDmitry Baryshkov .features = 0, 371667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 37225fdd593SJeykumar Sankaran }, 37325fdd593SJeykumar Sankaran }; 37425fdd593SJeykumar Sankaran 3757bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = { 3767bdc0c4bSKalyan Thota { 3777bdc0c4bSKalyan Thota .name = "ctl_0", .id = CTL_0, 3787bdc0c4bSKalyan Thota .base = 0x1000, .len = 0xE4, 379667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 380667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 3817bdc0c4bSKalyan Thota }, 3827bdc0c4bSKalyan Thota { 3837bdc0c4bSKalyan Thota .name = "ctl_1", .id = CTL_1, 3847bdc0c4bSKalyan Thota .base = 0x1200, .len = 0xE4, 385667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 386667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 3877bdc0c4bSKalyan Thota }, 3887bdc0c4bSKalyan Thota { 3897bdc0c4bSKalyan Thota .name = "ctl_2", .id = CTL_2, 3907bdc0c4bSKalyan Thota .base = 0x1400, .len = 0xE4, 391667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 392667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 3937bdc0c4bSKalyan Thota }, 3947bdc0c4bSKalyan Thota }; 3957bdc0c4bSKalyan Thota 396386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = { 397386fced3SJonathan Marek { 398386fced3SJonathan Marek .name = "ctl_0", .id = CTL_0, 399386fced3SJonathan Marek .base = 0x1000, .len = 0x1e0, 400667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 401667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 402386fced3SJonathan Marek }, 403386fced3SJonathan Marek { 404386fced3SJonathan Marek .name = "ctl_1", .id = CTL_1, 405386fced3SJonathan Marek .base = 0x1200, .len = 0x1e0, 406667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 407667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 408386fced3SJonathan Marek }, 409386fced3SJonathan Marek { 410386fced3SJonathan Marek .name = "ctl_2", .id = CTL_2, 411386fced3SJonathan Marek .base = 0x1400, .len = 0x1e0, 412667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 413667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 414386fced3SJonathan Marek }, 415386fced3SJonathan Marek { 416386fced3SJonathan Marek .name = "ctl_3", .id = CTL_3, 417386fced3SJonathan Marek .base = 0x1600, .len = 0x1e0, 418667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 419667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 420386fced3SJonathan Marek }, 421386fced3SJonathan Marek { 422386fced3SJonathan Marek .name = "ctl_4", .id = CTL_4, 423386fced3SJonathan Marek .base = 0x1800, .len = 0x1e0, 424667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 425667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 426386fced3SJonathan Marek }, 427386fced3SJonathan Marek { 428386fced3SJonathan Marek .name = "ctl_5", .id = CTL_5, 429386fced3SJonathan Marek .base = 0x1a00, .len = 0x1e0, 430667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 431667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23), 432386fced3SJonathan Marek }, 433386fced3SJonathan Marek }; 434386fced3SJonathan Marek 435591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = { 436591e34a0SKrishna Manikandan { 437591e34a0SKrishna Manikandan .name = "ctl_0", .id = CTL_0, 438591e34a0SKrishna Manikandan .base = 0x15000, .len = 0x1E8, 439667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 440667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 441591e34a0SKrishna Manikandan }, 442591e34a0SKrishna Manikandan { 443591e34a0SKrishna Manikandan .name = "ctl_1", .id = CTL_1, 444591e34a0SKrishna Manikandan .base = 0x16000, .len = 0x1E8, 445667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 446667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 447591e34a0SKrishna Manikandan }, 448591e34a0SKrishna Manikandan { 449591e34a0SKrishna Manikandan .name = "ctl_2", .id = CTL_2, 450591e34a0SKrishna Manikandan .base = 0x17000, .len = 0x1E8, 451667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 452667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 453591e34a0SKrishna Manikandan }, 454591e34a0SKrishna Manikandan { 455591e34a0SKrishna Manikandan .name = "ctl_3", .id = CTL_3, 456591e34a0SKrishna Manikandan .base = 0x18000, .len = 0x1E8, 457667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 458667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 459591e34a0SKrishna Manikandan }, 460591e34a0SKrishna Manikandan }; 461591e34a0SKrishna Manikandan 46225fdd593SJeykumar Sankaran /************************************************************* 46325fdd593SJeykumar Sankaran * SSPP sub blocks config 46425fdd593SJeykumar Sankaran *************************************************************/ 46525fdd593SJeykumar Sankaran 46625fdd593SJeykumar Sankaran /* SSPP common configuration */ 46725fdd593SJeykumar Sankaran 468b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \ 46925fdd593SJeykumar Sankaran { \ 47025fdd593SJeykumar Sankaran .maxdwnscale = MAX_DOWNSCALE_RATIO, \ 47125fdd593SJeykumar Sankaran .maxupscale = MAX_UPSCALE_RATIO, \ 47225fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 47325fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 47425fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 47525fdd593SJeykumar Sankaran .scaler_blk = {.name = STRCAT("sspp_scaler", num), \ 476b75ab05aSShubhashree Dhar .id = qseed_ver, \ 47725fdd593SJeykumar Sankaran .base = 0xa00, .len = 0xa0,}, \ 47825fdd593SJeykumar Sankaran .csc_blk = {.name = STRCAT("sspp_csc", num), \ 47925fdd593SJeykumar Sankaran .id = DPU_SSPP_CSC_10BIT, \ 48025fdd593SJeykumar Sankaran .base = 0x1a00, .len = 0x100,}, \ 48125fdd593SJeykumar Sankaran .format_list = plane_formats_yuv, \ 482e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats_yuv), \ 48325fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 484e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 48525fdd593SJeykumar Sankaran } 48625fdd593SJeykumar Sankaran 48725fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \ 48825fdd593SJeykumar Sankaran { \ 48925fdd593SJeykumar Sankaran .maxdwnscale = SSPP_UNITY_SCALE, \ 49025fdd593SJeykumar Sankaran .maxupscale = SSPP_UNITY_SCALE, \ 49125fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 49225fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 49325fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 49425fdd593SJeykumar Sankaran .format_list = plane_formats, \ 495e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats), \ 49625fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 497e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 49825fdd593SJeykumar Sankaran } 49925fdd593SJeykumar Sankaran 500b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 = 501b75ab05aSShubhashree Dhar _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3); 502b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 = 503b75ab05aSShubhashree Dhar _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3); 504b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 = 505b75ab05aSShubhashree Dhar _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3); 506b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 = 507b75ab05aSShubhashree Dhar _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3); 50825fdd593SJeykumar Sankaran 50925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1); 51025fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2); 51125fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3); 51225fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4); 51325fdd593SJeykumar Sankaran 51407ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \ 51507ca1fc0SSravanthi Kollukuduru _sblk, _xinid, _type, _clkctrl) \ 51625fdd593SJeykumar Sankaran { \ 51725fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 51825fdd593SJeykumar Sankaran .base = _base, .len = 0x1c8, \ 51907ca1fc0SSravanthi Kollukuduru .features = _features, \ 52025fdd593SJeykumar Sankaran .sblk = &_sblk, \ 52125fdd593SJeykumar Sankaran .xin_id = _xinid, \ 52207ca1fc0SSravanthi Kollukuduru .type = _type, \ 52325fdd593SJeykumar Sankaran .clk_ctrl = _clkctrl \ 52425fdd593SJeykumar Sankaran } 52525fdd593SJeykumar Sankaran 526abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = { 52707ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK, 52807ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 52907ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK, 53007ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 53107ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK, 53207ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 53307ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK, 53407ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 53507ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 53607ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 53707ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 53807ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 53907ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 54007ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 54107ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 54207ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 54325fdd593SJeykumar Sankaran }; 54425fdd593SJeykumar Sankaran 545b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 = 546b75ab05aSShubhashree Dhar _VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4); 547b75ab05aSShubhashree Dhar 5487bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = { 5497bdc0c4bSKalyan Thota SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 550b75ab05aSShubhashree Dhar sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 5517bdc0c4bSKalyan Thota SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 5527bdc0c4bSKalyan Thota sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 5537b149f2bSKalyan Thota SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 5547b149f2bSKalyan Thota sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 5557bdc0c4bSKalyan Thota SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 5567b149f2bSKalyan Thota sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 5577bdc0c4bSKalyan Thota }; 5587bdc0c4bSKalyan Thota 559d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 = 560d21fc5dfSDmitry Baryshkov _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE); 561d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 = 562d21fc5dfSDmitry Baryshkov _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE); 563d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 = 564d21fc5dfSDmitry Baryshkov _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE); 565d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 = 566d21fc5dfSDmitry Baryshkov _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE); 567d21fc5dfSDmitry Baryshkov 568d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = { 569d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK, 570d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 571d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK, 572d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 573d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK, 574d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 575d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK, 576d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 577d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 578d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 579d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 580d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 581d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 582d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 583d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 584d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 585d21fc5dfSDmitry Baryshkov }; 586d21fc5dfSDmitry Baryshkov 587591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = { 588591e34a0SKrishna Manikandan SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 589591e34a0SKrishna Manikandan sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 590591e34a0SKrishna Manikandan SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 591591e34a0SKrishna Manikandan sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 592591e34a0SKrishna Manikandan SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 593591e34a0SKrishna Manikandan sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 594591e34a0SKrishna Manikandan SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 595591e34a0SKrishna Manikandan sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 596591e34a0SKrishna Manikandan }; 597591e34a0SKrishna Manikandan 59825fdd593SJeykumar Sankaran /************************************************************* 59925fdd593SJeykumar Sankaran * MIXER sub blocks config 60025fdd593SJeykumar Sankaran *************************************************************/ 6017bdc0c4bSKalyan Thota 6027bdc0c4bSKalyan Thota /* SDM845 */ 6037bdc0c4bSKalyan Thota 60425fdd593SJeykumar Sankaran static const struct dpu_lm_sub_blks sdm845_lm_sblk = { 60525fdd593SJeykumar Sankaran .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 60625fdd593SJeykumar Sankaran .maxblendstages = 11, /* excluding base layer */ 60725fdd593SJeykumar Sankaran .blendstage_base = { /* offsets relative to mixer base */ 60825fdd593SJeykumar Sankaran 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 60925fdd593SJeykumar Sankaran 0xb0, 0xc8, 0xe0, 0xf8, 0x110 61025fdd593SJeykumar Sankaran }, 61125fdd593SJeykumar Sankaran }; 61225fdd593SJeykumar Sankaran 613e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \ 61425fdd593SJeykumar Sankaran { \ 61525fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 61625fdd593SJeykumar Sankaran .base = _base, .len = 0x320, \ 6177bdc0c4bSKalyan Thota .features = _fmask, \ 6187bdc0c4bSKalyan Thota .sblk = _sblk, \ 61925fdd593SJeykumar Sankaran .pingpong = _pp, \ 620e47616dfSKalyan Thota .lm_pair_mask = (1 << _lmpair), \ 621e47616dfSKalyan Thota .dspp = _dspp \ 62225fdd593SJeykumar Sankaran } 62325fdd593SJeykumar Sankaran 624abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = { 6257bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 626e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_0, LM_1, 0), 6277bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 628e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_1, LM_0, 0), 6297bdc0c4bSKalyan Thota LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 630e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_2, LM_5, 0), 6317bdc0c4bSKalyan Thota LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK, 632e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 6337bdc0c4bSKalyan Thota LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK, 634e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 6357bdc0c4bSKalyan Thota LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 636e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 6377bdc0c4bSKalyan Thota }; 6387bdc0c4bSKalyan Thota 6397bdc0c4bSKalyan Thota /* SC7180 */ 6407bdc0c4bSKalyan Thota 6417bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = { 6427bdc0c4bSKalyan Thota .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 6437bdc0c4bSKalyan Thota .maxblendstages = 7, /* excluding base layer */ 6447bdc0c4bSKalyan Thota .blendstage_base = { /* offsets relative to mixer base */ 6457bdc0c4bSKalyan Thota 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0 6467bdc0c4bSKalyan Thota }, 6477bdc0c4bSKalyan Thota }; 6487bdc0c4bSKalyan Thota 6497bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = { 6507bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 651e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 6527bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK, 653e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_1, LM_0, 0), 65425fdd593SJeykumar Sankaran }; 65525fdd593SJeykumar Sankaran 656386fced3SJonathan Marek /* SM8150 */ 657386fced3SJonathan Marek 658386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = { 659386fced3SJonathan Marek LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 66005ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 661386fced3SJonathan Marek LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 66205ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1), 663386fced3SJonathan Marek LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 664386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_2, LM_3, 0), 665386fced3SJonathan Marek LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, 666386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 667386fced3SJonathan Marek LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, 668386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_4, LM_5, 0), 669386fced3SJonathan Marek LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 670386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_5, LM_4, 0), 671386fced3SJonathan Marek }; 672386fced3SJonathan Marek 673591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = { 674591e34a0SKrishna Manikandan LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 675591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_0, 0, 0), 676591e34a0SKrishna Manikandan LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK, 677591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_2, LM_3, 0), 678591e34a0SKrishna Manikandan LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK, 679591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_3, LM_2, 0), 680591e34a0SKrishna Manikandan }; 681591e34a0SKrishna Manikandan 68225fdd593SJeykumar Sankaran /************************************************************* 683e47616dfSKalyan Thota * DSPP sub blocks config 684e47616dfSKalyan Thota *************************************************************/ 6854259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = { 6864259ff7aSKalyan Thota .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 6874259ff7aSKalyan Thota .len = 0x90, .version = 0x10000}, 6884259ff7aSKalyan Thota }; 6894259ff7aSKalyan Thota 69005ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = { 69105ae91d9SDmitry Baryshkov .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 69205ae91d9SDmitry Baryshkov .len = 0x90, .version = 0x40000}, 69305ae91d9SDmitry Baryshkov }; 69405ae91d9SDmitry Baryshkov 695862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \ 696e47616dfSKalyan Thota {\ 697e47616dfSKalyan Thota .name = _name, .id = _id, \ 698e47616dfSKalyan Thota .base = _base, .len = 0x1800, \ 699862314bcSAngeloGioacchino Del Regno .features = _mask, \ 70005ae91d9SDmitry Baryshkov .sblk = _sblk \ 701e47616dfSKalyan Thota } 702e47616dfSKalyan Thota 703e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = { 704862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 705862314bcSAngeloGioacchino Del Regno &sc7180_dspp_sblk), 70605ae91d9SDmitry Baryshkov }; 70705ae91d9SDmitry Baryshkov 70805ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = { 709862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 710862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 711862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK, 712862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 713862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK, 714862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 715862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK, 716862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 717e47616dfSKalyan Thota }; 718386fced3SJonathan Marek 719e47616dfSKalyan Thota /************************************************************* 72025fdd593SJeykumar Sankaran * PINGPONG sub blocks config 72125fdd593SJeykumar Sankaran *************************************************************/ 72225fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = { 72325fdd593SJeykumar Sankaran .te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0, 72425fdd593SJeykumar Sankaran .version = 0x1}, 72525fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 72625fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 72725fdd593SJeykumar Sankaran }; 72825fdd593SJeykumar Sankaran 72925fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = { 73025fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 73125fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 73225fdd593SJeykumar Sankaran }; 73325fdd593SJeykumar Sankaran 734591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = { 735591e34a0SKrishna Manikandan .dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0, 736591e34a0SKrishna Manikandan .len = 0x20, .version = 0x20000}, 737591e34a0SKrishna Manikandan }; 738591e34a0SKrishna Manikandan 739667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 74025fdd593SJeykumar Sankaran {\ 74125fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 74225fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 74325fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_SPLIT_MASK, \ 7444369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 745667e9985SDmitry Baryshkov .sblk = &_sblk, \ 746667e9985SDmitry Baryshkov .intr_done = _done, \ 747667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 74825fdd593SJeykumar Sankaran } 749667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 75025fdd593SJeykumar Sankaran {\ 75125fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 75225fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 75325fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_MASK, \ 7544369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 755667e9985SDmitry Baryshkov .sblk = &_sblk, \ 756667e9985SDmitry Baryshkov .intr_done = _done, \ 757667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 75825fdd593SJeykumar Sankaran } 75925fdd593SJeykumar Sankaran 760abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = { 761667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, 762667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 763667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 764667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, 765667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 766667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 767667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk, 768667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 769667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 770667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk, 771667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 772667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 77325fdd593SJeykumar Sankaran }; 77425fdd593SJeykumar Sankaran 7757bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = { 776667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1), 777667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1), 7787bdc0c4bSKalyan Thota }; 7797bdc0c4bSKalyan Thota 780386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = { 781667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te, 782667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 783667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 784667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te, 785667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 786667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 787667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, 788667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 789667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 790667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, 791667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 792667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 793667e9985SDmitry Baryshkov PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, 794667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), 795667e9985SDmitry Baryshkov -1), 796667e9985SDmitry Baryshkov PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, 797667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), 798667e9985SDmitry Baryshkov -1), 7994369c93cSDmitry Baryshkov }; 8004369c93cSDmitry Baryshkov 8014369c93cSDmitry Baryshkov /************************************************************* 8024369c93cSDmitry Baryshkov * MERGE_3D sub blocks config 8034369c93cSDmitry Baryshkov *************************************************************/ 8044369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \ 8054369c93cSDmitry Baryshkov {\ 8064369c93cSDmitry Baryshkov .name = _name, .id = _id, \ 8074369c93cSDmitry Baryshkov .base = _base, .len = 0x100, \ 8084369c93cSDmitry Baryshkov .features = MERGE_3D_SM8150_MASK, \ 8094369c93cSDmitry Baryshkov .sblk = NULL \ 8104369c93cSDmitry Baryshkov } 8114369c93cSDmitry Baryshkov 8124369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = { 8134369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000), 8144369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100), 8154369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200), 816386fced3SJonathan Marek }; 817386fced3SJonathan Marek 818591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = { 819667e9985SDmitry Baryshkov PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1), 820667e9985SDmitry Baryshkov PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1), 821667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1), 822667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1), 823591e34a0SKrishna Manikandan }; 82425fdd593SJeykumar Sankaran /************************************************************* 82525fdd593SJeykumar Sankaran * INTF sub blocks config 82625fdd593SJeykumar Sankaran *************************************************************/ 827667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \ 82825fdd593SJeykumar Sankaran {\ 82925fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 83025fdd593SJeykumar Sankaran .base = _base, .len = 0x280, \ 831cace3ac4SJonathan Marek .features = _features, \ 83225fdd593SJeykumar Sankaran .type = _type, \ 83325fdd593SJeykumar Sankaran .controller_id = _ctrl_id, \ 834667e9985SDmitry Baryshkov .prog_fetch_lines_worst_case = _progfetch, \ 835667e9985SDmitry Baryshkov .intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \ 836667e9985SDmitry Baryshkov .intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \ 83725fdd593SJeykumar Sankaran } 83825fdd593SJeykumar Sankaran 839abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = { 840667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 841667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 842667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 843667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 84425fdd593SJeykumar Sankaran }; 84525fdd593SJeykumar Sankaran 8467bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = { 847667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 848667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 8497bdc0c4bSKalyan Thota }; 8507bdc0c4bSKalyan Thota 851386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = { 852667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 853667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 854667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 855667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 856386fced3SJonathan Marek }; 857386fced3SJonathan Marek 858591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = { 859667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 860667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 861667e9985SDmitry Baryshkov INTF_BLK("intf_5", INTF_5, 0x39000, INTF_EDP, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23), 862591e34a0SKrishna Manikandan }; 863591e34a0SKrishna Manikandan 86425fdd593SJeykumar Sankaran /************************************************************* 86525fdd593SJeykumar Sankaran * VBIF sub blocks config 86625fdd593SJeykumar Sankaran *************************************************************/ 86725fdd593SJeykumar Sankaran /* VBIF QOS remap */ 868abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6}; 869abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3}; 87025fdd593SJeykumar Sankaran 871abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = { 87225fdd593SJeykumar Sankaran { 87325fdd593SJeykumar Sankaran .name = "vbif_0", .id = VBIF_0, 87425fdd593SJeykumar Sankaran .base = 0, .len = 0x1040, 87525fdd593SJeykumar Sankaran .features = BIT(DPU_VBIF_QOS_REMAP), 87625fdd593SJeykumar Sankaran .xin_halt_timeout = 0x4000, 87725fdd593SJeykumar Sankaran .qos_rt_tbl = { 87825fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl), 87925fdd593SJeykumar Sankaran .priority_lvl = sdm845_rt_pri_lvl, 88025fdd593SJeykumar Sankaran }, 88125fdd593SJeykumar Sankaran .qos_nrt_tbl = { 88225fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl), 88325fdd593SJeykumar Sankaran .priority_lvl = sdm845_nrt_pri_lvl, 88425fdd593SJeykumar Sankaran }, 88525fdd593SJeykumar Sankaran .memtype_count = 14, 88625fdd593SJeykumar Sankaran .memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 88725fdd593SJeykumar Sankaran }, 88825fdd593SJeykumar Sankaran }; 88925fdd593SJeykumar Sankaran 890abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = { 89125fdd593SJeykumar Sankaran .base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c 89225fdd593SJeykumar Sankaran }; 89325fdd593SJeykumar Sankaran 894386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = { 895386fced3SJonathan Marek .base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c 896386fced3SJonathan Marek }; 897386fced3SJonathan Marek 898af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = { 899af776a3eSJonathan Marek .base = 0x0, 900af776a3eSJonathan Marek .version = 0x00010002, 901af776a3eSJonathan Marek .trigger_sel_off = 0x119c, 902af776a3eSJonathan Marek .xin_id = 7, 903af776a3eSJonathan Marek .clk_ctrl = DPU_CLK_CTRL_REG_DMA, 904af776a3eSJonathan Marek }; 905af776a3eSJonathan Marek 90625fdd593SJeykumar Sankaran /************************************************************* 90725fdd593SJeykumar Sankaran * PERF data config 90825fdd593SJeykumar Sankaran *************************************************************/ 90925fdd593SJeykumar Sankaran 91025fdd593SJeykumar Sankaran /* SSPP QOS LUTs */ 911abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = { 91225fdd593SJeykumar Sankaran {.fl = 4, .lut = 0x357}, 91325fdd593SJeykumar Sankaran {.fl = 5, .lut = 0x3357}, 91425fdd593SJeykumar Sankaran {.fl = 6, .lut = 0x23357}, 91525fdd593SJeykumar Sankaran {.fl = 7, .lut = 0x223357}, 91625fdd593SJeykumar Sankaran {.fl = 8, .lut = 0x2223357}, 91725fdd593SJeykumar Sankaran {.fl = 9, .lut = 0x22223357}, 91825fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x222223357}, 91925fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x2222223357}, 92025fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x22222223357}, 92125fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x222222223357}, 92225fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1222222223357}, 92325fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x11222222223357} 92425fdd593SJeykumar Sankaran }; 92525fdd593SJeykumar Sankaran 9267bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = { 9277bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011222222335777}, 9287bdc0c4bSKalyan Thota }; 9297bdc0c4bSKalyan Thota 930386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = { 931386fced3SJonathan Marek {.fl = 0, .lut = 0x0011222222223357 }, 932386fced3SJonathan Marek }; 933386fced3SJonathan Marek 934abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = { 93525fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x344556677}, 93625fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x3344556677}, 93725fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x23344556677}, 93825fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x223344556677}, 93925fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1223344556677}, 94025fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x112233344556677}, 94125fdd593SJeykumar Sankaran }; 94225fdd593SJeykumar Sankaran 9437bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = { 9447bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011223344556677}, 9457bdc0c4bSKalyan Thota }; 9467bdc0c4bSKalyan Thota 947abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = { 94825fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x0}, 94925fdd593SJeykumar Sankaran }; 95025fdd593SJeykumar Sankaran 9517bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = { 9527bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0}, 9537bdc0c4bSKalyan Thota }; 9547bdc0c4bSKalyan Thota 955abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = { 95625fdd593SJeykumar Sankaran .max_bw_low = 6800000, 95725fdd593SJeykumar Sankaran .max_bw_high = 6800000, 95825fdd593SJeykumar Sankaran .min_core_ib = 2400000, 95925fdd593SJeykumar Sankaran .min_llcc_ib = 800000, 96025fdd593SJeykumar Sankaran .min_dram_ib = 800000, 96125fdd593SJeykumar Sankaran .core_ib_ff = "6.0", 96225fdd593SJeykumar Sankaran .core_clk_ff = "1.0", 96325fdd593SJeykumar Sankaran .comp_ratio_rt = 96425fdd593SJeykumar Sankaran "NV12/5/1/1.23 AB24/5/1/1.23 XB24/5/1/1.23", 96525fdd593SJeykumar Sankaran .comp_ratio_nrt = 96625fdd593SJeykumar Sankaran "NV12/5/1/1.25 AB24/5/1/1.25 XB24/5/1/1.25", 96725fdd593SJeykumar Sankaran .undersized_prefill_lines = 2, 96825fdd593SJeykumar Sankaran .xtra_prefill_lines = 2, 96925fdd593SJeykumar Sankaran .dest_scale_prefill_lines = 3, 97025fdd593SJeykumar Sankaran .macrotile_prefill_lines = 4, 97125fdd593SJeykumar Sankaran .yuv_nv12_prefill_lines = 8, 97225fdd593SJeykumar Sankaran .linear_prefill_lines = 1, 97325fdd593SJeykumar Sankaran .downscaling_prefill_lines = 1, 97425fdd593SJeykumar Sankaran .amortizable_threshold = 25, 97525fdd593SJeykumar Sankaran .min_prefill_lines = 24, 97625fdd593SJeykumar Sankaran .danger_lut_tbl = {0xf, 0xffff, 0x0}, 977*5bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xf000, 0xffff}, 97825fdd593SJeykumar Sankaran .qos_lut_tbl = { 97925fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_linear), 98025fdd593SJeykumar Sankaran .entries = sdm845_qos_linear 98125fdd593SJeykumar Sankaran }, 98225fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_macrotile), 98325fdd593SJeykumar Sankaran .entries = sdm845_qos_macrotile 98425fdd593SJeykumar Sankaran }, 98525fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_nrt), 98625fdd593SJeykumar Sankaran .entries = sdm845_qos_nrt 98725fdd593SJeykumar Sankaran }, 98825fdd593SJeykumar Sankaran }, 98925fdd593SJeykumar Sankaran .cdp_cfg = { 99025fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 1}, 99125fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 0} 99225fdd593SJeykumar Sankaran }, 9934f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 9944f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 99525fdd593SJeykumar Sankaran }; 99625fdd593SJeykumar Sankaran 9977bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = { 99871dc6c08SKrishna Manikandan .max_bw_low = 6800000, 99971dc6c08SKrishna Manikandan .max_bw_high = 6800000, 10007bdc0c4bSKalyan Thota .min_core_ib = 2400000, 10017bdc0c4bSKalyan Thota .min_llcc_ib = 800000, 1002c33b7c03SKalyan Thota .min_dram_ib = 1600000, 1003c33b7c03SKalyan Thota .min_prefill_lines = 24, 10047bdc0c4bSKalyan Thota .danger_lut_tbl = {0xff, 0xffff, 0x0}, 1005*5bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 10067bdc0c4bSKalyan Thota .qos_lut_tbl = { 10077bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_linear), 10087bdc0c4bSKalyan Thota .entries = sc7180_qos_linear 10097bdc0c4bSKalyan Thota }, 10107bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 10117bdc0c4bSKalyan Thota .entries = sc7180_qos_macrotile 10127bdc0c4bSKalyan Thota }, 10137bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 10147bdc0c4bSKalyan Thota .entries = sc7180_qos_nrt 10157bdc0c4bSKalyan Thota }, 10167bdc0c4bSKalyan Thota }, 10177bdc0c4bSKalyan Thota .cdp_cfg = { 10187bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 1}, 10197bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 0} 10207bdc0c4bSKalyan Thota }, 1021c33b7c03SKalyan Thota .clk_inefficiency_factor = 105, 1022c33b7c03SKalyan Thota .bw_inefficiency_factor = 120, 10237bdc0c4bSKalyan Thota }; 10247bdc0c4bSKalyan Thota 1025386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = { 1026386fced3SJonathan Marek .max_bw_low = 12800000, 1027386fced3SJonathan Marek .max_bw_high = 12800000, 1028386fced3SJonathan Marek .min_core_ib = 2400000, 1029386fced3SJonathan Marek .min_llcc_ib = 800000, 1030386fced3SJonathan Marek .min_dram_ib = 800000, 10314f2c9838SDmitry Baryshkov .min_prefill_lines = 24, 1032386fced3SJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 1033*5bccb945SKalyan Thota .safe_lut_tbl = {0xfff8, 0xf000, 0xffff}, 1034386fced3SJonathan Marek .qos_lut_tbl = { 1035386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sm8150_qos_linear), 1036386fced3SJonathan Marek .entries = sm8150_qos_linear 1037386fced3SJonathan Marek }, 1038386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1039386fced3SJonathan Marek .entries = sc7180_qos_macrotile 1040386fced3SJonathan Marek }, 1041386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1042386fced3SJonathan Marek .entries = sc7180_qos_nrt 1043386fced3SJonathan Marek }, 1044386fced3SJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1045386fced3SJonathan Marek }, 1046386fced3SJonathan Marek .cdp_cfg = { 1047386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1048386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1049386fced3SJonathan Marek }, 10504f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 10514f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1052386fced3SJonathan Marek }; 1053386fced3SJonathan Marek 1054af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = { 1055af776a3eSJonathan Marek .max_bw_low = 13700000, 1056af776a3eSJonathan Marek .max_bw_high = 16600000, 1057af776a3eSJonathan Marek .min_core_ib = 4800000, 1058af776a3eSJonathan Marek .min_llcc_ib = 0, 1059af776a3eSJonathan Marek .min_dram_ib = 800000, 10604f2c9838SDmitry Baryshkov .min_prefill_lines = 35, 1061af776a3eSJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 1062*5bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 1063af776a3eSJonathan Marek .qos_lut_tbl = { 1064af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_linear), 1065af776a3eSJonathan Marek .entries = sc7180_qos_linear 1066af776a3eSJonathan Marek }, 1067af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1068af776a3eSJonathan Marek .entries = sc7180_qos_macrotile 1069af776a3eSJonathan Marek }, 1070af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1071af776a3eSJonathan Marek .entries = sc7180_qos_nrt 1072af776a3eSJonathan Marek }, 1073af776a3eSJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1074af776a3eSJonathan Marek }, 1075af776a3eSJonathan Marek .cdp_cfg = { 1076af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1077af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1078af776a3eSJonathan Marek }, 10794f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 10804f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1081af776a3eSJonathan Marek }; 1082af776a3eSJonathan Marek 1083591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = { 1084591e34a0SKrishna Manikandan .max_bw_low = 4700000, 1085591e34a0SKrishna Manikandan .max_bw_high = 8800000, 1086591e34a0SKrishna Manikandan .min_core_ib = 2500000, 1087591e34a0SKrishna Manikandan .min_llcc_ib = 0, 1088591e34a0SKrishna Manikandan .min_dram_ib = 1600000, 1089591e34a0SKrishna Manikandan .min_prefill_lines = 24, 1090591e34a0SKrishna Manikandan .danger_lut_tbl = {0xffff, 0xffff, 0x0}, 1091*5bccb945SKalyan Thota .safe_lut_tbl = {0xff00, 0xff00, 0xffff}, 1092591e34a0SKrishna Manikandan .qos_lut_tbl = { 1093591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1094591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1095591e34a0SKrishna Manikandan }, 1096591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1097591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1098591e34a0SKrishna Manikandan }, 1099591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1100591e34a0SKrishna Manikandan .entries = sc7180_qos_nrt 1101591e34a0SKrishna Manikandan }, 1102591e34a0SKrishna Manikandan }, 1103591e34a0SKrishna Manikandan .cdp_cfg = { 1104591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 1}, 1105591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 0} 1106591e34a0SKrishna Manikandan }, 1107591e34a0SKrishna Manikandan .clk_inefficiency_factor = 105, 1108591e34a0SKrishna Manikandan .bw_inefficiency_factor = 120, 1109591e34a0SKrishna Manikandan }; 1110591e34a0SKrishna Manikandan 111125fdd593SJeykumar Sankaran /************************************************************* 111225fdd593SJeykumar Sankaran * Hardware catalog init 111325fdd593SJeykumar Sankaran *************************************************************/ 111425fdd593SJeykumar Sankaran 111525fdd593SJeykumar Sankaran /* 111625fdd593SJeykumar Sankaran * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets 111725fdd593SJeykumar Sankaran * and instance counts. 111825fdd593SJeykumar Sankaran */ 1119fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 112025fdd593SJeykumar Sankaran { 112125fdd593SJeykumar Sankaran *dpu_cfg = (struct dpu_mdss_cfg){ 112225fdd593SJeykumar Sankaran .caps = &sdm845_dpu_caps, 112325fdd593SJeykumar Sankaran .mdp_count = ARRAY_SIZE(sdm845_mdp), 112425fdd593SJeykumar Sankaran .mdp = sdm845_mdp, 112525fdd593SJeykumar Sankaran .ctl_count = ARRAY_SIZE(sdm845_ctl), 112625fdd593SJeykumar Sankaran .ctl = sdm845_ctl, 112725fdd593SJeykumar Sankaran .sspp_count = ARRAY_SIZE(sdm845_sspp), 112825fdd593SJeykumar Sankaran .sspp = sdm845_sspp, 112925fdd593SJeykumar Sankaran .mixer_count = ARRAY_SIZE(sdm845_lm), 113025fdd593SJeykumar Sankaran .mixer = sdm845_lm, 113125fdd593SJeykumar Sankaran .pingpong_count = ARRAY_SIZE(sdm845_pp), 113225fdd593SJeykumar Sankaran .pingpong = sdm845_pp, 113325fdd593SJeykumar Sankaran .intf_count = ARRAY_SIZE(sdm845_intf), 113425fdd593SJeykumar Sankaran .intf = sdm845_intf, 113525fdd593SJeykumar Sankaran .vbif_count = ARRAY_SIZE(sdm845_vbif), 113625fdd593SJeykumar Sankaran .vbif = sdm845_vbif, 113725fdd593SJeykumar Sankaran .reg_dma_count = 1, 113825fdd593SJeykumar Sankaran .dma_cfg = sdm845_regdma, 113925fdd593SJeykumar Sankaran .perf = sdm845_perf_data, 1140597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 114125fdd593SJeykumar Sankaran }; 114225fdd593SJeykumar Sankaran } 114325fdd593SJeykumar Sankaran 11447bdc0c4bSKalyan Thota /* 11457bdc0c4bSKalyan Thota * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets 11467bdc0c4bSKalyan Thota * and instance counts. 11477bdc0c4bSKalyan Thota */ 11487bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 11497bdc0c4bSKalyan Thota { 11507bdc0c4bSKalyan Thota *dpu_cfg = (struct dpu_mdss_cfg){ 11517bdc0c4bSKalyan Thota .caps = &sc7180_dpu_caps, 11527bdc0c4bSKalyan Thota .mdp_count = ARRAY_SIZE(sc7180_mdp), 11537bdc0c4bSKalyan Thota .mdp = sc7180_mdp, 11547bdc0c4bSKalyan Thota .ctl_count = ARRAY_SIZE(sc7180_ctl), 11557bdc0c4bSKalyan Thota .ctl = sc7180_ctl, 11567bdc0c4bSKalyan Thota .sspp_count = ARRAY_SIZE(sc7180_sspp), 11577bdc0c4bSKalyan Thota .sspp = sc7180_sspp, 11587bdc0c4bSKalyan Thota .mixer_count = ARRAY_SIZE(sc7180_lm), 11597bdc0c4bSKalyan Thota .mixer = sc7180_lm, 1160e47616dfSKalyan Thota .dspp_count = ARRAY_SIZE(sc7180_dspp), 1161e47616dfSKalyan Thota .dspp = sc7180_dspp, 11627bdc0c4bSKalyan Thota .pingpong_count = ARRAY_SIZE(sc7180_pp), 11637bdc0c4bSKalyan Thota .pingpong = sc7180_pp, 11647bdc0c4bSKalyan Thota .intf_count = ARRAY_SIZE(sc7180_intf), 11657bdc0c4bSKalyan Thota .intf = sc7180_intf, 11667bdc0c4bSKalyan Thota .vbif_count = ARRAY_SIZE(sdm845_vbif), 11677bdc0c4bSKalyan Thota .vbif = sdm845_vbif, 11687bdc0c4bSKalyan Thota .reg_dma_count = 1, 11697bdc0c4bSKalyan Thota .dma_cfg = sdm845_regdma, 11707bdc0c4bSKalyan Thota .perf = sc7180_perf_data, 1171597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7180_MASK, 11727bdc0c4bSKalyan Thota }; 11737bdc0c4bSKalyan Thota } 11747bdc0c4bSKalyan Thota 1175386fced3SJonathan Marek /* 1176386fced3SJonathan Marek * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets 1177386fced3SJonathan Marek * and instance counts. 1178386fced3SJonathan Marek */ 1179386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1180386fced3SJonathan Marek { 1181386fced3SJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1182386fced3SJonathan Marek .caps = &sm8150_dpu_caps, 1183386fced3SJonathan Marek .mdp_count = ARRAY_SIZE(sdm845_mdp), 1184386fced3SJonathan Marek .mdp = sdm845_mdp, 1185386fced3SJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1186386fced3SJonathan Marek .ctl = sm8150_ctl, 1187386fced3SJonathan Marek .sspp_count = ARRAY_SIZE(sdm845_sspp), 1188386fced3SJonathan Marek .sspp = sdm845_sspp, 1189386fced3SJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1190386fced3SJonathan Marek .mixer = sm8150_lm, 119105ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 119205ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1193386fced3SJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1194386fced3SJonathan Marek .pingpong = sm8150_pp, 11954369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 11964369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1197386fced3SJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1198386fced3SJonathan Marek .intf = sm8150_intf, 1199386fced3SJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1200386fced3SJonathan Marek .vbif = sdm845_vbif, 1201386fced3SJonathan Marek .reg_dma_count = 1, 1202386fced3SJonathan Marek .dma_cfg = sm8150_regdma, 1203386fced3SJonathan Marek .perf = sm8150_perf_data, 1204597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 1205386fced3SJonathan Marek }; 1206386fced3SJonathan Marek } 1207386fced3SJonathan Marek 1208af776a3eSJonathan Marek /* 1209af776a3eSJonathan Marek * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets 1210af776a3eSJonathan Marek * and instance counts. 1211af776a3eSJonathan Marek */ 1212af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1213af776a3eSJonathan Marek { 1214af776a3eSJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1215af776a3eSJonathan Marek .caps = &sm8250_dpu_caps, 1216af776a3eSJonathan Marek .mdp_count = ARRAY_SIZE(sm8250_mdp), 1217af776a3eSJonathan Marek .mdp = sm8250_mdp, 1218af776a3eSJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1219af776a3eSJonathan Marek .ctl = sm8150_ctl, 1220d21fc5dfSDmitry Baryshkov .sspp_count = ARRAY_SIZE(sm8250_sspp), 1221d21fc5dfSDmitry Baryshkov .sspp = sm8250_sspp, 1222af776a3eSJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1223af776a3eSJonathan Marek .mixer = sm8150_lm, 122405ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 122505ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1226af776a3eSJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1227af776a3eSJonathan Marek .pingpong = sm8150_pp, 12284369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 12294369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1230af776a3eSJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1231af776a3eSJonathan Marek .intf = sm8150_intf, 1232af776a3eSJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1233af776a3eSJonathan Marek .vbif = sdm845_vbif, 1234af776a3eSJonathan Marek .reg_dma_count = 1, 1235af776a3eSJonathan Marek .dma_cfg = sm8250_regdma, 1236af776a3eSJonathan Marek .perf = sm8250_perf_data, 1237597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SM8250_MASK, 1238af776a3eSJonathan Marek }; 1239af776a3eSJonathan Marek } 1240af776a3eSJonathan Marek 1241591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1242591e34a0SKrishna Manikandan { 1243591e34a0SKrishna Manikandan *dpu_cfg = (struct dpu_mdss_cfg){ 1244591e34a0SKrishna Manikandan .caps = &sc7280_dpu_caps, 1245591e34a0SKrishna Manikandan .mdp_count = ARRAY_SIZE(sc7280_mdp), 1246591e34a0SKrishna Manikandan .mdp = sc7280_mdp, 1247591e34a0SKrishna Manikandan .ctl_count = ARRAY_SIZE(sc7280_ctl), 1248591e34a0SKrishna Manikandan .ctl = sc7280_ctl, 1249591e34a0SKrishna Manikandan .sspp_count = ARRAY_SIZE(sc7280_sspp), 1250591e34a0SKrishna Manikandan .sspp = sc7280_sspp, 1251591e34a0SKrishna Manikandan .mixer_count = ARRAY_SIZE(sc7280_lm), 1252591e34a0SKrishna Manikandan .mixer = sc7280_lm, 1253591e34a0SKrishna Manikandan .pingpong_count = ARRAY_SIZE(sc7280_pp), 1254591e34a0SKrishna Manikandan .pingpong = sc7280_pp, 1255591e34a0SKrishna Manikandan .intf_count = ARRAY_SIZE(sc7280_intf), 1256591e34a0SKrishna Manikandan .intf = sc7280_intf, 1257591e34a0SKrishna Manikandan .vbif_count = ARRAY_SIZE(sdm845_vbif), 1258591e34a0SKrishna Manikandan .vbif = sdm845_vbif, 1259591e34a0SKrishna Manikandan .perf = sc7280_perf_data, 1260597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7280_MASK, 1261591e34a0SKrishna Manikandan }; 1262591e34a0SKrishna Manikandan } 1263591e34a0SKrishna Manikandan 1264abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = { 126525fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init}, 126625fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init}, 1267386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init}, 1268386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init}, 1269af776a3eSJonathan Marek { .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init}, 12707bdc0c4bSKalyan Thota { .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init}, 1271591e34a0SKrishna Manikandan { .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init}, 127225fdd593SJeykumar Sankaran }; 127325fdd593SJeykumar Sankaran 127425fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg) 127525fdd593SJeykumar Sankaran { 127625fdd593SJeykumar Sankaran kfree(dpu_cfg); 127725fdd593SJeykumar Sankaran } 127825fdd593SJeykumar Sankaran 127925fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev) 128025fdd593SJeykumar Sankaran { 128125fdd593SJeykumar Sankaran int i; 128225fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_cfg; 128325fdd593SJeykumar Sankaran 128425fdd593SJeykumar Sankaran dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL); 128525fdd593SJeykumar Sankaran if (!dpu_cfg) 128625fdd593SJeykumar Sankaran return ERR_PTR(-ENOMEM); 128725fdd593SJeykumar Sankaran 128825fdd593SJeykumar Sankaran for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) { 128925fdd593SJeykumar Sankaran if (cfg_handler[i].hw_rev == hw_rev) { 129025fdd593SJeykumar Sankaran cfg_handler[i].cfg_init(dpu_cfg); 129125fdd593SJeykumar Sankaran dpu_cfg->hwversion = hw_rev; 129225fdd593SJeykumar Sankaran return dpu_cfg; 129325fdd593SJeykumar Sankaran } 129425fdd593SJeykumar Sankaran } 129525fdd593SJeykumar Sankaran 129625fdd593SJeykumar Sankaran DPU_ERROR("unsupported chipset id:%X\n", hw_rev); 129725fdd593SJeykumar Sankaran dpu_hw_catalog_deinit(dpu_cfg); 129825fdd593SJeykumar Sankaran return ERR_PTR(-ENODEV); 129925fdd593SJeykumar Sankaran } 130025fdd593SJeykumar Sankaran 1301