Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2961985ybl; Fri, 20 Dec 2019 01:23:55 -0800 (PST) X-Google-Smtp-Source: APXvYqz7dLE4YbAVS9PcZS7KvZ6dPYeAXMetDslB/TGpDthv4Z1Gsbi314GXiQXRnGBGhFnt33TI X-Received: by 2002:a05:6830:18f1:: with SMTP id d17mr8651049otf.298.1576833835157; Fri, 20 Dec 2019 01:23:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576833835; cv=none; d=google.com; s=arc-20160816; b=YGX7d06knIHuH9gbiNMUHXYwZL3CzkVWpHQP7mz1s7ShUCl2JCKwixtaCr5C0PUjSJ osJhXwqloV8ZwoOV/DsxwYlxZy4OzV+V5wAXXC50M7rMyUxEloLI1WClbKRRY50M7Ck5 b0kuzpZIGi2HdrWC7yMI9KOXULmMcBD/R1y6yBGp+oI/zVSeuGTRcUwzFCyt4u9fQkQ+ Tk0ip/HARAJoKzdqBVLi++dzjIC5K24lqDgNn0VBvd/qKvM2OM19vqAEOohWf+OjXJxf 1PpTSai7W2Wa8417IyKjNKezT7uLLeRlEXi0X6QQTf8dfB6mpQMWp5Vpcy+kWaRF85PJ pIGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:authenticated-by; bh=SnZuZNcHzBe7g1ChlSbZaYIFgNJBZcYEeCMnCHxUnRY=; b=M2zDMRGcwivfFC4QQk3RXI0+wPXxtgYT9LMMMfAirXmPFBytSi9O5WPR/4HwsaB/SM isEpggbK6q7X3j1DV8LR3AGVg34zhAgF50VPexxw7zCQ/6f78UZqpGujuNaxOH+ipur+ /SKh1q4rTWX+4dFzurmod3FAb2K1mA/oi93wYSXM7BwnIEUh4JYRm44QelKRzlPocNWv rIrBWeUqgSX42z/g0pPo1gfNgKaCBu7JYKnPDLTNv6zoE3ToRdFQNKPvaGB0caogaAi0 P1jVaJ5LqB0jA9B5OIfogjKSl511sf4dgM7fal3VwtdxCW+a+/FYRYn0OVgcGyXM4hni SxHA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i185si4671944oia.187.2019.12.20.01.23.44; Fri, 20 Dec 2019 01:23:55 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727402AbfLTJWe (ORCPT + 99 others); Fri, 20 Dec 2019 04:22:34 -0500 Received: from rtits2.realtek.com ([211.75.126.72]:47438 "EHLO rtits2.realtek.com.tw" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727384AbfLTJWb (ORCPT ); Fri, 20 Dec 2019 04:22:31 -0500 Authenticated-By: X-SpamFilter-By: BOX Solutions SpamTrap 5.62 with qID xBK9MPl1025717, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (RTITCASV01.realtek.com.tw[172.21.6.18]) by rtits2.realtek.com.tw (8.15.2/2.57/5.78) with ESMTPS id xBK9MPl1025717 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Fri, 20 Dec 2019 17:22:25 +0800 Received: from localhost.localdomain (172.21.68.126) by RTITCASV01.realtek.com.tw (172.21.6.18) with Microsoft SMTP Server id 14.3.468.0; Fri, 20 Dec 2019 17:22:24 +0800 From: To: CC: , Subject: [PATCH 05/11] rtw88: 8822c: modify rf protection setting Date: Fri, 20 Dec 2019 17:21:50 +0800 Message-ID: <20191220092156.13443-6-yhchuang@realtek.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191220092156.13443-1-yhchuang@realtek.com> References: <20191220092156.13443-1-yhchuang@realtek.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [172.21.68.126] Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Chien-Hsun Liao According to some experiments, the original rf protection setting can not perfectly make sure that there is no hardware pi write during the direct write. So, modify the setting so that the hardware block of pi would be turned off during the direct write. Signed-off-by: Chien-Hsun Liao Signed-off-by: Yan-Hsuan Chuang --- drivers/net/wireless/realtek/rtw88/phy.c | 10 ---------- drivers/net/wireless/realtek/rtw88/rtw8822c.c | 15 +++++++++++++++ drivers/net/wireless/realtek/rtw88/rtw8822c.h | 5 +++++ 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c index a3e1e9578b65..4b2f11be60cf 100644 --- a/drivers/net/wireless/realtek/rtw88/phy.c +++ b/drivers/net/wireless/realtek/rtw88/phy.c @@ -749,20 +749,10 @@ bool rtw_phy_write_rf_reg(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, direct_addr = base_addr[rf_path] + (addr << 2); mask &= RFREG_MASK; - if (addr == RF_CFGCH) { - rtw_write32_mask(rtwdev, REG_RSV_CTRL, BITS_RFC_DIRECT, DISABLE_PI); - rtw_write32_mask(rtwdev, REG_WLRF1, BITS_RFC_DIRECT, DISABLE_PI); - } - rtw_write32_mask(rtwdev, direct_addr, mask, data); udelay(1); - if (addr == RF_CFGCH) { - rtw_write32_mask(rtwdev, REG_RSV_CTRL, BITS_RFC_DIRECT, ENABLE_PI); - rtw_write32_mask(rtwdev, REG_WLRF1, BITS_RFC_DIRECT, ENABLE_PI); - } - return true; } diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c index 7c8db951a5bc..4231f94d515e 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c @@ -1289,6 +1289,17 @@ static int rtw8822c_mac_init(struct rtw_dev *rtwdev) return 0; } +static void rtw8822c_rstb_3wire(struct rtw_dev *rtwdev, bool enable) +{ + if (enable) { + rtw_write32_mask(rtwdev, REG_RSTB, BIT_RSTB_3WIRE, 0x1); + rtw_write32_mask(rtwdev, REG_ANAPAR_A, BIT_ANAPAR_UPDATE, 0x1); + rtw_write32_mask(rtwdev, REG_ANAPAR_B, BIT_ANAPAR_UPDATE, 0x1); + } else { + rtw_write32_mask(rtwdev, REG_RSTB, BIT_RSTB_3WIRE, 0x0); + } +} + static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) { #define RF18_BAND_MASK (BIT(16) | BIT(9) | BIT(8)) @@ -1337,6 +1348,8 @@ static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) break; } + rtw8822c_rstb_3wire(rtwdev, false); + rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, 0x04, 0x01); rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, 0x1f, 0x12); rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, 0xfffff, rf_rxbb); @@ -1349,6 +1362,8 @@ static void rtw8822c_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw) rtw_write_rf(rtwdev, RF_PATH_A, RF_CFGCH, RFREG_MASK, rf_reg18); rtw_write_rf(rtwdev, RF_PATH_B, RF_CFGCH, RFREG_MASK, rf_reg18); + + rtw8822c_rstb_3wire(rtwdev, true); } static void rtw8822c_toggle_igi(struct rtw_dev *rtwdev) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h index abd9f300bedd..dfd8662a0c0e 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h @@ -190,6 +190,8 @@ const struct rtw_table name ## _tbl = { \ #define BIT_3WIRE_TX_EN BIT(0) #define BIT_3WIRE_RX_EN BIT(1) #define BIT_3WIRE_PI_ON BIT(28) +#define REG_ANAPAR_A 0x1830 +#define BIT_ANAPAR_UPDATE BIT(29) #define REG_RXAGCCTL0 0x18ac #define BITS_RXAGC_CCK GENMASK(15, 12) #define BITS_RXAGC_OFDM GENMASK(8, 4) @@ -223,6 +225,8 @@ const struct rtw_table name ## _tbl = { \ #define BIT_CCK_BLK_EN BIT(1) #define BIT_CCK_OFDM_BLK_EN (BIT(0) | BIT(1)) #define REG_CCAMSK 0x1c80 +#define REG_RSTB 0x1c90 +#define BIT_RSTB_3WIRE BIT(8) #define REG_RX_BREAK 0x1d2c #define BIT_COM_RX_GCK_EN BIT(31) #define REG_RXFNCTL 0x1d30 @@ -243,6 +247,7 @@ const struct rtw_table name ## _tbl = { \ #define REG_OFDM_TXCNT 0x2de0 #define REG_ORITXCODE2 0x4100 #define REG_3WIRE2 0x410c +#define REG_ANAPAR_B 0x4130 #define REG_RXAGCCTL 0x41ac #define REG_DCKB_I_0 0x41bc #define REG_DCKB_I_1 0x41c0 -- 2.17.1