Thread (6 messages) 6 messages, 4 authors, 2021-12-07

RE: [PATCH] iwlwifi: work around reverse dependency on MEI

flat view

From: Grumbach, Emmanuel <hidden>
Date: 2021-12-07 13:19:23
Also in: linux-wireless, lkml

Hi Arend,
Subject: [PATCH] iwlwifi: work around reverse dependency on MEI

From: Arnd Bergmann <arnd@arndb.de>

If the iwlmei code is a loadable module, the main iwlwifi driver cannot be
built-in:

x86_64-linux-ld: drivers/net/wireless/intel/iwlwifi/pcie/trans.o: in function
`iwl_pcie_prepare_card_hw':
trans.c:(.text+0x4158): undefined reference to `iwl_mei_is_connected'

Unfortunately, Kconfig enforces the opposite, forcing the MEI driver to not
be built-in if iwlwifi is a module.

There is no easy way to express the correct dependency in Kconfig, this is the
best workaround I could come up with, turning CONFIG_IWLMEI into a 'bool'
symbol, and spelling out the exact conditions under which it may be enabled,
and then using Makefile logic to ensure it is built-in when iwlwifi is.

A better option would be change iwl_mei_is_connected() so it could be
called from iwlwifi regardless of whether the mei driver is reachable, but that
requires a larger rework in the driver.
I can try to do that but I don't really see how..
I can't really make a function that would behave differently based on whether the symbol is available or not.
quoted hunk ↗ jump to hunk
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/net/wireless/intel/iwlwifi/Kconfig      | 6 +++---
 drivers/net/wireless/intel/iwlwifi/Makefile     | 3 +--
 drivers/net/wireless/intel/iwlwifi/mei/Makefile | 4 +++-
 3 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlwifi/Kconfig
b/drivers/net/wireless/intel/iwlwifi/Kconfig
index cf1125d84929..474afc6f82a8 100644
--- a/drivers/net/wireless/intel/iwlwifi/Kconfig
+++ b/drivers/net/wireless/intel/iwlwifi/Kconfig
@@ -93,10 +93,10 @@ config IWLWIFI_BCAST_FILTERING
 	  expect incoming broadcasts for their normal operations.

 config IWLMEI
-	tristate "Intel Management Engine communication over WLAN"
-	depends on INTEL_MEI
+	bool "Intel Management Engine communication over WLAN"
+	depends on INTEL_MEI=y || INTEL_MEI=IWLMVM
+	depends on IWLMVM=y || IWLWIFI=m
 	depends on PM
-	depends on IWLMVM
 	help
 	  Enables the iwlmei kernel module.
Johannes suggested to make IWLMVM depend on IWLMEI || !IWLMEI
That worked as well, I just had issues with this in our internal backport based tree.
I need to spend a bit more time on this, but I admit my total ignorance in Kconfig's dialect.

quoted hunk ↗ jump to hunk
diff --git a/drivers/net/wireless/intel/iwlwifi/Makefile
b/drivers/net/wireless/intel/iwlwifi/Makefile
index 75a703eb1bdf..c117e105fe5c 100644
--- a/drivers/net/wireless/intel/iwlwifi/Makefile
+++ b/drivers/net/wireless/intel/iwlwifi/Makefile
@@ -29,7 +29,6 @@ iwlwifi-$(CONFIG_IWLWIFI_DEVICE_TRACING) += iwl-
devtrace.o  ccflags-y += -I$(src)

 obj-$(CONFIG_IWLDVM)	+= dvm/
-obj-$(CONFIG_IWLMVM)	+= mvm/
-obj-$(CONFIG_IWLMEI)	+= mei/
+obj-$(CONFIG_IWLMVM)	+= mvm/ mei/

 CFLAGS_iwl-devtrace.o := -I$(src)
diff --git a/drivers/net/wireless/intel/iwlwifi/mei/Makefile
b/drivers/net/wireless/intel/iwlwifi/mei/Makefile
index 8e3ef0347db7..98b561c3820f 100644
--- a/drivers/net/wireless/intel/iwlwifi/mei/Makefile
+++ b/drivers/net/wireless/intel/iwlwifi/mei/Makefile
@@ -1,5 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
-obj-$(CONFIG_IWLMEI)	+= iwlmei.o
+ifdef CONFIG_IWLMEI
+obj-$(CONFIG_IWLWIFI)	+= iwlmei.o
+endif
 iwlmei-y += main.o
 iwlmei-y += net.o
 iwlmei-$(CONFIG_IWLWIFI_DEVICE_TRACING) += trace.o
--
2.29.2
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help