net: ipa: relax 64-bit build requirement

We currently assume the IPA driver is built only for a 64 bit kernel.

When this constraint was put in place it eliminated some do_div()
calls, replacing them with the "/" and "%" operators.  We now only
use these operations on u32 and size_t objects.  In a 32-bit kernel
build, size_t will be 32 bits wide, so there remains no reason to
use do_div() for divide and modulo.

A few recent commits also fix some code that assumes that DMA
addresses are 64 bits wide.

With that, we can get rid of the 64-bit build requirement.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Alex Elder 2021-03-18 13:59:30 -05:00 committed by David S. Miller
parent e5d4e96b44
commit 99e75a37bd
2 changed files with 9 additions and 3 deletions

View File

@ -1,6 +1,6 @@
config QCOM_IPA
tristate "Qualcomm IPA support"
depends on 64BIT && NET && QCOM_SMEM
depends on NET && QCOM_SMEM
depends on ARCH_QCOM || COMPILE_TEST
depends on QCOM_RPROC_COMMON || (QCOM_RPROC_COMMON=n && COMPILE_TEST)
select QCOM_MDT_LOADER if ARCH_QCOM

View File

@ -735,8 +735,14 @@ MODULE_DEVICE_TABLE(of, ipa_match);
static void ipa_validate_build(void)
{
#ifdef IPA_VALIDATE
/* We assume we're working on 64-bit hardware */
BUILD_BUG_ON(!IS_ENABLED(CONFIG_64BIT));
/* At one time we assumed a 64-bit build, allowing some do_div()
* calls to be replaced by simple division or modulo operations.
* We currently only perform divide and modulo operations on u32,
* u16, or size_t objects, and of those only size_t has any chance
* of being a 64-bit value. (It should be guaranteed 32 bits wide
* on a 32-bit build, but there is no harm in verifying that.)
*/
BUILD_BUG_ON(!IS_ENABLED(CONFIG_64BIT) && sizeof(size_t) != 4);
/* Code assumes the EE ID for the AP is 0 (zeroed structure field) */
BUILD_BUG_ON(GSI_EE_AP != 0);