public inbox for linux-wireless@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox