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

Commit 72322951 authored by Ghanim Fodi's avatar Ghanim Fodi Committed by Gerrit - the friendly Code Review server
Browse files

msm: ipa: eth: enable/disable UL channel per request



Besides Dl channel, UL channel need to be
disabled or enabled per request.

Change-Id: If0326b7c1360500e0857a3e4898f1e57f16de7da
Signed-off-by: default avatarGhanim Fodi <gfodi@codeaurora.org>
parent 52a95c85
Loading
Loading
Loading
Loading
+29 −15
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
 */

#include "ipa_i.h"
@@ -449,10 +449,18 @@ int ipa3_setup_uc_ntn_pipes(struct ipa_ntn_conn_in_params *in,
		goto fail;
	}

	result = ipa3_enable_data_path(ipa_ep_idx_ul);
	if (result) {
		IPAERR("Enable data path failed res=%d pipe=%d.\n", result,
			ipa_ep_idx_ul);
		result = -EFAULT;
		goto fail_smmu_unmap_ul;
	}

	if (ipa3_uc_send_ntn_setup_pipe_cmd(&in->ul, IPA_NTN_RX_DIR)) {
		IPAERR("fail to send cmd to uc for ul pipe\n");
		result = -EFAULT;
		goto fail_smmu_map_ul;
		goto fail_disable_dp_ul;
	}
	ipa3_install_dflt_flt_rules(ipa_ep_idx_ul);
	outp->ul_uc_db_pa = IPA_UC_NTN_DB_PA_RX;
@@ -471,40 +479,44 @@ int ipa3_setup_uc_ntn_pipes(struct ipa_ntn_conn_in_params *in,
	if (ipa3_cfg_ep(ipa_ep_idx_dl, &ep_dl->cfg)) {
		IPAERR("fail to setup dl pipe cfg\n");
		result = -EFAULT;
		goto fail_smmu_map_ul;
		goto fail_disable_dp_ul;
	}

	result = ipa3_smmu_map_uc_ntn_pipes(&in->dl, true);
	if (result) {
		IPAERR("failed to map SMMU for DL %d\n", result);
		goto fail_smmu_map_ul;
		goto fail_disable_dp_ul;
	}

	result = ipa3_enable_data_path(ipa_ep_idx_dl);
	if (result) {
		IPAERR("Enable data path failed res=%d pipe=%d.\n", result,
			ipa_ep_idx_dl);
		result = -EFAULT;
		goto fail_smmu_unmap_dl;
	}

	if (ipa3_uc_send_ntn_setup_pipe_cmd(&in->dl, IPA_NTN_TX_DIR)) {
		IPAERR("fail to send cmd to uc for dl pipe\n");
		result = -EFAULT;
		goto fail_smmu_map_dl;
		goto fail_disable_dp_dl;
	}
	outp->dl_uc_db_pa = IPA_UC_NTN_DB_PA_TX;
	ep_dl->uc_offload_state |= IPA_UC_OFFLOAD_CONNECTED;

	result = ipa3_enable_data_path(ipa_ep_idx_dl);
	if (result) {
		IPAERR("Enable data path failed res=%d clnt=%d.\n", result,
			ipa_ep_idx_dl);
		result = -EFAULT;
		goto fail_smmu_map_dl;
	}

	IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
	IPADBG("client %d (ep: %d) connected\n", in->dl.client,
		ipa_ep_idx_dl);

	return 0;

fail_smmu_map_dl:
fail_disable_dp_dl:
	ipa3_disable_data_path(ipa_ep_idx_dl);
fail_smmu_unmap_dl:
	ipa3_smmu_map_uc_ntn_pipes(&in->dl, false);
fail_smmu_map_ul:
fail_disable_dp_ul:
	ipa3_disable_data_path(ipa_ep_idx_ul);
fail_smmu_unmap_ul:
	ipa3_smmu_map_uc_ntn_pipes(&in->ul, false);
fail:
	IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
@@ -589,6 +601,8 @@ int ipa3_tear_down_uc_offload_pipes(int ipa_ep_idx_ul,
	}

	/* teardown the UL pipe */
	ipa3_disable_data_path(ipa_ep_idx_ul);

	tear->params.ipa_pipe_number = ipa_ep_idx_ul;
	result = ipa3_uc_send_cmd((u32)(cmd.phys_base),
				IPA_CPU_2_HW_CMD_OFFLOAD_TEAR_DOWN,