net: ipa: support more endpoints
Increase the number of endpoints supported by the driver to 36, which IPA v5.0 supports. This makes it impossible to check at build time whether the supported number is too big to fit within the (5-bit) PACKET_INIT destination endpoint field. Instead, convert the build time check to compare against what fits in 8 bits. Add a check in ipa_endpoint_config() to also ensure the hardware reports an endpoint count that's in the expected range. Just open-code 32 as the limit (the PACKET_INIT field mask is not available where we'd want to use it). Signed-off-by: Alex Elder <elder@linaro.org> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
71af6a2ddf
commit
07abde549b
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (C) 2019-2022 Linaro Ltd.
|
||||
* Copyright (C) 2019-2023 Linaro Ltd.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
@@ -1986,6 +1986,7 @@ int ipa_endpoint_config(struct ipa *ipa)
|
||||
struct device *dev = &ipa->pdev->dev;
|
||||
const struct ipa_reg *reg;
|
||||
u32 endpoint_id;
|
||||
u32 hw_limit;
|
||||
u32 tx_count;
|
||||
u32 rx_count;
|
||||
u32 rx_base;
|
||||
@@ -2031,6 +2032,14 @@ int ipa_endpoint_config(struct ipa *ipa)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Until IPA v5.0, the max endpoint ID was 32 */
|
||||
hw_limit = ipa->version < IPA_VERSION_5_0 ? 32 : U8_MAX + 1;
|
||||
if (limit > hw_limit) {
|
||||
dev_err(dev, "unexpected endpoint count, %u > %u\n",
|
||||
limit, hw_limit);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Allocate and initialize the available endpoint bitmap */
|
||||
ipa->available = bitmap_zalloc(limit, GFP_KERNEL);
|
||||
if (!ipa->available)
|
||||
|
||||
Reference in New Issue
Block a user