Commit a1b7163a authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo
Browse files

wifi: rtw89: mac: define DMA channel mask to avoid unsupported channels



Six channels are unsupported by 8852b, so mask them out to prevent to
access undefined registers in this chip.

Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220927062611.30484-3-pkshih@realtek.com
parent 1bebcf08
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2716,6 +2716,7 @@ struct rtw89_chip_info {
	u8 dcfo_comp_sft;
	const struct rtw89_imr_info *imr_info;
	const struct rtw89_rrsr_cfgs *rrsr_cfgs;
	u32 dma_ch_mask;
};

union rtw89_bus_info {
+6 −0
Original line number Diff line number Diff line
@@ -827,6 +827,8 @@ static void hfc_func_en(struct rtw89_dev *rtwdev, bool en, bool h2c_en)

static int hfc_init(struct rtw89_dev *rtwdev, bool reset, bool en, bool h2c_en)
{
	const struct rtw89_chip_info *chip = rtwdev->chip;
	u32 dma_ch_mask = chip->dma_ch_mask;
	u8 ch;
	u32 ret = 0;

@@ -848,6 +850,8 @@ static int hfc_init(struct rtw89_dev *rtwdev, bool reset, bool en, bool h2c_en)
	}

	for (ch = RTW89_DMA_ACH0; ch < RTW89_DMA_H2C; ch++) {
		if (dma_ch_mask & BIT(ch))
			continue;
		ret = hfc_ch_ctrl(rtwdev, ch);
		if (ret)
			return ret;
@@ -863,6 +867,8 @@ static int hfc_init(struct rtw89_dev *rtwdev, bool reset, bool en, bool h2c_en)
		udelay(10);
	}
	for (ch = RTW89_DMA_ACH0; ch < RTW89_DMA_H2C; ch++) {
		if (dma_ch_mask & BIT(ch))
			continue;
		ret = hfc_upd_ch_info(rtwdev, ch);
		if (ret)
			return ret;
+1 −0
Original line number Diff line number Diff line
@@ -2281,6 +2281,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
	.dcfo_comp_sft		= 3,
	.imr_info		= &rtw8852a_imr_info,
	.rrsr_cfgs		= &rtw8852a_rrsr_cfgs,
	.dma_ch_mask		= 0,
};
EXPORT_SYMBOL(rtw8852a_chip_info);

+18 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/* Copyright(c) 2019-2022  Realtek Corporation
 */

#include "core.h"

const struct rtw89_chip_info rtw8852b_chip_info = {
	.chip_id		= RTL8852B,
	.dma_ch_mask		= BIT(RTW89_DMA_ACH4) | BIT(RTW89_DMA_ACH5) |
				  BIT(RTW89_DMA_ACH6) | BIT(RTW89_DMA_ACH7) |
				  BIT(RTW89_DMA_B1MG) | BIT(RTW89_DMA_B1HI),
};
EXPORT_SYMBOL(rtw8852b_chip_info);

MODULE_FIRMWARE("rtw89/rtw8852b_fw.bin");
MODULE_AUTHOR("Realtek Corporation");
MODULE_DESCRIPTION("Realtek 802.11ax wireless 8852B driver");
MODULE_LICENSE("Dual BSD/GPL");
+1 −0
Original line number Diff line number Diff line
@@ -3132,6 +3132,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
	.dcfo_comp_sft		= 5,
	.imr_info		= &rtw8852c_imr_info,
	.rrsr_cfgs		= &rtw8852c_rrsr_cfgs,
	.dma_ch_mask		= 0,
};
EXPORT_SYMBOL(rtw8852c_chip_info);