From: "Alvin Šipraga" <ALSI@bang-olufsen.dk>
To: Russell King <rmk+kernel@armlinux.org.uk>
Cc: Arend van Spriel <aspriel@gmail.com>,
Franky Lin <franky.lin@broadcom.com>,
Hante Meuleman <hante.meuleman@broadcom.com>,
Alyssa Rosenzweig <alyssa@rosenzweig.io>,
"asahi@lists.linux.dev" <asahi@lists.linux.dev>,
"brcm80211-dev-list.pdl@broadcom.com"
<brcm80211-dev-list.pdl@broadcom.com>,
"David S. Miller" <davem@davemloft.net>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Eric Dumazet <edumazet@google.com>,
Hector Martin <marcan@marcan.st>,
Jakub Kicinski <kuba@kernel.org>, Kalle Valo <kvalo@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Rafa__ Mi__ecki <zajec5@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
"SHA-cyfmac-dev-list@infineon.com"
<SHA-cyfmac-dev-list@infineon.com>,
Sven Peter <sven@svenpeter.dev>
Subject: Re: [PATCH wireless-next v2 07/12] brcmfmac: pcie: Perform firmware selection for Apple platforms
Date: Thu, 15 Sep 2022 15:34:26 +0000 [thread overview]
Message-ID: <20220915153425.6ugzqhvhtr55v25w@bang-olufsen.dk> (raw)
In-Reply-To: <E1oXg7s-0064vH-81@rmk-PC.armlinux.org.uk>
On Mon, Sep 12, 2022 at 10:53:12AM +0100, Russell King wrote:
> From: Hector Martin <marcan@marcan.st>
>
> On Apple platforms, firmware selection uses the following elements:
>
> Property Example Source
> ============== ======= ========================
> * Chip name 4378 Device ID
> * Chip revision B1 OTP
> * Platform shikoku DT (ARM64) or ACPI (x86)
> * Module type RASP OTP
> * Module vendor m OTP
> * Module version 6.11 OTP
> * Antenna SKU X3 DT (ARM64) or ACPI (x86)
>
> In macOS, these firmwares are stored using filenames in this format
> under /usr/share/firmware/wifi:
>
> C-4378__s-B1/P-shikoku-X3_M-RASP_V-m__m-6.11.txt
>
> To prepare firmwares for Linux, we rename these to a scheme following
> the existing brcmfmac convention:
>
> brcmfmac<chip><lower(rev)>-pcie.apple,<platform>-<mod_type>-\
> <mod_vendor>-<mod_version>-<antenna_sku>.txt
>
> The NVRAM uses all the components, while the firmware and CLM blob only
> use the chip/revision/platform/antenna_sku:
>
> brcmfmac<chip><lower(rev)>-pcie.apple,<platform>-<antenna_sku>.bin
>
> e.g.
>
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-m-6.11-X3.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-X3.bin
>
> In addition, since there are over 1000 files in total, many of which are
> symlinks or outright duplicates, we deduplicate and prune the firmware
> tree to reduce firmware filenames to fewer dimensions. For example, the
> shikoku platform (MacBook Air M1 2020) simplifies to just 4 files:
>
> brcm/brcmfmac4378b1-pcie.apple,shikoku.clm_blob
> brcm/brcmfmac4378b1-pcie.apple,shikoku.bin
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-m.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-u.txt
>
> This reduces the total file count to around 170, of which 75 are
> symlinks and 95 are regular files: 7 firmware blobs, 27 CLM blobs, and
> 61 NVRAM config files. We also slightly process NVRAM files to correct
> some formatting issues.
>
> To handle this, the driver must try the following path formats when
> looking for firmware files:
>
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-m-6.11-X3.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-m-6.11.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP-m.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-RASP.txt
> brcm/brcmfmac4378b1-pcie.apple,shikoku-X3.txt *
> brcm/brcmfmac4378b1-pcie.apple,shikoku.txt
>
> * Not relevant for NVRAM, only for firmware/CLM.
>
> The chip revision nominally comes from OTP on Apple platforms, but it
> can be mapped to the PCI revision number, so we ignore the OTP revision
> and continue to use the existing PCI revision mechanism to identify chip
> revisions, as the driver already does for other chips. Unfortunately,
> the mapping is not consistent between different chip types, so this has
> to be determined experimentally.
>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> Signed-off-by: Hector Martin <marcan@marcan.st>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
Reviewed-by: Alvin Šipraga <alsi@bang-olufsen.dk>
> .../broadcom/brcm80211/brcmfmac/pcie.c | 41 ++++++++++++++++++-
> 1 file changed, 39 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> index 76ca835378bb..3fb590a6e03b 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
> @@ -2068,8 +2068,45 @@ brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
> fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus) + 1;
> fwreq->bus_nr = devinfo->pdev->bus->number;
>
> - brcmf_dbg(PCIE, "Board: %s\n", devinfo->settings->board_type);
> - fwreq->board_types[0] = devinfo->settings->board_type;
> + /* Apple platforms with fancy firmware/NVRAM selection */
> + if (devinfo->settings->board_type &&
> + devinfo->settings->antenna_sku &&
> + devinfo->otp.valid) {
> + const struct brcmf_otp_params *otp = &devinfo->otp;
> + struct device *dev = &devinfo->pdev->dev;
> + const char **bt = fwreq->board_types;
> +
> + brcmf_dbg(PCIE, "Apple board: %s\n",
> + devinfo->settings->board_type);
> +
> + /* Example: apple,shikoku-RASP-m-6.11-X3 */
> + bt[0] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s-%s",
> + devinfo->settings->board_type,
> + otp->module, otp->vendor, otp->version,
> + devinfo->settings->antenna_sku);
> + bt[1] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s-%s",
> + devinfo->settings->board_type,
> + otp->module, otp->vendor, otp->version);
> + bt[2] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s-%s",
> + devinfo->settings->board_type,
> + otp->module, otp->vendor);
> + bt[3] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s",
> + devinfo->settings->board_type,
> + otp->module);
> + bt[4] = devm_kasprintf(dev, GFP_KERNEL, "%s-%s",
> + devinfo->settings->board_type,
> + devinfo->settings->antenna_sku);
> + bt[5] = devinfo->settings->board_type;
> +
> + if (!bt[0] || !bt[1] || !bt[2] || !bt[3] || !bt[4]) {
> + kfree(fwreq);
> + return NULL;
> + }
> +
Spurious newline?
> + } else {
> + brcmf_dbg(PCIE, "Board: %s\n", devinfo->settings->board_type);
> + fwreq->board_types[0] = devinfo->settings->board_type;
> + }
>
> return fwreq;
> }
> --
> 2.30.2
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-09-15 15:37 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-12 9:52 [PATCH wireless-next v2 0/12] Add support for bcm4378 on Apple platforms Russell King (Oracle)
2022-09-12 9:52 ` [PATCH wireless-next v2 01/12] dt-bindings: net: bcm4329-fmac: Add Apple properties & chips Russell King
2022-09-12 11:59 ` Alvin Šipraga
2022-09-12 12:04 ` Russell King (Oracle)
2022-09-12 14:01 ` Russell King (Oracle)
2022-09-12 14:13 ` Mark Kettenis
2022-09-12 14:27 ` Alvin Šipraga
2022-09-12 14:29 ` Russell King (Oracle)
2022-09-12 9:52 ` [PATCH wireless-next v2 02/12] brcmfmac: firmware: Handle per-board clm_blob files Russell King
2022-09-15 15:33 ` Alvin Šipraga
2022-09-12 9:52 ` [PATCH wireless-next v2 03/12] brcmfmac: pcie/sdio/usb: Get CLM blob via standard firmware mechanism Russell King
2022-09-15 15:33 ` Alvin Šipraga
2022-09-12 9:52 ` [PATCH wireless-next v2 04/12] brcmfmac: firmware: Support passing in multiple board_types Russell King
2022-09-15 15:34 ` Alvin Šipraga
2022-09-12 9:53 ` [PATCH wireless-next v2 05/12] brcmfmac: pcie: Read Apple OTP information Russell King
2022-09-12 9:53 ` [PATCH wireless-next v2 06/12] brcmfmac: of: Fetch Apple properties Russell King
2022-09-15 15:34 ` Alvin Šipraga
2022-09-12 9:53 ` [PATCH wireless-next v2 07/12] brcmfmac: pcie: Perform firmware selection for Apple platforms Russell King
2022-09-15 15:34 ` Alvin Šipraga [this message]
2022-09-12 9:53 ` [PATCH wireless-next v2 08/12] brcmfmac: firmware: Allow platform to override macaddr Russell King
2022-09-15 15:34 ` Alvin Šipraga
2022-09-12 9:53 ` [PATCH wireless-next v2 09/12] brcmfmac: msgbuf: Increase RX ring sizes to 1024 Russell King
2022-09-15 15:34 ` Alvin Šipraga
2022-09-12 9:53 ` [PATCH wireless-next v2 10/12] brcmfmac: pcie: Support PCIe core revisions >= 64 Russell King
2022-09-12 9:53 ` [PATCH wireless-next v2 11/12] brcmfmac: pcie: Add IDs/properties for BCM4378 Russell King
2022-09-15 15:34 ` Alvin Šipraga
2022-09-15 16:54 ` Russell King (Oracle)
2022-09-15 16:59 ` Alvin Šipraga
2022-09-16 7:31 ` Kalle Valo
2022-09-12 9:53 ` [PATCH wireless-next v2 12/12] arm64: dts: apple: Add WiFi module and antenna properties Russell King
2022-09-13 6:52 ` Kalle Valo
2022-09-13 16:30 ` Hector Martin
2022-09-16 7:28 ` Kalle Valo
2022-09-14 10:31 ` [PATCH wireless-next v2 0/12] Add support for bcm4378 on Apple platforms Arend Van Spriel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220915153425.6ugzqhvhtr55v25w@bang-olufsen.dk \
--to=alsi@bang-olufsen.dk \
--cc=SHA-cyfmac-dev-list@infineon.com \
--cc=alyssa@rosenzweig.io \
--cc=asahi@lists.linux.dev \
--cc=aspriel@gmail.com \
--cc=brcm80211-dev-list.pdl@broadcom.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=franky.lin@broadcom.com \
--cc=hante.meuleman@broadcom.com \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=kvalo@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=marcan@marcan.st \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rmk+kernel@armlinux.org.uk \
--cc=robh+dt@kernel.org \
--cc=sven@svenpeter.dev \
--cc=zajec5@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).