[RFC PATCH v1 00/19] rtw88: Add SDIO support

Martin Blumenstingl
2022-12-27T23:30:43Z

Recently the rtw88 driver has gained locking support for the "slow" bus
types (USB, SDIO) as part of USB support. Thanks to everyone who helped
make this happen!

Based on the USB work (especially the locking part and various
bugfixes) this series adds support for SDIO based cards. It's the
result of a collaboration between Jernej and myself. Neither of us has
access to the rtw88 datasheets. All of our work is based on studying
the RTL8822BS and RTL8822CS vendor drivers and trial and error.

Jernej and myself have tested this with RTL8822BS and RTL8822CS cards.
Other users have confirmed that RTL8821CS support is working as well.
RTL8723DS may also work (we tried our best to handle rtw_chip_wcpu_11n
where needed) but has not been tested at this point.

Jernej's results with a RTL8822BS:
- Main functionality works
- Had a case where no traffic got across the link until he issued a
scan

My results with a RTL8822CS:
- 2.4GHz and 5GHz bands are both working
- TX throughput on a 5GHz network is between 50 Mbit/s and 90 Mbit/s
- RX throughput on a 5GHz network is at 19 Mbit/s
- Sometimes there are frequent reconnects (once every 1-5 minutes)
after the link has been up for a long time (multiple hours). Today
I was unable to reproduce this though (I only had reconnect in 8
hours).

Why is this an RFC?
- It needs a through review especially by the rtw88 maintainers
- It's not clear to me how the "mmc: sdio" patch will be merged (will
Ulf take this or can we merge it thorugh the rtw88/linux wireless
driver tree?)
- Any comments / debugging hints on the reconnect / no traffic issues
(see above) are welcome
- My understanding is that there's a discussion about the rtw88 Kconfig
symbols. We're adding four new ones within this series. It's not
clear to me what the conclusion is on this topic though.
- As with most patches: testing is very welcome. If things are working
fine then a Tested-by is appreciated (with some details about the
card, throughput, ...). If something doesn't work for you: please
still report back so we can investigate that problem!

Jernej Skrabec (2):
rtw88: ps: Increase LEAVE_LPS_TRY_CNT for SDIO based chipsets
rtw88: Add support for the SDIO based RTL8822BS chipset

Martin Blumenstingl (17):
rtw88: mac: Use existing interface mask macros in rtw_pwr_seq_parser()
rtw88: pci: Change type of rtw_hw_queue_mapping() and ac_to_hwq to
enum
rtw88: pci: Change queue datatype from u8 to enum rtw_tx_queue_type
rtw88: Move enum rtw_tx_queue_type mapping code to tx.{c,h}
mmc: sdio: add Realtek SDIO vendor ID and various wifi device IDs
rtw88: rtw8821c: Add support for parsing the RTL8821CS (SDIO) efuse
rtw88: rtw8822b: Add support for parsing the RTL8822BS (SDIO) efuse
rtw88: rtw8822c: Add support for parsing the RTL8822CS (SDIO) efuse
rtw88: hci: Add an optional power_switch() callback to rtw_hci_ops
rtw88: mac: Add support for the SDIO HCI in rtw_pwr_seq_parser()
rtw88: mac: Add support for the SDIO HCI in the TX/page table setup
rtw88: sdio: Add HCI implementation for SDIO based chipsets
rtw88: mac: Add support for SDIO specifics in the power on sequence
rtw88: main: Add the rpwm_addr and cpwm_addr for SDIO based chipsets
rtw88: main: Reserve 8 bytes of extra TX headroom for SDIO based cards
rtw88: Add support for the SDIO based RTL8822CS chipset
rtw88: Add support for the SDIO based RTL8821CS chipset

drivers/net/wireless/realtek/rtw88/Kconfig | 36 +
drivers/net/wireless/realtek/rtw88/Makefile | 12 +
drivers/net/wireless/realtek/rtw88/debug.h | 1 +
drivers/net/wireless/realtek/rtw88/hci.h | 8 +
drivers/net/wireless/realtek/rtw88/mac.c | 62 +-
drivers/net/wireless/realtek/rtw88/mac.h | 1 -
drivers/net/wireless/realtek/rtw88/main.c | 9 +-
drivers/net/wireless/realtek/rtw88/pci.c | 50 +-
drivers/net/wireless/realtek/rtw88/ps.h | 2 +-
drivers/net/wireless/realtek/rtw88/reg.h | 10 +
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 9 +
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 6 +
.../net/wireless/realtek/rtw88/rtw8821cs.c | 34 +
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 10 +
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 6 +
.../net/wireless/realtek/rtw88/rtw8822bs.c | 34 +
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 9 +
drivers/net/wireless/realtek/rtw88/rtw8822c.h | 6 +
.../net/wireless/realtek/rtw88/rtw8822cs.c | 34 +
drivers/net/wireless/realtek/rtw88/sdio.c | 1242 +++++++++++++++++
drivers/net/wireless/realtek/rtw88/sdio.h | 175 +++
drivers/net/wireless/realtek/rtw88/tx.c | 41 +
drivers/net/wireless/realtek/rtw88/tx.h | 3 +
include/linux/mmc/sdio_ids.h | 9 +
24 files changed, 1763 insertions(+), 46 deletions(-)
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8821cs.c
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822bs.c
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822cs.c
create mode 100644 drivers/net/wireless/realtek/rtw88/sdio.c
create mode 100644 drivers/net/wireless/realtek/rtw88/sdio.h

--
2.39.0