From 42621d3144a51f21561477465923ddb6bc234518 Mon Sep 17 00:00:00 2001 From: Tianling Shen Date: Mon, 23 Sep 2024 15:35:40 +0800 Subject: [PATCH] mac80211: backport upstreamed accepted AP6275P support Signed-off-by: Tianling Shen --- ...d-optional-lpo-clock-enable-support.patch} | 139 +++++++++--------- ...lag-for-random-seed-during-firmware.patch} | 25 ++-- ...-in-driver-tables-with-country-codes.patch | 6 +- 3 files changed, 78 insertions(+), 92 deletions(-) rename package/kernel/mac80211/patches/brcm/{610-brcmfmac-Add-optional-lpo-clock-enable-support.patch => 060-v6.12-wifi-brcmfmac-Add-optional-lpo-clock-enable-support.patch} (67%) rename package/kernel/mac80211/patches/brcm/{611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch => 061-v6.12-wifi-brcmfmac-add-flag-for-random-seed-during-firmware.patch} (86%) diff --git a/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch b/package/kernel/mac80211/patches/brcm/060-v6.12-wifi-brcmfmac-Add-optional-lpo-clock-enable-support.patch similarity index 67% rename from package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch rename to package/kernel/mac80211/patches/brcm/060-v6.12-wifi-brcmfmac-Add-optional-lpo-clock-enable-support.patch index fd4d0f53b6..dab0fb8583 100644 --- a/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch +++ b/package/kernel/mac80211/patches/brcm/060-v6.12-wifi-brcmfmac-Add-optional-lpo-clock-enable-support.patch @@ -1,20 +1,7 @@ +From 0ff0843310b74e565901d85f849fb308c3b1f220 Mon Sep 17 00:00:00 2001 From: Jacobe Zang -To: robh@kernel.org, krzk+dt@kernel.org, heiko@sntech.de, - kvalo@kernel.org, davem@davemloft.net, edumazet@google.com, - kuba@kernel.org, pabeni@redhat.com, conor+dt@kernel.org, - arend.vanspriel@broadcom.com -Cc: efectn@protonmail.com, dsimic@manjaro.org, jagan@edgeble.ai, - devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, - linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, - arend@broadcom.com, linux-wireless@vger.kernel.org, - netdev@vger.kernel.org, megi@xff.cz, duoming@zju.edu.cn, - bhelgaas@google.com, minipli@grsecurity.net, - brcm80211@lists.linux.dev, brcm80211-dev-list.pdl@broadcom.com, - nick@khadas.com, Jacobe Zang -Subject: [PATCH v8 4/5] wifi: brcmfmac: Add optional lpo clock enable support -Date: Mon, 5 Aug 2024 15:34:24 +0800 [thread overview] -Message-ID: <20240805073425.3492078-5-jacobe.zang@wesion.com> (raw) -In-Reply-To: <20240805073425.3492078-1-jacobe.zang@wesion.com> +Date: Tue, 10 Sep 2024 11:04:13 +0800 +Subject: [PATCH] wifi: brcmfmac: Add optional lpo clock enable support WiFi modules often require 32kHz clock to function. Add support to enable the clock to PCIe driver and move "brcm,bcm4329-fmac" check @@ -26,46 +13,48 @@ Co-developed-by: Ondrej Jirman Signed-off-by: Ondrej Jirman Co-developed-by: Arend van Spriel Signed-off-by: Arend van Spriel +Reviewed-by: Sai Krishna Signed-off-by: Jacobe Zang +Reviewed-by: Sebastian Reichel +Tested-by: Sebastian Reichel # On RK3588 EVB1 +Acked-by: Arend van Spriel +Signed-off-by: Kalle Valo +Link: https://patch.msgid.link/20240910-wireless-mainline-v14-3-9d80fea5326d@wesion.com --- - .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 4 +++ - .../broadcom/brcm80211/brcmfmac/common.c | 6 +++- - .../wireless/broadcom/brcm80211/brcmfmac/of.c | 28 +++++++++++++------ - .../wireless/broadcom/brcm80211/brcmfmac/of.h | 9 +++--- - .../broadcom/brcm80211/brcmfmac/pcie.c | 3 ++ - .../broadcom/brcm80211/brcmfmac/sdio.c | 18 ++++++++---- - .../broadcom/brcm80211/brcmfmac/usb.c | 3 ++ - 7 files changed, 52 insertions(+), 19 deletions(-) + .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 4 +-- + .../broadcom/brcm80211/brcmfmac/common.c | 3 ++- + .../wireless/broadcom/brcm80211/brcmfmac/of.c | 25 +++++++++++++------ + .../wireless/broadcom/brcm80211/brcmfmac/of.h | 9 ++++--- + .../broadcom/brcm80211/brcmfmac/pcie.c | 3 +++ + .../broadcom/brcm80211/brcmfmac/sdio.c | 22 ++++++++++------ + .../broadcom/brcm80211/brcmfmac/usb.c | 3 +++ + 7 files changed, 47 insertions(+), 22 deletions(-) --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c -@@ -951,6 +951,10 @@ int brcmf_sdiod_probe(struct brcmf_sdio_ - ret = -ENODEV; - goto out; - } +@@ -947,8 +947,8 @@ int brcmf_sdiod_probe(struct brcmf_sdio_ + + /* 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; -+ } + goto out; + } brcmf_sdiod_host_fixup(sdiodev->func2->card->host); - out: - if (ret) --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c -@@ -561,8 +561,12 @@ struct brcmf_mp_device *brcmf_get_module +@@ -561,7 +561,8 @@ struct brcmf_mp_device *brcmf_get_module 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); -+ i = brcmf_of_probe(dev, bus_type, settings); -+ if (i < 0) { -+ kfree(settings); -+ settings = ERR_PTR(i); -+ } } return settings; - } --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c @@ -6,6 +6,7 @@ @@ -76,7 +65,7 @@ Signed-off-by: Jacobe Zang #include #include "debug.h" -@@ -65,17 +66,21 @@ static int brcmf_of_get_country_codes(st +@@ -65,11 +66,12 @@ static int brcmf_of_get_country_codes(st return 0; } @@ -91,16 +80,7 @@ Signed-off-by: Jacobe Zang 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 - */ -@@ -105,7 +110,7 @@ void brcmf_of_probe(struct device *dev, +@@ -105,7 +107,7 @@ void brcmf_of_probe(struct device *dev, board_type = devm_kstrdup(dev, tmp, GFP_KERNEL); if (!board_type) { of_node_put(root); @@ -109,23 +89,24 @@ Signed-off-by: Jacobe Zang } strreplace(board_type, '/', '-'); settings->board_type = board_type; -@@ -113,8 +118,13 @@ void brcmf_of_probe(struct device *dev, +@@ -113,8 +115,15 @@ void brcmf_of_probe(struct device *dev, of_node_put(root); } -- if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac")) -- return; + clk = devm_clk_get_optional_enabled(dev, "lpo"); -+ if (!IS_ERR_OR_NULL(clk)) { -+ brcmf_dbg(INFO, "enabling 32kHz clock\n"); -+ clk_set_rate(clk, 32768); -+ } else if (PTR_ERR_OR_ZERO(clk) == -EPROBE_DEFER) { -+ return -EPROBE_DEFER; -+ } ++ if (IS_ERR(clk)) ++ return PTR_ERR(clk); ++ ++ brcmf_dbg(INFO, "%s LPO clock\n", clk ? "enable" : "no"); ++ clk_set_rate(clk, 32768); ++ + if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac")) +- return; ++ return 0; err = brcmf_of_get_country_codes(dev, settings); if (err) -@@ -123,23 +133,25 @@ void brcmf_of_probe(struct device *dev, +@@ -123,23 +132,25 @@ void brcmf_of_probe(struct device *dev, of_get_mac_address(np, settings->mac); if (bus_type != BRCMF_BUSTYPE_SDIO) @@ -238,33 +219,45 @@ Signed-off-by: Jacobe Zang } static int -@@ -4446,6 +4448,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru - struct brcmf_sdio *bus; - struct workqueue_struct *wq; - struct brcmf_fw_request *fwreq; -+ int probe_attach_result; +@@ -4451,8 +4453,10 @@ struct brcmf_sdio *brcmf_sdio_probe(stru - brcmf_dbg(TRACE, "Enter\n"); + /* Allocate private bus interface state */ + bus = kzalloc(sizeof(struct brcmf_sdio), GFP_ATOMIC); +- if (!bus) ++ if (!bus) { ++ ret = -ENOMEM; + goto fail; ++ } -@@ -4474,7 +4477,8 @@ struct brcmf_sdio *brcmf_sdio_probe(stru + bus->sdiodev = sdiodev; + sdiodev->bus = bus; +@@ -4467,6 +4471,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru + 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(stru bus->brcmf_wq = wq; /* attempt to attach to the dongle */ - if (!(brcmf_sdio_probe_attach(bus))) { -+ probe_attach_result = brcmf_sdio_probe_attach(bus); -+ if (probe_attach_result < 0) { ++ ret = brcmf_sdio_probe_attach(bus); ++ if (ret < 0) { brcmf_err("brcmf_sdio_probe_attach failed\n"); goto fail; } -@@ -4546,6 +4550,8 @@ struct brcmf_sdio *brcmf_sdio_probe(stru +@@ -4546,7 +4552,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru fail: brcmf_sdio_remove(bus); -+ if (probe_attach_result < 0) -+ return ERR_PTR(probe_attach_result); - return NULL; +- return NULL; ++ return ERR_PTR(ret); } + /* Detach and free everything */ --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c @@ -1279,6 +1279,9 @@ static int brcmf_usb_probe_cb(struct brc diff --git a/package/kernel/mac80211/patches/brcm/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch b/package/kernel/mac80211/patches/brcm/061-v6.12-wifi-brcmfmac-add-flag-for-random-seed-during-firmware.patch similarity index 86% rename from package/kernel/mac80211/patches/brcm/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch rename to package/kernel/mac80211/patches/brcm/061-v6.12-wifi-brcmfmac-add-flag-for-random-seed-during-firmware.patch index 8b98a29185..3b506520fe 100644 --- a/package/kernel/mac80211/patches/brcm/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch +++ b/package/kernel/mac80211/patches/brcm/061-v6.12-wifi-brcmfmac-add-flag-for-random-seed-during-firmware.patch @@ -1,20 +1,8 @@ +From ea11a89c3ac64ada9d8b7f7de279cb6385ed194f Mon Sep 17 00:00:00 2001 From: Jacobe Zang -To: robh@kernel.org, krzk+dt@kernel.org, heiko@sntech.de, - kvalo@kernel.org, davem@davemloft.net, edumazet@google.com, - kuba@kernel.org, pabeni@redhat.com, conor+dt@kernel.org, - arend.vanspriel@broadcom.com -Cc: efectn@protonmail.com, dsimic@manjaro.org, jagan@edgeble.ai, - devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, - linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, - arend@broadcom.com, linux-wireless@vger.kernel.org, - netdev@vger.kernel.org, megi@xff.cz, duoming@zju.edu.cn, - bhelgaas@google.com, minipli@grsecurity.net, - brcm80211@lists.linux.dev, brcm80211-dev-list.pdl@broadcom.com, - nick@khadas.com, Jacobe Zang -Subject: [PATCH v8 5/5] wifi: brcmfmac: add flag for random seed during firmware download -Date: Mon, 5 Aug 2024 15:34:25 +0800 [thread overview] -Message-ID: <20240805073425.3492078-6-jacobe.zang@wesion.com> (raw) -In-Reply-To: <20240805073425.3492078-1-jacobe.zang@wesion.com> +Date: Tue, 10 Sep 2024 11:04:14 +0800 +Subject: [PATCH] wifi: brcmfmac: add flag for random seed during firmware + download 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, @@ -28,6 +16,11 @@ Signed-off-by: Ondrej Jirman Co-developed-by: Arend van Spriel Signed-off-by: Arend van Spriel Signed-off-by: Jacobe Zang +Reviewed-by: Sebastian Reichel +Tested-by: Sebastian Reichel # On RK3588 EVB1 +Acked-by: Arend van Spriel +Signed-off-by: Kalle Valo +Link: https://patch.msgid.link/20240910-wireless-mainline-v14-4-9d80fea5326d@wesion.com --- .../broadcom/brcm80211/brcmfmac/pcie.c | 52 ++++++++++++++++--- .../broadcom/brcm80211/include/brcm_hw_ids.h | 2 + diff --git a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch index 102f91aed7..143542dd73 100644 --- a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch +++ b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch @@ -49,9 +49,9 @@ Signed-off-by: Rafał Miłecki int brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, struct brcmf_mp_device *settings) { -@@ -78,6 +108,8 @@ int brcmf_of_probe(struct device *dev, e - u32 irqf; - u32 val; +@@ -122,6 +152,8 @@ int brcmf_of_probe(struct device *dev, e + brcmf_dbg(INFO, "%s LPO clock\n", clk ? "enable" : "no"); + clk_set_rate(clk, 32768); + brcmf_of_probe_cc(dev, settings); +