From ccab5b663ee28f8401d327c4bb442ddf7dee3f65 Mon Sep 17 00:00:00 2001 From: Pooja Kumari Date: Mon, 19 Oct 2020 12:59:47 +0530 Subject: [PATCH] msm: ipa3: Add max PDN num based on hardware version Currently defined max PDN number is generic for all hardware version which is incorrect. Define PDN based on hardware version to support correct number of PDN. Change-Id: I3e898a32104562584b4702132c57b7f1cb8deeca Signed-off-by: Pooja Kumari --- drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c | 2 +- drivers/platform/msm/ipa/ipa_v3/ipa_flt.c | 2 +- drivers/platform/msm/ipa/ipa_v3/ipa_i.h | 2 ++ drivers/platform/msm/ipa/ipa_v3/ipa_nat.c | 6 +++--- drivers/platform/msm/ipa/ipa_v3/ipa_utils.c | 15 +++++++++++++++ 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c index 7012182e55106..c635d1cc5b150 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c @@ -2058,7 +2058,7 @@ static void ipa3_read_pdn_table(void) } for (i = 0, pdn_entry = ipa3_ctx->nat_mem.pdn_mem.base; - i < IPA_MAX_PDN_NUM; + i < ipa3_get_max_pdn(); ++i, pdn_entry += pdn_entry_size) { result = ipahal_nat_is_entry_zeroed( diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c index a5794e996d0dd..7931a8e491a02 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c @@ -852,7 +852,7 @@ static int __ipa_validate_flt_rule(const struct ipa_flt_rule_i *rule, "PDN index should be 0 when action is not pass to NAT\n"); goto error; } else { - if (rule->pdn_idx >= IPA_MAX_PDN_NUM) { + if (rule->pdn_idx >= ipa3_get_max_pdn()) { IPAERR_RL("PDN index %d is too large\n", rule->pdn_idx); goto error; diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index ac7d637b39623..e0b43c7d6236b 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -2872,6 +2872,8 @@ int ipa3_query_intf_tx_props(struct ipa_ioc_query_intf_tx_props *tx); int ipa3_query_intf_rx_props(struct ipa_ioc_query_intf_rx_props *rx); int ipa3_query_intf_ext_props(struct ipa_ioc_query_intf_ext_props *ext); +int ipa3_get_max_pdn(void); + void wwan_cleanup(void); int ipa3_teth_bridge_driver_init(void); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c b/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c index 467294965abbc..5edd4776669ec 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c @@ -704,7 +704,7 @@ int ipa3_allocate_nat_table( ipahal_nat_entry_size(IPAHAL_NAT_IPV4_PDN, &pdn_entry_size); - pdn_mem_ptr->size = pdn_entry_size * IPA_MAX_PDN_NUM; + pdn_mem_ptr->size = pdn_entry_size * ipa3_get_max_pdn(); if (IPA_MEM_PART(pdn_config_size) < pdn_mem_ptr->size) { IPAERR( @@ -1118,7 +1118,7 @@ static int ipa3_nat_create_modify_pdn_cmd( IPADBG("\n"); ipahal_nat_entry_size(IPAHAL_NAT_IPV4_PDN, &pdn_entry_size); - mem_size = pdn_entry_size * IPA_MAX_PDN_NUM; + mem_size = pdn_entry_size * ipa3_get_max_pdn(); /* Before providing physical base address check pointer exist or not*/ if (!ipa3_ctx->nat_mem.pdn_mem.base) @@ -1653,7 +1653,7 @@ int ipa3_nat_mdfy_pdn( goto bail; } - if (mdfy_pdn->pdn_index > (IPA_MAX_PDN_NUM - 1)) { + if (mdfy_pdn->pdn_index > (ipa3_get_max_pdn() - 1)) { IPAERR_RL("pdn index out of range %d\n", mdfy_pdn->pdn_index); result = -EPERM; goto bail; diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c index 7c44b78b87c9d..4d506d38d4000 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c @@ -267,6 +267,7 @@ enum ipa_ver { IPA_4_5, IPA_4_5_MHI, IPA_4_5_APQ, + IPA_4_5_AUTO, IPA_4_7, IPA_4_9, IPA_4_11, @@ -9590,3 +9591,17 @@ int ipa3_get_prot_id(enum ipa_client_type client) return prot_id; } + +/** + * ipa3_get_max_pdn() - get max PDN number based on hardware version + * Returns: IPA_MAX_PDN_NUM of IPAv4_5 and IPA_MAX_PDN_NUM_v4_2 for others + * + */ + +int ipa3_get_max_pdn(void) +{ + if (ipa3_get_hw_type_index() == IPA_4_5_AUTO) + return IPA_MAX_PDN_NUM; + else + return IPA_MAX_PDN_NUM_v4; +}