The introduction of support for Apple board types inadvertently changed the precedence order, causing hybrid SMBIOS+DT platforms to look up the firmware using the DMI information instead of the device tree compatible to generate the board type. Revert back to the old behavior, as affected platforms use firmwares named after the DT compatible.
Fixes: 7682de8b3351 ("wifi: brcmfmac: of: Fetch Apple properties")
[1] https://bugzilla.opensuse.org/show_bug.cgi?id=1206697#c13
Cc: stable@vger.kernel.org Signed-off-by: Ivan T. Ivanov iivanov@suse.de Reviewed-by: Hector Martin marcan@marcan.st --- Changes since v1 Rewrite commit message according feedback. https://lore.kernel.org/all/20230106072746.29516-1-iivanov@suse.de/
drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c index a83699de01ec..fdd0c9abc1a1 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c @@ -79,7 +79,8 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, /* Apple ARM64 platforms have their own idea of board type, passed in * via the device tree. They also have an antenna SKU parameter */ - if (!of_property_read_string(np, "brcm,board-type", &prop)) + err = of_property_read_string(np, "brcm,board-type", &prop); + if (!err) settings->board_type = prop;
if (!of_property_read_string(np, "apple,antenna-sku", &prop)) @@ -87,7 +88,7 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
/* Set board-type to the first string of the machine compatible prop */ root = of_find_node_by_path("/"); - if (root && !settings->board_type) { + if (root && err) { char *board_type; const char *tmp;
On 1/6/2023 2:19 PM, Ivan T. Ivanov wrote:
The introduction of support for Apple board types inadvertently changed the precedence order, causing hybrid SMBIOS+DT platforms to look up the firmware using the DMI information instead of the device tree compatible to generate the board type. Revert back to the old behavior, as affected platforms use firmwares named after the DT compatible.
Fixes: 7682de8b3351 ("wifi: brcmfmac: of: Fetch Apple properties")
[1] https://bugzilla.opensuse.org/show_bug.cgi?id=1206697#c13
Cc: stable@vger.kernel.org Signed-off-by: Ivan T. Ivanov iivanov@suse.de
Looks good to me. I do have a question about the devicetree node for brcmfmac. The driver does a compatible check against "brcm,bcm4329-fmac". I actually expect all devicetree specifications to use this. That said I noticed the check for it in brcmf_of_probe() should be moved so it is the first check done.
Reviewed-by: Arend van Spriel arend.vanspriel@broadcom.com
Reviewed-by: Hector Martin marcan@marcan.st
Changes since v1 Rewrite commit message according feedback. https://lore.kernel.org/all/20230106072746.29516-1-iivanov@suse.de/
drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c index a83699de01ec..fdd0c9abc1a1 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c @@ -79,7 +79,8 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, /* Apple ARM64 platforms have their own idea of board type, passed in * via the device tree. They also have an antenna SKU parameter */
- if (!of_property_read_string(np, "brcm,board-type", &prop))
- err = of_property_read_string(np, "brcm,board-type", &prop);
- if (!err) settings->board_type = prop;
if (!of_property_read_string(np, "apple,antenna-sku", &prop)) @@ -87,7 +88,7 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, /* Set board-type to the first string of the machine compatible prop */ root = of_find_node_by_path("/");
- if (root && !settings->board_type) {
- if (root && err) { char *board_type; const char *tmp;
On 07/01/2023 01.21, Arend Van Spriel wrote:
On 1/6/2023 2:19 PM, Ivan T. Ivanov wrote:
The introduction of support for Apple board types inadvertently changed the precedence order, causing hybrid SMBIOS+DT platforms to look up the firmware using the DMI information instead of the device tree compatible to generate the board type. Revert back to the old behavior, as affected platforms use firmwares named after the DT compatible.
Fixes: 7682de8b3351 ("wifi: brcmfmac: of: Fetch Apple properties")
[1] https://bugzilla.opensuse.org/show_bug.cgi?id=1206697#c13
Cc: stable@vger.kernel.org Signed-off-by: Ivan T. Ivanov iivanov@suse.de
Looks good to me. I do have a question about the devicetree node for brcmfmac. The driver does a compatible check against "brcm,bcm4329-fmac". I actually expect all devicetree specifications to use this. That said I noticed the check for it in brcmf_of_probe() should be moved so it is the first check done.
We're talking about the machine compatible in the root OF node, not the compatible for the device itself. That's how firmware selection for non-Apple platforms works (and has worked since before the Apple stuff got introduced): first try the machine type which is either derived from DMI info or the root compatible, and fall back to generic firmware.
The device compatible is indeed always brcm,bcm4329-fmac.
- Hector
On Fri, Jan 6, 2023 at 1:19 PM Ivan T. Ivanov iivanov@suse.de wrote:
The introduction of support for Apple board types inadvertently changed the precedence order, causing hybrid SMBIOS+DT platforms to look up the firmware using the DMI information instead of the device tree compatible to generate the board type. Revert back to the old behavior, as affected platforms use firmwares named after the DT compatible.
Fixes: 7682de8b3351 ("wifi: brcmfmac: of: Fetch Apple properties")
[1] https://bugzilla.opensuse.org/show_bug.cgi?id=1206697#c13
Cc: stable@vger.kernel.org Signed-off-by: Ivan T. Ivanov iivanov@suse.de Reviewed-by: Hector Martin marcan@marcan.st
Tested-by: Peter Robinson pbrobinson@gmail.com
Tested on a RPi3B+, a RPi4B and a Rockchips device with 6.2rc2 and it fixed the issue I had seen on Fedora.
Thanks
Changes since v1 Rewrite commit message according feedback. https://lore.kernel.org/all/20230106072746.29516-1-iivanov@suse.de/
drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c index a83699de01ec..fdd0c9abc1a1 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c @@ -79,7 +79,8 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, /* Apple ARM64 platforms have their own idea of board type, passed in * via the device tree. They also have an antenna SKU parameter */
if (!of_property_read_string(np, "brcm,board-type", &prop))
err = of_property_read_string(np, "brcm,board-type", &prop);
if (!err) settings->board_type = prop; if (!of_property_read_string(np, "apple,antenna-sku", &prop))
@@ -87,7 +88,7 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
/* Set board-type to the first string of the machine compatible prop */ root = of_find_node_by_path("/");
if (root && !settings->board_type) {
if (root && err) { char *board_type; const char *tmp;
-- 2.35.3
"Ivan T. Ivanov" iivanov@suse.de wrote:
The introduction of support for Apple board types inadvertently changed the precedence order, causing hybrid SMBIOS+DT platforms to look up the firmware using the DMI information instead of the device tree compatible to generate the board type. Revert back to the old behavior, as affected platforms use firmwares named after the DT compatible.
Fixes: 7682de8b3351 ("wifi: brcmfmac: of: Fetch Apple properties")
[1] https://bugzilla.opensuse.org/show_bug.cgi?id=1206697#c13
Cc: stable@vger.kernel.org Signed-off-by: Ivan T. Ivanov iivanov@suse.de Reviewed-by: Hector Martin marcan@marcan.st Reviewed-by: Arend van Spriel arend.vanspriel@broadcom.com Tested-by: Peter Robinson pbrobinson@gmail.com
Dave applied this directly to net tree:
linux-stable-mirror@lists.linaro.org