From 87a65ed282ae2052e0942637d280352001d53c87 Mon Sep 17 00:00:00 2001 From: Tianling Shen Date: Thu, 8 Aug 2024 02:19:49 +0800 Subject: [PATCH] mac80211: backport latest AP6275P patches Signed-off-by: Tianling Shen --- ...dd-optional-lpo-clock-enable-support.patch | 289 +++++++++++++++--- ...611-brcmfmac-Add-support-for-AP6275P.patch | 82 ----- ...g-for-random-seed-during-firmware-do.patch | 177 +++++++++++ ...-in-driver-tables-with-country-codes.patch | 14 +- .../boot/dts/rockchip/rk3588-armsom-sige7.dts | 5 +- 5 files changed, 439 insertions(+), 128 deletions(-) delete mode 100644 package/kernel/mac80211/patches/brcm/611-brcmfmac-Add-support-for-AP6275P.patch create mode 100644 package/kernel/mac80211/patches/brcm/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch diff --git a/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch b/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch index 138c5fb3d4..fd4d0f53b6 100644 --- a/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch +++ b/package/kernel/mac80211/patches/brcm/610-brcmfmac-Add-optional-lpo-clock-enable-support.patch @@ -1,7 +1,8 @@ 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 + 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, @@ -10,51 +11,269 @@ Cc: efectn@protonmail.com, dsimic@manjaro.org, jagan@edgeble.ai, bhelgaas@google.com, minipli@grsecurity.net, brcm80211@lists.linux.dev, brcm80211-dev-list.pdl@broadcom.com, nick@khadas.com, Jacobe Zang -Subject: [PATCH v3 4/5] wifi: brcmfmac: Add optional lpo clock enable support -Date: Sun, 30 Jun 2024 15:36:04 +0800 [thread overview] -Message-ID: <20240630073605.2164346-5-jacobe.zang@wesion.com> (raw) -In-Reply-To: <20240630073605.2164346-1-jacobe.zang@wesion.com> +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> WiFi modules often require 32kHz clock to function. Add support to -enable the clock to PCIe driver. +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 Signed-off-by: Ondrej Jirman +Co-developed-by: Arend van Spriel +Signed-off-by: Arend van Spriel Signed-off-by: Jacobe Zang --- - .../net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) + .../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(-) ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -3,6 +3,7 @@ +--- 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; + } ++ if (IS_ERR(sdiodev->bus)) { ++ ret = PTR_ERR(sdiodev->bus); ++ 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 + 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); + 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 @@ + #include + #include + #include ++#include + + #include + #include "debug.h" +@@ -65,17 +66,21 @@ static int brcmf_of_get_country_codes(st + 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 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 + */ +@@ -105,7 +110,7 @@ void brcmf_of_probe(struct device *dev, + 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; +@@ -113,8 +118,13 @@ 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; ++ } + + err = brcmf_of_get_country_codes(dev, settings); + if (err) +@@ -123,23 +133,25 @@ void brcmf_of_probe(struct device *dev, + of_get_mac_address(np, settings->mac); + + 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_property_present(np, "interrupts")) +- return; ++ return 0; + + irq = irq_of_parse_and_map(np, 0); + 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; + } +--- 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 */ +--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c ++++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +@@ -2457,6 +2457,9 @@ brcmf_pcie_probe(struct pci_dev *pdev, c + ret = -ENOMEM; + goto fail; + } ++ ret = PTR_ERR_OR_ZERO(devinfo->settings); ++ if (ret < 0) ++ goto fail; -+#include - #include - #include - #include -@@ -2411,6 +2412,7 @@ brcmf_pcie_probe(struct pci_dev *pdev, c - struct brcmf_pciedev *pcie_bus_dev; - struct brcmf_core *core; - struct brcmf_bus *bus; -+ struct clk *clk; + bus = kzalloc(sizeof(*bus), GFP_KERNEL); + if (!bus) { +--- 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 br + .write32 = brcmf_sdio_buscore_write32, + }; - if (!id) { - id = pci_match_id(brcmf_pcie_devid_table, pdev); -@@ -2422,6 +2424,14 @@ brcmf_pcie_probe(struct pci_dev *pdev, c +-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_sdi + u32 reg_val; + u32 drivestrength; + u32 enum_base; ++ int ret = -EBADE; - brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device); + sdiodev = bus->sdiodev; + sdio_claim_host(sdiodev->func1); +@@ -4001,8 +4002,9 @@ brcmf_sdio_probe_attach(struct brcmf_sdi + 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_sdi + /* 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_sdi + if (bus->poll) + bus->pollrate = 1; -+ clk = devm_clk_get_optional_enabled(&pdev->dev, "lpo"); -+ if (IS_ERR(clk)) -+ return PTR_ERR(clk); -+ if (clk) { -+ brcmf_dbg(PCIE, "enabling 32kHz clock\n", pdev->vendor, pdev->device); -+ clk_set_rate(clk, 32768); -+ } -+ - ret = -ENOMEM; - devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL); - if (devinfo == NULL) +- return true; ++ return 0; + + fail: + sdio_release_host(sdiodev->func1); +- return false; ++ return ret; + } + + 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; + + brcmf_dbg(TRACE, "Enter\n"); + +@@ -4474,7 +4477,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) { + brcmf_err("brcmf_sdio_probe_attach failed\n"); + goto fail; + } +@@ -4546,6 +4550,8 @@ 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; + } + +--- 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 + 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); diff --git a/package/kernel/mac80211/patches/brcm/611-brcmfmac-Add-support-for-AP6275P.patch b/package/kernel/mac80211/patches/brcm/611-brcmfmac-Add-support-for-AP6275P.patch deleted file mode 100644 index cacda4bb52..0000000000 --- a/package/kernel/mac80211/patches/brcm/611-brcmfmac-Add-support-for-AP6275P.patch +++ /dev/null @@ -1,82 +0,0 @@ -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 -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 v3 5/5] wifi: brcmfmac: Add support for AP6275P -Date: Sun, 30 Jun 2024 15:36:05 +0800 [thread overview] -Message-ID: <20240630073605.2164346-6-jacobe.zang@wesion.com> (raw) -In-Reply-To: <20240630073605.2164346-1-jacobe.zang@wesion.com> - -This module features BCM43752A2 chipset. The firmware requires -randomness seeding, so enabled it. - -Co-developed-by: Ondrej Jirman -Signed-off-by: Ondrej Jirman -Signed-off-by: Jacobe Zang -Link: https://megous.com/git/linux/commit/?h=ap6275p-6.10&id=1a99573bc8ed412e60e1969c0b29d53a0e5782e0 ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 5 ++++- - .../net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 2 ++ - 2 files changed, 6 insertions(+), 1 deletion(-) - ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -71,6 +71,7 @@ BRCMF_FW_CLM_DEF(4377B3, "brcmfmac4377b3 - BRCMF_FW_CLM_DEF(4378B1, "brcmfmac4378b1-pcie"); - BRCMF_FW_CLM_DEF(4378B3, "brcmfmac4378b3-pcie"); - BRCMF_FW_CLM_DEF(4387C2, "brcmfmac4387c2-pcie"); -+BRCMF_FW_CLM_DEF(43752, "brcmfmac43752-pcie"); - - /* firmware config files */ - MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH "brcmfmac*-pcie.txt"); -@@ -105,6 +106,7 @@ static const struct brcmf_firmware_mappi - 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 */ -@@ -1721,7 +1723,7 @@ static int brcmf_pcie_download_fw_nvram( - memcpy_toio(devinfo->tcm + address, nvram, nvram_len); - brcmf_fw_nvram_free(nvram); - -- if (devinfo->otp.valid) { -+ if (devinfo->otp.valid || devinfo->ci->chip == BRCM_CC_43752_CHIP_ID) { - size_t rand_len = BRCMF_RANDOM_SEED_LENGTH; - struct brcmf_random_seed_footer footer = { - .length = cpu_to_le32(rand_len), -@@ -2710,6 +2712,7 @@ static const struct pci_device_id brcmf_ - 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_43752_DEVICE_ID, WCC), - 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), ---- 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 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/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch new file mode 100644 index 0000000000..8b98a29185 --- /dev/null +++ b/package/kernel/mac80211/patches/brcm/611-wifi-brcmfmac-add-flag-for-random-seed-during-firmware-do.patch @@ -0,0 +1,177 @@ +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> + +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 +Signed-off-by: Ondrej Jirman +Co-developed-by: Arend van Spriel +Signed-off-by: Arend van Spriel +Signed-off-by: Jacobe Zang +--- + .../broadcom/brcm80211/brcmfmac/pcie.c | 52 ++++++++++++++++--- + .../broadcom/brcm80211/include/brcm_hw_ids.h | 2 + + 2 files changed, 46 insertions(+), 8 deletions(-) + +--- 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_mappi + 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 */ +@@ -358,6 +360,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; +@@ -1720,14 +1723,14 @@ static int brcmf_pcie_download_fw_nvram( + 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"); +@@ -2399,6 +2402,37 @@ static void brcmf_pcie_debugfs_create(st + } + #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[]; + +@@ -2480,9 +2514,10 @@ brcmf_pcie_probe(struct pci_dev *pdev, c + 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); +@@ -2668,14 +2703,14 @@ static const struct dev_pm_ops brcmf_pci + 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[] = { +@@ -2703,9 +2738,10 @@ static const struct pci_device_id brcmf_ + 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 */ } + }; +--- 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 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 f873528e26..102f91aed7 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 @@ -12,7 +12,7 @@ Signed-off-by: Rafał Miłecki --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c -@@ -65,6 +65,36 @@ static int brcmf_of_get_country_codes(st +@@ -66,6 +66,36 @@ static int brcmf_of_get_country_codes(st return 0; } @@ -46,15 +46,15 @@ Signed-off-by: Rafał Miłecki + } +} + - 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) { -@@ -113,6 +143,8 @@ void brcmf_of_probe(struct device *dev, - of_node_put(root); - } +@@ -78,6 +108,8 @@ int brcmf_of_probe(struct device *dev, e + u32 irqf; + u32 val; + brcmf_of_probe_cc(dev, settings); + if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac")) - return; + return 0; diff --git a/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts b/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts index 85c922c1d8..3b4bd14633 100644 --- a/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts +++ b/target/linux/rockchip/files/arch/arm64/boot/dts/rockchip/rk3588-armsom-sige7.dts @@ -384,12 +384,9 @@ reg = <0x00300000 0 0 0 0>; #address-cells = <3>; #size-cells = <2>; - ranges; - device_type = "pci"; - bus-range = <0x30 0x3f>; wifi: wifi@30,0 { - compatible = "pci14e4,449d"; + compatible = "brcm,bcm4329-fmac", "pci14e4,449d"; reg = <0x310000 0 0 0 0>; clocks = <&hym8563>; clock-names = "lpo";