From 043cae74b250f291a48fa36bb091391e917c3eb5 Mon Sep 17 00:00:00 2001 From: Michael Adisumarta Date: Fri, 6 Nov 2020 17:24:34 -0800 Subject: [PATCH 1/2] msm: ipa: device assisted low power states support in IPA This change supports device assisted low power modes -M1/M2 states in IPA. For M1/M2 states, GSI is continued to be in poll mode where as for M3 state GSI is moved to doorbell mode. Change-Id: I48a7c9f2c27da0be69a6bb50dfec0a542e46caec Signed-off-by: Michael Adisumarta --- include/linux/ipa_mhi.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/include/linux/ipa_mhi.h b/include/linux/ipa_mhi.h index 13fa2475118f..dbb1cace27f2 100644 --- a/include/linux/ipa_mhi.h +++ b/include/linux/ipa_mhi.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #ifndef IPA_MHI_H_ @@ -22,6 +22,14 @@ enum ipa_mhi_event_type { IPA_MHI_EVENT_MAX, }; +enum ipa_mhi_mstate { + IPA_MHI_STATE_M0, + IPA_MHI_STATE_M1, + IPA_MHI_STATE_M2, + IPA_MHI_STATE_M3, + IPA_MHI_STATE_M_MAX +}; + typedef void (*mhi_client_cb)(void *priv, enum ipa_mhi_event_type event, unsigned long data); @@ -111,6 +119,8 @@ int ipa_mhi_resume(void); void ipa_mhi_destroy(void); +int ipa_mhi_update_mstate(enum ipa_mhi_mstate mstate_info); + #else /* IS_ENABLED(CONFIG_IPA3) */ static inline int ipa_mhi_init(struct ipa_mhi_init_params *params) @@ -149,6 +159,12 @@ static inline void ipa_mhi_destroy(void) } +static inline int ipa_mhi_update_mstate + (enum ipa_mhi_mstate mstate_info) +{ + return -EPERM; +} + #endif /* IS_ENABLED(CONFIG_IPA3) */ #endif /* IPA_MHI_H_ */ From 5148b81b04269827ce82a61303620253e8952543 Mon Sep 17 00:00:00 2001 From: Akshay Pandit Date: Tue, 10 Nov 2020 21:23:09 +0530 Subject: [PATCH 2/2] msm: ipa_fwmk: Provide api for mhi driver to update state Provide api for mhi driver to notify IPA of power states. Change-Id: I757b15e3c16bcb63cb09bb18a2056f07c6a9b95d Signed-off-by: Akshay Pandit --- drivers/platform/msm/ipa_fmwk/ipa_fmwk.c | 16 +++++++++++++++- include/linux/ipa_fmwk.h | 2 ++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c index 9459dff2a648..940f6cbc747a 100644 --- a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c +++ b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c @@ -319,6 +319,8 @@ struct ipa_fmwk_contex { int (*ipa_mhi_handle_ipa_config_req)( struct ipa_config_req_msg_v01 *config_req); + int (*ipa_mhi_update_mstate)(enum ipa_mhi_mstate mstate_info); + /* ipa_wigig APIs */ int (*ipa_wigig_init)(struct ipa_wigig_init_in_params *in, struct ipa_wigig_init_out_params *out); @@ -1451,7 +1453,8 @@ int ipa_fmwk_register_ipa_mhi(const struct ipa_mhi_data *in) || ipa_fmwk_ctx->ipa_mhi_suspend || ipa_fmwk_ctx->ipa_mhi_resume || ipa_fmwk_ctx->ipa_mhi_destroy - || ipa_fmwk_ctx->ipa_mhi_handle_ipa_config_req) { + || ipa_fmwk_ctx->ipa_mhi_handle_ipa_config_req + || ipa_fmwk_ctx->ipa_mhi_update_mstate) { pr_err("ipa_mhi APIs were already initialized\n"); return -EPERM; } @@ -1465,6 +1468,7 @@ int ipa_fmwk_register_ipa_mhi(const struct ipa_mhi_data *in) ipa_fmwk_ctx->ipa_mhi_destroy = in->ipa_mhi_destroy; ipa_fmwk_ctx->ipa_mhi_handle_ipa_config_req = in->ipa_mhi_handle_ipa_config_req; + ipa_fmwk_ctx->ipa_mhi_update_mstate = in->ipa_mhi_update_mstate; pr_info("ipa_mhi registered successfully\n"); @@ -1555,6 +1559,16 @@ int ipa_mhi_handle_ipa_config_req(struct ipa_config_req_msg_v01 *config_req) } EXPORT_SYMBOL(ipa_mhi_handle_ipa_config_req); +int ipa_mhi_update_mstate(enum ipa_mhi_mstate mstate_info) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_mhi_update_mstate, mstate_info); + + return ret; +} +EXPORT_SYMBOL(ipa_mhi_update_mstate); + /* registration API for IPA wigig module */ int ipa_fmwk_register_ipa_wigig(const struct ipa_wigig_data *in) { diff --git a/include/linux/ipa_fmwk.h b/include/linux/ipa_fmwk.h index 0a8de09c805a..79a210cf8d0f 100644 --- a/include/linux/ipa_fmwk.h +++ b/include/linux/ipa_fmwk.h @@ -227,6 +227,8 @@ struct ipa_mhi_data { int (*ipa_mhi_handle_ipa_config_req)( struct ipa_config_req_msg_v01 *config_req); + + int (*ipa_mhi_update_mstate)(enum ipa_mhi_mstate mstate_info); }; struct ipa_wigig_data {