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

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

Merge "msm: ipa: Perform IPA pipe reset using uC interface"

parents c82cbc44 01816676
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1389,6 +1389,9 @@ static int ipa_q6_set_ex_path_dis_agg(void)
*/
int ipa_q6_cleanup(void)
{
	int client_idx;
	int res;

	if (ipa_q6_pipe_delay()) {
		IPAERR("Failed to delay Q6 pipes\n");
		BUG();
@@ -1406,6 +1409,18 @@ int ipa_q6_cleanup(void)
		BUG();
	}

	for (client_idx = 0; client_idx < IPA_CLIENT_MAX; client_idx++)
		if (IPA_CLIENT_IS_Q6_CONS(client_idx) ||
		    IPA_CLIENT_IS_Q6_PROD(client_idx)) {
			res = ipa_uc_reset_pipe(client_idx);
			/*
			 * In case of a failure we have to assert, because
			 * Q6 relies on the AP to reset all the pipes.
			 */
			if (res)
				BUG();
		}

	return 0;
}

@@ -2877,6 +2892,13 @@ static int ipa_init(const struct ipa_plat_drv_res *resource_p,
	}

	ipa_debugfs_init();

	result = ipa_uc_interface_init();
	if (result)
		IPAERR(":ipa Uc interface init failed (%d)\n", -result);
	else
		IPADBG(":ipa Uc interface init ok\n");

	result = ipa_wdi_init();
	if (result)
		IPAERR(":wdi init failed (%d)\n", -result);
+486 −314

File changed.

Preview size limit exceeded, changes collapsed.

+1 −1
Original line number Diff line number Diff line
@@ -1099,7 +1099,7 @@ int ipa_setup_sys_pipe(struct ipa_sys_connect_params *sys_in, u32 *clnt_hdl)

	ep->connect.event_thresh = IPA_EVENT_THRESHOLD;

	result = sps_connect(ep->ep_hdl, &ep->connect);
	result = ipa_sps_connect_safe(ep->ep_hdl, &ep->connect, sys_in->client);
	if (result) {
		IPAERR("sps_connect fails.\n");
		goto fail_sps_connect;
+30 −11
Original line number Diff line number Diff line
@@ -636,19 +636,32 @@ struct ipa_tag_completion {

struct ipa_controller;

struct ipa_wdi_ctx {
/** struct ipa_uc_ctx - IPA uC context
 * @uc_inited: Indicates if uC inteface has been initialized
 * @uc_loaded: Indicates if uC has loaded
 * @uc_failed: Indicates if uC has failed / returned an error
 * @uc_lock: uC inteface lock to allow only one uC interaction at a time
 * @uc_completation: Completion mechanism to wait for uC commands
 * @uc_sram_mmio: Pointer to uC mapped memory
 * @pending_cmd: The last command sent waiting to be ACKed
 * @uc_status: The last status provided by the uC
 * @wdi_dma_pool: DMA pool used for WDI operations
 */
struct ipa_uc_ctx {
	bool uc_inited;
	bool uc_loaded;
	bool uc_failed;
	struct IpaHwSharedMemWdiMapping_t *ipa_sram_mmio;
	struct mutex lock;
	struct completion cmd_rsp;
	struct mutex uc_lock;
	struct completion uc_completion;
	struct IpaHwSharedMemCommonMapping_t *uc_sram_mmio;
	u32 pending_cmd;
	u32 last_resp;
	struct dma_pool *dma_pool;
	u32 uc_top_ofst;
	struct IpaHwEventLogInfoData_t *uc_top_mmio;
	u32 uc_wdi_stats_ofst;
	struct IpaHwStatsWDIInfoData_t *uc_wdi_stats_mmio;
	u32 uc_status;
	/* WDI specific fields */
	struct dma_pool *wdi_dma_pool;
	u32 wdi_uc_top_ofst;
	struct IpaHwEventLogInfoData_t *wdi_uc_top_mmio;
	u32 wdi_uc_stats_ofst;
	struct IpaHwStatsWDIInfoData_t *wdi_uc_stats_mmio;
};

/**
@@ -784,7 +797,8 @@ struct ipa_context {
	bool q6_proxy_clk_vote_valid;

	struct ipa_wlan_comm_memb wc_memb;
	struct ipa_wdi_ctx wdi;

	struct ipa_uc_ctx uc_ctx;
};

/**
@@ -1014,4 +1028,9 @@ int ipa_tag_process(struct ipa_desc *desc, int num_descs,

int ipa_q6_cleanup(void);
int ipa_init_q6_smem(void);

int ipa_sps_connect_safe(struct sps_pipe *h, struct sps_connect *connect,
			 enum ipa_client_type ipa_client);
int ipa_uc_interface_init(void);
int ipa_uc_reset_pipe(enum ipa_client_type ipa_client);
#endif /* _IPA_I_H_ */