Merge ath-current from ath.git
ath10k * fix invalid NSS for 4x4 devices * add QCA9377 hw1.0 support * fix QCA6174 regression with CE5 usage wil6210 * new maintainer - Maya Erez
This commit is contained in:
commit
cecd4cfb54
6 changed files with 108 additions and 16 deletions
|
@ -1847,7 +1847,7 @@ S: Supported
|
||||||
F: drivers/net/wireless/ath/ath6kl/
|
F: drivers/net/wireless/ath/ath6kl/
|
||||||
|
|
||||||
WILOCITY WIL6210 WIRELESS DRIVER
|
WILOCITY WIL6210 WIRELESS DRIVER
|
||||||
M: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
|
M: Maya Erez <qca_merez@qca.qualcomm.com>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
L: wil6210@qca.qualcomm.com
|
L: wil6210@qca.qualcomm.com
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
|
@ -51,6 +51,7 @@ MODULE_PARM_DESC(rawmode, "Use raw 802.11 frame datapath");
|
||||||
static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
{
|
{
|
||||||
.id = QCA988X_HW_2_0_VERSION,
|
.id = QCA988X_HW_2_0_VERSION,
|
||||||
|
.dev_id = QCA988X_2_0_DEVICE_ID,
|
||||||
.name = "qca988x hw2.0",
|
.name = "qca988x hw2.0",
|
||||||
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 7,
|
.uart_pin = 7,
|
||||||
|
@ -69,6 +70,25 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = QCA6174_HW_2_1_VERSION,
|
.id = QCA6174_HW_2_1_VERSION,
|
||||||
|
.dev_id = QCA6164_2_1_DEVICE_ID,
|
||||||
|
.name = "qca6164 hw2.1",
|
||||||
|
.patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
|
||||||
|
.uart_pin = 6,
|
||||||
|
.otp_exe_param = 0,
|
||||||
|
.channel_counters_freq_hz = 88000,
|
||||||
|
.max_probe_resp_desc_thres = 0,
|
||||||
|
.fw = {
|
||||||
|
.dir = QCA6174_HW_2_1_FW_DIR,
|
||||||
|
.fw = QCA6174_HW_2_1_FW_FILE,
|
||||||
|
.otp = QCA6174_HW_2_1_OTP_FILE,
|
||||||
|
.board = QCA6174_HW_2_1_BOARD_DATA_FILE,
|
||||||
|
.board_size = QCA6174_BOARD_DATA_SZ,
|
||||||
|
.board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.id = QCA6174_HW_2_1_VERSION,
|
||||||
|
.dev_id = QCA6174_2_1_DEVICE_ID,
|
||||||
.name = "qca6174 hw2.1",
|
.name = "qca6174 hw2.1",
|
||||||
.patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 6,
|
.uart_pin = 6,
|
||||||
|
@ -86,6 +106,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = QCA6174_HW_3_0_VERSION,
|
.id = QCA6174_HW_3_0_VERSION,
|
||||||
|
.dev_id = QCA6174_2_1_DEVICE_ID,
|
||||||
.name = "qca6174 hw3.0",
|
.name = "qca6174 hw3.0",
|
||||||
.patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 6,
|
.uart_pin = 6,
|
||||||
|
@ -103,6 +124,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = QCA6174_HW_3_2_VERSION,
|
.id = QCA6174_HW_3_2_VERSION,
|
||||||
|
.dev_id = QCA6174_2_1_DEVICE_ID,
|
||||||
.name = "qca6174 hw3.2",
|
.name = "qca6174 hw3.2",
|
||||||
.patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 6,
|
.uart_pin = 6,
|
||||||
|
@ -121,6 +143,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = QCA99X0_HW_2_0_DEV_VERSION,
|
.id = QCA99X0_HW_2_0_DEV_VERSION,
|
||||||
|
.dev_id = QCA99X0_2_0_DEVICE_ID,
|
||||||
.name = "qca99x0 hw2.0",
|
.name = "qca99x0 hw2.0",
|
||||||
.patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 7,
|
.uart_pin = 7,
|
||||||
|
@ -139,10 +162,31 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = QCA9377_HW_1_0_DEV_VERSION,
|
.id = QCA9377_HW_1_0_DEV_VERSION,
|
||||||
|
.dev_id = QCA9377_1_0_DEVICE_ID,
|
||||||
.name = "qca9377 hw1.0",
|
.name = "qca9377 hw1.0",
|
||||||
.patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 7,
|
.uart_pin = 6,
|
||||||
.otp_exe_param = 0,
|
.otp_exe_param = 0,
|
||||||
|
.channel_counters_freq_hz = 88000,
|
||||||
|
.max_probe_resp_desc_thres = 0,
|
||||||
|
.fw = {
|
||||||
|
.dir = QCA9377_HW_1_0_FW_DIR,
|
||||||
|
.fw = QCA9377_HW_1_0_FW_FILE,
|
||||||
|
.otp = QCA9377_HW_1_0_OTP_FILE,
|
||||||
|
.board = QCA9377_HW_1_0_BOARD_DATA_FILE,
|
||||||
|
.board_size = QCA9377_BOARD_DATA_SZ,
|
||||||
|
.board_ext_size = QCA9377_BOARD_EXT_DATA_SZ,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||||
|
.dev_id = QCA9377_1_0_DEVICE_ID,
|
||||||
|
.name = "qca9377 hw1.1",
|
||||||
|
.patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
||||||
|
.uart_pin = 6,
|
||||||
|
.otp_exe_param = 0,
|
||||||
|
.channel_counters_freq_hz = 88000,
|
||||||
|
.max_probe_resp_desc_thres = 0,
|
||||||
.fw = {
|
.fw = {
|
||||||
.dir = QCA9377_HW_1_0_FW_DIR,
|
.dir = QCA9377_HW_1_0_FW_DIR,
|
||||||
.fw = QCA9377_HW_1_0_FW_FILE,
|
.fw = QCA9377_HW_1_0_FW_FILE,
|
||||||
|
@ -1263,7 +1307,8 @@ static int ath10k_init_hw_params(struct ath10k *ar)
|
||||||
for (i = 0; i < ARRAY_SIZE(ath10k_hw_params_list); i++) {
|
for (i = 0; i < ARRAY_SIZE(ath10k_hw_params_list); i++) {
|
||||||
hw_params = &ath10k_hw_params_list[i];
|
hw_params = &ath10k_hw_params_list[i];
|
||||||
|
|
||||||
if (hw_params->id == ar->target_version)
|
if (hw_params->id == ar->target_version &&
|
||||||
|
hw_params->dev_id == ar->dev_id)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -636,6 +636,7 @@ struct ath10k {
|
||||||
|
|
||||||
struct ath10k_hw_params {
|
struct ath10k_hw_params {
|
||||||
u32 id;
|
u32 id;
|
||||||
|
u16 dev_id;
|
||||||
const char *name;
|
const char *name;
|
||||||
u32 patch_load_addr;
|
u32 patch_load_addr;
|
||||||
int uart_pin;
|
int uart_pin;
|
||||||
|
|
|
@ -22,6 +22,12 @@
|
||||||
|
|
||||||
#define ATH10K_FW_DIR "ath10k"
|
#define ATH10K_FW_DIR "ath10k"
|
||||||
|
|
||||||
|
#define QCA988X_2_0_DEVICE_ID (0x003c)
|
||||||
|
#define QCA6164_2_1_DEVICE_ID (0x0041)
|
||||||
|
#define QCA6174_2_1_DEVICE_ID (0x003e)
|
||||||
|
#define QCA99X0_2_0_DEVICE_ID (0x0040)
|
||||||
|
#define QCA9377_1_0_DEVICE_ID (0x0042)
|
||||||
|
|
||||||
/* QCA988X 1.0 definitions (unsupported) */
|
/* QCA988X 1.0 definitions (unsupported) */
|
||||||
#define QCA988X_HW_1_0_CHIP_ID_REV 0x0
|
#define QCA988X_HW_1_0_CHIP_ID_REV 0x0
|
||||||
|
|
||||||
|
@ -42,6 +48,10 @@
|
||||||
#define QCA6174_HW_3_0_VERSION 0x05020000
|
#define QCA6174_HW_3_0_VERSION 0x05020000
|
||||||
#define QCA6174_HW_3_2_VERSION 0x05030000
|
#define QCA6174_HW_3_2_VERSION 0x05030000
|
||||||
|
|
||||||
|
/* QCA9377 target BMI version signatures */
|
||||||
|
#define QCA9377_HW_1_0_DEV_VERSION 0x05020000
|
||||||
|
#define QCA9377_HW_1_1_DEV_VERSION 0x05020001
|
||||||
|
|
||||||
enum qca6174_pci_rev {
|
enum qca6174_pci_rev {
|
||||||
QCA6174_PCI_REV_1_1 = 0x11,
|
QCA6174_PCI_REV_1_1 = 0x11,
|
||||||
QCA6174_PCI_REV_1_3 = 0x13,
|
QCA6174_PCI_REV_1_3 = 0x13,
|
||||||
|
@ -60,6 +70,11 @@ enum qca6174_chip_id_rev {
|
||||||
QCA6174_HW_3_2_CHIP_ID_REV = 10,
|
QCA6174_HW_3_2_CHIP_ID_REV = 10,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum qca9377_chip_id_rev {
|
||||||
|
QCA9377_HW_1_0_CHIP_ID_REV = 0x0,
|
||||||
|
QCA9377_HW_1_1_CHIP_ID_REV = 0x1,
|
||||||
|
};
|
||||||
|
|
||||||
#define QCA6174_HW_2_1_FW_DIR "ath10k/QCA6174/hw2.1"
|
#define QCA6174_HW_2_1_FW_DIR "ath10k/QCA6174/hw2.1"
|
||||||
#define QCA6174_HW_2_1_FW_FILE "firmware.bin"
|
#define QCA6174_HW_2_1_FW_FILE "firmware.bin"
|
||||||
#define QCA6174_HW_2_1_OTP_FILE "otp.bin"
|
#define QCA6174_HW_2_1_OTP_FILE "otp.bin"
|
||||||
|
@ -85,8 +100,6 @@ enum qca6174_chip_id_rev {
|
||||||
#define QCA99X0_HW_2_0_PATCH_LOAD_ADDR 0x1234
|
#define QCA99X0_HW_2_0_PATCH_LOAD_ADDR 0x1234
|
||||||
|
|
||||||
/* QCA9377 1.0 definitions */
|
/* QCA9377 1.0 definitions */
|
||||||
#define QCA9377_HW_1_0_DEV_VERSION 0x05020001
|
|
||||||
#define QCA9377_HW_1_0_CHIP_ID_REV 0x1
|
|
||||||
#define QCA9377_HW_1_0_FW_DIR ATH10K_FW_DIR "/QCA9377/hw1.0"
|
#define QCA9377_HW_1_0_FW_DIR ATH10K_FW_DIR "/QCA9377/hw1.0"
|
||||||
#define QCA9377_HW_1_0_FW_FILE "firmware.bin"
|
#define QCA9377_HW_1_0_FW_FILE "firmware.bin"
|
||||||
#define QCA9377_HW_1_0_OTP_FILE "otp.bin"
|
#define QCA9377_HW_1_0_OTP_FILE "otp.bin"
|
||||||
|
|
|
@ -4225,7 +4225,7 @@ static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
|
||||||
|
|
||||||
static u32 get_nss_from_chainmask(u16 chain_mask)
|
static u32 get_nss_from_chainmask(u16 chain_mask)
|
||||||
{
|
{
|
||||||
if ((chain_mask & 0x15) == 0x15)
|
if ((chain_mask & 0xf) == 0xf)
|
||||||
return 4;
|
return 4;
|
||||||
else if ((chain_mask & 0x7) == 0x7)
|
else if ((chain_mask & 0x7) == 0x7)
|
||||||
return 3;
|
return 3;
|
||||||
|
|
|
@ -57,12 +57,6 @@ MODULE_PARM_DESC(reset_mode, "0: auto, 1: warm only (default: 0)");
|
||||||
#define ATH10K_PCI_TARGET_WAIT 3000
|
#define ATH10K_PCI_TARGET_WAIT 3000
|
||||||
#define ATH10K_PCI_NUM_WARM_RESET_ATTEMPTS 3
|
#define ATH10K_PCI_NUM_WARM_RESET_ATTEMPTS 3
|
||||||
|
|
||||||
#define QCA988X_2_0_DEVICE_ID (0x003c)
|
|
||||||
#define QCA6164_2_1_DEVICE_ID (0x0041)
|
|
||||||
#define QCA6174_2_1_DEVICE_ID (0x003e)
|
|
||||||
#define QCA99X0_2_0_DEVICE_ID (0x0040)
|
|
||||||
#define QCA9377_1_0_DEVICE_ID (0x0042)
|
|
||||||
|
|
||||||
static const struct pci_device_id ath10k_pci_id_table[] = {
|
static const struct pci_device_id ath10k_pci_id_table[] = {
|
||||||
{ PCI_VDEVICE(ATHEROS, QCA988X_2_0_DEVICE_ID) }, /* PCI-E QCA988X V2 */
|
{ PCI_VDEVICE(ATHEROS, QCA988X_2_0_DEVICE_ID) }, /* PCI-E QCA988X V2 */
|
||||||
{ PCI_VDEVICE(ATHEROS, QCA6164_2_1_DEVICE_ID) }, /* PCI-E QCA6164 V2.1 */
|
{ PCI_VDEVICE(ATHEROS, QCA6164_2_1_DEVICE_ID) }, /* PCI-E QCA6164 V2.1 */
|
||||||
|
@ -92,7 +86,9 @@ static const struct ath10k_pci_supp_chip ath10k_pci_supp_chips[] = {
|
||||||
{ QCA6174_2_1_DEVICE_ID, QCA6174_HW_3_2_CHIP_ID_REV },
|
{ QCA6174_2_1_DEVICE_ID, QCA6174_HW_3_2_CHIP_ID_REV },
|
||||||
|
|
||||||
{ QCA99X0_2_0_DEVICE_ID, QCA99X0_HW_2_0_CHIP_ID_REV },
|
{ QCA99X0_2_0_DEVICE_ID, QCA99X0_HW_2_0_CHIP_ID_REV },
|
||||||
|
|
||||||
{ QCA9377_1_0_DEVICE_ID, QCA9377_HW_1_0_CHIP_ID_REV },
|
{ QCA9377_1_0_DEVICE_ID, QCA9377_HW_1_0_CHIP_ID_REV },
|
||||||
|
{ QCA9377_1_0_DEVICE_ID, QCA9377_HW_1_1_CHIP_ID_REV },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ath10k_pci_buffer_cleanup(struct ath10k *ar);
|
static void ath10k_pci_buffer_cleanup(struct ath10k *ar);
|
||||||
|
@ -111,8 +107,9 @@ static void ath10k_pci_htc_tx_cb(struct ath10k_ce_pipe *ce_state);
|
||||||
static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state);
|
static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state);
|
||||||
static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state);
|
static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state);
|
||||||
static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state);
|
static void ath10k_pci_htt_rx_cb(struct ath10k_ce_pipe *ce_state);
|
||||||
|
static void ath10k_pci_htt_htc_rx_cb(struct ath10k_ce_pipe *ce_state);
|
||||||
|
|
||||||
static const struct ce_attr host_ce_config_wlan[] = {
|
static struct ce_attr host_ce_config_wlan[] = {
|
||||||
/* CE0: host->target HTC control and raw streams */
|
/* CE0: host->target HTC control and raw streams */
|
||||||
{
|
{
|
||||||
.flags = CE_ATTR_FLAGS,
|
.flags = CE_ATTR_FLAGS,
|
||||||
|
@ -128,7 +125,7 @@ static const struct ce_attr host_ce_config_wlan[] = {
|
||||||
.src_nentries = 0,
|
.src_nentries = 0,
|
||||||
.src_sz_max = 2048,
|
.src_sz_max = 2048,
|
||||||
.dest_nentries = 512,
|
.dest_nentries = 512,
|
||||||
.recv_cb = ath10k_pci_htc_rx_cb,
|
.recv_cb = ath10k_pci_htt_htc_rx_cb,
|
||||||
},
|
},
|
||||||
|
|
||||||
/* CE2: target->host WMI */
|
/* CE2: target->host WMI */
|
||||||
|
@ -217,7 +214,7 @@ static const struct ce_attr host_ce_config_wlan[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Target firmware's Copy Engine configuration. */
|
/* Target firmware's Copy Engine configuration. */
|
||||||
static const struct ce_pipe_config target_ce_config_wlan[] = {
|
static struct ce_pipe_config target_ce_config_wlan[] = {
|
||||||
/* CE0: host->target HTC control and raw streams */
|
/* CE0: host->target HTC control and raw streams */
|
||||||
{
|
{
|
||||||
.pipenum = __cpu_to_le32(0),
|
.pipenum = __cpu_to_le32(0),
|
||||||
|
@ -330,7 +327,7 @@ static const struct ce_pipe_config target_ce_config_wlan[] = {
|
||||||
* This table is derived from the CE_PCI TABLE, above.
|
* This table is derived from the CE_PCI TABLE, above.
|
||||||
* It is passed to the Target at startup for use by firmware.
|
* It is passed to the Target at startup for use by firmware.
|
||||||
*/
|
*/
|
||||||
static const struct service_to_pipe target_service_to_ce_map_wlan[] = {
|
static struct service_to_pipe target_service_to_ce_map_wlan[] = {
|
||||||
{
|
{
|
||||||
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VO),
|
__cpu_to_le32(ATH10K_HTC_SVC_ID_WMI_DATA_VO),
|
||||||
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
__cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
||||||
|
@ -1208,6 +1205,16 @@ static void ath10k_pci_htc_rx_cb(struct ath10k_ce_pipe *ce_state)
|
||||||
ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler);
|
ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ath10k_pci_htt_htc_rx_cb(struct ath10k_ce_pipe *ce_state)
|
||||||
|
{
|
||||||
|
/* CE4 polling needs to be done whenever CE pipe which transports
|
||||||
|
* HTT Rx (target->host) is processed.
|
||||||
|
*/
|
||||||
|
ath10k_ce_per_engine_service(ce_state->ar, 4);
|
||||||
|
|
||||||
|
ath10k_pci_process_rx_cb(ce_state, ath10k_htc_rx_completion_handler);
|
||||||
|
}
|
||||||
|
|
||||||
/* Called by lower (CE) layer when a send to HTT Target completes. */
|
/* Called by lower (CE) layer when a send to HTT Target completes. */
|
||||||
static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state)
|
static void ath10k_pci_htt_tx_cb(struct ath10k_ce_pipe *ce_state)
|
||||||
{
|
{
|
||||||
|
@ -2027,6 +2034,29 @@ static int ath10k_pci_init_config(struct ath10k *ar)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ath10k_pci_override_ce_config(struct ath10k *ar)
|
||||||
|
{
|
||||||
|
struct ce_attr *attr;
|
||||||
|
struct ce_pipe_config *config;
|
||||||
|
|
||||||
|
/* For QCA6174 we're overriding the Copy Engine 5 configuration,
|
||||||
|
* since it is currently used for other feature.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Override Host's Copy Engine 5 configuration */
|
||||||
|
attr = &host_ce_config_wlan[5];
|
||||||
|
attr->src_sz_max = 0;
|
||||||
|
attr->dest_nentries = 0;
|
||||||
|
|
||||||
|
/* Override Target firmware's Copy Engine configuration */
|
||||||
|
config = &target_ce_config_wlan[5];
|
||||||
|
config->pipedir = __cpu_to_le32(PIPEDIR_OUT);
|
||||||
|
config->nbytes_max = __cpu_to_le32(2048);
|
||||||
|
|
||||||
|
/* Map from service/endpoint to Copy Engine */
|
||||||
|
target_service_to_ce_map_wlan[15].pipenum = __cpu_to_le32(1);
|
||||||
|
}
|
||||||
|
|
||||||
static int ath10k_pci_alloc_pipes(struct ath10k *ar)
|
static int ath10k_pci_alloc_pipes(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
||||||
|
@ -3020,6 +3050,9 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
||||||
goto err_core_destroy;
|
goto err_core_destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (QCA_REV_6174(ar))
|
||||||
|
ath10k_pci_override_ce_config(ar);
|
||||||
|
|
||||||
ret = ath10k_pci_alloc_pipes(ar);
|
ret = ath10k_pci_alloc_pipes(ar);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath10k_err(ar, "failed to allocate copy engine pipes: %d\n",
|
ath10k_err(ar, "failed to allocate copy engine pipes: %d\n",
|
||||||
|
|
Loading…
Add table
Reference in a new issue