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>
This commit is contained in:
parent
d5cc611193
commit
34f1cb339c
|
@ -90,6 +90,35 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||||
.target_64bit = false,
|
.target_64bit = false,
|
||||||
.rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL,
|
.rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.id = QCA988X_HW_2_0_VERSION,
|
||||||
|
.dev_id = QCA988X_2_0_DEVICE_ID_UBNT,
|
||||||
|
.name = "qca988x hw2.0 ubiquiti",
|
||||||
|
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
||||||
|
.uart_pin = 7,
|
||||||
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
||||||
|
.otp_exe_param = 0,
|
||||||
|
.channel_counters_freq_hz = 88000,
|
||||||
|
.max_probe_resp_desc_thres = 0,
|
||||||
|
.cal_data_len = 2116,
|
||||||
|
.fw = {
|
||||||
|
.dir = QCA988X_HW_2_0_FW_DIR,
|
||||||
|
.board = QCA988X_HW_2_0_BOARD_DATA_FILE,
|
||||||
|
.board_size = QCA988X_BOARD_DATA_SZ,
|
||||||
|
.board_ext_size = QCA988X_BOARD_EXT_DATA_SZ,
|
||||||
|
},
|
||||||
|
.hw_ops = &qca988x_ops,
|
||||||
|
.decap_align_bytes = 4,
|
||||||
|
.spectral_bin_discard = 0,
|
||||||
|
.vht160_mcs_rx_highest = 0,
|
||||||
|
.vht160_mcs_tx_highest = 0,
|
||||||
|
.n_cipher_suites = 8,
|
||||||
|
.num_peers = TARGET_TLV_NUM_PEERS,
|
||||||
|
.ast_skid_limit = 0x10,
|
||||||
|
.num_wds_entries = 0x20,
|
||||||
|
.target_64bit = false,
|
||||||
|
.rx_ring_fill_level = HTT_RX_RING_FILL_LEVEL,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.id = QCA9887_HW_1_0_VERSION,
|
.id = QCA9887_HW_1_0_VERSION,
|
||||||
.dev_id = QCA9887_1_0_DEVICE_ID,
|
.dev_id = QCA9887_1_0_DEVICE_ID,
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#define ATH10K_FW_DIR "ath10k"
|
#define ATH10K_FW_DIR "ath10k"
|
||||||
|
|
||||||
|
#define QCA988X_2_0_DEVICE_ID_UBNT (0x11ac)
|
||||||
#define QCA988X_2_0_DEVICE_ID (0x003c)
|
#define QCA988X_2_0_DEVICE_ID (0x003c)
|
||||||
#define QCA6164_2_1_DEVICE_ID (0x0041)
|
#define QCA6164_2_1_DEVICE_ID (0x0041)
|
||||||
#define QCA6174_2_1_DEVICE_ID (0x003e)
|
#define QCA6174_2_1_DEVICE_ID (0x003e)
|
||||||
|
|
|
@ -58,6 +58,9 @@ MODULE_PARM_DESC(reset_mode, "0: auto, 1: warm only (default: 0)");
|
||||||
#define ATH10K_DIAG_TRANSFER_LIMIT 0x5000
|
#define ATH10K_DIAG_TRANSFER_LIMIT 0x5000
|
||||||
|
|
||||||
static const struct pci_device_id ath10k_pci_id_table[] = {
|
static const struct pci_device_id ath10k_pci_id_table[] = {
|
||||||
|
/* PCI-E QCA988X V2 (Ubiquiti branded) */
|
||||||
|
{ PCI_VDEVICE(UBIQUITI, QCA988X_2_0_DEVICE_ID_UBNT) },
|
||||||
|
|
||||||
{ 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 */
|
||||||
{ PCI_VDEVICE(ATHEROS, QCA6174_2_1_DEVICE_ID) }, /* PCI-E QCA6174 V2.1 */
|
{ 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[] = {
|
||||||
* hacks. ath10k doesn't have them and these devices crash horribly
|
* hacks. ath10k doesn't have them and these devices crash horribly
|
||||||
* because of that.
|
* because of that.
|
||||||
*/
|
*/
|
||||||
|
{ QCA988X_2_0_DEVICE_ID_UBNT, QCA988X_HW_2_0_CHIP_ID_REV },
|
||||||
{ QCA988X_2_0_DEVICE_ID, QCA988X_HW_2_0_CHIP_ID_REV },
|
{ QCA988X_2_0_DEVICE_ID, QCA988X_HW_2_0_CHIP_ID_REV },
|
||||||
|
|
||||||
{ QCA6164_2_1_DEVICE_ID, QCA6174_HW_2_1_CHIP_ID_REV },
|
{ 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)
|
||||||
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
||||||
|
|
||||||
switch (ar_pci->pdev->device) {
|
switch (ar_pci->pdev->device) {
|
||||||
|
case QCA988X_2_0_DEVICE_ID_UBNT:
|
||||||
case QCA988X_2_0_DEVICE_ID:
|
case QCA988X_2_0_DEVICE_ID:
|
||||||
case QCA99X0_2_0_DEVICE_ID:
|
case QCA99X0_2_0_DEVICE_ID:
|
||||||
case QCA9888_2_0_DEVICE_ID:
|
case QCA9888_2_0_DEVICE_ID:
|
||||||
|
@ -3424,6 +3429,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
||||||
u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
|
u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
|
||||||
|
|
||||||
switch (pci_dev->device) {
|
switch (pci_dev->device) {
|
||||||
|
case QCA988X_2_0_DEVICE_ID_UBNT:
|
||||||
case QCA988X_2_0_DEVICE_ID:
|
case QCA988X_2_0_DEVICE_ID:
|
||||||
hw_rev = ATH10K_HW_QCA988X;
|
hw_rev = ATH10K_HW_QCA988X;
|
||||||
pci_ps = false;
|
pci_ps = false;
|
||||||
|
|
Loading…
Reference in a new issue