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 1994391a14SAngeloGioacchino Del Regno #define VIG_MSM8998_MASK \ 2094391a14SAngeloGioacchino Del Regno (VIG_MASK | BIT(DPU_SSPP_SCALER_QSEED3)) 2194391a14SAngeloGioacchino Del Regno 227bdc0c4bSKalyan Thota #define VIG_SDM845_MASK \ 23b8dab65bSAngeloGioacchino Del Regno (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3)) 247bdc0c4bSKalyan Thota 257bdc0c4bSKalyan Thota #define VIG_SC7180_MASK \ 26b8dab65bSAngeloGioacchino Del Regno (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED4)) 277bdc0c4bSKalyan Thota 28d21fc5dfSDmitry Baryshkov #define VIG_SM8250_MASK \ 29095eed89SDmitry Baryshkov (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL) | BIT(DPU_SSPP_SCALER_QSEED3LITE)) 30d21fc5dfSDmitry Baryshkov 3194391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \ 3294391a14SAngeloGioacchino Del Regno (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\ 3394391a14SAngeloGioacchino Del Regno BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\ 3494391a14SAngeloGioacchino Del Regno BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT)) 3594391a14SAngeloGioacchino Del Regno 3625fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \ 3725fdd593SJeykumar Sankaran (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\ 3825fdd593SJeykumar Sankaran BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\ 3925fdd593SJeykumar Sankaran BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT)) 4025fdd593SJeykumar Sankaran 4107ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \ 4207ca1fc0SSravanthi Kollukuduru (DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR)) 4307ca1fc0SSravanthi Kollukuduru 4494391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \ 4594391a14SAngeloGioacchino Del Regno (DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR)) 4694391a14SAngeloGioacchino Del Regno 4725fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \ 4825fdd593SJeykumar Sankaran (BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER)) 4925fdd593SJeykumar Sankaran 507bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \ 517bdc0c4bSKalyan Thota (BIT(DPU_DIM_LAYER)) 527bdc0c4bSKalyan Thota 5325fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER) 5425fdd593SJeykumar Sankaran 5525fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \ 5625fdd593SJeykumar Sankaran (PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2)) 5725fdd593SJeykumar Sankaran 58591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \ 5944bf8704SKalyan Thota (BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG)) 60591e34a0SKrishna Manikandan 614369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0) 624369c93cSDmitry Baryshkov 6394391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC) 6494391a14SAngeloGioacchino Del Regno 654259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC) 66e47616dfSKalyan Thota 67cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0) 68cace3ac4SJonathan Marek 69cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE) 70cace3ac4SJonathan Marek 71591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN) 72591e34a0SKrishna Manikandan 73597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 74597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 75597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 76597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 77597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 78597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 79597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 80597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR) | \ 81597762d5SDmitry Baryshkov BIT(MDP_AD4_0_INTR) | \ 82597762d5SDmitry Baryshkov BIT(MDP_AD4_1_INTR)) 83597762d5SDmitry Baryshkov 84597762d5SDmitry Baryshkov #define IRQ_SC7180_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 90597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 91597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 92597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 93597762d5SDmitry Baryshkov BIT(MDP_INTF0_7xxx_INTR) | \ 94597762d5SDmitry Baryshkov BIT(MDP_INTF1_7xxx_INTR) | \ 95597762d5SDmitry Baryshkov BIT(MDP_INTF5_7xxx_INTR)) 96597762d5SDmitry Baryshkov 97597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 98597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 99597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 100597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 101597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 102597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 103597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 104597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR)) 105597762d5SDmitry Baryshkov 106597762d5SDmitry Baryshkov 10725fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE (50 * 1024) 10825fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH 2048 10925fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH 2560 11025fdd593SJeykumar Sankaran 11125fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION 4 11225fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION 4 11325fdd593SJeykumar Sankaran 11425fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO 20 11525fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO 4 11625fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE 1 11725fdd593SJeykumar Sankaran 11825fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y) 11925fdd593SJeykumar Sankaran 12009c7e370SLee Jones static const uint32_t plane_formats[] = { 12109c7e370SLee Jones DRM_FORMAT_ARGB8888, 12209c7e370SLee Jones DRM_FORMAT_ABGR8888, 12309c7e370SLee Jones DRM_FORMAT_RGBA8888, 12409c7e370SLee Jones DRM_FORMAT_BGRA8888, 12509c7e370SLee Jones DRM_FORMAT_XRGB8888, 12609c7e370SLee Jones DRM_FORMAT_RGBX8888, 12709c7e370SLee Jones DRM_FORMAT_BGRX8888, 12809c7e370SLee Jones DRM_FORMAT_XBGR8888, 12909c7e370SLee Jones DRM_FORMAT_RGB888, 13009c7e370SLee Jones DRM_FORMAT_BGR888, 13109c7e370SLee Jones DRM_FORMAT_RGB565, 13209c7e370SLee Jones DRM_FORMAT_BGR565, 13309c7e370SLee Jones DRM_FORMAT_ARGB1555, 13409c7e370SLee Jones DRM_FORMAT_ABGR1555, 13509c7e370SLee Jones DRM_FORMAT_RGBA5551, 13609c7e370SLee Jones DRM_FORMAT_BGRA5551, 13709c7e370SLee Jones DRM_FORMAT_XRGB1555, 13809c7e370SLee Jones DRM_FORMAT_XBGR1555, 13909c7e370SLee Jones DRM_FORMAT_RGBX5551, 14009c7e370SLee Jones DRM_FORMAT_BGRX5551, 14109c7e370SLee Jones DRM_FORMAT_ARGB4444, 14209c7e370SLee Jones DRM_FORMAT_ABGR4444, 14309c7e370SLee Jones DRM_FORMAT_RGBA4444, 14409c7e370SLee Jones DRM_FORMAT_BGRA4444, 14509c7e370SLee Jones DRM_FORMAT_XRGB4444, 14609c7e370SLee Jones DRM_FORMAT_XBGR4444, 14709c7e370SLee Jones DRM_FORMAT_RGBX4444, 14809c7e370SLee Jones DRM_FORMAT_BGRX4444, 14909c7e370SLee Jones }; 15009c7e370SLee Jones 15109c7e370SLee Jones static const uint32_t plane_formats_yuv[] = { 15209c7e370SLee Jones DRM_FORMAT_ARGB8888, 15309c7e370SLee Jones DRM_FORMAT_ABGR8888, 15409c7e370SLee Jones DRM_FORMAT_RGBA8888, 15509c7e370SLee Jones DRM_FORMAT_BGRX8888, 15609c7e370SLee Jones DRM_FORMAT_BGRA8888, 15709c7e370SLee Jones DRM_FORMAT_XRGB8888, 15809c7e370SLee Jones DRM_FORMAT_XBGR8888, 15909c7e370SLee Jones DRM_FORMAT_RGBX8888, 16009c7e370SLee Jones DRM_FORMAT_RGB888, 16109c7e370SLee Jones DRM_FORMAT_BGR888, 16209c7e370SLee Jones DRM_FORMAT_RGB565, 16309c7e370SLee Jones DRM_FORMAT_BGR565, 16409c7e370SLee Jones DRM_FORMAT_ARGB1555, 16509c7e370SLee Jones DRM_FORMAT_ABGR1555, 16609c7e370SLee Jones DRM_FORMAT_RGBA5551, 16709c7e370SLee Jones DRM_FORMAT_BGRA5551, 16809c7e370SLee Jones DRM_FORMAT_XRGB1555, 16909c7e370SLee Jones DRM_FORMAT_XBGR1555, 17009c7e370SLee Jones DRM_FORMAT_RGBX5551, 17109c7e370SLee Jones DRM_FORMAT_BGRX5551, 17209c7e370SLee Jones DRM_FORMAT_ARGB4444, 17309c7e370SLee Jones DRM_FORMAT_ABGR4444, 17409c7e370SLee Jones DRM_FORMAT_RGBA4444, 17509c7e370SLee Jones DRM_FORMAT_BGRA4444, 17609c7e370SLee Jones DRM_FORMAT_XRGB4444, 17709c7e370SLee Jones DRM_FORMAT_XBGR4444, 17809c7e370SLee Jones DRM_FORMAT_RGBX4444, 17909c7e370SLee Jones DRM_FORMAT_BGRX4444, 18009c7e370SLee Jones 18109c7e370SLee Jones DRM_FORMAT_NV12, 18209c7e370SLee Jones DRM_FORMAT_NV21, 18309c7e370SLee Jones DRM_FORMAT_NV16, 18409c7e370SLee Jones DRM_FORMAT_NV61, 18509c7e370SLee Jones DRM_FORMAT_VYUY, 18609c7e370SLee Jones DRM_FORMAT_UYVY, 18709c7e370SLee Jones DRM_FORMAT_YUYV, 18809c7e370SLee Jones DRM_FORMAT_YVYU, 18909c7e370SLee Jones DRM_FORMAT_YUV420, 19009c7e370SLee Jones DRM_FORMAT_YVU420, 19109c7e370SLee Jones }; 19209c7e370SLee Jones 19325fdd593SJeykumar Sankaran /************************************************************* 19425fdd593SJeykumar Sankaran * DPU sub blocks config 19525fdd593SJeykumar Sankaran *************************************************************/ 19625fdd593SJeykumar Sankaran /* DPU top level caps */ 19794391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = { 19894391a14SAngeloGioacchino Del Regno .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 19994391a14SAngeloGioacchino Del Regno .max_mixer_blendstages = 0x7, 20094391a14SAngeloGioacchino Del Regno .qseed_type = DPU_SSPP_SCALER_QSEED3, 20194391a14SAngeloGioacchino Del Regno .smart_dma_rev = DPU_SSPP_SMART_DMA_V1, 20294391a14SAngeloGioacchino Del Regno .ubwc_version = DPU_HW_UBWC_VER_10, 20394391a14SAngeloGioacchino Del Regno .has_src_split = true, 20494391a14SAngeloGioacchino Del Regno .has_dim_layer = true, 20594391a14SAngeloGioacchino Del Regno .has_idle_pc = true, 20694391a14SAngeloGioacchino Del Regno .has_3d_merge = true, 20794391a14SAngeloGioacchino Del Regno .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 20894391a14SAngeloGioacchino Del Regno .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 20994391a14SAngeloGioacchino Del Regno .max_hdeci_exp = MAX_HORZ_DECIMATION, 21094391a14SAngeloGioacchino Del Regno .max_vdeci_exp = MAX_VERT_DECIMATION, 21194391a14SAngeloGioacchino Del Regno }; 21294391a14SAngeloGioacchino Del Regno 21325fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = { 21425fdd593SJeykumar Sankaran .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 21525fdd593SJeykumar Sankaran .max_mixer_blendstages = 0xb, 21625fdd593SJeykumar Sankaran .qseed_type = DPU_SSPP_SCALER_QSEED3, 21725fdd593SJeykumar Sankaran .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 21825fdd593SJeykumar Sankaran .ubwc_version = DPU_HW_UBWC_VER_20, 21925fdd593SJeykumar Sankaran .has_src_split = true, 22025fdd593SJeykumar Sankaran .has_dim_layer = true, 22125fdd593SJeykumar Sankaran .has_idle_pc = true, 22242a558b7SKalyan Thota .has_3d_merge = true, 2237e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2247e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 2257e9d4cddSJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 2267e9d4cddSJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 22725fdd593SJeykumar Sankaran }; 22825fdd593SJeykumar Sankaran 2297bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = { 2307bdc0c4bSKalyan Thota .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2317bdc0c4bSKalyan Thota .max_mixer_blendstages = 0x9, 2327bdc0c4bSKalyan Thota .qseed_type = DPU_SSPP_SCALER_QSEED4, 2337bdc0c4bSKalyan Thota .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 2347bdc0c4bSKalyan Thota .ubwc_version = DPU_HW_UBWC_VER_20, 2357bdc0c4bSKalyan Thota .has_dim_layer = true, 2367bdc0c4bSKalyan Thota .has_idle_pc = true, 2377e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2387e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 2397bdc0c4bSKalyan Thota }; 2407bdc0c4bSKalyan Thota 241386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = { 242386fced3SJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 243386fced3SJonathan Marek .max_mixer_blendstages = 0xb, 244386fced3SJonathan Marek .qseed_type = DPU_SSPP_SCALER_QSEED3, 245386fced3SJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 246386fced3SJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_30, 247386fced3SJonathan Marek .has_src_split = true, 248386fced3SJonathan Marek .has_dim_layer = true, 249386fced3SJonathan Marek .has_idle_pc = true, 250386fced3SJonathan Marek .has_3d_merge = true, 251386fced3SJonathan Marek .max_linewidth = 4096, 252386fced3SJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 253386fced3SJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 254386fced3SJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 255386fced3SJonathan Marek }; 256386fced3SJonathan Marek 257af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = { 258af776a3eSJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 259af776a3eSJonathan Marek .max_mixer_blendstages = 0xb, 260d21fc5dfSDmitry Baryshkov .qseed_type = DPU_SSPP_SCALER_QSEED3LITE, 261af776a3eSJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 262af776a3eSJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_40, 263af776a3eSJonathan Marek .has_src_split = true, 264af776a3eSJonathan Marek .has_dim_layer = true, 265af776a3eSJonathan Marek .has_idle_pc = true, 266af776a3eSJonathan Marek .has_3d_merge = true, 267af776a3eSJonathan Marek .max_linewidth = 4096, 268af776a3eSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 269af776a3eSJonathan Marek }; 270af776a3eSJonathan Marek 271591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = { 272591e34a0SKrishna Manikandan .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 273591e34a0SKrishna Manikandan .max_mixer_blendstages = 0x7, 274591e34a0SKrishna Manikandan .qseed_type = DPU_SSPP_SCALER_QSEED4, 275591e34a0SKrishna Manikandan .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 276591e34a0SKrishna Manikandan .ubwc_version = DPU_HW_UBWC_VER_30, 277591e34a0SKrishna Manikandan .has_dim_layer = true, 278591e34a0SKrishna Manikandan .has_idle_pc = true, 279591e34a0SKrishna Manikandan .max_linewidth = 2400, 280591e34a0SKrishna Manikandan .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 281591e34a0SKrishna Manikandan }; 282591e34a0SKrishna Manikandan 28394391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = { 28494391a14SAngeloGioacchino Del Regno { 28594391a14SAngeloGioacchino Del Regno .name = "top_0", .id = MDP_TOP, 28694391a14SAngeloGioacchino Del Regno .base = 0x0, .len = 0x458, 28794391a14SAngeloGioacchino Del Regno .features = 0, 28894391a14SAngeloGioacchino Del Regno .highest_bank_bit = 0x2, 28994391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 29094391a14SAngeloGioacchino Del Regno .reg_off = 0x2AC, .bit_off = 0}, 29194391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 29294391a14SAngeloGioacchino Del Regno .reg_off = 0x2B4, .bit_off = 0}, 29394391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 29494391a14SAngeloGioacchino Del Regno .reg_off = 0x2BC, .bit_off = 0}, 29594391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 29694391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 0}, 29794391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 29894391a14SAngeloGioacchino Del Regno .reg_off = 0x2AC, .bit_off = 8}, 29994391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 30094391a14SAngeloGioacchino Del Regno .reg_off = 0x2B4, .bit_off = 8}, 30194391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA2] = { 30294391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 8}, 30394391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA3] = { 30494391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 12}, 30594391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 30694391a14SAngeloGioacchino Del Regno .reg_off = 0x3A8, .bit_off = 15}, 30794391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 30894391a14SAngeloGioacchino Del Regno .reg_off = 0x3B0, .bit_off = 15}, 30994391a14SAngeloGioacchino Del Regno }, 31094391a14SAngeloGioacchino Del Regno }; 31194391a14SAngeloGioacchino Del Regno 312abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = { 31325fdd593SJeykumar Sankaran { 31425fdd593SJeykumar Sankaran .name = "top_0", .id = MDP_TOP, 31525fdd593SJeykumar Sankaran .base = 0x0, .len = 0x45C, 316*03490e11SKuogee Hsieh .features = BIT(DPU_MDP_AUDIO_SELECT), 31725fdd593SJeykumar Sankaran .highest_bank_bit = 0x2, 31825fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 31925fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 0}, 32025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 32125fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 0}, 32225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 32325fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 0}, 32425fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 32525fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 0}, 32625fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 32725fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 8}, 32825fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 32925fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 8}, 33025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 33125fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 8}, 33225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 33325fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 8}, 33425fdd593SJeykumar Sankaran }, 33525fdd593SJeykumar Sankaran }; 33625fdd593SJeykumar Sankaran 3377bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = { 3387bdc0c4bSKalyan Thota { 3397bdc0c4bSKalyan Thota .name = "top_0", .id = MDP_TOP, 3407bdc0c4bSKalyan Thota .base = 0x0, .len = 0x494, 3417bdc0c4bSKalyan Thota .features = 0, 3427bdc0c4bSKalyan Thota .highest_bank_bit = 0x3, 3437bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 3447bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 0}, 3457bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 3467bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 8}, 3477bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 3487b149f2bSKalyan Thota .reg_off = 0x2B4, .bit_off = 8}, 3497b149f2bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 3507b149f2bSKalyan Thota .reg_off = 0x2C4, .bit_off = 8}, 3517bdc0c4bSKalyan Thota }, 3527bdc0c4bSKalyan Thota }; 3537bdc0c4bSKalyan Thota 354af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = { 355af776a3eSJonathan Marek { 356af776a3eSJonathan Marek .name = "top_0", .id = MDP_TOP, 357b910a020SRobert Foss .base = 0x0, .len = 0x494, 358af776a3eSJonathan Marek .features = 0, 359af776a3eSJonathan Marek .highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */ 360af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 361af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 0}, 362af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 363af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 0}, 364af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 365af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 0}, 366af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 367af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 0}, 368af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 369af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 8}, 370af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 371af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 8}, 372af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 373af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 8}, 374af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 375af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 8}, 376af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_REG_DMA] = { 377af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 20}, 378af776a3eSJonathan Marek }, 379af776a3eSJonathan Marek }; 380af776a3eSJonathan Marek 381591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = { 382591e34a0SKrishna Manikandan { 383591e34a0SKrishna Manikandan .name = "top_0", .id = MDP_TOP, 384591e34a0SKrishna Manikandan .base = 0x0, .len = 0x2014, 385591e34a0SKrishna Manikandan .highest_bank_bit = 0x1, 386591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 387591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 0}, 388591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 389591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 8}, 390591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 391591e34a0SKrishna Manikandan .reg_off = 0x2B4, .bit_off = 8}, 392591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 393591e34a0SKrishna Manikandan .reg_off = 0x2C4, .bit_off = 8}, 394591e34a0SKrishna Manikandan }, 395591e34a0SKrishna Manikandan }; 396591e34a0SKrishna Manikandan 39725fdd593SJeykumar Sankaran /************************************************************* 39825fdd593SJeykumar Sankaran * CTL sub blocks config 39925fdd593SJeykumar Sankaran *************************************************************/ 40094391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = { 40194391a14SAngeloGioacchino Del Regno { 40294391a14SAngeloGioacchino Del Regno .name = "ctl_0", .id = CTL_0, 40394391a14SAngeloGioacchino Del Regno .base = 0x1000, .len = 0x94, 40494391a14SAngeloGioacchino Del Regno .features = BIT(DPU_CTL_SPLIT_DISPLAY), 40594391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 40694391a14SAngeloGioacchino Del Regno }, 40794391a14SAngeloGioacchino Del Regno { 40894391a14SAngeloGioacchino Del Regno .name = "ctl_1", .id = CTL_1, 40994391a14SAngeloGioacchino Del Regno .base = 0x1200, .len = 0x94, 41094391a14SAngeloGioacchino Del Regno .features = 0, 41194391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 41294391a14SAngeloGioacchino Del Regno }, 41394391a14SAngeloGioacchino Del Regno { 41494391a14SAngeloGioacchino Del Regno .name = "ctl_2", .id = CTL_2, 41594391a14SAngeloGioacchino Del Regno .base = 0x1400, .len = 0x94, 41694391a14SAngeloGioacchino Del Regno .features = BIT(DPU_CTL_SPLIT_DISPLAY), 41794391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 41894391a14SAngeloGioacchino Del Regno }, 41994391a14SAngeloGioacchino Del Regno { 42094391a14SAngeloGioacchino Del Regno .name = "ctl_3", .id = CTL_3, 42194391a14SAngeloGioacchino Del Regno .base = 0x1600, .len = 0x94, 42294391a14SAngeloGioacchino Del Regno .features = 0, 42394391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 42494391a14SAngeloGioacchino Del Regno }, 42594391a14SAngeloGioacchino Del Regno { 42694391a14SAngeloGioacchino Del Regno .name = "ctl_4", .id = CTL_4, 42794391a14SAngeloGioacchino Del Regno .base = 0x1800, .len = 0x94, 42894391a14SAngeloGioacchino Del Regno .features = 0, 42994391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 43094391a14SAngeloGioacchino Del Regno }, 43194391a14SAngeloGioacchino Del Regno }; 43294391a14SAngeloGioacchino Del Regno 433abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = { 43425fdd593SJeykumar Sankaran { 43525fdd593SJeykumar Sankaran .name = "ctl_0", .id = CTL_0, 43625fdd593SJeykumar Sankaran .base = 0x1000, .len = 0xE4, 437667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 438667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 43925fdd593SJeykumar Sankaran }, 44025fdd593SJeykumar Sankaran { 44125fdd593SJeykumar Sankaran .name = "ctl_1", .id = CTL_1, 44225fdd593SJeykumar Sankaran .base = 0x1200, .len = 0xE4, 443667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 444667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 44525fdd593SJeykumar Sankaran }, 44625fdd593SJeykumar Sankaran { 44725fdd593SJeykumar Sankaran .name = "ctl_2", .id = CTL_2, 44825fdd593SJeykumar Sankaran .base = 0x1400, .len = 0xE4, 449667e9985SDmitry Baryshkov .features = 0, 450667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 45125fdd593SJeykumar Sankaran }, 45225fdd593SJeykumar Sankaran { 45325fdd593SJeykumar Sankaran .name = "ctl_3", .id = CTL_3, 45425fdd593SJeykumar Sankaran .base = 0x1600, .len = 0xE4, 455667e9985SDmitry Baryshkov .features = 0, 456667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 45725fdd593SJeykumar Sankaran }, 45825fdd593SJeykumar Sankaran { 45925fdd593SJeykumar Sankaran .name = "ctl_4", .id = CTL_4, 46025fdd593SJeykumar Sankaran .base = 0x1800, .len = 0xE4, 461667e9985SDmitry Baryshkov .features = 0, 462667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 46325fdd593SJeykumar Sankaran }, 46425fdd593SJeykumar Sankaran }; 46525fdd593SJeykumar Sankaran 4667bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = { 4677bdc0c4bSKalyan Thota { 4687bdc0c4bSKalyan Thota .name = "ctl_0", .id = CTL_0, 4697bdc0c4bSKalyan Thota .base = 0x1000, .len = 0xE4, 470667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 471667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 4727bdc0c4bSKalyan Thota }, 4737bdc0c4bSKalyan Thota { 4747bdc0c4bSKalyan Thota .name = "ctl_1", .id = CTL_1, 4757bdc0c4bSKalyan Thota .base = 0x1200, .len = 0xE4, 476667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 477667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 4787bdc0c4bSKalyan Thota }, 4797bdc0c4bSKalyan Thota { 4807bdc0c4bSKalyan Thota .name = "ctl_2", .id = CTL_2, 4817bdc0c4bSKalyan Thota .base = 0x1400, .len = 0xE4, 482667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 483667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 4847bdc0c4bSKalyan Thota }, 4857bdc0c4bSKalyan Thota }; 4867bdc0c4bSKalyan Thota 487386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = { 488386fced3SJonathan Marek { 489386fced3SJonathan Marek .name = "ctl_0", .id = CTL_0, 490386fced3SJonathan Marek .base = 0x1000, .len = 0x1e0, 491667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 492667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 493386fced3SJonathan Marek }, 494386fced3SJonathan Marek { 495386fced3SJonathan Marek .name = "ctl_1", .id = CTL_1, 496386fced3SJonathan Marek .base = 0x1200, .len = 0x1e0, 497667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 498667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 499386fced3SJonathan Marek }, 500386fced3SJonathan Marek { 501386fced3SJonathan Marek .name = "ctl_2", .id = CTL_2, 502386fced3SJonathan Marek .base = 0x1400, .len = 0x1e0, 503667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 504667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 505386fced3SJonathan Marek }, 506386fced3SJonathan Marek { 507386fced3SJonathan Marek .name = "ctl_3", .id = CTL_3, 508386fced3SJonathan Marek .base = 0x1600, .len = 0x1e0, 509667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 510667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 511386fced3SJonathan Marek }, 512386fced3SJonathan Marek { 513386fced3SJonathan Marek .name = "ctl_4", .id = CTL_4, 514386fced3SJonathan Marek .base = 0x1800, .len = 0x1e0, 515667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 516667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 517386fced3SJonathan Marek }, 518386fced3SJonathan Marek { 519386fced3SJonathan Marek .name = "ctl_5", .id = CTL_5, 520386fced3SJonathan Marek .base = 0x1a00, .len = 0x1e0, 521667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 522667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23), 523386fced3SJonathan Marek }, 524386fced3SJonathan Marek }; 525386fced3SJonathan Marek 526591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = { 527591e34a0SKrishna Manikandan { 528591e34a0SKrishna Manikandan .name = "ctl_0", .id = CTL_0, 529591e34a0SKrishna Manikandan .base = 0x15000, .len = 0x1E8, 530667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 531667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 532591e34a0SKrishna Manikandan }, 533591e34a0SKrishna Manikandan { 534591e34a0SKrishna Manikandan .name = "ctl_1", .id = CTL_1, 535591e34a0SKrishna Manikandan .base = 0x16000, .len = 0x1E8, 536667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 537667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 538591e34a0SKrishna Manikandan }, 539591e34a0SKrishna Manikandan { 540591e34a0SKrishna Manikandan .name = "ctl_2", .id = CTL_2, 541591e34a0SKrishna Manikandan .base = 0x17000, .len = 0x1E8, 542667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 543667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 544591e34a0SKrishna Manikandan }, 545591e34a0SKrishna Manikandan { 546591e34a0SKrishna Manikandan .name = "ctl_3", .id = CTL_3, 547591e34a0SKrishna Manikandan .base = 0x18000, .len = 0x1E8, 548667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 549667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 550591e34a0SKrishna Manikandan }, 551591e34a0SKrishna Manikandan }; 552591e34a0SKrishna Manikandan 55325fdd593SJeykumar Sankaran /************************************************************* 55425fdd593SJeykumar Sankaran * SSPP sub blocks config 55525fdd593SJeykumar Sankaran *************************************************************/ 55625fdd593SJeykumar Sankaran 55725fdd593SJeykumar Sankaran /* SSPP common configuration */ 55825fdd593SJeykumar Sankaran 559b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \ 56025fdd593SJeykumar Sankaran { \ 56125fdd593SJeykumar Sankaran .maxdwnscale = MAX_DOWNSCALE_RATIO, \ 56225fdd593SJeykumar Sankaran .maxupscale = MAX_UPSCALE_RATIO, \ 56325fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 56425fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 56525fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 56625fdd593SJeykumar Sankaran .scaler_blk = {.name = STRCAT("sspp_scaler", num), \ 567b75ab05aSShubhashree Dhar .id = qseed_ver, \ 56825fdd593SJeykumar Sankaran .base = 0xa00, .len = 0xa0,}, \ 56925fdd593SJeykumar Sankaran .csc_blk = {.name = STRCAT("sspp_csc", num), \ 57025fdd593SJeykumar Sankaran .id = DPU_SSPP_CSC_10BIT, \ 57125fdd593SJeykumar Sankaran .base = 0x1a00, .len = 0x100,}, \ 57225fdd593SJeykumar Sankaran .format_list = plane_formats_yuv, \ 573e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats_yuv), \ 57425fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 575e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 57625fdd593SJeykumar Sankaran } 57725fdd593SJeykumar Sankaran 57825fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \ 57925fdd593SJeykumar Sankaran { \ 58025fdd593SJeykumar Sankaran .maxdwnscale = SSPP_UNITY_SCALE, \ 58125fdd593SJeykumar Sankaran .maxupscale = SSPP_UNITY_SCALE, \ 58225fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 58325fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 58425fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 58525fdd593SJeykumar Sankaran .format_list = plane_formats, \ 586e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats), \ 58725fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 588e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 58925fdd593SJeykumar Sankaran } 59025fdd593SJeykumar Sankaran 59194391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 = 59294391a14SAngeloGioacchino Del Regno _VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3); 59394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 = 59494391a14SAngeloGioacchino Del Regno _VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3); 59594391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 = 59694391a14SAngeloGioacchino Del Regno _VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3); 59794391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 = 59894391a14SAngeloGioacchino Del Regno _VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3); 59994391a14SAngeloGioacchino Del Regno 600b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 = 601b75ab05aSShubhashree Dhar _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3); 602b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 = 603b75ab05aSShubhashree Dhar _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3); 604b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 = 605b75ab05aSShubhashree Dhar _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3); 606b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 = 607b75ab05aSShubhashree Dhar _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3); 60825fdd593SJeykumar Sankaran 60925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1); 61025fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2); 61125fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3); 61225fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4); 61325fdd593SJeykumar Sankaran 61407ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \ 61507ca1fc0SSravanthi Kollukuduru _sblk, _xinid, _type, _clkctrl) \ 61625fdd593SJeykumar Sankaran { \ 61725fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 61825fdd593SJeykumar Sankaran .base = _base, .len = 0x1c8, \ 61907ca1fc0SSravanthi Kollukuduru .features = _features, \ 62025fdd593SJeykumar Sankaran .sblk = &_sblk, \ 62125fdd593SJeykumar Sankaran .xin_id = _xinid, \ 62207ca1fc0SSravanthi Kollukuduru .type = _type, \ 62325fdd593SJeykumar Sankaran .clk_ctrl = _clkctrl \ 62425fdd593SJeykumar Sankaran } 62525fdd593SJeykumar Sankaran 62694391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = { 62794391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK, 62894391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 62994391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK, 63094391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 63194391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK, 63294391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 63394391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK, 63494391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 63594391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_MSM8998_MASK, 63694391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 63794391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_MSM8998_MASK, 63894391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 63994391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_MSM8998_MASK, 64094391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 64194391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_MSM8998_MASK, 64294391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 64394391a14SAngeloGioacchino Del Regno }; 64494391a14SAngeloGioacchino Del Regno 645abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = { 64607ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK, 64707ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 64807ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK, 64907ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 65007ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK, 65107ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 65207ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK, 65307ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 65407ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 65507ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 65607ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 65707ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 65807ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 65907ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 66007ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 66107ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 66225fdd593SJeykumar Sankaran }; 66325fdd593SJeykumar Sankaran 664b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 = 665b75ab05aSShubhashree Dhar _VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4); 666b75ab05aSShubhashree Dhar 6677bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = { 6687bdc0c4bSKalyan Thota SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 669b75ab05aSShubhashree Dhar sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 6707bdc0c4bSKalyan Thota SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 6717bdc0c4bSKalyan Thota sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 6727b149f2bSKalyan Thota SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 6737b149f2bSKalyan Thota sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 6747bdc0c4bSKalyan Thota SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 6757b149f2bSKalyan Thota sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 6767bdc0c4bSKalyan Thota }; 6777bdc0c4bSKalyan Thota 678d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 = 679d21fc5dfSDmitry Baryshkov _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE); 680d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 = 681d21fc5dfSDmitry Baryshkov _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE); 682d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 = 683d21fc5dfSDmitry Baryshkov _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE); 684d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 = 685d21fc5dfSDmitry Baryshkov _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE); 686d21fc5dfSDmitry Baryshkov 687d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = { 688d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK, 689d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 690d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK, 691d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 692d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK, 693d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 694d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK, 695d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 696d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 697d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 698d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 699d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 700d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 701d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 702d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 703d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 704d21fc5dfSDmitry Baryshkov }; 705d21fc5dfSDmitry Baryshkov 706591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = { 707591e34a0SKrishna Manikandan SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 708591e34a0SKrishna Manikandan sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 709591e34a0SKrishna Manikandan SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 710591e34a0SKrishna Manikandan sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 711591e34a0SKrishna Manikandan SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 712591e34a0SKrishna Manikandan sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 713591e34a0SKrishna Manikandan SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 714591e34a0SKrishna Manikandan sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 715591e34a0SKrishna Manikandan }; 716591e34a0SKrishna Manikandan 71725fdd593SJeykumar Sankaran /************************************************************* 71825fdd593SJeykumar Sankaran * MIXER sub blocks config 71925fdd593SJeykumar Sankaran *************************************************************/ 7207bdc0c4bSKalyan Thota 721e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \ 72225fdd593SJeykumar Sankaran { \ 72325fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 72425fdd593SJeykumar Sankaran .base = _base, .len = 0x320, \ 7257bdc0c4bSKalyan Thota .features = _fmask, \ 7267bdc0c4bSKalyan Thota .sblk = _sblk, \ 72725fdd593SJeykumar Sankaran .pingpong = _pp, \ 728e47616dfSKalyan Thota .lm_pair_mask = (1 << _lmpair), \ 729e47616dfSKalyan Thota .dspp = _dspp \ 73025fdd593SJeykumar Sankaran } 73125fdd593SJeykumar Sankaran 73294391a14SAngeloGioacchino Del Regno /* MSM8998 */ 73394391a14SAngeloGioacchino Del Regno 73494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = { 73594391a14SAngeloGioacchino Del Regno .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 73694391a14SAngeloGioacchino Del Regno .maxblendstages = 7, /* excluding base layer */ 73794391a14SAngeloGioacchino Del Regno .blendstage_base = { /* offsets relative to mixer base */ 73894391a14SAngeloGioacchino Del Regno 0x20, 0x50, 0x80, 0xb0, 0x230, 73994391a14SAngeloGioacchino Del Regno 0x260, 0x290 74094391a14SAngeloGioacchino Del Regno }, 74194391a14SAngeloGioacchino Del Regno }; 74294391a14SAngeloGioacchino Del Regno 74394391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = { 74494391a14SAngeloGioacchino Del Regno LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 74594391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0), 74694391a14SAngeloGioacchino Del Regno LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 74794391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1), 74894391a14SAngeloGioacchino Del Regno LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 74994391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_2, LM_0, 0), 75094391a14SAngeloGioacchino Del Regno LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, 75194391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_MAX, 0, 0), 75294391a14SAngeloGioacchino Del Regno LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, 75394391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_MAX, 0, 0), 75494391a14SAngeloGioacchino Del Regno LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 75594391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_3, LM_1, 0), 75694391a14SAngeloGioacchino Del Regno }; 75794391a14SAngeloGioacchino Del Regno 75894391a14SAngeloGioacchino Del Regno /* SDM845 */ 75994391a14SAngeloGioacchino Del Regno 76094391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = { 76194391a14SAngeloGioacchino Del Regno .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 76294391a14SAngeloGioacchino Del Regno .maxblendstages = 11, /* excluding base layer */ 76394391a14SAngeloGioacchino Del Regno .blendstage_base = { /* offsets relative to mixer base */ 76494391a14SAngeloGioacchino Del Regno 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 76594391a14SAngeloGioacchino Del Regno 0xb0, 0xc8, 0xe0, 0xf8, 0x110 76694391a14SAngeloGioacchino Del Regno }, 76794391a14SAngeloGioacchino Del Regno }; 76894391a14SAngeloGioacchino Del Regno 769abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = { 7707bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 771e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_0, LM_1, 0), 7727bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 773e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_1, LM_0, 0), 7747bdc0c4bSKalyan Thota LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 775e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_2, LM_5, 0), 7767bdc0c4bSKalyan Thota LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK, 777e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 7787bdc0c4bSKalyan Thota LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK, 779e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 7807bdc0c4bSKalyan Thota LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 781e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 7827bdc0c4bSKalyan Thota }; 7837bdc0c4bSKalyan Thota 7847bdc0c4bSKalyan Thota /* SC7180 */ 7857bdc0c4bSKalyan Thota 7867bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = { 7877bdc0c4bSKalyan Thota .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 7887bdc0c4bSKalyan Thota .maxblendstages = 7, /* excluding base layer */ 7897bdc0c4bSKalyan Thota .blendstage_base = { /* offsets relative to mixer base */ 7907bdc0c4bSKalyan Thota 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0 7917bdc0c4bSKalyan Thota }, 7927bdc0c4bSKalyan Thota }; 7937bdc0c4bSKalyan Thota 7947bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = { 7957bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 796e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 7977bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK, 798e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_1, LM_0, 0), 79925fdd593SJeykumar Sankaran }; 80025fdd593SJeykumar Sankaran 801386fced3SJonathan Marek /* SM8150 */ 802386fced3SJonathan Marek 803386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = { 804386fced3SJonathan Marek LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 80505ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 806386fced3SJonathan Marek LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 80705ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1), 808386fced3SJonathan Marek LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 809386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_2, LM_3, 0), 810386fced3SJonathan Marek LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, 811386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 812386fced3SJonathan Marek LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, 813386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_4, LM_5, 0), 814386fced3SJonathan Marek LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 815386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_5, LM_4, 0), 816386fced3SJonathan Marek }; 817386fced3SJonathan Marek 818591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = { 819591e34a0SKrishna Manikandan LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 820591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_0, 0, 0), 821591e34a0SKrishna Manikandan LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK, 822591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_2, LM_3, 0), 823591e34a0SKrishna Manikandan LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK, 824591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_3, LM_2, 0), 825591e34a0SKrishna Manikandan }; 826591e34a0SKrishna Manikandan 82725fdd593SJeykumar Sankaran /************************************************************* 828e47616dfSKalyan Thota * DSPP sub blocks config 829e47616dfSKalyan Thota *************************************************************/ 83094391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = { 83194391a14SAngeloGioacchino Del Regno .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 83294391a14SAngeloGioacchino Del Regno .len = 0x90, .version = 0x10007}, 83394391a14SAngeloGioacchino Del Regno .gc = { .id = DPU_DSPP_GC, .base = 0x17c0, 83494391a14SAngeloGioacchino Del Regno .len = 0x90, .version = 0x10007}, 83594391a14SAngeloGioacchino Del Regno }; 83694391a14SAngeloGioacchino Del Regno 8374259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = { 8384259ff7aSKalyan Thota .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 8394259ff7aSKalyan Thota .len = 0x90, .version = 0x10000}, 8404259ff7aSKalyan Thota }; 8414259ff7aSKalyan Thota 84205ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = { 84305ae91d9SDmitry Baryshkov .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 84405ae91d9SDmitry Baryshkov .len = 0x90, .version = 0x40000}, 84505ae91d9SDmitry Baryshkov }; 84605ae91d9SDmitry Baryshkov 847862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \ 848e47616dfSKalyan Thota {\ 849e47616dfSKalyan Thota .name = _name, .id = _id, \ 850e47616dfSKalyan Thota .base = _base, .len = 0x1800, \ 851862314bcSAngeloGioacchino Del Regno .features = _mask, \ 85205ae91d9SDmitry Baryshkov .sblk = _sblk \ 853e47616dfSKalyan Thota } 854e47616dfSKalyan Thota 85594391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = { 85694391a14SAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK, 85794391a14SAngeloGioacchino Del Regno &msm8998_dspp_sblk), 85894391a14SAngeloGioacchino Del Regno DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK, 85994391a14SAngeloGioacchino Del Regno &msm8998_dspp_sblk), 86094391a14SAngeloGioacchino Del Regno }; 86194391a14SAngeloGioacchino Del Regno 862e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = { 863862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 864862314bcSAngeloGioacchino Del Regno &sc7180_dspp_sblk), 86505ae91d9SDmitry Baryshkov }; 86605ae91d9SDmitry Baryshkov 86705ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = { 868862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 869862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 870862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK, 871862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 872862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK, 873862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 874862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK, 875862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 876e47616dfSKalyan Thota }; 877386fced3SJonathan Marek 878e47616dfSKalyan Thota /************************************************************* 87925fdd593SJeykumar Sankaran * PINGPONG sub blocks config 88025fdd593SJeykumar Sankaran *************************************************************/ 88125fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = { 88225fdd593SJeykumar Sankaran .te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0, 88325fdd593SJeykumar Sankaran .version = 0x1}, 88425fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 88525fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 88625fdd593SJeykumar Sankaran }; 88725fdd593SJeykumar Sankaran 88825fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = { 88925fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 89025fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 89125fdd593SJeykumar Sankaran }; 89225fdd593SJeykumar Sankaran 893591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = { 894591e34a0SKrishna Manikandan .dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0, 895591e34a0SKrishna Manikandan .len = 0x20, .version = 0x20000}, 896591e34a0SKrishna Manikandan }; 897591e34a0SKrishna Manikandan 898667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 89925fdd593SJeykumar Sankaran {\ 90025fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 90125fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 90225fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_SPLIT_MASK, \ 9034369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 904667e9985SDmitry Baryshkov .sblk = &_sblk, \ 905667e9985SDmitry Baryshkov .intr_done = _done, \ 906667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 90725fdd593SJeykumar Sankaran } 908667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 90925fdd593SJeykumar Sankaran {\ 91025fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 91125fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 91225fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_MASK, \ 9134369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 914667e9985SDmitry Baryshkov .sblk = &_sblk, \ 915667e9985SDmitry Baryshkov .intr_done = _done, \ 916667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 91725fdd593SJeykumar Sankaran } 91825fdd593SJeykumar Sankaran 919abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = { 920667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, 921667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 922667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 923667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, 924667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 925667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 926667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk, 927667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 928667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 929667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk, 930667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 931667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 93225fdd593SJeykumar Sankaran }; 93325fdd593SJeykumar Sankaran 9347bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = { 935667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1), 936667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1), 9377bdc0c4bSKalyan Thota }; 9387bdc0c4bSKalyan Thota 939386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = { 940667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te, 941667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 942667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 943667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te, 944667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 945667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 946667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, 947667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 948667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 949667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, 950667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 951667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 952667e9985SDmitry Baryshkov PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, 953667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), 954667e9985SDmitry Baryshkov -1), 955667e9985SDmitry Baryshkov PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, 9563431c17bSRobert Foss DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31), 957667e9985SDmitry Baryshkov -1), 9584369c93cSDmitry Baryshkov }; 9594369c93cSDmitry Baryshkov 9604369c93cSDmitry Baryshkov /************************************************************* 9614369c93cSDmitry Baryshkov * MERGE_3D sub blocks config 9624369c93cSDmitry Baryshkov *************************************************************/ 9634369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \ 9644369c93cSDmitry Baryshkov {\ 9654369c93cSDmitry Baryshkov .name = _name, .id = _id, \ 9664369c93cSDmitry Baryshkov .base = _base, .len = 0x100, \ 9674369c93cSDmitry Baryshkov .features = MERGE_3D_SM8150_MASK, \ 9684369c93cSDmitry Baryshkov .sblk = NULL \ 9694369c93cSDmitry Baryshkov } 9704369c93cSDmitry Baryshkov 9714369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = { 9724369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000), 9734369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100), 9744369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200), 975386fced3SJonathan Marek }; 976386fced3SJonathan Marek 977591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = { 978667e9985SDmitry Baryshkov PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1), 979667e9985SDmitry Baryshkov PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1), 980667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1), 981667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1), 982591e34a0SKrishna Manikandan }; 98325fdd593SJeykumar Sankaran /************************************************************* 98425fdd593SJeykumar Sankaran * INTF sub blocks config 98525fdd593SJeykumar Sankaran *************************************************************/ 986667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \ 98725fdd593SJeykumar Sankaran {\ 98825fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 98925fdd593SJeykumar Sankaran .base = _base, .len = 0x280, \ 990cace3ac4SJonathan Marek .features = _features, \ 99125fdd593SJeykumar Sankaran .type = _type, \ 99225fdd593SJeykumar Sankaran .controller_id = _ctrl_id, \ 993667e9985SDmitry Baryshkov .prog_fetch_lines_worst_case = _progfetch, \ 994667e9985SDmitry Baryshkov .intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \ 995667e9985SDmitry Baryshkov .intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \ 99625fdd593SJeykumar Sankaran } 99725fdd593SJeykumar Sankaran 99894391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = { 99994391a14SAngeloGioacchino Del Regno INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 100094391a14SAngeloGioacchino Del Regno INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 100194391a14SAngeloGioacchino Del Regno INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 100294391a14SAngeloGioacchino Del Regno INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 100394391a14SAngeloGioacchino Del Regno }; 100494391a14SAngeloGioacchino Del Regno 1005abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = { 1006667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1007667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1008667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 1009667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 101025fdd593SJeykumar Sankaran }; 101125fdd593SJeykumar Sankaran 10127bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = { 1013bb3de286SBjorn Andersson INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1014667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 10157bdc0c4bSKalyan Thota }; 10167bdc0c4bSKalyan Thota 1017386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = { 1018667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1019667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1020667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 1021667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 1022386fced3SJonathan Marek }; 1023386fced3SJonathan Marek 1024591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = { 1025ef7837ffSSankeerth Billakanti INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1026667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1027ef7837ffSSankeerth Billakanti INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23), 1028591e34a0SKrishna Manikandan }; 1029591e34a0SKrishna Manikandan 103025fdd593SJeykumar Sankaran /************************************************************* 103125fdd593SJeykumar Sankaran * VBIF sub blocks config 103225fdd593SJeykumar Sankaran *************************************************************/ 103325fdd593SJeykumar Sankaran /* VBIF QOS remap */ 103494391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2}; 103594391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1}; 1036abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6}; 1037abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3}; 103825fdd593SJeykumar Sankaran 103994391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = { 104094391a14SAngeloGioacchino Del Regno { 104194391a14SAngeloGioacchino Del Regno .pps = 1088 * 1920 * 30, 104294391a14SAngeloGioacchino Del Regno .ot_limit = 2, 104394391a14SAngeloGioacchino Del Regno }, 104494391a14SAngeloGioacchino Del Regno { 104594391a14SAngeloGioacchino Del Regno .pps = 1088 * 1920 * 60, 104694391a14SAngeloGioacchino Del Regno .ot_limit = 6, 104794391a14SAngeloGioacchino Del Regno }, 104894391a14SAngeloGioacchino Del Regno { 104994391a14SAngeloGioacchino Del Regno .pps = 3840 * 2160 * 30, 105094391a14SAngeloGioacchino Del Regno .ot_limit = 16, 105194391a14SAngeloGioacchino Del Regno }, 105294391a14SAngeloGioacchino Del Regno }; 105394391a14SAngeloGioacchino Del Regno 105494391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = { 105594391a14SAngeloGioacchino Del Regno { 105694391a14SAngeloGioacchino Del Regno .name = "vbif_0", .id = VBIF_0, 105794391a14SAngeloGioacchino Del Regno .base = 0, .len = 0x1040, 105894391a14SAngeloGioacchino Del Regno .default_ot_rd_limit = 32, 105994391a14SAngeloGioacchino Del Regno .default_ot_wr_limit = 32, 106094391a14SAngeloGioacchino Del Regno .features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM), 106194391a14SAngeloGioacchino Del Regno .xin_halt_timeout = 0x4000, 106294391a14SAngeloGioacchino Del Regno .dynamic_ot_rd_tbl = { 106394391a14SAngeloGioacchino Del Regno .count = ARRAY_SIZE(msm8998_ot_rdwr_cfg), 106494391a14SAngeloGioacchino Del Regno .cfg = msm8998_ot_rdwr_cfg, 106594391a14SAngeloGioacchino Del Regno }, 106694391a14SAngeloGioacchino Del Regno .dynamic_ot_wr_tbl = { 106794391a14SAngeloGioacchino Del Regno .count = ARRAY_SIZE(msm8998_ot_rdwr_cfg), 106894391a14SAngeloGioacchino Del Regno .cfg = msm8998_ot_rdwr_cfg, 106994391a14SAngeloGioacchino Del Regno }, 107094391a14SAngeloGioacchino Del Regno .qos_rt_tbl = { 107194391a14SAngeloGioacchino Del Regno .npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl), 107294391a14SAngeloGioacchino Del Regno .priority_lvl = msm8998_rt_pri_lvl, 107394391a14SAngeloGioacchino Del Regno }, 107494391a14SAngeloGioacchino Del Regno .qos_nrt_tbl = { 107594391a14SAngeloGioacchino Del Regno .npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl), 107694391a14SAngeloGioacchino Del Regno .priority_lvl = msm8998_nrt_pri_lvl, 107794391a14SAngeloGioacchino Del Regno }, 107894391a14SAngeloGioacchino Del Regno .memtype_count = 14, 107994391a14SAngeloGioacchino Del Regno .memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 108094391a14SAngeloGioacchino Del Regno }, 108194391a14SAngeloGioacchino Del Regno }; 108294391a14SAngeloGioacchino Del Regno 1083abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = { 108425fdd593SJeykumar Sankaran { 108525fdd593SJeykumar Sankaran .name = "vbif_0", .id = VBIF_0, 108625fdd593SJeykumar Sankaran .base = 0, .len = 0x1040, 108725fdd593SJeykumar Sankaran .features = BIT(DPU_VBIF_QOS_REMAP), 108825fdd593SJeykumar Sankaran .xin_halt_timeout = 0x4000, 108925fdd593SJeykumar Sankaran .qos_rt_tbl = { 109025fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl), 109125fdd593SJeykumar Sankaran .priority_lvl = sdm845_rt_pri_lvl, 109225fdd593SJeykumar Sankaran }, 109325fdd593SJeykumar Sankaran .qos_nrt_tbl = { 109425fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl), 109525fdd593SJeykumar Sankaran .priority_lvl = sdm845_nrt_pri_lvl, 109625fdd593SJeykumar Sankaran }, 109725fdd593SJeykumar Sankaran .memtype_count = 14, 109825fdd593SJeykumar Sankaran .memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 109925fdd593SJeykumar Sankaran }, 110025fdd593SJeykumar Sankaran }; 110125fdd593SJeykumar Sankaran 1102abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = { 110325fdd593SJeykumar Sankaran .base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c 110425fdd593SJeykumar Sankaran }; 110525fdd593SJeykumar Sankaran 1106386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = { 1107386fced3SJonathan Marek .base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c 1108386fced3SJonathan Marek }; 1109386fced3SJonathan Marek 1110af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = { 1111af776a3eSJonathan Marek .base = 0x0, 1112af776a3eSJonathan Marek .version = 0x00010002, 1113af776a3eSJonathan Marek .trigger_sel_off = 0x119c, 1114af776a3eSJonathan Marek .xin_id = 7, 1115af776a3eSJonathan Marek .clk_ctrl = DPU_CLK_CTRL_REG_DMA, 1116af776a3eSJonathan Marek }; 1117af776a3eSJonathan Marek 111825fdd593SJeykumar Sankaran /************************************************************* 111925fdd593SJeykumar Sankaran * PERF data config 112025fdd593SJeykumar Sankaran *************************************************************/ 112125fdd593SJeykumar Sankaran 112225fdd593SJeykumar Sankaran /* SSPP QOS LUTs */ 112394391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = { 112494391a14SAngeloGioacchino Del Regno {.fl = 4, .lut = 0x1b}, 112594391a14SAngeloGioacchino Del Regno {.fl = 5, .lut = 0x5b}, 112694391a14SAngeloGioacchino Del Regno {.fl = 6, .lut = 0x15b}, 112794391a14SAngeloGioacchino Del Regno {.fl = 7, .lut = 0x55b}, 112894391a14SAngeloGioacchino Del Regno {.fl = 8, .lut = 0x155b}, 112994391a14SAngeloGioacchino Del Regno {.fl = 9, .lut = 0x555b}, 113094391a14SAngeloGioacchino Del Regno {.fl = 10, .lut = 0x1555b}, 113194391a14SAngeloGioacchino Del Regno {.fl = 11, .lut = 0x5555b}, 113294391a14SAngeloGioacchino Del Regno {.fl = 12, .lut = 0x15555b}, 113394391a14SAngeloGioacchino Del Regno {.fl = 13, .lut = 0x55555b}, 113494391a14SAngeloGioacchino Del Regno {.fl = 14, .lut = 0}, 113594391a14SAngeloGioacchino Del Regno {.fl = 1, .lut = 0x1b}, 113694391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0} 113794391a14SAngeloGioacchino Del Regno }; 113894391a14SAngeloGioacchino Del Regno 1139abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = { 114025fdd593SJeykumar Sankaran {.fl = 4, .lut = 0x357}, 114125fdd593SJeykumar Sankaran {.fl = 5, .lut = 0x3357}, 114225fdd593SJeykumar Sankaran {.fl = 6, .lut = 0x23357}, 114325fdd593SJeykumar Sankaran {.fl = 7, .lut = 0x223357}, 114425fdd593SJeykumar Sankaran {.fl = 8, .lut = 0x2223357}, 114525fdd593SJeykumar Sankaran {.fl = 9, .lut = 0x22223357}, 114625fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x222223357}, 114725fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x2222223357}, 114825fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x22222223357}, 114925fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x222222223357}, 115025fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1222222223357}, 115125fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x11222222223357} 115225fdd593SJeykumar Sankaran }; 115325fdd593SJeykumar Sankaran 115494391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = { 115594391a14SAngeloGioacchino Del Regno {.fl = 10, .lut = 0x1aaff}, 115694391a14SAngeloGioacchino Del Regno {.fl = 11, .lut = 0x5aaff}, 115794391a14SAngeloGioacchino Del Regno {.fl = 12, .lut = 0x15aaff}, 115894391a14SAngeloGioacchino Del Regno {.fl = 13, .lut = 0x55aaff}, 115994391a14SAngeloGioacchino Del Regno {.fl = 1, .lut = 0x1aaff}, 116094391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0}, 116194391a14SAngeloGioacchino Del Regno }; 116294391a14SAngeloGioacchino Del Regno 11637bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = { 11647bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011222222335777}, 11657bdc0c4bSKalyan Thota }; 11667bdc0c4bSKalyan Thota 1167386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = { 1168386fced3SJonathan Marek {.fl = 0, .lut = 0x0011222222223357 }, 1169386fced3SJonathan Marek }; 1170386fced3SJonathan Marek 1171abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = { 117225fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x344556677}, 117325fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x3344556677}, 117425fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x23344556677}, 117525fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x223344556677}, 117625fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1223344556677}, 117725fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x112233344556677}, 117825fdd593SJeykumar Sankaran }; 117925fdd593SJeykumar Sankaran 11807bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = { 11817bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011223344556677}, 11827bdc0c4bSKalyan Thota }; 11837bdc0c4bSKalyan Thota 118494391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = { 118594391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0x0}, 118694391a14SAngeloGioacchino Del Regno }; 118794391a14SAngeloGioacchino Del Regno 1188abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = { 118925fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x0}, 119025fdd593SJeykumar Sankaran }; 119125fdd593SJeykumar Sankaran 11927bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = { 11937bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0}, 11947bdc0c4bSKalyan Thota }; 11957bdc0c4bSKalyan Thota 119694391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = { 119794391a14SAngeloGioacchino Del Regno .max_bw_low = 6700000, 119894391a14SAngeloGioacchino Del Regno .max_bw_high = 6700000, 119994391a14SAngeloGioacchino Del Regno .min_core_ib = 2400000, 120094391a14SAngeloGioacchino Del Regno .min_llcc_ib = 800000, 120194391a14SAngeloGioacchino Del Regno .min_dram_ib = 800000, 120294391a14SAngeloGioacchino Del Regno .undersized_prefill_lines = 2, 120394391a14SAngeloGioacchino Del Regno .xtra_prefill_lines = 2, 120494391a14SAngeloGioacchino Del Regno .dest_scale_prefill_lines = 3, 120594391a14SAngeloGioacchino Del Regno .macrotile_prefill_lines = 4, 120694391a14SAngeloGioacchino Del Regno .yuv_nv12_prefill_lines = 8, 120794391a14SAngeloGioacchino Del Regno .linear_prefill_lines = 1, 120894391a14SAngeloGioacchino Del Regno .downscaling_prefill_lines = 1, 120994391a14SAngeloGioacchino Del Regno .amortizable_threshold = 25, 121094391a14SAngeloGioacchino Del Regno .min_prefill_lines = 25, 121194391a14SAngeloGioacchino Del Regno .danger_lut_tbl = {0xf, 0xffff, 0x0}, 121294391a14SAngeloGioacchino Del Regno .safe_lut_tbl = {0xfffc, 0xff00, 0xffff}, 121394391a14SAngeloGioacchino Del Regno .qos_lut_tbl = { 121494391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_linear), 121594391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_linear 121694391a14SAngeloGioacchino Del Regno }, 121794391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_macrotile), 121894391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_macrotile 121994391a14SAngeloGioacchino Del Regno }, 122094391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_nrt), 122194391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_nrt 122294391a14SAngeloGioacchino Del Regno }, 122394391a14SAngeloGioacchino Del Regno }, 122494391a14SAngeloGioacchino Del Regno .cdp_cfg = { 122594391a14SAngeloGioacchino Del Regno {.rd_enable = 1, .wr_enable = 1}, 122694391a14SAngeloGioacchino Del Regno {.rd_enable = 1, .wr_enable = 0} 122794391a14SAngeloGioacchino Del Regno }, 122894391a14SAngeloGioacchino Del Regno .clk_inefficiency_factor = 200, 122994391a14SAngeloGioacchino Del Regno .bw_inefficiency_factor = 120, 123094391a14SAngeloGioacchino Del Regno }; 123194391a14SAngeloGioacchino Del Regno 1232abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = { 123325fdd593SJeykumar Sankaran .max_bw_low = 6800000, 123425fdd593SJeykumar Sankaran .max_bw_high = 6800000, 123525fdd593SJeykumar Sankaran .min_core_ib = 2400000, 123625fdd593SJeykumar Sankaran .min_llcc_ib = 800000, 123725fdd593SJeykumar Sankaran .min_dram_ib = 800000, 123825fdd593SJeykumar Sankaran .undersized_prefill_lines = 2, 123925fdd593SJeykumar Sankaran .xtra_prefill_lines = 2, 124025fdd593SJeykumar Sankaran .dest_scale_prefill_lines = 3, 124125fdd593SJeykumar Sankaran .macrotile_prefill_lines = 4, 124225fdd593SJeykumar Sankaran .yuv_nv12_prefill_lines = 8, 124325fdd593SJeykumar Sankaran .linear_prefill_lines = 1, 124425fdd593SJeykumar Sankaran .downscaling_prefill_lines = 1, 124525fdd593SJeykumar Sankaran .amortizable_threshold = 25, 124625fdd593SJeykumar Sankaran .min_prefill_lines = 24, 124725fdd593SJeykumar Sankaran .danger_lut_tbl = {0xf, 0xffff, 0x0}, 12485bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xf000, 0xffff}, 124925fdd593SJeykumar Sankaran .qos_lut_tbl = { 125025fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_linear), 125125fdd593SJeykumar Sankaran .entries = sdm845_qos_linear 125225fdd593SJeykumar Sankaran }, 125325fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_macrotile), 125425fdd593SJeykumar Sankaran .entries = sdm845_qos_macrotile 125525fdd593SJeykumar Sankaran }, 125625fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_nrt), 125725fdd593SJeykumar Sankaran .entries = sdm845_qos_nrt 125825fdd593SJeykumar Sankaran }, 125925fdd593SJeykumar Sankaran }, 126025fdd593SJeykumar Sankaran .cdp_cfg = { 126125fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 1}, 126225fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 0} 126325fdd593SJeykumar Sankaran }, 12644f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 12654f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 126625fdd593SJeykumar Sankaran }; 126725fdd593SJeykumar Sankaran 12687bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = { 126971dc6c08SKrishna Manikandan .max_bw_low = 6800000, 127071dc6c08SKrishna Manikandan .max_bw_high = 6800000, 12717bdc0c4bSKalyan Thota .min_core_ib = 2400000, 12727bdc0c4bSKalyan Thota .min_llcc_ib = 800000, 1273c33b7c03SKalyan Thota .min_dram_ib = 1600000, 1274c33b7c03SKalyan Thota .min_prefill_lines = 24, 12757bdc0c4bSKalyan Thota .danger_lut_tbl = {0xff, 0xffff, 0x0}, 12765bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 12777bdc0c4bSKalyan Thota .qos_lut_tbl = { 12787bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_linear), 12797bdc0c4bSKalyan Thota .entries = sc7180_qos_linear 12807bdc0c4bSKalyan Thota }, 12817bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 12827bdc0c4bSKalyan Thota .entries = sc7180_qos_macrotile 12837bdc0c4bSKalyan Thota }, 12847bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 12857bdc0c4bSKalyan Thota .entries = sc7180_qos_nrt 12867bdc0c4bSKalyan Thota }, 12877bdc0c4bSKalyan Thota }, 12887bdc0c4bSKalyan Thota .cdp_cfg = { 12897bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 1}, 12907bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 0} 12917bdc0c4bSKalyan Thota }, 1292c33b7c03SKalyan Thota .clk_inefficiency_factor = 105, 1293c33b7c03SKalyan Thota .bw_inefficiency_factor = 120, 12947bdc0c4bSKalyan Thota }; 12957bdc0c4bSKalyan Thota 1296386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = { 1297386fced3SJonathan Marek .max_bw_low = 12800000, 1298386fced3SJonathan Marek .max_bw_high = 12800000, 1299386fced3SJonathan Marek .min_core_ib = 2400000, 1300386fced3SJonathan Marek .min_llcc_ib = 800000, 1301386fced3SJonathan Marek .min_dram_ib = 800000, 13024f2c9838SDmitry Baryshkov .min_prefill_lines = 24, 1303386fced3SJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 13045bccb945SKalyan Thota .safe_lut_tbl = {0xfff8, 0xf000, 0xffff}, 1305386fced3SJonathan Marek .qos_lut_tbl = { 1306386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sm8150_qos_linear), 1307386fced3SJonathan Marek .entries = sm8150_qos_linear 1308386fced3SJonathan Marek }, 1309386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1310386fced3SJonathan Marek .entries = sc7180_qos_macrotile 1311386fced3SJonathan Marek }, 1312386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1313386fced3SJonathan Marek .entries = sc7180_qos_nrt 1314386fced3SJonathan Marek }, 1315386fced3SJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1316386fced3SJonathan Marek }, 1317386fced3SJonathan Marek .cdp_cfg = { 1318386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1319386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1320386fced3SJonathan Marek }, 13214f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 13224f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1323386fced3SJonathan Marek }; 1324386fced3SJonathan Marek 1325af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = { 1326af776a3eSJonathan Marek .max_bw_low = 13700000, 1327af776a3eSJonathan Marek .max_bw_high = 16600000, 1328af776a3eSJonathan Marek .min_core_ib = 4800000, 1329af776a3eSJonathan Marek .min_llcc_ib = 0, 1330af776a3eSJonathan Marek .min_dram_ib = 800000, 13314f2c9838SDmitry Baryshkov .min_prefill_lines = 35, 1332af776a3eSJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 13335bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 1334af776a3eSJonathan Marek .qos_lut_tbl = { 1335af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_linear), 1336af776a3eSJonathan Marek .entries = sc7180_qos_linear 1337af776a3eSJonathan Marek }, 1338af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1339af776a3eSJonathan Marek .entries = sc7180_qos_macrotile 1340af776a3eSJonathan Marek }, 1341af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1342af776a3eSJonathan Marek .entries = sc7180_qos_nrt 1343af776a3eSJonathan Marek }, 1344af776a3eSJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1345af776a3eSJonathan Marek }, 1346af776a3eSJonathan Marek .cdp_cfg = { 1347af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1348af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1349af776a3eSJonathan Marek }, 13504f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 13514f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1352af776a3eSJonathan Marek }; 1353af776a3eSJonathan Marek 1354591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = { 1355591e34a0SKrishna Manikandan .max_bw_low = 4700000, 1356591e34a0SKrishna Manikandan .max_bw_high = 8800000, 1357591e34a0SKrishna Manikandan .min_core_ib = 2500000, 1358591e34a0SKrishna Manikandan .min_llcc_ib = 0, 1359591e34a0SKrishna Manikandan .min_dram_ib = 1600000, 1360591e34a0SKrishna Manikandan .min_prefill_lines = 24, 1361591e34a0SKrishna Manikandan .danger_lut_tbl = {0xffff, 0xffff, 0x0}, 13625bccb945SKalyan Thota .safe_lut_tbl = {0xff00, 0xff00, 0xffff}, 1363591e34a0SKrishna Manikandan .qos_lut_tbl = { 1364591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1365591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1366591e34a0SKrishna Manikandan }, 1367591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1368591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1369591e34a0SKrishna Manikandan }, 1370591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1371591e34a0SKrishna Manikandan .entries = sc7180_qos_nrt 1372591e34a0SKrishna Manikandan }, 1373591e34a0SKrishna Manikandan }, 1374591e34a0SKrishna Manikandan .cdp_cfg = { 1375591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 1}, 1376591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 0} 1377591e34a0SKrishna Manikandan }, 1378591e34a0SKrishna Manikandan .clk_inefficiency_factor = 105, 1379591e34a0SKrishna Manikandan .bw_inefficiency_factor = 120, 1380591e34a0SKrishna Manikandan }; 1381591e34a0SKrishna Manikandan 138225fdd593SJeykumar Sankaran /************************************************************* 138325fdd593SJeykumar Sankaran * Hardware catalog init 138425fdd593SJeykumar Sankaran *************************************************************/ 138525fdd593SJeykumar Sankaran 138625fdd593SJeykumar Sankaran /* 138794391a14SAngeloGioacchino Del Regno * msm8998_cfg_init(): populate sdm845 dpu sub-blocks reg offsets 138894391a14SAngeloGioacchino Del Regno * and instance counts. 138994391a14SAngeloGioacchino Del Regno */ 139094391a14SAngeloGioacchino Del Regno static void msm8998_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 139194391a14SAngeloGioacchino Del Regno { 139294391a14SAngeloGioacchino Del Regno *dpu_cfg = (struct dpu_mdss_cfg){ 139394391a14SAngeloGioacchino Del Regno .caps = &msm8998_dpu_caps, 139494391a14SAngeloGioacchino Del Regno .mdp_count = ARRAY_SIZE(msm8998_mdp), 139594391a14SAngeloGioacchino Del Regno .mdp = msm8998_mdp, 139694391a14SAngeloGioacchino Del Regno .ctl_count = ARRAY_SIZE(msm8998_ctl), 139794391a14SAngeloGioacchino Del Regno .ctl = msm8998_ctl, 139894391a14SAngeloGioacchino Del Regno .sspp_count = ARRAY_SIZE(msm8998_sspp), 139994391a14SAngeloGioacchino Del Regno .sspp = msm8998_sspp, 140094391a14SAngeloGioacchino Del Regno .mixer_count = ARRAY_SIZE(msm8998_lm), 140194391a14SAngeloGioacchino Del Regno .mixer = msm8998_lm, 140294391a14SAngeloGioacchino Del Regno .pingpong_count = ARRAY_SIZE(sdm845_pp), 140394391a14SAngeloGioacchino Del Regno .pingpong = sdm845_pp, 140494391a14SAngeloGioacchino Del Regno .intf_count = ARRAY_SIZE(msm8998_intf), 140594391a14SAngeloGioacchino Del Regno .intf = msm8998_intf, 140694391a14SAngeloGioacchino Del Regno .vbif_count = ARRAY_SIZE(msm8998_vbif), 140794391a14SAngeloGioacchino Del Regno .vbif = msm8998_vbif, 140894391a14SAngeloGioacchino Del Regno .reg_dma_count = 0, 140994391a14SAngeloGioacchino Del Regno .perf = msm8998_perf_data, 141094391a14SAngeloGioacchino Del Regno .mdss_irqs = IRQ_SM8250_MASK, 141194391a14SAngeloGioacchino Del Regno }; 141294391a14SAngeloGioacchino Del Regno } 141394391a14SAngeloGioacchino Del Regno 141494391a14SAngeloGioacchino Del Regno /* 141525fdd593SJeykumar Sankaran * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets 141625fdd593SJeykumar Sankaran * and instance counts. 141725fdd593SJeykumar Sankaran */ 1418fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 141925fdd593SJeykumar Sankaran { 142025fdd593SJeykumar Sankaran *dpu_cfg = (struct dpu_mdss_cfg){ 142125fdd593SJeykumar Sankaran .caps = &sdm845_dpu_caps, 142225fdd593SJeykumar Sankaran .mdp_count = ARRAY_SIZE(sdm845_mdp), 142325fdd593SJeykumar Sankaran .mdp = sdm845_mdp, 142425fdd593SJeykumar Sankaran .ctl_count = ARRAY_SIZE(sdm845_ctl), 142525fdd593SJeykumar Sankaran .ctl = sdm845_ctl, 142625fdd593SJeykumar Sankaran .sspp_count = ARRAY_SIZE(sdm845_sspp), 142725fdd593SJeykumar Sankaran .sspp = sdm845_sspp, 142825fdd593SJeykumar Sankaran .mixer_count = ARRAY_SIZE(sdm845_lm), 142925fdd593SJeykumar Sankaran .mixer = sdm845_lm, 143025fdd593SJeykumar Sankaran .pingpong_count = ARRAY_SIZE(sdm845_pp), 143125fdd593SJeykumar Sankaran .pingpong = sdm845_pp, 143225fdd593SJeykumar Sankaran .intf_count = ARRAY_SIZE(sdm845_intf), 143325fdd593SJeykumar Sankaran .intf = sdm845_intf, 143425fdd593SJeykumar Sankaran .vbif_count = ARRAY_SIZE(sdm845_vbif), 143525fdd593SJeykumar Sankaran .vbif = sdm845_vbif, 143625fdd593SJeykumar Sankaran .reg_dma_count = 1, 143725fdd593SJeykumar Sankaran .dma_cfg = sdm845_regdma, 143825fdd593SJeykumar Sankaran .perf = sdm845_perf_data, 1439597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 144025fdd593SJeykumar Sankaran }; 144125fdd593SJeykumar Sankaran } 144225fdd593SJeykumar Sankaran 14437bdc0c4bSKalyan Thota /* 14447bdc0c4bSKalyan Thota * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets 14457bdc0c4bSKalyan Thota * and instance counts. 14467bdc0c4bSKalyan Thota */ 14477bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 14487bdc0c4bSKalyan Thota { 14497bdc0c4bSKalyan Thota *dpu_cfg = (struct dpu_mdss_cfg){ 14507bdc0c4bSKalyan Thota .caps = &sc7180_dpu_caps, 14517bdc0c4bSKalyan Thota .mdp_count = ARRAY_SIZE(sc7180_mdp), 14527bdc0c4bSKalyan Thota .mdp = sc7180_mdp, 14537bdc0c4bSKalyan Thota .ctl_count = ARRAY_SIZE(sc7180_ctl), 14547bdc0c4bSKalyan Thota .ctl = sc7180_ctl, 14557bdc0c4bSKalyan Thota .sspp_count = ARRAY_SIZE(sc7180_sspp), 14567bdc0c4bSKalyan Thota .sspp = sc7180_sspp, 14577bdc0c4bSKalyan Thota .mixer_count = ARRAY_SIZE(sc7180_lm), 14587bdc0c4bSKalyan Thota .mixer = sc7180_lm, 1459e47616dfSKalyan Thota .dspp_count = ARRAY_SIZE(sc7180_dspp), 1460e47616dfSKalyan Thota .dspp = sc7180_dspp, 14617bdc0c4bSKalyan Thota .pingpong_count = ARRAY_SIZE(sc7180_pp), 14627bdc0c4bSKalyan Thota .pingpong = sc7180_pp, 14637bdc0c4bSKalyan Thota .intf_count = ARRAY_SIZE(sc7180_intf), 14647bdc0c4bSKalyan Thota .intf = sc7180_intf, 14657bdc0c4bSKalyan Thota .vbif_count = ARRAY_SIZE(sdm845_vbif), 14667bdc0c4bSKalyan Thota .vbif = sdm845_vbif, 14677bdc0c4bSKalyan Thota .reg_dma_count = 1, 14687bdc0c4bSKalyan Thota .dma_cfg = sdm845_regdma, 14697bdc0c4bSKalyan Thota .perf = sc7180_perf_data, 1470597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7180_MASK, 14717bdc0c4bSKalyan Thota }; 14727bdc0c4bSKalyan Thota } 14737bdc0c4bSKalyan Thota 1474386fced3SJonathan Marek /* 1475386fced3SJonathan Marek * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets 1476386fced3SJonathan Marek * and instance counts. 1477386fced3SJonathan Marek */ 1478386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1479386fced3SJonathan Marek { 1480386fced3SJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1481386fced3SJonathan Marek .caps = &sm8150_dpu_caps, 1482386fced3SJonathan Marek .mdp_count = ARRAY_SIZE(sdm845_mdp), 1483386fced3SJonathan Marek .mdp = sdm845_mdp, 1484386fced3SJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1485386fced3SJonathan Marek .ctl = sm8150_ctl, 1486386fced3SJonathan Marek .sspp_count = ARRAY_SIZE(sdm845_sspp), 1487386fced3SJonathan Marek .sspp = sdm845_sspp, 1488386fced3SJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1489386fced3SJonathan Marek .mixer = sm8150_lm, 149005ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 149105ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1492386fced3SJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1493386fced3SJonathan Marek .pingpong = sm8150_pp, 14944369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 14954369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1496386fced3SJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1497386fced3SJonathan Marek .intf = sm8150_intf, 1498386fced3SJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1499386fced3SJonathan Marek .vbif = sdm845_vbif, 1500386fced3SJonathan Marek .reg_dma_count = 1, 1501386fced3SJonathan Marek .dma_cfg = sm8150_regdma, 1502386fced3SJonathan Marek .perf = sm8150_perf_data, 1503597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 1504386fced3SJonathan Marek }; 1505386fced3SJonathan Marek } 1506386fced3SJonathan Marek 1507af776a3eSJonathan Marek /* 1508af776a3eSJonathan Marek * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets 1509af776a3eSJonathan Marek * and instance counts. 1510af776a3eSJonathan Marek */ 1511af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1512af776a3eSJonathan Marek { 1513af776a3eSJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1514af776a3eSJonathan Marek .caps = &sm8250_dpu_caps, 1515af776a3eSJonathan Marek .mdp_count = ARRAY_SIZE(sm8250_mdp), 1516af776a3eSJonathan Marek .mdp = sm8250_mdp, 1517af776a3eSJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1518af776a3eSJonathan Marek .ctl = sm8150_ctl, 1519d21fc5dfSDmitry Baryshkov .sspp_count = ARRAY_SIZE(sm8250_sspp), 1520d21fc5dfSDmitry Baryshkov .sspp = sm8250_sspp, 1521af776a3eSJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1522af776a3eSJonathan Marek .mixer = sm8150_lm, 152305ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 152405ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1525af776a3eSJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1526af776a3eSJonathan Marek .pingpong = sm8150_pp, 15274369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 15284369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1529af776a3eSJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1530af776a3eSJonathan Marek .intf = sm8150_intf, 1531af776a3eSJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1532af776a3eSJonathan Marek .vbif = sdm845_vbif, 1533af776a3eSJonathan Marek .reg_dma_count = 1, 1534af776a3eSJonathan Marek .dma_cfg = sm8250_regdma, 1535af776a3eSJonathan Marek .perf = sm8250_perf_data, 1536597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SM8250_MASK, 1537af776a3eSJonathan Marek }; 1538af776a3eSJonathan Marek } 1539af776a3eSJonathan Marek 1540591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1541591e34a0SKrishna Manikandan { 1542591e34a0SKrishna Manikandan *dpu_cfg = (struct dpu_mdss_cfg){ 1543591e34a0SKrishna Manikandan .caps = &sc7280_dpu_caps, 1544591e34a0SKrishna Manikandan .mdp_count = ARRAY_SIZE(sc7280_mdp), 1545591e34a0SKrishna Manikandan .mdp = sc7280_mdp, 1546591e34a0SKrishna Manikandan .ctl_count = ARRAY_SIZE(sc7280_ctl), 1547591e34a0SKrishna Manikandan .ctl = sc7280_ctl, 1548591e34a0SKrishna Manikandan .sspp_count = ARRAY_SIZE(sc7280_sspp), 1549591e34a0SKrishna Manikandan .sspp = sc7280_sspp, 1550591e34a0SKrishna Manikandan .mixer_count = ARRAY_SIZE(sc7280_lm), 1551591e34a0SKrishna Manikandan .mixer = sc7280_lm, 1552591e34a0SKrishna Manikandan .pingpong_count = ARRAY_SIZE(sc7280_pp), 1553591e34a0SKrishna Manikandan .pingpong = sc7280_pp, 1554591e34a0SKrishna Manikandan .intf_count = ARRAY_SIZE(sc7280_intf), 1555591e34a0SKrishna Manikandan .intf = sc7280_intf, 1556591e34a0SKrishna Manikandan .vbif_count = ARRAY_SIZE(sdm845_vbif), 1557591e34a0SKrishna Manikandan .vbif = sdm845_vbif, 1558591e34a0SKrishna Manikandan .perf = sc7280_perf_data, 1559597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7280_MASK, 1560591e34a0SKrishna Manikandan }; 1561591e34a0SKrishna Manikandan } 1562591e34a0SKrishna Manikandan 1563abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = { 156494391a14SAngeloGioacchino Del Regno { .hw_rev = DPU_HW_VER_300, .cfg_init = msm8998_cfg_init}, 156594391a14SAngeloGioacchino Del Regno { .hw_rev = DPU_HW_VER_301, .cfg_init = msm8998_cfg_init}, 156625fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init}, 156725fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init}, 1568386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init}, 1569386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init}, 1570af776a3eSJonathan Marek { .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init}, 15717bdc0c4bSKalyan Thota { .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init}, 1572591e34a0SKrishna Manikandan { .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init}, 157325fdd593SJeykumar Sankaran }; 157425fdd593SJeykumar Sankaran 157525fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg) 157625fdd593SJeykumar Sankaran { 157725fdd593SJeykumar Sankaran kfree(dpu_cfg); 157825fdd593SJeykumar Sankaran } 157925fdd593SJeykumar Sankaran 158025fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev) 158125fdd593SJeykumar Sankaran { 158225fdd593SJeykumar Sankaran int i; 158325fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_cfg; 158425fdd593SJeykumar Sankaran 158525fdd593SJeykumar Sankaran dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL); 158625fdd593SJeykumar Sankaran if (!dpu_cfg) 158725fdd593SJeykumar Sankaran return ERR_PTR(-ENOMEM); 158825fdd593SJeykumar Sankaran 158925fdd593SJeykumar Sankaran for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) { 159025fdd593SJeykumar Sankaran if (cfg_handler[i].hw_rev == hw_rev) { 159125fdd593SJeykumar Sankaran cfg_handler[i].cfg_init(dpu_cfg); 159225fdd593SJeykumar Sankaran dpu_cfg->hwversion = hw_rev; 159325fdd593SJeykumar Sankaran return dpu_cfg; 159425fdd593SJeykumar Sankaran } 159525fdd593SJeykumar Sankaran } 159625fdd593SJeykumar Sankaran 159725fdd593SJeykumar Sankaran DPU_ERROR("unsupported chipset id:%X\n", hw_rev); 159825fdd593SJeykumar Sankaran dpu_hw_catalog_deinit(dpu_cfg); 159925fdd593SJeykumar Sankaran return ERR_PTR(-ENODEV); 160025fdd593SJeykumar Sankaran } 160125fdd593SJeykumar Sankaran 1602