Skip to content

Commit

Permalink
Merge tag 'rtw-next-2025-01-12' of https://github.com/pkshih/rtw
Browse files Browse the repository at this point in the history
rtw-next patches for v6.14

rtl8xxxu, rtlwifi and rtw88 fix field issues reported by users.
rtw89 is ongoing to implement MLO and fix issues during the development.

Major changes:

rtw88:

 - support LED blinking

rtw89:

 - support RTL8922AE-VS chip
  • Loading branch information
Kalle Valo committed Jan 15, 2025
2 parents 1a0d247 + 4b6652b commit 80524ab
Show file tree
Hide file tree
Showing 44 changed files with 762 additions and 122 deletions.
2 changes: 1 addition & 1 deletion drivers/net/wireless/realtek/rtl8xxxu/8188e.c
Original file line number Diff line number Diff line change
Expand Up @@ -1860,7 +1860,7 @@ struct rtl8xxxu_fileops rtl8188eu_fops = {
.set_crystal_cap = rtl8188f_set_crystal_cap,
.cck_rssi = rtl8188e_cck_rssi,
.led_classdev_brightness_set = rtl8188eu_led_brightness_set,
.writeN_block_size = 128,
.writeN_block_size = 196,
.rx_desc_size = sizeof(struct rtl8xxxu_rxdesc16),
.tx_desc_size = sizeof(struct rtl8xxxu_txdesc32),
.has_tx_report = 1,
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/realtek/rtlwifi/rtl8821ae/fw.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,9 @@ enum rtl8821a_h2c_cmd {

/* _MEDIA_STATUS_RPT_PARM_CMD1 */
#define SET_H2CCMD_MSRRPT_PARM_OPMODE(__cmd, __value) \
u8p_replace_bits(__cmd + 1, __value, BIT(0))
u8p_replace_bits(__cmd, __value, BIT(0))
#define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__cmd, __value) \
u8p_replace_bits(__cmd + 1, __value, BIT(1))
u8p_replace_bits(__cmd, __value, BIT(1))

/* AP_OFFLOAD */
#define SET_H2CCMD_AP_OFFLOAD_ON(__cmd, __value) \
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/realtek/rtw88/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ rtw88_core-y += main.o \

rtw88_core-$(CONFIG_PM) += wow.o

rtw88_core-$(CONFIG_LEDS_CLASS) += led.o

obj-$(CONFIG_RTW88_8822B) += rtw88_8822b.o
rtw88_8822b-objs := rtw8822b.o rtw8822b_table.o

Expand Down
7 changes: 3 additions & 4 deletions drivers/net/wireless/realtek/rtw88/fw.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,9 @@ void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb)
case C2H_RA_RPT:
rtw_fw_ra_report_handle(rtwdev, c2h->payload, len);
break;
case C2H_ADAPTIVITY:
rtw_fw_adaptivity_result(rtwdev, c2h->payload, len);
break;
default:
rtw_dbg(rtwdev, RTW_DBG_FW, "C2H 0x%x isn't handled\n", c2h->id);
break;
Expand Down Expand Up @@ -367,10 +370,6 @@ void rtw_fw_c2h_cmd_rx_irqsafe(struct rtw_dev *rtwdev, u32 pkt_offset,
rtw_fw_scan_result(rtwdev, c2h->payload, len);
dev_kfree_skb_any(skb);
break;
case C2H_ADAPTIVITY:
rtw_fw_adaptivity_result(rtwdev, c2h->payload, len);
dev_kfree_skb_any(skb);
break;
default:
/* pass offset for further operation */
*((u32 *)skb->cb) = pkt_offset;
Expand Down
73 changes: 73 additions & 0 deletions drivers/net/wireless/realtek/rtw88/led.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* Copyright(c) 2025 Realtek Corporation
*/

#include "main.h"
#include "debug.h"
#include "led.h"

static int rtw_led_set_blocking(struct led_classdev *led,
enum led_brightness brightness)
{
struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev);

rtwdev->chip->ops->led_set(led, brightness);

return 0;
}

void rtw_led_init(struct rtw_dev *rtwdev)
{
static const struct ieee80211_tpt_blink rtw_tpt_blink[] = {
{ .throughput = 0 * 1024, .blink_time = 334 },
{ .throughput = 1 * 1024, .blink_time = 260 },
{ .throughput = 5 * 1024, .blink_time = 220 },
{ .throughput = 10 * 1024, .blink_time = 190 },
{ .throughput = 20 * 1024, .blink_time = 170 },
{ .throughput = 50 * 1024, .blink_time = 150 },
{ .throughput = 70 * 1024, .blink_time = 130 },
{ .throughput = 100 * 1024, .blink_time = 110 },
{ .throughput = 200 * 1024, .blink_time = 80 },
{ .throughput = 300 * 1024, .blink_time = 50 },
};
struct led_classdev *led = &rtwdev->led_cdev;
int err;

if (!rtwdev->chip->ops->led_set)
return;

if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_PCIE)
led->brightness_set = rtwdev->chip->ops->led_set;
else
led->brightness_set_blocking = rtw_led_set_blocking;

snprintf(rtwdev->led_name, sizeof(rtwdev->led_name),
"rtw88-%s", dev_name(rtwdev->dev));

led->name = rtwdev->led_name;
led->max_brightness = LED_ON;
led->default_trigger =
ieee80211_create_tpt_led_trigger(rtwdev->hw,
IEEE80211_TPT_LEDTRIG_FL_RADIO,
rtw_tpt_blink,
ARRAY_SIZE(rtw_tpt_blink));

err = led_classdev_register(rtwdev->dev, led);
if (err) {
rtw_warn(rtwdev, "Failed to register the LED, error %d\n", err);
return;
}

rtwdev->led_registered = true;
}

void rtw_led_deinit(struct rtw_dev *rtwdev)
{
struct led_classdev *led = &rtwdev->led_cdev;

if (!rtwdev->led_registered)
return;

rtwdev->chip->ops->led_set(led, LED_OFF);
led_classdev_unregister(led);
}
25 changes: 25 additions & 0 deletions drivers/net/wireless/realtek/rtw88/led.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/* Copyright(c) 2025 Realtek Corporation
*/

#ifndef __RTW_LED_H
#define __RTW_LED_H

#ifdef CONFIG_LEDS_CLASS

void rtw_led_init(struct rtw_dev *rtwdev);
void rtw_led_deinit(struct rtw_dev *rtwdev);

#else

static inline void rtw_led_init(struct rtw_dev *rtwdev)
{
}

static inline void rtw_led_deinit(struct rtw_dev *rtwdev)
{
}

#endif

#endif
21 changes: 12 additions & 9 deletions drivers/net/wireless/realtek/rtw88/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "bf.h"
#include "sar.h"
#include "sdio.h"
#include "led.h"

bool rtw_disable_lps_deep_mode;
EXPORT_SYMBOL(rtw_disable_lps_deep_mode);
Expand Down Expand Up @@ -1217,7 +1218,6 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
u8 wireless_set;
u8 bw_mode;
u8 rate_id;
u8 rf_type = RF_1T1R;
u8 stbc_en = 0;
u8 ldpc_en = 0;
u8 tx_num = 1;
Expand Down Expand Up @@ -1302,13 +1302,10 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
break;
}

if (sta->deflink.vht_cap.vht_supported && ra_mask & 0xffc00000) {
if (sta->deflink.vht_cap.vht_supported && ra_mask & 0xffc00000)
tx_num = 2;
rf_type = RF_2T2R;
} else if (sta->deflink.ht_cap.ht_supported && ra_mask & 0xfff00000) {
else if (sta->deflink.ht_cap.ht_supported && ra_mask & 0xfff00000)
tx_num = 2;
rf_type = RF_2T2R;
}

rate_id = get_rate_id(wireless_set, bw_mode, tx_num);

Expand All @@ -1319,7 +1316,6 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
si->bw_mode = bw_mode;
si->stbc_en = stbc_en;
si->ldpc_en = ldpc_en;
si->rf_type = rf_type;
si->sgi_enable = is_support_sgi;
si->vht_enable = is_vht_enable;
si->ra_mask = ra_mask;
Expand Down Expand Up @@ -2297,16 +2293,18 @@ int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
return ret;
}

rtw_led_init(rtwdev);

ret = ieee80211_register_hw(hw);
if (ret) {
rtw_err(rtwdev, "failed to register hw\n");
return ret;
goto led_deinit;
}

ret = rtw_regd_hint(rtwdev);
if (ret) {
rtw_err(rtwdev, "failed to hint regd\n");
return ret;
goto led_deinit;
}

rtw_debugfs_init(rtwdev);
Expand All @@ -2315,6 +2313,10 @@ int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
rtwdev->bf_info.bfer_su_cnt = 0;

return 0;

led_deinit:
rtw_led_deinit(rtwdev);
return ret;
}
EXPORT_SYMBOL(rtw_register_hw);

Expand All @@ -2325,6 +2327,7 @@ void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
ieee80211_unregister_hw(hw);
rtw_unset_supported_band(hw, chip);
rtw_debugfs_deinit(rtwdev);
rtw_led_deinit(rtwdev);
}
EXPORT_SYMBOL(rtw_unregister_hw);

Expand Down
10 changes: 7 additions & 3 deletions drivers/net/wireless/realtek/rtw88/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -510,12 +510,12 @@ struct rtw_5g_txpwr_idx {
struct rtw_5g_vht_ns_pwr_idx_diff vht_2s_diff;
struct rtw_5g_vht_ns_pwr_idx_diff vht_3s_diff;
struct rtw_5g_vht_ns_pwr_idx_diff vht_4s_diff;
};
} __packed;

struct rtw_txpwr_idx {
struct rtw_2g_txpwr_idx pwr_idx_2g;
struct rtw_5g_txpwr_idx pwr_idx_5g;
};
} __packed;

struct rtw_channel_params {
u8 center_chan;
Expand Down Expand Up @@ -757,7 +757,6 @@ struct rtw_sta_info {
u8 mac_id;
u8 rate_id;
enum rtw_bandwidth bw_mode;
enum rtw_rf_type rf_type;
u8 stbc_en:2;
u8 ldpc_en:2;
bool sgi_enable;
Expand Down Expand Up @@ -888,6 +887,7 @@ struct rtw_chip_ops {
bool is_tx2_path);
void (*config_txrx_mode)(struct rtw_dev *rtwdev, u8 tx_path,
u8 rx_path, bool is_tx2_path);
void (*led_set)(struct led_classdev *led, enum led_brightness brightness);
/* for USB/SDIO only */
void (*fill_txdesc_checksum)(struct rtw_dev *rtwdev,
struct rtw_tx_pkt_info *pkt_info,
Expand Down Expand Up @@ -2098,6 +2098,10 @@ struct rtw_dev {
struct completion fw_scan_density;
bool ap_active;

bool led_registered;
char led_name[32];
struct led_classdev led_cdev;

/* hci related data, must be last */
u8 priv[] __aligned(sizeof(void *));
};
Expand Down
22 changes: 22 additions & 0 deletions drivers/net/wireless/realtek/rtw88/reg.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,19 @@
#define BIT_PAPE_SEL_EN BIT(25)
#define BIT_DPDT_WL_SEL BIT(24)
#define BIT_DPDT_SEL_EN BIT(23)
#define BIT_GPIO13_14_WL_CTRL_EN BIT(22)
#define BIT_LED2_SV BIT(19)
#define BIT_LED2_CM GENMASK(18, 16)
#define BIT_LED1_SV BIT(11)
#define BIT_LED1_CM GENMASK(10, 8)
#define BIT_LED0_SV BIT(3)
#define BIT_LED0_CM GENMASK(2, 0)
#define BIT_LED_MODE_SW_CTRL 0
#define BIT_LED_MODE_RX 6
#define BIT_LED_MODE_TX 4
#define BIT_LED_MODE_TRX 2
#define REG_LEDCFG2 0x004E
#define REG_GPIO_PIN_CTRL_2 0x0060
#define REG_PAD_CTRL1 0x0064
#define BIT_BT_BTG_SEL BIT(31)
#define BIT_PAPE_WLBT_SEL BIT(29)
Expand Down Expand Up @@ -871,7 +883,17 @@

#define REG_USB_MOD 0xf008
#define REG_USB3_RXITV 0xf050
#define REG_USB2_PHY_ADR 0xfe40
#define REG_USB2_PHY_DAT 0xfe41
#define REG_USB2_PHY_CMD 0xfe42
#define BIT_USB2_PHY_CMD_TRG 0x81
#define REG_USB_HRPWM 0xfe58
#define REG_USB3_PHY_ADR 0xff0c
#define REG_USB3_PHY_DAT_L 0xff0d
#define REG_USB3_PHY_DAT_H 0xff0e
#define BIT_USB3_PHY_ADR_WR BIT(7)
#define BIT_USB3_PHY_ADR_RD BIT(6)
#define BIT_USB3_PHY_ADR_MASK GENMASK(5, 0)

#define RF_MODE 0x00
#define RF_MODOPT 0x01
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/wireless/realtek/rtw88/rtw8703b.c
Original file line number Diff line number Diff line change
Expand Up @@ -903,7 +903,7 @@ static void rtw8703b_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
rtw_write32_mask(rtwdev, REG_FPGA0_RFMOD, BIT_MASK_RFMOD, 0x0);
rtw_write32_mask(rtwdev, REG_FPGA1_RFMOD, BIT_MASK_RFMOD, 0x0);
rtw_write32_mask(rtwdev, REG_OFDM0_TX_PSD_NOISE,
GENMASK(31, 20), 0x0);
GENMASK(31, 30), 0x0);
rtw_write32(rtwdev, REG_BBRX_DFIR, 0x4A880000);
rtw_write32(rtwdev, REG_OFDM0_A_TX_AFE, 0x19F60000);
break;
Expand Down Expand Up @@ -1198,9 +1198,9 @@ static u8 rtw8703b_iqk_rx_path(struct rtw_dev *rtwdev,
rtw_write32(rtwdev, REG_RXIQK_TONE_A_11N, 0x38008c1c);
rtw_write32(rtwdev, REG_TX_IQK_TONE_B, 0x38008c1c);
rtw_write32(rtwdev, REG_RX_IQK_TONE_B, 0x38008c1c);
rtw_write32(rtwdev, REG_TXIQK_PI_A_11N, 0x8216000f);
rtw_write32(rtwdev, REG_TXIQK_PI_A_11N, 0x8214030f);
rtw_write32(rtwdev, REG_RXIQK_PI_A_11N, 0x28110000);
rtw_write32(rtwdev, REG_TXIQK_PI_B, 0x28110000);
rtw_write32(rtwdev, REG_TXIQK_PI_B, 0x82110000);
rtw_write32(rtwdev, REG_RXIQK_PI_B, 0x28110000);

/* LOK setting */
Expand Down Expand Up @@ -1372,7 +1372,7 @@ void rtw8703b_iqk_fill_a_matrix(struct rtw_dev *rtwdev, const s32 result[])
return;

tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_X, result[IQK_S1_RX_X]);
tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_Y1, result[IQK_S1_RX_X]);
tmp_rx_iqi |= FIELD_PREP(BIT_MASK_RXIQ_S1_Y1, result[IQK_S1_RX_Y]);
rtw_write32(rtwdev, REG_A_RXIQI, tmp_rx_iqi);
rtw_write32_mask(rtwdev, REG_RXIQK_MATRIX_LSB_11N, BIT_MASK_RXIQ_S1_Y2,
BIT_SET_RXIQ_S1_Y2(result[IQK_S1_RX_Y]));
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/wireless/realtek/rtw88/rtw8723x.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ struct rtw8723xe_efuse {
u8 device_id[2];
u8 sub_vendor_id[2];
u8 sub_device_id[2];
};
} __packed;

struct rtw8723xu_efuse {
u8 res4[48]; /* 0xd0 */
Expand All @@ -56,12 +56,12 @@ struct rtw8723xu_efuse {
u8 usb_option; /* 0x104 */
u8 res5[2]; /* 0x105 */
u8 mac_addr[ETH_ALEN]; /* 0x107 */
};
} __packed;

struct rtw8723xs_efuse {
u8 res4[0x4a]; /* 0xd0 */
u8 mac_addr[ETH_ALEN]; /* 0x11a */
};
} __packed;

struct rtw8723x_efuse {
__le16 rtl_id;
Expand Down Expand Up @@ -96,7 +96,7 @@ struct rtw8723x_efuse {
struct rtw8723xu_efuse u;
struct rtw8723xs_efuse s;
};
};
} __packed;

#define RTW8723X_IQK_ADDA_REG_NUM 16
#define RTW8723X_IQK_MAC8_REG_NUM 3
Expand Down
Loading

0 comments on commit 80524ab

Please sign in to comment.