All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 0/3] wifi: brcmfmac: few fixes and per-vendor event handling
@ 2024-01-06 10:38 Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Arend van Spriel @ 2024-01-06 10:38 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, Arend van Spriel

[-- Attachment #1: Type: text/plain, Size: 1719 bytes --]

This series modifies a patch from Hector about unnecessary error messages
and fixing an invalid list delete operation when loading vendor-specific
module fails. Main reason for the series is to provide a way to deal with
vendor differences in firmware event handling code.

This series applies to the main branch of the wireless-next repository
and depends on the series "wifi: brcmfmac: per-vendor changes and SAE
offload support" [1]

[1] https://patchwork.kernel.org/project/linux-wireless/list/?series=814040

Arend van Spriel (2):
  wifi: brcmfmac: avoid invalid list operation when vendor attach fails
  wifi: brcmfmac: allow per-vendor event handling

Hector Martin (1):
  wifi: brcmfmac: Demote vendor-specific attach/detach messages to info

 .../broadcom/brcm80211/brcmfmac/bca/core.c    |  28 ++--
 .../broadcom/brcm80211/brcmfmac/common.c      |  18 +-
 .../broadcom/brcm80211/brcmfmac/core.c        |  10 +-
 .../broadcom/brcm80211/brcmfmac/core.h        |   2 +-
 .../broadcom/brcm80211/brcmfmac/cyw/core.c    |  28 ++--
 .../broadcom/brcm80211/brcmfmac/fweh.c        | 154 +++++++++++++-----
 .../broadcom/brcm80211/brcmfmac/fweh.h        |  60 +++++--
 .../broadcom/brcm80211/brcmfmac/fwvid.c       |  13 +-
 .../broadcom/brcm80211/brcmfmac/fwvid.h       |  35 ++--
 .../broadcom/brcm80211/brcmfmac/wcc/core.c    |  30 ++--
 10 files changed, 249 insertions(+), 129 deletions(-)


base-commit: 3aca362a4c1411ec11ff04f81b6cdf2359fee962
prerequisite-patch-id: 07d7f285f968a81572bc924e3530ebf95cb712d8
prerequisite-patch-id: 93c3909d52ce4af68f02283dee0d05566e2c4431
prerequisite-patch-id: 3e66331245f31c0ef6b29890be6c466ced5feaec
prerequisite-patch-id: eea6e0bc55f8908a9c17cfc6ca009b40122a4677
-- 
2.32.0


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  2024-01-06 10:38 [PATCH V2 0/3] wifi: brcmfmac: few fixes and per-vendor event handling Arend van Spriel
@ 2024-01-06 10:38 ` Arend van Spriel
  2024-01-07  8:52   ` Greg KH
  2024-01-19 17:30   ` Kalle Valo
  2024-01-06 10:38 ` [PATCH V2 2/3] wifi: brcmfmac: avoid invalid list operation when vendor attach fails Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 3/3] wifi: brcmfmac: allow per-vendor event handling Arend van Spriel
  2 siblings, 2 replies; 8+ messages in thread
From: Arend van Spriel @ 2024-01-06 10:38 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, Hector Martin, stable, Arend van Spriel

[-- Attachment #1: Type: text/plain, Size: 6385 bytes --]

From: Hector Martin <marcan@marcan.st>

People are getting spooked by brcmfmac errors on their boot console.
There's no reason for these messages to be errors.

Cc: stable@vger.kernel.org # 6.2.x
Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific firmware api")
Signed-off-by: Hector Martin <marcan@marcan.st>
[arend.vanspriel@broadcom.com: remove attach/detach vendor callbacks]
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
 .../broadcom/brcm80211/brcmfmac/bca/core.c    | 13 ----------
 .../broadcom/brcm80211/brcmfmac/cyw/core.c    | 13 ----------
 .../broadcom/brcm80211/brcmfmac/fwvid.c       |  7 +++--
 .../broadcom/brcm80211/brcmfmac/fwvid.h       | 26 ++-----------------
 .../broadcom/brcm80211/brcmfmac/wcc/core.c    | 15 +----------
 5 files changed, 6 insertions(+), 68 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
index a5d9ac5e6763..a963c242975a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
@@ -11,17 +11,6 @@
 
 #include "vops.h"
 
-static int brcmf_bca_attach(struct brcmf_pub *drvr)
-{
-	pr_err("%s: executing\n", __func__);
-	return 0;
-}
-
-static void brcmf_bca_detach(struct brcmf_pub *drvr)
-{
-	pr_err("%s: executing\n", __func__);
-}
-
 static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
 {
 	/* SAE support not confirmed so disabling for now */
@@ -29,7 +18,5 @@ static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
 }
 
 const struct brcmf_fwvid_ops brcmf_bca_ops = {
-	.attach = brcmf_bca_attach,
-	.detach = brcmf_bca_detach,
 	.feat_attach = brcmf_bca_feat_attach,
 };
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index 24670497f1a4..bec5748310b9 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -11,17 +11,6 @@
 
 #include "vops.h"
 
-static int brcmf_cyw_attach(struct brcmf_pub *drvr)
-{
-	pr_err("%s: executing\n", __func__);
-	return 0;
-}
-
-static void brcmf_cyw_detach(struct brcmf_pub *drvr)
-{
-	pr_err("%s: executing\n", __func__);
-}
-
 static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
 				 struct cfg80211_crypto_settings *crypto)
 {
@@ -49,7 +38,5 @@ static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
 }
 
 const struct brcmf_fwvid_ops brcmf_cyw_ops = {
-	.attach = brcmf_cyw_attach,
-	.detach = brcmf_cyw_detach,
 	.set_sae_password = brcmf_cyw_set_sae_pwd,
 };
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
index 86eafdb40541..f633e2bbd891 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
@@ -89,8 +89,7 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *vmod,
 	if (fwvid >= BRCMF_FWVENDOR_NUM)
 		return -ERANGE;
 
-	if (WARN_ON(!vmod) || WARN_ON(!vops) ||
-	    WARN_ON(!vops->attach) || WARN_ON(!vops->detach))
+	if (WARN_ON(!vmod) || WARN_ON(!vops))
 		return -EINVAL;
 
 	if (WARN_ON(fwvid_list[fwvid].vmod))
@@ -150,7 +149,7 @@ static inline int brcmf_fwvid_request_module(enum brcmf_fwvendor fwvid)
 }
 #endif
 
-int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
+int brcmf_fwvid_attach(struct brcmf_pub *drvr)
 {
 	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
 	int ret;
@@ -175,7 +174,7 @@ int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
 	return ret;
 }
 
-void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr)
+void brcmf_fwvid_detach(struct brcmf_pub *drvr)
 {
 	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
 
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
index d9fc76b46db9..dac22534d033 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
@@ -12,8 +12,6 @@ struct brcmf_pub;
 struct brcmf_if;
 
 struct brcmf_fwvid_ops {
-	int (*attach)(struct brcmf_pub *drvr);
-	void (*detach)(struct brcmf_pub *drvr);
 	void (*feat_attach)(struct brcmf_if *ifp);
 	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
 };
@@ -24,30 +22,10 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
 int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);
 
 /* core driver functions */
-int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr);
-void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr);
+int brcmf_fwvid_attach(struct brcmf_pub *drvr);
+void brcmf_fwvid_detach(struct brcmf_pub *drvr);
 const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
 
-static inline int brcmf_fwvid_attach(struct brcmf_pub *drvr)
-{
-	int ret;
-
-	ret = brcmf_fwvid_attach_ops(drvr);
-	if (ret)
-		return ret;
-
-	return drvr->vops->attach(drvr);
-}
-
-static inline void brcmf_fwvid_detach(struct brcmf_pub *drvr)
-{
-	if (!drvr->vops)
-		return;
-
-	drvr->vops->detach(drvr);
-	brcmf_fwvid_detach_ops(drvr);
-}
-
 static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
 {
 	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
index 2d8f80bd7382..fd593b93ad40 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
@@ -7,21 +7,10 @@
 #include <core.h>
 #include <bus.h>
 #include <fwvid.h>
-#include <fwil.h>
+#include <cfg80211.h>
 
 #include "vops.h"
 
-static int brcmf_wcc_attach(struct brcmf_pub *drvr)
-{
-	pr_debug("%s: executing\n", __func__);
-	return 0;
-}
-
-static void brcmf_wcc_detach(struct brcmf_pub *drvr)
-{
-	pr_debug("%s: executing\n", __func__);
-}
-
 static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
 				 struct cfg80211_crypto_settings *crypto)
 {
@@ -30,7 +19,5 @@ static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
 }
 
 const struct brcmf_fwvid_ops brcmf_wcc_ops = {
-	.attach = brcmf_wcc_attach,
-	.detach = brcmf_wcc_detach,
 	.set_sae_password = brcmf_wcc_set_sae_pwd,
 };
-- 
2.32.0


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH V2 2/3] wifi: brcmfmac: avoid invalid list operation when vendor attach fails
  2024-01-06 10:38 [PATCH V2 0/3] wifi: brcmfmac: few fixes and per-vendor event handling Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
@ 2024-01-06 10:38 ` Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 3/3] wifi: brcmfmac: allow per-vendor event handling Arend van Spriel
  2 siblings, 0 replies; 8+ messages in thread
From: Arend van Spriel @ 2024-01-06 10:38 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, Arend van Spriel, stable

[-- Attachment #1: Type: text/plain, Size: 1102 bytes --]

When the brcmf_fwvid_attach() fails the driver instance is not added
to the vendor list. Hence we should not try to delete it from that
list when the brcmf_fwvid_detach() function is called in cleanup path.

Cc: stable@vger.kernel.org # 6.2.x
Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific firmware api")
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
index f633e2bbd891..b427782554b5 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
@@ -186,9 +186,10 @@ void brcmf_fwvid_detach(struct brcmf_pub *drvr)
 
 	mutex_lock(&fwvid_list_lock);
 
-	drvr->vops = NULL;
-	list_del(&drvr->bus_if->list);
-
+	if (drvr->vops) {
+		drvr->vops = NULL;
+		list_del(&drvr->bus_if->list);
+	}
 	mutex_unlock(&fwvid_list_lock);
 }
 
-- 
2.32.0


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH V2 3/3] wifi: brcmfmac: allow per-vendor event handling
  2024-01-06 10:38 [PATCH V2 0/3] wifi: brcmfmac: few fixes and per-vendor event handling Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
  2024-01-06 10:38 ` [PATCH V2 2/3] wifi: brcmfmac: avoid invalid list operation when vendor attach fails Arend van Spriel
@ 2024-01-06 10:38 ` Arend van Spriel
  2 siblings, 0 replies; 8+ messages in thread
From: Arend van Spriel @ 2024-01-06 10:38 UTC (permalink / raw)
  To: Kalle Valo; +Cc: linux-wireless, Arend van Spriel

[-- Attachment #1: Type: text/plain, Size: 23059 bytes --]

The firmware interface also defines events generated by
firmware on the device. As the get/set primitives the
events are likely to diverge between the vendors so this
commit adds support for per-vendor handling. The number
of events may differ so we let the vendor-specific code
allocate the struct brcmf_fweh_info which contains array
of event handlers. The existing event enumeration will be
used by the higher layers and thus are common definitions.
The vendor-specific code can provide a mapping table for
converting the common definition to the vendor-specific
firmware event definition and vice-versa.

Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
changelog:
  V2: remove testing hack in debug.c
---
 .../broadcom/brcm80211/brcmfmac/bca/core.c    |  17 ++
 .../broadcom/brcm80211/brcmfmac/common.c      |  18 +-
 .../broadcom/brcm80211/brcmfmac/core.c        |  10 +-
 .../broadcom/brcm80211/brcmfmac/core.h        |   2 +-
 .../broadcom/brcm80211/brcmfmac/cyw/core.c    |  17 ++
 .../broadcom/brcm80211/brcmfmac/fweh.c        | 154 +++++++++++++-----
 .../broadcom/brcm80211/brcmfmac/fweh.h        |  60 +++++--
 .../broadcom/brcm80211/brcmfmac/fwvid.c       |   3 +-
 .../broadcom/brcm80211/brcmfmac/fwvid.h       |   9 +
 .../broadcom/brcm80211/brcmfmac/wcc/core.c    |  17 ++
 10 files changed, 244 insertions(+), 63 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
index a963c242975a..f471c962104a 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
@@ -11,12 +11,29 @@
 
 #include "vops.h"
 
+#define BRCMF_BCA_E_LAST		212
+
 static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
 {
 	/* SAE support not confirmed so disabling for now */
 	ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_SAE);
 }
 
+static int brcmf_bca_alloc_fweh_info(struct brcmf_pub *drvr)
+{
+	struct brcmf_fweh_info *fweh;
+
+	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_BCA_E_LAST),
+		       GFP_KERNEL);
+	if (!fweh)
+		return -ENOMEM;
+
+	fweh->num_event_codes = BRCMF_BCA_E_LAST;
+	drvr->fweh = fweh;
+	return 0;
+}
+
 const struct brcmf_fwvid_ops brcmf_bca_ops = {
 	.feat_attach = brcmf_bca_feat_attach,
+	.alloc_fweh_info = brcmf_bca_alloc_fweh_info,
 };
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index b6d458e022fa..b24faae35873 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -266,7 +266,7 @@ static int brcmf_c_process_cal_blob(struct brcmf_if *ifp)
 int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
 {
 	struct brcmf_pub *drvr = ifp->drvr;
-	s8 eventmask[BRCMF_EVENTING_MASK_LEN];
+	struct brcmf_fweh_info *fweh = drvr->fweh;
 	u8 buf[BRCMF_DCMD_SMLEN];
 	struct brcmf_bus *bus;
 	struct brcmf_rev_info_le revinfo;
@@ -413,15 +413,21 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
 	brcmf_c_set_joinpref_default(ifp);
 
 	/* Setup event_msgs, enable E_IF */
-	err = brcmf_fil_iovar_data_get(ifp, "event_msgs", eventmask,
-				       BRCMF_EVENTING_MASK_LEN);
+	err = brcmf_fil_iovar_data_get(ifp, "event_msgs", fweh->event_mask,
+				       fweh->event_mask_len);
 	if (err) {
 		bphy_err(drvr, "Get event_msgs error (%d)\n", err);
 		goto done;
 	}
-	setbit(eventmask, BRCMF_E_IF);
-	err = brcmf_fil_iovar_data_set(ifp, "event_msgs", eventmask,
-				       BRCMF_EVENTING_MASK_LEN);
+	/*
+	 * BRCMF_E_IF can safely be used to set the appropriate bit
+	 * in the event_mask as the firmware event code is guaranteed
+	 * to match the value of BRCMF_E_IF because it is old cruft
+	 * that all vendors have.
+	 */
+	setbit(fweh->event_mask, BRCMF_E_IF);
+	err = brcmf_fil_iovar_data_set(ifp, "event_msgs", fweh->event_mask,
+				       fweh->event_mask_len);
 	if (err) {
 		bphy_err(drvr, "Set event_msgs error (%d)\n", err);
 		goto done;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index a92f78026cfd..bf91b1e1368f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -1348,13 +1348,17 @@ int brcmf_attach(struct device *dev)
 		goto fail;
 	}
 
+	/* attach firmware event handler */
+	ret = brcmf_fweh_attach(drvr);
+	if (ret != 0) {
+		bphy_err(drvr, "brcmf_fweh_attach failed\n");
+		goto fail;
+	}
+
 	/* Attach to events important for core code */
 	brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
 			    brcmf_psm_watchdog_notify);
 
-	/* attach firmware event handler */
-	brcmf_fweh_attach(drvr);
-
 	ret = brcmf_bus_started(drvr, drvr->ops);
 	if (ret != 0) {
 		bphy_err(drvr, "dongle is not responding: err=%d\n", ret);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
index e4f911dd414b..ea76b8d33401 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
@@ -122,7 +122,7 @@ struct brcmf_pub {
 	struct mutex proto_block;
 	unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
 
-	struct brcmf_fweh_info fweh;
+	struct brcmf_fweh_info *fweh;
 
 	struct brcmf_ampdu_rx_reorder
 		*reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index bec5748310b9..9a4837881486 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -11,6 +11,8 @@
 
 #include "vops.h"
 
+#define BRCMF_CYW_E_LAST		197
+
 static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
 				 struct cfg80211_crypto_settings *crypto)
 {
@@ -37,6 +39,21 @@ static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
 	return err;
 }
 
+static int brcmf_cyw_alloc_fweh_info(struct brcmf_pub *drvr)
+{
+	struct brcmf_fweh_info *fweh;
+
+	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_CYW_E_LAST),
+		       GFP_KERNEL);
+	if (!fweh)
+		return -ENOMEM;
+
+	fweh->num_event_codes = BRCMF_CYW_E_LAST;
+	drvr->fweh = fweh;
+	return 0;
+}
+
 const struct brcmf_fwvid_ops brcmf_cyw_ops = {
 	.set_sae_password = brcmf_cyw_set_sae_pwd,
+	.alloc_fweh_info = brcmf_cyw_alloc_fweh_info,
 };
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
index 68960ae98987..0774f6c59226 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
@@ -14,7 +14,8 @@
 #include "fweh.h"
 #include "fwil.h"
 #include "proto.h"
-
+#include "bus.h"
+#include "fwvid.h"
 /**
  * struct brcmf_fweh_queue_item - event item on event queue.
  *
@@ -28,7 +29,7 @@
  */
 struct brcmf_fweh_queue_item {
 	struct list_head q;
-	enum brcmf_fweh_event_code code;
+	u32 code;
 	u8 ifidx;
 	u8 ifaddr[ETH_ALEN];
 	struct brcmf_event_msg_be emsg;
@@ -94,7 +95,7 @@ static void brcmf_fweh_queue_event(struct brcmf_fweh_info *fweh,
 
 static int brcmf_fweh_call_event_handler(struct brcmf_pub *drvr,
 					 struct brcmf_if *ifp,
-					 enum brcmf_fweh_event_code code,
+					 u32 fwcode,
 					 struct brcmf_event_msg *emsg,
 					 void *data)
 {
@@ -102,13 +103,13 @@ static int brcmf_fweh_call_event_handler(struct brcmf_pub *drvr,
 	int err = -EINVAL;
 
 	if (ifp) {
-		fweh = &ifp->drvr->fweh;
+		fweh = ifp->drvr->fweh;
 
 		/* handle the event if valid interface and handler */
-		if (fweh->evt_handler[code])
-			err = fweh->evt_handler[code](ifp, emsg, data);
+		if (fweh->evt_handler[fwcode])
+			err = fweh->evt_handler[fwcode](ifp, emsg, data);
 		else
-			bphy_err(drvr, "unhandled event %d ignored\n", code);
+			bphy_err(drvr, "unhandled fwevt %d ignored\n", fwcode);
 	} else {
 		bphy_err(drvr, "no interface object\n");
 	}
@@ -142,7 +143,7 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
 	is_p2pdev = ((ifevent->flags & BRCMF_E_IF_FLAG_NOIF) &&
 		     (ifevent->role == BRCMF_E_IF_ROLE_P2P_CLIENT ||
 		      ((ifevent->role == BRCMF_E_IF_ROLE_STA) &&
-		       (drvr->fweh.p2pdev_setup_ongoing))));
+		       (drvr->fweh->p2pdev_setup_ongoing))));
 	if (!is_p2pdev && (ifevent->flags & BRCMF_E_IF_FLAG_NOIF)) {
 		brcmf_dbg(EVENT, "event can be ignored\n");
 		return;
@@ -163,7 +164,7 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
 			return;
 		if (!is_p2pdev)
 			brcmf_proto_add_if(drvr, ifp);
-		if (!drvr->fweh.evt_handler[BRCMF_E_IF])
+		if (!drvr->fweh->evt_handler[BRCMF_E_IF])
 			if (brcmf_net_attach(ifp, false) < 0)
 				return;
 	}
@@ -183,6 +184,45 @@ static void brcmf_fweh_handle_if_event(struct brcmf_pub *drvr,
 	}
 }
 
+static void brcmf_fweh_map_event_code(struct brcmf_fweh_info *fweh,
+				      enum brcmf_fweh_event_code code,
+				      u32 *fw_code)
+{
+	int i;
+
+	if (WARN_ON(!fw_code))
+		return;
+
+	*fw_code = code;
+	if (fweh->event_map) {
+		for (i = 0; i < fweh->event_map->n_items; i++) {
+			if (fweh->event_map->items[i].code == code) {
+				*fw_code = fweh->event_map->items[i].fwevt_code;
+				break;
+			}
+		}
+	}
+}
+
+static void brcmf_fweh_map_fwevt_code(struct brcmf_fweh_info *fweh, u32 fw_code,
+				      enum brcmf_fweh_event_code *code)
+{
+	int i;
+
+	if (WARN_ON(!code))
+		return;
+
+	*code = fw_code;
+	if (fweh->event_map) {
+		for (i = 0; i < fweh->event_map->n_items; i++) {
+			if (fweh->event_map->items[i].fwevt_code == fw_code) {
+				*code = fweh->event_map->items[i].code;
+				break;
+			}
+		}
+	}
+}
+
 /**
  * brcmf_fweh_dequeue_event() - get event from the queue.
  *
@@ -221,15 +261,19 @@ static void brcmf_fweh_event_worker(struct work_struct *work)
 	struct brcmf_event_msg emsg;
 
 	fweh = container_of(work, struct brcmf_fweh_info, event_work);
-	drvr = container_of(fweh, struct brcmf_pub, fweh);
+	drvr = fweh->drvr;
 
 	while ((event = brcmf_fweh_dequeue_event(fweh))) {
-		brcmf_dbg(EVENT, "event %s (%u) ifidx %u bsscfg %u addr %pM\n",
-			  brcmf_fweh_event_name(event->code), event->code,
+		enum brcmf_fweh_event_code code;
+
+		brcmf_fweh_map_fwevt_code(fweh, event->code, &code);
+		brcmf_dbg(EVENT, "event %s (%u:%u) ifidx %u bsscfg %u addr %pM\n",
+			  brcmf_fweh_event_name(code), code, event->code,
 			  event->emsg.ifidx, event->emsg.bsscfgidx,
 			  event->emsg.addr);
 		if (event->emsg.bsscfgidx >= BRCMF_MAX_IFS) {
-			bphy_err(drvr, "invalid bsscfg index: %u\n", event->emsg.bsscfgidx);
+			bphy_err(drvr, "invalid bsscfg index: %u\n",
+				 event->emsg.bsscfgidx);
 			goto event_free;
 		}
 
@@ -237,7 +281,7 @@ static void brcmf_fweh_event_worker(struct work_struct *work)
 		emsg_be = &event->emsg;
 		emsg.version = be16_to_cpu(emsg_be->version);
 		emsg.flags = be16_to_cpu(emsg_be->flags);
-		emsg.event_code = event->code;
+		emsg.event_code = code;
 		emsg.status = be32_to_cpu(emsg_be->status);
 		emsg.reason = be32_to_cpu(emsg_be->reason);
 		emsg.auth_type = be32_to_cpu(emsg_be->auth_type);
@@ -283,7 +327,7 @@ static void brcmf_fweh_event_worker(struct work_struct *work)
  */
 void brcmf_fweh_p2pdev_setup(struct brcmf_if *ifp, bool ongoing)
 {
-	ifp->drvr->fweh.p2pdev_setup_ongoing = ongoing;
+	ifp->drvr->fweh->p2pdev_setup_ongoing = ongoing;
 }
 
 /**
@@ -291,12 +335,27 @@ void brcmf_fweh_p2pdev_setup(struct brcmf_if *ifp, bool ongoing)
  *
  * @drvr: driver information object.
  */
-void brcmf_fweh_attach(struct brcmf_pub *drvr)
+int brcmf_fweh_attach(struct brcmf_pub *drvr)
 {
-	struct brcmf_fweh_info *fweh = &drvr->fweh;
+	struct brcmf_fweh_info *fweh;
+	int err;
+
+	err = brcmf_fwvid_alloc_fweh_info(drvr);
+	if (err < 0)
+		return err;
+
+	fweh = drvr->fweh;
+	fweh->drvr = drvr;
+
+	fweh->event_mask_len = DIV_ROUND_UP(fweh->num_event_codes, 8);
+	fweh->event_mask = kzalloc(fweh->event_mask_len, GFP_KERNEL);
+	if (!fweh->event_mask)
+		return -ENOMEM;
+
 	INIT_WORK(&fweh->event_work, brcmf_fweh_event_worker);
 	spin_lock_init(&fweh->evt_q_lock);
 	INIT_LIST_HEAD(&fweh->event_q);
+	return 0;
 }
 
 /**
@@ -306,14 +365,19 @@ void brcmf_fweh_attach(struct brcmf_pub *drvr)
  */
 void brcmf_fweh_detach(struct brcmf_pub *drvr)
 {
-	struct brcmf_fweh_info *fweh = &drvr->fweh;
+	struct brcmf_fweh_info *fweh = drvr->fweh;
+
+	if (!fweh)
+		return;
 
 	/* cancel the worker if initialized */
 	if (fweh->event_work.func) {
 		cancel_work_sync(&fweh->event_work);
 		WARN_ON(!list_empty(&fweh->event_q));
-		memset(fweh->evt_handler, 0, sizeof(fweh->evt_handler));
 	}
+	drvr->fweh = NULL;
+	kfree(fweh->event_mask);
+	kfree(fweh);
 }
 
 /**
@@ -326,11 +390,17 @@ void brcmf_fweh_detach(struct brcmf_pub *drvr)
 int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
 			brcmf_fweh_handler_t handler)
 {
-	if (drvr->fweh.evt_handler[code]) {
+	struct brcmf_fweh_info *fweh = drvr->fweh;
+	u32 evt_handler_idx;
+
+	brcmf_fweh_map_event_code(fweh, code, &evt_handler_idx);
+
+	if (fweh->evt_handler[evt_handler_idx]) {
 		bphy_err(drvr, "event code %d already registered\n", code);
 		return -ENOSPC;
 	}
-	drvr->fweh.evt_handler[code] = handler;
+
+	fweh->evt_handler[evt_handler_idx] = handler;
 	brcmf_dbg(TRACE, "event handler registered for %s\n",
 		  brcmf_fweh_event_name(code));
 	return 0;
@@ -345,9 +415,12 @@ int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
 void brcmf_fweh_unregister(struct brcmf_pub *drvr,
 			   enum brcmf_fweh_event_code code)
 {
+	u32 evt_handler_idx;
+
 	brcmf_dbg(TRACE, "event handler cleared for %s\n",
 		  brcmf_fweh_event_name(code));
-	drvr->fweh.evt_handler[code] = NULL;
+	brcmf_fweh_map_event_code(drvr->fweh, code, &evt_handler_idx);
+	drvr->fweh->evt_handler[evt_handler_idx] = NULL;
 }
 
 /**
@@ -357,27 +430,28 @@ void brcmf_fweh_unregister(struct brcmf_pub *drvr,
  */
 int brcmf_fweh_activate_events(struct brcmf_if *ifp)
 {
-	struct brcmf_pub *drvr = ifp->drvr;
+	struct brcmf_fweh_info *fweh = ifp->drvr->fweh;
+	enum brcmf_fweh_event_code code;
 	int i, err;
-	s8 eventmask[BRCMF_EVENTING_MASK_LEN];
 
-	memset(eventmask, 0, sizeof(eventmask));
-	for (i = 0; i < BRCMF_E_LAST; i++) {
-		if (ifp->drvr->fweh.evt_handler[i]) {
+	memset(fweh->event_mask, 0, fweh->event_mask_len);
+	for (i = 0; i < fweh->num_event_codes; i++) {
+		if (fweh->evt_handler[i]) {
+			brcmf_fweh_map_fwevt_code(fweh, i, &code);
 			brcmf_dbg(EVENT, "enable event %s\n",
-				  brcmf_fweh_event_name(i));
-			setbit(eventmask, i);
+				  brcmf_fweh_event_name(code));
+			setbit(fweh->event_mask, i);
 		}
 	}
 
 	/* want to handle IF event as well */
 	brcmf_dbg(EVENT, "enable event IF\n");
-	setbit(eventmask, BRCMF_E_IF);
+	setbit(fweh->event_mask, BRCMF_E_IF);
 
-	err = brcmf_fil_iovar_data_set(ifp, "event_msgs",
-				       eventmask, BRCMF_EVENTING_MASK_LEN);
+	err = brcmf_fil_iovar_data_set(ifp, "event_msgs", fweh->event_mask,
+				       fweh->event_mask_len);
 	if (err)
-		bphy_err(drvr, "Set event_msgs error (%d)\n", err);
+		bphy_err(fweh->drvr, "Set event_msgs error (%d)\n", err);
 
 	return err;
 }
@@ -397,21 +471,21 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
 			      struct brcmf_event *event_packet,
 			      u32 packet_len, gfp_t gfp)
 {
-	enum brcmf_fweh_event_code code;
-	struct brcmf_fweh_info *fweh = &drvr->fweh;
+	u32 fwevt_idx;
+	struct brcmf_fweh_info *fweh = drvr->fweh;
 	struct brcmf_fweh_queue_item *event;
 	void *data;
 	u32 datalen;
 
 	/* get event info */
-	code = get_unaligned_be32(&event_packet->msg.event_type);
+	fwevt_idx = get_unaligned_be32(&event_packet->msg.event_type);
 	datalen = get_unaligned_be32(&event_packet->msg.datalen);
 	data = &event_packet[1];
 
-	if (code >= BRCMF_E_LAST)
+	if (fwevt_idx >= fweh->num_event_codes)
 		return;
 
-	if (code != BRCMF_E_IF && !fweh->evt_handler[code])
+	if (fwevt_idx != BRCMF_E_IF && !fweh->evt_handler[fwevt_idx])
 		return;
 
 	if (datalen > BRCMF_DCMD_MAXLEN ||
@@ -422,13 +496,13 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
 	if (!event)
 		return;
 
-	event->datalen = datalen;
-	event->code = code;
+	event->code = fwevt_idx;
 	event->ifidx = event_packet->msg.ifidx;
 
 	/* use memcpy to get aligned event message */
 	memcpy(&event->emsg, &event_packet->msg, sizeof(event->emsg));
 	memcpy(event->data, data, datalen);
+	event->datalen = datalen;
 	memcpy(event->ifaddr, event_packet->eth.h_dest, ETH_ALEN);
 
 	brcmf_fweh_queue_event(fweh, event);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
index 48414e8b9389..9ca1b2aadcb5 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.h
@@ -17,6 +17,10 @@ struct brcmf_pub;
 struct brcmf_if;
 struct brcmf_cfg80211_info;
 
+#define BRCMF_ABSTRACT_EVENT_BIT	BIT(31)
+#define BRCMF_ABSTRACT_ENUM_DEF(_id, _val) \
+	BRCMF_ENUM_DEF(_id, (BRCMF_ABSTRACT_EVENT_BIT | (_val)))
+
 /* list of firmware events */
 #define BRCMF_FWEH_EVENT_ENUM_DEFLIST \
 	BRCMF_ENUM_DEF(SET_SSID, 0) \
@@ -98,16 +102,9 @@ struct brcmf_cfg80211_info;
 /* firmware event codes sent by the dongle */
 enum brcmf_fweh_event_code {
 	BRCMF_FWEH_EVENT_ENUM_DEFLIST
-	/* this determines event mask length which must match
-	 * minimum length check in device firmware so it is
-	 * hard-coded here.
-	 */
-	BRCMF_E_LAST = 139
 };
 #undef BRCMF_ENUM_DEF
 
-#define BRCMF_EVENTING_MASK_LEN		DIV_ROUND_UP(BRCMF_E_LAST, 8)
-
 /* flags field values in struct brcmf_event_msg */
 #define BRCMF_EVENT_MSG_LINK		0x01
 #define BRCMF_EVENT_MSG_FLUSHTXQ	0x02
@@ -287,6 +284,33 @@ typedef int (*brcmf_fweh_handler_t)(struct brcmf_if *ifp,
 				    const struct brcmf_event_msg *evtmsg,
 				    void *data);
 
+/**
+ * struct brcmf_fweh_event_map_item - fweh event and firmware event pair.
+ *
+ * @code: fweh event code as used by higher layers.
+ * @fwevt_code: firmware event code as used by firmware.
+ *
+ * This mapping is needed when a functionally identical event has a
+ * different numerical definition between vendors. When such mapping
+ * is needed the higher layer event code should not collide with the
+ * firmware event.
+ */
+struct brcmf_fweh_event_map_item {
+	enum brcmf_fweh_event_code code;
+	u32 fwevt_code;
+};
+
+/**
+ * struct brcmf_fweh_event_map - mapping between firmware event and fweh event.
+ *
+ * @n_items: number of mapping items.
+ * @items: array of fweh event and firmware event pairs.
+ */
+struct brcmf_fweh_event_map {
+	u32 n_items;
+	const struct brcmf_fweh_event_map_item items[] __counted_by(n_items);
+};
+
 /**
  * struct brcmf_fweh_info - firmware event handling information.
  *
@@ -294,21 +318,33 @@ typedef int (*brcmf_fweh_handler_t)(struct brcmf_if *ifp,
  * @event_work: event worker.
  * @evt_q_lock: lock for event queue protection.
  * @event_q: event queue.
- * @evt_handler: registered event handlers.
+ * @event_mask_len: length of @event_mask used to enable firmware events.
+ * @event_mask: byte array used in 'event_msgs' iovar command.
+ * @event_map: mapping between fweh event and firmware event which
+ *	may be provided by vendor-specific module for events that need
+ *	mapping.
+ * @num_event_codes: number of firmware events supported by firmware which
+ *	does a minimum length check for the @event_mask. This value is to
+ *	be provided by vendor-specific module determining @event_mask_len
+ *	and consequently the allocation size for @event_mask.
+ * @evt_handler: event handler registry indexed by firmware event code.
  */
 struct brcmf_fweh_info {
+	struct brcmf_pub *drvr;
 	bool p2pdev_setup_ongoing;
 	struct work_struct event_work;
 	spinlock_t evt_q_lock;
 	struct list_head event_q;
-	int (*evt_handler[BRCMF_E_LAST])(struct brcmf_if *ifp,
-					 const struct brcmf_event_msg *evtmsg,
-					 void *data);
+	uint event_mask_len;
+	u8 *event_mask;
+	struct brcmf_fweh_event_map *event_map;
+	uint num_event_codes;
+	brcmf_fweh_handler_t evt_handler[] __counted_by(num_event_codes);
 };
 
 const char *brcmf_fweh_event_name(enum brcmf_fweh_event_code code);
 
-void brcmf_fweh_attach(struct brcmf_pub *drvr);
+int brcmf_fweh_attach(struct brcmf_pub *drvr);
 void brcmf_fweh_detach(struct brcmf_pub *drvr);
 int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
 			int (*handler)(struct brcmf_if *ifp,
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
index b427782554b5..41eafcda77f7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
@@ -89,7 +89,8 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *vmod,
 	if (fwvid >= BRCMF_FWVENDOR_NUM)
 		return -ERANGE;
 
-	if (WARN_ON(!vmod) || WARN_ON(!vops))
+	if (WARN_ON(!vmod) || WARN_ON(!vops) ||
+	    WARN_ON(!vops->alloc_fweh_info))
 		return -EINVAL;
 
 	if (WARN_ON(fwvid_list[fwvid].vmod))
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
index dac22534d033..e6ac9fc341bc 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
@@ -14,6 +14,7 @@ struct brcmf_if;
 struct brcmf_fwvid_ops {
 	void (*feat_attach)(struct brcmf_if *ifp);
 	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
+	int (*alloc_fweh_info)(struct brcmf_pub *drvr);
 };
 
 /* exported functions */
@@ -47,4 +48,12 @@ static inline int brcmf_fwvid_set_sae_password(struct brcmf_if *ifp,
 	return vops->set_sae_password(ifp, crypto);
 }
 
+static inline int brcmf_fwvid_alloc_fweh_info(struct brcmf_pub *drvr)
+{
+	if (!drvr->vops)
+		return -EIO;
+
+	return drvr->vops->alloc_fweh_info(drvr);
+}
+
 #endif /* FWVID_H_ */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
index fd593b93ad40..05d7c2a4fba5 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
@@ -11,6 +11,8 @@
 
 #include "vops.h"
 
+#define BRCMF_WCC_E_LAST		213
+
 static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
 				 struct cfg80211_crypto_settings *crypto)
 {
@@ -18,6 +20,21 @@ static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
 			      BRCMF_WSEC_PASSPHRASE);
 }
 
+static int brcmf_wcc_alloc_fweh_info(struct brcmf_pub *drvr)
+{
+	struct brcmf_fweh_info *fweh;
+
+	fweh = kzalloc(struct_size(fweh, evt_handler, BRCMF_WCC_E_LAST),
+		       GFP_KERNEL);
+	if (!fweh)
+		return -ENOMEM;
+
+	fweh->num_event_codes = BRCMF_WCC_E_LAST;
+	drvr->fweh = fweh;
+	return 0;
+}
+
 const struct brcmf_fwvid_ops brcmf_wcc_ops = {
 	.set_sae_password = brcmf_wcc_set_sae_pwd,
+	.alloc_fweh_info = brcmf_wcc_alloc_fweh_info,
 };
-- 
2.32.0


[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
@ 2024-01-07  8:52   ` Greg KH
  2024-01-07  8:52     ` Greg KH
  2024-01-19 17:30   ` Kalle Valo
  1 sibling, 1 reply; 8+ messages in thread
From: Greg KH @ 2024-01-07  8:52 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: Kalle Valo, linux-wireless, Hector Martin, stable

On Sat, Jan 06, 2024 at 11:38:33AM +0100, Arend van Spriel wrote:
> From: Hector Martin <marcan@marcan.st>
> 
> People are getting spooked by brcmfmac errors on their boot console.
> There's no reason for these messages to be errors.
> 
> Cc: stable@vger.kernel.org # 6.2.x
> Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific firmware api")
> Signed-off-by: Hector Martin <marcan@marcan.st>
> [arend.vanspriel@broadcom.com: remove attach/detach vendor callbacks]
> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> ---
>  .../broadcom/brcm80211/brcmfmac/bca/core.c    | 13 ----------
>  .../broadcom/brcm80211/brcmfmac/cyw/core.c    | 13 ----------
>  .../broadcom/brcm80211/brcmfmac/fwvid.c       |  7 +++--
>  .../broadcom/brcm80211/brcmfmac/fwvid.h       | 26 ++-----------------
>  .../broadcom/brcm80211/brcmfmac/wcc/core.c    | 15 +----------
>  5 files changed, 6 insertions(+), 68 deletions(-)
> 
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> index a5d9ac5e6763..a963c242975a 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> @@ -11,17 +11,6 @@
>  
>  #include "vops.h"
>  
> -static int brcmf_bca_attach(struct brcmf_pub *drvr)
> -{
> -	pr_err("%s: executing\n", __func__);
> -	return 0;
> -}
> -
> -static void brcmf_bca_detach(struct brcmf_pub *drvr)
> -{
> -	pr_err("%s: executing\n", __func__);
> -}
> -
>  static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
>  {
>  	/* SAE support not confirmed so disabling for now */
> @@ -29,7 +18,5 @@ static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
>  }
>  
>  const struct brcmf_fwvid_ops brcmf_bca_ops = {
> -	.attach = brcmf_bca_attach,
> -	.detach = brcmf_bca_detach,
>  	.feat_attach = brcmf_bca_feat_attach,
>  };
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> index 24670497f1a4..bec5748310b9 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> @@ -11,17 +11,6 @@
>  
>  #include "vops.h"
>  
> -static int brcmf_cyw_attach(struct brcmf_pub *drvr)
> -{
> -	pr_err("%s: executing\n", __func__);
> -	return 0;
> -}
> -
> -static void brcmf_cyw_detach(struct brcmf_pub *drvr)
> -{
> -	pr_err("%s: executing\n", __func__);
> -}
> -
>  static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
>  				 struct cfg80211_crypto_settings *crypto)
>  {
> @@ -49,7 +38,5 @@ static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
>  }
>  
>  const struct brcmf_fwvid_ops brcmf_cyw_ops = {
> -	.attach = brcmf_cyw_attach,
> -	.detach = brcmf_cyw_detach,
>  	.set_sae_password = brcmf_cyw_set_sae_pwd,
>  };
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> index 86eafdb40541..f633e2bbd891 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> @@ -89,8 +89,7 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *vmod,
>  	if (fwvid >= BRCMF_FWVENDOR_NUM)
>  		return -ERANGE;
>  
> -	if (WARN_ON(!vmod) || WARN_ON(!vops) ||
> -	    WARN_ON(!vops->attach) || WARN_ON(!vops->detach))
> +	if (WARN_ON(!vmod) || WARN_ON(!vops))
>  		return -EINVAL;
>  
>  	if (WARN_ON(fwvid_list[fwvid].vmod))
> @@ -150,7 +149,7 @@ static inline int brcmf_fwvid_request_module(enum brcmf_fwvendor fwvid)
>  }
>  #endif
>  
> -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
> +int brcmf_fwvid_attach(struct brcmf_pub *drvr)
>  {
>  	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
>  	int ret;
> @@ -175,7 +174,7 @@ int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
>  	return ret;
>  }
>  
> -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr)
> +void brcmf_fwvid_detach(struct brcmf_pub *drvr)
>  {
>  	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
>  
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> index d9fc76b46db9..dac22534d033 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> @@ -12,8 +12,6 @@ struct brcmf_pub;
>  struct brcmf_if;
>  
>  struct brcmf_fwvid_ops {
> -	int (*attach)(struct brcmf_pub *drvr);
> -	void (*detach)(struct brcmf_pub *drvr);
>  	void (*feat_attach)(struct brcmf_if *ifp);
>  	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
>  };
> @@ -24,30 +22,10 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
>  int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);
>  
>  /* core driver functions */
> -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr);
> -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr);
> +int brcmf_fwvid_attach(struct brcmf_pub *drvr);
> +void brcmf_fwvid_detach(struct brcmf_pub *drvr);
>  const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
>  
> -static inline int brcmf_fwvid_attach(struct brcmf_pub *drvr)
> -{
> -	int ret;
> -
> -	ret = brcmf_fwvid_attach_ops(drvr);
> -	if (ret)
> -		return ret;
> -
> -	return drvr->vops->attach(drvr);
> -}
> -
> -static inline void brcmf_fwvid_detach(struct brcmf_pub *drvr)
> -{
> -	if (!drvr->vops)
> -		return;
> -
> -	drvr->vops->detach(drvr);
> -	brcmf_fwvid_detach_ops(drvr);
> -}
> -
>  static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
>  {
>  	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> index 2d8f80bd7382..fd593b93ad40 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> @@ -7,21 +7,10 @@
>  #include <core.h>
>  #include <bus.h>
>  #include <fwvid.h>
> -#include <fwil.h>
> +#include <cfg80211.h>
>  
>  #include "vops.h"
>  
> -static int brcmf_wcc_attach(struct brcmf_pub *drvr)
> -{
> -	pr_debug("%s: executing\n", __func__);
> -	return 0;
> -}
> -
> -static void brcmf_wcc_detach(struct brcmf_pub *drvr)
> -{
> -	pr_debug("%s: executing\n", __func__);
> -}
> -
>  static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
>  				 struct cfg80211_crypto_settings *crypto)
>  {
> @@ -30,7 +19,5 @@ static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
>  }
>  
>  const struct brcmf_fwvid_ops brcmf_wcc_ops = {
> -	.attach = brcmf_wcc_attach,
> -	.detach = brcmf_wcc_detach,
>  	.set_sae_password = brcmf_wcc_set_sae_pwd,
>  };
> -- 
> 2.32.0
> 


<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

</formletter>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  2024-01-07  8:52   ` Greg KH
@ 2024-01-07  8:52     ` Greg KH
  2024-01-07  9:11       ` Arend Van Spriel
  0 siblings, 1 reply; 8+ messages in thread
From: Greg KH @ 2024-01-07  8:52 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: Kalle Valo, linux-wireless, Hector Martin, stable

On Sun, Jan 07, 2024 at 09:52:01AM +0100, Greg KH wrote:
> On Sat, Jan 06, 2024 at 11:38:33AM +0100, Arend van Spriel wrote:
> > From: Hector Martin <marcan@marcan.st>
> > 
> > People are getting spooked by brcmfmac errors on their boot console.
> > There's no reason for these messages to be errors.
> > 
> > Cc: stable@vger.kernel.org # 6.2.x
> > Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific firmware api")
> > Signed-off-by: Hector Martin <marcan@marcan.st>
> > [arend.vanspriel@broadcom.com: remove attach/detach vendor callbacks]
> > Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> > ---
> >  .../broadcom/brcm80211/brcmfmac/bca/core.c    | 13 ----------
> >  .../broadcom/brcm80211/brcmfmac/cyw/core.c    | 13 ----------
> >  .../broadcom/brcm80211/brcmfmac/fwvid.c       |  7 +++--
> >  .../broadcom/brcm80211/brcmfmac/fwvid.h       | 26 ++-----------------
> >  .../broadcom/brcm80211/brcmfmac/wcc/core.c    | 15 +----------
> >  5 files changed, 6 insertions(+), 68 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> > index a5d9ac5e6763..a963c242975a 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
> > @@ -11,17 +11,6 @@
> >  
> >  #include "vops.h"
> >  
> > -static int brcmf_bca_attach(struct brcmf_pub *drvr)
> > -{
> > -	pr_err("%s: executing\n", __func__);
> > -	return 0;
> > -}
> > -
> > -static void brcmf_bca_detach(struct brcmf_pub *drvr)
> > -{
> > -	pr_err("%s: executing\n", __func__);
> > -}
> > -
> >  static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
> >  {
> >  	/* SAE support not confirmed so disabling for now */
> > @@ -29,7 +18,5 @@ static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
> >  }
> >  
> >  const struct brcmf_fwvid_ops brcmf_bca_ops = {
> > -	.attach = brcmf_bca_attach,
> > -	.detach = brcmf_bca_detach,
> >  	.feat_attach = brcmf_bca_feat_attach,
> >  };
> > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> > index 24670497f1a4..bec5748310b9 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
> > @@ -11,17 +11,6 @@
> >  
> >  #include "vops.h"
> >  
> > -static int brcmf_cyw_attach(struct brcmf_pub *drvr)
> > -{
> > -	pr_err("%s: executing\n", __func__);
> > -	return 0;
> > -}
> > -
> > -static void brcmf_cyw_detach(struct brcmf_pub *drvr)
> > -{
> > -	pr_err("%s: executing\n", __func__);
> > -}
> > -
> >  static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
> >  				 struct cfg80211_crypto_settings *crypto)
> >  {
> > @@ -49,7 +38,5 @@ static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
> >  }
> >  
> >  const struct brcmf_fwvid_ops brcmf_cyw_ops = {
> > -	.attach = brcmf_cyw_attach,
> > -	.detach = brcmf_cyw_detach,
> >  	.set_sae_password = brcmf_cyw_set_sae_pwd,
> >  };
> > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> > index 86eafdb40541..f633e2bbd891 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
> > @@ -89,8 +89,7 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *vmod,
> >  	if (fwvid >= BRCMF_FWVENDOR_NUM)
> >  		return -ERANGE;
> >  
> > -	if (WARN_ON(!vmod) || WARN_ON(!vops) ||
> > -	    WARN_ON(!vops->attach) || WARN_ON(!vops->detach))
> > +	if (WARN_ON(!vmod) || WARN_ON(!vops))
> >  		return -EINVAL;
> >  
> >  	if (WARN_ON(fwvid_list[fwvid].vmod))
> > @@ -150,7 +149,7 @@ static inline int brcmf_fwvid_request_module(enum brcmf_fwvendor fwvid)
> >  }
> >  #endif
> >  
> > -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
> > +int brcmf_fwvid_attach(struct brcmf_pub *drvr)
> >  {
> >  	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
> >  	int ret;
> > @@ -175,7 +174,7 @@ int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
> >  	return ret;
> >  }
> >  
> > -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr)
> > +void brcmf_fwvid_detach(struct brcmf_pub *drvr)
> >  {
> >  	enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
> >  
> > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> > index d9fc76b46db9..dac22534d033 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
> > @@ -12,8 +12,6 @@ struct brcmf_pub;
> >  struct brcmf_if;
> >  
> >  struct brcmf_fwvid_ops {
> > -	int (*attach)(struct brcmf_pub *drvr);
> > -	void (*detach)(struct brcmf_pub *drvr);
> >  	void (*feat_attach)(struct brcmf_if *ifp);
> >  	int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
> >  };
> > @@ -24,30 +22,10 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor fwvid, struct module *mod,
> >  int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module *mod);
> >  
> >  /* core driver functions */
> > -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr);
> > -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr);
> > +int brcmf_fwvid_attach(struct brcmf_pub *drvr);
> > +void brcmf_fwvid_detach(struct brcmf_pub *drvr);
> >  const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
> >  
> > -static inline int brcmf_fwvid_attach(struct brcmf_pub *drvr)
> > -{
> > -	int ret;
> > -
> > -	ret = brcmf_fwvid_attach_ops(drvr);
> > -	if (ret)
> > -		return ret;
> > -
> > -	return drvr->vops->attach(drvr);
> > -}
> > -
> > -static inline void brcmf_fwvid_detach(struct brcmf_pub *drvr)
> > -{
> > -	if (!drvr->vops)
> > -		return;
> > -
> > -	drvr->vops->detach(drvr);
> > -	brcmf_fwvid_detach_ops(drvr);
> > -}
> > -
> >  static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
> >  {
> >  	const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
> > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> > index 2d8f80bd7382..fd593b93ad40 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
> > @@ -7,21 +7,10 @@
> >  #include <core.h>
> >  #include <bus.h>
> >  #include <fwvid.h>
> > -#include <fwil.h>
> > +#include <cfg80211.h>
> >  
> >  #include "vops.h"
> >  
> > -static int brcmf_wcc_attach(struct brcmf_pub *drvr)
> > -{
> > -	pr_debug("%s: executing\n", __func__);
> > -	return 0;
> > -}
> > -
> > -static void brcmf_wcc_detach(struct brcmf_pub *drvr)
> > -{
> > -	pr_debug("%s: executing\n", __func__);
> > -}
> > -
> >  static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
> >  				 struct cfg80211_crypto_settings *crypto)
> >  {
> > @@ -30,7 +19,5 @@ static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
> >  }
> >  
> >  const struct brcmf_fwvid_ops brcmf_wcc_ops = {
> > -	.attach = brcmf_wcc_attach,
> > -	.detach = brcmf_wcc_detach,
> >  	.set_sae_password = brcmf_wcc_set_sae_pwd,
> >  };
> > -- 
> > 2.32.0
> > 
> 
> 
> <formletter>
> 
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree.  Please read:
>     https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
> 
> </formletter>

Sorry, bot is wrong here, this is fine.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  2024-01-07  8:52     ` Greg KH
@ 2024-01-07  9:11       ` Arend Van Spriel
  0 siblings, 0 replies; 8+ messages in thread
From: Arend Van Spriel @ 2024-01-07  9:11 UTC (permalink / raw)
  To: Greg KH; +Cc: Kalle Valo, linux-wireless, Hector Martin, stable

[-- Attachment #1: Type: text/plain, Size: 7753 bytes --]

On January 7, 2024 9:52:33 AM Greg KH <gregkh@linuxfoundation.org> wrote:

> On Sun, Jan 07, 2024 at 09:52:01AM +0100, Greg KH wrote:
>> On Sat, Jan 06, 2024 at 11:38:33AM +0100, Arend van Spriel wrote:
>>> From: Hector Martin <marcan@marcan.st>
>>>
>>> People are getting spooked by brcmfmac errors on their boot console.
>>> There's no reason for these messages to be errors.
>>>
>>> Cc: stable@vger.kernel.org # 6.2.x

Hi Greg

So I assume the bot stumbled over the appended comment here. Is it still 
helpful or is it redundant with the Fixes: tag in place.

Regards,
Arend

>>> Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific 
>>> firmware api")
>>> Signed-off-by: Hector Martin <marcan@marcan.st>
>>> [arend.vanspriel@broadcom.com: remove attach/detach vendor callbacks]
>>> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
>>> ---
>>> .../broadcom/brcm80211/brcmfmac/bca/core.c    | 13 ----------
>>> .../broadcom/brcm80211/brcmfmac/cyw/core.c    | 13 ----------
>>> .../broadcom/brcm80211/brcmfmac/fwvid.c       |  7 +++--
>>> .../broadcom/brcm80211/brcmfmac/fwvid.h       | 26 ++-----------------
>>> .../broadcom/brcm80211/brcmfmac/wcc/core.c    | 15 +----------
>>> 5 files changed, 6 insertions(+), 68 deletions(-)
>>>
>>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c 
>>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
>>> index a5d9ac5e6763..a963c242975a 100644
>>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
>>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bca/core.c
>>> @@ -11,17 +11,6 @@
>>>
>>> #include "vops.h"
>>>
>>> -static int brcmf_bca_attach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_err("%s: executing\n", __func__);
>>> - return 0;
>>> -}
>>> -
>>> -static void brcmf_bca_detach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_err("%s: executing\n", __func__);
>>> -}
>>> -
>>> static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
>>> {
>>> /* SAE support not confirmed so disabling for now */
>>> @@ -29,7 +18,5 @@ static void brcmf_bca_feat_attach(struct brcmf_if *ifp)
>>> }
>>>
>>> const struct brcmf_fwvid_ops brcmf_bca_ops = {
>>> - .attach = brcmf_bca_attach,
>>> - .detach = brcmf_bca_detach,
>>> .feat_attach = brcmf_bca_feat_attach,
>>> };
>>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c 
>>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
>>> index 24670497f1a4..bec5748310b9 100644
>>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
>>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
>>> @@ -11,17 +11,6 @@
>>>
>>> #include "vops.h"
>>>
>>> -static int brcmf_cyw_attach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_err("%s: executing\n", __func__);
>>> - return 0;
>>> -}
>>> -
>>> -static void brcmf_cyw_detach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_err("%s: executing\n", __func__);
>>> -}
>>> -
>>> static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
>>> struct cfg80211_crypto_settings *crypto)
>>> {
>>> @@ -49,7 +38,5 @@ static int brcmf_cyw_set_sae_pwd(struct brcmf_if *ifp,
>>> }
>>>
>>> const struct brcmf_fwvid_ops brcmf_cyw_ops = {
>>> - .attach = brcmf_cyw_attach,
>>> - .detach = brcmf_cyw_detach,
>>> .set_sae_password = brcmf_cyw_set_sae_pwd,
>>> };
>>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c 
>>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
>>> index 86eafdb40541..f633e2bbd891 100644
>>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
>>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.c
>>> @@ -89,8 +89,7 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor 
>>> fwvid, struct module *vmod,
>>> if (fwvid >= BRCMF_FWVENDOR_NUM)
>>> return -ERANGE;
>>>
>>> - if (WARN_ON(!vmod) || WARN_ON(!vops) ||
>>> -    WARN_ON(!vops->attach) || WARN_ON(!vops->detach))
>>> + if (WARN_ON(!vmod) || WARN_ON(!vops))
>>> return -EINVAL;
>>>
>>> if (WARN_ON(fwvid_list[fwvid].vmod))
>>> @@ -150,7 +149,7 @@ static inline int brcmf_fwvid_request_module(enum 
>>> brcmf_fwvendor fwvid)
>>> }
>>> #endif
>>>
>>> -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
>>> +int brcmf_fwvid_attach(struct brcmf_pub *drvr)
>>> {
>>> enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
>>> int ret;
>>> @@ -175,7 +174,7 @@ int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr)
>>> return ret;
>>> }
>>>
>>> -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr)
>>> +void brcmf_fwvid_detach(struct brcmf_pub *drvr)
>>> {
>>> enum brcmf_fwvendor fwvid = drvr->bus_if->fwvid;
>>>
>>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h 
>>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
>>> index d9fc76b46db9..dac22534d033 100644
>>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
>>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwvid.h
>>> @@ -12,8 +12,6 @@ struct brcmf_pub;
>>> struct brcmf_if;
>>>
>>> struct brcmf_fwvid_ops {
>>> - int (*attach)(struct brcmf_pub *drvr);
>>> - void (*detach)(struct brcmf_pub *drvr);
>>> void (*feat_attach)(struct brcmf_if *ifp);
>>> int (*set_sae_password)(struct brcmf_if *ifp, struct 
>>> cfg80211_crypto_settings *crypto);
>>> };
>>> @@ -24,30 +22,10 @@ int brcmf_fwvid_register_vendor(enum brcmf_fwvendor 
>>> fwvid, struct module *mod,
>>> int brcmf_fwvid_unregister_vendor(enum brcmf_fwvendor fwvid, struct module 
>>> *mod);
>>>
>>> /* core driver functions */
>>> -int brcmf_fwvid_attach_ops(struct brcmf_pub *drvr);
>>> -void brcmf_fwvid_detach_ops(struct brcmf_pub *drvr);
>>> +int brcmf_fwvid_attach(struct brcmf_pub *drvr);
>>> +void brcmf_fwvid_detach(struct brcmf_pub *drvr);
>>> const char *brcmf_fwvid_vendor_name(struct brcmf_pub *drvr);
>>>
>>> -static inline int brcmf_fwvid_attach(struct brcmf_pub *drvr)
>>> -{
>>> - int ret;
>>> -
>>> - ret = brcmf_fwvid_attach_ops(drvr);
>>> - if (ret)
>>> - return ret;
>>> -
>>> - return drvr->vops->attach(drvr);
>>> -}
>>> -
>>> -static inline void brcmf_fwvid_detach(struct brcmf_pub *drvr)
>>> -{
>>> - if (!drvr->vops)
>>> - return;
>>> -
>>> - drvr->vops->detach(drvr);
>>> - brcmf_fwvid_detach_ops(drvr);
>>> -}
>>> -
>>> static inline void brcmf_fwvid_feat_attach(struct brcmf_if *ifp)
>>> {
>>> const struct brcmf_fwvid_ops *vops = ifp->drvr->vops;
>>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c 
>>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
>>> index 2d8f80bd7382..fd593b93ad40 100644
>>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
>>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/wcc/core.c
>>> @@ -7,21 +7,10 @@
>>> #include <core.h>
>>> #include <bus.h>
>>> #include <fwvid.h>
>>> -#include <fwil.h>
>>> +#include <cfg80211.h>
>>>
>>> #include "vops.h"
>>>
>>> -static int brcmf_wcc_attach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_debug("%s: executing\n", __func__);
>>> - return 0;
>>> -}
>>> -
>>> -static void brcmf_wcc_detach(struct brcmf_pub *drvr)
>>> -{
>>> - pr_debug("%s: executing\n", __func__);
>>> -}
>>> -
>>> static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
>>> struct cfg80211_crypto_settings *crypto)
>>> {
>>> @@ -30,7 +19,5 @@ static int brcmf_wcc_set_sae_pwd(struct brcmf_if *ifp,
>>> }
>>>
>>> const struct brcmf_fwvid_ops brcmf_wcc_ops = {
>>> - .attach = brcmf_wcc_attach,
>>> - .detach = brcmf_wcc_detach,
>>> .set_sae_password = brcmf_wcc_set_sae_pwd,
>>> };
>>> --
>>> 2.32.0
>>
>>
>> <formletter>
>>
>> This is not the correct way to submit patches for inclusion in the
>> stable kernel tree.  Please read:
>> https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
>> for how to do this properly.
>>
>> </formletter>
>
> Sorry, bot is wrong here, this is fine.




[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
  2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
  2024-01-07  8:52   ` Greg KH
@ 2024-01-19 17:30   ` Kalle Valo
  1 sibling, 0 replies; 8+ messages in thread
From: Kalle Valo @ 2024-01-19 17:30 UTC (permalink / raw)
  To: Arend van Spriel; +Cc: linux-wireless, Hector Martin, stable, Arend van Spriel

Arend van Spriel <arend.vanspriel@broadcom.com> wrote:

> From: Hector Martin <marcan@marcan.st>
> 
> People are getting spooked by brcmfmac errors on their boot console.
> There's no reason for these messages to be errors.
> 
> Cc: stable@vger.kernel.org # 6.2.x
> Fixes: d6a5c562214f ("wifi: brcmfmac: add support for vendor-specific firmware api")
> Signed-off-by: Hector Martin <marcan@marcan.st>
> [arend.vanspriel@broadcom.com: remove attach/detach vendor callbacks]
> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>

3 patches applied to wireless-next.git, thanks.

85da8f71aaa7 wifi: brcmfmac: Demote vendor-specific attach/detach messages to info
b822015a1f57 wifi: brcmfmac: avoid invalid list operation when vendor attach fails
edec42821911 wifi: brcmfmac: allow per-vendor event handling

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20240106103835.269149-2-arend.vanspriel@broadcom.com/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-01-19 17:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-01-06 10:38 [PATCH V2 0/3] wifi: brcmfmac: few fixes and per-vendor event handling Arend van Spriel
2024-01-06 10:38 ` [PATCH V2 1/3] wifi: brcmfmac: Demote vendor-specific attach/detach messages to info Arend van Spriel
2024-01-07  8:52   ` Greg KH
2024-01-07  8:52     ` Greg KH
2024-01-07  9:11       ` Arend Van Spriel
2024-01-19 17:30   ` Kalle Valo
2024-01-06 10:38 ` [PATCH V2 2/3] wifi: brcmfmac: avoid invalid list operation when vendor attach fails Arend van Spriel
2024-01-06 10:38 ` [PATCH V2 3/3] wifi: brcmfmac: allow per-vendor event handling Arend van Spriel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.