Sunxi 5.18 (#3879)

* sunxi-5.18: rebase megous patces to v5.18.3

* sunxi-5.18: Add upstream patches - tag: orange-pi-5.18-20220609-1318

* Check applicability to version 5.18.3

* sunxi-5.18: switch to version 5.18.3
This commit is contained in:
The-going
2022-06-10 22:50:37 +03:00
committed by GitHub
parent 3e8df6ec6e
commit 25e60a726b
23 changed files with 1476 additions and 28 deletions

View File

@@ -23,7 +23,7 @@ case $BRANCH in
edge)
KERNEL_VERSION_LEVEL=${KERNEL_VERSION_LEVEL:-5.18}
KERNELSWITCHOBJ=${KERNELSWITCHOBJ:-'tag=v5.18.2'}
KERNELSWITCHOBJ=${KERNELSWITCHOBJ:-'tag=v5.18.3'}
;;
esac

View File

@@ -22,7 +22,7 @@ case $BRANCH in
;;
edge)
KERNEL_VERSION_LEVEL=${KERNEL_VERSION_LEVEL:-5.18}
KERNELSWITCHOBJ=${KERNELSWITCHOBJ:-'tag=v5.18.2'}
KERNELSWITCHOBJ=${KERNELSWITCHOBJ:-'tag=v5.18.3'}
;;
esac

View File

@@ -20,20 +20,20 @@ diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 69ef31cea582..af26e8051905 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -265,6 +265,13 @@ enum {
* runtime suspend, because event filtering takes place there.
@@ -266,6 +266,13 @@ enum {
*/
HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL,
+
+ /* When this quirk is set, max_page for local extended features
+ * is set to 1, even if controller reports higher number. Some
+ * controllers (e.g. RTL8723CS) report more pages, but they
+ * don't actually support features declared there.
+ */
+ HCI_QUIRK_BROKEN_LOCAL_EXT_FTR_MAX_PAGE,
};
/* HCI device flags */
+
/*
* When this quirk is set, disables the use of
* HCI_OP_ENHANCED_SETUP_SYNC_CONN command to setup SCO connections.
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 66451661283c..52b358c33344 100644
--- a/net/bluetooth/hci_event.c

View File

@@ -0,0 +1,54 @@
From 8ceed49e8da109562c399f9501ca9b96880312f8 Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Thu, 9 Jun 2022 13:14:06 +0200
Subject: [PATCH 533/533] Import pgwipeout's pcie regs/ranges
This should fix nvme SSDs again. :)
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
arch/arm64/boot/dts/rockchip/rk356x.dtsi | 14 +++++---------
1 file changed, 5 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/boot/dts/rockchip/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
index 90f3803d427c..ba706aaae72d 100644
--- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi
@@ -695,9 +695,6 @@ pcie2x1: pcie@fe260000 {
#address-cells = <3>;
#size-cells = <2>;
bus-range = <0x0 0xf>;
- assigned-clocks = <&cru ACLK_PCIE20_MST>, <&cru ACLK_PCIE20_SLV>,
- <&cru ACLK_PCIE20_DBI>, <&cru PCLK_PCIE20>,
- <&cru CLK_PCIE20_AUX_NDFT>;
clocks = <&cru ACLK_PCIE20_MST>, <&cru ACLK_PCIE20_SLV>,
<&cru ACLK_PCIE20_DBI>, <&cru PCLK_PCIE20>,
<&cru CLK_PCIE20_AUX_NDFT>;
@@ -725,11 +722,11 @@ pcie2x1: pcie@fe260000 {
phys = <&combphy2 PHY_TYPE_PCIE>;
phy-names = "pcie-phy";
power-domains = <&power RK3568_PD_PIPE>;
- reg = <0x3 0xc0000000 0x0 0x00400000>,
- <0x0 0xfe260000 0x0 0x00010000>,
- <0x3 0x00000000 0x0 0x01000000>;
- ranges = <0x01000000 0x0 0x01000000 0x3 0x01000000 0x0 0x00100000
- 0x02000000 0x0 0x02000000 0x3 0x02000000 0x0 0x3e000000>;
+ reg = <0x3 0xc0000000 0x0 0x00400000>,
+ <0x0 0xfe260000 0x0 0x00010000>,
+ <0x3 0x3f000000 0x0 0x01000000>;
+ ranges = <0x01000000 0x0 0x3ef00000 0x3 0x3ef00000 0x0 0x00100000
+ 0x02000000 0x0 0x00000000 0x3 0x00000000 0x0 0x3ef00000>;
reg-names = "dbi", "apb", "config";
resets = <&cru SRST_PCIE20_POWERUP>;
reset-names = "pipe";
@@ -742,7 +739,6 @@ pcie_intc: legacy-interrupt-controller {
interrupt-parent = <&gic>;
interrupts = <GIC_SPI 72 IRQ_TYPE_EDGE_RISING>;
};
-
};
sdmmc0: mmc@fe2b0000 {
--
2.35.3

View File

@@ -0,0 +1,47 @@
From f87eeb4faa7318b779f858a674821a3cc13e6e35 Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Fri, 27 May 2022 16:44:42 +0200
Subject: [PATCH 519/533] arm64: dts: rk3399-pinephone-pro: Use 4-lane mode for
selfie camera
It works, enable it.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
index ebc6e98b79d3..182e042a15ba 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
@@ -395,7 +395,7 @@ regulator-state-mem {
*
* GPIO0_A6 must be high when the phone is providing VBUS_TYPEC power.
* This keeps the power path boost enabled for all cases when the phone
- * runs from the battery.
+ * runs from the battery.
*
* In other words, GPIO0_A6 is used to override the automatic disabling
* of Q7 when VBUS_TYPEC has 5V in USB host mode.
@@ -941,7 +941,7 @@ ucam: camera@36 {
port {
ucam_out: endpoint {
remote-endpoint = <&mipi_in_ucam>;
- data-lanes = <1 2>;
+ data-lanes = <1 2 3 4>;
//clock-lanes = <0>;
};
};
@@ -1160,7 +1160,7 @@ port@0 {
mipi_in_ucam: endpoint@0 {
reg = <0>;
remote-endpoint = <&ucam_out>;
- data-lanes = <1 2>;
+ data-lanes = <1 2 3 4>;
};
};
};
--
2.35.3

View File

@@ -0,0 +1,33 @@
From da83e39c7f6db79ff634b547db3ba586cb6bf9e1 Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Fri, 27 May 2022 03:10:07 +0200
Subject: [PATCH 518/533] leds: sgm3140: Add missing timer cleanup and flash
gpio control
strobe = 1 + brightness = 0 before the timeout may mess up the
driver state.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/leds/flash/leds-sgm3140.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/leds/flash/leds-sgm3140.c b/drivers/leds/flash/leds-sgm3140.c
index d3a30ad94ac4..dd5d327c52a1 100644
--- a/drivers/leds/flash/leds-sgm3140.c
+++ b/drivers/leds/flash/leds-sgm3140.c
@@ -114,8 +114,11 @@ static int sgm3140_brightness_set(struct led_classdev *led_cdev,
"failed to enable regulator: %d\n", ret);
return ret;
}
+ gpiod_set_value_cansleep(priv->flash_gpio, 0);
gpiod_set_value_cansleep(priv->enable_gpio, 1);
} else {
+ del_timer_sync(&priv->powerdown_timer);
+ gpiod_set_value_cansleep(priv->flash_gpio, 0);
gpiod_set_value_cansleep(priv->enable_gpio, 0);
ret = regulator_disable(priv->vin_regulator);
if (ret) {
--
2.35.3

View File

@@ -18,22 +18,19 @@ diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index 3e7d4b20ab34..82ca7c317700 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -84,9 +84,11 @@ static void msg_submit(struct mbox_chan *chan)
/* kick start the timer immediately to avoid delays */
@@ -85,7 +85,10 @@ static void msg_submit(struct mbox_chan *chan)
if (!err && (chan->txdone_method & TXDONE_BY_POLL)) {
- /* but only if not already active */
- if (!hrtimer_active(&chan->mbox->poll_hrt))
- hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
/* kick start the timer immediately to avoid delays */
spin_lock_irqsave(&chan->mbox->poll_hrt_lock, flags);
- hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
+ if (!timekeeping_suspended) {
+ /* but only if not already active */
+ if (!hrtimer_active(&chan->mbox->poll_hrt))
+ hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
+ hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
+ }
spin_unlock_irqrestore(&chan->mbox->poll_hrt_lock, flags);
}
}
@@ -262,6 +264,24 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg)
@@ -268,6 +271,24 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg)
msg_submit(chan);

View File

@@ -0,0 +1,81 @@
From b4175e2709a7fa7afeb88efadaef4071c2e643b9 Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Thu, 9 Jun 2022 01:04:18 +0200
Subject: [PATCH 532/533] media: imx258: Add debug register access
This is useful during development.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/media/i2c/imx258.c | 48 ++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c
index 615f395ccdf3..bcfa7f4e69e7 100644
--- a/drivers/media/i2c/imx258.c
+++ b/drivers/media/i2c/imx258.c
@@ -1275,6 +1275,53 @@ static int imx258_identify_module(struct imx258 *imx258)
return 0;
}
+#ifdef CONFIG_VIDEO_ADV_DEBUG
+static int imx258_g_register(struct v4l2_subdev *sd,
+ struct v4l2_dbg_register *reg)
+{
+ struct imx258 *imx258 = to_imx258(sd);
+ u32 val = 0;
+ int ret;
+
+ if (reg->reg > 0xffff)
+ return -EINVAL;
+
+ reg->size = 1;
+
+ mutex_lock(&imx258->mutex);
+ ret = imx258_read_reg(imx258, reg->reg, 1, &val);
+ mutex_unlock(&imx258->mutex);
+ if (ret)
+ return -EIO;
+
+ reg->val = val;
+ return 0;
+}
+
+static int imx258_s_register(struct v4l2_subdev *sd,
+ const struct v4l2_dbg_register *reg)
+{
+ struct imx258 *imx258 = to_imx258(sd);
+ int ret;
+
+ if (reg->reg > 0xffff || reg->val > 0xff)
+ return -EINVAL;
+
+ mutex_lock(&imx258->mutex);
+ ret = imx258_write_reg(imx258, reg->reg, 1, reg->val);
+ mutex_unlock(&imx258->mutex);
+
+ return ret;
+}
+#endif
+
+static const struct v4l2_subdev_core_ops imx258_core_ops = {
+#ifdef CONFIG_VIDEO_ADV_DEBUG
+ .g_register = imx258_g_register,
+ .s_register = imx258_s_register,
+#endif
+};
+
static const struct v4l2_subdev_video_ops imx258_video_ops = {
.s_stream = imx258_set_stream,
};
@@ -1287,6 +1334,7 @@ static const struct v4l2_subdev_pad_ops imx258_pad_ops = {
};
static const struct v4l2_subdev_ops imx258_subdev_ops = {
+ .core = &imx258_core_ops,
.video = &imx258_video_ops,
.pad = &imx258_pad_ops,
};
--
2.35.3

View File

@@ -0,0 +1,82 @@
From 3c3580ab6e90b4a47d0896b91c86347dc1271ecd Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Fri, 3 Jun 2022 16:04:04 +0200
Subject: [PATCH 521/533] media: ov8858: Add support for digital gain control
Digital gain control is useful and was missing.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/media/i2c/ov8858.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c
index 5af4b71aa07b..95dabebecb74 100644
--- a/drivers/media/i2c/ov8858.c
+++ b/drivers/media/i2c/ov8858.c
@@ -64,6 +64,16 @@
#define OV8858_GAIN_STEP 1
#define OV8858_GAIN_DEFAULT 0x80
+#define OV8858_REG_DGAIN_H 0x350a
+#define OV8858_REG_DGAIN_L 0x350b
+#define OV8858_DGAIN_H_MASK 0xff
+#define OV8858_DGAIN_H_SHIFT 6
+#define OV8858_DGAIN_L_MASK 0x3f
+#define OV8858_DGAIN_MIN 0x0
+#define OV8858_DGAIN_MAX 0x3fff
+#define OV8858_DGAIN_STEP 1
+#define OV8858_DGAIN_DEFAULT 0x200
+
#define OV8858_REG_TEST_PATTERN 0x5e00
#define OV8858_TEST_PATTERN_ENABLE 0x80
#define OV8858_TEST_PATTERN_DISABLE 0x0
@@ -818,6 +828,7 @@ static const struct regval ov8858_global_regs_r2a_2lane[] = {
{0x5001, 0x01}, // BLC on
{0x5002, 0x08}, // H scale off, WBMATCH off, OTP_DPC
{0x5003, 0x20}, // DPC_DBC buffer control enable, WB
+ {0x501e, 0x93}, // enable digital gain
{0x5046, 0x12}, //
{0x5780, 0x3e}, // DPC
{0x5781, 0x0f}, //
@@ -1231,6 +1242,7 @@ static const struct regval ov8858_global_regs_r2a_4lane[] = {
{0x5001, 0x01}, // BLC on
{0x5002, 0x08}, // WBMATCH sensor's gain, H scale/WBMATCH/OTP_DPC off
{0x5003, 0x20}, // DPC_DBC buffer control enable, WB
+ {0x501e, 0x93}, // enable digital gain
{0x5046, 0x12}, //
{0x5780, 0x3e}, // DPC
{0x5781, 0x0f}, //
@@ -2335,6 +2347,17 @@ static int ov8858_set_ctrl(struct v4l2_ctrl *ctrl)
OV8858_REG_VALUE_08BIT,
ctrl->val & OV8858_GAIN_L_MASK);
break;
+ case V4L2_CID_DIGITAL_GAIN:
+ ret = ov8858_write_reg(ov8858->client,
+ OV8858_REG_DGAIN_H,
+ OV8858_REG_VALUE_08BIT,
+ (ctrl->val >> OV8858_DGAIN_H_SHIFT) &
+ OV8858_DGAIN_H_MASK);
+ ret |= ov8858_write_reg(ov8858->client,
+ OV8858_REG_DGAIN_L,
+ OV8858_REG_VALUE_08BIT,
+ ctrl->val & OV8858_DGAIN_L_MASK);
+ break;
case V4L2_CID_VBLANK:
ret = ov8858_write_reg(ov8858->client,
OV8858_REG_VTS,
@@ -2406,6 +2429,11 @@ static int ov8858_initialize_controls(struct ov8858 *ov8858)
OV8858_GAIN_MAX, OV8858_GAIN_STEP,
OV8858_GAIN_DEFAULT);
+ ov8858->digi_gain = v4l2_ctrl_new_std(handler, &ov8858_ctrl_ops,
+ V4L2_CID_DIGITAL_GAIN, OV8858_DGAIN_MIN,
+ OV8858_DGAIN_MAX, OV8858_DGAIN_STEP,
+ OV8858_DGAIN_DEFAULT);
+
ov8858->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
&ov8858_ctrl_ops, V4L2_CID_TEST_PATTERN,
ARRAY_SIZE(ov8858_test_pattern_menu) - 1,
--
2.35.3

View File

@@ -0,0 +1,30 @@
From 7e3327366b72fb2ede59b438566472eb0728ddfe Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Fri, 27 May 2022 16:46:13 +0200
Subject: [PATCH 520/533] media: ov8858: Increase analog gain range
Tested to work up to 11 bits and down to 0.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/media/i2c/ov8858.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/i2c/ov8858.c b/drivers/media/i2c/ov8858.c
index 5bf4c195f497..5af4b71aa07b 100644
--- a/drivers/media/i2c/ov8858.c
+++ b/drivers/media/i2c/ov8858.c
@@ -59,8 +59,8 @@
#define OV8858_GAIN_H_MASK 0x07
#define OV8858_GAIN_H_SHIFT 8
#define OV8858_GAIN_L_MASK 0xff
-#define OV8858_GAIN_MIN 0x80
-#define OV8858_GAIN_MAX 0x400
+#define OV8858_GAIN_MIN 0x0
+#define OV8858_GAIN_MAX 0x7ff
#define OV8858_GAIN_STEP 1
#define OV8858_GAIN_DEFAULT 0x80
--
2.35.3

View File

@@ -0,0 +1,36 @@
From ca1b069c460adc12ec8e589b482b0fae7ed770cf Mon Sep 17 00:00:00 2001
From: Ondrej Jirman <megi@xff.cz>
Date: Fri, 27 May 2022 03:07:54 +0200
Subject: [PATCH 517/533] power: supply: rk818-battery: Speed up battery
current readout
PMIC does averaging, driver does averaging on top of that averaging,
and it's just too much averaging, and the speed suffers.
Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
drivers/power/supply/rk818_battery.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/power/supply/rk818_battery.c b/drivers/power/supply/rk818_battery.c
index e0e5ed0e3d2a..9323666491db 100644
--- a/drivers/power/supply/rk818_battery.c
+++ b/drivers/power/supply/rk818_battery.c
@@ -903,12 +903,12 @@ int rk818_battery_get_property(struct rk818_battery *di,
{
switch (psp) {
case POWER_SUPPLY_PROP_CURRENT_NOW:
- val->intval = di->current_avg * 1000;/*uA*/
+ val->intval = rk818_bat_get_avg_current(di) * 1000;/*uA*/
if (di->pdata->bat_mode == MODE_VIRTUAL)
val->intval = VIRTUAL_CURRENT * 1000;
break;
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
- val->intval = di->voltage_avg * 1000;/*uV*/
+ val->intval = rk818_bat_get_avg_voltage(di) * 1000;/*uV*/
if (di->pdata->bat_mode == MODE_VIRTUAL)
val->intval = VIRTUAL_VOLTAGE * 1000;
break;
--
2.35.3

View File

@@ -0,0 +1,39 @@
From bafd3eecaabac850ed27da95409dcf1268db3ced Mon Sep 17 00:00:00 2001
From: Po-Hao Huang <phhuang@realtek.com>
Date: Fri, 20 May 2022 16:15:23 +0800
Subject: [PATCH 527/533] rtw88: fix null vif pointer when hw_scan fails
Add this check to avoid crash by dereferencing a null pointer. When hwscan
fails due to no memory or dma failure, the scan flag in ieee80211_local is
cleared. So mac80211 determine that it's not hw_scan then calls
sw_scan_complete() with null vif, which is also freed during the fail.
Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520081523.45987-1-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw88/main.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index 4e03441f2fe7..f0931fdc713f 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -1383,9 +1383,12 @@ void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
bool hw_scan)
{
- struct rtw_vif *rtwvif = (struct rtw_vif *)vif->drv_priv;
+ struct rtw_vif *rtwvif = vif ? (struct rtw_vif *)vif->drv_priv : NULL;
u32 config = 0;
+ if (!rtwvif)
+ return;
+
clear_bit(RTW_FLAG_SCANNING, rtwdev->flags);
clear_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);
--
2.35.3

View File

@@ -0,0 +1,122 @@
From f2a523820ea1be304d576a2cf1872bb495465b10 Mon Sep 17 00:00:00 2001
From: Ping-Ke Shih <pkshih@realtek.com>
Date: Fri, 20 May 2022 15:17:29 +0800
Subject: [PATCH 525/533] rtw89: 8852c: rfk: re-calibrate RX DCK once thermal
changes a lot
RX DCK is receiver DC calibration. To keep good RF performance, do this
calibration again if the delta of thermal value from the last calibration
is more than 8.
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520071731.38563-5-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw89/core.h | 5 ++++
drivers/net/wireless/realtek/rtw89/rtw8852c.c | 1 +
.../net/wireless/realtek/rtw89/rtw8852c_rfk.c | 27 +++++++++++++++++++
.../net/wireless/realtek/rtw89/rtw8852c_rfk.h | 1 +
4 files changed, 34 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index 46e806650c6c..0b5fcad1b62f 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -2647,6 +2647,10 @@ struct rtw89_lck_info {
u8 thermal[RF_PATH_MAX];
};
+struct rtw89_rx_dck_info {
+ u8 thermal[RF_PATH_MAX];
+};
+
struct rtw89_iqk_info {
bool lok_cor_fail[RTW89_IQK_CHS_NR][RTW89_IQK_PATH_NR];
bool lok_fin_fail[RTW89_IQK_CHS_NR][RTW89_IQK_PATH_NR];
@@ -3126,6 +3130,7 @@ struct rtw89_dev {
struct rtw89_dpk_info dpk;
struct rtw89_mcc_info mcc;
struct rtw89_lck_info lck;
+ struct rtw89_rx_dck_info rx_dck;
bool is_tssi_mode[RF_PATH_MAX];
bool is_bt_iqk_timeout;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 64840c8d9efe..b697aef2faf2 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -1861,6 +1861,7 @@ static void rtw8852c_rfk_track(struct rtw89_dev *rtwdev)
{
rtw8852c_dpk_track(rtwdev);
rtw8852c_lck_track(rtwdev);
+ rtw8852c_rx_dck_track(rtwdev);
}
static u32 rtw8852c_bb_cal_txpwr_ref(struct rtw89_dev *rtwdev,
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c b/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c
index dfb9caba9bc4..4186d825d19b 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.c
@@ -3864,6 +3864,7 @@ void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_afe)
{
+ struct rtw89_rx_dck_info *rx_dck = &rtwdev->rx_dck;
u8 path, kpath;
u32 rf_reg5;
@@ -3883,6 +3884,7 @@ void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_a
rtw89_write_rf(rtwdev, path, RR_RSV1, RR_RSV1_RST, 0x0);
rtw89_write_rf(rtwdev, path, RR_MOD, RR_MOD_MASK, RR_MOD_V_RX);
_set_rx_dck(rtwdev, phy, path, is_afe);
+ rx_dck->thermal[path] = ewma_thermal_read(&rtwdev->phystat.avg_thermal[path]);
rtw89_write_rf(rtwdev, path, RR_RSV1, RFREG_MASK, rf_reg5);
if (rtwdev->is_tssi_mode[path])
@@ -3891,6 +3893,31 @@ void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy, bool is_a
}
}
+#define RTW8852C_RX_DCK_TH 8
+
+void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev)
+{
+ struct rtw89_rx_dck_info *rx_dck = &rtwdev->rx_dck;
+ u8 cur_thermal;
+ int delta;
+ int path;
+
+ for (path = 0; path < RF_PATH_NUM_8852C; path++) {
+ cur_thermal =
+ ewma_thermal_read(&rtwdev->phystat.avg_thermal[path]);
+ delta = abs((int)cur_thermal - rx_dck->thermal[path]);
+
+ rtw89_debug(rtwdev, RTW89_DBG_RFK_TRACK,
+ "[RX_DCK] path=%d current thermal=0x%x delta=0x%x\n",
+ path, cur_thermal, delta);
+
+ if (delta >= RTW8852C_RX_DCK_TH) {
+ rtw8852c_rx_dck(rtwdev, RTW89_PHY_0, false);
+ return;
+ }
+ }
+}
+
void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
{
u32 tx_en;
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.h b/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.h
index c32756f0c01a..5118a49da8d3 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.h
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c_rfk.h
@@ -12,6 +12,7 @@ void rtw8852c_rck(struct rtw89_dev *rtwdev);
void rtw8852c_dack(struct rtw89_dev *rtwdev);
void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool is_afe);
+void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev);
void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
void rtw8852c_dpk_track(struct rtw89_dev *rtwdev);
void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
--
2.35.3

View File

@@ -0,0 +1,146 @@
From 2075698fe87a34c5cffa18a6738f5696b65027c9 Mon Sep 17 00:00:00 2001
From: Po Hao Huang <phhuang@realtek.com>
Date: Fri, 20 May 2022 15:17:26 +0800
Subject: [PATCH 522/533] rtw89: fix channel inconsistency during hw_scan
Previously channel maintained by driver could be different from the
ones hardware actually is. Restore these variables back to prevent
unexpected behavior.
Signed-off-by: Po Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520071731.38563-2-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw89/core.c | 2 +-
drivers/net/wireless/realtek/rtw89/fw.c | 20 ++++++++++++++-----
drivers/net/wireless/realtek/rtw89/fw.h | 5 +----
drivers/net/wireless/realtek/rtw89/mac.c | 15 ++++++++------
drivers/net/wireless/realtek/rtw89/mac80211.c | 2 +-
5 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
index c23ecf4675f3..7c12ac10945b 100644
--- a/drivers/net/wireless/realtek/rtw89/core.c
+++ b/drivers/net/wireless/realtek/rtw89/core.c
@@ -1608,7 +1608,7 @@ static void rtw89_core_update_rx_status(struct rtw89_dev *rtwdev,
if (rtwdev->scanning &&
RTW89_CHK_FW_FEATURE(SCAN_OFFLOAD, &rtwdev->fw)) {
- u8 chan = hal->current_channel;
+ u8 chan = hal->current_primary_channel;
u8 band = hal->current_band_type;
enum nl80211_band nl_band;
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 168d853e2c1d..04f6da04781b 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -2343,6 +2343,9 @@ void rtw89_hw_scan_complete(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
rtwvif->scan_req = NULL;
rtwvif->scan_ies = NULL;
rtwdev->scan_info.scanning_vif = NULL;
+
+ if (rtwvif->net_type != RTW89_NET_TYPE_NO_LINK)
+ rtw89_store_op_chan(rtwdev, false);
}
void rtw89_hw_scan_abort(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
@@ -2374,15 +2377,22 @@ int rtw89_hw_scan_offload(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
return ret;
}
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev)
+void rtw89_store_op_chan(struct rtw89_dev *rtwdev, bool backup)
{
struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info;
struct rtw89_hal *hal = &rtwdev->hal;
- scan_info->op_pri_ch = hal->current_primary_channel;
- scan_info->op_chan = hal->current_channel;
- scan_info->op_bw = hal->current_band_width;
- scan_info->op_band = hal->current_band_type;
+ if (backup) {
+ scan_info->op_pri_ch = hal->current_primary_channel;
+ scan_info->op_chan = hal->current_channel;
+ scan_info->op_bw = hal->current_band_width;
+ scan_info->op_band = hal->current_band_type;
+ } else {
+ hal->current_primary_channel = scan_info->op_pri_ch;
+ hal->current_channel = scan_info->op_chan;
+ hal->current_band_width = scan_info->op_bw;
+ hal->current_band_type = scan_info->op_band;
+ }
}
#define H2C_FW_CPU_EXCEPTION_LEN 4
diff --git a/drivers/net/wireless/realtek/rtw89/fw.h b/drivers/net/wireless/realtek/rtw89/fw.h
index 95a55c4213db..e75ad22aa85d 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.h
+++ b/drivers/net/wireless/realtek/rtw89/fw.h
@@ -2633,17 +2633,14 @@ int rtw89_fw_msg_reg(struct rtw89_dev *rtwdev,
struct rtw89_mac_c2h_info *c2h_info);
int rtw89_fw_h2c_fw_log(struct rtw89_dev *rtwdev, bool enable);
void rtw89_fw_st_dbg_dump(struct rtw89_dev *rtwdev);
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev);
+void rtw89_store_op_chan(struct rtw89_dev *rtwdev, bool backup);
void rtw89_hw_scan_start(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
struct ieee80211_scan_request *req);
void rtw89_hw_scan_complete(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
bool aborted);
int rtw89_hw_scan_offload(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
bool enable);
-void rtw89_hw_scan_status_report(struct rtw89_dev *rtwdev, struct sk_buff *skb);
-void rtw89_hw_scan_chan_switch(struct rtw89_dev *rtwdev, struct sk_buff *skb);
void rtw89_hw_scan_abort(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif);
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev);
int rtw89_fw_h2c_trigger_cpu_exception(struct rtw89_dev *rtwdev);
#endif
diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index facd0abb50bd..f5f63f9746f2 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -3681,17 +3681,20 @@ rtw89_mac_c2h_scanofld_rsp(struct rtw89_dev *rtwdev, struct sk_buff *c2h,
rtw89_hw_scan_complete(rtwdev, vif, false);
break;
case RTW89_SCAN_ENTER_CH_NOTIFY:
- if (rtw89_is_op_chan(rtwdev, band, chan))
+ hal->prev_band_type = hal->current_band_type;
+ hal->current_band_type = band;
+ hal->prev_primary_channel = hal->current_primary_channel;
+ hal->current_primary_channel = chan;
+ hal->current_channel = chan;
+ hal->current_band_width = RTW89_CHANNEL_WIDTH_20;
+ if (rtw89_is_op_chan(rtwdev, band, chan)) {
+ rtw89_store_op_chan(rtwdev, false);
ieee80211_wake_queues(rtwdev->hw);
+ }
break;
default:
return;
}
-
- hal->prev_band_type = hal->current_band_type;
- hal->prev_primary_channel = hal->current_channel;
- hal->current_channel = chan;
- hal->current_band_type = band;
}
static void
diff --git a/drivers/net/wireless/realtek/rtw89/mac80211.c b/drivers/net/wireless/realtek/rtw89/mac80211.c
index f24e4a208376..6d0c62c545a7 100644
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
@@ -350,7 +350,7 @@ static void rtw89_ops_bss_info_changed(struct ieee80211_hw *hw,
rtw89_phy_set_bss_color(rtwdev, vif);
rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, vif);
rtw89_mac_port_update(rtwdev, rtwvif);
- rtw89_store_op_chan(rtwdev);
+ rtw89_store_op_chan(rtwdev, true);
} else {
/* Abort ongoing scan if cancel_scan isn't issued
* when disconnected by peer
--
2.35.3

View File

@@ -0,0 +1,60 @@
From 8487193008b94e728a5f79a0977cf26fb20ded41 Mon Sep 17 00:00:00 2001
From: Po Hao Huang <phhuang@realtek.com>
Date: Fri, 20 May 2022 15:17:27 +0800
Subject: [PATCH 523/533] rtw89: fix null vif pointer when hw_scan fails
Add this check to avoid crash by dereferencing a null pointer. When hwscan
fails due to no memory or dma failure, the scan flag in ieee80211_local is
cleared. So mac80211 determine that it's not hw_scan then calls
sw_scan_complete() with null vif, which is also freed during the fail.
Signed-off-by: Po Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520071731.38563-3-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw89/core.c | 5 ++++-
drivers/net/wireless/realtek/rtw89/fw.c | 4 ++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
index 7c12ac10945b..631dcdff4d0d 100644
--- a/drivers/net/wireless/realtek/rtw89/core.c
+++ b/drivers/net/wireless/realtek/rtw89/core.c
@@ -2875,7 +2875,10 @@ void rtw89_core_scan_start(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
void rtw89_core_scan_complete(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif, bool hw_scan)
{
- struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
+ struct rtw89_vif *rtwvif = vif ? (struct rtw89_vif *)vif->drv_priv : NULL;
+
+ if (!rtwvif)
+ return;
ether_addr_copy(rtwvif->mac_addr, vif->addr);
rtw89_fw_h2c_cam(rtwdev, rtwvif, NULL, NULL);
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 04f6da04781b..ab991e644a85 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -2261,7 +2261,7 @@ static int rtw89_hw_scan_add_chan_list(struct rtw89_dev *rtwdev,
list_add_tail(&ch_info->list, &chan_list);
off_chan_time += ch_info->period;
}
- rtw89_fw_h2c_scan_list_offload(rtwdev, list_len, &chan_list);
+ ret = rtw89_fw_h2c_scan_list_offload(rtwdev, list_len, &chan_list);
out:
list_for_each_entry_safe(ch_info, tmp, &chan_list, list) {
@@ -2372,7 +2372,7 @@ int rtw89_hw_scan_offload(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
if (ret)
goto out;
}
- rtw89_fw_h2c_scan_offload(rtwdev, &opt, rtwvif);
+ ret = rtw89_fw_h2c_scan_offload(rtwdev, &opt, rtwvif);
out:
return ret;
}
--
2.35.3

View File

@@ -0,0 +1,86 @@
From d6bdfee6210a0a509ad7677eaafac391b1ef9f9a Mon Sep 17 00:00:00 2001
From: Ping-Ke Shih <pkshih@realtek.com>
Date: Fri, 20 May 2022 15:17:28 +0800
Subject: [PATCH 524/533] rtw89: pci: handle hardware watchdog timeout
interrupt status
This watchdog timeout status bit indicates hardware gets wrong, so run SER
L2 flow that calls mac80211 to restart hardware.
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520071731.38563-4-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw89/mac.h | 1 +
drivers/net/wireless/realtek/rtw89/pci.c | 9 ++++++---
drivers/net/wireless/realtek/rtw89/pci.h | 1 +
3 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/mac.h b/drivers/net/wireless/realtek/rtw89/mac.h
index 9f511c8d8a37..f66619354734 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.h
+++ b/drivers/net/wireless/realtek/rtw89/mac.h
@@ -666,6 +666,7 @@ enum mac_ax_err_info {
MAC_AX_ERR_L2_ERR_APB_BBRF_TO_RX4281 = 0x2360,
MAC_AX_ERR_L2_ERR_APB_BBRF_TO_OTHERS = 0x2370,
MAC_AX_ERR_L2_RESET_DONE = 0x2400,
+ MAC_AX_ERR_L2_ERR_WDT_TIMEOUT_INT = 0x2599,
MAC_AX_ERR_CPU_EXCEPTION = 0x3000,
MAC_AX_ERR_ASSERTION = 0x4000,
MAC_AX_GET_ERR_MAX,
diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
index 0ef7821b2e0f..25872dfb4da1 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.c
+++ b/drivers/net/wireless/realtek/rtw89/pci.c
@@ -738,6 +738,9 @@ static irqreturn_t rtw89_pci_interrupt_threadfn(int irq, void *dev)
if (unlikely(isrs.halt_c2h_isrs & B_AX_HALT_C2H_INT_EN))
rtw89_ser_notify(rtwdev, rtw89_mac_get_err_status(rtwdev));
+ if (unlikely(isrs.halt_c2h_isrs & B_AX_WDT_TIMEOUT_INT_EN))
+ rtw89_ser_notify(rtwdev, MAC_AX_ERR_L2_ERR_WDT_TIMEOUT_INT);
+
if (unlikely(rtwpci->under_recovery))
goto enable_intr;
@@ -3126,7 +3129,7 @@ static void rtw89_pci_recovery_intr_mask_v1(struct rtw89_dev *rtwdev)
struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
rtwpci->ind_intrs = B_AX_HS0ISR_IND_INT_EN;
- rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN;
+ rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN | B_AX_WDT_TIMEOUT_INT_EN;
rtwpci->intrs[0] = 0;
rtwpci->intrs[1] = 0;
}
@@ -3138,7 +3141,7 @@ static void rtw89_pci_default_intr_mask_v1(struct rtw89_dev *rtwdev)
rtwpci->ind_intrs = B_AX_HCI_AXIDMA_INT_EN |
B_AX_HS1ISR_IND_INT_EN |
B_AX_HS0ISR_IND_INT_EN;
- rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN;
+ rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN | B_AX_WDT_TIMEOUT_INT_EN;
rtwpci->intrs[0] = B_AX_TXDMA_STUCK_INT_EN |
B_AX_RXDMA_INT_EN |
B_AX_RXP1DMA_INT_EN |
@@ -3155,7 +3158,7 @@ static void rtw89_pci_low_power_intr_mask_v1(struct rtw89_dev *rtwdev)
rtwpci->ind_intrs = B_AX_HS1ISR_IND_INT_EN |
B_AX_HS0ISR_IND_INT_EN;
- rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN;
+ rtwpci->halt_c2h_intrs = B_AX_HALT_C2H_INT_EN | B_AX_WDT_TIMEOUT_INT_EN;
rtwpci->intrs[0] = 0;
rtwpci->intrs[1] = B_AX_GPIO18_INT_EN;
}
diff --git a/drivers/net/wireless/realtek/rtw89/pci.h b/drivers/net/wireless/realtek/rtw89/pci.h
index bb585ed19190..a118647213e3 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.h
+++ b/drivers/net/wireless/realtek/rtw89/pci.h
@@ -94,6 +94,7 @@
/* Interrupts */
#define R_AX_HIMR0 0x01A0
+#define B_AX_WDT_TIMEOUT_INT_EN BIT(22)
#define B_AX_HALT_C2H_INT_EN BIT(21)
#define R_AX_HISR0 0x01A4
--
2.35.3

View File

@@ -0,0 +1,260 @@
From 9bdb1c3de58e2e94ff8cda1350749612978f65d1 Mon Sep 17 00:00:00 2001
From: Zong-Zhe Yang <kevin_yang@realtek.com>
Date: Fri, 20 May 2022 15:17:30 +0800
Subject: [PATCH 526/533] rtw89: sar: adjust and support SAR on 6GHz band
Since SAR is more expected to follow U-NII bands to plan subbands,
division of 6GHz band is quite different from defined enum of subbands
which is used by PHY in most cases. It's hard and painful if we want to
keep using the same enum on SAR. So, we introduce another enum for SAR
subbands and adjust SAR flow to use it.
Besides, since 6GHz SAR subbands won't be divided with edge alignment,
some cases will span two SAR subbands. For these cases, we describe them
within an array of rtw89_sar_span and take the smaller one between SAR
settings of the two subbands.
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220520071731.38563-6-pkshih@realtek.com
---
drivers/net/wireless/realtek/rtw89/core.h | 19 ++-
drivers/net/wireless/realtek/rtw89/debug.h | 1 +
drivers/net/wireless/realtek/rtw89/sar.c | 140 ++++++++++++++++++---
3 files changed, 140 insertions(+), 20 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index 0b5fcad1b62f..71e66c7ac858 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -2551,9 +2551,24 @@ enum rtw89_sar_sources {
RTW89_SAR_SOURCE_NR,
};
+enum rtw89_sar_subband {
+ RTW89_SAR_2GHZ_SUBBAND,
+ RTW89_SAR_5GHZ_SUBBAND_1_2, /* U-NII-1 and U-NII-2 */
+ RTW89_SAR_5GHZ_SUBBAND_2_E, /* U-NII-2-Extended */
+ RTW89_SAR_5GHZ_SUBBAND_3, /* U-NII-3 */
+ RTW89_SAR_6GHZ_SUBBAND_5_L, /* U-NII-5 lower part */
+ RTW89_SAR_6GHZ_SUBBAND_5_H, /* U-NII-5 higher part */
+ RTW89_SAR_6GHZ_SUBBAND_6, /* U-NII-6 */
+ RTW89_SAR_6GHZ_SUBBAND_7_L, /* U-NII-7 lower part */
+ RTW89_SAR_6GHZ_SUBBAND_7_H, /* U-NII-7 higher part */
+ RTW89_SAR_6GHZ_SUBBAND_8, /* U-NII-8 */
+
+ RTW89_SAR_SUBBAND_NR,
+};
+
struct rtw89_sar_cfg_common {
- bool set[RTW89_SUBBAND_NR];
- s32 cfg[RTW89_SUBBAND_NR];
+ bool set[RTW89_SAR_SUBBAND_NR];
+ s32 cfg[RTW89_SAR_SUBBAND_NR];
};
struct rtw89_sar_info {
diff --git a/drivers/net/wireless/realtek/rtw89/debug.h b/drivers/net/wireless/realtek/rtw89/debug.h
index de72155ad1fe..561b04faf703 100644
--- a/drivers/net/wireless/realtek/rtw89/debug.h
+++ b/drivers/net/wireless/realtek/rtw89/debug.h
@@ -24,6 +24,7 @@ enum rtw89_debug_mask {
RTW89_DBG_BTC = BIT(13),
RTW89_DBG_BF = BIT(14),
RTW89_DBG_HW_SCAN = BIT(15),
+ RTW89_DBG_SAR = BIT(16),
};
enum rtw89_debug_mac_reg_sel {
diff --git a/drivers/net/wireless/realtek/rtw89/sar.c b/drivers/net/wireless/realtek/rtw89/sar.c
index 097c87899cea..eb2d3ec28775 100644
--- a/drivers/net/wireless/realtek/rtw89/sar.c
+++ b/drivers/net/wireless/realtek/rtw89/sar.c
@@ -5,15 +5,122 @@
#include "debug.h"
#include "sar.h"
+static enum rtw89_sar_subband rtw89_sar_get_subband(struct rtw89_dev *rtwdev,
+ u32 center_freq)
+{
+ switch (center_freq) {
+ default:
+ rtw89_debug(rtwdev, RTW89_DBG_SAR,
+ "center freq: %u to SAR subband is unhandled\n",
+ center_freq);
+ fallthrough;
+ case 2412 ... 2484:
+ return RTW89_SAR_2GHZ_SUBBAND;
+ case 5180 ... 5320:
+ return RTW89_SAR_5GHZ_SUBBAND_1_2;
+ case 5500 ... 5720:
+ return RTW89_SAR_5GHZ_SUBBAND_2_E;
+ case 5745 ... 5825:
+ return RTW89_SAR_5GHZ_SUBBAND_3;
+ case 5955 ... 6155:
+ return RTW89_SAR_6GHZ_SUBBAND_5_L;
+ case 6175 ... 6415:
+ return RTW89_SAR_6GHZ_SUBBAND_5_H;
+ case 6435 ... 6515:
+ return RTW89_SAR_6GHZ_SUBBAND_6;
+ case 6535 ... 6695:
+ return RTW89_SAR_6GHZ_SUBBAND_7_L;
+ case 6715 ... 6855:
+ return RTW89_SAR_6GHZ_SUBBAND_7_H;
+
+ /* freq 6875 (ch 185, 20MHz) spans RTW89_SAR_6GHZ_SUBBAND_7_H
+ * and RTW89_SAR_6GHZ_SUBBAND_8, so directly describe it with
+ * struct rtw89_sar_span in the following.
+ */
+
+ case 6895 ... 7115:
+ return RTW89_SAR_6GHZ_SUBBAND_8;
+ }
+}
+
+struct rtw89_sar_span {
+ enum rtw89_sar_subband subband_low;
+ enum rtw89_sar_subband subband_high;
+};
+
+#define RTW89_SAR_SPAN_VALID(span) ((span)->subband_high)
+
+#define RTW89_SAR_6GHZ_SPAN_HEAD 6145
+#define RTW89_SAR_6GHZ_SPAN_IDX(center_freq) \
+ ((((int)(center_freq) - RTW89_SAR_6GHZ_SPAN_HEAD) / 5) / 2)
+
+#define RTW89_DECL_SAR_6GHZ_SPAN(center_freq, subband_l, subband_h) \
+ [RTW89_SAR_6GHZ_SPAN_IDX(center_freq)] = { \
+ .subband_low = RTW89_SAR_6GHZ_ ## subband_l, \
+ .subband_high = RTW89_SAR_6GHZ_ ## subband_h, \
+ }
+
+/* Since 6GHz SAR subbands are not edge aligned, some cases span two SAR
+ * subbands. In the following, we describe each of them with rtw89_sar_span.
+ */
+static const struct rtw89_sar_span rtw89_sar_overlapping_6ghz[] = {
+ RTW89_DECL_SAR_6GHZ_SPAN(6145, SUBBAND_5_L, SUBBAND_5_H),
+ RTW89_DECL_SAR_6GHZ_SPAN(6165, SUBBAND_5_L, SUBBAND_5_H),
+ RTW89_DECL_SAR_6GHZ_SPAN(6185, SUBBAND_5_L, SUBBAND_5_H),
+ RTW89_DECL_SAR_6GHZ_SPAN(6505, SUBBAND_6, SUBBAND_7_L),
+ RTW89_DECL_SAR_6GHZ_SPAN(6525, SUBBAND_6, SUBBAND_7_L),
+ RTW89_DECL_SAR_6GHZ_SPAN(6545, SUBBAND_6, SUBBAND_7_L),
+ RTW89_DECL_SAR_6GHZ_SPAN(6665, SUBBAND_7_L, SUBBAND_7_H),
+ RTW89_DECL_SAR_6GHZ_SPAN(6705, SUBBAND_7_L, SUBBAND_7_H),
+ RTW89_DECL_SAR_6GHZ_SPAN(6825, SUBBAND_7_H, SUBBAND_8),
+ RTW89_DECL_SAR_6GHZ_SPAN(6865, SUBBAND_7_H, SUBBAND_8),
+ RTW89_DECL_SAR_6GHZ_SPAN(6875, SUBBAND_7_H, SUBBAND_8),
+ RTW89_DECL_SAR_6GHZ_SPAN(6885, SUBBAND_7_H, SUBBAND_8),
+};
+
static int rtw89_query_sar_config_common(struct rtw89_dev *rtwdev, s32 *cfg)
{
struct rtw89_sar_cfg_common *rtwsar = &rtwdev->sar.cfg_common;
- enum rtw89_subband subband = rtwdev->hal.current_subband;
+ struct rtw89_hal *hal = &rtwdev->hal;
+ enum rtw89_band band = hal->current_band_type;
+ u32 center_freq = hal->current_freq;
+ const struct rtw89_sar_span *span = NULL;
+ enum rtw89_sar_subband subband_l, subband_h;
+ int idx;
+
+ if (band == RTW89_BAND_6G) {
+ idx = RTW89_SAR_6GHZ_SPAN_IDX(center_freq);
+ /* To decrease size of rtw89_sar_overlapping_6ghz[],
+ * RTW89_SAR_6GHZ_SPAN_IDX() truncates the leading NULLs
+ * to make first span as index 0 of the table. So, if center
+ * frequency is less than the first one, it will get netative.
+ */
+ if (idx >= 0 && idx < ARRAY_SIZE(rtw89_sar_overlapping_6ghz))
+ span = &rtw89_sar_overlapping_6ghz[idx];
+ }
+
+ if (span && RTW89_SAR_SPAN_VALID(span)) {
+ subband_l = span->subband_low;
+ subband_h = span->subband_high;
+ } else {
+ subband_l = rtw89_sar_get_subband(rtwdev, center_freq);
+ subband_h = subband_l;
+ }
+
+ rtw89_debug(rtwdev, RTW89_DBG_SAR,
+ "for {band %u, center_freq %u}, SAR subband: {%u, %u}\n",
+ band, center_freq, subband_l, subband_h);
- if (!rtwsar->set[subband])
+ if (!rtwsar->set[subband_l] && !rtwsar->set[subband_h])
return -ENODATA;
- *cfg = rtwsar->cfg[subband];
+ if (!rtwsar->set[subband_l])
+ *cfg = rtwsar->cfg[subband_h];
+ else if (!rtwsar->set[subband_h])
+ *cfg = rtwsar->cfg[subband_l];
+ else
+ *cfg = min(rtwsar->cfg[subband_l], rtwsar->cfg[subband_h]);
+
return 0;
}
@@ -128,21 +235,20 @@ static int rtw89_apply_sar_common(struct rtw89_dev *rtwdev,
return ret;
}
-static const u8 rtw89_common_sar_subband_map[] = {
- RTW89_CH_2G,
- RTW89_CH_5G_BAND_1,
- RTW89_CH_5G_BAND_3,
- RTW89_CH_5G_BAND_4,
-};
-
static const struct cfg80211_sar_freq_ranges rtw89_common_sar_freq_ranges[] = {
{ .start_freq = 2412, .end_freq = 2484, },
{ .start_freq = 5180, .end_freq = 5320, },
{ .start_freq = 5500, .end_freq = 5720, },
{ .start_freq = 5745, .end_freq = 5825, },
+ { .start_freq = 5955, .end_freq = 6155, },
+ { .start_freq = 6175, .end_freq = 6415, },
+ { .start_freq = 6435, .end_freq = 6515, },
+ { .start_freq = 6535, .end_freq = 6695, },
+ { .start_freq = 6715, .end_freq = 6875, },
+ { .start_freq = 6875, .end_freq = 7115, },
};
-static_assert(ARRAY_SIZE(rtw89_common_sar_subband_map) ==
+static_assert(RTW89_SAR_SUBBAND_NR ==
ARRAY_SIZE(rtw89_common_sar_freq_ranges));
const struct cfg80211_sar_capa rtw89_sar_capa = {
@@ -159,7 +265,6 @@ int rtw89_ops_set_sar_specs(struct ieee80211_hw *hw,
u8 fct;
u32 freq_start;
u32 freq_end;
- u32 band;
s32 power;
u32 i, idx;
@@ -175,15 +280,14 @@ int rtw89_ops_set_sar_specs(struct ieee80211_hw *hw,
freq_start = rtw89_common_sar_freq_ranges[idx].start_freq;
freq_end = rtw89_common_sar_freq_ranges[idx].end_freq;
- band = rtw89_common_sar_subband_map[idx];
power = sar->sub_specs[i].power;
- rtw89_info(rtwdev, "On freq %u to %u, ", freq_start, freq_end);
- rtw89_info(rtwdev, "set SAR power limit %d (unit: 1/%lu dBm)\n",
- power, BIT(fct));
+ rtw89_debug(rtwdev, RTW89_DBG_SAR,
+ "On freq %u to %u, set SAR limit %d (unit: 1/%lu dBm)\n",
+ freq_start, freq_end, power, BIT(fct));
- sar_common.set[band] = true;
- sar_common.cfg[band] = power;
+ sar_common.set[idx] = true;
+ sar_common.cfg[idx] = power;
}
return rtw89_apply_sar_common(rtwdev, &sar_common);
--
2.35.3

View File

@@ -0,0 +1,85 @@
From e219f56c5c82560ec99889d8b8b6f544c70fbfc7 Mon Sep 17 00:00:00 2001
From: Larry Finger <Larry.Finger@lwfinger.net>
Date: Tue, 24 May 2022 10:36:20 -0500
Subject: [PATCH 530/533] wifi: rtw88: Fix Sparse warning for rtw8723d_hw_spec
Sparse lists the following:
CHECK drivers/net/wireless/realtek/rtw88/rtw8723d.c
drivers/net/wireless/realtek/rtw88/rtw8723d.c:2704:22: warning: symbol 'rtw8723d_hw_spec' was not declared. Should it be static?
The warning arises because the external declaration for rtw8723d_hw_spec
occurs in rtw8723de.h, which is not included in rtw8723d.h. That line is
moved, and the now empty file rtw8723de.h is deleted.
Symbol 'rtw8723d_hw_spec' can be made constant.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220524153621.19027-4-Larry.Finger@lwfinger.net
---
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723d.h | 2 ++
drivers/net/wireless/realtek/rtw88/rtw8723de.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8723de.h | 10 ----------
4 files changed, 4 insertions(+), 12 deletions(-)
delete mode 100644 drivers/net/wireless/realtek/rtw88/rtw8723de.h
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.c b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
index 93cce44df531..993bd6b1d723 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
@@ -2701,7 +2701,7 @@ static const struct rtw_reg_domain coex_info_hw_regs_8723d[] = {
{0x953, BIT(1), RTW_REG_DOMAIN_MAC8},
};
-struct rtw_chip_info rtw8723d_hw_spec = {
+const struct rtw_chip_info rtw8723d_hw_spec = {
.ops = &rtw8723d_ops,
.id = RTW_CHIP_TYPE_8723D,
.fw_name = "rtw88/rtw8723d_fw.bin",
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.h b/drivers/net/wireless/realtek/rtw88/rtw8723d.h
index 41d35174a542..4641f6e047b4 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.h
@@ -72,6 +72,8 @@ struct rtw8723d_efuse {
struct rtw8723de_efuse e;
};
+extern const struct rtw_chip_info rtw8723d_hw_spec;
+
/* phy status page0 */
#define GET_PHY_STAT_P0_PWDB(phy_stat) \
le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723de.c b/drivers/net/wireless/realtek/rtw88/rtw8723de.c
index 2dd689441e8d..abbaafa32851 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8723de.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723de.c
@@ -5,7 +5,7 @@
#include <linux/module.h>
#include <linux/pci.h>
#include "pci.h"
-#include "rtw8723de.h"
+#include "rtw8723d.h"
static const struct pci_device_id rtw_8723de_id_table[] = {
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723de.h b/drivers/net/wireless/realtek/rtw88/rtw8723de.h
deleted file mode 100644
index 2b4894846a07..000000000000
--- a/drivers/net/wireless/realtek/rtw88/rtw8723de.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2018-2019 Realtek Corporation
- */
-
-#ifndef __RTW_8723DE_H_
-#define __RTW_8723DE_H_
-
-extern struct rtw_chip_info rtw8723d_hw_spec;
-
-#endif
--
2.35.3

View File

@@ -0,0 +1,85 @@
From 4b0b473a2d36d607e447dde90107a4e23b577958 Mon Sep 17 00:00:00 2001
From: Larry Finger <Larry.Finger@lwfinger.net>
Date: Tue, 24 May 2022 10:37:16 -0500
Subject: [PATCH 531/533] wifi: rtw88: Fix Sparse warning for rtw8821c_hw_spec
Sparse lists the following:
CHECK drivers/net/wireless/realtek/rtw88/rtw8821c.c
drivers/net/wireless/realtek/rtw88/rtw8821c.c:1880:22: warning: symbol 'rtw8821c_hw_spec' was not declared. Should it be static?
The warning arises because the external declaration for rtw8821c_hw_spec
occurs in rtw8821ce.h, which is not included in rtw8821c.h. That line is
moved, and the now empty file rtw8821ce.h is deleted.
Symbol 'rtw8821c_hw_spec' can be made constant.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220524153716.20450-1-Larry.Finger@lwfinger.net
---
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 2 ++
drivers/net/wireless/realtek/rtw88/rtw8821ce.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8821ce.h | 10 ----------
4 files changed, 4 insertions(+), 12 deletions(-)
delete mode 100644 drivers/net/wireless/realtek/rtw88/rtw8821ce.h
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
index ffee39ea5df6..42841f5d502c 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
@@ -1877,7 +1877,7 @@ static const struct rtw_reg_domain coex_info_hw_regs_8821c[] = {
{0x60A, MASKBYTE0, RTW_REG_DOMAIN_MAC8},
};
-struct rtw_chip_info rtw8821c_hw_spec = {
+const struct rtw_chip_info rtw8821c_hw_spec = {
.ops = &rtw8821c_ops,
.id = RTW_CHIP_TYPE_8821C,
.fw_name = "rtw88/rtw8821c_fw.bin",
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.h b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
index d9fbddd7b0f3..2698801fc35d 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
@@ -84,6 +84,8 @@ _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
rtw_write32_mask(rtwdev, addr + 0x200, mask, data);
}
+extern const struct rtw_chip_info rtw8821c_hw_spec;
+
#define rtw_write32s_mask(rtwdev, addr, mask, data) \
do { \
BUILD_BUG_ON((addr) < 0xC00 || (addr) >= 0xD00); \
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821ce.c b/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
index 56d22f9de904..f3d971feda04 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
@@ -5,7 +5,7 @@
#include <linux/module.h>
#include <linux/pci.h>
#include "pci.h"
-#include "rtw8821ce.h"
+#include "rtw8821c.h"
static const struct pci_device_id rtw_8821ce_id_table[] = {
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821ce.h b/drivers/net/wireless/realtek/rtw88/rtw8821ce.h
deleted file mode 100644
index 54142acca534..000000000000
--- a/drivers/net/wireless/realtek/rtw88/rtw8821ce.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2018-2019 Realtek Corporation
- */
-
-#ifndef __RTW_8821CE_H_
-#define __RTW_8821CE_H_
-
-extern struct rtw_chip_info rtw8821c_hw_spec;
-
-#endif
--
2.35.3

View File

@@ -0,0 +1,85 @@
From fb978627fc0416048179dea30c98a40bd791f4dc Mon Sep 17 00:00:00 2001
From: Larry Finger <Larry.Finger@lwfinger.net>
Date: Tue, 24 May 2022 10:36:19 -0500
Subject: [PATCH 529/533] wifi: rtw88: Fix Sparse warning for rtw8822c_hw_spec
Sparse reports the following:
CHECK drivers/net/wireless/realtek/rtw88/rtw8822c.c
drivers/net/wireless/realtek/rtw88/rtw8822c.c:5313:22: warning: symbol 'rtw8822c_hw_spec' was not declared. Should it be static?
The warning arises because the external declaration for rtw8822c_hw_spec
occurs in rtw8822ce.h, which is not included in rtw8822c.h. That line is
moved, and the now empty file rtw8822ce.h is deleted.
Symbol 'rtw8822c_hw_spec' can be made constant.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220524153621.19027-3-Larry.Finger@lwfinger.net
---
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822c.h | 2 ++
drivers/net/wireless/realtek/rtw88/rtw8822ce.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822ce.h | 10 ----------
4 files changed, 4 insertions(+), 12 deletions(-)
delete mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822ce.h
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
index c043b5c520b9..09f9e4adcf34 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -5310,7 +5310,7 @@ static const struct rtw_reg_domain coex_info_hw_regs_8822c[] = {
{0xc50, MASKBYTE0, RTW_REG_DOMAIN_MAC8},
};
-struct rtw_chip_info rtw8822c_hw_spec = {
+const struct rtw_chip_info rtw8822c_hw_spec = {
.ops = &rtw8822c_ops,
.id = RTW_CHIP_TYPE_8822C,
.fw_name = "rtw88/rtw8822c_fw.bin",
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
index 8201955e1f21..479d5d769c52 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
@@ -118,6 +118,8 @@ enum rtw8822c_dpk_one_shot_action {
void rtw8822c_parse_tbl_dpk(struct rtw_dev *rtwdev,
const struct rtw_table *tbl);
+extern const struct rtw_chip_info rtw8822c_hw_spec;
+
#define RTW_DECL_TABLE_DPK(name) \
const struct rtw_table name ## _tbl = { \
.data = name, \
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822ce.c b/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
index 3845b1333dc3..e26c6bc82936 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
@@ -5,7 +5,7 @@
#include <linux/module.h>
#include <linux/pci.h>
#include "pci.h"
-#include "rtw8822ce.h"
+#include "rtw8822c.h"
static const struct pci_device_id rtw_8822ce_id_table[] = {
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822ce.h b/drivers/net/wireless/realtek/rtw88/rtw8822ce.h
deleted file mode 100644
index fee32d7a4504..000000000000
--- a/drivers/net/wireless/realtek/rtw88/rtw8822ce.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2018-2019 Realtek Corporation
- */
-
-#ifndef __RTW_8822CE_H_
-#define __RTW_8822CE_H_
-
-extern struct rtw_chip_info rtw8822c_hw_spec;
-
-#endif
--
2.35.3

View File

@@ -0,0 +1,84 @@
From cbafda0636916a0ee8b4b2180c883f1df3a7014c Mon Sep 17 00:00:00 2001
From: Larry Finger <Larry.Finger@lwfinger.net>
Date: Tue, 24 May 2022 10:36:18 -0500
Subject: [PATCH 528/533] wifi: rtw88: Fix sparse warning for rtw8822b_hw_spec
Sparse lists the following for rtw88:
CHECK drivers/net/wireless/realtek/rtw88/rtw8822b.c
drivers/net/wireless/realtek/rtw88/rtw8822b.c:2500:22: warning: symbol 'rtw8822b_hw_spec' was not declared. Should it be static?
The warning arises because the external declaration for rtw8822b_hw_spec
occurs in rtw8822be.h, which is not included in rtw8822b.h. That line is
moved, and the now empty file rtw8822be.h is deleted.
Symbol 'rtw8822b_hw_spec' can be made constant.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220524153621.19027-2-Larry.Finger@lwfinger.net
---
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 2 ++
drivers/net/wireless/realtek/rtw88/rtw8822be.c | 2 +-
drivers/net/wireless/realtek/rtw88/rtw8822be.h | 10 ----------
4 files changed, 4 insertions(+), 12 deletions(-)
delete mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822be.h
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
index dccd722b8e62..321848870561 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
@@ -2497,7 +2497,7 @@ static struct rtw_hw_reg_offset rtw8822b_edcca_th[] = {
[EDCCA_TH_H2L_IDX] = {{.addr = 0x8a4, .mask = MASKBYTE1}, .offset = 0},
};
-struct rtw_chip_info rtw8822b_hw_spec = {
+const struct rtw_chip_info rtw8822b_hw_spec = {
.ops = &rtw8822b_ops,
.id = RTW_CHIP_TYPE_8822B,
.fw_name = "rtw88/rtw8822b_fw.bin",
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
index 3fff8b881854..01d3644e0c94 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
@@ -187,4 +187,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
#define REG_ANTWT 0x1904
#define REG_IQKFAILMSK 0x1bf0
+extern const struct rtw_chip_info rtw8822b_hw_spec;
+
#endif
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822be.c b/drivers/net/wireless/realtek/rtw88/rtw8822be.c
index 62ee7e62cac0..4994950776cd 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822be.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822be.c
@@ -5,7 +5,7 @@
#include <linux/module.h>
#include <linux/pci.h>
#include "pci.h"
-#include "rtw8822be.h"
+#include "rtw8822b.h"
static const struct pci_device_id rtw_8822be_id_table[] = {
{
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822be.h b/drivers/net/wireless/realtek/rtw88/rtw8822be.h
deleted file mode 100644
index 6668460d664d..000000000000
--- a/drivers/net/wireless/realtek/rtw88/rtw8822be.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2018-2019 Realtek Corporation
- */
-
-#ifndef __RTW_8822BE_H_
-#define __RTW_8822BE_H_
-
-extern struct rtw_chip_info rtw8822b_hw_spec;
-
-#endif
--
2.35.3

View File

@@ -390,11 +390,11 @@
patches.megous/input-pinephone-keyboard-Allow-disabling-the-keyboard-input.patch
patches.megous/rtw88-change-idle-mode-condition-during-hw_scan.patch
patches.megous/rtw88-add-ieee80211-sta_rc_update-ops.patch
patches.megous/rtw88-fix-incorrect-frequency-reported.patch
- patches.megous/rtw88-fix-incorrect-frequency-reported.patch
patches.megous/rtw88-Add-update-beacon-flow-for-AP-mode.patch
patches.megous/rtw88-8821c-Enable-TX-report-for-management-frames.patch
patches.megous/rtw88-do-PHY-calibration-while-starting-AP.patch
patches.megous/rtw88-8821c-fix-debugfs-rssi-value.patch
- patches.megous/rtw88-8821c-fix-debugfs-rssi-value.patch
patches.megous/rtw88-8821ce-add-support-for-device-ID-0xb821.patch
patches.megous/rtw88-8821ce-Disable-PCIe-ASPM-L1-for-8821CE-using-chip-ID.patch
patches.megous/rtw88-fix-uninitialized-tim_offset-warning.patch
@@ -405,7 +405,7 @@
patches.megous/rtw88-fix-hw-scan-may-cause-disconnect-issue.patch
patches.megous/rtw88-remove-a-copy-of-the-NAPI_POLL_WEIGHT-define.patch
patches.megous/rtw88-adjust-adaptivity-option-to-1.patch
patches.megous/rtw89-ser-fix-CAM-leaks-occurring-in-L2-reset.patch
- patches.megous/rtw89-ser-fix-CAM-leaks-occurring-in-L2-reset.patch
patches.megous/rtw89-mac-move-table-of-mem-base-addr-to-common.patch
patches.megous/rtw89-mac-correct-decision-on-error-status-by-scenario.patch
patches.megous/rtw89-ser-control-hci-interrupts-on-off-by-state.patch
@@ -445,7 +445,7 @@
patches.megous/rtw89-change-idle-mode-condition-during-hw_scan.patch
patches.megous/rtw89-packet-offload-handler-to-avoid-warning.patch
patches.megous/rtw89-coex-Add-case-for-scan-offload.patch
patches.megous/rtw89-fix-misconfiguration-on-hw_scan-channel-time.patch
- patches.megous/rtw89-fix-misconfiguration-on-hw_scan-channel-time.patch
patches.megous/rtw89-ser-fix-unannotated-fall-through.patch
patches.megous/rtw89-ser-configure-D-MAC-interrupt-mask.patch
patches.megous/rtw89-ser-configure-C-MAC-interrupt-mask.patch
@@ -510,7 +510,7 @@
patches.megous/rtw89-add-debug-entry-to-dump-BSSID-CAM.patch
patches.megous/rtw89-add-ieee80211-sta_rc_update-ops.patch
patches.megous/rtw89-8852c-set-TX-antenna-path.patch
patches.megous/rtw89-cfo-check-mac_id-to-avoid-out-of-bounds.patch
- patches.megous/rtw89-cfo-check-mac_id-to-avoid-out-of-bounds.patch
patches.megous/rtw89-8852c-update-txpwr-tables-to-HALRF_027_00_052.patch
patches.megous/rtw89-convert-rtw89_band-to-nl80211_band-precisely.patch
patches.megous/rtw89-pci-only-mask-out-INT-indicator-register-for-disable-inte.patch
@@ -522,6 +522,24 @@
patches.megous/iio-af8133j-Add-runtime-power-management.patch
patches.megous/rtw88-add-a-work-to-correct-atomic-scheduling-warning-of-set_ti.patch
# tag: orange-pi-5.18-20220526-2012
patches.megous/power-supply-rk818-battery-Speed-up-battery-current-readout.patch
patches.megous/leds-sgm3140-Add-missing-timer-cleanup-and-flash-gpio-control.patch
patches.megous/arm64-dts-rk3399-pinephone-pro-Use-4-lane-mode-for-selfie-camer.patch
patches.megous/media-ov8858-Increase-analog-gain-range.patch
patches.megous/media-ov8858-Add-support-for-digital-gain-control.patch
patches.megous/rtw89-fix-channel-inconsistency-during-hw_scan.patch
patches.megous/rtw89-fix-null-vif-pointer-when-hw_scan-fails.patch
patches.megous/rtw89-pci-handle-hardware-watchdog-timeout-interrupt-status.patch
patches.megous/rtw89-8852c-rfk-re-calibrate-RX-DCK-once-thermal-changes-a-lot.patch
patches.megous/rtw89-sar-adjust-and-support-SAR-on-6GHz-band.patch
patches.megous/rtw88-fix-null-vif-pointer-when-hw_scan-fails.patch
patches.megous/wifi-rtw88-Fix-sparse-warning-for-rtw8822b_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8822c_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8723d_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8821c_hw_spec.patch
patches.megous/media-imx258-Add-debug-register-access.patch
patches.megous/Import-pgwipeout-s-pcie-regs-ranges.patch
# tag: orange-pi-5.18-20220609-1318
############################################################################
#

View File

@@ -390,11 +390,11 @@
patches.megous/input-pinephone-keyboard-Allow-disabling-the-keyboard-input.patch
patches.megous/rtw88-change-idle-mode-condition-during-hw_scan.patch
patches.megous/rtw88-add-ieee80211-sta_rc_update-ops.patch
patches.megous/rtw88-fix-incorrect-frequency-reported.patch
- patches.megous/rtw88-fix-incorrect-frequency-reported.patch
patches.megous/rtw88-Add-update-beacon-flow-for-AP-mode.patch
patches.megous/rtw88-8821c-Enable-TX-report-for-management-frames.patch
patches.megous/rtw88-do-PHY-calibration-while-starting-AP.patch
patches.megous/rtw88-8821c-fix-debugfs-rssi-value.patch
- patches.megous/rtw88-8821c-fix-debugfs-rssi-value.patch
patches.megous/rtw88-8821ce-add-support-for-device-ID-0xb821.patch
patches.megous/rtw88-8821ce-Disable-PCIe-ASPM-L1-for-8821CE-using-chip-ID.patch
patches.megous/rtw88-fix-uninitialized-tim_offset-warning.patch
@@ -405,7 +405,7 @@
patches.megous/rtw88-fix-hw-scan-may-cause-disconnect-issue.patch
patches.megous/rtw88-remove-a-copy-of-the-NAPI_POLL_WEIGHT-define.patch
patches.megous/rtw88-adjust-adaptivity-option-to-1.patch
patches.megous/rtw89-ser-fix-CAM-leaks-occurring-in-L2-reset.patch
- patches.megous/rtw89-ser-fix-CAM-leaks-occurring-in-L2-reset.patch
patches.megous/rtw89-mac-move-table-of-mem-base-addr-to-common.patch
patches.megous/rtw89-mac-correct-decision-on-error-status-by-scenario.patch
patches.megous/rtw89-ser-control-hci-interrupts-on-off-by-state.patch
@@ -445,7 +445,7 @@
patches.megous/rtw89-change-idle-mode-condition-during-hw_scan.patch
patches.megous/rtw89-packet-offload-handler-to-avoid-warning.patch
patches.megous/rtw89-coex-Add-case-for-scan-offload.patch
patches.megous/rtw89-fix-misconfiguration-on-hw_scan-channel-time.patch
- patches.megous/rtw89-fix-misconfiguration-on-hw_scan-channel-time.patch
patches.megous/rtw89-ser-fix-unannotated-fall-through.patch
patches.megous/rtw89-ser-configure-D-MAC-interrupt-mask.patch
patches.megous/rtw89-ser-configure-C-MAC-interrupt-mask.patch
@@ -510,7 +510,7 @@
patches.megous/rtw89-add-debug-entry-to-dump-BSSID-CAM.patch
patches.megous/rtw89-add-ieee80211-sta_rc_update-ops.patch
patches.megous/rtw89-8852c-set-TX-antenna-path.patch
patches.megous/rtw89-cfo-check-mac_id-to-avoid-out-of-bounds.patch
- patches.megous/rtw89-cfo-check-mac_id-to-avoid-out-of-bounds.patch
patches.megous/rtw89-8852c-update-txpwr-tables-to-HALRF_027_00_052.patch
patches.megous/rtw89-convert-rtw89_band-to-nl80211_band-precisely.patch
patches.megous/rtw89-pci-only-mask-out-INT-indicator-register-for-disable-inte.patch
@@ -522,3 +522,21 @@
patches.megous/iio-af8133j-Add-runtime-power-management.patch
patches.megous/rtw88-add-a-work-to-correct-atomic-scheduling-warning-of-set_ti.patch
# tag: orange-pi-5.18-20220526-2012
patches.megous/power-supply-rk818-battery-Speed-up-battery-current-readout.patch
patches.megous/leds-sgm3140-Add-missing-timer-cleanup-and-flash-gpio-control.patch
patches.megous/arm64-dts-rk3399-pinephone-pro-Use-4-lane-mode-for-selfie-camer.patch
patches.megous/media-ov8858-Increase-analog-gain-range.patch
patches.megous/media-ov8858-Add-support-for-digital-gain-control.patch
patches.megous/rtw89-fix-channel-inconsistency-during-hw_scan.patch
patches.megous/rtw89-fix-null-vif-pointer-when-hw_scan-fails.patch
patches.megous/rtw89-pci-handle-hardware-watchdog-timeout-interrupt-status.patch
patches.megous/rtw89-8852c-rfk-re-calibrate-RX-DCK-once-thermal-changes-a-lot.patch
patches.megous/rtw89-sar-adjust-and-support-SAR-on-6GHz-band.patch
patches.megous/rtw88-fix-null-vif-pointer-when-hw_scan-fails.patch
patches.megous/wifi-rtw88-Fix-sparse-warning-for-rtw8822b_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8822c_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8723d_hw_spec.patch
patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8821c_hw_spec.patch
patches.megous/media-imx258-Add-debug-register-access.patch
patches.megous/Import-pgwipeout-s-pcie-regs-ranges.patch
# tag: orange-pi-5.18-20220609-1318