[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250709223159.2787192-2-andrej.skvortzov@gmail.com>
Date: Thu, 10 Jul 2025 01:31:58 +0300
From: Andrey Skvortsov <andrej.skvortzov@...il.com>
To: Ping-Ke Shih <pkshih@...ltek.com>,
Kalle Valo <kvalo@...nel.org>,
linux-wireless@...r.kernel.org,
linux-kernel@...r.kernel.org,
Bitterblue Smith <rtl8821cerfe2@...il.com>,
Fiona Klute <fiona.klute@....de>
Cc: Andrey Skvortsov <andrej.skvortzov@...il.com>
Subject: [PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables
tables with register values for phy parameters initialization are
copied from vendor driver usually. Sometimes these parameters has to
be modified. When table will be regenerated, manual modifications to
it may be lost. To avoid regressions in this case new callback
mac_postinit is introduced, that is called after parameters from table
are set.
Signed-off-by: Andrey Skvortsov <andrej.skvortzov@...il.com>
---
drivers/net/wireless/realtek/rtw88/mac.c | 11 +++++++++++
drivers/net/wireless/realtek/rtw88/mac.h | 1 +
drivers/net/wireless/realtek/rtw88/main.c | 6 ++++++
drivers/net/wireless/realtek/rtw88/main.h | 1 +
4 files changed, 19 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
index 011b81c82f3ba..e05d06678050d 100644
--- a/drivers/net/wireless/realtek/rtw88/mac.c
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
@@ -1409,3 +1409,14 @@ int rtw_mac_init(struct rtw_dev *rtwdev)
return 0;
}
+
+int rtw_mac_postinit(struct rtw_dev *rtwdev)
+{
+ const struct rtw_chip_info *chip = rtwdev->chip;
+ int ret = 0;
+
+ if (chip->ops->mac_postinit)
+ ret = chip->ops->mac_postinit(rtwdev);
+
+ return 0;
+}
diff --git a/drivers/net/wireless/realtek/rtw88/mac.h b/drivers/net/wireless/realtek/rtw88/mac.h
index e92b1483728d5..b73af90ee1d7f 100644
--- a/drivers/net/wireless/realtek/rtw88/mac.h
+++ b/drivers/net/wireless/realtek/rtw88/mac.h
@@ -38,6 +38,7 @@ void rtw_write_firmware_page(struct rtw_dev *rtwdev, u32 page,
const u8 *data, u32 size);
int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw);
int rtw_mac_init(struct rtw_dev *rtwdev);
+int rtw_mac_postinit(struct rtw_dev *rtwdev);
void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop);
int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev);
int rtw_ddma_to_fw_fifo(struct rtw_dev *rtwdev, u32 ocp_src, u32 size);
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index 97756bdf57b27..b706c5a21a6c5 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -1412,6 +1412,12 @@ int rtw_power_on(struct rtw_dev *rtwdev)
chip->ops->phy_set_param(rtwdev);
+ ret = rtw_mac_postinit(rtwdev);
+ if (ret) {
+ rtw_err(rtwdev, "failed to configure mac in postinit\n");
+ goto err_off;
+ }
+
ret = rtw_hci_start(rtwdev);
if (ret) {
rtw_err(rtwdev, "failed to start hci\n");
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index b42538cce3598..43ed6d6b42919 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -858,6 +858,7 @@ struct rtw_chip_ops {
int (*power_on)(struct rtw_dev *rtwdev);
void (*power_off)(struct rtw_dev *rtwdev);
int (*mac_init)(struct rtw_dev *rtwdev);
+ int (*mac_postinit)(struct rtw_dev *rtwdev);
int (*dump_fw_crash)(struct rtw_dev *rtwdev);
void (*shutdown)(struct rtw_dev *rtwdev);
int (*read_efuse)(struct rtw_dev *rtwdev, u8 *map);
--
2.47.2
Powered by blists - more mailing lists