* [PATCH v12 1/5] dt-bindings: net: wireless: brcm4329-fmac: add pci14e4,449d
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
@ 2024-08-28 7:40 ` Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 2/5] dt-bindings: net: wireless: brcm4329-fmac: add clock description for AP6275P Jacobe Zang
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 7:40 UTC (permalink / raw)
To: Kalle Valo, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Jacobe Zang, Krzysztof Kozlowski
It's the device id used by AP6275P which is the Wi-Fi module
used by Rockchip's RK3588 evaluation board and also used in
some other RK3588 boards.
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
---
Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
index e564f20d8f415..2c2093c77ec9a 100644
--- a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
+++ b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
@@ -53,6 +53,7 @@ properties:
- pci14e4,4488 # BCM4377
- pci14e4,4425 # BCM4378
- pci14e4,4433 # BCM4387
+ - pci14e4,449d # BCM43752
reg:
description: SDIO function number for the device (for most cases
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v12 2/5] dt-bindings: net: wireless: brcm4329-fmac: add clock description for AP6275P
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 1/5] dt-bindings: net: wireless: brcm4329-fmac: add pci14e4,449d Jacobe Zang
@ 2024-08-28 7:40 ` Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure Jacobe Zang
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 7:40 UTC (permalink / raw)
To: Kalle Valo, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Jacobe Zang, Krzysztof Kozlowski
Not only AP6275P Wi-Fi device but also all Broadcom wireless devices allow
external low power clock input. In DTS the clock as an optional choice in
the absence of an internal clock.
Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
---
.../devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
index 2c2093c77ec9a..a3607d55ef367 100644
--- a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
+++ b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
@@ -122,6 +122,14 @@ properties:
NVRAM. This would normally be filled in by the bootloader from platform
configuration data.
+ clocks:
+ items:
+ - description: External Low Power Clock input (32.768KHz)
+
+ clock-names:
+ items:
+ - const: lpo
+
required:
- compatible
- reg
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 1/5] dt-bindings: net: wireless: brcm4329-fmac: add pci14e4,449d Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 2/5] dt-bindings: net: wireless: brcm4329-fmac: add clock description for AP6275P Jacobe Zang
@ 2024-08-28 7:40 ` Jacobe Zang
2024-08-28 8:50 ` Arend van Spriel
2024-08-28 7:40 ` [PATCH v12 4/5] wifi: brcmfmac: Add optional lpo clock enable support Jacobe Zang
` (2 subsequent siblings)
5 siblings, 1 reply; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 7:40 UTC (permalink / raw)
To: Kalle Valo, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Jacobe Zang
Add "brcm,bcm4329-fmac" as fallback compatible for wireless devices that
used PCI ID based compatible. So that can pass the compatible check in
driver.
Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
---
.../bindings/net/wireless/brcm,bcm4329-fmac.yaml | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
index a3607d55ef367..4870caed5f75e 100644
--- a/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
+++ b/Documentation/devicetree/bindings/net/wireless/brcm,bcm4329-fmac.yaml
@@ -27,7 +27,6 @@ properties:
- brcm,bcm4341b0-fmac
- brcm,bcm4341b4-fmac
- brcm,bcm4341b5-fmac
- - brcm,bcm4329-fmac
- brcm,bcm4330-fmac
- brcm,bcm4334-fmac
- brcm,bcm43340-fmac
@@ -46,14 +45,17 @@ properties:
- cypress,cyw43012-fmac
- infineon,cyw43439-fmac
- const: brcm,bcm4329-fmac
- - enum:
- - brcm,bcm4329-fmac
- - pci14e4,43dc # BCM4355
- - pci14e4,4464 # BCM4364
- - pci14e4,4488 # BCM4377
- - pci14e4,4425 # BCM4378
- - pci14e4,4433 # BCM4387
- - pci14e4,449d # BCM43752
+ - items:
+ - enum:
+ - brcm,bcm4329-fmac
+ - pci14e4,43dc # BCM4355
+ - pci14e4,4464 # BCM4364
+ - pci14e4,4488 # BCM4377
+ - pci14e4,4425 # BCM4378
+ - pci14e4,4433 # BCM4387
+ - pci14e4,449d # BCM43752
+ - const: brcm,bcm4329-fmac
+ - const: brcm,bcm4329-fmac
reg:
description: SDIO function number for the device (for most cases
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure
2024-08-28 7:40 ` [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure Jacobe Zang
@ 2024-08-28 8:50 ` Arend van Spriel
2024-08-28 9:02 ` Jacobe Zang
0 siblings, 1 reply; 12+ messages in thread
From: Arend van Spriel @ 2024-08-28 8:50 UTC (permalink / raw)
To: Jacobe Zang, Kalle Valo, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl
On 8/28/2024 9:40 AM, Jacobe Zang wrote:
> Add "brcm,bcm4329-fmac" as fallback compatible for wireless devices that
> used PCI ID based compatible. So that can pass the compatible check in
> driver.
Hi Jacobe,
Using the driver implementation as an argument for adding the fallback
compatible to the bindings does sound wrong. The most importants rule
about the bindings is that it is independent of kernel and/or driver
implementation.
Now this actually overlaps my patch series from couple of weeks ago
which also covered some other existing DTS files for Apple platforms. So
my proposal here is to drop this patch for now. I will give it another
shot in v2 of my series after yours is (finally) applied. We can always
hope ;-) That does also mean the compatible check in the driver should
not be moved in brcmf_of_probe(). Also the Khadas Edge2 DTS file should
not use the fallback compatible yet. I can include it in my series later.
Regards,
Arend
> Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
> ---
> .../bindings/net/wireless/brcm,bcm4329-fmac.yaml | 20 +++++++++++---------
> 1 file changed, 11 insertions(+), 9 deletions(-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure
2024-08-28 8:50 ` Arend van Spriel
@ 2024-08-28 9:02 ` Jacobe Zang
0 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 9:02 UTC (permalink / raw)
To: Arend van Spriel, Kalle Valo, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl
On 2024/8/28 16:50, Arend van Spriel wrote:
> On 8/28/2024 9:40 AM, Jacobe Zang wrote:
>> Add "brcm,bcm4329-fmac" as fallback compatible for wireless devices that
>> used PCI ID based compatible. So that can pass the compatible check in
>> driver.
>
> Hi Jacobe,
>
> Using the driver implementation as an argument for adding the fallback
Yes, so I changed the argument in v13 which seemed doesn't matter now ;-)
> compatible to the bindings does sound wrong. The most importants rule
> about the bindings is that it is independent of kernel and/or driver
> implementation.
>
> Now this actually overlaps my patch series from couple of weeks ago
> which also covered some other existing DTS files for Apple platforms. So
> my proposal here is to drop this patch for now. I will give it another
Okay ;-)
> shot in v2 of my series after yours is (finally) applied. We can always
> hope ;-) That does also mean the compatible check in the driver should
> not be moved in brcmf_of_probe(). Also the Khadas Edge2 DTS file should
I see. Thanks for your information.
> not use the fallback compatible yet. I can include it in my series later.
>
> Regards,
> Arend
>
>> Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
>> ---
>> .../bindings/net/wireless/brcm,bcm4329-fmac.yaml | 20 ++++++++++
>> +---------
>> 1 file changed, 11 insertions(+), 9 deletions(-)
--
Best Regards
Jacobe
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v12 4/5] wifi: brcmfmac: Add optional lpo clock enable support
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
` (2 preceding siblings ...)
2024-08-28 7:40 ` [PATCH v12 3/5] dt-bindings: net: wireless: brcm4329-fmac: change properties enum structure Jacobe Zang
@ 2024-08-28 7:40 ` Jacobe Zang
2024-08-28 7:40 ` [PATCH v12 5/5] wifi: brcmfmac: add flag for random seed during firmware download Jacobe Zang
2024-08-28 7:59 ` [PATCH v12 0/5] Add AP6276P wireless support Krzysztof Kozlowski
5 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 7:40 UTC (permalink / raw)
To: Kalle Valo, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Jacobe Zang, Ondrej Jirman, Sai Krishna
WiFi modules often require 32kHz clock to function. Add support to
enable the clock to PCIe driver and move "brcm,bcm4329-fmac" check
to the top of brcmf_of_probe. Change function prototypes from void
to int and add appropriate errno's for return values that will be
send to bus when error occurred.
Co-developed-by: Ondrej Jirman <megi@xff.cz>
Signed-off-by: Ondrej Jirman <megi@xff.cz>
Co-developed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Reviewed-by: Sai Krishna <saikrishnag@marvell.com>
Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
---
.../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 4 +--
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 3 ++-
.../net/wireless/broadcom/brcm80211/brcmfmac/of.c | 29 +++++++++++++++-------
.../net/wireless/broadcom/brcm80211/brcmfmac/of.h | 9 ++++---
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 3 +++
.../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 20 +++++++++------
.../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 3 +++
7 files changed, 48 insertions(+), 23 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
index d35262335eaf7..17f6b33beabd8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
@@ -947,8 +947,8 @@ int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
/* try to attach to the target device */
sdiodev->bus = brcmf_sdio_probe(sdiodev);
- if (!sdiodev->bus) {
- ret = -ENODEV;
+ if (IS_ERR(sdiodev->bus)) {
+ ret = PTR_ERR(sdiodev->bus);
goto out;
}
brcmf_sdiod_host_fixup(sdiodev->func2->card->host);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
index b24faae35873d..58d50918dd177 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
@@ -561,7 +561,8 @@ struct brcmf_mp_device *brcmf_get_module_param(struct device *dev,
if (!found) {
/* No platform data for this device, try OF and DMI data */
brcmf_dmi_probe(settings, chip, chiprev);
- brcmf_of_probe(dev, bus_type, settings);
+ if (brcmf_of_probe(dev, bus_type, settings) == -EPROBE_DEFER)
+ return ERR_PTR(-EPROBE_DEFER);
brcmf_acpi_probe(dev, bus_type, settings);
}
return settings;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
index fe4f657561056..c1285adabf72b 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
@@ -6,6 +6,7 @@
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_net.h>
+#include <linux/clk.h>
#include <defs.h>
#include "debug.h"
@@ -65,18 +66,22 @@ static int brcmf_of_get_country_codes(struct device *dev,
return 0;
}
-void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
- struct brcmf_mp_device *settings)
+int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
+ struct brcmf_mp_device *settings)
{
struct brcmfmac_sdio_pd *sdio = &settings->bus.sdio;
struct device_node *root, *np = dev->of_node;
struct of_phandle_args oirq;
+ struct clk *clk;
const char *prop;
int irq;
int err;
u32 irqf;
u32 val;
+ if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
+ return 0;
+
/* Apple ARM64 platforms have their own idea of board type, passed in
* via the device tree. They also have an antenna SKU parameter
*/
@@ -106,7 +111,7 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
board_type = devm_kstrdup(dev, tmp, GFP_KERNEL);
if (!board_type) {
of_node_put(root);
- return;
+ return 0;
}
strreplace(board_type, '/', '-');
settings->board_type = board_type;
@@ -114,33 +119,39 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
of_node_put(root);
}
- if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
- return;
-
err = brcmf_of_get_country_codes(dev, settings);
if (err)
brcmf_err("failed to get OF country code map (err=%d)\n", err);
of_get_mac_address(np, settings->mac);
+ clk = devm_clk_get_optional_enabled(dev, "lpo");
+ if (IS_ERR(clk))
+ return PTR_ERR(clk);
+
+ brcmf_dbg(INFO, "%s LPO clock\n", clk ? "enable" : "no");
+ clk_set_rate(clk, 32768);
+
if (bus_type != BRCMF_BUSTYPE_SDIO)
- return;
+ return 0;
if (of_property_read_u32(np, "brcm,drive-strength", &val) == 0)
sdio->drive_strength = val;
/* make sure there are interrupts defined in the node */
if (of_irq_parse_one(np, 0, &oirq))
- return;
+ return 0;
irq = irq_create_of_mapping(&oirq);
if (!irq) {
brcmf_err("interrupt could not be mapped\n");
- return;
+ return 0;
}
irqf = irqd_get_trigger_type(irq_get_irq_data(irq));
sdio->oob_irq_supported = true;
sdio->oob_irq_nr = irq;
sdio->oob_irq_flags = irqf;
+
+ return 0;
}
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
index 10bf52253337e..ae124c73fc3b7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.h
@@ -3,11 +3,12 @@
* Copyright (c) 2014 Broadcom Corporation
*/
#ifdef CONFIG_OF
-void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
- struct brcmf_mp_device *settings);
+int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
+ struct brcmf_mp_device *settings);
#else
-static void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
- struct brcmf_mp_device *settings)
+static int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
+ struct brcmf_mp_device *settings)
{
+ return 0;
}
#endif /* CONFIG_OF */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index ce482a3877e90..190e8990618c5 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -2452,6 +2452,9 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
ret = -ENOMEM;
goto fail;
}
+ ret = PTR_ERR_OR_ZERO(devinfo->settings);
+ if (ret < 0)
+ goto fail;
bus = kzalloc(sizeof(*bus), GFP_KERNEL);
if (!bus) {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
index 1461dc453ac22..59c77645e2183 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
@@ -3943,7 +3943,7 @@ static const struct brcmf_buscore_ops brcmf_sdio_buscore_ops = {
.write32 = brcmf_sdio_buscore_write32,
};
-static bool
+static int
brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
{
struct brcmf_sdio_dev *sdiodev;
@@ -3953,6 +3953,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
u32 reg_val;
u32 drivestrength;
u32 enum_base;
+ int ret = -EBADE;
sdiodev = bus->sdiodev;
sdio_claim_host(sdiodev->func1);
@@ -4001,8 +4002,9 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
BRCMF_BUSTYPE_SDIO,
bus->ci->chip,
bus->ci->chiprev);
- if (!sdiodev->settings) {
+ if (IS_ERR_OR_NULL(sdiodev->settings)) {
brcmf_err("Failed to get device parameters\n");
+ ret = PTR_ERR_OR_ZERO(sdiodev->settings);
goto fail;
}
/* platform specific configuration:
@@ -4071,7 +4073,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
/* allocate header buffer */
bus->hdrbuf = kzalloc(MAX_HDR_READ + bus->head_align, GFP_KERNEL);
if (!bus->hdrbuf)
- return false;
+ return -ENOMEM;
/* Locate an appropriately-aligned portion of hdrbuf */
bus->rxhdr = (u8 *) roundup((unsigned long)&bus->hdrbuf[0],
bus->head_align);
@@ -4082,11 +4084,11 @@ brcmf_sdio_probe_attach(struct brcmf_sdio *bus)
if (bus->poll)
bus->pollrate = 1;
- return true;
+ return 0;
fail:
sdio_release_host(sdiodev->func1);
- return false;
+ return ret;
}
static int
@@ -4452,7 +4454,9 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
/* Allocate private bus interface state */
bus = kzalloc(sizeof(*bus), GFP_ATOMIC);
if (!bus)
+ ret = -ENOMEM;
goto fail;
+ }
bus->sdiodev = sdiodev;
sdiodev->bus = bus;
@@ -4467,6 +4471,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
dev_name(&sdiodev->func1->dev));
if (!wq) {
brcmf_err("insufficient memory to create txworkqueue\n");
+ ret = -ENOMEM;
goto fail;
}
brcmf_sdiod_freezer_count(sdiodev);
@@ -4474,7 +4479,8 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
bus->brcmf_wq = wq;
/* attempt to attach to the dongle */
- if (!(brcmf_sdio_probe_attach(bus))) {
+ ret = brcmf_sdio_probe_attach(bus);
+ if (ret < 0) {
brcmf_err("brcmf_sdio_probe_attach failed\n");
goto fail;
}
@@ -4546,7 +4552,7 @@ struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
fail:
brcmf_sdio_remove(bus);
- return NULL;
+ return ERR_PTR(ret);
}
/* Detach and free everything */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index 8afbf529c7450..2821c27f317ee 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -1272,6 +1272,9 @@ static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo,
ret = -ENOMEM;
goto fail;
}
+ ret = PTR_ERR_OR_ZERO(devinfo->settings);
+ if (ret < 0)
+ goto fail;
if (!brcmf_usb_dlneeded(devinfo)) {
ret = brcmf_alloc(devinfo->dev, devinfo->settings);
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v12 5/5] wifi: brcmfmac: add flag for random seed during firmware download
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
` (3 preceding siblings ...)
2024-08-28 7:40 ` [PATCH v12 4/5] wifi: brcmfmac: Add optional lpo clock enable support Jacobe Zang
@ 2024-08-28 7:40 ` Jacobe Zang
2024-08-28 7:59 ` [PATCH v12 0/5] Add AP6276P wireless support Krzysztof Kozlowski
5 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 7:40 UTC (permalink / raw)
To: Kalle Valo, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Jacobe Zang, Ondrej Jirman
Providing the random seed to firmware was tied to the fact that the
device has a valid OTP, which worked for some Apple chips. However,
it turns out the BCM43752 device also needs the random seed in order
to get firmware running. Suspect it is simply tied to the firmware
branch used for the device. Introducing a mechanism to allow setting
it for a device through the device table.
Co-developed-by: Ondrej Jirman <megi@xff.cz>
Signed-off-by: Ondrej Jirman <megi@xff.cz>
Co-developed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
---
.../wireless/broadcom/brcm80211/brcmfmac/pcie.c | 52 ++++++++++++++++++----
.../broadcom/brcm80211/include/brcm_hw_ids.h | 2 +
2 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
index 190e8990618c5..c0fdaa4dceda4 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
@@ -66,6 +66,7 @@ BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie");
BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie");
BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
+BRCMF_FW_CLM_DEF(43752, "brcmfmac43752-pcie");
BRCMF_FW_CLM_DEF(4377B3, "brcmfmac4377b3-pcie");
BRCMF_FW_CLM_DEF(4378B1, "brcmfmac4378b1-pcie");
BRCMF_FW_CLM_DEF(4378B3, "brcmfmac4378b3-pcie");
@@ -104,6 +105,7 @@ static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C),
BRCMF_FW_ENTRY(BRCM_CC_43666_CHIP_ID, 0xFFFFFFF0, 4366C),
BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
+ BRCMF_FW_ENTRY(BRCM_CC_43752_CHIP_ID, 0xFFFFFFFF, 43752),
BRCMF_FW_ENTRY(BRCM_CC_4377_CHIP_ID, 0xFFFFFFFF, 4377B3), /* revision ID 4 */
BRCMF_FW_ENTRY(BRCM_CC_4378_CHIP_ID, 0x0000000F, 4378B1), /* revision ID 3 */
BRCMF_FW_ENTRY(BRCM_CC_4378_CHIP_ID, 0xFFFFFFE0, 4378B3), /* revision ID 5 */
@@ -353,6 +355,7 @@ struct brcmf_pciedev_info {
u16 value);
struct brcmf_mp_device *settings;
struct brcmf_otp_params otp;
+ bool fwseed;
#ifdef DEBUG
u32 console_interval;
bool console_active;
@@ -1715,14 +1718,14 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
memcpy_toio(devinfo->tcm + address, nvram, nvram_len);
brcmf_fw_nvram_free(nvram);
- if (devinfo->otp.valid) {
+ if (devinfo->fwseed) {
size_t rand_len = BRCMF_RANDOM_SEED_LENGTH;
struct brcmf_random_seed_footer footer = {
.length = cpu_to_le32(rand_len),
.magic = cpu_to_le32(BRCMF_RANDOM_SEED_MAGIC),
};
- /* Some Apple chips/firmwares expect a buffer of random
+ /* Some chips/firmwares expect a buffer of random
* data to be present before NVRAM
*/
brcmf_dbg(PCIE, "Download random seed\n");
@@ -2394,6 +2397,37 @@ static void brcmf_pcie_debugfs_create(struct device *dev)
}
#endif
+struct brcmf_pcie_drvdata {
+ enum brcmf_fwvendor vendor;
+ bool fw_seed;
+};
+
+enum {
+ BRCMF_DRVDATA_CYW,
+ BRCMF_DRVDATA_BCA,
+ BRCMF_DRVDATA_WCC,
+ BRCMF_DRVDATA_WCC_SEED,
+};
+
+static const struct brcmf_pcie_drvdata drvdata[] = {
+ [BRCMF_DRVDATA_CYW] = {
+ .vendor = BRCMF_FWVENDOR_CYW,
+ .fw_seed = false,
+ },
+ [BRCMF_DRVDATA_BCA] = {
+ .vendor = BRCMF_FWVENDOR_BCA,
+ .fw_seed = false,
+ },
+ [BRCMF_DRVDATA_WCC] = {
+ .vendor = BRCMF_FWVENDOR_WCC,
+ .fw_seed = false,
+ },
+ [BRCMF_DRVDATA_WCC_SEED] = {
+ .vendor = BRCMF_FWVENDOR_WCC,
+ .fw_seed = true,
+ },
+};
+
/* Forward declaration for pci_match_id() call */
static const struct pci_device_id brcmf_pcie_devid_table[];
@@ -2475,9 +2509,10 @@ brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
bus->bus_priv.pcie = pcie_bus_dev;
bus->ops = &brcmf_pcie_bus_ops;
bus->proto_type = BRCMF_PROTO_MSGBUF;
- bus->fwvid = id->driver_data;
bus->chip = devinfo->coreid;
bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
+ bus->fwvid = drvdata[id->driver_data].vendor;
+ devinfo->fwseed = drvdata[id->driver_data].fw_seed;
dev_set_drvdata(&pdev->dev, bus);
ret = brcmf_alloc(&devinfo->pdev->dev, devinfo->settings);
@@ -2663,14 +2698,14 @@ static const struct dev_pm_ops brcmf_pciedrvr_pm = {
BRCM_PCIE_VENDOR_ID_BROADCOM, (dev_id), \
PCI_ANY_ID, PCI_ANY_ID, \
PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, \
- BRCMF_FWVENDOR_ ## fw_vend \
+ BRCMF_DRVDATA_ ## fw_vend \
}
#define BRCMF_PCIE_DEVICE_SUB(dev_id, subvend, subdev, fw_vend) \
{ \
BRCM_PCIE_VENDOR_ID_BROADCOM, (dev_id), \
(subvend), (subdev), \
PCI_CLASS_NETWORK_OTHER << 8, 0xffff00, \
- BRCMF_FWVENDOR_ ## fw_vend \
+ BRCMF_DRVDATA_ ## fw_vend \
}
static const struct pci_device_id brcmf_pcie_devid_table[] = {
@@ -2698,9 +2733,10 @@ static const struct pci_device_id brcmf_pcie_devid_table[] = {
BRCMF_PCIE_DEVICE(BRCM_PCIE_4366_5G_DEVICE_ID, BCA),
BRCMF_PCIE_DEVICE(BRCM_PCIE_4371_DEVICE_ID, WCC),
BRCMF_PCIE_DEVICE(BRCM_PCIE_43596_DEVICE_ID, CYW),
- BRCMF_PCIE_DEVICE(BRCM_PCIE_4377_DEVICE_ID, WCC),
- BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID, WCC),
- BRCMF_PCIE_DEVICE(BRCM_PCIE_4387_DEVICE_ID, WCC),
+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4377_DEVICE_ID, WCC_SEED),
+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4378_DEVICE_ID, WCC_SEED),
+ BRCMF_PCIE_DEVICE(BRCM_PCIE_4387_DEVICE_ID, WCC_SEED),
+ BRCMF_PCIE_DEVICE(BRCM_PCIE_43752_DEVICE_ID, WCC_SEED),
{ /* end: all zeroes */ }
};
diff --git a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
index 44684bf1b9acc..c1e22c589d85e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
@@ -52,6 +52,7 @@
#define BRCM_CC_43664_CHIP_ID 43664
#define BRCM_CC_43666_CHIP_ID 43666
#define BRCM_CC_4371_CHIP_ID 0x4371
+#define BRCM_CC_43752_CHIP_ID 43752
#define BRCM_CC_4377_CHIP_ID 0x4377
#define BRCM_CC_4378_CHIP_ID 0x4378
#define BRCM_CC_4387_CHIP_ID 0x4387
@@ -94,6 +95,7 @@
#define BRCM_PCIE_4366_5G_DEVICE_ID 0x43c5
#define BRCM_PCIE_4371_DEVICE_ID 0x440d
#define BRCM_PCIE_43596_DEVICE_ID 0x4415
+#define BRCM_PCIE_43752_DEVICE_ID 0x449d
#define BRCM_PCIE_4377_DEVICE_ID 0x4488
#define BRCM_PCIE_4378_DEVICE_ID 0x4425
#define BRCM_PCIE_4387_DEVICE_ID 0x4433
--
2.34.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v12 0/5] Add AP6276P wireless support
2024-08-28 7:40 [PATCH v12 0/5] Add AP6276P wireless support Jacobe Zang
` (4 preceding siblings ...)
2024-08-28 7:40 ` [PATCH v12 5/5] wifi: brcmfmac: add flag for random seed during firmware download Jacobe Zang
@ 2024-08-28 7:59 ` Krzysztof Kozlowski
2024-08-28 8:10 ` Jacobe Zang
5 siblings, 1 reply; 12+ messages in thread
From: Krzysztof Kozlowski @ 2024-08-28 7:59 UTC (permalink / raw)
To: Jacobe Zang, Kalle Valo, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Krzysztof Kozlowski, Ondrej Jirman,
Sai Krishna
On 28/08/2024 09:40, Jacobe Zang wrote:
> Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
> ---
> These add AP6275P wireless support on Khadas Edge2. Enable 32k clock
> for Wi-Fi module and extend the hardware IDs table in the brcmfmac
> driver for it to attach.
>
I saw v12 and responded to it. This is confusing. Also to other people
if they start reviewing different copies.
Please read carefully submitting. This is v12, so I don't get why such
basic submission guidelines are not respected here.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v12 0/5] Add AP6276P wireless support
2024-08-28 7:59 ` [PATCH v12 0/5] Add AP6276P wireless support Krzysztof Kozlowski
@ 2024-08-28 8:10 ` Jacobe Zang
0 siblings, 0 replies; 12+ messages in thread
From: Jacobe Zang @ 2024-08-28 8:10 UTC (permalink / raw)
To: Krzysztof Kozlowski, Kalle Valo, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, van Spriel, Arend van Spriel
Cc: linux-wireless, netdev, devicetree, linux-kernel, brcm80211,
brcm80211-dev-list.pdl, Krzysztof Kozlowski, Ondrej Jirman,
Sai Krishna
On 2024/8/28 15:59, Krzysztof Kozlowski wrote:
> On 28/08/2024 09:40, Jacobe Zang wrote:
>> Signed-off-by: Jacobe Zang <jacobe.zang@wesion.com>
>> ---
>> These add AP6275P wireless support on Khadas Edge2. Enable 32k clock
>> for Wi-Fi module and extend the hardware IDs table in the brcmfmac
>> driver for it to attach.
>>
>
> I saw v12 and responded to it. This is confusing. Also to other people
> if they start reviewing different copies.
>
> Please read carefully submitting. This is v12, so I don't get why such
> basic submission guidelines are not respected here.
>
Sorry.. It is my first time using b4 to send patch, so I made the
confused versions..
--
Best Regards
Jacobe
^ permalink raw reply [flat|nested] 12+ messages in thread