On 1/10/2022 12:07 PM, Hector Martin wrote: > On 2022/01/10 18:11, Arend van Spriel wrote: >> On 1/4/2022 8:26 AM, Hector Martin wrote: >>> On DT platforms, the module-instance and antenna-sku-info properties >>> are passed in the DT. On ACPI platforms, module-instance is passed via >>> the analogous Apple device property mechanism, while the antenna SKU >>> info is instead obtained via an ACPI method that grabs it from >>> non-volatile storage. >>> >>> Add support for this, to allow proper firmware selection on Apple >>> platforms. >>> >>> Signed-off-by: Hector Martin >>> --- >>> .../broadcom/brcm80211/brcmfmac/Makefile | 2 + >>> .../broadcom/brcm80211/brcmfmac/acpi.c | 47 +++++++++++++++++++ >>> .../broadcom/brcm80211/brcmfmac/common.c | 1 + >>> .../broadcom/brcm80211/brcmfmac/common.h | 9 ++++ >>> 4 files changed, 59 insertions(+) >>> create mode 100644 drivers/net/wireless/broadcom/brcm80211/brcmfmac/acpi.c >> >> [...] >> >>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/acpi.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/acpi.c >>> new file mode 100644 >>> index 000000000000..2b1a4448b291 >>> --- /dev/null >>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/acpi.c >>> @@ -0,0 +1,47 @@ >>> +// SPDX-License-Identifier: ISC >>> +/* >>> + * Copyright The Asahi Linux Contributors >>> + */ >>> + >>> +#include >>> +#include "debug.h" >>> +#include "core.h" >>> +#include "common.h" >>> + >>> +void brcmf_acpi_probe(struct device *dev, enum brcmf_bus_type bus_type, >>> + struct brcmf_mp_device *settings) >>> +{ >>> + acpi_status status; >>> + const union acpi_object *o; >>> + struct acpi_buffer buf = {ACPI_ALLOCATE_BUFFER, NULL}; >>> + struct acpi_device *adev = ACPI_COMPANION(dev); >>> + >>> + if (!adev) >>> + return; >>> + >>> + if (!ACPI_FAILURE(acpi_dev_get_property(adev, "module-instance", >>> + ACPI_TYPE_STRING, &o))) { >>> + brcmf_dbg(INFO, "ACPI module-instance=%s\n", o->string.pointer); >>> + settings->board_type = devm_kasprintf(dev, GFP_KERNEL, >>> + "apple,%s", >>> + o->string.pointer); >>> + } else { >>> + brcmf_dbg(INFO, "No ACPI module-instance\n"); >> >> Do you need to obtain the antenna-sku when there is no module-instance? > > In principle I don't think any machines would have antenna-sku and no > module-instance, though the firmware selection will still work without > it (it'll just end up using the DMI machine name instead). Right. That was my assumption as well. I would bail out here and skip obtaining the antenna-sku. >> >>> + } >>> + >>> + status = acpi_evaluate_object(adev->handle, "RWCV", NULL, &buf); >> >> Can you clarify what the above does? What does the "RWCV" mean? > > No idea what it *means* :-) > > What it is, though, is the ACPI method name to get the antenna-sku. Wow. So much for meaning-full naming ;-)