Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1bd126d3 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: sde: add dt property for QSEED scalar HW revision"

parents 4ebc0e1f fdf88f78
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -5124,11 +5124,11 @@ static void sde_crtc_setup_capabilities_blob(struct sde_kms_info *info,
	sde_kms_info_add_keyint(info, "max_blendstages",
			catalog->max_mixer_blendstages);

	if (catalog->qseed_type == SDE_SSPP_SCALER_QSEED2)
	if (catalog->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED2)
		sde_kms_info_add_keystr(info, "qseed_type", "qseed2");
	if (catalog->qseed_type == SDE_SSPP_SCALER_QSEED3)
	if (catalog->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3)
		sde_kms_info_add_keystr(info, "qseed_type", "qseed3");
	if (catalog->qseed_type == SDE_SSPP_SCALER_QSEED3LITE)
	if (catalog->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3LITE)
		sde_kms_info_add_keystr(info, "qseed_type", "qseed3lite");

	if (catalog->ubwc_version) {
+26 −18
Original line number Diff line number Diff line
@@ -186,7 +186,8 @@ enum sde_prop {
	UBWC_VERSION,
	UBWC_STATIC,
	UBWC_SWIZZLE,
	QSEED_TYPE,
	QSEED_SW_LIB_REV,
	QSEED_HW_VERSION,
	CSC_TYPE,
	PANIC_PER_PIPE,
	SRC_SPLIT,
@@ -550,7 +551,10 @@ static struct sde_prop_type sde_prop[] = {
	{UBWC_VERSION, "qcom,sde-ubwc-version", false, PROP_TYPE_U32},
	{UBWC_STATIC, "qcom,sde-ubwc-static", false, PROP_TYPE_U32},
	{UBWC_SWIZZLE, "qcom,sde-ubwc-swizzle", false, PROP_TYPE_U32},
	{QSEED_TYPE, "qcom,sde-qseed-type", false, PROP_TYPE_STRING},
	{QSEED_SW_LIB_REV, "qcom,sde-qseed-sw-lib-rev", false,
			PROP_TYPE_STRING},
	{QSEED_HW_VERSION, "qcom,sde-qseed-scalar-version", false,
			PROP_TYPE_U32},
	{CSC_TYPE, "qcom,sde-csc-type", false, PROP_TYPE_STRING},
	{PANIC_PER_PIPE, "qcom,sde-panic-per-pipe", false, PROP_TYPE_BOOL},
	{SRC_SPLIT, "qcom,sde-has-src-split", false, PROP_TYPE_BOOL},
@@ -1438,11 +1442,11 @@ static int _sde_sspp_setup_vigs(struct device_node *np,
		sblk->format_list = sde_cfg->vig_formats;
		sblk->virt_format_list = sde_cfg->virt_vig_formats;

		if ((sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED2) ||
		    (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3) ||
		    (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3LITE)) {
			set_bit(sde_cfg->qseed_type, &sspp->features);
			sblk->scaler_blk.id = sde_cfg->qseed_type;
		if ((sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED2) ||
		    (sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3) ||
		    (sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3LITE)) {
			set_bit(sde_cfg->qseed_sw_lib_rev, &sspp->features);
			sblk->scaler_blk.id = sde_cfg->qseed_sw_lib_rev;
			sblk->scaler_blk.base = PROP_VALUE_ACCESS(props->values,
				VIG_QSEED_OFF, 0);
			sblk->scaler_blk.len = PROP_VALUE_ACCESS(props->values,
@@ -1554,10 +1558,10 @@ static int _sde_sspp_setup_rgbs(struct device_node *np,
			set_bit(SDE_PERF_SSPP_QOS_8LVL, &sspp->perf_features);
		rgb_count++;

		if ((sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED2) ||
		    (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3)) {
		if ((sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED2) ||
		    (sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3)) {
			set_bit(SDE_SSPP_SCALER_RGB, &sspp->features);
			sblk->scaler_blk.id = sde_cfg->qseed_type;
			sblk->scaler_blk.id = sde_cfg->qseed_sw_lib_rev;
			sblk->scaler_blk.base = PROP_VALUE_ACCESS(props->values,
					RGB_SCALER_OFF, 0);
			sblk->scaler_blk.len = PROP_VALUE_ACCESS(props->values,
@@ -2882,9 +2886,10 @@ static int sde_ds_parse_dt(struct device_node *np,
		if (!prop_exists[DS_LEN])
			ds->len = DEFAULT_SDE_HW_BLOCK_LEN;

		if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3)
		if (sde_cfg->qseed_sw_lib_rev == SDE_SSPP_SCALER_QSEED3)
			set_bit(SDE_SSPP_SCALER_QSEED3, &ds->features);
		else if (sde_cfg->qseed_type == SDE_SSPP_SCALER_QSEED3LITE)
		else if (sde_cfg->qseed_sw_lib_rev ==
				SDE_SSPP_SCALER_QSEED3LITE)
			set_bit(SDE_SSPP_SCALER_QSEED3LITE, &ds->features);
	}

@@ -3726,6 +3731,8 @@ static void _sde_top_parse_dt_helper(struct sde_mdss_cfg *cfg,
	cfg->pipe_order_type = PROP_VALUE_ACCESS(props->values,
			PIPE_ORDER_VERSION, 0);
	cfg->has_base_layer = PROP_VALUE_ACCESS(props->values, BASE_LAYER, 0);
	cfg->qseed_hw_version = PROP_VALUE_ACCESS(props->values,
			 QSEED_HW_VERSION, 0);
}

static int sde_top_parse_dt(struct device_node *np, struct sde_mdss_cfg *cfg)
@@ -3787,20 +3794,21 @@ static int sde_top_parse_dt(struct device_node *np, struct sde_mdss_cfg *cfg)
	if (rc)
		goto end;

	rc = of_property_read_string(np, sde_prop[QSEED_TYPE].prop_name, &type);
	rc = of_property_read_string(np, sde_prop[QSEED_SW_LIB_REV].prop_name,
			&type);
	if (rc) {
		SDE_DEBUG("invalid %s node in device tree: %d\n",
				sde_prop[QSEED_TYPE].prop_name, rc);
				sde_prop[QSEED_SW_LIB_REV].prop_name, rc);
		rc = 0;
	} else if (!strcmp(type, "qseedv3")) {
		cfg->qseed_type = SDE_SSPP_SCALER_QSEED3;
		cfg->qseed_sw_lib_rev = SDE_SSPP_SCALER_QSEED3;
	} else if (!strcmp(type, "qseedv3lite")) {
		cfg->qseed_type = SDE_SSPP_SCALER_QSEED3LITE;
		cfg->qseed_sw_lib_rev = SDE_SSPP_SCALER_QSEED3LITE;
	} else if (!strcmp(type, "qseedv2")) {
		cfg->qseed_type = SDE_SSPP_SCALER_QSEED2;
		cfg->qseed_sw_lib_rev = SDE_SSPP_SCALER_QSEED2;
	} else {
		SDE_DEBUG("Unknown type %s for property %s\n", type,
				sde_prop[QSEED_TYPE].prop_name);
				sde_prop[QSEED_SW_LIB_REV].prop_name);
	}

	rc = of_property_read_string(np, sde_prop[CSC_TYPE].prop_name, &type);
+5 −3
Original line number Diff line number Diff line
@@ -1374,7 +1374,6 @@ struct sde_perf_cfg {

 * @min_display_width   minimum display width support.
 * @min_display_height  minimum display height support.
 * @qseed_type         qseed2 or qseed3 support.
 * @csc_type           csc or csc_10bit support.
 * @smart_dma_rev      Supported version of SmartDMA feature.
 * @ctl_rev            supported version of control path.
@@ -1409,6 +1408,8 @@ struct sde_perf_cfg {
 * @dither_luma_mode_support   Enables dither luma mode
 * @has_base_layer     Supports staging layer as base layer
 * @demura_supported   Demura pipe support flag(~0x00 - Not supported)
 * @qseed_sw_lib_rev	qseed sw library type supporting the qseed hw
 * @qseed_hw_version   qseed hw version of the target
 * @sc_cfg: system cache configuration
 * @uidle_cfg		Settings for uidle feature
 * @sui_misr_supported  indicate if secure-ui-misr is supported
@@ -1446,7 +1447,6 @@ struct sde_mdss_cfg {
	u32 min_display_width;
	u32 min_display_height;

	u32 qseed_type;
	u32 csc_type;
	u32 smart_dma_rev;
	u32 ctl_rev;
@@ -1476,6 +1476,8 @@ struct sde_mdss_cfg {
	bool has_base_layer;
	bool has_demura;
	u32 demura_supported[SSPP_MAX][2];
	u32 qseed_sw_lib_rev;
	u32 qseed_hw_version;

	struct sde_sc_cfg sc_cfg[SDE_SYS_CACHE_MAX];

+4 −15
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
 */

#include "sde_hw_ds.h"
@@ -20,14 +20,6 @@ static void sde_hw_ds_setup_opmode(struct sde_hw_ds *hw_ds,
	SDE_REG_WRITE(hw, DEST_SCALER_OP_MODE, op_mode);
}

static u32 _sde_hw_ds_get_scaler3_ver(struct sde_hw_ds *ctx)
{
	if (!ctx)
		return 0;

	return sde_hw_get_scaler3_ver(&ctx->hw, ctx->scl->base);
}

static void sde_hw_ds_setup_scaler3(struct sde_hw_ds *hw_ds,
			void *scaler_cfg, void *scaler_lut_cfg)
{
@@ -59,11 +51,9 @@ static void _setup_ds_ops(struct sde_hw_ds_ops *ops, unsigned long features)
	ops->setup_opmode = sde_hw_ds_setup_opmode;

	if (test_bit(SDE_SSPP_SCALER_QSEED3, &features) ||
			test_bit(SDE_SSPP_SCALER_QSEED3LITE, &features)) {
		ops->get_scaler_ver = _sde_hw_ds_get_scaler3_ver;
			test_bit(SDE_SSPP_SCALER_QSEED3LITE, &features))
		ops->setup_scaler = sde_hw_ds_setup_scaler3;
}
}

static struct sde_ds_cfg *_ds_offset(enum sde_ds ds,
		struct sde_mdss_cfg *m,
@@ -122,9 +112,8 @@ struct sde_hw_ds *sde_hw_ds_init(enum sde_ds idx,
	hw_ds->scl = cfg;
	_setup_ds_ops(&hw_ds->ops, hw_ds->scl->features);

	if (hw_ds->ops.get_scaler_ver)
		hw_ds->scl->version = hw_ds->ops.get_scaler_ver(hw_ds);

	if (m->qseed_hw_version)
		hw_ds->scl->version = m->qseed_hw_version;

	rc = sde_hw_blk_init(&hw_ds->base, SDE_HW_BLK_DS, idx, &sde_hw_ops);
	if (rc) {
+1 −8
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
 */

#ifndef _SDE_HW_DS_H
@@ -58,13 +58,6 @@ struct sde_hw_ds_ops {
	void (*setup_scaler)(struct sde_hw_ds *hw_ds,
				void *scaler_cfg,
				void *scaler_lut_cfg);

	/**
	 * get_scaler_ver - get scaler h/w version
	 * @ctx: Pointer to ds structure
	 */
	u32 (*get_scaler_ver)(struct sde_hw_ds *ctx);

};

/**
Loading