Loading drivers/platform/msm/ipa/ipa_clients/ipa_usb.c +1 −1 Original line number Diff line number Diff line Loading @@ -3186,7 +3186,7 @@ int ipa3_get_usb_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) return -EINVAL; } IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < MAX_CH_STATS_SUPPORTED; i++) { for (i = 0; i < MAX_USB_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->usb_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading drivers/platform/msm/ipa/ipa_v3/ipa_client.c +68 −46 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ static int ipa3_is_xdci_channel_empty(struct ipa3_ep_context *ep, bool *is_empty); static void ipa3_start_gsi_debug_monitor(u32 clnt_hdl); int ipa3_enable_data_path(u32 clnt_hdl) { Loading Loading @@ -248,6 +249,68 @@ static bool ipa3_is_legal_params(struct ipa_request_gsi_channel_params *params) return true; } static void ipa3_start_gsi_debug_monitor(u32 clnt_hdl) { struct IpaHwOffloadStatsAllocCmdData_t *gsi_info; struct ipa3_ep_context *ep; enum ipa_client_type client_type; IPADBG("entry\n"); if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || ipa3_ctx->ep[clnt_hdl].valid == 0) { IPAERR("Bad parameters.\n"); return; } ep = &ipa3_ctx->ep[clnt_hdl]; client_type = ipa3_get_client_mapping(clnt_hdl); /* start uC gsi dbg stats monitor */ if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) { switch (client_type) { case IPA_CLIENT_MHI_PRIME_TETH_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_TETH_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[2].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[2].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[3].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[3].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; default: IPADBG("client_type %d not supported\n", client_type); } } } int ipa3_smmu_map_peer_reg(phys_addr_t phys_addr, bool map, enum ipa_smmu_cb_type cb_type) { Loading Loading @@ -750,6 +813,7 @@ int ipa3_xdci_start(u32 clnt_hdl, u8 xferrscidx, bool xferrscidx_valid) IPAERR("Error starting channel: %d\n", gsi_res); goto write_chan_scratch_fail; } ipa3_start_gsi_debug_monitor(clnt_hdl); if (!ep->keep_ipa_awake) IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl)); Loading Loading @@ -1511,6 +1575,7 @@ int ipa3_xdci_suspend(u32 ul_clnt_hdl, u32 dl_clnt_hdl, start_dl_and_exit: gsi_start_channel(dl_ep->gsi_chan_hdl); ipa3_start_gsi_debug_monitor(dl_clnt_hdl); unsuspend_dl_and_exit: if (ipa3_ctx->ipa_hw_type < IPA_HW_v4_0) { /* Unsuspend the DL EP */ Loading @@ -1529,7 +1594,6 @@ int ipa3_start_gsi_channel(u32 clnt_hdl) int result = -EFAULT; enum gsi_status gsi_res; enum ipa_client_type client_type; struct IpaHwOffloadStatsAllocCmdData_t *gsi_info; IPADBG("entry\n"); if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || Loading @@ -1548,51 +1612,7 @@ int ipa3_start_gsi_channel(u32 clnt_hdl) IPAERR("Error starting channel: %d\n", gsi_res); goto start_chan_fail; } /* start uC gsi dbg stats monitor */ if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) { switch (client_type) { case IPA_CLIENT_MHI_PRIME_TETH_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_TETH_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[2].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[2].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[3].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[3].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; default: IPADBG("client_type %d not supported\n", client_type); } } ipa3_start_gsi_debug_monitor(clnt_hdl); if (!ep->keep_ipa_awake) IPA_ACTIVE_CLIENTS_DEC_EP(client_type); Loading Loading @@ -1640,12 +1660,14 @@ int ipa3_xdci_resume(u32 ul_clnt_hdl, u32 dl_clnt_hdl, bool is_dpl) gsi_res = gsi_start_channel(dl_ep->gsi_chan_hdl); if (gsi_res != GSI_STATUS_SUCCESS) IPAERR("Error starting DL channel: %d\n", gsi_res); ipa3_start_gsi_debug_monitor(dl_clnt_hdl); /* Start UL channel */ if (!is_dpl) { gsi_res = gsi_start_channel(ul_ep->gsi_chan_hdl); if (gsi_res != GSI_STATUS_SUCCESS) IPAERR("Error starting UL channel: %d\n", gsi_res); ipa3_start_gsi_debug_monitor(ul_clnt_hdl); } IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(dl_clnt_hdl)); Loading drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c +1 −1 Original line number Diff line number Diff line Loading @@ -2810,7 +2810,7 @@ int ipa3_get_mhip_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) return -EINVAL; } IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < MAX_CH_STATS_SUPPORTED; i++) { for (i = 0; i < MAX_MHIP_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->mhip_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading drivers/platform/msm/ipa/ipa_v3/ipa_uc_offload_i.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ #define DIR_CONSUMER 0 #define DIR_PRODUCER 1 #define MAX_AQC_CHANNELS 2 #define MAX_11AD_CHANNELS 5 #define MAX_WDI2_CHANNELS 2 #define MAX_WDI3_CHANNELS 2 #define MAX_MHIP_CHANNELS 4 #define MAX_USB_CHANNELS 2 /** * @brief Enum value determined based on the feature it Loading Loading @@ -71,6 +77,8 @@ enum ipa3_hw_features { * @IPA_HW_PROTOCOL_WDI : protocol related to WDI operation in IPA HW * @IPA_HW_PROTOCOL_WDI3: protocol related to WDI3 operation in IPA HW * @IPA_HW_PROTOCOL_ETH : protocol related to ETH operation in IPA HW * @IPA_HW_PROTOCOL_MHIP: protocol related to MHIP operation in IPA HW * @IPA_HW_PROTOCOL_USB : protocol related to USB operation in IPA HW */ enum ipa4_hw_protocol { IPA_HW_PROTOCOL_COMMON = 0x0, Loading drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c +2 −4 Original line number Diff line number Diff line Loading @@ -421,17 +421,15 @@ static void ipa3_uc_wdi_event_handler(struct IpaHwSharedMemCommonMapping_t */ int ipa3_get_wdi_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) { int i, num_chs; int i; if (!ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_mmio) { IPAERR("bad NULL parms for wdi_gsi_stats\n"); return -EINVAL; } num_chs = ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_size / sizeof(struct IpaHwRingStats_t); IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < num_chs; i++) { for (i = 0; i < MAX_WDI2_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading Loading
drivers/platform/msm/ipa/ipa_clients/ipa_usb.c +1 −1 Original line number Diff line number Diff line Loading @@ -3186,7 +3186,7 @@ int ipa3_get_usb_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) return -EINVAL; } IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < MAX_CH_STATS_SUPPORTED; i++) { for (i = 0; i < MAX_USB_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->usb_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading
drivers/platform/msm/ipa/ipa_v3/ipa_client.c +68 −46 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ static int ipa3_is_xdci_channel_empty(struct ipa3_ep_context *ep, bool *is_empty); static void ipa3_start_gsi_debug_monitor(u32 clnt_hdl); int ipa3_enable_data_path(u32 clnt_hdl) { Loading Loading @@ -248,6 +249,68 @@ static bool ipa3_is_legal_params(struct ipa_request_gsi_channel_params *params) return true; } static void ipa3_start_gsi_debug_monitor(u32 clnt_hdl) { struct IpaHwOffloadStatsAllocCmdData_t *gsi_info; struct ipa3_ep_context *ep; enum ipa_client_type client_type; IPADBG("entry\n"); if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || ipa3_ctx->ep[clnt_hdl].valid == 0) { IPAERR("Bad parameters.\n"); return; } ep = &ipa3_ctx->ep[clnt_hdl]; client_type = ipa3_get_client_mapping(clnt_hdl); /* start uC gsi dbg stats monitor */ if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) { switch (client_type) { case IPA_CLIENT_MHI_PRIME_TETH_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_TETH_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[2].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[2].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[3].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[3].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; default: IPADBG("client_type %d not supported\n", client_type); } } } int ipa3_smmu_map_peer_reg(phys_addr_t phys_addr, bool map, enum ipa_smmu_cb_type cb_type) { Loading Loading @@ -750,6 +813,7 @@ int ipa3_xdci_start(u32 clnt_hdl, u8 xferrscidx, bool xferrscidx_valid) IPAERR("Error starting channel: %d\n", gsi_res); goto write_chan_scratch_fail; } ipa3_start_gsi_debug_monitor(clnt_hdl); if (!ep->keep_ipa_awake) IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl)); Loading Loading @@ -1511,6 +1575,7 @@ int ipa3_xdci_suspend(u32 ul_clnt_hdl, u32 dl_clnt_hdl, start_dl_and_exit: gsi_start_channel(dl_ep->gsi_chan_hdl); ipa3_start_gsi_debug_monitor(dl_clnt_hdl); unsuspend_dl_and_exit: if (ipa3_ctx->ipa_hw_type < IPA_HW_v4_0) { /* Unsuspend the DL EP */ Loading @@ -1529,7 +1594,6 @@ int ipa3_start_gsi_channel(u32 clnt_hdl) int result = -EFAULT; enum gsi_status gsi_res; enum ipa_client_type client_type; struct IpaHwOffloadStatsAllocCmdData_t *gsi_info; IPADBG("entry\n"); if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || Loading @@ -1548,51 +1612,7 @@ int ipa3_start_gsi_channel(u32 clnt_hdl) IPAERR("Error starting channel: %d\n", gsi_res); goto start_chan_fail; } /* start uC gsi dbg stats monitor */ if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) { switch (client_type) { case IPA_CLIENT_MHI_PRIME_TETH_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_TETH_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[1].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[1].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[2].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[2].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_MHI_PRIME_RMNET_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_MHIP]; gsi_info->ch_id_info[3].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[3].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_PROD: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_PRODUCER; ipa3_uc_debug_stats_alloc(*gsi_info); break; case IPA_CLIENT_USB_CONS: gsi_info = &ipa3_ctx->gsi_info[IPA_HW_PROTOCOL_USB]; gsi_info->ch_id_info[0].ch_id = ep->gsi_chan_hdl; gsi_info->ch_id_info[0].dir = DIR_CONSUMER; ipa3_uc_debug_stats_alloc(*gsi_info); break; default: IPADBG("client_type %d not supported\n", client_type); } } ipa3_start_gsi_debug_monitor(clnt_hdl); if (!ep->keep_ipa_awake) IPA_ACTIVE_CLIENTS_DEC_EP(client_type); Loading Loading @@ -1640,12 +1660,14 @@ int ipa3_xdci_resume(u32 ul_clnt_hdl, u32 dl_clnt_hdl, bool is_dpl) gsi_res = gsi_start_channel(dl_ep->gsi_chan_hdl); if (gsi_res != GSI_STATUS_SUCCESS) IPAERR("Error starting DL channel: %d\n", gsi_res); ipa3_start_gsi_debug_monitor(dl_clnt_hdl); /* Start UL channel */ if (!is_dpl) { gsi_res = gsi_start_channel(ul_ep->gsi_chan_hdl); if (gsi_res != GSI_STATUS_SUCCESS) IPAERR("Error starting UL channel: %d\n", gsi_res); ipa3_start_gsi_debug_monitor(ul_clnt_hdl); } IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(dl_clnt_hdl)); Loading
drivers/platform/msm/ipa/ipa_v3/ipa_mpm.c +1 −1 Original line number Diff line number Diff line Loading @@ -2810,7 +2810,7 @@ int ipa3_get_mhip_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) return -EINVAL; } IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < MAX_CH_STATS_SUPPORTED; i++) { for (i = 0; i < MAX_MHIP_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->mhip_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading
drivers/platform/msm/ipa/ipa_v3/ipa_uc_offload_i.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,12 @@ #define DIR_CONSUMER 0 #define DIR_PRODUCER 1 #define MAX_AQC_CHANNELS 2 #define MAX_11AD_CHANNELS 5 #define MAX_WDI2_CHANNELS 2 #define MAX_WDI3_CHANNELS 2 #define MAX_MHIP_CHANNELS 4 #define MAX_USB_CHANNELS 2 /** * @brief Enum value determined based on the feature it Loading Loading @@ -71,6 +77,8 @@ enum ipa3_hw_features { * @IPA_HW_PROTOCOL_WDI : protocol related to WDI operation in IPA HW * @IPA_HW_PROTOCOL_WDI3: protocol related to WDI3 operation in IPA HW * @IPA_HW_PROTOCOL_ETH : protocol related to ETH operation in IPA HW * @IPA_HW_PROTOCOL_MHIP: protocol related to MHIP operation in IPA HW * @IPA_HW_PROTOCOL_USB : protocol related to USB operation in IPA HW */ enum ipa4_hw_protocol { IPA_HW_PROTOCOL_COMMON = 0x0, Loading
drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c +2 −4 Original line number Diff line number Diff line Loading @@ -421,17 +421,15 @@ static void ipa3_uc_wdi_event_handler(struct IpaHwSharedMemCommonMapping_t */ int ipa3_get_wdi_gsi_stats(struct ipa3_uc_dbg_ring_stats *stats) { int i, num_chs; int i; if (!ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_mmio) { IPAERR("bad NULL parms for wdi_gsi_stats\n"); return -EINVAL; } num_chs = ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_size / sizeof(struct IpaHwRingStats_t); IPA_ACTIVE_CLIENTS_INC_SIMPLE(); for (i = 0; i < num_chs; i++) { for (i = 0; i < MAX_WDI2_CHANNELS; i++) { stats->ring[i].ringFull = ioread32( ipa3_ctx->wdi2_ctx.dbg_stats.uc_dbg_stats_mmio + i * IPA3_UC_DEBUG_STATS_OFF + Loading