From: Ping-Ke Shih <pkshih@realtek.com>
To: <kvalo@kernel.org>
Cc: <linux-wireless@vger.kernel.org>
Subject: [PATCH 02/14] rtw89: pci: add variant RPWM/CPWM to enter low power mode
Date: Thu, 21 Apr 2022 20:08:51 +0800 [thread overview]
Message-ID: <20220421120903.73715-3-pkshih@realtek.com> (raw)
In-Reply-To: <20220421120903.73715-1-pkshih@realtek.com>
RPWM/CPWM are registers that can set and check low power mode. Since chips
use different address, add a field to access them in common flow.
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
drivers/net/wireless/realtek/rtw89/mac.c | 6 +++---
drivers/net/wireless/realtek/rtw89/pci.c | 14 ++++++++------
drivers/net/wireless/realtek/rtw89/pci.h | 5 +++++
drivers/net/wireless/realtek/rtw89/rtw8852ae.c | 3 +++
drivers/net/wireless/realtek/rtw89/rtw8852ce.c | 2 ++
5 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index 127d5d74c426b..05b94842fe662 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -1027,7 +1027,7 @@ static int rtw89_mac_check_cpwm_state(struct rtw89_dev *rtwdev,
return 0;
rpwm_req_num = rtwdev->mac.rpwm_seq_num;
- cpwm_rsp_seq = rtw89_read16_mask(rtwdev, R_AX_CPWM,
+ cpwm_rsp_seq = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr,
PS_CPWM_RSP_SEQ_NUM);
if (rpwm_req_num != cpwm_rsp_seq)
@@ -1036,11 +1036,11 @@ static int rtw89_mac_check_cpwm_state(struct rtw89_dev *rtwdev,
rtwdev->mac.cpwm_seq_num = (rtwdev->mac.cpwm_seq_num + 1) &
CPWM_SEQ_NUM_MAX;
- cpwm_seq = rtw89_read16_mask(rtwdev, R_AX_CPWM, PS_CPWM_SEQ_NUM);
+ cpwm_seq = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr, PS_CPWM_SEQ_NUM);
if (cpwm_seq != rtwdev->mac.cpwm_seq_num)
return -EPERM;
- cpwm_status = rtw89_read16_mask(rtwdev, R_AX_CPWM, PS_CPWM_STATE);
+ cpwm_status = rtw89_read16_mask(rtwdev, rtwdev->hci.cpwm_addr, PS_CPWM_STATE);
if (cpwm_status != req_pwr_state)
return -EPERM;
diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
index 0d9cd8033c778..338a032490e16 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.c
+++ b/drivers/net/wireless/realtek/rtw89/pci.c
@@ -3486,6 +3486,7 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
struct ieee80211_hw *hw;
struct rtw89_dev *rtwdev;
const struct rtw89_driver_info *info;
+ const struct rtw89_pci_info *pci_info;
int driver_data_size;
int ret;
@@ -3496,20 +3497,21 @@ int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return -ENOMEM;
}
+ info = (const struct rtw89_driver_info *)id->driver_data;
+ pci_info = info->bus.pci;
+
rtwdev = hw->priv;
rtwdev->hw = hw;
rtwdev->dev = &pdev->dev;
+ rtwdev->chip = info->chip;
+ rtwdev->pci_info = info->bus.pci;
rtwdev->hci.ops = &rtw89_pci_ops;
rtwdev->hci.type = RTW89_HCI_TYPE_PCIE;
- rtwdev->hci.rpwm_addr = R_AX_PCIE_HRPWM;
- rtwdev->hci.cpwm_addr = R_AX_CPWM;
+ rtwdev->hci.rpwm_addr = pci_info->rpwm_addr;
+ rtwdev->hci.cpwm_addr = pci_info->cpwm_addr;
SET_IEEE80211_DEV(rtwdev->hw, &pdev->dev);
- info = (const struct rtw89_driver_info *)id->driver_data;
- rtwdev->chip = info->chip;
- rtwdev->pci_info = info->bus.pci;
-
ret = rtw89_core_init(rtwdev);
if (ret) {
rtw89_err(rtwdev, "failed to initialise core\n");
diff --git a/drivers/net/wireless/realtek/rtw89/pci.h b/drivers/net/wireless/realtek/rtw89/pci.h
index aa804b577df27..c203c8cbf1632 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.h
+++ b/drivers/net/wireless/realtek/rtw89/pci.h
@@ -481,6 +481,9 @@
#define R_AX_PCIE_RX_PREF_ADV 0x13F4
#define B_AX_RXDMA_PREF_ADV_EN BIT(0)
+#define R_AX_PCIE_HRPWM_V1 0x30C0
+#define R_AX_PCIE_CRPWM 0x30C4
+
#define RTW89_PCI_TXBD_NUM_MAX 256
#define RTW89_PCI_RXBD_NUM_MAX 256
#define RTW89_PCI_TXWD_NUM_MAX 512
@@ -698,6 +701,8 @@ struct rtw89_pci_info {
u32 dma_busy2_reg;
u32 dma_busy3_reg;
+ u32 rpwm_addr;
+ u32 cpwm_addr;
const struct rtw89_pci_ch_dma_addr_set *dma_addr_set;
int (*ltr_set)(struct rtw89_dev *rtwdev, bool en);
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852ae.c b/drivers/net/wireless/realtek/rtw89/rtw8852ae.c
index 73b5dd05235aa..c6937e5943ea7 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852ae.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852ae.c
@@ -6,6 +6,7 @@
#include <linux/pci.h>
#include "pci.h"
+#include "reg.h"
#include "rtw8852a.h"
static const struct rtw89_pci_info rtw8852a_pci_info = {
@@ -38,6 +39,8 @@ static const struct rtw89_pci_info rtw8852a_pci_info = {
.dma_busy2_reg = R_AX_PCIE_DMA_BUSY2,
.dma_busy3_reg = R_AX_PCIE_DMA_BUSY1,
+ .rpwm_addr = R_AX_PCIE_HRPWM,
+ .cpwm_addr = R_AX_CPWM,
.dma_addr_set = &rtw89_pci_ch_dma_addr_set,
.ltr_set = rtw89_pci_ltr_set,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852ce.c b/drivers/net/wireless/realtek/rtw89/rtw8852ce.c
index 4021a56a82bc5..4d71cc87f7ba8 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852ce.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852ce.c
@@ -39,6 +39,8 @@ static const struct rtw89_pci_info rtw8852c_pci_info = {
.dma_busy2_reg = R_AX_HAXI_DMA_BUSY2,
.dma_busy3_reg = R_AX_HAXI_DMA_BUSY3,
+ .rpwm_addr = R_AX_PCIE_HRPWM_V1,
+ .cpwm_addr = R_AX_PCIE_CRPWM,
.dma_addr_set = &rtw89_pci_ch_dma_addr_set_v1,
.ltr_set = rtw89_pci_ltr_set_v1,
--
2.25.1
next prev parent reply other threads:[~2022-04-21 12:10 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-21 12:08 [PATCH 00/14] rtw89: 8852c: extend PCI code to support 8852ce and add 8852c chip_ops Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 01/14] rtw89: pci: add variant IMR/ISR and configure functions Ping-Ke Shih
2022-04-24 11:31 ` Kalle Valo
2022-04-21 12:08 ` Ping-Ke Shih [this message]
2022-04-21 12:08 ` [PATCH 03/14] rtw89: pci: reclaim TX BD only if it really need Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 04/14] rtw89: pci: does RX in interrupt threadfn if low power mode Ping-Ke Shih
2022-04-23 12:32 ` Kalle Valo
2022-04-23 12:37 ` Kalle Valo
2022-04-24 2:58 ` Pkshih
2022-04-24 4:15 ` Kalle Valo
2022-04-21 12:08 ` [PATCH 05/14] rtw89: ser: re-enable interrupt in threadfn if under_recovery Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 06/14] rtw89: ps: access TX/RX rings via another registers in low power mode Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 07/14] rtw89: pci: allow to process RPP prior to TX BD Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 08/14] rtw89: don't flush hci queues and send h2c if power is off Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 09/14] rtw89: add RF H2C to notify firmware Ping-Ke Shih
2022-04-21 12:08 ` [PATCH 10/14] rtw89: 8852c: configure default BB TX/RX path Ping-Ke Shih
2022-04-21 12:09 ` [PATCH 11/14] rtw89: 8852c: implement chip_ops related to TX power Ping-Ke Shih
2022-04-21 12:09 ` [PATCH 12/14] rtw89: 8852c: implement chip_ops::get_thermal Ping-Ke Shih
2022-04-21 12:09 ` [PATCH 13/14] rtw89: 8852c: fill freq and band of RX status by PPDU report Ping-Ke Shih
2022-04-21 12:09 ` [PATCH 14/14] rtw89: 8852c: add chip_ops related to BTC Ping-Ke Shih
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220421120903.73715-3-pkshih@realtek.com \
--to=pkshih@realtek.com \
--cc=kvalo@kernel.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).