13186acbaSKonrad Dybcio /* SPDX-License-Identifier: GPL-2.0-only */ 23186acbaSKonrad Dybcio /* 33186acbaSKonrad Dybcio * Copyright (c) 2022. Qualcomm Innovation Center, Inc. All rights reserved. 43186acbaSKonrad Dybcio * Copyright (c) 2015-2018, 2020 The Linux Foundation. All rights reserved. 53186acbaSKonrad Dybcio * Copyright (c) 2023, Linaro Limited 63186acbaSKonrad Dybcio */ 73186acbaSKonrad Dybcio 83186acbaSKonrad Dybcio #ifndef _DPU_6_4_SM6350_H 93186acbaSKonrad Dybcio #define _DPU_6_4_SM6350_H 103186acbaSKonrad Dybcio 113186acbaSKonrad Dybcio static const struct dpu_caps sm6350_dpu_caps = { 123186acbaSKonrad Dybcio .max_mixer_width = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 133186acbaSKonrad Dybcio .max_mixer_blendstages = 0x7, 143186acbaSKonrad Dybcio .qseed_type = DPU_SSPP_SCALER_QSEED4, 153186acbaSKonrad Dybcio .has_src_split = true, 163186acbaSKonrad Dybcio .has_dim_layer = true, 173186acbaSKonrad Dybcio .has_idle_pc = true, 183186acbaSKonrad Dybcio .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, 193186acbaSKonrad Dybcio .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, 203186acbaSKonrad Dybcio }; 213186acbaSKonrad Dybcio 226b2dc8cfSDmitry Baryshkov static const struct dpu_mdp_cfg sm6350_mdp = { 23469bae7dSDmitry Baryshkov .name = "top_0", 243186acbaSKonrad Dybcio .base = 0x0, .len = 0x494, 2525c6ae11SDmitry Baryshkov .clk_ctrls = { 2625c6ae11SDmitry Baryshkov [DPU_CLK_CTRL_VIG0] = { .reg_off = 0x2ac, .bit_off = 0 }, 2725c6ae11SDmitry Baryshkov [DPU_CLK_CTRL_DMA0] = { .reg_off = 0x2ac, .bit_off = 8 }, 2825c6ae11SDmitry Baryshkov [DPU_CLK_CTRL_DMA1] = { .reg_off = 0x2b4, .bit_off = 8 }, 2925c6ae11SDmitry Baryshkov [DPU_CLK_CTRL_DMA2] = { .reg_off = 0x2c4, .bit_off = 8 }, 3025c6ae11SDmitry Baryshkov [DPU_CLK_CTRL_REG_DMA] = { .reg_off = 0x2bc, .bit_off = 20 }, 3125c6ae11SDmitry Baryshkov }, 323186acbaSKonrad Dybcio }; 333186acbaSKonrad Dybcio 343186acbaSKonrad Dybcio static const struct dpu_ctl_cfg sm6350_ctl[] = { 353186acbaSKonrad Dybcio { 363186acbaSKonrad Dybcio .name = "ctl_0", .id = CTL_0, 373186acbaSKonrad Dybcio .base = 0x1000, .len = 0x1dc, 383186acbaSKonrad Dybcio .features = BIT(DPU_CTL_ACTIVE_CFG), 393186acbaSKonrad Dybcio .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 9), 402a6387e2SDmitry Baryshkov }, { 413186acbaSKonrad Dybcio .name = "ctl_1", .id = CTL_1, 423186acbaSKonrad Dybcio .base = 0x1200, .len = 0x1dc, 433186acbaSKonrad Dybcio .features = BIT(DPU_CTL_ACTIVE_CFG), 443186acbaSKonrad Dybcio .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 10), 452a6387e2SDmitry Baryshkov }, { 463186acbaSKonrad Dybcio .name = "ctl_2", .id = CTL_2, 473186acbaSKonrad Dybcio .base = 0x1400, .len = 0x1dc, 483186acbaSKonrad Dybcio .features = BIT(DPU_CTL_ACTIVE_CFG), 493186acbaSKonrad Dybcio .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 11), 502a6387e2SDmitry Baryshkov }, { 513186acbaSKonrad Dybcio .name = "ctl_3", .id = CTL_3, 523186acbaSKonrad Dybcio .base = 0x1600, .len = 0x1dc, 533186acbaSKonrad Dybcio .features = BIT(DPU_CTL_ACTIVE_CFG), 543186acbaSKonrad Dybcio .intr_start = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR2, 12), 553186acbaSKonrad Dybcio }, 563186acbaSKonrad Dybcio }; 573186acbaSKonrad Dybcio 583186acbaSKonrad Dybcio static const struct dpu_sspp_cfg sm6350_sspp[] = { 59ef7d0e8dSDmitry Baryshkov { 60ef7d0e8dSDmitry Baryshkov .name = "sspp_0", .id = SSPP_VIG0, 61ef7d0e8dSDmitry Baryshkov .base = 0x4000, .len = 0x1f8, 62ef7d0e8dSDmitry Baryshkov .features = VIG_SC7180_MASK, 63ef7d0e8dSDmitry Baryshkov .sblk = &sc7180_vig_sblk_0, 64ef7d0e8dSDmitry Baryshkov .xin_id = 0, 65ef7d0e8dSDmitry Baryshkov .type = SSPP_TYPE_VIG, 66ef7d0e8dSDmitry Baryshkov .clk_ctrl = DPU_CLK_CTRL_VIG0, 67ef7d0e8dSDmitry Baryshkov }, { 68ef7d0e8dSDmitry Baryshkov .name = "sspp_8", .id = SSPP_DMA0, 69ef7d0e8dSDmitry Baryshkov .base = 0x24000, .len = 0x1f8, 70ef7d0e8dSDmitry Baryshkov .features = DMA_SDM845_MASK, 71ef7d0e8dSDmitry Baryshkov .sblk = &sdm845_dma_sblk_0, 72ef7d0e8dSDmitry Baryshkov .xin_id = 1, 73ef7d0e8dSDmitry Baryshkov .type = SSPP_TYPE_DMA, 74ef7d0e8dSDmitry Baryshkov .clk_ctrl = DPU_CLK_CTRL_DMA0, 75ef7d0e8dSDmitry Baryshkov }, { 76ef7d0e8dSDmitry Baryshkov .name = "sspp_9", .id = SSPP_DMA1, 77ef7d0e8dSDmitry Baryshkov .base = 0x26000, .len = 0x1f8, 78ef7d0e8dSDmitry Baryshkov .features = DMA_CURSOR_SDM845_MASK, 79ef7d0e8dSDmitry Baryshkov .sblk = &sdm845_dma_sblk_1, 80ef7d0e8dSDmitry Baryshkov .xin_id = 5, 81ef7d0e8dSDmitry Baryshkov .type = SSPP_TYPE_DMA, 82ef7d0e8dSDmitry Baryshkov .clk_ctrl = DPU_CLK_CTRL_DMA1, 83ef7d0e8dSDmitry Baryshkov }, { 84ef7d0e8dSDmitry Baryshkov .name = "sspp_10", .id = SSPP_DMA2, 85ef7d0e8dSDmitry Baryshkov .base = 0x28000, .len = 0x1f8, 86ef7d0e8dSDmitry Baryshkov .features = DMA_CURSOR_SDM845_MASK, 87ef7d0e8dSDmitry Baryshkov .sblk = &sdm845_dma_sblk_2, 88ef7d0e8dSDmitry Baryshkov .xin_id = 9, 89ef7d0e8dSDmitry Baryshkov .type = SSPP_TYPE_DMA, 90ef7d0e8dSDmitry Baryshkov .clk_ctrl = DPU_CLK_CTRL_DMA2, 91ef7d0e8dSDmitry Baryshkov }, 923186acbaSKonrad Dybcio }; 933186acbaSKonrad Dybcio 943186acbaSKonrad Dybcio static const struct dpu_lm_cfg sm6350_lm[] = { 958d3e0dd0SDmitry Baryshkov { 968d3e0dd0SDmitry Baryshkov .name = "lm_0", .id = LM_0, 978d3e0dd0SDmitry Baryshkov .base = 0x44000, .len = 0x320, 988d3e0dd0SDmitry Baryshkov .features = MIXER_SDM845_MASK, 998d3e0dd0SDmitry Baryshkov .sblk = &sc7180_lm_sblk, 1008d3e0dd0SDmitry Baryshkov .lm_pair = LM_1, 1018d3e0dd0SDmitry Baryshkov .pingpong = PINGPONG_0, 1028d3e0dd0SDmitry Baryshkov .dspp = DSPP_0, 1038d3e0dd0SDmitry Baryshkov }, { 1048d3e0dd0SDmitry Baryshkov .name = "lm_1", .id = LM_1, 1058d3e0dd0SDmitry Baryshkov .base = 0x45000, .len = 0x320, 1068d3e0dd0SDmitry Baryshkov .features = MIXER_SDM845_MASK, 1078d3e0dd0SDmitry Baryshkov .sblk = &sc7180_lm_sblk, 1088d3e0dd0SDmitry Baryshkov .lm_pair = LM_0, 1098d3e0dd0SDmitry Baryshkov .pingpong = PINGPONG_1, 1108d3e0dd0SDmitry Baryshkov .dspp = 0, 1118d3e0dd0SDmitry Baryshkov }, 1123186acbaSKonrad Dybcio }; 1133186acbaSKonrad Dybcio 1143186acbaSKonrad Dybcio static const struct dpu_dspp_cfg sm6350_dspp[] = { 115e28db021SDmitry Baryshkov { 116e28db021SDmitry Baryshkov .name = "dspp_0", .id = DSPP_0, 117e28db021SDmitry Baryshkov .base = 0x54000, .len = 0x1800, 118e28db021SDmitry Baryshkov .features = DSPP_SC7180_MASK, 119e28db021SDmitry Baryshkov .sblk = &sdm845_dspp_sblk, 120e28db021SDmitry Baryshkov }, 1213186acbaSKonrad Dybcio }; 1223186acbaSKonrad Dybcio 1233186acbaSKonrad Dybcio static struct dpu_pingpong_cfg sm6350_pp[] = { 12435973be8SDmitry Baryshkov { 12535973be8SDmitry Baryshkov .name = "pingpong_0", .id = PINGPONG_0, 12635973be8SDmitry Baryshkov .base = 0x70000, .len = 0xd4, 12735973be8SDmitry Baryshkov .features = PINGPONG_SM8150_MASK, 12835973be8SDmitry Baryshkov .sblk = &sdm845_pp_sblk, 12935973be8SDmitry Baryshkov .merge_3d = 0, 13035973be8SDmitry Baryshkov .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 8), 13135973be8SDmitry Baryshkov .intr_rdptr = -1, 13235973be8SDmitry Baryshkov }, { 13335973be8SDmitry Baryshkov .name = "pingpong_1", .id = PINGPONG_1, 13435973be8SDmitry Baryshkov .base = 0x70800, .len = 0xd4, 13535973be8SDmitry Baryshkov .features = PINGPONG_SM8150_MASK, 13635973be8SDmitry Baryshkov .sblk = &sdm845_pp_sblk, 13735973be8SDmitry Baryshkov .merge_3d = 0, 13835973be8SDmitry Baryshkov .intr_done = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 9), 13935973be8SDmitry Baryshkov .intr_rdptr = -1, 14035973be8SDmitry Baryshkov }, 1413186acbaSKonrad Dybcio }; 1423186acbaSKonrad Dybcio 1433186acbaSKonrad Dybcio static const struct dpu_dsc_cfg sm6350_dsc[] = { 144194347dfSDmitry Baryshkov { 145194347dfSDmitry Baryshkov .name = "dsc_0", .id = DSC_0, 146194347dfSDmitry Baryshkov .base = 0x80000, .len = 0x140, 147194347dfSDmitry Baryshkov .features = BIT(DPU_DSC_OUTPUT_CTRL), 148194347dfSDmitry Baryshkov }, 1493186acbaSKonrad Dybcio }; 1503186acbaSKonrad Dybcio 1513186acbaSKonrad Dybcio static const struct dpu_intf_cfg sm6350_intf[] = { 152ed4fa8c6SDmitry Baryshkov { 153ed4fa8c6SDmitry Baryshkov .name = "intf_0", .id = INTF_0, 154ed4fa8c6SDmitry Baryshkov .base = 0x6a000, .len = 0x280, 155ed4fa8c6SDmitry Baryshkov .features = INTF_SC7180_MASK, 156ed4fa8c6SDmitry Baryshkov .type = INTF_DP, 157ed4fa8c6SDmitry Baryshkov .controller_id = MSM_DP_CONTROLLER_0, 158ed4fa8c6SDmitry Baryshkov .prog_fetch_lines_worst_case = 35, 159ed4fa8c6SDmitry Baryshkov .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 24), 160ed4fa8c6SDmitry Baryshkov .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 25), 161ed4fa8c6SDmitry Baryshkov .intr_tear_rd_ptr = -1, 162ed4fa8c6SDmitry Baryshkov }, { 163ed4fa8c6SDmitry Baryshkov .name = "intf_1", .id = INTF_1, 164ed4fa8c6SDmitry Baryshkov .base = 0x6a800, .len = 0x2c0, 165ed4fa8c6SDmitry Baryshkov .features = INTF_SC7180_MASK, 166ed4fa8c6SDmitry Baryshkov .type = INTF_DSI, 167ed4fa8c6SDmitry Baryshkov .controller_id = MSM_DSI_CONTROLLER_0, 168ed4fa8c6SDmitry Baryshkov .prog_fetch_lines_worst_case = 35, 169ed4fa8c6SDmitry Baryshkov .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 26), 170ed4fa8c6SDmitry Baryshkov .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 27), 171ed4fa8c6SDmitry Baryshkov .intr_tear_rd_ptr = DPU_IRQ_IDX(MDP_INTF1_TEAR_INTR, 2), 172ed4fa8c6SDmitry Baryshkov }, 1733186acbaSKonrad Dybcio }; 1743186acbaSKonrad Dybcio 1753186acbaSKonrad Dybcio static const struct dpu_perf_cfg sm6350_perf_data = { 1763186acbaSKonrad Dybcio .max_bw_low = 4200000, 1773186acbaSKonrad Dybcio .max_bw_high = 5100000, 1783186acbaSKonrad Dybcio .min_core_ib = 2500000, 1793186acbaSKonrad Dybcio .min_llcc_ib = 0, 1803186acbaSKonrad Dybcio .min_dram_ib = 1600000, 1813186acbaSKonrad Dybcio .min_prefill_lines = 35, 1823186acbaSKonrad Dybcio /* TODO: confirm danger_lut_tbl */ 1833186acbaSKonrad Dybcio .danger_lut_tbl = {0xffff, 0xffff, 0x0}, 1843186acbaSKonrad Dybcio .safe_lut_tbl = {0xff00, 0xff00, 0xffff}, 1853186acbaSKonrad Dybcio .qos_lut_tbl = { 1863186acbaSKonrad Dybcio {.nentry = ARRAY_SIZE(sm6350_qos_linear_macrotile), 1873186acbaSKonrad Dybcio .entries = sm6350_qos_linear_macrotile 1883186acbaSKonrad Dybcio }, 1893186acbaSKonrad Dybcio {.nentry = ARRAY_SIZE(sm6350_qos_linear_macrotile), 1903186acbaSKonrad Dybcio .entries = sm6350_qos_linear_macrotile 1913186acbaSKonrad Dybcio }, 1923186acbaSKonrad Dybcio {.nentry = ARRAY_SIZE(sc7180_qos_nrt), 1933186acbaSKonrad Dybcio .entries = sc7180_qos_nrt 1943186acbaSKonrad Dybcio }, 1953186acbaSKonrad Dybcio }, 1963186acbaSKonrad Dybcio .cdp_cfg = { 1973186acbaSKonrad Dybcio {.rd_enable = 1, .wr_enable = 1}, 1983186acbaSKonrad Dybcio {.rd_enable = 1, .wr_enable = 0} 1993186acbaSKonrad Dybcio }, 2003186acbaSKonrad Dybcio .clk_inefficiency_factor = 105, 2013186acbaSKonrad Dybcio .bw_inefficiency_factor = 120, 2023186acbaSKonrad Dybcio }; 2033186acbaSKonrad Dybcio 204*d5ffd30bSAbhinav Kumar static const struct dpu_mdss_version sm6350_mdss_ver = { 205*d5ffd30bSAbhinav Kumar .core_major_ver = 6, 206*d5ffd30bSAbhinav Kumar .core_minor_ver = 4, 207*d5ffd30bSAbhinav Kumar }; 208*d5ffd30bSAbhinav Kumar 2093186acbaSKonrad Dybcio const struct dpu_mdss_cfg dpu_sm6350_cfg = { 210*d5ffd30bSAbhinav Kumar .mdss_ver = &sm6350_mdss_ver, 2113186acbaSKonrad Dybcio .caps = &sm6350_dpu_caps, 2126b2dc8cfSDmitry Baryshkov .mdp = &sm6350_mdp, 2133186acbaSKonrad Dybcio .ctl_count = ARRAY_SIZE(sm6350_ctl), 2143186acbaSKonrad Dybcio .ctl = sm6350_ctl, 2153186acbaSKonrad Dybcio .sspp_count = ARRAY_SIZE(sm6350_sspp), 2163186acbaSKonrad Dybcio .sspp = sm6350_sspp, 2173186acbaSKonrad Dybcio .mixer_count = ARRAY_SIZE(sm6350_lm), 2183186acbaSKonrad Dybcio .mixer = sm6350_lm, 2193186acbaSKonrad Dybcio .dspp_count = ARRAY_SIZE(sm6350_dspp), 2203186acbaSKonrad Dybcio .dspp = sm6350_dspp, 2213186acbaSKonrad Dybcio .dsc_count = ARRAY_SIZE(sm6350_dsc), 2223186acbaSKonrad Dybcio .dsc = sm6350_dsc, 2233186acbaSKonrad Dybcio .pingpong_count = ARRAY_SIZE(sm6350_pp), 2243186acbaSKonrad Dybcio .pingpong = sm6350_pp, 2253186acbaSKonrad Dybcio .intf_count = ARRAY_SIZE(sm6350_intf), 2263186acbaSKonrad Dybcio .intf = sm6350_intf, 2273186acbaSKonrad Dybcio .vbif_count = ARRAY_SIZE(sdm845_vbif), 2283186acbaSKonrad Dybcio .vbif = sdm845_vbif, 2293186acbaSKonrad Dybcio .perf = &sm6350_perf_data, 2303186acbaSKonrad Dybcio }; 2313186acbaSKonrad Dybcio 2323186acbaSKonrad Dybcio #endif 233