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 315334087eSLoic Poulain #define VIG_QCM2290_MASK (VIG_MASK | BIT(DPU_SSPP_QOS_8LVL)) 325334087eSLoic Poulain 3394391a14SAngeloGioacchino Del Regno #define DMA_MSM8998_MASK \ 3494391a14SAngeloGioacchino Del Regno (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) |\ 3594391a14SAngeloGioacchino Del Regno BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\ 3694391a14SAngeloGioacchino Del Regno BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT)) 3794391a14SAngeloGioacchino Del Regno 3825fdd593SJeykumar Sankaran #define DMA_SDM845_MASK \ 3925fdd593SJeykumar Sankaran (BIT(DPU_SSPP_SRC) | BIT(DPU_SSPP_QOS) | BIT(DPU_SSPP_QOS_8LVL) |\ 4025fdd593SJeykumar Sankaran BIT(DPU_SSPP_TS_PREFILL) | BIT(DPU_SSPP_TS_PREFILL_REC1) |\ 4125fdd593SJeykumar Sankaran BIT(DPU_SSPP_CDP) | BIT(DPU_SSPP_EXCL_RECT)) 4225fdd593SJeykumar Sankaran 4307ca1fc0SSravanthi Kollukuduru #define DMA_CURSOR_SDM845_MASK \ 4407ca1fc0SSravanthi Kollukuduru (DMA_SDM845_MASK | BIT(DPU_SSPP_CURSOR)) 4507ca1fc0SSravanthi Kollukuduru 4694391a14SAngeloGioacchino Del Regno #define DMA_CURSOR_MSM8998_MASK \ 4794391a14SAngeloGioacchino Del Regno (DMA_MSM8998_MASK | BIT(DPU_SSPP_CURSOR)) 4894391a14SAngeloGioacchino Del Regno 4925fdd593SJeykumar Sankaran #define MIXER_SDM845_MASK \ 5025fdd593SJeykumar Sankaran (BIT(DPU_MIXER_SOURCESPLIT) | BIT(DPU_DIM_LAYER)) 5125fdd593SJeykumar Sankaran 527bdc0c4bSKalyan Thota #define MIXER_SC7180_MASK \ 537bdc0c4bSKalyan Thota (BIT(DPU_DIM_LAYER)) 547bdc0c4bSKalyan Thota 5525fdd593SJeykumar Sankaran #define PINGPONG_SDM845_MASK BIT(DPU_PINGPONG_DITHER) 5625fdd593SJeykumar Sankaran 5725fdd593SJeykumar Sankaran #define PINGPONG_SDM845_SPLIT_MASK \ 5825fdd593SJeykumar Sankaran (PINGPONG_SDM845_MASK | BIT(DPU_PINGPONG_TE2)) 5925fdd593SJeykumar Sankaran 60591e34a0SKrishna Manikandan #define CTL_SC7280_MASK \ 6144bf8704SKalyan Thota (BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_FETCH_ACTIVE) | BIT(DPU_CTL_VM_CFG)) 62591e34a0SKrishna Manikandan 634369c93cSDmitry Baryshkov #define MERGE_3D_SM8150_MASK (0) 644369c93cSDmitry Baryshkov 6594391a14SAngeloGioacchino Del Regno #define DSPP_MSM8998_MASK BIT(DPU_DSPP_PCC) | BIT(DPU_DSPP_GC) 6694391a14SAngeloGioacchino Del Regno 674259ff7aSKalyan Thota #define DSPP_SC7180_MASK BIT(DPU_DSPP_PCC) 68e47616dfSKalyan Thota 69cace3ac4SJonathan Marek #define INTF_SDM845_MASK (0) 70cace3ac4SJonathan Marek 71cace3ac4SJonathan Marek #define INTF_SC7180_MASK BIT(DPU_INTF_INPUT_CTRL) | BIT(DPU_INTF_TE) 72cace3ac4SJonathan Marek 73591e34a0SKrishna Manikandan #define INTF_SC7280_MASK INTF_SC7180_MASK | BIT(DPU_DATA_HCTL_EN) 74591e34a0SKrishna Manikandan 75597762d5SDmitry Baryshkov #define IRQ_SDM845_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 76597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 77597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 78597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 79597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 80597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 81597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 82597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR) | \ 83597762d5SDmitry Baryshkov BIT(MDP_AD4_0_INTR) | \ 84597762d5SDmitry Baryshkov BIT(MDP_AD4_1_INTR)) 85597762d5SDmitry Baryshkov 86597762d5SDmitry Baryshkov #define IRQ_SC7180_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 87597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 88597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 89597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 90597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR)) 91597762d5SDmitry Baryshkov 92597762d5SDmitry Baryshkov #define IRQ_SC7280_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 93597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 94597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 95597762d5SDmitry Baryshkov BIT(MDP_INTF0_7xxx_INTR) | \ 96597762d5SDmitry Baryshkov BIT(MDP_INTF1_7xxx_INTR) | \ 97597762d5SDmitry Baryshkov BIT(MDP_INTF5_7xxx_INTR)) 98597762d5SDmitry Baryshkov 99597762d5SDmitry Baryshkov #define IRQ_SM8250_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 100597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_INTR2) | \ 101597762d5SDmitry Baryshkov BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 102597762d5SDmitry Baryshkov BIT(MDP_INTF0_INTR) | \ 103597762d5SDmitry Baryshkov BIT(MDP_INTF1_INTR) | \ 104597762d5SDmitry Baryshkov BIT(MDP_INTF2_INTR) | \ 105597762d5SDmitry Baryshkov BIT(MDP_INTF3_INTR) | \ 106597762d5SDmitry Baryshkov BIT(MDP_INTF4_INTR)) 107597762d5SDmitry Baryshkov 108f3af2d6eSRob Clark #define IRQ_SC8180X_MASK (BIT(MDP_SSPP_TOP0_INTR) | \ 109f3af2d6eSRob Clark BIT(MDP_SSPP_TOP0_INTR2) | \ 110f3af2d6eSRob Clark BIT(MDP_SSPP_TOP0_HIST_INTR) | \ 111f3af2d6eSRob Clark BIT(MDP_INTF0_INTR) | \ 112f3af2d6eSRob Clark BIT(MDP_INTF1_INTR) | \ 113f3af2d6eSRob Clark BIT(MDP_INTF2_INTR) | \ 114f3af2d6eSRob Clark BIT(MDP_INTF3_INTR) | \ 115f3af2d6eSRob Clark BIT(MDP_INTF4_INTR) | \ 116f3af2d6eSRob Clark BIT(MDP_INTF5_INTR) | \ 117f3af2d6eSRob Clark BIT(MDP_AD4_0_INTR) | \ 118f3af2d6eSRob Clark BIT(MDP_AD4_1_INTR)) 119597762d5SDmitry Baryshkov 12025fdd593SJeykumar Sankaran #define DEFAULT_PIXEL_RAM_SIZE (50 * 1024) 12125fdd593SJeykumar Sankaran #define DEFAULT_DPU_LINE_WIDTH 2048 12225fdd593SJeykumar Sankaran #define DEFAULT_DPU_OUTPUT_LINE_WIDTH 2560 12325fdd593SJeykumar Sankaran 12425fdd593SJeykumar Sankaran #define MAX_HORZ_DECIMATION 4 12525fdd593SJeykumar Sankaran #define MAX_VERT_DECIMATION 4 12625fdd593SJeykumar Sankaran 12725fdd593SJeykumar Sankaran #define MAX_UPSCALE_RATIO 20 12825fdd593SJeykumar Sankaran #define MAX_DOWNSCALE_RATIO 4 12925fdd593SJeykumar Sankaran #define SSPP_UNITY_SCALE 1 13025fdd593SJeykumar Sankaran 13125fdd593SJeykumar Sankaran #define STRCAT(X, Y) (X Y) 13225fdd593SJeykumar Sankaran 13309c7e370SLee Jones static const uint32_t plane_formats[] = { 13409c7e370SLee Jones DRM_FORMAT_ARGB8888, 13509c7e370SLee Jones DRM_FORMAT_ABGR8888, 13609c7e370SLee Jones DRM_FORMAT_RGBA8888, 13709c7e370SLee Jones DRM_FORMAT_BGRA8888, 13809c7e370SLee Jones DRM_FORMAT_XRGB8888, 13909c7e370SLee Jones DRM_FORMAT_RGBX8888, 14009c7e370SLee Jones DRM_FORMAT_BGRX8888, 14109c7e370SLee Jones DRM_FORMAT_XBGR8888, 14209c7e370SLee Jones DRM_FORMAT_RGB888, 14309c7e370SLee Jones DRM_FORMAT_BGR888, 14409c7e370SLee Jones DRM_FORMAT_RGB565, 14509c7e370SLee Jones DRM_FORMAT_BGR565, 14609c7e370SLee Jones DRM_FORMAT_ARGB1555, 14709c7e370SLee Jones DRM_FORMAT_ABGR1555, 14809c7e370SLee Jones DRM_FORMAT_RGBA5551, 14909c7e370SLee Jones DRM_FORMAT_BGRA5551, 15009c7e370SLee Jones DRM_FORMAT_XRGB1555, 15109c7e370SLee Jones DRM_FORMAT_XBGR1555, 15209c7e370SLee Jones DRM_FORMAT_RGBX5551, 15309c7e370SLee Jones DRM_FORMAT_BGRX5551, 15409c7e370SLee Jones DRM_FORMAT_ARGB4444, 15509c7e370SLee Jones DRM_FORMAT_ABGR4444, 15609c7e370SLee Jones DRM_FORMAT_RGBA4444, 15709c7e370SLee Jones DRM_FORMAT_BGRA4444, 15809c7e370SLee Jones DRM_FORMAT_XRGB4444, 15909c7e370SLee Jones DRM_FORMAT_XBGR4444, 16009c7e370SLee Jones DRM_FORMAT_RGBX4444, 16109c7e370SLee Jones DRM_FORMAT_BGRX4444, 16209c7e370SLee Jones }; 16309c7e370SLee Jones 16409c7e370SLee Jones static const uint32_t plane_formats_yuv[] = { 16509c7e370SLee Jones DRM_FORMAT_ARGB8888, 16609c7e370SLee Jones DRM_FORMAT_ABGR8888, 16709c7e370SLee Jones DRM_FORMAT_RGBA8888, 16809c7e370SLee Jones DRM_FORMAT_BGRX8888, 16909c7e370SLee Jones DRM_FORMAT_BGRA8888, 17009c7e370SLee Jones DRM_FORMAT_XRGB8888, 17109c7e370SLee Jones DRM_FORMAT_XBGR8888, 17209c7e370SLee Jones DRM_FORMAT_RGBX8888, 17309c7e370SLee Jones DRM_FORMAT_RGB888, 17409c7e370SLee Jones DRM_FORMAT_BGR888, 17509c7e370SLee Jones DRM_FORMAT_RGB565, 17609c7e370SLee Jones DRM_FORMAT_BGR565, 17709c7e370SLee Jones DRM_FORMAT_ARGB1555, 17809c7e370SLee Jones DRM_FORMAT_ABGR1555, 17909c7e370SLee Jones DRM_FORMAT_RGBA5551, 18009c7e370SLee Jones DRM_FORMAT_BGRA5551, 18109c7e370SLee Jones DRM_FORMAT_XRGB1555, 18209c7e370SLee Jones DRM_FORMAT_XBGR1555, 18309c7e370SLee Jones DRM_FORMAT_RGBX5551, 18409c7e370SLee Jones DRM_FORMAT_BGRX5551, 18509c7e370SLee Jones DRM_FORMAT_ARGB4444, 18609c7e370SLee Jones DRM_FORMAT_ABGR4444, 18709c7e370SLee Jones DRM_FORMAT_RGBA4444, 18809c7e370SLee Jones DRM_FORMAT_BGRA4444, 18909c7e370SLee Jones DRM_FORMAT_XRGB4444, 19009c7e370SLee Jones DRM_FORMAT_XBGR4444, 19109c7e370SLee Jones DRM_FORMAT_RGBX4444, 19209c7e370SLee Jones DRM_FORMAT_BGRX4444, 19309c7e370SLee Jones 19409c7e370SLee Jones DRM_FORMAT_NV12, 19509c7e370SLee Jones DRM_FORMAT_NV21, 19609c7e370SLee Jones DRM_FORMAT_NV16, 19709c7e370SLee Jones DRM_FORMAT_NV61, 19809c7e370SLee Jones DRM_FORMAT_VYUY, 19909c7e370SLee Jones DRM_FORMAT_UYVY, 20009c7e370SLee Jones DRM_FORMAT_YUYV, 20109c7e370SLee Jones DRM_FORMAT_YVYU, 20209c7e370SLee Jones DRM_FORMAT_YUV420, 20309c7e370SLee Jones DRM_FORMAT_YVU420, 20409c7e370SLee Jones }; 20509c7e370SLee Jones 20625fdd593SJeykumar Sankaran /************************************************************* 20725fdd593SJeykumar Sankaran * DPU sub blocks config 20825fdd593SJeykumar Sankaran *************************************************************/ 20925fdd593SJeykumar Sankaran /* DPU top level caps */ 21094391a14SAngeloGioacchino Del Regno static const struct dpu_caps msm8998_dpu_caps = { 21194391a14SAngeloGioacchino Del Regno .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 21294391a14SAngeloGioacchino Del Regno .max_mixer_blendstages = 0x7, 21394391a14SAngeloGioacchino Del Regno .qseed_type = DPU_SSPP_SCALER_QSEED3, 21494391a14SAngeloGioacchino Del Regno .smart_dma_rev = DPU_SSPP_SMART_DMA_V1, 21594391a14SAngeloGioacchino Del Regno .ubwc_version = DPU_HW_UBWC_VER_10, 21694391a14SAngeloGioacchino Del Regno .has_src_split = true, 21794391a14SAngeloGioacchino Del Regno .has_dim_layer = true, 21894391a14SAngeloGioacchino Del Regno .has_idle_pc = true, 21994391a14SAngeloGioacchino Del Regno .has_3d_merge = true, 22094391a14SAngeloGioacchino Del Regno .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 22194391a14SAngeloGioacchino Del Regno .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 22294391a14SAngeloGioacchino Del Regno .max_hdeci_exp = MAX_HORZ_DECIMATION, 22394391a14SAngeloGioacchino Del Regno .max_vdeci_exp = MAX_VERT_DECIMATION, 22494391a14SAngeloGioacchino Del Regno }; 22594391a14SAngeloGioacchino Del Regno 22625fdd593SJeykumar Sankaran static const struct dpu_caps sdm845_dpu_caps = { 22725fdd593SJeykumar Sankaran .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 22825fdd593SJeykumar Sankaran .max_mixer_blendstages = 0xb, 22925fdd593SJeykumar Sankaran .qseed_type = DPU_SSPP_SCALER_QSEED3, 23025fdd593SJeykumar Sankaran .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 23125fdd593SJeykumar Sankaran .ubwc_version = DPU_HW_UBWC_VER_20, 23225fdd593SJeykumar Sankaran .has_src_split = true, 23325fdd593SJeykumar Sankaran .has_dim_layer = true, 23425fdd593SJeykumar Sankaran .has_idle_pc = true, 23542a558b7SKalyan Thota .has_3d_merge = true, 2367e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2377e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 2387e9d4cddSJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 2397e9d4cddSJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 24025fdd593SJeykumar Sankaran }; 24125fdd593SJeykumar Sankaran 2427bdc0c4bSKalyan Thota static const struct dpu_caps sc7180_dpu_caps = { 2437bdc0c4bSKalyan Thota .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2447bdc0c4bSKalyan Thota .max_mixer_blendstages = 0x9, 2457bdc0c4bSKalyan Thota .qseed_type = DPU_SSPP_SCALER_QSEED4, 2467bdc0c4bSKalyan Thota .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 2477bdc0c4bSKalyan Thota .ubwc_version = DPU_HW_UBWC_VER_20, 2487bdc0c4bSKalyan Thota .has_dim_layer = true, 2497bdc0c4bSKalyan Thota .has_idle_pc = true, 2507e9d4cddSJonathan Marek .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 2517e9d4cddSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 2527bdc0c4bSKalyan Thota }; 2537bdc0c4bSKalyan Thota 254386fced3SJonathan Marek static const struct dpu_caps sm8150_dpu_caps = { 255386fced3SJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 256386fced3SJonathan Marek .max_mixer_blendstages = 0xb, 257386fced3SJonathan Marek .qseed_type = DPU_SSPP_SCALER_QSEED3, 258386fced3SJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 259386fced3SJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_30, 260386fced3SJonathan Marek .has_src_split = true, 261386fced3SJonathan Marek .has_dim_layer = true, 262386fced3SJonathan Marek .has_idle_pc = true, 263386fced3SJonathan Marek .has_3d_merge = true, 264386fced3SJonathan Marek .max_linewidth = 4096, 265386fced3SJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 266386fced3SJonathan Marek .max_hdeci_exp = MAX_HORZ_DECIMATION, 267386fced3SJonathan Marek .max_vdeci_exp = MAX_VERT_DECIMATION, 268386fced3SJonathan Marek }; 269386fced3SJonathan Marek 270f3af2d6eSRob Clark static const struct dpu_caps sc8180x_dpu_caps = { 271f3af2d6eSRob Clark .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 272f3af2d6eSRob Clark .max_mixer_blendstages = 0xb, 273f3af2d6eSRob Clark .qseed_type = DPU_SSPP_SCALER_QSEED3, 274f3af2d6eSRob Clark .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 275f3af2d6eSRob Clark .ubwc_version = DPU_HW_UBWC_VER_30, 276f3af2d6eSRob Clark .has_src_split = true, 277f3af2d6eSRob Clark .has_dim_layer = true, 278f3af2d6eSRob Clark .has_idle_pc = true, 279f3af2d6eSRob Clark .has_3d_merge = true, 280f3af2d6eSRob Clark .max_linewidth = 4096, 281f3af2d6eSRob Clark .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 282f3af2d6eSRob Clark .max_hdeci_exp = MAX_HORZ_DECIMATION, 283f3af2d6eSRob Clark .max_vdeci_exp = MAX_VERT_DECIMATION, 284f3af2d6eSRob Clark }; 285f3af2d6eSRob Clark 286af776a3eSJonathan Marek static const struct dpu_caps sm8250_dpu_caps = { 287af776a3eSJonathan Marek .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 288af776a3eSJonathan Marek .max_mixer_blendstages = 0xb, 289d21fc5dfSDmitry Baryshkov .qseed_type = DPU_SSPP_SCALER_QSEED3LITE, 290af776a3eSJonathan Marek .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, /* TODO: v2.5 */ 291af776a3eSJonathan Marek .ubwc_version = DPU_HW_UBWC_VER_40, 292af776a3eSJonathan Marek .has_src_split = true, 293af776a3eSJonathan Marek .has_dim_layer = true, 294af776a3eSJonathan Marek .has_idle_pc = true, 295af776a3eSJonathan Marek .has_3d_merge = true, 296af776a3eSJonathan Marek .max_linewidth = 4096, 297af776a3eSJonathan Marek .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 298af776a3eSJonathan Marek }; 299af776a3eSJonathan Marek 300591e34a0SKrishna Manikandan static const struct dpu_caps sc7280_dpu_caps = { 301591e34a0SKrishna Manikandan .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 302591e34a0SKrishna Manikandan .max_mixer_blendstages = 0x7, 303591e34a0SKrishna Manikandan .qseed_type = DPU_SSPP_SCALER_QSEED4, 304591e34a0SKrishna Manikandan .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 305591e34a0SKrishna Manikandan .ubwc_version = DPU_HW_UBWC_VER_30, 306591e34a0SKrishna Manikandan .has_dim_layer = true, 307591e34a0SKrishna Manikandan .has_idle_pc = true, 308591e34a0SKrishna Manikandan .max_linewidth = 2400, 309591e34a0SKrishna Manikandan .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 310591e34a0SKrishna Manikandan }; 311591e34a0SKrishna Manikandan 31294391a14SAngeloGioacchino Del Regno static const struct dpu_mdp_cfg msm8998_mdp[] = { 31394391a14SAngeloGioacchino Del Regno { 31494391a14SAngeloGioacchino Del Regno .name = "top_0", .id = MDP_TOP, 31594391a14SAngeloGioacchino Del Regno .base = 0x0, .len = 0x458, 31694391a14SAngeloGioacchino Del Regno .features = 0, 31794391a14SAngeloGioacchino Del Regno .highest_bank_bit = 0x2, 31894391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 31994391a14SAngeloGioacchino Del Regno .reg_off = 0x2AC, .bit_off = 0}, 32094391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 32194391a14SAngeloGioacchino Del Regno .reg_off = 0x2B4, .bit_off = 0}, 32294391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 32394391a14SAngeloGioacchino Del Regno .reg_off = 0x2BC, .bit_off = 0}, 32494391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 32594391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 0}, 32694391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 32794391a14SAngeloGioacchino Del Regno .reg_off = 0x2AC, .bit_off = 8}, 32894391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 32994391a14SAngeloGioacchino Del Regno .reg_off = 0x2B4, .bit_off = 8}, 33094391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA2] = { 33194391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 8}, 33294391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_DMA3] = { 33394391a14SAngeloGioacchino Del Regno .reg_off = 0x2C4, .bit_off = 12}, 33494391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 33594391a14SAngeloGioacchino Del Regno .reg_off = 0x3A8, .bit_off = 15}, 33694391a14SAngeloGioacchino Del Regno .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 33794391a14SAngeloGioacchino Del Regno .reg_off = 0x3B0, .bit_off = 15}, 33894391a14SAngeloGioacchino Del Regno }, 33994391a14SAngeloGioacchino Del Regno }; 34094391a14SAngeloGioacchino Del Regno 3415334087eSLoic Poulain static const struct dpu_caps qcm2290_dpu_caps = { 3425334087eSLoic Poulain .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 3435334087eSLoic Poulain .max_mixer_blendstages = 0x4, 3445334087eSLoic Poulain .smart_dma_rev = DPU_SSPP_SMART_DMA_V2, 3455334087eSLoic Poulain .ubwc_version = DPU_HW_UBWC_VER_20, 3465334087eSLoic Poulain .has_dim_layer = true, 3475334087eSLoic Poulain .has_idle_pc = true, 3485334087eSLoic Poulain .max_linewidth = 2160, 3495334087eSLoic Poulain .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 3505334087eSLoic Poulain }; 3515334087eSLoic Poulain 352abda0d92SStephen Boyd static const struct dpu_mdp_cfg sdm845_mdp[] = { 35325fdd593SJeykumar Sankaran { 35425fdd593SJeykumar Sankaran .name = "top_0", .id = MDP_TOP, 35525fdd593SJeykumar Sankaran .base = 0x0, .len = 0x45C, 35603490e11SKuogee Hsieh .features = BIT(DPU_MDP_AUDIO_SELECT), 35725fdd593SJeykumar Sankaran .highest_bank_bit = 0x2, 35825fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 35925fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 0}, 36025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 36125fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 0}, 36225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 36325fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 0}, 36425fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 36525fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 0}, 36625fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 36725fdd593SJeykumar Sankaran .reg_off = 0x2AC, .bit_off = 8}, 36825fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 36925fdd593SJeykumar Sankaran .reg_off = 0x2B4, .bit_off = 8}, 37025fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 37125fdd593SJeykumar Sankaran .reg_off = 0x2BC, .bit_off = 8}, 37225fdd593SJeykumar Sankaran .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 37325fdd593SJeykumar Sankaran .reg_off = 0x2C4, .bit_off = 8}, 37425fdd593SJeykumar Sankaran }, 37525fdd593SJeykumar Sankaran }; 37625fdd593SJeykumar Sankaran 3777bdc0c4bSKalyan Thota static const struct dpu_mdp_cfg sc7180_mdp[] = { 3787bdc0c4bSKalyan Thota { 3797bdc0c4bSKalyan Thota .name = "top_0", .id = MDP_TOP, 3807bdc0c4bSKalyan Thota .base = 0x0, .len = 0x494, 3817bdc0c4bSKalyan Thota .features = 0, 3827bdc0c4bSKalyan Thota .highest_bank_bit = 0x3, 3837bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 3847bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 0}, 3857bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 3867bdc0c4bSKalyan Thota .reg_off = 0x2AC, .bit_off = 8}, 3877bdc0c4bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 3887b149f2bSKalyan Thota .reg_off = 0x2B4, .bit_off = 8}, 3897b149f2bSKalyan Thota .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 3907b149f2bSKalyan Thota .reg_off = 0x2C4, .bit_off = 8}, 3917bdc0c4bSKalyan Thota }, 3927bdc0c4bSKalyan Thota }; 3937bdc0c4bSKalyan Thota 394f3af2d6eSRob Clark static const struct dpu_mdp_cfg sc8180x_mdp[] = { 395f3af2d6eSRob Clark { 396f3af2d6eSRob Clark .name = "top_0", .id = MDP_TOP, 397f3af2d6eSRob Clark .base = 0x0, .len = 0x45C, 398f3af2d6eSRob Clark .features = 0, 399f3af2d6eSRob Clark .highest_bank_bit = 0x3, 400f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 401f3af2d6eSRob Clark .reg_off = 0x2AC, .bit_off = 0}, 402f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 403f3af2d6eSRob Clark .reg_off = 0x2B4, .bit_off = 0}, 404f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 405f3af2d6eSRob Clark .reg_off = 0x2BC, .bit_off = 0}, 406f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 407f3af2d6eSRob Clark .reg_off = 0x2C4, .bit_off = 0}, 408f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 409f3af2d6eSRob Clark .reg_off = 0x2AC, .bit_off = 8}, 410f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 411f3af2d6eSRob Clark .reg_off = 0x2B4, .bit_off = 8}, 412f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 413f3af2d6eSRob Clark .reg_off = 0x2BC, .bit_off = 8}, 414f3af2d6eSRob Clark .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 415f3af2d6eSRob Clark .reg_off = 0x2C4, .bit_off = 8}, 416f3af2d6eSRob Clark }, 417f3af2d6eSRob Clark }; 418f3af2d6eSRob Clark 419af776a3eSJonathan Marek static const struct dpu_mdp_cfg sm8250_mdp[] = { 420af776a3eSJonathan Marek { 421af776a3eSJonathan Marek .name = "top_0", .id = MDP_TOP, 422b910a020SRobert Foss .base = 0x0, .len = 0x494, 423af776a3eSJonathan Marek .features = 0, 424af776a3eSJonathan Marek .highest_bank_bit = 0x3, /* TODO: 2 for LP_DDR4 */ 425af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 426af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 0}, 427af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG1] = { 428af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 0}, 429af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG2] = { 430af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 0}, 431af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_VIG3] = { 432af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 0}, 433af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 434af776a3eSJonathan Marek .reg_off = 0x2AC, .bit_off = 8}, 435af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_DMA1] = { 436af776a3eSJonathan Marek .reg_off = 0x2B4, .bit_off = 8}, 437af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 438af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 8}, 439af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 440af776a3eSJonathan Marek .reg_off = 0x2C4, .bit_off = 8}, 441af776a3eSJonathan Marek .clk_ctrls[DPU_CLK_CTRL_REG_DMA] = { 442af776a3eSJonathan Marek .reg_off = 0x2BC, .bit_off = 20}, 443af776a3eSJonathan Marek }, 444af776a3eSJonathan Marek }; 445af776a3eSJonathan Marek 446591e34a0SKrishna Manikandan static const struct dpu_mdp_cfg sc7280_mdp[] = { 447591e34a0SKrishna Manikandan { 448591e34a0SKrishna Manikandan .name = "top_0", .id = MDP_TOP, 449591e34a0SKrishna Manikandan .base = 0x0, .len = 0x2014, 450591e34a0SKrishna Manikandan .highest_bank_bit = 0x1, 451591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 452591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 0}, 453591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 454591e34a0SKrishna Manikandan .reg_off = 0x2AC, .bit_off = 8}, 455591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR0] = { 456591e34a0SKrishna Manikandan .reg_off = 0x2B4, .bit_off = 8}, 457591e34a0SKrishna Manikandan .clk_ctrls[DPU_CLK_CTRL_CURSOR1] = { 458591e34a0SKrishna Manikandan .reg_off = 0x2C4, .bit_off = 8}, 459591e34a0SKrishna Manikandan }, 460591e34a0SKrishna Manikandan }; 461591e34a0SKrishna Manikandan 4625334087eSLoic Poulain static const struct dpu_mdp_cfg qcm2290_mdp[] = { 4635334087eSLoic Poulain { 4645334087eSLoic Poulain .name = "top_0", .id = MDP_TOP, 4655334087eSLoic Poulain .base = 0x0, .len = 0x494, 4665334087eSLoic Poulain .features = 0, 4675334087eSLoic Poulain .highest_bank_bit = 0x2, 4685334087eSLoic Poulain .clk_ctrls[DPU_CLK_CTRL_VIG0] = { 4695334087eSLoic Poulain .reg_off = 0x2AC, .bit_off = 0}, 4705334087eSLoic Poulain .clk_ctrls[DPU_CLK_CTRL_DMA0] = { 4715334087eSLoic Poulain .reg_off = 0x2AC, .bit_off = 8}, 4725334087eSLoic Poulain }, 4735334087eSLoic Poulain }; 4745334087eSLoic Poulain 47525fdd593SJeykumar Sankaran /************************************************************* 47625fdd593SJeykumar Sankaran * CTL sub blocks config 47725fdd593SJeykumar Sankaran *************************************************************/ 47894391a14SAngeloGioacchino Del Regno static const struct dpu_ctl_cfg msm8998_ctl[] = { 47994391a14SAngeloGioacchino Del Regno { 48094391a14SAngeloGioacchino Del Regno .name = "ctl_0", .id = CTL_0, 48194391a14SAngeloGioacchino Del Regno .base = 0x1000, .len = 0x94, 48294391a14SAngeloGioacchino Del Regno .features = BIT(DPU_CTL_SPLIT_DISPLAY), 48394391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 48494391a14SAngeloGioacchino Del Regno }, 48594391a14SAngeloGioacchino Del Regno { 48694391a14SAngeloGioacchino Del Regno .name = "ctl_1", .id = CTL_1, 48794391a14SAngeloGioacchino Del Regno .base = 0x1200, .len = 0x94, 48894391a14SAngeloGioacchino Del Regno .features = 0, 48994391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 49094391a14SAngeloGioacchino Del Regno }, 49194391a14SAngeloGioacchino Del Regno { 49294391a14SAngeloGioacchino Del Regno .name = "ctl_2", .id = CTL_2, 49394391a14SAngeloGioacchino Del Regno .base = 0x1400, .len = 0x94, 49494391a14SAngeloGioacchino Del Regno .features = BIT(DPU_CTL_SPLIT_DISPLAY), 49594391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 49694391a14SAngeloGioacchino Del Regno }, 49794391a14SAngeloGioacchino Del Regno { 49894391a14SAngeloGioacchino Del Regno .name = "ctl_3", .id = CTL_3, 49994391a14SAngeloGioacchino Del Regno .base = 0x1600, .len = 0x94, 50094391a14SAngeloGioacchino Del Regno .features = 0, 50194391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 50294391a14SAngeloGioacchino Del Regno }, 50394391a14SAngeloGioacchino Del Regno { 50494391a14SAngeloGioacchino Del Regno .name = "ctl_4", .id = CTL_4, 50594391a14SAngeloGioacchino Del Regno .base = 0x1800, .len = 0x94, 50694391a14SAngeloGioacchino Del Regno .features = 0, 50794391a14SAngeloGioacchino Del Regno .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 50894391a14SAngeloGioacchino Del Regno }, 50994391a14SAngeloGioacchino Del Regno }; 51094391a14SAngeloGioacchino Del Regno 511abda0d92SStephen Boyd static const struct dpu_ctl_cfg sdm845_ctl[] = { 51225fdd593SJeykumar Sankaran { 51325fdd593SJeykumar Sankaran .name = "ctl_0", .id = CTL_0, 51425fdd593SJeykumar Sankaran .base = 0x1000, .len = 0xE4, 515667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 516667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 51725fdd593SJeykumar Sankaran }, 51825fdd593SJeykumar Sankaran { 51925fdd593SJeykumar Sankaran .name = "ctl_1", .id = CTL_1, 52025fdd593SJeykumar Sankaran .base = 0x1200, .len = 0xE4, 521667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_SPLIT_DISPLAY), 522667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 52325fdd593SJeykumar Sankaran }, 52425fdd593SJeykumar Sankaran { 52525fdd593SJeykumar Sankaran .name = "ctl_2", .id = CTL_2, 52625fdd593SJeykumar Sankaran .base = 0x1400, .len = 0xE4, 527667e9985SDmitry Baryshkov .features = 0, 528667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 52925fdd593SJeykumar Sankaran }, 53025fdd593SJeykumar Sankaran { 53125fdd593SJeykumar Sankaran .name = "ctl_3", .id = CTL_3, 53225fdd593SJeykumar Sankaran .base = 0x1600, .len = 0xE4, 533667e9985SDmitry Baryshkov .features = 0, 534667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 53525fdd593SJeykumar Sankaran }, 53625fdd593SJeykumar Sankaran { 53725fdd593SJeykumar Sankaran .name = "ctl_4", .id = CTL_4, 53825fdd593SJeykumar Sankaran .base = 0x1800, .len = 0xE4, 539667e9985SDmitry Baryshkov .features = 0, 540667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 54125fdd593SJeykumar Sankaran }, 54225fdd593SJeykumar Sankaran }; 54325fdd593SJeykumar Sankaran 5447bdc0c4bSKalyan Thota static const struct dpu_ctl_cfg sc7180_ctl[] = { 5457bdc0c4bSKalyan Thota { 5467bdc0c4bSKalyan Thota .name = "ctl_0", .id = CTL_0, 5477bdc0c4bSKalyan Thota .base = 0x1000, .len = 0xE4, 548667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 549667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 5507bdc0c4bSKalyan Thota }, 5517bdc0c4bSKalyan Thota { 5527bdc0c4bSKalyan Thota .name = "ctl_1", .id = CTL_1, 5537bdc0c4bSKalyan Thota .base = 0x1200, .len = 0xE4, 554667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 555667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 5567bdc0c4bSKalyan Thota }, 5577bdc0c4bSKalyan Thota { 5587bdc0c4bSKalyan Thota .name = "ctl_2", .id = CTL_2, 5597bdc0c4bSKalyan Thota .base = 0x1400, .len = 0xE4, 560667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 561667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 5627bdc0c4bSKalyan Thota }, 5637bdc0c4bSKalyan Thota }; 5647bdc0c4bSKalyan Thota 565386fced3SJonathan Marek static const struct dpu_ctl_cfg sm8150_ctl[] = { 566386fced3SJonathan Marek { 567386fced3SJonathan Marek .name = "ctl_0", .id = CTL_0, 568386fced3SJonathan Marek .base = 0x1000, .len = 0x1e0, 569667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 570667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 571386fced3SJonathan Marek }, 572386fced3SJonathan Marek { 573386fced3SJonathan Marek .name = "ctl_1", .id = CTL_1, 574386fced3SJonathan Marek .base = 0x1200, .len = 0x1e0, 575667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG) | BIT(DPU_CTL_SPLIT_DISPLAY), 576667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 577386fced3SJonathan Marek }, 578386fced3SJonathan Marek { 579386fced3SJonathan Marek .name = "ctl_2", .id = CTL_2, 580386fced3SJonathan Marek .base = 0x1400, .len = 0x1e0, 581667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 582667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 583386fced3SJonathan Marek }, 584386fced3SJonathan Marek { 585386fced3SJonathan Marek .name = "ctl_3", .id = CTL_3, 586386fced3SJonathan Marek .base = 0x1600, .len = 0x1e0, 587667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 588667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 589386fced3SJonathan Marek }, 590386fced3SJonathan Marek { 591386fced3SJonathan Marek .name = "ctl_4", .id = CTL_4, 592386fced3SJonathan Marek .base = 0x1800, .len = 0x1e0, 593667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 594667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 13), 595386fced3SJonathan Marek }, 596386fced3SJonathan Marek { 597386fced3SJonathan Marek .name = "ctl_5", .id = CTL_5, 598386fced3SJonathan Marek .base = 0x1a00, .len = 0x1e0, 599667e9985SDmitry Baryshkov .features = BIT(DPU_CTL_ACTIVE_CFG), 600667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 23), 601386fced3SJonathan Marek }, 602386fced3SJonathan Marek }; 603386fced3SJonathan Marek 604591e34a0SKrishna Manikandan static const struct dpu_ctl_cfg sc7280_ctl[] = { 605591e34a0SKrishna Manikandan { 606591e34a0SKrishna Manikandan .name = "ctl_0", .id = CTL_0, 607591e34a0SKrishna Manikandan .base = 0x15000, .len = 0x1E8, 608667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 609667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 610591e34a0SKrishna Manikandan }, 611591e34a0SKrishna Manikandan { 612591e34a0SKrishna Manikandan .name = "ctl_1", .id = CTL_1, 613591e34a0SKrishna Manikandan .base = 0x16000, .len = 0x1E8, 614667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 615667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 616591e34a0SKrishna Manikandan }, 617591e34a0SKrishna Manikandan { 618591e34a0SKrishna Manikandan .name = "ctl_2", .id = CTL_2, 619591e34a0SKrishna Manikandan .base = 0x17000, .len = 0x1E8, 620667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 621667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 622591e34a0SKrishna Manikandan }, 623591e34a0SKrishna Manikandan { 624591e34a0SKrishna Manikandan .name = "ctl_3", .id = CTL_3, 625591e34a0SKrishna Manikandan .base = 0x18000, .len = 0x1E8, 626667e9985SDmitry Baryshkov .features = CTL_SC7280_MASK, 627667e9985SDmitry Baryshkov .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 628591e34a0SKrishna Manikandan }, 629591e34a0SKrishna Manikandan }; 630591e34a0SKrishna Manikandan 6315334087eSLoic Poulain static const struct dpu_ctl_cfg qcm2290_ctl[] = { 6325334087eSLoic Poulain { 6335334087eSLoic Poulain .name = "ctl_0", .id = CTL_0, 6345334087eSLoic Poulain .base = 0x1000, .len = 0x1dc, 6355334087eSLoic Poulain .features = BIT(DPU_CTL_ACTIVE_CFG), 6365334087eSLoic Poulain .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 6375334087eSLoic Poulain }, 6385334087eSLoic Poulain }; 6395334087eSLoic Poulain 64025fdd593SJeykumar Sankaran /************************************************************* 64125fdd593SJeykumar Sankaran * SSPP sub blocks config 64225fdd593SJeykumar Sankaran *************************************************************/ 64325fdd593SJeykumar Sankaran 64425fdd593SJeykumar Sankaran /* SSPP common configuration */ 64525fdd593SJeykumar Sankaran 646b75ab05aSShubhashree Dhar #define _VIG_SBLK(num, sdma_pri, qseed_ver) \ 64725fdd593SJeykumar Sankaran { \ 64825fdd593SJeykumar Sankaran .maxdwnscale = MAX_DOWNSCALE_RATIO, \ 64925fdd593SJeykumar Sankaran .maxupscale = MAX_UPSCALE_RATIO, \ 65025fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 65125fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 65225fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 65325fdd593SJeykumar Sankaran .scaler_blk = {.name = STRCAT("sspp_scaler", num), \ 654b75ab05aSShubhashree Dhar .id = qseed_ver, \ 65525fdd593SJeykumar Sankaran .base = 0xa00, .len = 0xa0,}, \ 65625fdd593SJeykumar Sankaran .csc_blk = {.name = STRCAT("sspp_csc", num), \ 65725fdd593SJeykumar Sankaran .id = DPU_SSPP_CSC_10BIT, \ 65825fdd593SJeykumar Sankaran .base = 0x1a00, .len = 0x100,}, \ 65925fdd593SJeykumar Sankaran .format_list = plane_formats_yuv, \ 660e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats_yuv), \ 66125fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 662e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 66325fdd593SJeykumar Sankaran } 66425fdd593SJeykumar Sankaran 66525fdd593SJeykumar Sankaran #define _DMA_SBLK(num, sdma_pri) \ 66625fdd593SJeykumar Sankaran { \ 66725fdd593SJeykumar Sankaran .maxdwnscale = SSPP_UNITY_SCALE, \ 66825fdd593SJeykumar Sankaran .maxupscale = SSPP_UNITY_SCALE, \ 66925fdd593SJeykumar Sankaran .smart_dma_priority = sdma_pri, \ 67025fdd593SJeykumar Sankaran .src_blk = {.name = STRCAT("sspp_src_", num), \ 67125fdd593SJeykumar Sankaran .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 67225fdd593SJeykumar Sankaran .format_list = plane_formats, \ 673e6b63a7bSFritz Koenig .num_formats = ARRAY_SIZE(plane_formats), \ 67425fdd593SJeykumar Sankaran .virt_format_list = plane_formats, \ 675e6b63a7bSFritz Koenig .virt_num_formats = ARRAY_SIZE(plane_formats), \ 67625fdd593SJeykumar Sankaran } 67725fdd593SJeykumar Sankaran 67894391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_0 = 67994391a14SAngeloGioacchino Del Regno _VIG_SBLK("0", 0, DPU_SSPP_SCALER_QSEED3); 68094391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_1 = 68194391a14SAngeloGioacchino Del Regno _VIG_SBLK("1", 0, DPU_SSPP_SCALER_QSEED3); 68294391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_2 = 68394391a14SAngeloGioacchino Del Regno _VIG_SBLK("2", 0, DPU_SSPP_SCALER_QSEED3); 68494391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_sub_blks msm8998_vig_sblk_3 = 68594391a14SAngeloGioacchino Del Regno _VIG_SBLK("3", 0, DPU_SSPP_SCALER_QSEED3); 68694391a14SAngeloGioacchino Del Regno 687b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_0 = 688b75ab05aSShubhashree Dhar _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3); 689b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_1 = 690b75ab05aSShubhashree Dhar _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3); 691b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_2 = 692b75ab05aSShubhashree Dhar _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3); 693b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sdm845_vig_sblk_3 = 694b75ab05aSShubhashree Dhar _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3); 69525fdd593SJeykumar Sankaran 69625fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_0 = _DMA_SBLK("8", 1); 69725fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_1 = _DMA_SBLK("9", 2); 69825fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_2 = _DMA_SBLK("10", 3); 69925fdd593SJeykumar Sankaran static const struct dpu_sspp_sub_blks sdm845_dma_sblk_3 = _DMA_SBLK("11", 4); 70025fdd593SJeykumar Sankaran 70107ca1fc0SSravanthi Kollukuduru #define SSPP_BLK(_name, _id, _base, _features, \ 70207ca1fc0SSravanthi Kollukuduru _sblk, _xinid, _type, _clkctrl) \ 70325fdd593SJeykumar Sankaran { \ 70425fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 70525fdd593SJeykumar Sankaran .base = _base, .len = 0x1c8, \ 70607ca1fc0SSravanthi Kollukuduru .features = _features, \ 70725fdd593SJeykumar Sankaran .sblk = &_sblk, \ 70825fdd593SJeykumar Sankaran .xin_id = _xinid, \ 70907ca1fc0SSravanthi Kollukuduru .type = _type, \ 71025fdd593SJeykumar Sankaran .clk_ctrl = _clkctrl \ 71125fdd593SJeykumar Sankaran } 71225fdd593SJeykumar Sankaran 71394391a14SAngeloGioacchino Del Regno static const struct dpu_sspp_cfg msm8998_sspp[] = { 71494391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_MSM8998_MASK, 71594391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 71694391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_MSM8998_MASK, 71794391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 71894391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_MSM8998_MASK, 71994391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 72094391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_MSM8998_MASK, 72194391a14SAngeloGioacchino Del Regno msm8998_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 72294391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_MSM8998_MASK, 72394391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 72494391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_MSM8998_MASK, 72594391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 72694391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_MSM8998_MASK, 72794391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 72894391a14SAngeloGioacchino Del Regno SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_MSM8998_MASK, 72994391a14SAngeloGioacchino Del Regno sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 73094391a14SAngeloGioacchino Del Regno }; 73194391a14SAngeloGioacchino Del Regno 732abda0d92SStephen Boyd static const struct dpu_sspp_cfg sdm845_sspp[] = { 73307ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SDM845_MASK, 73407ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 73507ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SDM845_MASK, 73607ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 73707ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SDM845_MASK, 73807ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 73907ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SDM845_MASK, 74007ca1fc0SSravanthi Kollukuduru sdm845_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 74107ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 74207ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 74307ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 74407ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 74507ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 74607ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 74707ca1fc0SSravanthi Kollukuduru SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 74807ca1fc0SSravanthi Kollukuduru sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 74925fdd593SJeykumar Sankaran }; 75025fdd593SJeykumar Sankaran 751b75ab05aSShubhashree Dhar static const struct dpu_sspp_sub_blks sc7180_vig_sblk_0 = 752b75ab05aSShubhashree Dhar _VIG_SBLK("0", 4, DPU_SSPP_SCALER_QSEED4); 753b75ab05aSShubhashree Dhar 7547bdc0c4bSKalyan Thota static const struct dpu_sspp_cfg sc7180_sspp[] = { 7557bdc0c4bSKalyan Thota SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 756b75ab05aSShubhashree Dhar sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 7577bdc0c4bSKalyan Thota SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 7587bdc0c4bSKalyan Thota sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 7597b149f2bSKalyan Thota SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 7607b149f2bSKalyan Thota sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 7617bdc0c4bSKalyan Thota SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 7627b149f2bSKalyan Thota sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 7637bdc0c4bSKalyan Thota }; 7647bdc0c4bSKalyan Thota 765d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_0 = 766d21fc5dfSDmitry Baryshkov _VIG_SBLK("0", 5, DPU_SSPP_SCALER_QSEED3LITE); 767d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_1 = 768d21fc5dfSDmitry Baryshkov _VIG_SBLK("1", 6, DPU_SSPP_SCALER_QSEED3LITE); 769d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_2 = 770d21fc5dfSDmitry Baryshkov _VIG_SBLK("2", 7, DPU_SSPP_SCALER_QSEED3LITE); 771d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_sub_blks sm8250_vig_sblk_3 = 772d21fc5dfSDmitry Baryshkov _VIG_SBLK("3", 8, DPU_SSPP_SCALER_QSEED3LITE); 773d21fc5dfSDmitry Baryshkov 774d21fc5dfSDmitry Baryshkov static const struct dpu_sspp_cfg sm8250_sspp[] = { 775d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SM8250_MASK, 776d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 777d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_1", SSPP_VIG1, 0x6000, VIG_SM8250_MASK, 778d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_1, 4, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG1), 779d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_2", SSPP_VIG2, 0x8000, VIG_SM8250_MASK, 780d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_2, 8, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG2), 781d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_3", SSPP_VIG3, 0xa000, VIG_SM8250_MASK, 782d21fc5dfSDmitry Baryshkov sm8250_vig_sblk_3, 12, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG3), 783d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 784d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 785d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_SDM845_MASK, 786d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA1), 787d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 788d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 789d21fc5dfSDmitry Baryshkov SSPP_BLK("sspp_11", SSPP_DMA3, 0x2a000, DMA_CURSOR_SDM845_MASK, 790d21fc5dfSDmitry Baryshkov sdm845_dma_sblk_3, 13, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 791d21fc5dfSDmitry Baryshkov }; 792d21fc5dfSDmitry Baryshkov 793591e34a0SKrishna Manikandan static const struct dpu_sspp_cfg sc7280_sspp[] = { 794591e34a0SKrishna Manikandan SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_SC7180_MASK, 795591e34a0SKrishna Manikandan sc7180_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 796591e34a0SKrishna Manikandan SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 797591e34a0SKrishna Manikandan sdm845_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 798591e34a0SKrishna Manikandan SSPP_BLK("sspp_9", SSPP_DMA1, 0x26000, DMA_CURSOR_SDM845_MASK, 799591e34a0SKrishna Manikandan sdm845_dma_sblk_1, 5, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR0), 800591e34a0SKrishna Manikandan SSPP_BLK("sspp_10", SSPP_DMA2, 0x28000, DMA_CURSOR_SDM845_MASK, 801591e34a0SKrishna Manikandan sdm845_dma_sblk_2, 9, SSPP_TYPE_DMA, DPU_CLK_CTRL_CURSOR1), 802591e34a0SKrishna Manikandan }; 803591e34a0SKrishna Manikandan 8045334087eSLoic Poulain 8055334087eSLoic Poulain #define _VIG_SBLK_NOSCALE(num, sdma_pri) \ 8065334087eSLoic Poulain { \ 8075334087eSLoic Poulain .maxdwnscale = SSPP_UNITY_SCALE, \ 8085334087eSLoic Poulain .maxupscale = SSPP_UNITY_SCALE, \ 8095334087eSLoic Poulain .smart_dma_priority = sdma_pri, \ 8105334087eSLoic Poulain .src_blk = {.name = STRCAT("sspp_src_", num), \ 8115334087eSLoic Poulain .id = DPU_SSPP_SRC, .base = 0x00, .len = 0x150,}, \ 8125334087eSLoic Poulain .format_list = plane_formats_yuv, \ 8135334087eSLoic Poulain .num_formats = ARRAY_SIZE(plane_formats_yuv), \ 8145334087eSLoic Poulain .virt_format_list = plane_formats, \ 8155334087eSLoic Poulain .virt_num_formats = ARRAY_SIZE(plane_formats), \ 8165334087eSLoic Poulain } 8175334087eSLoic Poulain 8185334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_vig_sblk_0 = _VIG_SBLK_NOSCALE("0", 2); 8195334087eSLoic Poulain static const struct dpu_sspp_sub_blks qcm2290_dma_sblk_0 = _DMA_SBLK("8", 1); 8205334087eSLoic Poulain 8215334087eSLoic Poulain static const struct dpu_sspp_cfg qcm2290_sspp[] = { 8225334087eSLoic Poulain SSPP_BLK("sspp_0", SSPP_VIG0, 0x4000, VIG_QCM2290_MASK, 8235334087eSLoic Poulain qcm2290_vig_sblk_0, 0, SSPP_TYPE_VIG, DPU_CLK_CTRL_VIG0), 8245334087eSLoic Poulain SSPP_BLK("sspp_8", SSPP_DMA0, 0x24000, DMA_SDM845_MASK, 8255334087eSLoic Poulain qcm2290_dma_sblk_0, 1, SSPP_TYPE_DMA, DPU_CLK_CTRL_DMA0), 8265334087eSLoic Poulain }; 8275334087eSLoic Poulain 82825fdd593SJeykumar Sankaran /************************************************************* 82925fdd593SJeykumar Sankaran * MIXER sub blocks config 83025fdd593SJeykumar Sankaran *************************************************************/ 8317bdc0c4bSKalyan Thota 832e47616dfSKalyan Thota #define LM_BLK(_name, _id, _base, _fmask, _sblk, _pp, _lmpair, _dspp) \ 83325fdd593SJeykumar Sankaran { \ 83425fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 83525fdd593SJeykumar Sankaran .base = _base, .len = 0x320, \ 8367bdc0c4bSKalyan Thota .features = _fmask, \ 8377bdc0c4bSKalyan Thota .sblk = _sblk, \ 83825fdd593SJeykumar Sankaran .pingpong = _pp, \ 839e47616dfSKalyan Thota .lm_pair_mask = (1 << _lmpair), \ 840e47616dfSKalyan Thota .dspp = _dspp \ 84125fdd593SJeykumar Sankaran } 84225fdd593SJeykumar Sankaran 84394391a14SAngeloGioacchino Del Regno /* MSM8998 */ 84494391a14SAngeloGioacchino Del Regno 84594391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks msm8998_lm_sblk = { 84694391a14SAngeloGioacchino Del Regno .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 84794391a14SAngeloGioacchino Del Regno .maxblendstages = 7, /* excluding base layer */ 84894391a14SAngeloGioacchino Del Regno .blendstage_base = { /* offsets relative to mixer base */ 84994391a14SAngeloGioacchino Del Regno 0x20, 0x50, 0x80, 0xb0, 0x230, 85094391a14SAngeloGioacchino Del Regno 0x260, 0x290 85194391a14SAngeloGioacchino Del Regno }, 85294391a14SAngeloGioacchino Del Regno }; 85394391a14SAngeloGioacchino Del Regno 85494391a14SAngeloGioacchino Del Regno static const struct dpu_lm_cfg msm8998_lm[] = { 85594391a14SAngeloGioacchino Del Regno LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 85694391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_0, LM_2, DSPP_0), 85794391a14SAngeloGioacchino Del Regno LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 85894391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_1, LM_5, DSPP_1), 85994391a14SAngeloGioacchino Del Regno LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 86094391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_2, LM_0, 0), 86194391a14SAngeloGioacchino Del Regno LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, 86294391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_MAX, 0, 0), 86394391a14SAngeloGioacchino Del Regno LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, 86494391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_MAX, 0, 0), 86594391a14SAngeloGioacchino Del Regno LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 86694391a14SAngeloGioacchino Del Regno &msm8998_lm_sblk, PINGPONG_3, LM_1, 0), 86794391a14SAngeloGioacchino Del Regno }; 86894391a14SAngeloGioacchino Del Regno 86994391a14SAngeloGioacchino Del Regno /* SDM845 */ 87094391a14SAngeloGioacchino Del Regno 87194391a14SAngeloGioacchino Del Regno static const struct dpu_lm_sub_blks sdm845_lm_sblk = { 87294391a14SAngeloGioacchino Del Regno .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 87394391a14SAngeloGioacchino Del Regno .maxblendstages = 11, /* excluding base layer */ 87494391a14SAngeloGioacchino Del Regno .blendstage_base = { /* offsets relative to mixer base */ 87594391a14SAngeloGioacchino Del Regno 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 87694391a14SAngeloGioacchino Del Regno 0xb0, 0xc8, 0xe0, 0xf8, 0x110 87794391a14SAngeloGioacchino Del Regno }, 87894391a14SAngeloGioacchino Del Regno }; 87994391a14SAngeloGioacchino Del Regno 880abda0d92SStephen Boyd static const struct dpu_lm_cfg sdm845_lm[] = { 8817bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 882e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_0, LM_1, 0), 8837bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 884e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_1, LM_0, 0), 8857bdc0c4bSKalyan Thota LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 886e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_2, LM_5, 0), 8877bdc0c4bSKalyan Thota LM_BLK("lm_3", LM_3, 0x0, MIXER_SDM845_MASK, 888e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 8897bdc0c4bSKalyan Thota LM_BLK("lm_4", LM_4, 0x0, MIXER_SDM845_MASK, 890e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_MAX, 0, 0), 8917bdc0c4bSKalyan Thota LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 892e47616dfSKalyan Thota &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 8937bdc0c4bSKalyan Thota }; 8947bdc0c4bSKalyan Thota 8957bdc0c4bSKalyan Thota /* SC7180 */ 8967bdc0c4bSKalyan Thota 8977bdc0c4bSKalyan Thota static const struct dpu_lm_sub_blks sc7180_lm_sblk = { 8987bdc0c4bSKalyan Thota .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 8997bdc0c4bSKalyan Thota .maxblendstages = 7, /* excluding base layer */ 9007bdc0c4bSKalyan Thota .blendstage_base = { /* offsets relative to mixer base */ 9017bdc0c4bSKalyan Thota 0x20, 0x38, 0x50, 0x68, 0x80, 0x98, 0xb0 9027bdc0c4bSKalyan Thota }, 9037bdc0c4bSKalyan Thota }; 9047bdc0c4bSKalyan Thota 9057bdc0c4bSKalyan Thota static const struct dpu_lm_cfg sc7180_lm[] = { 9067bdc0c4bSKalyan Thota LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 907e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 9087bdc0c4bSKalyan Thota LM_BLK("lm_1", LM_1, 0x45000, MIXER_SC7180_MASK, 909e47616dfSKalyan Thota &sc7180_lm_sblk, PINGPONG_1, LM_0, 0), 91025fdd593SJeykumar Sankaran }; 91125fdd593SJeykumar Sankaran 912386fced3SJonathan Marek /* SM8150 */ 913386fced3SJonathan Marek 914386fced3SJonathan Marek static const struct dpu_lm_cfg sm8150_lm[] = { 915386fced3SJonathan Marek LM_BLK("lm_0", LM_0, 0x44000, MIXER_SDM845_MASK, 91605ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_0, LM_1, DSPP_0), 917386fced3SJonathan Marek LM_BLK("lm_1", LM_1, 0x45000, MIXER_SDM845_MASK, 91805ae91d9SDmitry Baryshkov &sdm845_lm_sblk, PINGPONG_1, LM_0, DSPP_1), 919386fced3SJonathan Marek LM_BLK("lm_2", LM_2, 0x46000, MIXER_SDM845_MASK, 920386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_2, LM_3, 0), 921386fced3SJonathan Marek LM_BLK("lm_3", LM_3, 0x47000, MIXER_SDM845_MASK, 922386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_3, LM_2, 0), 923386fced3SJonathan Marek LM_BLK("lm_4", LM_4, 0x48000, MIXER_SDM845_MASK, 924386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_4, LM_5, 0), 925386fced3SJonathan Marek LM_BLK("lm_5", LM_5, 0x49000, MIXER_SDM845_MASK, 926386fced3SJonathan Marek &sdm845_lm_sblk, PINGPONG_5, LM_4, 0), 927386fced3SJonathan Marek }; 928386fced3SJonathan Marek 929591e34a0SKrishna Manikandan static const struct dpu_lm_cfg sc7280_lm[] = { 930591e34a0SKrishna Manikandan LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 931591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_0, 0, 0), 932591e34a0SKrishna Manikandan LM_BLK("lm_2", LM_2, 0x46000, MIXER_SC7180_MASK, 933591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_2, LM_3, 0), 934591e34a0SKrishna Manikandan LM_BLK("lm_3", LM_3, 0x47000, MIXER_SC7180_MASK, 935591e34a0SKrishna Manikandan &sc7180_lm_sblk, PINGPONG_3, LM_2, 0), 936591e34a0SKrishna Manikandan }; 937591e34a0SKrishna Manikandan 9385334087eSLoic Poulain /* QCM2290 */ 9395334087eSLoic Poulain 9405334087eSLoic Poulain static const struct dpu_lm_sub_blks qcm2290_lm_sblk = { 9415334087eSLoic Poulain .maxwidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 9425334087eSLoic Poulain .maxblendstages = 4, /* excluding base layer */ 9435334087eSLoic Poulain .blendstage_base = { /* offsets relative to mixer base */ 9445334087eSLoic Poulain 0x20, 0x38, 0x50, 0x68 9455334087eSLoic Poulain }, 9465334087eSLoic Poulain }; 9475334087eSLoic Poulain 9485334087eSLoic Poulain static const struct dpu_lm_cfg qcm2290_lm[] = { 9495334087eSLoic Poulain LM_BLK("lm_0", LM_0, 0x44000, MIXER_SC7180_MASK, 9505334087eSLoic Poulain &qcm2290_lm_sblk, PINGPONG_0, 0, DSPP_0), 9515334087eSLoic Poulain }; 9525334087eSLoic Poulain 95325fdd593SJeykumar Sankaran /************************************************************* 954e47616dfSKalyan Thota * DSPP sub blocks config 955e47616dfSKalyan Thota *************************************************************/ 95694391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_sub_blks msm8998_dspp_sblk = { 95794391a14SAngeloGioacchino Del Regno .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 95894391a14SAngeloGioacchino Del Regno .len = 0x90, .version = 0x10007}, 95994391a14SAngeloGioacchino Del Regno .gc = { .id = DPU_DSPP_GC, .base = 0x17c0, 96094391a14SAngeloGioacchino Del Regno .len = 0x90, .version = 0x10007}, 96194391a14SAngeloGioacchino Del Regno }; 96294391a14SAngeloGioacchino Del Regno 9634259ff7aSKalyan Thota static const struct dpu_dspp_sub_blks sc7180_dspp_sblk = { 9644259ff7aSKalyan Thota .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 9654259ff7aSKalyan Thota .len = 0x90, .version = 0x10000}, 9664259ff7aSKalyan Thota }; 9674259ff7aSKalyan Thota 96805ae91d9SDmitry Baryshkov static const struct dpu_dspp_sub_blks sm8150_dspp_sblk = { 96905ae91d9SDmitry Baryshkov .pcc = {.id = DPU_DSPP_PCC, .base = 0x1700, 97005ae91d9SDmitry Baryshkov .len = 0x90, .version = 0x40000}, 97105ae91d9SDmitry Baryshkov }; 97205ae91d9SDmitry Baryshkov 973862314bcSAngeloGioacchino Del Regno #define DSPP_BLK(_name, _id, _base, _mask, _sblk) \ 974e47616dfSKalyan Thota {\ 975e47616dfSKalyan Thota .name = _name, .id = _id, \ 976e47616dfSKalyan Thota .base = _base, .len = 0x1800, \ 977862314bcSAngeloGioacchino Del Regno .features = _mask, \ 97805ae91d9SDmitry Baryshkov .sblk = _sblk \ 979e47616dfSKalyan Thota } 980e47616dfSKalyan Thota 98194391a14SAngeloGioacchino Del Regno static const struct dpu_dspp_cfg msm8998_dspp[] = { 98294391a14SAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_MSM8998_MASK, 98394391a14SAngeloGioacchino Del Regno &msm8998_dspp_sblk), 98494391a14SAngeloGioacchino Del Regno DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_MSM8998_MASK, 98594391a14SAngeloGioacchino Del Regno &msm8998_dspp_sblk), 98694391a14SAngeloGioacchino Del Regno }; 98794391a14SAngeloGioacchino Del Regno 988e47616dfSKalyan Thota static const struct dpu_dspp_cfg sc7180_dspp[] = { 989862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 990862314bcSAngeloGioacchino Del Regno &sc7180_dspp_sblk), 99105ae91d9SDmitry Baryshkov }; 99205ae91d9SDmitry Baryshkov 99305ae91d9SDmitry Baryshkov static const struct dpu_dspp_cfg sm8150_dspp[] = { 994862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 995862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 996862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_1", DSPP_1, 0x56000, DSPP_SC7180_MASK, 997862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 998862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_2", DSPP_2, 0x58000, DSPP_SC7180_MASK, 999862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 1000862314bcSAngeloGioacchino Del Regno DSPP_BLK("dspp_3", DSPP_3, 0x5a000, DSPP_SC7180_MASK, 1001862314bcSAngeloGioacchino Del Regno &sm8150_dspp_sblk), 1002e47616dfSKalyan Thota }; 1003386fced3SJonathan Marek 10045334087eSLoic Poulain static const struct dpu_dspp_cfg qcm2290_dspp[] = { 10055334087eSLoic Poulain DSPP_BLK("dspp_0", DSPP_0, 0x54000, DSPP_SC7180_MASK, 10065334087eSLoic Poulain &sm8150_dspp_sblk), 10075334087eSLoic Poulain }; 10085334087eSLoic Poulain 1009e47616dfSKalyan Thota /************************************************************* 101025fdd593SJeykumar Sankaran * PINGPONG sub blocks config 101125fdd593SJeykumar Sankaran *************************************************************/ 101225fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk_te = { 101325fdd593SJeykumar Sankaran .te2 = {.id = DPU_PINGPONG_TE2, .base = 0x2000, .len = 0x0, 101425fdd593SJeykumar Sankaran .version = 0x1}, 101525fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 101625fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 101725fdd593SJeykumar Sankaran }; 101825fdd593SJeykumar Sankaran 101925fdd593SJeykumar Sankaran static const struct dpu_pingpong_sub_blks sdm845_pp_sblk = { 102025fdd593SJeykumar Sankaran .dither = {.id = DPU_PINGPONG_DITHER, .base = 0x30e0, 102125fdd593SJeykumar Sankaran .len = 0x20, .version = 0x10000}, 102225fdd593SJeykumar Sankaran }; 102325fdd593SJeykumar Sankaran 1024591e34a0SKrishna Manikandan static const struct dpu_pingpong_sub_blks sc7280_pp_sblk = { 1025591e34a0SKrishna Manikandan .dither = {.id = DPU_PINGPONG_DITHER, .base = 0xe0, 1026591e34a0SKrishna Manikandan .len = 0x20, .version = 0x20000}, 1027591e34a0SKrishna Manikandan }; 1028591e34a0SKrishna Manikandan 1029667e9985SDmitry Baryshkov #define PP_BLK_TE(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 103025fdd593SJeykumar Sankaran {\ 103125fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 103225fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 103325fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_SPLIT_MASK, \ 10344369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 1035667e9985SDmitry Baryshkov .sblk = &_sblk, \ 1036667e9985SDmitry Baryshkov .intr_done = _done, \ 1037667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 103825fdd593SJeykumar Sankaran } 1039667e9985SDmitry Baryshkov #define PP_BLK(_name, _id, _base, _merge_3d, _sblk, _done, _rdptr) \ 104025fdd593SJeykumar Sankaran {\ 104125fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 104225fdd593SJeykumar Sankaran .base = _base, .len = 0xd4, \ 104325fdd593SJeykumar Sankaran .features = PINGPONG_SDM845_MASK, \ 10444369c93cSDmitry Baryshkov .merge_3d = _merge_3d, \ 1045667e9985SDmitry Baryshkov .sblk = &_sblk, \ 1046667e9985SDmitry Baryshkov .intr_done = _done, \ 1047667e9985SDmitry Baryshkov .intr_rdptr = _rdptr, \ 104825fdd593SJeykumar Sankaran } 104925fdd593SJeykumar Sankaran 1050abda0d92SStephen Boyd static const struct dpu_pingpong_cfg sdm845_pp[] = { 1051667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, 1052667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 1053667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 1054667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, 1055667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 1056667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 1057667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, 0, sdm845_pp_sblk, 1058667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 1059667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 1060667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, 0, sdm845_pp_sblk, 1061667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 1062667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 106325fdd593SJeykumar Sankaran }; 106425fdd593SJeykumar Sankaran 10657bdc0c4bSKalyan Thota static struct dpu_pingpong_cfg sc7180_pp[] = { 1066667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk_te, -1, -1), 1067667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, 0, sdm845_pp_sblk_te, -1, -1), 10687bdc0c4bSKalyan Thota }; 10697bdc0c4bSKalyan Thota 1070386fced3SJonathan Marek static const struct dpu_pingpong_cfg sm8150_pp[] = { 1071667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_0", PINGPONG_0, 0x70000, MERGE_3D_0, sdm845_pp_sblk_te, 1072667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 1073667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 1074667e9985SDmitry Baryshkov PP_BLK_TE("pingpong_1", PINGPONG_1, 0x70800, MERGE_3D_0, sdm845_pp_sblk_te, 1075667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 1076667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13)), 1077667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x71000, MERGE_3D_1, sdm845_pp_sblk, 1078667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 10), 1079667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 14)), 1080667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x71800, MERGE_3D_1, sdm845_pp_sblk, 1081667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 11), 1082667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 15)), 1083667e9985SDmitry Baryshkov PP_BLK("pingpong_4", PINGPONG_4, 0x72000, MERGE_3D_2, sdm845_pp_sblk, 1084667e9985SDmitry Baryshkov DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 30), 1085667e9985SDmitry Baryshkov -1), 1086667e9985SDmitry Baryshkov PP_BLK("pingpong_5", PINGPONG_5, 0x72800, MERGE_3D_2, sdm845_pp_sblk, 10873431c17bSRobert Foss DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 31), 1088667e9985SDmitry Baryshkov -1), 10894369c93cSDmitry Baryshkov }; 10904369c93cSDmitry Baryshkov 10915334087eSLoic Poulain static struct dpu_pingpong_cfg qcm2290_pp[] = { 10925334087eSLoic Poulain PP_BLK("pingpong_0", PINGPONG_0, 0x70000, 0, sdm845_pp_sblk, 10935334087eSLoic Poulain DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 10945334087eSLoic Poulain DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12)), 10955334087eSLoic Poulain }; 10965334087eSLoic Poulain 10974369c93cSDmitry Baryshkov /************************************************************* 10984369c93cSDmitry Baryshkov * MERGE_3D sub blocks config 10994369c93cSDmitry Baryshkov *************************************************************/ 11004369c93cSDmitry Baryshkov #define MERGE_3D_BLK(_name, _id, _base) \ 11014369c93cSDmitry Baryshkov {\ 11024369c93cSDmitry Baryshkov .name = _name, .id = _id, \ 11034369c93cSDmitry Baryshkov .base = _base, .len = 0x100, \ 11044369c93cSDmitry Baryshkov .features = MERGE_3D_SM8150_MASK, \ 11054369c93cSDmitry Baryshkov .sblk = NULL \ 11064369c93cSDmitry Baryshkov } 11074369c93cSDmitry Baryshkov 11084369c93cSDmitry Baryshkov static const struct dpu_merge_3d_cfg sm8150_merge_3d[] = { 11094369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_0", MERGE_3D_0, 0x83000), 11104369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_1", MERGE_3D_1, 0x83100), 11114369c93cSDmitry Baryshkov MERGE_3D_BLK("merge_3d_2", MERGE_3D_2, 0x83200), 1112386fced3SJonathan Marek }; 1113386fced3SJonathan Marek 1114591e34a0SKrishna Manikandan static const struct dpu_pingpong_cfg sc7280_pp[] = { 1115667e9985SDmitry Baryshkov PP_BLK("pingpong_0", PINGPONG_0, 0x59000, 0, sc7280_pp_sblk, -1, -1), 1116667e9985SDmitry Baryshkov PP_BLK("pingpong_1", PINGPONG_1, 0x6a000, 0, sc7280_pp_sblk, -1, -1), 1117667e9985SDmitry Baryshkov PP_BLK("pingpong_2", PINGPONG_2, 0x6b000, 0, sc7280_pp_sblk, -1, -1), 1118667e9985SDmitry Baryshkov PP_BLK("pingpong_3", PINGPONG_3, 0x6c000, 0, sc7280_pp_sblk, -1, -1), 1119591e34a0SKrishna Manikandan }; 112025fdd593SJeykumar Sankaran /************************************************************* 112125fdd593SJeykumar Sankaran * INTF sub blocks config 112225fdd593SJeykumar Sankaran *************************************************************/ 1123667e9985SDmitry Baryshkov #define INTF_BLK(_name, _id, _base, _type, _ctrl_id, _progfetch, _features, _reg, _underrun_bit, _vsync_bit) \ 112425fdd593SJeykumar Sankaran {\ 112525fdd593SJeykumar Sankaran .name = _name, .id = _id, \ 112625fdd593SJeykumar Sankaran .base = _base, .len = 0x280, \ 1127cace3ac4SJonathan Marek .features = _features, \ 112825fdd593SJeykumar Sankaran .type = _type, \ 112925fdd593SJeykumar Sankaran .controller_id = _ctrl_id, \ 1130667e9985SDmitry Baryshkov .prog_fetch_lines_worst_case = _progfetch, \ 1131667e9985SDmitry Baryshkov .intr_underrun = DPU_IRQ_IDX(_reg, _underrun_bit), \ 1132667e9985SDmitry Baryshkov .intr_vsync = DPU_IRQ_IDX(_reg, _vsync_bit), \ 113325fdd593SJeykumar Sankaran } 113425fdd593SJeykumar Sankaran 113594391a14SAngeloGioacchino Del Regno static const struct dpu_intf_cfg msm8998_intf[] = { 113694391a14SAngeloGioacchino Del Regno INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 113794391a14SAngeloGioacchino Del Regno INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 113894391a14SAngeloGioacchino Del Regno INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 113994391a14SAngeloGioacchino Del Regno INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_HDMI, 0, 25, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 114094391a14SAngeloGioacchino Del Regno }; 114194391a14SAngeloGioacchino Del Regno 1142abda0d92SStephen Boyd static const struct dpu_intf_cfg sdm845_intf[] = { 1143667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1144667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1145667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 1146667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SDM845_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 114725fdd593SJeykumar Sankaran }; 114825fdd593SJeykumar Sankaran 11497bdc0c4bSKalyan Thota static const struct dpu_intf_cfg sc7180_intf[] = { 1150bb3de286SBjorn Andersson INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1151667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 11527bdc0c4bSKalyan Thota }; 11537bdc0c4bSKalyan Thota 1154386fced3SJonathan Marek static const struct dpu_intf_cfg sm8150_intf[] = { 1155667e9985SDmitry Baryshkov INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1156667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1157667e9985SDmitry Baryshkov INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 1158667e9985SDmitry Baryshkov INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 1159386fced3SJonathan Marek }; 1160386fced3SJonathan Marek 1161591e34a0SKrishna Manikandan static const struct dpu_intf_cfg sc7280_intf[] = { 1162ef7837ffSSankeerth Billakanti INTF_BLK("intf_0", INTF_0, 0x34000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1163667e9985SDmitry Baryshkov INTF_BLK("intf_1", INTF_1, 0x35000, INTF_DSI, 0, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1164ef7837ffSSankeerth Billakanti INTF_BLK("intf_5", INTF_5, 0x39000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7280_MASK, MDP_SSPP_TOP0_INTR, 22, 23), 1165591e34a0SKrishna Manikandan }; 1166591e34a0SKrishna Manikandan 1167f3af2d6eSRob Clark static const struct dpu_intf_cfg sc8180x_intf[] = { 1168f3af2d6eSRob Clark INTF_BLK("intf_0", INTF_0, 0x6A000, INTF_DP, MSM_DP_CONTROLLER_0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 24, 25), 1169f3af2d6eSRob Clark INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 1170f3af2d6eSRob Clark INTF_BLK("intf_2", INTF_2, 0x6B000, INTF_DSI, 1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 28, 29), 1171f3af2d6eSRob Clark /* INTF_3 is for MST, wired to INTF_DP 0 and 1, use dummy index until this is supported */ 1172f3af2d6eSRob Clark INTF_BLK("intf_3", INTF_3, 0x6B800, INTF_DP, 999, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 30, 31), 1173f3af2d6eSRob Clark INTF_BLK("intf_4", INTF_4, 0x6C000, INTF_DP, MSM_DP_CONTROLLER_1, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 20, 21), 1174f3af2d6eSRob Clark INTF_BLK("intf_5", INTF_5, 0x6C800, INTF_DP, MSM_DP_CONTROLLER_2, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 22, 23), 1175f3af2d6eSRob Clark }; 1176f3af2d6eSRob Clark 11775334087eSLoic Poulain static const struct dpu_intf_cfg qcm2290_intf[] = { 11785334087eSLoic Poulain INTF_BLK("intf_0", INTF_0, 0x00000, INTF_NONE, 0, 0, 0, 0, 0, 0), 11795334087eSLoic Poulain INTF_BLK("intf_1", INTF_1, 0x6A800, INTF_DSI, 0, 24, INTF_SC7180_MASK, MDP_SSPP_TOP0_INTR, 26, 27), 11805334087eSLoic Poulain }; 11815334087eSLoic Poulain 118225fdd593SJeykumar Sankaran /************************************************************* 118325fdd593SJeykumar Sankaran * VBIF sub blocks config 118425fdd593SJeykumar Sankaran *************************************************************/ 118525fdd593SJeykumar Sankaran /* VBIF QOS remap */ 118694391a14SAngeloGioacchino Del Regno static const u32 msm8998_rt_pri_lvl[] = {1, 2, 2, 2}; 118794391a14SAngeloGioacchino Del Regno static const u32 msm8998_nrt_pri_lvl[] = {1, 1, 1, 1}; 1188abda0d92SStephen Boyd static const u32 sdm845_rt_pri_lvl[] = {3, 3, 4, 4, 5, 5, 6, 6}; 1189abda0d92SStephen Boyd static const u32 sdm845_nrt_pri_lvl[] = {3, 3, 3, 3, 3, 3, 3, 3}; 119025fdd593SJeykumar Sankaran 119194391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_dynamic_ot_cfg msm8998_ot_rdwr_cfg[] = { 119294391a14SAngeloGioacchino Del Regno { 119394391a14SAngeloGioacchino Del Regno .pps = 1088 * 1920 * 30, 119494391a14SAngeloGioacchino Del Regno .ot_limit = 2, 119594391a14SAngeloGioacchino Del Regno }, 119694391a14SAngeloGioacchino Del Regno { 119794391a14SAngeloGioacchino Del Regno .pps = 1088 * 1920 * 60, 119894391a14SAngeloGioacchino Del Regno .ot_limit = 6, 119994391a14SAngeloGioacchino Del Regno }, 120094391a14SAngeloGioacchino Del Regno { 120194391a14SAngeloGioacchino Del Regno .pps = 3840 * 2160 * 30, 120294391a14SAngeloGioacchino Del Regno .ot_limit = 16, 120394391a14SAngeloGioacchino Del Regno }, 120494391a14SAngeloGioacchino Del Regno }; 120594391a14SAngeloGioacchino Del Regno 120694391a14SAngeloGioacchino Del Regno static const struct dpu_vbif_cfg msm8998_vbif[] = { 120794391a14SAngeloGioacchino Del Regno { 120894391a14SAngeloGioacchino Del Regno .name = "vbif_0", .id = VBIF_0, 120994391a14SAngeloGioacchino Del Regno .base = 0, .len = 0x1040, 121094391a14SAngeloGioacchino Del Regno .default_ot_rd_limit = 32, 121194391a14SAngeloGioacchino Del Regno .default_ot_wr_limit = 32, 121294391a14SAngeloGioacchino Del Regno .features = BIT(DPU_VBIF_QOS_REMAP) | BIT(DPU_VBIF_QOS_OTLIM), 121394391a14SAngeloGioacchino Del Regno .xin_halt_timeout = 0x4000, 121494391a14SAngeloGioacchino Del Regno .dynamic_ot_rd_tbl = { 121594391a14SAngeloGioacchino Del Regno .count = ARRAY_SIZE(msm8998_ot_rdwr_cfg), 121694391a14SAngeloGioacchino Del Regno .cfg = msm8998_ot_rdwr_cfg, 121794391a14SAngeloGioacchino Del Regno }, 121894391a14SAngeloGioacchino Del Regno .dynamic_ot_wr_tbl = { 121994391a14SAngeloGioacchino Del Regno .count = ARRAY_SIZE(msm8998_ot_rdwr_cfg), 122094391a14SAngeloGioacchino Del Regno .cfg = msm8998_ot_rdwr_cfg, 122194391a14SAngeloGioacchino Del Regno }, 122294391a14SAngeloGioacchino Del Regno .qos_rt_tbl = { 122394391a14SAngeloGioacchino Del Regno .npriority_lvl = ARRAY_SIZE(msm8998_rt_pri_lvl), 122494391a14SAngeloGioacchino Del Regno .priority_lvl = msm8998_rt_pri_lvl, 122594391a14SAngeloGioacchino Del Regno }, 122694391a14SAngeloGioacchino Del Regno .qos_nrt_tbl = { 122794391a14SAngeloGioacchino Del Regno .npriority_lvl = ARRAY_SIZE(msm8998_nrt_pri_lvl), 122894391a14SAngeloGioacchino Del Regno .priority_lvl = msm8998_nrt_pri_lvl, 122994391a14SAngeloGioacchino Del Regno }, 123094391a14SAngeloGioacchino Del Regno .memtype_count = 14, 123194391a14SAngeloGioacchino Del Regno .memtype = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}, 123294391a14SAngeloGioacchino Del Regno }, 123394391a14SAngeloGioacchino Del Regno }; 123494391a14SAngeloGioacchino Del Regno 1235abda0d92SStephen Boyd static const struct dpu_vbif_cfg sdm845_vbif[] = { 123625fdd593SJeykumar Sankaran { 123725fdd593SJeykumar Sankaran .name = "vbif_0", .id = VBIF_0, 123825fdd593SJeykumar Sankaran .base = 0, .len = 0x1040, 123925fdd593SJeykumar Sankaran .features = BIT(DPU_VBIF_QOS_REMAP), 124025fdd593SJeykumar Sankaran .xin_halt_timeout = 0x4000, 124125fdd593SJeykumar Sankaran .qos_rt_tbl = { 124225fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_rt_pri_lvl), 124325fdd593SJeykumar Sankaran .priority_lvl = sdm845_rt_pri_lvl, 124425fdd593SJeykumar Sankaran }, 124525fdd593SJeykumar Sankaran .qos_nrt_tbl = { 124625fdd593SJeykumar Sankaran .npriority_lvl = ARRAY_SIZE(sdm845_nrt_pri_lvl), 124725fdd593SJeykumar Sankaran .priority_lvl = sdm845_nrt_pri_lvl, 124825fdd593SJeykumar Sankaran }, 124925fdd593SJeykumar Sankaran .memtype_count = 14, 125025fdd593SJeykumar Sankaran .memtype = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, 125125fdd593SJeykumar Sankaran }, 125225fdd593SJeykumar Sankaran }; 125325fdd593SJeykumar Sankaran 1254abda0d92SStephen Boyd static const struct dpu_reg_dma_cfg sdm845_regdma = { 125525fdd593SJeykumar Sankaran .base = 0x0, .version = 0x1, .trigger_sel_off = 0x119c 125625fdd593SJeykumar Sankaran }; 125725fdd593SJeykumar Sankaran 1258386fced3SJonathan Marek static const struct dpu_reg_dma_cfg sm8150_regdma = { 1259386fced3SJonathan Marek .base = 0x0, .version = 0x00010001, .trigger_sel_off = 0x119c 1260386fced3SJonathan Marek }; 1261386fced3SJonathan Marek 1262af776a3eSJonathan Marek static const struct dpu_reg_dma_cfg sm8250_regdma = { 1263af776a3eSJonathan Marek .base = 0x0, 1264af776a3eSJonathan Marek .version = 0x00010002, 1265af776a3eSJonathan Marek .trigger_sel_off = 0x119c, 1266af776a3eSJonathan Marek .xin_id = 7, 1267af776a3eSJonathan Marek .clk_ctrl = DPU_CLK_CTRL_REG_DMA, 1268af776a3eSJonathan Marek }; 1269af776a3eSJonathan Marek 127025fdd593SJeykumar Sankaran /************************************************************* 127125fdd593SJeykumar Sankaran * PERF data config 127225fdd593SJeykumar Sankaran *************************************************************/ 127325fdd593SJeykumar Sankaran 127425fdd593SJeykumar Sankaran /* SSPP QOS LUTs */ 127594391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_linear[] = { 127694391a14SAngeloGioacchino Del Regno {.fl = 4, .lut = 0x1b}, 127794391a14SAngeloGioacchino Del Regno {.fl = 5, .lut = 0x5b}, 127894391a14SAngeloGioacchino Del Regno {.fl = 6, .lut = 0x15b}, 127994391a14SAngeloGioacchino Del Regno {.fl = 7, .lut = 0x55b}, 128094391a14SAngeloGioacchino Del Regno {.fl = 8, .lut = 0x155b}, 128194391a14SAngeloGioacchino Del Regno {.fl = 9, .lut = 0x555b}, 128294391a14SAngeloGioacchino Del Regno {.fl = 10, .lut = 0x1555b}, 128394391a14SAngeloGioacchino Del Regno {.fl = 11, .lut = 0x5555b}, 128494391a14SAngeloGioacchino Del Regno {.fl = 12, .lut = 0x15555b}, 128594391a14SAngeloGioacchino Del Regno {.fl = 13, .lut = 0x55555b}, 128694391a14SAngeloGioacchino Del Regno {.fl = 14, .lut = 0}, 128794391a14SAngeloGioacchino Del Regno {.fl = 1, .lut = 0x1b}, 128894391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0} 128994391a14SAngeloGioacchino Del Regno }; 129094391a14SAngeloGioacchino Del Regno 1291abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_linear[] = { 129225fdd593SJeykumar Sankaran {.fl = 4, .lut = 0x357}, 129325fdd593SJeykumar Sankaran {.fl = 5, .lut = 0x3357}, 129425fdd593SJeykumar Sankaran {.fl = 6, .lut = 0x23357}, 129525fdd593SJeykumar Sankaran {.fl = 7, .lut = 0x223357}, 129625fdd593SJeykumar Sankaran {.fl = 8, .lut = 0x2223357}, 129725fdd593SJeykumar Sankaran {.fl = 9, .lut = 0x22223357}, 129825fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x222223357}, 129925fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x2222223357}, 130025fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x22222223357}, 130125fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x222222223357}, 130225fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1222222223357}, 130325fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x11222222223357} 130425fdd593SJeykumar Sankaran }; 130525fdd593SJeykumar Sankaran 130694391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_macrotile[] = { 130794391a14SAngeloGioacchino Del Regno {.fl = 10, .lut = 0x1aaff}, 130894391a14SAngeloGioacchino Del Regno {.fl = 11, .lut = 0x5aaff}, 130994391a14SAngeloGioacchino Del Regno {.fl = 12, .lut = 0x15aaff}, 131094391a14SAngeloGioacchino Del Regno {.fl = 13, .lut = 0x55aaff}, 131194391a14SAngeloGioacchino Del Regno {.fl = 1, .lut = 0x1aaff}, 131294391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0}, 131394391a14SAngeloGioacchino Del Regno }; 131494391a14SAngeloGioacchino Del Regno 13157bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_linear[] = { 13167bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011222222335777}, 13177bdc0c4bSKalyan Thota }; 13187bdc0c4bSKalyan Thota 1319386fced3SJonathan Marek static const struct dpu_qos_lut_entry sm8150_qos_linear[] = { 1320386fced3SJonathan Marek {.fl = 0, .lut = 0x0011222222223357 }, 1321386fced3SJonathan Marek }; 1322386fced3SJonathan Marek 1323f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_linear[] = { 1324f3af2d6eSRob Clark {.fl = 4, .lut = 0x0000000000000357 }, 1325f3af2d6eSRob Clark }; 1326f3af2d6eSRob Clark 13275334087eSLoic Poulain static const struct dpu_qos_lut_entry qcm2290_qos_linear[] = { 13285334087eSLoic Poulain {.fl = 0, .lut = 0x0011222222335777}, 13295334087eSLoic Poulain }; 13305334087eSLoic Poulain 1331abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_macrotile[] = { 133225fdd593SJeykumar Sankaran {.fl = 10, .lut = 0x344556677}, 133325fdd593SJeykumar Sankaran {.fl = 11, .lut = 0x3344556677}, 133425fdd593SJeykumar Sankaran {.fl = 12, .lut = 0x23344556677}, 133525fdd593SJeykumar Sankaran {.fl = 13, .lut = 0x223344556677}, 133625fdd593SJeykumar Sankaran {.fl = 14, .lut = 0x1223344556677}, 133725fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x112233344556677}, 133825fdd593SJeykumar Sankaran }; 133925fdd593SJeykumar Sankaran 13407bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_macrotile[] = { 13417bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0011223344556677}, 13427bdc0c4bSKalyan Thota }; 13437bdc0c4bSKalyan Thota 1344f3af2d6eSRob Clark static const struct dpu_qos_lut_entry sc8180x_qos_macrotile[] = { 1345f3af2d6eSRob Clark {.fl = 10, .lut = 0x0000000344556677}, 1346f3af2d6eSRob Clark }; 1347f3af2d6eSRob Clark 134894391a14SAngeloGioacchino Del Regno static const struct dpu_qos_lut_entry msm8998_qos_nrt[] = { 134994391a14SAngeloGioacchino Del Regno {.fl = 0, .lut = 0x0}, 135094391a14SAngeloGioacchino Del Regno }; 135194391a14SAngeloGioacchino Del Regno 1352abda0d92SStephen Boyd static const struct dpu_qos_lut_entry sdm845_qos_nrt[] = { 135325fdd593SJeykumar Sankaran {.fl = 0, .lut = 0x0}, 135425fdd593SJeykumar Sankaran }; 135525fdd593SJeykumar Sankaran 13567bdc0c4bSKalyan Thota static const struct dpu_qos_lut_entry sc7180_qos_nrt[] = { 13577bdc0c4bSKalyan Thota {.fl = 0, .lut = 0x0}, 13587bdc0c4bSKalyan Thota }; 13597bdc0c4bSKalyan Thota 136094391a14SAngeloGioacchino Del Regno static const struct dpu_perf_cfg msm8998_perf_data = { 136194391a14SAngeloGioacchino Del Regno .max_bw_low = 6700000, 136294391a14SAngeloGioacchino Del Regno .max_bw_high = 6700000, 136394391a14SAngeloGioacchino Del Regno .min_core_ib = 2400000, 136494391a14SAngeloGioacchino Del Regno .min_llcc_ib = 800000, 136594391a14SAngeloGioacchino Del Regno .min_dram_ib = 800000, 136694391a14SAngeloGioacchino Del Regno .undersized_prefill_lines = 2, 136794391a14SAngeloGioacchino Del Regno .xtra_prefill_lines = 2, 136894391a14SAngeloGioacchino Del Regno .dest_scale_prefill_lines = 3, 136994391a14SAngeloGioacchino Del Regno .macrotile_prefill_lines = 4, 137094391a14SAngeloGioacchino Del Regno .yuv_nv12_prefill_lines = 8, 137194391a14SAngeloGioacchino Del Regno .linear_prefill_lines = 1, 137294391a14SAngeloGioacchino Del Regno .downscaling_prefill_lines = 1, 137394391a14SAngeloGioacchino Del Regno .amortizable_threshold = 25, 137494391a14SAngeloGioacchino Del Regno .min_prefill_lines = 25, 137594391a14SAngeloGioacchino Del Regno .danger_lut_tbl = {0xf, 0xffff, 0x0}, 137694391a14SAngeloGioacchino Del Regno .safe_lut_tbl = {0xfffc, 0xff00, 0xffff}, 137794391a14SAngeloGioacchino Del Regno .qos_lut_tbl = { 137894391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_linear), 137994391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_linear 138094391a14SAngeloGioacchino Del Regno }, 138194391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_macrotile), 138294391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_macrotile 138394391a14SAngeloGioacchino Del Regno }, 138494391a14SAngeloGioacchino Del Regno {.nentry = ARRAY_SIZE(msm8998_qos_nrt), 138594391a14SAngeloGioacchino Del Regno .entries = msm8998_qos_nrt 138694391a14SAngeloGioacchino Del Regno }, 138794391a14SAngeloGioacchino Del Regno }, 138894391a14SAngeloGioacchino Del Regno .cdp_cfg = { 138994391a14SAngeloGioacchino Del Regno {.rd_enable = 1, .wr_enable = 1}, 139094391a14SAngeloGioacchino Del Regno {.rd_enable = 1, .wr_enable = 0} 139194391a14SAngeloGioacchino Del Regno }, 139294391a14SAngeloGioacchino Del Regno .clk_inefficiency_factor = 200, 139394391a14SAngeloGioacchino Del Regno .bw_inefficiency_factor = 120, 139494391a14SAngeloGioacchino Del Regno }; 139594391a14SAngeloGioacchino Del Regno 1396abda0d92SStephen Boyd static const struct dpu_perf_cfg sdm845_perf_data = { 139725fdd593SJeykumar Sankaran .max_bw_low = 6800000, 139825fdd593SJeykumar Sankaran .max_bw_high = 6800000, 139925fdd593SJeykumar Sankaran .min_core_ib = 2400000, 140025fdd593SJeykumar Sankaran .min_llcc_ib = 800000, 140125fdd593SJeykumar Sankaran .min_dram_ib = 800000, 140225fdd593SJeykumar Sankaran .undersized_prefill_lines = 2, 140325fdd593SJeykumar Sankaran .xtra_prefill_lines = 2, 140425fdd593SJeykumar Sankaran .dest_scale_prefill_lines = 3, 140525fdd593SJeykumar Sankaran .macrotile_prefill_lines = 4, 140625fdd593SJeykumar Sankaran .yuv_nv12_prefill_lines = 8, 140725fdd593SJeykumar Sankaran .linear_prefill_lines = 1, 140825fdd593SJeykumar Sankaran .downscaling_prefill_lines = 1, 140925fdd593SJeykumar Sankaran .amortizable_threshold = 25, 141025fdd593SJeykumar Sankaran .min_prefill_lines = 24, 141125fdd593SJeykumar Sankaran .danger_lut_tbl = {0xf, 0xffff, 0x0}, 14125bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xf000, 0xffff}, 141325fdd593SJeykumar Sankaran .qos_lut_tbl = { 141425fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_linear), 141525fdd593SJeykumar Sankaran .entries = sdm845_qos_linear 141625fdd593SJeykumar Sankaran }, 141725fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_macrotile), 141825fdd593SJeykumar Sankaran .entries = sdm845_qos_macrotile 141925fdd593SJeykumar Sankaran }, 142025fdd593SJeykumar Sankaran {.nentry = ARRAY_SIZE(sdm845_qos_nrt), 142125fdd593SJeykumar Sankaran .entries = sdm845_qos_nrt 142225fdd593SJeykumar Sankaran }, 142325fdd593SJeykumar Sankaran }, 142425fdd593SJeykumar Sankaran .cdp_cfg = { 142525fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 1}, 142625fdd593SJeykumar Sankaran {.rd_enable = 1, .wr_enable = 0} 142725fdd593SJeykumar Sankaran }, 14284f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 14294f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 143025fdd593SJeykumar Sankaran }; 143125fdd593SJeykumar Sankaran 14327bdc0c4bSKalyan Thota static const struct dpu_perf_cfg sc7180_perf_data = { 143371dc6c08SKrishna Manikandan .max_bw_low = 6800000, 143471dc6c08SKrishna Manikandan .max_bw_high = 6800000, 14357bdc0c4bSKalyan Thota .min_core_ib = 2400000, 14367bdc0c4bSKalyan Thota .min_llcc_ib = 800000, 1437c33b7c03SKalyan Thota .min_dram_ib = 1600000, 1438c33b7c03SKalyan Thota .min_prefill_lines = 24, 14397bdc0c4bSKalyan Thota .danger_lut_tbl = {0xff, 0xffff, 0x0}, 14405bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 14417bdc0c4bSKalyan Thota .qos_lut_tbl = { 14427bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_linear), 14437bdc0c4bSKalyan Thota .entries = sc7180_qos_linear 14447bdc0c4bSKalyan Thota }, 14457bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 14467bdc0c4bSKalyan Thota .entries = sc7180_qos_macrotile 14477bdc0c4bSKalyan Thota }, 14487bdc0c4bSKalyan Thota {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 14497bdc0c4bSKalyan Thota .entries = sc7180_qos_nrt 14507bdc0c4bSKalyan Thota }, 14517bdc0c4bSKalyan Thota }, 14527bdc0c4bSKalyan Thota .cdp_cfg = { 14537bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 1}, 14547bdc0c4bSKalyan Thota {.rd_enable = 1, .wr_enable = 0} 14557bdc0c4bSKalyan Thota }, 1456c33b7c03SKalyan Thota .clk_inefficiency_factor = 105, 1457c33b7c03SKalyan Thota .bw_inefficiency_factor = 120, 14587bdc0c4bSKalyan Thota }; 14597bdc0c4bSKalyan Thota 1460386fced3SJonathan Marek static const struct dpu_perf_cfg sm8150_perf_data = { 1461386fced3SJonathan Marek .max_bw_low = 12800000, 1462386fced3SJonathan Marek .max_bw_high = 12800000, 1463386fced3SJonathan Marek .min_core_ib = 2400000, 1464386fced3SJonathan Marek .min_llcc_ib = 800000, 1465386fced3SJonathan Marek .min_dram_ib = 800000, 14664f2c9838SDmitry Baryshkov .min_prefill_lines = 24, 1467386fced3SJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 14685bccb945SKalyan Thota .safe_lut_tbl = {0xfff8, 0xf000, 0xffff}, 1469386fced3SJonathan Marek .qos_lut_tbl = { 1470386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sm8150_qos_linear), 1471386fced3SJonathan Marek .entries = sm8150_qos_linear 1472386fced3SJonathan Marek }, 1473386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1474386fced3SJonathan Marek .entries = sc7180_qos_macrotile 1475386fced3SJonathan Marek }, 1476386fced3SJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1477386fced3SJonathan Marek .entries = sc7180_qos_nrt 1478386fced3SJonathan Marek }, 1479386fced3SJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1480386fced3SJonathan Marek }, 1481386fced3SJonathan Marek .cdp_cfg = { 1482386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1483386fced3SJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1484386fced3SJonathan Marek }, 14854f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 14864f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1487386fced3SJonathan Marek }; 1488386fced3SJonathan Marek 1489f3af2d6eSRob Clark static const struct dpu_perf_cfg sc8180x_perf_data = { 1490f3af2d6eSRob Clark .max_bw_low = 9600000, 1491f3af2d6eSRob Clark .max_bw_high = 9600000, 1492f3af2d6eSRob Clark .min_core_ib = 2400000, 1493f3af2d6eSRob Clark .min_llcc_ib = 800000, 1494f3af2d6eSRob Clark .min_dram_ib = 800000, 1495f3af2d6eSRob Clark .danger_lut_tbl = {0xf, 0xffff, 0x0}, 1496f3af2d6eSRob Clark .qos_lut_tbl = { 1497f3af2d6eSRob Clark {.nentry = ARRAY_SIZE(sc8180x_qos_linear), 1498f3af2d6eSRob Clark .entries = sc8180x_qos_linear 1499f3af2d6eSRob Clark }, 1500f3af2d6eSRob Clark {.nentry = ARRAY_SIZE(sc8180x_qos_macrotile), 1501f3af2d6eSRob Clark .entries = sc8180x_qos_macrotile 1502f3af2d6eSRob Clark }, 1503f3af2d6eSRob Clark {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1504f3af2d6eSRob Clark .entries = sc7180_qos_nrt 1505f3af2d6eSRob Clark }, 1506f3af2d6eSRob Clark /* TODO: macrotile-qseed is different from macrotile */ 1507f3af2d6eSRob Clark }, 1508f3af2d6eSRob Clark .cdp_cfg = { 1509f3af2d6eSRob Clark {.rd_enable = 1, .wr_enable = 1}, 1510f3af2d6eSRob Clark {.rd_enable = 1, .wr_enable = 0} 1511f3af2d6eSRob Clark }, 1512f3af2d6eSRob Clark .clk_inefficiency_factor = 105, 1513f3af2d6eSRob Clark .bw_inefficiency_factor = 120, 1514f3af2d6eSRob Clark }; 1515f3af2d6eSRob Clark 1516af776a3eSJonathan Marek static const struct dpu_perf_cfg sm8250_perf_data = { 1517af776a3eSJonathan Marek .max_bw_low = 13700000, 1518af776a3eSJonathan Marek .max_bw_high = 16600000, 1519af776a3eSJonathan Marek .min_core_ib = 4800000, 1520af776a3eSJonathan Marek .min_llcc_ib = 0, 1521af776a3eSJonathan Marek .min_dram_ib = 800000, 15224f2c9838SDmitry Baryshkov .min_prefill_lines = 35, 1523af776a3eSJonathan Marek .danger_lut_tbl = {0xf, 0xffff, 0x0}, 15245bccb945SKalyan Thota .safe_lut_tbl = {0xfff0, 0xff00, 0xffff}, 1525af776a3eSJonathan Marek .qos_lut_tbl = { 1526af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_linear), 1527af776a3eSJonathan Marek .entries = sc7180_qos_linear 1528af776a3eSJonathan Marek }, 1529af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1530af776a3eSJonathan Marek .entries = sc7180_qos_macrotile 1531af776a3eSJonathan Marek }, 1532af776a3eSJonathan Marek {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1533af776a3eSJonathan Marek .entries = sc7180_qos_nrt 1534af776a3eSJonathan Marek }, 1535af776a3eSJonathan Marek /* TODO: macrotile-qseed is different from macrotile */ 1536af776a3eSJonathan Marek }, 1537af776a3eSJonathan Marek .cdp_cfg = { 1538af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 1}, 1539af776a3eSJonathan Marek {.rd_enable = 1, .wr_enable = 0} 1540af776a3eSJonathan Marek }, 15414f2c9838SDmitry Baryshkov .clk_inefficiency_factor = 105, 15424f2c9838SDmitry Baryshkov .bw_inefficiency_factor = 120, 1543af776a3eSJonathan Marek }; 1544af776a3eSJonathan Marek 1545591e34a0SKrishna Manikandan static const struct dpu_perf_cfg sc7280_perf_data = { 1546591e34a0SKrishna Manikandan .max_bw_low = 4700000, 1547591e34a0SKrishna Manikandan .max_bw_high = 8800000, 1548591e34a0SKrishna Manikandan .min_core_ib = 2500000, 1549591e34a0SKrishna Manikandan .min_llcc_ib = 0, 1550591e34a0SKrishna Manikandan .min_dram_ib = 1600000, 1551591e34a0SKrishna Manikandan .min_prefill_lines = 24, 1552591e34a0SKrishna Manikandan .danger_lut_tbl = {0xffff, 0xffff, 0x0}, 15535bccb945SKalyan Thota .safe_lut_tbl = {0xff00, 0xff00, 0xffff}, 1554591e34a0SKrishna Manikandan .qos_lut_tbl = { 1555591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1556591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1557591e34a0SKrishna Manikandan }, 1558591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_macrotile), 1559591e34a0SKrishna Manikandan .entries = sc7180_qos_macrotile 1560591e34a0SKrishna Manikandan }, 1561591e34a0SKrishna Manikandan {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1562591e34a0SKrishna Manikandan .entries = sc7180_qos_nrt 1563591e34a0SKrishna Manikandan }, 1564591e34a0SKrishna Manikandan }, 1565591e34a0SKrishna Manikandan .cdp_cfg = { 1566591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 1}, 1567591e34a0SKrishna Manikandan {.rd_enable = 1, .wr_enable = 0} 1568591e34a0SKrishna Manikandan }, 1569591e34a0SKrishna Manikandan .clk_inefficiency_factor = 105, 1570591e34a0SKrishna Manikandan .bw_inefficiency_factor = 120, 1571591e34a0SKrishna Manikandan }; 1572591e34a0SKrishna Manikandan 15735334087eSLoic Poulain static const struct dpu_perf_cfg qcm2290_perf_data = { 15745334087eSLoic Poulain .max_bw_low = 2700000, 15755334087eSLoic Poulain .max_bw_high = 2700000, 15765334087eSLoic Poulain .min_core_ib = 1300000, 15775334087eSLoic Poulain .min_llcc_ib = 0, 15785334087eSLoic Poulain .min_dram_ib = 1600000, 15795334087eSLoic Poulain .min_prefill_lines = 24, 15805334087eSLoic Poulain .danger_lut_tbl = {0xff, 0x0, 0x0}, 15815334087eSLoic Poulain .safe_lut_tbl = {0xfff0, 0x0, 0x0}, 15825334087eSLoic Poulain .qos_lut_tbl = { 15835334087eSLoic Poulain {.nentry = ARRAY_SIZE(qcm2290_qos_linear), 15845334087eSLoic Poulain .entries = qcm2290_qos_linear 15855334087eSLoic Poulain }, 15865334087eSLoic Poulain }, 15875334087eSLoic Poulain .cdp_cfg = { 15885334087eSLoic Poulain {.rd_enable = 1, .wr_enable = 1}, 15895334087eSLoic Poulain {.rd_enable = 1, .wr_enable = 0} 15905334087eSLoic Poulain }, 15915334087eSLoic Poulain .clk_inefficiency_factor = 105, 15925334087eSLoic Poulain .bw_inefficiency_factor = 120, 15935334087eSLoic Poulain }; 159425fdd593SJeykumar Sankaran /************************************************************* 159525fdd593SJeykumar Sankaran * Hardware catalog init 159625fdd593SJeykumar Sankaran *************************************************************/ 159725fdd593SJeykumar Sankaran 159825fdd593SJeykumar Sankaran /* 159994391a14SAngeloGioacchino Del Regno * msm8998_cfg_init(): populate sdm845 dpu sub-blocks reg offsets 160094391a14SAngeloGioacchino Del Regno * and instance counts. 160194391a14SAngeloGioacchino Del Regno */ 160294391a14SAngeloGioacchino Del Regno static void msm8998_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 160394391a14SAngeloGioacchino Del Regno { 160494391a14SAngeloGioacchino Del Regno *dpu_cfg = (struct dpu_mdss_cfg){ 160594391a14SAngeloGioacchino Del Regno .caps = &msm8998_dpu_caps, 160694391a14SAngeloGioacchino Del Regno .mdp_count = ARRAY_SIZE(msm8998_mdp), 160794391a14SAngeloGioacchino Del Regno .mdp = msm8998_mdp, 160894391a14SAngeloGioacchino Del Regno .ctl_count = ARRAY_SIZE(msm8998_ctl), 160994391a14SAngeloGioacchino Del Regno .ctl = msm8998_ctl, 161094391a14SAngeloGioacchino Del Regno .sspp_count = ARRAY_SIZE(msm8998_sspp), 161194391a14SAngeloGioacchino Del Regno .sspp = msm8998_sspp, 161294391a14SAngeloGioacchino Del Regno .mixer_count = ARRAY_SIZE(msm8998_lm), 161394391a14SAngeloGioacchino Del Regno .mixer = msm8998_lm, 1614*6452cbd6SDmitry Baryshkov .dspp_count = ARRAY_SIZE(msm8998_dspp), 1615*6452cbd6SDmitry Baryshkov .dspp = msm8998_dspp, 161694391a14SAngeloGioacchino Del Regno .pingpong_count = ARRAY_SIZE(sdm845_pp), 161794391a14SAngeloGioacchino Del Regno .pingpong = sdm845_pp, 161894391a14SAngeloGioacchino Del Regno .intf_count = ARRAY_SIZE(msm8998_intf), 161994391a14SAngeloGioacchino Del Regno .intf = msm8998_intf, 162094391a14SAngeloGioacchino Del Regno .vbif_count = ARRAY_SIZE(msm8998_vbif), 162194391a14SAngeloGioacchino Del Regno .vbif = msm8998_vbif, 162294391a14SAngeloGioacchino Del Regno .reg_dma_count = 0, 162394391a14SAngeloGioacchino Del Regno .perf = msm8998_perf_data, 162494391a14SAngeloGioacchino Del Regno .mdss_irqs = IRQ_SM8250_MASK, 162594391a14SAngeloGioacchino Del Regno }; 162694391a14SAngeloGioacchino Del Regno } 162794391a14SAngeloGioacchino Del Regno 162894391a14SAngeloGioacchino Del Regno /* 162925fdd593SJeykumar Sankaran * sdm845_cfg_init(): populate sdm845 dpu sub-blocks reg offsets 163025fdd593SJeykumar Sankaran * and instance counts. 163125fdd593SJeykumar Sankaran */ 1632fba33caeSJordan Crouse static void sdm845_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 163325fdd593SJeykumar Sankaran { 163425fdd593SJeykumar Sankaran *dpu_cfg = (struct dpu_mdss_cfg){ 163525fdd593SJeykumar Sankaran .caps = &sdm845_dpu_caps, 163625fdd593SJeykumar Sankaran .mdp_count = ARRAY_SIZE(sdm845_mdp), 163725fdd593SJeykumar Sankaran .mdp = sdm845_mdp, 163825fdd593SJeykumar Sankaran .ctl_count = ARRAY_SIZE(sdm845_ctl), 163925fdd593SJeykumar Sankaran .ctl = sdm845_ctl, 164025fdd593SJeykumar Sankaran .sspp_count = ARRAY_SIZE(sdm845_sspp), 164125fdd593SJeykumar Sankaran .sspp = sdm845_sspp, 164225fdd593SJeykumar Sankaran .mixer_count = ARRAY_SIZE(sdm845_lm), 164325fdd593SJeykumar Sankaran .mixer = sdm845_lm, 164425fdd593SJeykumar Sankaran .pingpong_count = ARRAY_SIZE(sdm845_pp), 164525fdd593SJeykumar Sankaran .pingpong = sdm845_pp, 164625fdd593SJeykumar Sankaran .intf_count = ARRAY_SIZE(sdm845_intf), 164725fdd593SJeykumar Sankaran .intf = sdm845_intf, 164825fdd593SJeykumar Sankaran .vbif_count = ARRAY_SIZE(sdm845_vbif), 164925fdd593SJeykumar Sankaran .vbif = sdm845_vbif, 165025fdd593SJeykumar Sankaran .reg_dma_count = 1, 165125fdd593SJeykumar Sankaran .dma_cfg = sdm845_regdma, 165225fdd593SJeykumar Sankaran .perf = sdm845_perf_data, 1653597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 165425fdd593SJeykumar Sankaran }; 165525fdd593SJeykumar Sankaran } 165625fdd593SJeykumar Sankaran 16577bdc0c4bSKalyan Thota /* 16587bdc0c4bSKalyan Thota * sc7180_cfg_init(): populate sc7180 dpu sub-blocks reg offsets 16597bdc0c4bSKalyan Thota * and instance counts. 16607bdc0c4bSKalyan Thota */ 16617bdc0c4bSKalyan Thota static void sc7180_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 16627bdc0c4bSKalyan Thota { 16637bdc0c4bSKalyan Thota *dpu_cfg = (struct dpu_mdss_cfg){ 16647bdc0c4bSKalyan Thota .caps = &sc7180_dpu_caps, 16657bdc0c4bSKalyan Thota .mdp_count = ARRAY_SIZE(sc7180_mdp), 16667bdc0c4bSKalyan Thota .mdp = sc7180_mdp, 16677bdc0c4bSKalyan Thota .ctl_count = ARRAY_SIZE(sc7180_ctl), 16687bdc0c4bSKalyan Thota .ctl = sc7180_ctl, 16697bdc0c4bSKalyan Thota .sspp_count = ARRAY_SIZE(sc7180_sspp), 16707bdc0c4bSKalyan Thota .sspp = sc7180_sspp, 16717bdc0c4bSKalyan Thota .mixer_count = ARRAY_SIZE(sc7180_lm), 16727bdc0c4bSKalyan Thota .mixer = sc7180_lm, 1673e47616dfSKalyan Thota .dspp_count = ARRAY_SIZE(sc7180_dspp), 1674e47616dfSKalyan Thota .dspp = sc7180_dspp, 16757bdc0c4bSKalyan Thota .pingpong_count = ARRAY_SIZE(sc7180_pp), 16767bdc0c4bSKalyan Thota .pingpong = sc7180_pp, 16777bdc0c4bSKalyan Thota .intf_count = ARRAY_SIZE(sc7180_intf), 16787bdc0c4bSKalyan Thota .intf = sc7180_intf, 16797bdc0c4bSKalyan Thota .vbif_count = ARRAY_SIZE(sdm845_vbif), 16807bdc0c4bSKalyan Thota .vbif = sdm845_vbif, 16817bdc0c4bSKalyan Thota .reg_dma_count = 1, 16827bdc0c4bSKalyan Thota .dma_cfg = sdm845_regdma, 16837bdc0c4bSKalyan Thota .perf = sc7180_perf_data, 1684597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7180_MASK, 16857bdc0c4bSKalyan Thota }; 16867bdc0c4bSKalyan Thota } 16877bdc0c4bSKalyan Thota 1688386fced3SJonathan Marek /* 1689386fced3SJonathan Marek * sm8150_cfg_init(): populate sm8150 dpu sub-blocks reg offsets 1690386fced3SJonathan Marek * and instance counts. 1691386fced3SJonathan Marek */ 1692386fced3SJonathan Marek static void sm8150_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1693386fced3SJonathan Marek { 1694386fced3SJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1695386fced3SJonathan Marek .caps = &sm8150_dpu_caps, 1696386fced3SJonathan Marek .mdp_count = ARRAY_SIZE(sdm845_mdp), 1697386fced3SJonathan Marek .mdp = sdm845_mdp, 1698386fced3SJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1699386fced3SJonathan Marek .ctl = sm8150_ctl, 1700386fced3SJonathan Marek .sspp_count = ARRAY_SIZE(sdm845_sspp), 1701386fced3SJonathan Marek .sspp = sdm845_sspp, 1702386fced3SJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1703386fced3SJonathan Marek .mixer = sm8150_lm, 170405ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 170505ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1706386fced3SJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1707386fced3SJonathan Marek .pingpong = sm8150_pp, 17084369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 17094369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1710386fced3SJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1711386fced3SJonathan Marek .intf = sm8150_intf, 1712386fced3SJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1713386fced3SJonathan Marek .vbif = sdm845_vbif, 1714386fced3SJonathan Marek .reg_dma_count = 1, 1715386fced3SJonathan Marek .dma_cfg = sm8150_regdma, 1716386fced3SJonathan Marek .perf = sm8150_perf_data, 1717597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SDM845_MASK, 1718386fced3SJonathan Marek }; 1719386fced3SJonathan Marek } 1720386fced3SJonathan Marek 1721af776a3eSJonathan Marek /* 1722f3af2d6eSRob Clark * sc8180x_cfg_init(): populate sc8180 dpu sub-blocks reg offsets 1723f3af2d6eSRob Clark * and instance counts. 1724f3af2d6eSRob Clark */ 1725f3af2d6eSRob Clark static void sc8180x_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1726f3af2d6eSRob Clark { 1727f3af2d6eSRob Clark *dpu_cfg = (struct dpu_mdss_cfg){ 1728f3af2d6eSRob Clark .caps = &sc8180x_dpu_caps, 1729f3af2d6eSRob Clark .mdp_count = ARRAY_SIZE(sc8180x_mdp), 1730f3af2d6eSRob Clark .mdp = sc8180x_mdp, 1731f3af2d6eSRob Clark .ctl_count = ARRAY_SIZE(sm8150_ctl), 1732f3af2d6eSRob Clark .ctl = sm8150_ctl, 1733f3af2d6eSRob Clark .sspp_count = ARRAY_SIZE(sdm845_sspp), 1734f3af2d6eSRob Clark .sspp = sdm845_sspp, 1735f3af2d6eSRob Clark .mixer_count = ARRAY_SIZE(sm8150_lm), 1736f3af2d6eSRob Clark .mixer = sm8150_lm, 1737f3af2d6eSRob Clark .pingpong_count = ARRAY_SIZE(sm8150_pp), 1738f3af2d6eSRob Clark .pingpong = sm8150_pp, 1739f3af2d6eSRob Clark .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 1740f3af2d6eSRob Clark .merge_3d = sm8150_merge_3d, 1741f3af2d6eSRob Clark .intf_count = ARRAY_SIZE(sc8180x_intf), 1742f3af2d6eSRob Clark .intf = sc8180x_intf, 1743f3af2d6eSRob Clark .vbif_count = ARRAY_SIZE(sdm845_vbif), 1744f3af2d6eSRob Clark .vbif = sdm845_vbif, 1745f3af2d6eSRob Clark .reg_dma_count = 1, 1746f3af2d6eSRob Clark .dma_cfg = sm8150_regdma, 1747f3af2d6eSRob Clark .perf = sc8180x_perf_data, 1748f3af2d6eSRob Clark .mdss_irqs = IRQ_SC8180X_MASK, 1749f3af2d6eSRob Clark }; 1750f3af2d6eSRob Clark } 1751f3af2d6eSRob Clark 1752f3af2d6eSRob Clark /* 1753af776a3eSJonathan Marek * sm8250_cfg_init(): populate sm8250 dpu sub-blocks reg offsets 1754af776a3eSJonathan Marek * and instance counts. 1755af776a3eSJonathan Marek */ 1756af776a3eSJonathan Marek static void sm8250_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1757af776a3eSJonathan Marek { 1758af776a3eSJonathan Marek *dpu_cfg = (struct dpu_mdss_cfg){ 1759af776a3eSJonathan Marek .caps = &sm8250_dpu_caps, 1760af776a3eSJonathan Marek .mdp_count = ARRAY_SIZE(sm8250_mdp), 1761af776a3eSJonathan Marek .mdp = sm8250_mdp, 1762af776a3eSJonathan Marek .ctl_count = ARRAY_SIZE(sm8150_ctl), 1763af776a3eSJonathan Marek .ctl = sm8150_ctl, 1764d21fc5dfSDmitry Baryshkov .sspp_count = ARRAY_SIZE(sm8250_sspp), 1765d21fc5dfSDmitry Baryshkov .sspp = sm8250_sspp, 1766af776a3eSJonathan Marek .mixer_count = ARRAY_SIZE(sm8150_lm), 1767af776a3eSJonathan Marek .mixer = sm8150_lm, 176805ae91d9SDmitry Baryshkov .dspp_count = ARRAY_SIZE(sm8150_dspp), 176905ae91d9SDmitry Baryshkov .dspp = sm8150_dspp, 1770af776a3eSJonathan Marek .pingpong_count = ARRAY_SIZE(sm8150_pp), 1771af776a3eSJonathan Marek .pingpong = sm8150_pp, 17724369c93cSDmitry Baryshkov .merge_3d_count = ARRAY_SIZE(sm8150_merge_3d), 17734369c93cSDmitry Baryshkov .merge_3d = sm8150_merge_3d, 1774af776a3eSJonathan Marek .intf_count = ARRAY_SIZE(sm8150_intf), 1775af776a3eSJonathan Marek .intf = sm8150_intf, 1776af776a3eSJonathan Marek .vbif_count = ARRAY_SIZE(sdm845_vbif), 1777af776a3eSJonathan Marek .vbif = sdm845_vbif, 1778af776a3eSJonathan Marek .reg_dma_count = 1, 1779af776a3eSJonathan Marek .dma_cfg = sm8250_regdma, 1780af776a3eSJonathan Marek .perf = sm8250_perf_data, 1781597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SM8250_MASK, 1782af776a3eSJonathan Marek }; 1783af776a3eSJonathan Marek } 1784af776a3eSJonathan Marek 1785591e34a0SKrishna Manikandan static void sc7280_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 1786591e34a0SKrishna Manikandan { 1787591e34a0SKrishna Manikandan *dpu_cfg = (struct dpu_mdss_cfg){ 1788591e34a0SKrishna Manikandan .caps = &sc7280_dpu_caps, 1789591e34a0SKrishna Manikandan .mdp_count = ARRAY_SIZE(sc7280_mdp), 1790591e34a0SKrishna Manikandan .mdp = sc7280_mdp, 1791591e34a0SKrishna Manikandan .ctl_count = ARRAY_SIZE(sc7280_ctl), 1792591e34a0SKrishna Manikandan .ctl = sc7280_ctl, 1793591e34a0SKrishna Manikandan .sspp_count = ARRAY_SIZE(sc7280_sspp), 1794591e34a0SKrishna Manikandan .sspp = sc7280_sspp, 1795591e34a0SKrishna Manikandan .mixer_count = ARRAY_SIZE(sc7280_lm), 1796591e34a0SKrishna Manikandan .mixer = sc7280_lm, 1797591e34a0SKrishna Manikandan .pingpong_count = ARRAY_SIZE(sc7280_pp), 1798591e34a0SKrishna Manikandan .pingpong = sc7280_pp, 1799591e34a0SKrishna Manikandan .intf_count = ARRAY_SIZE(sc7280_intf), 1800591e34a0SKrishna Manikandan .intf = sc7280_intf, 1801591e34a0SKrishna Manikandan .vbif_count = ARRAY_SIZE(sdm845_vbif), 1802591e34a0SKrishna Manikandan .vbif = sdm845_vbif, 1803591e34a0SKrishna Manikandan .perf = sc7280_perf_data, 1804597762d5SDmitry Baryshkov .mdss_irqs = IRQ_SC7280_MASK, 1805591e34a0SKrishna Manikandan }; 1806591e34a0SKrishna Manikandan } 1807591e34a0SKrishna Manikandan 18085334087eSLoic Poulain 18095334087eSLoic Poulain /* 18105334087eSLoic Poulain * qcm2290_cfg_init(): populate qcm2290 dpu sub-blocks reg offsets 18115334087eSLoic Poulain * and instance counts. 18125334087eSLoic Poulain */ 18135334087eSLoic Poulain static void qcm2290_cfg_init(struct dpu_mdss_cfg *dpu_cfg) 18145334087eSLoic Poulain { 18155334087eSLoic Poulain *dpu_cfg = (struct dpu_mdss_cfg){ 18165334087eSLoic Poulain .caps = &qcm2290_dpu_caps, 18175334087eSLoic Poulain .mdp_count = ARRAY_SIZE(qcm2290_mdp), 18185334087eSLoic Poulain .mdp = qcm2290_mdp, 18195334087eSLoic Poulain .ctl_count = ARRAY_SIZE(qcm2290_ctl), 18205334087eSLoic Poulain .ctl = qcm2290_ctl, 18215334087eSLoic Poulain .sspp_count = ARRAY_SIZE(qcm2290_sspp), 18225334087eSLoic Poulain .sspp = qcm2290_sspp, 18235334087eSLoic Poulain .mixer_count = ARRAY_SIZE(qcm2290_lm), 18245334087eSLoic Poulain .mixer = qcm2290_lm, 18255334087eSLoic Poulain .dspp_count = ARRAY_SIZE(qcm2290_dspp), 18265334087eSLoic Poulain .dspp = qcm2290_dspp, 18275334087eSLoic Poulain .pingpong_count = ARRAY_SIZE(qcm2290_pp), 18285334087eSLoic Poulain .pingpong = qcm2290_pp, 18295334087eSLoic Poulain .intf_count = ARRAY_SIZE(qcm2290_intf), 18305334087eSLoic Poulain .intf = qcm2290_intf, 18315334087eSLoic Poulain .vbif_count = ARRAY_SIZE(sdm845_vbif), 18325334087eSLoic Poulain .vbif = sdm845_vbif, 18335334087eSLoic Poulain .reg_dma_count = 1, 18345334087eSLoic Poulain .dma_cfg = sdm845_regdma, 18355334087eSLoic Poulain .perf = qcm2290_perf_data, 18365334087eSLoic Poulain .mdss_irqs = IRQ_SC7180_MASK, 18375334087eSLoic Poulain }; 18385334087eSLoic Poulain } 18395334087eSLoic Poulain 1840abda0d92SStephen Boyd static const struct dpu_mdss_hw_cfg_handler cfg_handler[] = { 184194391a14SAngeloGioacchino Del Regno { .hw_rev = DPU_HW_VER_300, .cfg_init = msm8998_cfg_init}, 184294391a14SAngeloGioacchino Del Regno { .hw_rev = DPU_HW_VER_301, .cfg_init = msm8998_cfg_init}, 184325fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_400, .cfg_init = sdm845_cfg_init}, 184425fdd593SJeykumar Sankaran { .hw_rev = DPU_HW_VER_401, .cfg_init = sdm845_cfg_init}, 1845386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_500, .cfg_init = sm8150_cfg_init}, 1846386fced3SJonathan Marek { .hw_rev = DPU_HW_VER_501, .cfg_init = sm8150_cfg_init}, 1847f3af2d6eSRob Clark { .hw_rev = DPU_HW_VER_510, .cfg_init = sc8180x_cfg_init}, 1848af776a3eSJonathan Marek { .hw_rev = DPU_HW_VER_600, .cfg_init = sm8250_cfg_init}, 18497bdc0c4bSKalyan Thota { .hw_rev = DPU_HW_VER_620, .cfg_init = sc7180_cfg_init}, 18505334087eSLoic Poulain { .hw_rev = DPU_HW_VER_650, .cfg_init = qcm2290_cfg_init}, 1851591e34a0SKrishna Manikandan { .hw_rev = DPU_HW_VER_720, .cfg_init = sc7280_cfg_init}, 185225fdd593SJeykumar Sankaran }; 185325fdd593SJeykumar Sankaran 185425fdd593SJeykumar Sankaran void dpu_hw_catalog_deinit(struct dpu_mdss_cfg *dpu_cfg) 185525fdd593SJeykumar Sankaran { 185625fdd593SJeykumar Sankaran kfree(dpu_cfg); 185725fdd593SJeykumar Sankaran } 185825fdd593SJeykumar Sankaran 185925fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_hw_catalog_init(u32 hw_rev) 186025fdd593SJeykumar Sankaran { 186125fdd593SJeykumar Sankaran int i; 186225fdd593SJeykumar Sankaran struct dpu_mdss_cfg *dpu_cfg; 186325fdd593SJeykumar Sankaran 186425fdd593SJeykumar Sankaran dpu_cfg = kzalloc(sizeof(*dpu_cfg), GFP_KERNEL); 186525fdd593SJeykumar Sankaran if (!dpu_cfg) 186625fdd593SJeykumar Sankaran return ERR_PTR(-ENOMEM); 186725fdd593SJeykumar Sankaran 186825fdd593SJeykumar Sankaran for (i = 0; i < ARRAY_SIZE(cfg_handler); i++) { 186925fdd593SJeykumar Sankaran if (cfg_handler[i].hw_rev == hw_rev) { 187025fdd593SJeykumar Sankaran cfg_handler[i].cfg_init(dpu_cfg); 187125fdd593SJeykumar Sankaran dpu_cfg->hwversion = hw_rev; 187225fdd593SJeykumar Sankaran return dpu_cfg; 187325fdd593SJeykumar Sankaran } 187425fdd593SJeykumar Sankaran } 187525fdd593SJeykumar Sankaran 187625fdd593SJeykumar Sankaran DPU_ERROR("unsupported chipset id:%X\n", hw_rev); 187725fdd593SJeykumar Sankaran dpu_hw_catalog_deinit(dpu_cfg); 187825fdd593SJeykumar Sankaran return ERR_PTR(-ENODEV); 187925fdd593SJeykumar Sankaran } 188025fdd593SJeykumar Sankaran 1881