Procházet zdrojové kódy

Merge "disp: sde: override fal10 veto for milos target"

QCTECMDR Service před 10 měsíci
rodič
revize
b98837b278

+ 29 - 3
msm/sde/sde_core_perf.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
  */
 
@@ -531,8 +531,33 @@ static void _sde_core_uidle_setup_wd(struct sde_kms *kms,
 		uidle->ops.setup_wd_timer(uidle, &wd);
 }
 
+static bool _sde_core_uidle_fal10_override(struct sde_kms *kms,
+	struct drm_crtc *crtc)
+{
+	bool fal10_override, is_vid_mode = false;
+	struct drm_encoder *drm_enc;
+
+	fal10_override = kms->catalog->uidle_cfg.fal10_override;
+	if (!fal10_override)
+		return false;
+
+	drm_for_each_encoder(drm_enc, kms->dev) {
+		if (drm_enc->crtc != crtc)
+			continue;
+
+		if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_VIDEO_MODE)) {
+			is_vid_mode = true;
+			break;
+		}
+	}
+
+	SDE_EVT32(fal10_override, is_vid_mode);
+
+	return fal10_override && is_vid_mode;
+}
+
 static void _sde_core_uidle_setup_cfg(struct sde_kms *kms,
-	enum sde_uidle_state state)
+	struct drm_crtc *crtc, enum sde_uidle_state state)
 {
 	struct sde_uidle_ctl_cfg cfg;
 	struct sde_hw_uidle *uidle;
@@ -545,6 +570,7 @@ static void _sde_core_uidle_setup_cfg(struct sde_kms *kms,
 		kms->catalog->uidle_cfg.fal10_exit_cnt;
 	cfg.fal10_exit_danger =
 		kms->catalog->uidle_cfg.fal10_exit_danger;
+	cfg.fal10_override = _sde_core_uidle_fal10_override(kms, crtc);
 
 	SDE_DEBUG("fal10_danger:%d fal10_exit_cnt:%d fal10_exit_danger:%d\n",
 		cfg.fal10_danger, cfg.fal10_exit_cnt, cfg.fal10_exit_danger);
@@ -584,7 +610,7 @@ static int _sde_core_perf_enable_uidle(struct sde_kms *kms,
 
 	SDE_EVT32(uidle_state);
 	_sde_core_uidle_setup_wd(kms, enable);
-	_sde_core_uidle_setup_cfg(kms, uidle_state);
+	_sde_core_uidle_setup_cfg(kms, crtc, uidle_state);
 	sde_core_perf_uidle_setup_ctl(crtc, true);
 
 	kms->perf.uidle_enabled = enable;

+ 2 - 0
msm/sde/sde_hw_catalog.c

@@ -5578,6 +5578,8 @@ static int _sde_hardware_pre_caps(struct sde_mdss_cfg *sde_cfg, uint32_t hw_rev)
 		sde_cfg->ts_prefill_rev = 2;
 		sde_cfg->ctl_rev = SDE_CTL_CFG_VERSION_1_0_0;
 		sde_cfg->true_inline_rot_rev = SDE_INLINE_ROT_VERSION_2_0_1;
+		sde_cfg->uidle_cfg.uidle_rev = SDE_UIDLE_VERSION_1_0_4;
+		sde_cfg->uidle_cfg.fal10_override = true;
 		sde_cfg->sid_rev = SDE_SID_VERSION_2_0_0;
 		sde_cfg->mdss_hw_block_size = 0x158;
 		sde_cfg->demura_supported[SSPP_DMA1][0] = BIT(DEMURA_0);

+ 2 - 0
msm/sde/sde_hw_catalog.h

@@ -1340,6 +1340,7 @@ struct sde_mdp_cfg {
  * @debugfs_ctrl:           uidle is enabled/disabled through debugfs
  * @perf_cntr_en:           performance counters are enabled/disabled
  * @dirty:                  dirty flag for uidle update
+ * @fal10_override:         flag to override fal10 veto
  */
 struct sde_uidle_cfg {
 	SDE_HW_BLK_INFO;
@@ -1360,6 +1361,7 @@ struct sde_uidle_cfg {
 	bool debugfs_ctrl;
 	bool perf_cntr_en;
 	bool dirty;
+	bool fal10_override;
 };
 
 /* struct sde_mdp_cfg : MDP TOP-BLK instance info

+ 2 - 2
msm/sde/sde_hw_uidle.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
  *
  */
@@ -185,7 +185,7 @@ void sde_hw_uidle_setup_ctl(struct sde_hw_uidle *uidle,
 		FAL10_EXIT_CNT_MSK);
 
 	SDE_REG_WRITE(c, UIDLE_CTL, reg_val);
-	if (!enable)
+	if (!enable || cfg->fal10_override)
 		fal10_veto_regval |= (BIT(31) | BIT(0));
 
 	SDE_REG_WRITE(c, UIDLE_FAL10_VETO_OVERRIDE, fal10_veto_regval);

+ 2 - 1
msm/sde/sde_hw_uidle.h

@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved.
  * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
  *
  */
@@ -37,6 +37,7 @@ struct sde_uidle_ctl_cfg {
 	u32 fal10_exit_cnt;
 	u32 fal10_exit_danger;
 	u32 fal10_danger;
+	bool fal10_override;
 	enum sde_uidle_state uidle_state;
 };