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

Commit bb1c6d45 authored by Bojun Pan's avatar Bojun Pan
Browse files

msm: IPA: uC debug stats for loadable modules



Add uC debug stats support for AQC/loadable modules.

Change-Id: I21cd3807c8e8973065b79f4ec43a0da382595653
Signed-off-by: default avatarBojun Pan <bojunp@codeaurora.org>
parent 33eaa278
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -3648,6 +3648,45 @@ void ipa_deregister_client_callback(enum ipa_client_type client)
		client);
}

int ipa_uc_debug_stats_alloc(
	struct IpaHwOffloadStatsAllocCmdData_t cmdinfo)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_uc_debug_stats_alloc, cmdinfo);

	return ret;
}
EXPORT_SYMBOL(ipa_uc_debug_stats_alloc);

int ipa_uc_debug_stats_dealloc(uint32_t prot_id)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_uc_debug_stats_dealloc, prot_id);

	return ret;
}
EXPORT_SYMBOL(ipa_uc_debug_stats_dealloc);

void ipa_get_gsi_stats(int prot_id,
	struct ipa_uc_dbg_ring_stats *stats)
{
	IPA_API_DISPATCH(ipa_get_gsi_stats,
		prot_id, stats);
}
EXPORT_SYMBOL(ipa_get_gsi_stats);

int ipa_get_prot_id(enum ipa_client_type client)
{
	int ret;

	IPA_API_DISPATCH_RETURN(ipa_get_prot_id,
		client);

	return ret;
}
EXPORT_SYMBOL(ipa_get_prot_id);

/**
 * ipa_pm_is_used() - Returns if IPA PM framework is used
+10 −0
Original line number Diff line number Diff line
@@ -474,6 +474,16 @@ struct ipa_api_controller {
		bool (*teth_port_state)(void), enum ipa_client_type client);

	void (*ipa_deregister_client_callback)(enum ipa_client_type client);

	int (*ipa_uc_debug_stats_alloc)(
		struct IpaHwOffloadStatsAllocCmdData_t cmdinfo);

	int (*ipa_uc_debug_stats_dealloc)(uint32_t prot_id);

	void (*ipa_get_gsi_stats)(int prot_id,
		struct ipa_uc_dbg_ring_stats *stats);

	int (*ipa_get_prot_id)(enum ipa_client_type client);
};

#ifdef CONFIG_IPA3
+1 −1
Original line number Diff line number Diff line
@@ -3184,7 +3184,7 @@ static void ipa3_usb_exit(void)
 * @note Cannot be called from atomic context
 *
 */
int ipa3_get_usb_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats)
int ipa3_get_usb_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
{
	int i;

+1 −1
Original line number Diff line number Diff line
@@ -6366,7 +6366,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
	for (i = 0; i < IPA_HW_PROTOCOL_MAX; i++) {
		ipa3_ctx->gsi_info[i].protocol = i;
		/* initialize all to be not started */
		for (j = 0; j < MAX_CH_STATS_SUPPORTED; j++)
		for (j = 0; j < IPA_MAX_CH_STATS_SUPPORTED; j++)
			ipa3_ctx->gsi_info[i].ch_id_info[j].ch_id =
				0xFF;
	}
+46 −0
Original line number Diff line number Diff line
@@ -1747,5 +1747,51 @@ int ipa3_clear_endpoint_delay(u32 clnt_hdl)

	IPADBG("client (ep: %d) removed ep delay\n", clnt_hdl);

	return 0;
}

/**
 * ipa3_get_aqc_gsi_stats() - Query AQC gsi stats from uc
 * @stats:	[inout] stats blob from client populated by driver
 *
 * Returns:	0 on success, negative on failure
 *
 * @note Cannot be called from atomic context
 *
 */
int ipa3_get_aqc_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
{
	int i;

	if (!ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio) {
		IPAERR("bad parms NULL aqc_gsi_stats_mmio\n");
		return -EINVAL;
	}
	IPA_ACTIVE_CLIENTS_INC_SIMPLE();
	for (i = 0; i < MAX_AQC_CHANNELS; i++) {
		stats->ring[i].ringFull = ioread32(
			ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio
			+ i * IPA3_UC_DEBUG_STATS_OFF +
			IPA3_UC_DEBUG_STATS_RINGFULL_OFF);
		stats->ring[i].ringEmpty = ioread32(
			ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio
			+ i * IPA3_UC_DEBUG_STATS_OFF +
			IPA3_UC_DEBUG_STATS_RINGEMPTY_OFF);
		stats->ring[i].ringUsageHigh = ioread32(
			ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio
			+ i * IPA3_UC_DEBUG_STATS_OFF +
			IPA3_UC_DEBUG_STATS_RINGUSAGEHIGH_OFF);
		stats->ring[i].ringUsageLow = ioread32(
			ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio
			+ i * IPA3_UC_DEBUG_STATS_OFF +
			IPA3_UC_DEBUG_STATS_RINGUSAGELOW_OFF);
		stats->ring[i].RingUtilCount = ioread32(
			ipa3_ctx->aqc_ctx.dbg_stats.uc_dbg_stats_mmio
			+ i * IPA3_UC_DEBUG_STATS_OFF +
			IPA3_UC_DEBUG_STATS_RINGUTILCOUNT_OFF);
	}
	IPA_ACTIVE_CLIENTS_DEC_SIMPLE();


	return 0;
}
Loading