aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Schramm <tobleminer@gmail.com>2018-01-30 07:06:05 -0500
committerKalle Valo <kvalo@codeaurora.org>2018-02-07 09:09:44 -0500
commit34f1cb339cae5c0b6b75094e2d5c79d19be424ed (patch)
tree85a36c23c1db09a5969e10e3ec23e79178cd6930
parentd5cc61119343b6f1b8716cfe591d4989ea0c5c28 (diff)
ath10k: add support for Ubiquiti rebranded QCA988X v2
Some modern Ubiquiti devices contain a rebranded QCA988X rev2 with a custom Ubiquiti vendor and device id. This patch adds support for those devices, treating them as a QCA988X v2. Signed-off-by: Tobias Schramm <tobleminer@gmail.com> [kvalo@codeaurora.org: rebase, add missing fields in hw_params, fix a long line in pci.c:61] Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
-rw-r--r--drivers/net/wireless/ath/ath10k/core.c29
-rw-r--r--drivers/net/wireless/ath/ath10k/hw.h1
-rw-r--r--drivers/net/wireless/ath/ath10k/pci.c6
3 files changed, 36 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
index b0fdc1023619..6fb282f76804 100644
--- a/drivers/net/wireless/ath/ath10k/core.c
+++ b/drivers/net/wireless/ath/ath10k/core.c
@@ -91,6 +91,35 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
91 .rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL, 91 .rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL,
92 }, 92 },
93 { 93 {
94 .id = QCA988X_HW_2_0_VERSION,
95 .dev_id = QCA988X_2_0_DEVICE_ID_UBNT,
96 .name = "qca988x hw2.0 ubiquiti",
97 .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
98 .uart_pin = 7,
99 .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
100 .otp_exe_param = 0,
101 .channel_counters_freq_hz = 88000,
102 .max_probe_resp_desc_thres = 0,
103 .cal_data_len = 2116,
104 .fw = {
105 .dir = QCA988X_HW_2_0_FW_DIR,
106 .board = QCA988X_HW_2_0_BOARD_DATA_FILE,
107 .board_size = QCA988X_BOARD_DATA_SZ,
108 .board_ext_size = QCA988X_BOARD_EXT_DATA_SZ,
109 },
110 .hw_ops = &qca988x_ops,
111 .decap_align_bytes = 4,
112 .spectral_bin_discard = 0,
113 .vht160_mcs_rx_highest = 0,
114 .vht160_mcs_tx_highest = 0,
115 .n_cipher_suites = 8,
116 .num_peers = TARGET_TLV_NUM_PEERS,
117 .ast_skid_limit = 0x10,
118 .num_wds_entries = 0x20,
119 .target_64bit = false,
120 .rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL,
121 },
122 {
94 .id = QCA9887_HW_1_0_VERSION, 123 .id = QCA9887_HW_1_0_VERSION,
95 .dev_id = QCA9887_1_0_DEVICE_ID, 124 .dev_id = QCA9887_1_0_DEVICE_ID,
96 .name = "qca9887 hw1.0", 125 .name = "qca9887 hw1.0",
diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h
index 6203bc65799b..413b1b4321f7 100644
--- a/drivers/net/wireless/ath/ath10k/hw.h
+++ b/drivers/net/wireless/ath/ath10k/hw.h
@@ -22,6 +22,7 @@
22 22
23#define ATH10K_FW_DIR "ath10k" 23#define ATH10K_FW_DIR "ath10k"
24 24
25#define QCA988X_2_0_DEVICE_ID_UBNT (0x11ac)
25#define QCA988X_2_0_DEVICE_ID (0x003c) 26#define QCA988X_2_0_DEVICE_ID (0x003c)
26#define QCA6164_2_1_DEVICE_ID (0x0041) 27#define QCA6164_2_1_DEVICE_ID (0x0041)
27#define QCA6174_2_1_DEVICE_ID (0x003e) 28#define QCA6174_2_1_DEVICE_ID (0x003e)
diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
index 355db6a0fcf3..1b266cd0c2ec 100644
--- a/drivers/net/wireless/ath/ath10k/pci.c
+++ b/drivers/net/wireless/ath/ath10k/pci.c
@@ -58,6 +58,9 @@ MODULE_PARM_DESC(reset_mode, "0: auto, 1: warm only (default: 0)");
58#define ATH10K_DIAG_TRANSFER_LIMIT 0x5000 58#define ATH10K_DIAG_TRANSFER_LIMIT 0x5000
59 59
60static const struct pci_device_id ath10k_pci_id_table[] = { 60static const struct pci_device_id ath10k_pci_id_table[] = {
61 /* PCI-E QCA988X V2 (Ubiquiti branded) */
62 { PCI_VDEVICE(UBIQUITI, QCA988X_2_0_DEVICE_ID_UBNT) },
63
61 { PCI_VDEVICE(ATHEROS, QCA988X_2_0_DEVICE_ID) }, /* PCI-E QCA988X V2 */ 64 { PCI_VDEVICE(ATHEROS, QCA988X_2_0_DEVICE_ID) }, /* PCI-E QCA988X V2 */
62 { PCI_VDEVICE(ATHEROS, QCA6164_2_1_DEVICE_ID) }, /* PCI-E QCA6164 V2.1 */ 65 { PCI_VDEVICE(ATHEROS, QCA6164_2_1_DEVICE_ID) }, /* PCI-E QCA6164 V2.1 */
63 { PCI_VDEVICE(ATHEROS, QCA6174_2_1_DEVICE_ID) }, /* PCI-E QCA6174 V2.1 */ 66 { PCI_VDEVICE(ATHEROS, QCA6174_2_1_DEVICE_ID) }, /* PCI-E QCA6174 V2.1 */
@@ -74,6 +77,7 @@ static const struct ath10k_pci_supp_chip ath10k_pci_supp_chips[] = {
74 * hacks. ath10k doesn't have them and these devices crash horribly 77 * hacks. ath10k doesn't have them and these devices crash horribly
75 * because of that. 78 * because of that.
76 */ 79 */
80 { QCA988X_2_0_DEVICE_ID_UBNT, QCA988X_HW_2_0_CHIP_ID_REV },
77 { QCA988X_2_0_DEVICE_ID, QCA988X_HW_2_0_CHIP_ID_REV }, 81 { QCA988X_2_0_DEVICE_ID, QCA988X_HW_2_0_CHIP_ID_REV },
78 82
79 { QCA6164_2_1_DEVICE_ID, QCA6174_HW_2_1_CHIP_ID_REV }, 83 { QCA6164_2_1_DEVICE_ID, QCA6174_HW_2_1_CHIP_ID_REV },
@@ -2193,6 +2197,7 @@ static int ath10k_pci_get_num_banks(struct ath10k *ar)
2193 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2197 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
2194 2198
2195 switch (ar_pci->pdev->device) { 2199 switch (ar_pci->pdev->device) {
2200 case QCA988X_2_0_DEVICE_ID_UBNT:
2196 case QCA988X_2_0_DEVICE_ID: 2201 case QCA988X_2_0_DEVICE_ID:
2197 case QCA99X0_2_0_DEVICE_ID: 2202 case QCA99X0_2_0_DEVICE_ID:
2198 case QCA9888_2_0_DEVICE_ID: 2203 case QCA9888_2_0_DEVICE_ID:
@@ -3424,6 +3429,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
3424 u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr); 3429 u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
3425 3430
3426 switch (pci_dev->device) { 3431 switch (pci_dev->device) {
3432 case QCA988X_2_0_DEVICE_ID_UBNT:
3427 case QCA988X_2_0_DEVICE_ID: 3433 case QCA988X_2_0_DEVICE_ID:
3428 hw_rev = ATH10K_HW_QCA988X; 3434 hw_rev = ATH10K_HW_QCA988X;
3429 pci_ps = false; 3435 pci_ps = false;