diff --git a/config/sources/families/include/sunxi64_common.inc b/config/sources/families/include/sunxi64_common.inc index fea1c624a..ba59c3970 100644 --- a/config/sources/families/include/sunxi64_common.inc +++ b/config/sources/families/include/sunxi64_common.inc @@ -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 diff --git a/config/sources/families/include/sunxi_common.inc b/config/sources/families/include/sunxi_common.inc index 050c7ebdc..09fdabfa3 100644 --- a/config/sources/families/include/sunxi_common.inc +++ b/config/sources/families/include/sunxi_common.inc @@ -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 diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/Bluetooth-Add-new-quirk-for-broken-local-ext-features-max_page.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/Bluetooth-Add-new-quirk-for-broken-local-ext-features-max_page.patch index a45d0e831..6ef56a427 100644 --- a/patch/kernel/archive/sunxi-5.18/patches.megous/Bluetooth-Add-new-quirk-for-broken-local-ext-features-max_page.patch +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/Bluetooth-Add-new-quirk-for-broken-local-ext-features-max_page.patch @@ -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 diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/Import-pgwipeout-s-pcie-regs-ranges.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/Import-pgwipeout-s-pcie-regs-ranges.patch new file mode 100644 index 000000000..6f39a73ac --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/Import-pgwipeout-s-pcie-regs-ranges.patch @@ -0,0 +1,54 @@ +From 8ceed49e8da109562c399f9501ca9b96880312f8 Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 = ; + }; +- + }; + + sdmmc0: mmc@fe2b0000 { +-- +2.35.3 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/arm64-dts-rk3399-pinephone-pro-Use-4-lane-mode-for-selfie-camer.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/arm64-dts-rk3399-pinephone-pro-Use-4-lane-mode-for-selfie-camer.patch new file mode 100644 index 000000000..c03bbaeeb --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/arm64-dts-rk3399-pinephone-pro-Use-4-lane-mode-for-selfie-camer.patch @@ -0,0 +1,47 @@ +From f87eeb4faa7318b779f858a674821a3cc13e6e35 Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/leds-sgm3140-Add-missing-timer-cleanup-and-flash-gpio-control.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/leds-sgm3140-Add-missing-timer-cleanup-and-flash-gpio-control.patch new file mode 100644 index 000000000..41224f911 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/leds-sgm3140-Add-missing-timer-cleanup-and-flash-gpio-control.patch @@ -0,0 +1,33 @@ +From da83e39c7f6db79ff634b547db3ba586cb6bf9e1 Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/mailbox-Allow-to-run-mailbox-while-timekeeping-is-suspended.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/mailbox-Allow-to-run-mailbox-while-timekeeping-is-suspended.patch index 282ce912d..2ae95f55d 100644 --- a/patch/kernel/archive/sunxi-5.18/patches.megous/mailbox-Allow-to-run-mailbox-while-timekeeping-is-suspended.patch +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/mailbox-Allow-to-run-mailbox-while-timekeeping-is-suspended.patch @@ -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); diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/media-imx258-Add-debug-register-access.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/media-imx258-Add-debug-register-access.patch new file mode 100644 index 000000000..cec9b16c0 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/media-imx258-Add-debug-register-access.patch @@ -0,0 +1,81 @@ +From b4175e2709a7fa7afeb88efadaef4071c2e643b9 Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Add-support-for-digital-gain-control.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Add-support-for-digital-gain-control.patch new file mode 100644 index 000000000..68a261aab --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Add-support-for-digital-gain-control.patch @@ -0,0 +1,82 @@ +From 3c3580ab6e90b4a47d0896b91c86347dc1271ecd Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Increase-analog-gain-range.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Increase-analog-gain-range.patch new file mode 100644 index 000000000..912223508 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/media-ov8858-Increase-analog-gain-range.patch @@ -0,0 +1,30 @@ +From 7e3327366b72fb2ede59b438566472eb0728ddfe Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/power-supply-rk818-battery-Speed-up-battery-current-readout.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/power-supply-rk818-battery-Speed-up-battery-current-readout.patch new file mode 100644 index 000000000..7f9eac41a --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/power-supply-rk818-battery-Speed-up-battery-current-readout.patch @@ -0,0 +1,36 @@ +From ca1b069c460adc12ec8e589b482b0fae7ed770cf Mon Sep 17 00:00:00 2001 +From: Ondrej Jirman +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 +--- + 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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw88-fix-null-vif-pointer-when-hw_scan-fails.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw88-fix-null-vif-pointer-when-hw_scan-fails.patch new file mode 100644 index 000000000..30e9e9e12 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw88-fix-null-vif-pointer-when-hw_scan-fails.patch @@ -0,0 +1,39 @@ +From bafd3eecaabac850ed27da95409dcf1268db3ced Mon Sep 17 00:00:00 2001 +From: Po-Hao Huang +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 +Signed-off-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-8852c-rfk-re-calibrate-RX-DCK-once-thermal-changes-a-lot.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-8852c-rfk-re-calibrate-RX-DCK-once-thermal-changes-a-lot.patch new file mode 100644 index 000000000..6719400a0 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-8852c-rfk-re-calibrate-RX-DCK-once-thermal-changes-a-lot.patch @@ -0,0 +1,122 @@ +From f2a523820ea1be304d576a2cf1872bb495465b10 Mon Sep 17 00:00:00 2001 +From: Ping-Ke Shih +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 +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-channel-inconsistency-during-hw_scan.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-channel-inconsistency-during-hw_scan.patch new file mode 100644 index 000000000..830cf348d --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-channel-inconsistency-during-hw_scan.patch @@ -0,0 +1,146 @@ +From 2075698fe87a34c5cffa18a6738f5696b65027c9 Mon Sep 17 00:00:00 2001 +From: Po Hao Huang +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 +Signed-off-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-null-vif-pointer-when-hw_scan-fails.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-null-vif-pointer-when-hw_scan-fails.patch new file mode 100644 index 000000000..919fffbf2 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-fix-null-vif-pointer-when-hw_scan-fails.patch @@ -0,0 +1,60 @@ +From 8487193008b94e728a5f79a0977cf26fb20ded41 Mon Sep 17 00:00:00 2001 +From: Po Hao Huang +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 +Signed-off-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-pci-handle-hardware-watchdog-timeout-interrupt-status.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-pci-handle-hardware-watchdog-timeout-interrupt-status.patch new file mode 100644 index 000000000..3148986d4 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-pci-handle-hardware-watchdog-timeout-interrupt-status.patch @@ -0,0 +1,86 @@ +From d6bdfee6210a0a509ad7677eaafac391b1ef9f9a Mon Sep 17 00:00:00 2001 +From: Ping-Ke Shih +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 +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-sar-adjust-and-support-SAR-on-6GHz-band.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-sar-adjust-and-support-SAR-on-6GHz-band.patch new file mode 100644 index 000000000..df3c48910 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/rtw89-sar-adjust-and-support-SAR-on-6GHz-band.patch @@ -0,0 +1,260 @@ +From 9bdb1c3de58e2e94ff8cda1350749612978f65d1 Mon Sep 17 00:00:00 2001 +From: Zong-Zhe Yang +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 +Signed-off-by: Ping-Ke Shih +Signed-off-by: Kalle Valo +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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8723d_hw_spec.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8723d_hw_spec.patch new file mode 100644 index 000000000..300635d76 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8723d_hw_spec.patch @@ -0,0 +1,85 @@ +From e219f56c5c82560ec99889d8b8b6f544c70fbfc7 Mon Sep 17 00:00:00 2001 +From: Larry Finger +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 +Signed-off-by: Kalle Valo +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 + #include + #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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8821c_hw_spec.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8821c_hw_spec.patch new file mode 100644 index 000000000..9ba61ee64 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8821c_hw_spec.patch @@ -0,0 +1,85 @@ +From 4b0b473a2d36d607e447dde90107a4e23b577958 Mon Sep 17 00:00:00 2001 +From: Larry Finger +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 +Signed-off-by: Kalle Valo +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 + #include + #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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8822c_hw_spec.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8822c_hw_spec.patch new file mode 100644 index 000000000..4c7fa8090 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-Sparse-warning-for-rtw8822c_hw_spec.patch @@ -0,0 +1,85 @@ +From fb978627fc0416048179dea30c98a40bd791f4dc Mon Sep 17 00:00:00 2001 +From: Larry Finger +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 +Signed-off-by: Kalle Valo +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 + #include + #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 + diff --git a/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-sparse-warning-for-rtw8822b_hw_spec.patch b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-sparse-warning-for-rtw8822b_hw_spec.patch new file mode 100644 index 000000000..3ec00edf7 --- /dev/null +++ b/patch/kernel/archive/sunxi-5.18/patches.megous/wifi-rtw88-Fix-sparse-warning-for-rtw8822b_hw_spec.patch @@ -0,0 +1,84 @@ +From cbafda0636916a0ee8b4b2180c883f1df3a7014c Mon Sep 17 00:00:00 2001 +From: Larry Finger +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 +Cc: Ping-Ke Shih +Signed-off-by: Kalle Valo +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 + #include + #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 + diff --git a/patch/kernel/archive/sunxi-5.18/series.conf b/patch/kernel/archive/sunxi-5.18/series.conf index 49b3c958a..8bd08ec15 100644 --- a/patch/kernel/archive/sunxi-5.18/series.conf +++ b/patch/kernel/archive/sunxi-5.18/series.conf @@ -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 ############################################################################ # diff --git a/patch/kernel/archive/sunxi-5.18/series.megous b/patch/kernel/archive/sunxi-5.18/series.megous index b1c1e0f52..acefc506d 100644 --- a/patch/kernel/archive/sunxi-5.18/series.megous +++ b/patch/kernel/archive/sunxi-5.18/series.megous @@ -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