From: Jérôme Pouiller <jerome.pouiller@xxxxxxxxxx> Hello, I think the wfx driver is now mature enough to be accepted in the drivers/net/wireless directory. The firmware is now a part of the linux-firmware repository since relase 20210315[1]. The PDS files (= antenna configurations) are still missing. I will send them as soon as Kalle will have validated the new format. [1]: https://lore.kernel.org/linux-firmware/2833354.gXvVfaC4I7@pc-42/ As requested by Kalle[2], I send one file per patch. At the end, all the patches (or at least the patches 3 to 24) will be squashed (therefore, I didn't bother to write real commit messages). [2]: https://lore.kernel.org/lkml/87ft6p2n0h.fsf@xxxxxxxxxxxxxx/ Here is a diagram of the global architecture that may help to understand the code: ,------------------------------------. | mac80211 | `------------------------------------' ,------------+-----------+-----------. | sta | | | | scan | | | | main | | | +------------+ data_tx | | | key | | data_rx | | hif_tx_mib | queue | | | hif_tx | | | | hif_rx | | | | hif_api_* | | | +------------+-----------+-----------+--------. | bh | fwio | +------------------------------------+--------+ | hwio | +---------------------------------------------+ | bus_sdio | | bus_spi | `---------------------------------------------' ,---------------------------------------------. | spi / sdio | `---------------------------------------------' Roughly, I have sent the files from the bottom to the top. Rob, I have still a warning with "make DT_CHECKER_FLAGS=-m dt_binding_check": .../Documentation/devicetree/bindings/net/wireless/silabs,wfx.example.dt.yaml: wifi@1: compatible: 'anyOf' conditional failed, one must be fixed: ['silabs,brd8022a', 'silabs,wf200'] is too long Additional items are not allowed ('silabs,wf200' was unexpected) 'silabs,wf200' was expected 'silabs,brd4001a' was expected 'silabs,brd8023a' was expected From schema: .../Documentation/devicetree/bindings/net/wireless/silabs,wfx.yaml My understanding of "anyOf" is that multiple values should be accepted (else, I would use "oneOf"). v9: - Rebase on mmc tree (ulfh/next, 356f3f2c5756). Indeed, I rely on the series named "mmc: core: extend mmc_fixup_device and transplant ti,wl1251 quirks from to be retired omap_hsmmc" by "H. Nikolaus Schaller". This work is only included in the mmc tree. Anyway, I think the merge of mmc tree into Linus's tree is going to happen soon. - Locate the SDIO quirks into mmc/core/quirks.h. (Ulf, Pali) - Change the PDS format. It is now based on TLV. The tool to generate these files is ready, but I have not yet published it. (Kalle) - Fix the firmware location. It didn't match with linux-firmware. I take this opportunity to relocate these file into wfx/ instead of silabs/. I am going to send a PR to linux-firmware to reflect this changes when this PR will be accepted. (Kalle) - In the v8, some parts were formatted in 80 columns and somes in 100 columns. Unify the coding style by applying 100 columns rule everywhere. Also change structs alignement in some places. - Improve output of "make DT_CHECKER_FLAGS=-m dt_binding_check" (but not yet perfect, see above) (Rob) v8: - Change the way the DT is handled. The user can now specify the name of the board (= chip + antenna) he use. It easier for board designers to add new entries. I plan to send a PR to linux-firmware to include PDS files of the developpement boards belong the firmware (I also plan to relocate these file into wfx/ instead of silabs/). (Kalle, Pali) - Prefix visible functions and structs with "wfx_". I mostly kept the code under 80 columns. (Kalle, Pali, Greg) - Remove support for force_ps_timeout for now. (Kalle) - Fix licenses of Makefile, Kconfig and hif_api*.h. (Kalle) - Do not mix and match endianess in struct hif_ind_startup. (Kalle) - Remove magic values. (Kalle) - Use IS_ALIGNED(). (BTW, PTR_IS_ALIGNED() does not exist?) (Kalle) - I have also noticed that some headers files did not declare all the struct they used. v7: - Update location of mmc-pwrseq-simple.txt (Rob) v6: - Rebase on last staging-next (roughtly somewhere after the 5.15 merge window). So, this series include the patches from: https://lore.kernel.org/netdev/20210913130203.1903622-1-Jerome.Pouiller@xxxxxxxxxx/ v5: - Add reference to the PR to linux-firmware in the cover letter - Rebase on last staging tree (that mainly include commit 6efed0a69794 "staging: wfx: fix possible panic with re-queued frames" and a few cosmetics changes) - Remove useless trailing spaces in DT binding (Rob) - Add a commit message in the patch 2 since I am not sure it will be squashed with the other (Rob) v4: - Rebase on last staging tree - Add 'additionalProperties: false' to the DT specification (I made that change blindly because I am able to reproduce Rob's error) (Rob) - Replace C++ comments with Ansi C comments (Kalle) - Check that existing Ansi C comments comply with net/ "compact" style - Drop one obsolete comment - Remove comments after '#endif' in header files - Remove macro redefinitions in hif_api_general.h (Kalle) - Replace compiletime_assert() with BUILD_BUG_ON_MSG() (Kalle) - Rename ieee80211_is_action_back() (Kalle) - Add a comment explaining how the PDS is sent to the device (Kalle) - Add a comment about case where CONFIG_MMC==m in the Makefile (Kalle) - Fix irrevelant comment about CONFIG_VMAP_STACK (Kalle) - Talk about the unreliable SDIO Vendor ID in the Kconfig help (Kalle) - Mention the firmware status in the cover letter (Kalle) - Fix misaligned function arguments in key.c v3: - dt-bindings: Rename config-file property (Rob) - dt-bindings: No additional properties are allowed (spi-max-frequency is already listed) (Rob) - dt-bindings: Remove references for mac-address properties (Rob) - Rebase on staging/staging-next v2: - dt-bindings: Improve device description and add link to the datasheet (Rob) - dt-bindings: Add blank lines between each DT property (Rob) - dt-bindings: Explicitly mention mac-address and local-mac-address and add references to ethernet-controller.yaml (Rob) - dt-bindings: "config-file" is not for development/debug (Rob) - dt-bindings: Remove description of "spi-max-frequency" (Rob) - dt-bindings: Use "folded scalar" syntax instead of escaping the colons - bus_sdio.c: A compatible node in the DT is now mandatory to probe the device. Also change documentation of dt-bindings accordingly (Pali, Ulf) - bus_sdio.c: Move SDIO IDs to sdio_ids.h (Pali) - bh.c: Import patch "staging: wfx: fix test on return value of gpiod_get_value()" (Nathan) - data_tx.c: Import patch "staging: wfx: fix use of uninitialized pointer" - sta.c: Import patch "staging: wfx: make a const array static, makes object smaller" (Colin) v1: - Drop the function name in the warning message (Kalle) - Replace goto by return in wfx_send_pdata_pds() (Kalle, Dan) - Improve error label in wfx_send_pdata_pds() (Kalle) Jérôme Pouiller (24): mmc: sdio: add SDIO IDs for Silabs WF200 chip dt-bindings: introduce silabs,wfx.yaml wfx: add Makefile/Kconfig wfx: add wfx.h wfx: add main.c/main.h wfx: add bus.h wfx: add bus_spi.c wfx: add bus_sdio.c wfx: add hwio.c/hwio.h wfx: add fwio.c/fwio.h wfx: add bh.c/bh.h wfx: add hif_api_*.h wfx: add hif_tx*.c/hif_tx*.h wfx: add key.c/key.h wfx: add hif_rx.c/hif_rx.h wfx: add data_rx.c/data_rx.h wfx: add queue.c/queue.h wfx: add data_tx.c/data_tx.h wfx: add sta.c/sta.h wfx: add scan.c/scan.h wfx: add debug.c/debug.h wfx: add traces.h wfx: remove from the staging area wfx: get out from the staging area .../bindings/net/wireless/silabs,wfx.yaml | 67 ++-- MAINTAINERS | 3 +- drivers/mmc/core/quirks.h | 5 + drivers/net/wireless/Kconfig | 1 + drivers/net/wireless/Makefile | 1 + drivers/net/wireless/silabs/Kconfig | 18 + drivers/net/wireless/silabs/Makefile | 3 + .../wireless/silabs}/wfx/Kconfig | 5 + .../wireless/silabs}/wfx/Makefile | 3 +- .../{staging => net/wireless/silabs}/wfx/bh.c | 67 ++-- .../{staging => net/wireless/silabs}/wfx/bh.h | 1 + .../wireless/silabs}/wfx/bus.h | 8 +- .../wireless/silabs}/wfx/bus_sdio.c | 103 ++--- .../wireless/silabs}/wfx/bus_spi.c | 104 ++++-- .../wireless/silabs}/wfx/data_rx.c | 10 +- .../wireless/silabs}/wfx/data_rx.h | 5 +- .../wireless/silabs}/wfx/data_tx.c | 144 +++---- .../wireless/silabs}/wfx/data_tx.h | 20 +- .../wireless/silabs}/wfx/debug.c | 80 ++-- .../wireless/silabs}/wfx/debug.h | 6 +- .../wireless/silabs}/wfx/fwio.c | 113 +++--- .../wireless/silabs}/wfx/fwio.h | 0 .../wireless/silabs}/wfx/hif_api_cmd.h | 151 ++++---- .../wireless/silabs}/wfx/hif_api_general.h | 64 ++-- .../wireless/silabs}/wfx/hif_api_mib.h | 68 ++-- .../wireless/silabs}/wfx/hif_rx.c | 168 ++++----- .../wireless/silabs}/wfx/hif_rx.h | 0 .../wireless/silabs}/wfx/hif_tx.c | 195 +++++----- drivers/net/wireless/silabs/wfx/hif_tx.h | 61 +++ drivers/net/wireless/silabs/wfx/hif_tx_mib.c | 308 +++++++++++++++ drivers/net/wireless/silabs/wfx/hif_tx_mib.h | 48 +++ drivers/net/wireless/silabs/wfx/hwio.c | 335 +++++++++++++++++ .../wireless/silabs}/wfx/hwio.h | 35 +- .../wireless/silabs}/wfx/key.c | 84 ++--- .../wireless/silabs}/wfx/key.h | 5 +- .../wireless/silabs}/wfx/main.c | 249 ++++++------- .../wireless/silabs}/wfx/main.h | 13 +- .../wireless/silabs}/wfx/queue.c | 51 ++- .../wireless/silabs}/wfx/queue.h | 13 +- .../wireless/silabs}/wfx/scan.c | 27 +- .../wireless/silabs}/wfx/scan.h | 0 .../wireless/silabs}/wfx/sta.c | 207 +++++----- .../wireless/silabs}/wfx/sta.h | 22 +- .../wireless/silabs}/wfx/traces.h | 33 +- .../wireless/silabs}/wfx/wfx.h | 98 ++--- drivers/staging/Kconfig | 1 - drivers/staging/Makefile | 1 - drivers/staging/wfx/TODO | 6 - drivers/staging/wfx/hif_tx.h | 60 --- drivers/staging/wfx/hif_tx_mib.c | 324 ---------------- drivers/staging/wfx/hif_tx_mib.h | 49 --- drivers/staging/wfx/hwio.c | 352 ------------------ include/linux/mmc/sdio_ids.h | 7 + 53 files changed, 1809 insertions(+), 1993 deletions(-) rename {drivers/staging/wfx/Documentation => Documentation}/devicetree/bindings/net/wireless/silabs,wfx.yaml (67%) create mode 100644 drivers/net/wireless/silabs/Kconfig create mode 100644 drivers/net/wireless/silabs/Makefile rename drivers/{staging => net/wireless/silabs}/wfx/Kconfig (60%) rename drivers/{staging => net/wireless/silabs}/wfx/Makefile (76%) rename drivers/{staging => net/wireless/silabs}/wfx/bh.c (81%) rename drivers/{staging => net/wireless/silabs}/wfx/bh.h (96%) rename drivers/{staging => net/wireless/silabs}/wfx/bus.h (80%) rename drivers/{staging => net/wireless/silabs}/wfx/bus_sdio.c (69%) rename drivers/{staging => net/wireless/silabs}/wfx/bus_spi.c (67%) rename drivers/{staging => net/wireless/silabs}/wfx/data_rx.c (93%) rename drivers/{staging => net/wireless/silabs}/wfx/data_rx.h (69%) rename drivers/{staging => net/wireless/silabs}/wfx/data_tx.c (79%) rename drivers/{staging => net/wireless/silabs}/wfx/data_tx.h (72%) rename drivers/{staging => net/wireless/silabs}/wfx/debug.c (78%) rename drivers/{staging => net/wireless/silabs}/wfx/debug.h (65%) rename drivers/{staging => net/wireless/silabs}/wfx/fwio.c (75%) rename drivers/{staging => net/wireless/silabs}/wfx/fwio.h (100%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_api_cmd.h (80%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_api_general.h (85%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_api_mib.h (86%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_rx.c (62%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_rx.h (100%) rename drivers/{staging => net/wireless/silabs}/wfx/hif_tx.c (64%) create mode 100644 drivers/net/wireless/silabs/wfx/hif_tx.h create mode 100644 drivers/net/wireless/silabs/wfx/hif_tx_mib.c create mode 100644 drivers/net/wireless/silabs/wfx/hif_tx_mib.h create mode 100644 drivers/net/wireless/silabs/wfx/hwio.c rename drivers/{staging => net/wireless/silabs}/wfx/hwio.h (62%) rename drivers/{staging => net/wireless/silabs}/wfx/key.c (70%) rename drivers/{staging => net/wireless/silabs}/wfx/key.h (65%) rename drivers/{staging => net/wireless/silabs}/wfx/main.c (69%) rename drivers/{staging => net/wireless/silabs}/wfx/main.h (79%) rename drivers/{staging => net/wireless/silabs}/wfx/queue.c (86%) rename drivers/{staging => net/wireless/silabs}/wfx/queue.h (79%) rename drivers/{staging => net/wireless/silabs}/wfx/scan.c (81%) rename drivers/{staging => net/wireless/silabs}/wfx/scan.h (100%) rename drivers/{staging => net/wireless/silabs}/wfx/sta.c (78%) rename drivers/{staging => net/wireless/silabs}/wfx/sta.h (81%) rename drivers/{staging => net/wireless/silabs}/wfx/traces.h (94%) rename drivers/{staging => net/wireless/silabs}/wfx/wfx.h (50%) delete mode 100644 drivers/staging/wfx/TODO delete mode 100644 drivers/staging/wfx/hif_tx.h delete mode 100644 drivers/staging/wfx/hif_tx_mib.c delete mode 100644 drivers/staging/wfx/hif_tx_mib.h delete mode 100644 drivers/staging/wfx/hwio.c -- 2.34.1