Loading drivers/gpu/drm/msm/sde/sde_hw_catalog.c +18 −45 Original line number Diff line number Diff line Loading @@ -983,9 +983,9 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg, sspp->id - SSPP_VIG0); sspp->clk_ctrl = SDE_CLK_CTRL_VIG0 + *vig_count; sspp->type = SSPP_TYPE_VIG; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*vig_count)++; if (!prop_value) Loading Loading @@ -1111,9 +1111,9 @@ static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg, sspp->id - SSPP_VIG0); sspp->clk_ctrl = SDE_CLK_CTRL_RGB0 + *rgb_count; sspp->type = SSPP_TYPE_RGB; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*rgb_count)++; if (!prop_value) Loading Loading @@ -1189,9 +1189,9 @@ static void _sde_sspp_setup_dma(struct sde_mdss_cfg *sde_cfg, snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id - SSPP_VIG0); sspp->type = SSPP_TYPE_DMA; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*dma_count)++; if (!prop_value) Loading Loading @@ -1373,13 +1373,14 @@ static int sde_sspp_parse_dt(struct device_node *np, set_bit(SDE_SSPP_SRC, &sspp->features); if (sde_cfg->has_cdp) set_bit(SDE_SSPP_CDP, &sspp->features); set_bit(SDE_PERF_SSPP_CDP, &sspp->perf_features); if (sde_cfg->ts_prefill_rev == 1) { set_bit(SDE_SSPP_TS_PREFILL, &sspp->features); set_bit(SDE_PERF_SSPP_TS_PREFILL, &sspp->perf_features); } else if (sde_cfg->ts_prefill_rev == 2) { set_bit(SDE_SSPP_TS_PREFILL, &sspp->features); set_bit(SDE_SSPP_TS_PREFILL_REC1, &sspp->features); set_bit(SDE_PERF_SSPP_TS_PREFILL, &sspp->perf_features); set_bit(SDE_PERF_SSPP_TS_PREFILL_REC1, &sspp->perf_features); } sblk->smart_dma_priority = Loading Loading @@ -3339,21 +3340,12 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg, } dma_list_size = ARRAY_SIZE(plane_formats); vig_list_size = ARRAY_SIZE(plane_formats_yuv); virt_vig_list_size = ARRAY_SIZE(plane_formats); wb2_list_size = ARRAY_SIZE(wb2_formats); dma_list_size += ARRAY_SIZE(rgb_10bit_formats); vig_list_size += ARRAY_SIZE(rgb_10bit_formats) + ARRAY_SIZE(tp10_ubwc_formats) + ARRAY_SIZE(p010_formats); virt_vig_list_size += ARRAY_SIZE(rgb_10bit_formats); vig_list_size = ARRAY_SIZE(plane_formats_vig); if (sde_cfg->has_vig_p010) vig_list_size += ARRAY_SIZE(p010_ubwc_formats); virt_vig_list_size = ARRAY_SIZE(plane_formats); wb2_list_size = ARRAY_SIZE(wb2_formats); wb2_list_size += ARRAY_SIZE(rgb_10bit_formats) + ARRAY_SIZE(tp10_ubwc_formats); sde_cfg->dma_formats = kcalloc(dma_list_size, sizeof(struct sde_format_extended), GFP_KERNEL); Loading Loading @@ -3386,39 +3378,20 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg, index = sde_copy_formats(sde_cfg->dma_formats, dma_list_size, 0, plane_formats, ARRAY_SIZE(plane_formats)); index += sde_copy_formats(sde_cfg->dma_formats, dma_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index = sde_copy_formats(sde_cfg->vig_formats, vig_list_size, 0, plane_formats_yuv, ARRAY_SIZE(plane_formats_yuv)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, p010_formats, ARRAY_SIZE(p010_formats)); 0, plane_formats_vig, ARRAY_SIZE(plane_formats_vig)); if (sde_cfg->has_vig_p010) index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, p010_ubwc_formats, ARRAY_SIZE(p010_ubwc_formats)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, tp10_ubwc_formats, ARRAY_SIZE(tp10_ubwc_formats)); index = sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size, 0, plane_formats, ARRAY_SIZE(plane_formats)); index += sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index = sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, 0, wb2_formats, ARRAY_SIZE(wb2_formats)); index += sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index += sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, index, tp10_ubwc_formats, ARRAY_SIZE(tp10_ubwc_formats)); end: return rc; } Loading Loading @@ -3560,8 +3533,8 @@ static int _sde_hardware_post_caps(struct sde_mdss_cfg *sde_cfg, sde_cfg->max_mixer_blendstages - SDE_STAGE_0; for (i = 0; i < sde_cfg->sspp_count; i++) set_bit(SDE_SSPP_QOS_FL_NOCALC, &sde_cfg->sspp[i].features); set_bit(SDE_PERF_SSPP_QOS_FL_NOCALC, &sde_cfg->sspp[i].perf_features); } for (i = 0; i < sde_cfg->sspp_count; i++) { Loading drivers/gpu/drm/msm/sde/sde_hw_catalog.h +23 −13 Original line number Diff line number Diff line Loading @@ -157,15 +157,10 @@ enum { * @SDE_SSPP_MEMCOLOR Memory Color Support * @SDE_SSPP_PCC, Color correction support * @SDE_SSPP_CURSOR, SSPP can be used as a cursor layer * @SDE_SSPP_QOS, SSPP support QoS control, danger/safe/creq * @SDE_SSPP_QOS_8LVL, SSPP support 8-level QoS control * @SDE_SSPP_EXCL_RECT, SSPP supports exclusion rect * @SDE_SSPP_SMART_DMA_V1, SmartDMA 1.0 support * @SDE_SSPP_SMART_DMA_V2, SmartDMA 2.0 support * @SDE_SSPP_SMART_DMA_V2p5, SmartDMA 2.5 support * @SDE_SSPP_TS_PREFILL Supports prefill with traffic shaper * @SDE_SSPP_TS_PREFILL_REC1 Supports prefill with traffic shaper multirec * @SDE_SSPP_CDP Supports client driven prefetch * @SDE_SSPP_VIG_IGC, VIG 1D LUT IGC * @SDE_SSPP_VIG_GAMUT, VIG 3D LUT Gamut * @SDE_SSPP_DMA_IGC, DMA 1D LUT IGC Loading @@ -175,7 +170,6 @@ enum { * @SDE_SSPP_DGM_CSC Support of color space conversion in DGM block * @SDE_SSPP_SEC_UI_ALLOWED Allows secure-ui layers * @SDE_SSPP_BLOCK_SEC_UI Blocks secure-ui layers * @SDE_SSPP_QOS_FL_NOCALC Avoid fill level calculation for QoS/danger/safe * @SDE_SSPP_SCALER_QSEED3LITE Qseed3lite algorithm support * @SDE_SSPP_MAX maximum value */ Loading @@ -190,15 +184,10 @@ enum { SDE_SSPP_MEMCOLOR, SDE_SSPP_PCC, SDE_SSPP_CURSOR, SDE_SSPP_QOS, SDE_SSPP_QOS_8LVL, SDE_SSPP_EXCL_RECT, SDE_SSPP_SMART_DMA_V1, SDE_SSPP_SMART_DMA_V2, SDE_SSPP_SMART_DMA_V2p5, SDE_SSPP_TS_PREFILL, SDE_SSPP_TS_PREFILL_REC1, SDE_SSPP_CDP, SDE_SSPP_VIG_IGC, SDE_SSPP_VIG_GAMUT, SDE_SSPP_DMA_IGC, Loading @@ -208,11 +197,30 @@ enum { SDE_SSPP_DGM_CSC, SDE_SSPP_SEC_UI_ALLOWED, SDE_SSPP_BLOCK_SEC_UI, SDE_SSPP_QOS_FL_NOCALC, SDE_SSPP_SCALER_QSEED3LITE, SDE_SSPP_MAX }; /** * SDE performance features * @SDE_PERF_SSPP_QOS, SSPP support QoS control, danger/safe/creq * @SDE_PERF_SSPP_QOS_8LVL, SSPP support 8-level QoS control * @SDE_PERF_SSPP_TS_PREFILL Supports prefill with traffic shaper * @SDE_PERF_SSPP_TS_PREFILL_REC1 Supports prefill with traffic shaper multirec * @SDE_PERF_SSPP_CDP Supports client driven prefetch * @SDE_PERF_SSPP_QOS_FL_NOCALC Avoid fill level calc for QoS/danger/safe * @SDE_PERF_SSPP_MAX Maximum value */ enum { SDE_PERF_SSPP_QOS = 0x1, SDE_PERF_SSPP_QOS_8LVL, SDE_PERF_SSPP_TS_PREFILL, SDE_PERF_SSPP_TS_PREFILL_REC1, SDE_PERF_SSPP_CDP, SDE_PERF_SSPP_QOS_FL_NOCALC, SDE_PERF_SSPP_MAX }; /* * MIXER sub-blocks/features * @SDE_MIXER_LAYER Layer mixer layer blend configuration, Loading Loading @@ -403,13 +411,15 @@ enum { * @base: register base offset to mdss * @len: length of hardware block * @features bit mask identifying sub-blocks/features * @perf_features bit mask identifying performance sub-blocks/features */ #define SDE_HW_BLK_INFO \ char name[SDE_HW_BLK_NAME_LEN]; \ u32 id; \ u32 base; \ u32 len; \ unsigned long features unsigned long features; \ unsigned long perf_features /** * MACRO SDE_HW_SUBBLK_INFO - information of HW sub-block inside SDE Loading drivers/gpu/drm/msm/sde/sde_hw_catalog_format.h +61 −85 Original line number Diff line number Diff line Loading @@ -5,73 +5,63 @@ #include "sde_hw_mdss.h" #define RGB_10BIT_FMTS {DRM_FORMAT_BGRA1010102, 0}, \ {DRM_FORMAT_BGRX1010102, 0}, \ {DRM_FORMAT_RGBA1010102, 0}, \ {DRM_FORMAT_RGBX1010102, 0}, \ {DRM_FORMAT_ABGR2101010, 0}, \ {DRM_FORMAT_ABGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_XBGR2101010, 0}, \ {DRM_FORMAT_XBGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_ARGB2101010, 0}, \ {DRM_FORMAT_XRGB2101010, 0} #define RGB_FMTS {DRM_FORMAT_ARGB8888, 0}, \ {DRM_FORMAT_ABGR8888, 0}, \ {DRM_FORMAT_RGBA8888, 0}, \ {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_BGRA8888, 0}, \ {DRM_FORMAT_XRGB8888, 0}, \ {DRM_FORMAT_RGBX8888, 0}, \ {DRM_FORMAT_BGRX8888, 0}, \ {DRM_FORMAT_XBGR8888, 0}, \ {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_RGB888, 0}, \ {DRM_FORMAT_BGR888, 0}, \ {DRM_FORMAT_RGB565, 0}, \ {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_BGR565, 0}, \ {DRM_FORMAT_ARGB1555, 0}, \ {DRM_FORMAT_ABGR1555, 0}, \ {DRM_FORMAT_RGBA5551, 0}, \ {DRM_FORMAT_BGRA5551, 0}, \ {DRM_FORMAT_XRGB1555, 0}, \ {DRM_FORMAT_XBGR1555, 0}, \ {DRM_FORMAT_RGBX5551, 0}, \ {DRM_FORMAT_BGRX5551, 0}, \ {DRM_FORMAT_ARGB4444, 0}, \ {DRM_FORMAT_ABGR4444, 0}, \ {DRM_FORMAT_RGBA4444, 0}, \ {DRM_FORMAT_BGRA4444, 0}, \ {DRM_FORMAT_XRGB4444, 0}, \ {DRM_FORMAT_XBGR4444, 0}, \ {DRM_FORMAT_RGBX4444, 0}, \ {DRM_FORMAT_BGRX4444, 0} #define TP10_UBWC_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED | \ DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT} #define P010_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX} static const struct sde_format_extended plane_formats[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_XBGR8888, 0}, {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, RGB_FMTS, RGB_10BIT_FMTS, {0, 0}, }; static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_XBGR8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, static const struct sde_format_extended plane_formats_vig[] = { RGB_FMTS, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, Loading @@ -84,6 +74,11 @@ static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_YVYU, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_YVU420, 0}, RGB_10BIT_FMTS, TP10_UBWC_FMTS, P010_FMTS, {0, 0}, }; Loading Loading @@ -144,32 +139,13 @@ static const struct sde_format_extended wb2_formats[] = { {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_YUYV, 0}, {0, 0}, }; RGB_10BIT_FMTS, TP10_UBWC_FMTS, static const struct sde_format_extended rgb_10bit_formats[] = { {DRM_FORMAT_BGRA1010102, 0}, {DRM_FORMAT_BGRX1010102, 0}, {DRM_FORMAT_RGBA1010102, 0}, {DRM_FORMAT_RGBX1010102, 0}, {DRM_FORMAT_ABGR2101010, 0}, {DRM_FORMAT_ABGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_XBGR2101010, 0}, {DRM_FORMAT_XBGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_ARGB2101010, 0}, {DRM_FORMAT_XRGB2101010, 0}, }; static const struct sde_format_extended p010_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX}, {0, 0}, }; static const struct sde_format_extended p010_ubwc_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_COMPRESSED}, }; static const struct sde_format_extended tp10_ubwc_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT}, }; drivers/gpu/drm/msm/sde/sde_hw_sspp.c +12 −8 Original line number Diff line number Diff line Loading @@ -800,7 +800,8 @@ static void sde_hw_sspp_setup_creq_lut(struct sde_hw_pipe *ctx, if (_sspp_subblk_offset(ctx, SDE_SSPP_SRC, &idx)) return; if (ctx->cap && test_bit(SDE_SSPP_QOS_8LVL, &ctx->cap->features)) { if (ctx->cap && test_bit(SDE_PERF_SSPP_QOS_8LVL, &ctx->cap->perf_features)) { SDE_REG_WRITE(&ctx->hw, SSPP_CREQ_LUT_0 + idx, cfg->creq_lut); SDE_REG_WRITE(&ctx->hw, SSPP_CREQ_LUT_1 + idx, cfg->creq_lut >> 32); Loading Loading @@ -852,11 +853,13 @@ static void sde_hw_sspp_setup_ts_prefill(struct sde_hw_pipe *ctx, cap = ctx->cap; if ((index == SDE_SSPP_RECT_SOLO || index == SDE_SSPP_RECT_0) && test_bit(SDE_SSPP_TS_PREFILL, &cap->features)) { test_bit(SDE_PERF_SSPP_TS_PREFILL, &cap->perf_features)) { ts_offset = SSPP_TRAFFIC_SHAPER; ts_prefill_offset = SSPP_TRAFFIC_SHAPER_PREFILL; } else if (index == SDE_SSPP_RECT_1 && test_bit(SDE_SSPP_TS_PREFILL_REC1, &cap->features)) { test_bit(SDE_PERF_SSPP_TS_PREFILL_REC1, &cap->perf_features)) { ts_offset = SSPP_TRAFFIC_SHAPER_REC1; ts_prefill_offset = SSPP_TRAFFIC_SHAPER_REC1_PREFILL; } else { Loading Loading @@ -1053,7 +1056,7 @@ static void sde_hw_sspp_setup_dgm_csc(struct sde_hw_pipe *ctx, } static void _setup_layer_ops(struct sde_hw_pipe *c, unsigned long features) unsigned long features, unsigned long perf_features) { int ret; Loading @@ -1070,14 +1073,14 @@ static void _setup_layer_ops(struct sde_hw_pipe *c, if (test_bit(SDE_SSPP_EXCL_RECT, &features)) c->ops.setup_excl_rect = _sde_hw_sspp_setup_excl_rect; if (test_bit(SDE_SSPP_QOS, &features)) { if (test_bit(SDE_PERF_SSPP_QOS, &features)) { c->ops.setup_danger_safe_lut = sde_hw_sspp_setup_danger_safe_lut; c->ops.setup_creq_lut = sde_hw_sspp_setup_creq_lut; c->ops.setup_qos_ctrl = sde_hw_sspp_setup_qos_ctrl; } if (test_bit(SDE_SSPP_TS_PREFILL, &features)) if (test_bit(SDE_PERF_SSPP_TS_PREFILL, &perf_features)) c->ops.setup_ts_prefill = sde_hw_sspp_setup_ts_prefill; if (test_bit(SDE_SSPP_CSC, &features) || Loading Loading @@ -1109,7 +1112,7 @@ static void _setup_layer_ops(struct sde_hw_pipe *c, c->ops.setup_scaler = reg_dmav1_setup_vig_qseed3; } if (test_bit(SDE_SSPP_CDP, &features)) if (test_bit(SDE_PERF_SSPP_CDP, &perf_features)) c->ops.setup_cdp = sde_hw_sspp_setup_cdp; _setup_layer_ops_colorproc(c, features); Loading Loading @@ -1177,7 +1180,8 @@ struct sde_hw_pipe *sde_hw_sspp_init(enum sde_sspp idx, hw_pipe->mdp = &catalog->mdp[0]; hw_pipe->idx = idx; hw_pipe->cap = cfg; _setup_layer_ops(hw_pipe, hw_pipe->cap->features); _setup_layer_ops(hw_pipe, hw_pipe->cap->features, hw_pipe->cap->perf_features); if (hw_pipe->ops.get_scaler_ver) { hw_pipe->cap->sblk->scaler_blk.version = Loading drivers/gpu/drm/msm/sde/sde_plane.c +3 −1 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ struct sde_plane { enum sde_sspp pipe; uint32_t features; /* capabilities from catalog */ uint32_t perf_features; /* perf capabilities from catalog */ uint32_t nformats; uint32_t formats[64]; Loading Loading @@ -264,7 +265,7 @@ static inline int _sde_plane_calc_fill_level(struct drm_plane *plane, } psde = to_sde_plane(plane); if (psde->features & BIT(SDE_SSPP_QOS_FL_NOCALC)) if (psde->perf_features & BIT(SDE_PERF_SSPP_QOS_FL_NOCALC)) return 0; pstate = to_sde_plane_state(plane->state); Loading Loading @@ -4096,6 +4097,7 @@ struct drm_plane *sde_plane_init(struct drm_device *dev, /* cache features mask for later */ psde->features = psde->pipe_hw->cap->features; psde->perf_features = psde->pipe_hw->cap->perf_features; psde->pipe_sblk = psde->pipe_hw->cap->sblk; if (!psde->pipe_sblk) { SDE_ERROR("[%u]invalid sblk\n", pipe); Loading Loading
drivers/gpu/drm/msm/sde/sde_hw_catalog.c +18 −45 Original line number Diff line number Diff line Loading @@ -983,9 +983,9 @@ static void _sde_sspp_setup_vig(struct sde_mdss_cfg *sde_cfg, sspp->id - SSPP_VIG0); sspp->clk_ctrl = SDE_CLK_CTRL_VIG0 + *vig_count; sspp->type = SSPP_TYPE_VIG; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*vig_count)++; if (!prop_value) Loading Loading @@ -1111,9 +1111,9 @@ static void _sde_sspp_setup_rgb(struct sde_mdss_cfg *sde_cfg, sspp->id - SSPP_VIG0); sspp->clk_ctrl = SDE_CLK_CTRL_RGB0 + *rgb_count; sspp->type = SSPP_TYPE_RGB; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*rgb_count)++; if (!prop_value) Loading Loading @@ -1189,9 +1189,9 @@ static void _sde_sspp_setup_dma(struct sde_mdss_cfg *sde_cfg, snprintf(sspp->name, SDE_HW_BLK_NAME_LEN, "sspp_%u", sspp->id - SSPP_VIG0); sspp->type = SSPP_TYPE_DMA; set_bit(SDE_SSPP_QOS, &sspp->features); set_bit(SDE_PERF_SSPP_QOS, &sspp->perf_features); if (sde_cfg->vbif_qos_nlvl == 8) set_bit(SDE_SSPP_QOS_8LVL, &sspp->features); set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features); (*dma_count)++; if (!prop_value) Loading Loading @@ -1373,13 +1373,14 @@ static int sde_sspp_parse_dt(struct device_node *np, set_bit(SDE_SSPP_SRC, &sspp->features); if (sde_cfg->has_cdp) set_bit(SDE_SSPP_CDP, &sspp->features); set_bit(SDE_PERF_SSPP_CDP, &sspp->perf_features); if (sde_cfg->ts_prefill_rev == 1) { set_bit(SDE_SSPP_TS_PREFILL, &sspp->features); set_bit(SDE_PERF_SSPP_TS_PREFILL, &sspp->perf_features); } else if (sde_cfg->ts_prefill_rev == 2) { set_bit(SDE_SSPP_TS_PREFILL, &sspp->features); set_bit(SDE_SSPP_TS_PREFILL_REC1, &sspp->features); set_bit(SDE_PERF_SSPP_TS_PREFILL, &sspp->perf_features); set_bit(SDE_PERF_SSPP_TS_PREFILL_REC1, &sspp->perf_features); } sblk->smart_dma_priority = Loading Loading @@ -3339,21 +3340,12 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg, } dma_list_size = ARRAY_SIZE(plane_formats); vig_list_size = ARRAY_SIZE(plane_formats_yuv); virt_vig_list_size = ARRAY_SIZE(plane_formats); wb2_list_size = ARRAY_SIZE(wb2_formats); dma_list_size += ARRAY_SIZE(rgb_10bit_formats); vig_list_size += ARRAY_SIZE(rgb_10bit_formats) + ARRAY_SIZE(tp10_ubwc_formats) + ARRAY_SIZE(p010_formats); virt_vig_list_size += ARRAY_SIZE(rgb_10bit_formats); vig_list_size = ARRAY_SIZE(plane_formats_vig); if (sde_cfg->has_vig_p010) vig_list_size += ARRAY_SIZE(p010_ubwc_formats); virt_vig_list_size = ARRAY_SIZE(plane_formats); wb2_list_size = ARRAY_SIZE(wb2_formats); wb2_list_size += ARRAY_SIZE(rgb_10bit_formats) + ARRAY_SIZE(tp10_ubwc_formats); sde_cfg->dma_formats = kcalloc(dma_list_size, sizeof(struct sde_format_extended), GFP_KERNEL); Loading Loading @@ -3386,39 +3378,20 @@ static int sde_hardware_format_caps(struct sde_mdss_cfg *sde_cfg, index = sde_copy_formats(sde_cfg->dma_formats, dma_list_size, 0, plane_formats, ARRAY_SIZE(plane_formats)); index += sde_copy_formats(sde_cfg->dma_formats, dma_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index = sde_copy_formats(sde_cfg->vig_formats, vig_list_size, 0, plane_formats_yuv, ARRAY_SIZE(plane_formats_yuv)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, p010_formats, ARRAY_SIZE(p010_formats)); 0, plane_formats_vig, ARRAY_SIZE(plane_formats_vig)); if (sde_cfg->has_vig_p010) index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, p010_ubwc_formats, ARRAY_SIZE(p010_ubwc_formats)); index += sde_copy_formats(sde_cfg->vig_formats, vig_list_size, index, tp10_ubwc_formats, ARRAY_SIZE(tp10_ubwc_formats)); index = sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size, 0, plane_formats, ARRAY_SIZE(plane_formats)); index += sde_copy_formats(sde_cfg->virt_vig_formats, virt_vig_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index = sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, 0, wb2_formats, ARRAY_SIZE(wb2_formats)); index += sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, index, rgb_10bit_formats, ARRAY_SIZE(rgb_10bit_formats)); index += sde_copy_formats(sde_cfg->wb_formats, wb2_list_size, index, tp10_ubwc_formats, ARRAY_SIZE(tp10_ubwc_formats)); end: return rc; } Loading Loading @@ -3560,8 +3533,8 @@ static int _sde_hardware_post_caps(struct sde_mdss_cfg *sde_cfg, sde_cfg->max_mixer_blendstages - SDE_STAGE_0; for (i = 0; i < sde_cfg->sspp_count; i++) set_bit(SDE_SSPP_QOS_FL_NOCALC, &sde_cfg->sspp[i].features); set_bit(SDE_PERF_SSPP_QOS_FL_NOCALC, &sde_cfg->sspp[i].perf_features); } for (i = 0; i < sde_cfg->sspp_count; i++) { Loading
drivers/gpu/drm/msm/sde/sde_hw_catalog.h +23 −13 Original line number Diff line number Diff line Loading @@ -157,15 +157,10 @@ enum { * @SDE_SSPP_MEMCOLOR Memory Color Support * @SDE_SSPP_PCC, Color correction support * @SDE_SSPP_CURSOR, SSPP can be used as a cursor layer * @SDE_SSPP_QOS, SSPP support QoS control, danger/safe/creq * @SDE_SSPP_QOS_8LVL, SSPP support 8-level QoS control * @SDE_SSPP_EXCL_RECT, SSPP supports exclusion rect * @SDE_SSPP_SMART_DMA_V1, SmartDMA 1.0 support * @SDE_SSPP_SMART_DMA_V2, SmartDMA 2.0 support * @SDE_SSPP_SMART_DMA_V2p5, SmartDMA 2.5 support * @SDE_SSPP_TS_PREFILL Supports prefill with traffic shaper * @SDE_SSPP_TS_PREFILL_REC1 Supports prefill with traffic shaper multirec * @SDE_SSPP_CDP Supports client driven prefetch * @SDE_SSPP_VIG_IGC, VIG 1D LUT IGC * @SDE_SSPP_VIG_GAMUT, VIG 3D LUT Gamut * @SDE_SSPP_DMA_IGC, DMA 1D LUT IGC Loading @@ -175,7 +170,6 @@ enum { * @SDE_SSPP_DGM_CSC Support of color space conversion in DGM block * @SDE_SSPP_SEC_UI_ALLOWED Allows secure-ui layers * @SDE_SSPP_BLOCK_SEC_UI Blocks secure-ui layers * @SDE_SSPP_QOS_FL_NOCALC Avoid fill level calculation for QoS/danger/safe * @SDE_SSPP_SCALER_QSEED3LITE Qseed3lite algorithm support * @SDE_SSPP_MAX maximum value */ Loading @@ -190,15 +184,10 @@ enum { SDE_SSPP_MEMCOLOR, SDE_SSPP_PCC, SDE_SSPP_CURSOR, SDE_SSPP_QOS, SDE_SSPP_QOS_8LVL, SDE_SSPP_EXCL_RECT, SDE_SSPP_SMART_DMA_V1, SDE_SSPP_SMART_DMA_V2, SDE_SSPP_SMART_DMA_V2p5, SDE_SSPP_TS_PREFILL, SDE_SSPP_TS_PREFILL_REC1, SDE_SSPP_CDP, SDE_SSPP_VIG_IGC, SDE_SSPP_VIG_GAMUT, SDE_SSPP_DMA_IGC, Loading @@ -208,11 +197,30 @@ enum { SDE_SSPP_DGM_CSC, SDE_SSPP_SEC_UI_ALLOWED, SDE_SSPP_BLOCK_SEC_UI, SDE_SSPP_QOS_FL_NOCALC, SDE_SSPP_SCALER_QSEED3LITE, SDE_SSPP_MAX }; /** * SDE performance features * @SDE_PERF_SSPP_QOS, SSPP support QoS control, danger/safe/creq * @SDE_PERF_SSPP_QOS_8LVL, SSPP support 8-level QoS control * @SDE_PERF_SSPP_TS_PREFILL Supports prefill with traffic shaper * @SDE_PERF_SSPP_TS_PREFILL_REC1 Supports prefill with traffic shaper multirec * @SDE_PERF_SSPP_CDP Supports client driven prefetch * @SDE_PERF_SSPP_QOS_FL_NOCALC Avoid fill level calc for QoS/danger/safe * @SDE_PERF_SSPP_MAX Maximum value */ enum { SDE_PERF_SSPP_QOS = 0x1, SDE_PERF_SSPP_QOS_8LVL, SDE_PERF_SSPP_TS_PREFILL, SDE_PERF_SSPP_TS_PREFILL_REC1, SDE_PERF_SSPP_CDP, SDE_PERF_SSPP_QOS_FL_NOCALC, SDE_PERF_SSPP_MAX }; /* * MIXER sub-blocks/features * @SDE_MIXER_LAYER Layer mixer layer blend configuration, Loading Loading @@ -403,13 +411,15 @@ enum { * @base: register base offset to mdss * @len: length of hardware block * @features bit mask identifying sub-blocks/features * @perf_features bit mask identifying performance sub-blocks/features */ #define SDE_HW_BLK_INFO \ char name[SDE_HW_BLK_NAME_LEN]; \ u32 id; \ u32 base; \ u32 len; \ unsigned long features unsigned long features; \ unsigned long perf_features /** * MACRO SDE_HW_SUBBLK_INFO - information of HW sub-block inside SDE Loading
drivers/gpu/drm/msm/sde/sde_hw_catalog_format.h +61 −85 Original line number Diff line number Diff line Loading @@ -5,73 +5,63 @@ #include "sde_hw_mdss.h" #define RGB_10BIT_FMTS {DRM_FORMAT_BGRA1010102, 0}, \ {DRM_FORMAT_BGRX1010102, 0}, \ {DRM_FORMAT_RGBA1010102, 0}, \ {DRM_FORMAT_RGBX1010102, 0}, \ {DRM_FORMAT_ABGR2101010, 0}, \ {DRM_FORMAT_ABGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_XBGR2101010, 0}, \ {DRM_FORMAT_XBGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_ARGB2101010, 0}, \ {DRM_FORMAT_XRGB2101010, 0} #define RGB_FMTS {DRM_FORMAT_ARGB8888, 0}, \ {DRM_FORMAT_ABGR8888, 0}, \ {DRM_FORMAT_RGBA8888, 0}, \ {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_BGRA8888, 0}, \ {DRM_FORMAT_XRGB8888, 0}, \ {DRM_FORMAT_RGBX8888, 0}, \ {DRM_FORMAT_BGRX8888, 0}, \ {DRM_FORMAT_XBGR8888, 0}, \ {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_RGB888, 0}, \ {DRM_FORMAT_BGR888, 0}, \ {DRM_FORMAT_RGB565, 0}, \ {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, \ {DRM_FORMAT_BGR565, 0}, \ {DRM_FORMAT_ARGB1555, 0}, \ {DRM_FORMAT_ABGR1555, 0}, \ {DRM_FORMAT_RGBA5551, 0}, \ {DRM_FORMAT_BGRA5551, 0}, \ {DRM_FORMAT_XRGB1555, 0}, \ {DRM_FORMAT_XBGR1555, 0}, \ {DRM_FORMAT_RGBX5551, 0}, \ {DRM_FORMAT_BGRX5551, 0}, \ {DRM_FORMAT_ARGB4444, 0}, \ {DRM_FORMAT_ABGR4444, 0}, \ {DRM_FORMAT_RGBA4444, 0}, \ {DRM_FORMAT_BGRA4444, 0}, \ {DRM_FORMAT_XRGB4444, 0}, \ {DRM_FORMAT_XBGR4444, 0}, \ {DRM_FORMAT_RGBX4444, 0}, \ {DRM_FORMAT_BGRX4444, 0} #define TP10_UBWC_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED | \ DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT} #define P010_FMTS {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX} static const struct sde_format_extended plane_formats[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_XBGR8888, 0}, {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, RGB_FMTS, RGB_10BIT_FMTS, {0, 0}, }; static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_ARGB8888, 0}, {DRM_FORMAT_ABGR8888, 0}, {DRM_FORMAT_RGBA8888, 0}, {DRM_FORMAT_BGRX8888, 0}, {DRM_FORMAT_ABGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGRA8888, 0}, {DRM_FORMAT_XRGB8888, 0}, {DRM_FORMAT_XBGR8888, 0}, {DRM_FORMAT_RGBX8888, 0}, {DRM_FORMAT_XBGR8888, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_RGB888, 0}, {DRM_FORMAT_BGR888, 0}, {DRM_FORMAT_RGB565, 0}, {DRM_FORMAT_BGR565, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_BGR565, 0}, {DRM_FORMAT_ARGB1555, 0}, {DRM_FORMAT_ABGR1555, 0}, {DRM_FORMAT_RGBA5551, 0}, {DRM_FORMAT_BGRA5551, 0}, {DRM_FORMAT_XRGB1555, 0}, {DRM_FORMAT_XBGR1555, 0}, {DRM_FORMAT_RGBX5551, 0}, {DRM_FORMAT_BGRX5551, 0}, {DRM_FORMAT_ARGB4444, 0}, {DRM_FORMAT_ABGR4444, 0}, {DRM_FORMAT_RGBA4444, 0}, {DRM_FORMAT_BGRA4444, 0}, {DRM_FORMAT_XRGB4444, 0}, {DRM_FORMAT_XBGR4444, 0}, {DRM_FORMAT_RGBX4444, 0}, {DRM_FORMAT_BGRX4444, 0}, static const struct sde_format_extended plane_formats_vig[] = { RGB_FMTS, {DRM_FORMAT_NV12, 0}, {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED}, Loading @@ -84,6 +74,11 @@ static const struct sde_format_extended plane_formats_yuv[] = { {DRM_FORMAT_YVYU, 0}, {DRM_FORMAT_YUV420, 0}, {DRM_FORMAT_YVU420, 0}, RGB_10BIT_FMTS, TP10_UBWC_FMTS, P010_FMTS, {0, 0}, }; Loading Loading @@ -144,32 +139,13 @@ static const struct sde_format_extended wb2_formats[] = { {DRM_FORMAT_NV16, 0}, {DRM_FORMAT_YUYV, 0}, {0, 0}, }; RGB_10BIT_FMTS, TP10_UBWC_FMTS, static const struct sde_format_extended rgb_10bit_formats[] = { {DRM_FORMAT_BGRA1010102, 0}, {DRM_FORMAT_BGRX1010102, 0}, {DRM_FORMAT_RGBA1010102, 0}, {DRM_FORMAT_RGBX1010102, 0}, {DRM_FORMAT_ABGR2101010, 0}, {DRM_FORMAT_ABGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_XBGR2101010, 0}, {DRM_FORMAT_XBGR2101010, DRM_FORMAT_MOD_QCOM_COMPRESSED}, {DRM_FORMAT_ARGB2101010, 0}, {DRM_FORMAT_XRGB2101010, 0}, }; static const struct sde_format_extended p010_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX}, {0, 0}, }; static const struct sde_format_extended p010_ubwc_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_COMPRESSED}, }; static const struct sde_format_extended tp10_ubwc_formats[] = { {DRM_FORMAT_NV12, DRM_FORMAT_MOD_QCOM_COMPRESSED | DRM_FORMAT_MOD_QCOM_DX | DRM_FORMAT_MOD_QCOM_TIGHT}, };
drivers/gpu/drm/msm/sde/sde_hw_sspp.c +12 −8 Original line number Diff line number Diff line Loading @@ -800,7 +800,8 @@ static void sde_hw_sspp_setup_creq_lut(struct sde_hw_pipe *ctx, if (_sspp_subblk_offset(ctx, SDE_SSPP_SRC, &idx)) return; if (ctx->cap && test_bit(SDE_SSPP_QOS_8LVL, &ctx->cap->features)) { if (ctx->cap && test_bit(SDE_PERF_SSPP_QOS_8LVL, &ctx->cap->perf_features)) { SDE_REG_WRITE(&ctx->hw, SSPP_CREQ_LUT_0 + idx, cfg->creq_lut); SDE_REG_WRITE(&ctx->hw, SSPP_CREQ_LUT_1 + idx, cfg->creq_lut >> 32); Loading Loading @@ -852,11 +853,13 @@ static void sde_hw_sspp_setup_ts_prefill(struct sde_hw_pipe *ctx, cap = ctx->cap; if ((index == SDE_SSPP_RECT_SOLO || index == SDE_SSPP_RECT_0) && test_bit(SDE_SSPP_TS_PREFILL, &cap->features)) { test_bit(SDE_PERF_SSPP_TS_PREFILL, &cap->perf_features)) { ts_offset = SSPP_TRAFFIC_SHAPER; ts_prefill_offset = SSPP_TRAFFIC_SHAPER_PREFILL; } else if (index == SDE_SSPP_RECT_1 && test_bit(SDE_SSPP_TS_PREFILL_REC1, &cap->features)) { test_bit(SDE_PERF_SSPP_TS_PREFILL_REC1, &cap->perf_features)) { ts_offset = SSPP_TRAFFIC_SHAPER_REC1; ts_prefill_offset = SSPP_TRAFFIC_SHAPER_REC1_PREFILL; } else { Loading Loading @@ -1053,7 +1056,7 @@ static void sde_hw_sspp_setup_dgm_csc(struct sde_hw_pipe *ctx, } static void _setup_layer_ops(struct sde_hw_pipe *c, unsigned long features) unsigned long features, unsigned long perf_features) { int ret; Loading @@ -1070,14 +1073,14 @@ static void _setup_layer_ops(struct sde_hw_pipe *c, if (test_bit(SDE_SSPP_EXCL_RECT, &features)) c->ops.setup_excl_rect = _sde_hw_sspp_setup_excl_rect; if (test_bit(SDE_SSPP_QOS, &features)) { if (test_bit(SDE_PERF_SSPP_QOS, &features)) { c->ops.setup_danger_safe_lut = sde_hw_sspp_setup_danger_safe_lut; c->ops.setup_creq_lut = sde_hw_sspp_setup_creq_lut; c->ops.setup_qos_ctrl = sde_hw_sspp_setup_qos_ctrl; } if (test_bit(SDE_SSPP_TS_PREFILL, &features)) if (test_bit(SDE_PERF_SSPP_TS_PREFILL, &perf_features)) c->ops.setup_ts_prefill = sde_hw_sspp_setup_ts_prefill; if (test_bit(SDE_SSPP_CSC, &features) || Loading Loading @@ -1109,7 +1112,7 @@ static void _setup_layer_ops(struct sde_hw_pipe *c, c->ops.setup_scaler = reg_dmav1_setup_vig_qseed3; } if (test_bit(SDE_SSPP_CDP, &features)) if (test_bit(SDE_PERF_SSPP_CDP, &perf_features)) c->ops.setup_cdp = sde_hw_sspp_setup_cdp; _setup_layer_ops_colorproc(c, features); Loading Loading @@ -1177,7 +1180,8 @@ struct sde_hw_pipe *sde_hw_sspp_init(enum sde_sspp idx, hw_pipe->mdp = &catalog->mdp[0]; hw_pipe->idx = idx; hw_pipe->cap = cfg; _setup_layer_ops(hw_pipe, hw_pipe->cap->features); _setup_layer_ops(hw_pipe, hw_pipe->cap->features, hw_pipe->cap->perf_features); if (hw_pipe->ops.get_scaler_ver) { hw_pipe->cap->sblk->scaler_blk.version = Loading
drivers/gpu/drm/msm/sde/sde_plane.c +3 −1 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ struct sde_plane { enum sde_sspp pipe; uint32_t features; /* capabilities from catalog */ uint32_t perf_features; /* perf capabilities from catalog */ uint32_t nformats; uint32_t formats[64]; Loading Loading @@ -264,7 +265,7 @@ static inline int _sde_plane_calc_fill_level(struct drm_plane *plane, } psde = to_sde_plane(plane); if (psde->features & BIT(SDE_SSPP_QOS_FL_NOCALC)) if (psde->perf_features & BIT(SDE_PERF_SSPP_QOS_FL_NOCALC)) return 0; pstate = to_sde_plane_state(plane->state); Loading Loading @@ -4096,6 +4097,7 @@ struct drm_plane *sde_plane_init(struct drm_device *dev, /* cache features mask for later */ psde->features = psde->pipe_hw->cap->features; psde->perf_features = psde->pipe_hw->cap->perf_features; psde->pipe_sblk = psde->pipe_hw->cap->sblk; if (!psde->pipe_sblk) { SDE_ERROR("[%u]invalid sblk\n", pipe); Loading