static void ipa_log_evt_hdlr(void) { int i; if (!ipa_ctx->uc_ctx.uc_event_top_ofst) { ipa_ctx->uc_ctx.uc_event_top_ofst = ipa_ctx->uc_ctx.uc_sram_mmio->eventParams; if (ipa_ctx->uc_ctx.uc_event_top_ofst + sizeof(struct IpaHwEventLogInfoData_t) >= ipa_ctx->ctrl->ipa_reg_base_ofst + IPA_SRAM_DIRECT_ACCESS_N_OFST_v2_0(0) + ipa_ctx->smem_sz) { IPAERR("uc_top 0x%x outside SRAM\n", ipa_ctx->uc_ctx.uc_event_top_ofst); goto bad_uc_top_ofst; } ipa_ctx->uc_ctx.uc_event_top_mmio = ioremap( ipa_ctx->ipa_wrapper_base + ipa_ctx->uc_ctx.uc_event_top_ofst, sizeof(struct IpaHwEventLogInfoData_t)); if (!ipa_ctx->uc_ctx.uc_event_top_mmio) { IPAERR("fail to ioremap uc top\n"); goto bad_uc_top_ofst; } for (i = 0; i < IPA_HW_NUM_FEATURES; i++) { if (uc_hdlrs[i].ipa_uc_event_log_info_hdlr) uc_hdlrs[i].ipa_uc_event_log_info_hdlr (ipa_ctx->uc_ctx.uc_event_top_mmio); } } else { if (ipa_ctx->uc_ctx.uc_sram_mmio->eventParams != ipa_ctx->uc_ctx.uc_event_top_ofst) { IPAERR("uc top ofst changed new=%u cur=%u\n", ipa_ctx->uc_ctx.uc_sram_mmio-> eventParams, ipa_ctx->uc_ctx.uc_event_top_ofst); } } return; bad_uc_top_ofst: ipa_ctx->uc_ctx.uc_event_top_ofst = 0; return; }
static void ipa_uc_mhi_event_log_info_hdlr( struct IpaHwEventLogInfoData_t *uc_event_top_mmio) { if ((uc_event_top_mmio->featureMask & (1 << IPA_HW_FEATURE_MHI)) == 0) { IPAERR("MHI feature missing 0x%x\n", uc_event_top_mmio->featureMask); return; } if (uc_event_top_mmio->statsInfo.featureInfo[IPA_HW_FEATURE_MHI]. params.size != sizeof(struct IpaHwStatsMhiInfoData_t)) { IPAERR("mhi stats sz invalid exp=%zu is=%u\n", sizeof(struct IpaHwStatsMhiInfoData_t), uc_event_top_mmio->statsInfo. featureInfo[IPA_HW_FEATURE_MHI].params.size); return; } ipa_uc_mhi_ctx->mhi_uc_stats_ofst = uc_event_top_mmio-> statsInfo.baseAddrOffset + uc_event_top_mmio->statsInfo. featureInfo[IPA_HW_FEATURE_MHI].params.offset; IPAERR("MHI stats ofst=0x%x\n", ipa_uc_mhi_ctx->mhi_uc_stats_ofst); if (ipa_uc_mhi_ctx->mhi_uc_stats_ofst + sizeof(struct IpaHwStatsMhiInfoData_t) >= ipa_ctx->ctrl->ipa_reg_base_ofst + IPA_SRAM_DIRECT_ACCESS_N_OFST_v2_0(0) + ipa_ctx->smem_sz) { IPAERR("uc_mhi_stats 0x%x outside SRAM\n", ipa_uc_mhi_ctx->mhi_uc_stats_ofst); return; } ipa_uc_mhi_ctx->mhi_uc_stats_mmio = ioremap(ipa_ctx->ipa_wrapper_base + ipa_uc_mhi_ctx->mhi_uc_stats_ofst, sizeof(struct IpaHwStatsMhiInfoData_t)); if (!ipa_uc_mhi_ctx->mhi_uc_stats_mmio) { IPAERR("fail to ioremap uc mhi stats\n"); return; } return; }