|
@@ -2014,6 +2014,32 @@ int ipa3_clear_endpoint_delay(u32 clnt_hdl)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static void ipa3_get_gsi_ring_stats(struct IpaHwRingStats_t *ring,
|
|
|
+ struct ipa3_uc_dbg_stats *ctx_stats, int idx)
|
|
|
+{
|
|
|
+ ring->ringFull = ioread32(
|
|
|
+ ctx_stats->uc_dbg_stats_mmio
|
|
|
+ + idx * IPA3_UC_DEBUG_STATS_OFF +
|
|
|
+ IPA3_UC_DEBUG_STATS_RINGFULL_OFF);
|
|
|
+
|
|
|
+ ring->ringEmpty = ioread32(
|
|
|
+ ctx_stats->uc_dbg_stats_mmio
|
|
|
+ + idx * IPA3_UC_DEBUG_STATS_OFF +
|
|
|
+ IPA3_UC_DEBUG_STATS_RINGEMPTY_OFF);
|
|
|
+ ring->ringUsageHigh = ioread32(
|
|
|
+ ctx_stats->uc_dbg_stats_mmio
|
|
|
+ + idx * IPA3_UC_DEBUG_STATS_OFF +
|
|
|
+ IPA3_UC_DEBUG_STATS_RINGUSAGEHIGH_OFF);
|
|
|
+ ring->ringUsageLow = ioread32(
|
|
|
+ ctx_stats->uc_dbg_stats_mmio
|
|
|
+ + idx * IPA3_UC_DEBUG_STATS_OFF +
|
|
|
+ IPA3_UC_DEBUG_STATS_RINGUSAGELOW_OFF);
|
|
|
+ ring->RingUtilCount = ioread32(
|
|
|
+ ctx_stats->uc_dbg_stats_mmio
|
|
|
+ + idx * IPA3_UC_DEBUG_STATS_OFF +
|
|
|
+ IPA3_UC_DEBUG_STATS_RINGUTILCOUNT_OFF);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ipa3_get_aqc_gsi_stats() - Query AQC gsi stats from uc
|
|
|
* @stats: [inout] stats blob from client populated by driver
|
|
@@ -2033,32 +2059,43 @@ int ipa3_get_aqc_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
|
|
}
|
|
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
|
|
for (i = 0; i < MAX_AQC_CHANNELS; i++) {
|
|
|
- stats->u.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->u.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->u.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->u.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->u.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);
|
|
|
+ ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
|
|
+ &ipa3_ctx->aqc_ctx.dbg_stats, i);
|
|
|
+ }
|
|
|
+ IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
|
|
|
+
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+* ipa3_get_ntn_gsi_stats() - Query NTN 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_ntn_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ if (!ipa3_ctx->ntn_ctx.dbg_stats.uc_dbg_stats_mmio) {
|
|
|
+ IPAERR("bad parms NULL ntn_gsi_stats_mmio\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
|
|
+ for (i = 0; i < MAX_NTN_CHANNELS; i++) {
|
|
|
+ ipa3_get_gsi_ring_stats(stats->u.ring + i,
|
|
|
+ &ipa3_ctx->ntn_ctx.dbg_stats, i);
|
|
|
}
|
|
|
IPA_ACTIVE_CLIENTS_DEC_SIMPLE();
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* ipa3_get_rtk_gsi_stats() - Query RTK gsi stats from uc
|
|
|
* @stats: [inout] stats blob from client populated by driver
|
|
@@ -2079,26 +2116,8 @@ int ipa3_get_rtk_gsi_stats(struct ipa_uc_dbg_ring_stats *stats)
|
|
|
}
|
|
|
IPA_ACTIVE_CLIENTS_INC_SIMPLE();
|
|
|
for (i = 0; i < MAX_RTK_CHANNELS; i++) {
|
|
|
- stats->u.rtk[i].commStats.ringFull = ioread32(
|
|
|
- ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
- + i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|
|
|
- IPA3_UC_DEBUG_STATS_RINGFULL_OFF);
|
|
|
- stats->u.rtk[i].commStats.ringEmpty = ioread32(
|
|
|
- ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
- + i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|
|
|
- IPA3_UC_DEBUG_STATS_RINGEMPTY_OFF);
|
|
|
- stats->u.rtk[i].commStats.ringUsageHigh = ioread32(
|
|
|
- ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
- + i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|
|
|
- IPA3_UC_DEBUG_STATS_RINGUSAGEHIGH_OFF);
|
|
|
- stats->u.rtk[i].commStats.ringUsageLow = ioread32(
|
|
|
- ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
- + i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|
|
|
- IPA3_UC_DEBUG_STATS_RINGUSAGELOW_OFF);
|
|
|
- stats->u.rtk[i].commStats.RingUtilCount = ioread32(
|
|
|
- ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
- + i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|
|
|
- IPA3_UC_DEBUG_STATS_RINGUTILCOUNT_OFF);
|
|
|
+ ipa3_get_gsi_ring_stats(&stats->u.rtk[i].commStats,
|
|
|
+ &ipa3_ctx->rtk_ctx.dbg_stats, i);
|
|
|
stats->u.rtk[i].trCount = ioread32(
|
|
|
ipa3_ctx->rtk_ctx.dbg_stats.uc_dbg_stats_mmio
|
|
|
+ i * IPA3_UC_DEBUG_STATS_RTK_OFF +
|