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 >
WARNING: multiple messages have this Message-ID (diff)
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:34 UTC|newest] Thread overview: 68+ 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 ` 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 9:52 ` Russell King 2022-09-12 11:59 ` Alvin Šipraga 2022-09-12 11:59 ` Alvin Šipraga 2022-09-12 12:04 ` Russell King (Oracle) 2022-09-12 12:04 ` Russell King (Oracle) 2022-09-12 14:01 ` Russell King (Oracle) 2022-09-12 14:01 ` Russell King (Oracle) 2022-09-12 14:13 ` Mark Kettenis 2022-09-12 14:13 ` Mark Kettenis 2022-09-12 14:27 ` Alvin Šipraga 2022-09-12 14:27 ` Alvin Šipraga 2022-09-12 14:29 ` Russell King (Oracle) 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-12 9:52 ` Russell King 2022-09-15 15:33 ` Alvin Šipraga 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-12 9:52 ` Russell King 2022-09-15 15:33 ` Alvin Šipraga 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-12 9:52 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga 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 ` Russell King 2022-09-12 9:53 ` [PATCH wireless-next v2 06/12] brcmfmac: of: Fetch Apple properties Russell King 2022-09-12 9:53 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga 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-12 9:53 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga [this message] 2022-09-15 15:34 ` Alvin Šipraga 2022-09-12 9:53 ` [PATCH wireless-next v2 08/12] brcmfmac: firmware: Allow platform to override macaddr Russell King 2022-09-12 9:53 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga 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-12 9:53 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga 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 ` Russell King 2022-09-12 9:53 ` [PATCH wireless-next v2 11/12] brcmfmac: pcie: Add IDs/properties for BCM4378 Russell King 2022-09-12 9:53 ` Russell King 2022-09-15 15:34 ` Alvin Šipraga 2022-09-15 15:34 ` Alvin Šipraga 2022-09-15 16:54 ` Russell King (Oracle) 2022-09-15 16:54 ` Russell King (Oracle) 2022-09-15 16:59 ` Alvin Šipraga 2022-09-15 16:59 ` Alvin Šipraga 2022-09-16 7:31 ` Kalle Valo 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-12 9:53 ` Russell King 2022-09-13 6:52 ` Kalle Valo 2022-09-13 6:52 ` Kalle Valo 2022-09-13 16:30 ` Hector Martin 2022-09-13 16:30 ` Hector Martin 2022-09-16 7:28 ` Kalle Valo 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 2022-09-14 10:31 ` 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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.