]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: add support for HW TKIP crypto
authorKuan-Chung Chen <damon.chen@realtek.com>
Thu, 20 Feb 2025 06:23:44 +0000 (14:23 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Thu, 27 Feb 2025 05:45:43 +0000 (13:45 +0800)
For 8852BTE, 8852CE, and 8922AE, TKIP encryption and decryption
will be handled by hardware. All other chips will retain their
existing software-based encryption and decryption.

Signed-off-by: Kuan-Chung Chen <damon.chen@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250220062344.15836-1-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/cam.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/rtw8851b.c
drivers/net/wireless/realtek/rtw89/rtw8852a.c
drivers/net/wireless/realtek/rtw89/rtw8852b.c
drivers/net/wireless/realtek/rtw89/rtw8852bt.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c
drivers/net/wireless/realtek/rtw89/rtw8922a.c

index 8fa1e6c1ce139171dfba7ab2945715822e750a4d..eca3d767ff6032974bcdad46773d648364171aa7 100644 (file)
@@ -476,6 +476,12 @@ int rtw89_cam_sec_key_add(struct rtw89_dev *rtwdev,
        case WLAN_CIPHER_SUITE_WEP104:
                hw_key_type = RTW89_SEC_KEY_TYPE_WEP104;
                break;
+       case WLAN_CIPHER_SUITE_TKIP:
+               if (!chip->hw_tkip_crypto)
+                       return -EOPNOTSUPP;
+               hw_key_type = RTW89_SEC_KEY_TYPE_TKIP;
+               key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
+               break;
        case WLAN_CIPHER_SUITE_CCMP:
                hw_key_type = RTW89_SEC_KEY_TYPE_CCMP128;
                if (!chip->hw_mgmt_tx_encrypt)
index 865cdcfa59e1d1ca755b0f3bd78e3d4b78668d9f..3d458dbbdd0021653592bfbedb03000bcf30844a 100644 (file)
@@ -4285,6 +4285,7 @@ struct rtw89_chip_info {
        bool ul_tb_pwr_diff;
        bool hw_sec_hdr;
        bool hw_mgmt_tx_encrypt;
+       bool hw_tkip_crypto;
        u8 rf_path_num;
        u8 tx_nss;
        u8 rx_nss;
index dce0a4b01440ea2564b521a5d2d0387ce992214b..99b82dc85ea3893b35fcd3d93953cc6b8ee72a0e 100644 (file)
@@ -708,8 +708,8 @@ static int sec_eng_init_be(struct rtw89_dev *rtwdev)
        val32 |= B_BE_CLK_EN_CGCMP | B_BE_CLK_EN_WAPI | B_BE_CLK_EN_WEP_TKIP |
                 B_BE_SEC_TX_ENC | B_BE_SEC_RX_DEC |
                 B_BE_MC_DEC | B_BE_BC_DEC |
-                B_BE_BMC_MGNT_DEC | B_BE_UC_MGNT_DEC;
-       val32 &= ~B_BE_SEC_PRE_ENQUE_TX;
+                B_BE_BMC_MGNT_DEC | B_BE_UC_MGNT_DEC |
+                B_BE_SEC_PRE_ENQUE_TX;
        rtw89_write32(rtwdev, R_BE_SEC_ENG_CTRL, val32);
 
        rtw89_write32_set(rtwdev, R_BE_SEC_MPDU_PROC, B_BE_APPEND_ICV | B_BE_APPEND_MIC);
index 3cd1d7a4d202c6aa19e01d7146d6d5b5a32b5a5e..34f2278ddf2019df4a951dda8a44f91874236c97 100644 (file)
@@ -2502,6 +2502,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = {
        .ul_tb_pwr_diff         = false,
        .hw_sec_hdr             = false,
        .hw_mgmt_tx_encrypt     = false,
+       .hw_tkip_crypto         = false,
        .rf_path_num            = 1,
        .tx_nss                 = 1,
        .rx_nss                 = 1,
index 514ef0c2b32b7b9bac7b4f86d1a4d583cece67d4..66d85c04da263d0c2545d6c2bb652562db46f7cd 100644 (file)
@@ -2220,6 +2220,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
        .ul_tb_pwr_diff         = false,
        .hw_sec_hdr             = false,
        .hw_mgmt_tx_encrypt     = false,
+       .hw_tkip_crypto         = false,
        .rf_path_num            = 2,
        .tx_nss                 = 2,
        .rx_nss                 = 2,
index 5dbb33d5e40383cb4c5325a5f4cfd9d7d036f105..7650576f0577b6fe621442e41ec5c3b1f070c222 100644 (file)
@@ -856,6 +856,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = {
        .ul_tb_pwr_diff         = false,
        .hw_sec_hdr             = false,
        .hw_mgmt_tx_encrypt     = false,
+       .hw_tkip_crypto         = false,
        .rf_path_num            = 2,
        .tx_nss                 = 2,
        .rx_nss                 = 2,
index b4832c7897a865ebd226d7ef248adb74ce3d3336..c96ef0dfbae27e12434f91a3902847674b5b5cd1 100644 (file)
@@ -789,6 +789,7 @@ const struct rtw89_chip_info rtw8852bt_chip_info = {
        .ul_tb_pwr_diff         = false,
        .hw_sec_hdr             = false,
        .hw_mgmt_tx_encrypt     = false,
+       .hw_tkip_crypto         = true,
        .rf_path_num            = 2,
        .tx_nss                 = 2,
        .rx_nss                 = 2,
index f3965a65ae18c978e705070eb9e11bcc22b0f8c7..7ba92bf898e3111a9ebf3e2132a06b29f0619689 100644 (file)
@@ -3015,6 +3015,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
        .ul_tb_pwr_diff         = true,
        .hw_sec_hdr             = true,
        .hw_mgmt_tx_encrypt     = true,
+       .hw_tkip_crypto         = true,
        .rf_path_num            = 2,
        .tx_nss                 = 2,
        .rx_nss                 = 2,
index defa6cf9f7f0b76423516d648d22f15bbc2a5f2c..157685c1b68644c7cd99045786cfd05b0c9746d7 100644 (file)
@@ -2774,6 +2774,7 @@ const struct rtw89_chip_info rtw8922a_chip_info = {
        .ul_tb_pwr_diff         = false,
        .hw_sec_hdr             = true,
        .hw_mgmt_tx_encrypt     = true,
+       .hw_tkip_crypto         = true,
        .rf_path_num            = 2,
        .tx_nss                 = 2,
        .rx_nss                 = 2,