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

Commit e84eb9d5 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: vidc: Enable caching for pagetable pages"

parents e29a1690 d15194cf
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -114,6 +114,10 @@ static struct msm_vidc_common_data sdm845_common_data[] = {
		.key = "qcom,domain-attr-non-fatal-faults",
		.value = 1,
	},
	{
		.key = "qcom,domain-attr-cache-pagetables",
		.value = 1,
	},
	{
		.key = "qcom,max-secure-instances",
		.value = 5,
+20 −5
Original line number Diff line number Diff line
@@ -776,6 +776,8 @@ int read_platform_resources_from_drv_data(
			"qcom,hw-resp-timeout");
	res->non_fatal_pagefaults = find_key_value(platform_data,
			"qcom,domain-attr-non-fatal-faults");
	res->cache_pagetables = find_key_value(platform_data,
			"qcom,domain-attr-cache-pagetables");

	res->csc_coeff_data = &platform_data->csc_data;

@@ -901,14 +903,14 @@ static int get_secure_vmid(struct context_bank_info *cb)
	return VMID_INVAL;
}

static int msm_vidc_setup_context_bank(struct context_bank_info *cb,
		struct device *dev)
static int msm_vidc_setup_context_bank(struct msm_vidc_platform_resources *res,
		struct context_bank_info *cb, struct device *dev)
{
	int rc = 0;
	int secure_vmid = VMID_INVAL;
	struct bus_type *bus;

	if (!dev || !cb) {
	if (!dev || !cb || !res) {
		dprintk(VIDC_ERR,
			"%s: Invalid Input params\n", __func__);
		return -EINVAL;
@@ -942,6 +944,19 @@ static int msm_vidc_setup_context_bank(struct context_bank_info *cb,
		}
	}

	if (res->cache_pagetables) {
		int cache_pagetables = 1;

		rc = iommu_domain_set_attr(cb->mapping->domain,
			DOMAIN_ATTR_USE_UPSTREAM_HINT, &cache_pagetables);
		if (rc) {
			WARN_ONCE(rc,
				"%s: failed to set cache pagetables attribute, %d\n",
				__func__, rc);
			rc = 0;
		}
	}

	rc = arm_iommu_attach_device(cb->dev, cb->mapping);
	if (rc) {
		dprintk(VIDC_ERR, "%s - Couldn't arm_iommu_attach_device\n",
@@ -1055,7 +1070,7 @@ static int msm_vidc_populate_context_bank(struct device *dev,
		cb->name, cb->addr_range.start,
		cb->addr_range.size, cb->buffer_type);

	rc = msm_vidc_setup_context_bank(cb, dev);
	rc = msm_vidc_setup_context_bank(&core->resources, cb, dev);
	if (rc) {
		dprintk(VIDC_ERR, "Cannot setup context bank %d\n", rc);
		goto err_setup_cb;
@@ -1167,7 +1182,7 @@ static int msm_vidc_populate_legacy_context_bank(
			goto err_setup_cb;
		}

		rc = msm_vidc_setup_context_bank(cb, cb->dev);
		rc = msm_vidc_setup_context_bank(res, cb, cb->dev);
		if (rc) {
			dprintk(VIDC_ERR, "Cannot setup context bank %d\n", rc);
			goto err_setup_cb;
+1 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ struct msm_vidc_platform_resources {
	int msm_vidc_firmware_unload_delay;
	uint32_t msm_vidc_pwr_collapse_delay;
	bool non_fatal_pagefaults;
	bool cache_pagetables;
	struct msm_vidc_codec_data *codec_data;
	int codec_data_count;
	struct msm_vidc_csc_coeff *csc_coeff_data;