[PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables

Andrey Skvortsov posted 2 patches 5 months, 1 week ago
There is a newer version of this series
[PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables
Posted by Andrey Skvortsov 5 months, 1 week ago
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@gmail.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
Re: [PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables
Posted by kernel test robot 5 months, 1 week ago
Hi Andrey,

kernel test robot noticed the following build warnings:

[auto build test WARNING on wireless-next/main]
[also build test WARNING on wireless/main linus/master v6.16-rc5 next-20250710]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Andrey-Skvortsov/wifi-rtw88-introduce-callback-to-override-phy-parameters-from-tables/20250710-063838
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link:    https://lore.kernel.org/r/20250709223159.2787192-2-andrej.skvortzov%40gmail.com
patch subject: [PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20250711/202507110636.fqI1Fyh7-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250711/202507110636.fqI1Fyh7-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507110636.fqI1Fyh7-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/net/wireless/realtek/rtw88/mac.c: In function 'rtw_mac_postinit':
>> drivers/net/wireless/realtek/rtw88/mac.c:1416:13: warning: variable 'ret' set but not used [-Wunused-but-set-variable]
    1416 |         int ret = 0;
         |             ^~~


vim +/ret +1416 drivers/net/wireless/realtek/rtw88/mac.c

  1412	
  1413	int rtw_mac_postinit(struct rtw_dev *rtwdev)
  1414	{
  1415		const struct rtw_chip_info *chip = rtwdev->chip;
> 1416		int ret = 0;

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
RE: [PATCH v2 1/2] wifi: rtw88: introduce callback to override phy parameters from tables
Posted by Ping-Ke Shih 5 months, 1 week ago
Andrey Skvortsov <andrej.skvortzov@gmail.com> wrote:
> 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@gmail.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;

This initializer is not necessary. See [1]

[1] http://wifibot.sipsolutions.net/results/980760/14150387/build_clang/stderr

> +
> +       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