Commit dff99dff authored by Vikash Garodia's avatar Vikash Garodia Committed by Hans Verkuil
Browse files

media: iris: Add support for multiple TZ content protection(CP) configs



vpu4 needs an additional configuration with respect to CP regions. Make
the CP configuration as array such that the multiple configuration can be
managed per platform.

Reviewed-by: default avatarKonrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Co-developed-by: default avatarVishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: default avatarVishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: default avatarVikash Garodia <vikash.garodia@oss.qualcomm.com>
Reviewed-by: default avatarDikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>
Signed-off-by: default avatarBryan O'Donoghue <bod@kernel.org>
Signed-off-by: default avatarHans Verkuil <hverkuil+cisco@kernel.org>
parent 8744df0e
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -64,9 +64,9 @@ static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_name)

int iris_fw_load(struct iris_core *core)
{
	struct tz_cp_config *cp_config = core->iris_platform_data->tz_cp_config_data;
	const struct tz_cp_config *cp_config;
	const char *fwpath = NULL;
	int ret;
	int i, ret;

	ret = of_property_read_string_index(core->dev->of_node, "firmware-name", 0,
					    &fwpath);
@@ -85,15 +85,18 @@ int iris_fw_load(struct iris_core *core)
		return ret;
	}

	for (i = 0; i < core->iris_platform_data->tz_cp_config_data_size; i++) {
		cp_config = &core->iris_platform_data->tz_cp_config_data[i];
		ret = qcom_scm_mem_protect_video_var(cp_config->cp_start,
						     cp_config->cp_size,
						     cp_config->cp_nonpixel_start,
						     cp_config->cp_nonpixel_size);
		if (ret) {
		dev_err(core->dev, "protect memory failed\n");
			dev_err(core->dev, "qcom_scm_mem_protect_video_var failed: %d\n", ret);
			qcom_scm_pas_shutdown(core->iris_platform_data->pas_id);
			return ret;
		}
	}

	return ret;
}
+2 −1
Original line number Diff line number Diff line
@@ -237,7 +237,8 @@ struct iris_platform_data {
	u32 inst_fw_caps_dec_size;
	const struct platform_inst_fw_cap *inst_fw_caps_enc;
	u32 inst_fw_caps_enc_size;
	struct tz_cp_config *tz_cp_config_data;
	const struct tz_cp_config *tz_cp_config_data;
	u32 tz_cp_config_data_size;
	u32 core_arch;
	u32 hw_response_timeout;
	struct ubwc_config_data *ubwc_config;
+11 −7
Original line number Diff line number Diff line
@@ -294,11 +294,13 @@ static const char * const sm8250_opp_clk_table[] = {
	NULL,
};

static struct tz_cp_config tz_cp_config_sm8250 = {
static const struct tz_cp_config tz_cp_config_sm8250[] = {
	{
		.cp_start = 0,
		.cp_size = 0x25800000,
		.cp_nonpixel_start = 0x01000000,
		.cp_nonpixel_size = 0x24800000,
	},
};

static const u32 sm8250_vdec_input_config_param_default[] = {
@@ -366,7 +368,8 @@ const struct iris_platform_data sm8250_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8250_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8250_enc),
	.tz_cp_config_data = &tz_cp_config_sm8250,
	.tz_cp_config_data = tz_cp_config_sm8250,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8250),
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.num_vpp_pipe = 4,
	.max_session_count = 16,
@@ -418,7 +421,8 @@ const struct iris_platform_data sc7280_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8250_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8250_enc),
	.tz_cp_config_data = &tz_cp_config_sm8250,
	.tz_cp_config_data = tz_cp_config_sm8250,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8250),
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.num_vpp_pipe = 1,
	.no_aon = true,
+15 −9
Original line number Diff line number Diff line
@@ -800,11 +800,13 @@ static struct ubwc_config_data ubwc_config_sm8550 = {
	.bank_spreading = 1,
};

static struct tz_cp_config tz_cp_config_sm8550 = {
static const struct tz_cp_config tz_cp_config_sm8550[] = {
	{
		.cp_start = 0,
		.cp_size = 0x25800000,
		.cp_nonpixel_start = 0x01000000,
		.cp_nonpixel_size = 0x24800000,
	},
};

static const u32 sm8550_vdec_input_config_params_default[] = {
@@ -950,7 +952,8 @@ const struct iris_platform_data sm8550_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
	.tz_cp_config_data = &tz_cp_config_sm8550,
	.tz_cp_config_data = tz_cp_config_sm8550,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8550),
	.core_arch = VIDEO_ARCH_LX,
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.ubwc_config = &ubwc_config_sm8550,
@@ -1054,7 +1057,8 @@ const struct iris_platform_data sm8650_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
	.tz_cp_config_data = &tz_cp_config_sm8550,
	.tz_cp_config_data = tz_cp_config_sm8550,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8550),
	.core_arch = VIDEO_ARCH_LX,
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.ubwc_config = &ubwc_config_sm8550,
@@ -1149,7 +1153,8 @@ const struct iris_platform_data sm8750_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
	.tz_cp_config_data = &tz_cp_config_sm8550,
	.tz_cp_config_data = tz_cp_config_sm8550,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8550),
	.core_arch = VIDEO_ARCH_LX,
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.ubwc_config = &ubwc_config_sm8550,
@@ -1248,7 +1253,8 @@ const struct iris_platform_data qcs8300_data = {
	.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
	.inst_fw_caps_enc = inst_fw_cap_sm8550_enc,
	.inst_fw_caps_enc_size = ARRAY_SIZE(inst_fw_cap_sm8550_enc),
	.tz_cp_config_data = &tz_cp_config_sm8550,
	.tz_cp_config_data = tz_cp_config_sm8550,
	.tz_cp_config_data_size = ARRAY_SIZE(tz_cp_config_sm8550),
	.core_arch = VIDEO_ARCH_LX,
	.hw_response_timeout = HW_RESPONSE_TIMEOUT_VALUE,
	.ubwc_config = &ubwc_config_sm8550,