Loading drivers/platform/msm/ipa/ipa.c +22 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; } Loading Loading @@ -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); Loading drivers/platform/msm/ipa/ipa_client.c +486 −314 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/platform/msm/ipa/ipa_dp.c +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading drivers/platform/msm/ipa/ipa_i.h +30 −11 Original line number Diff line number Diff line Loading @@ -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; }; /** Loading Loading @@ -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; }; /** Loading Loading @@ -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_ */ Loading
drivers/platform/msm/ipa/ipa.c +22 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; } Loading Loading @@ -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); Loading
drivers/platform/msm/ipa/ipa_client.c +486 −314 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/platform/msm/ipa/ipa_dp.c +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading
drivers/platform/msm/ipa/ipa_i.h +30 −11 Original line number Diff line number Diff line Loading @@ -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; }; /** Loading Loading @@ -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; }; /** Loading Loading @@ -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_ */