From patchwork Thu Jan 25 11:13:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tobias Schramm X-Patchwork-Id: 865855 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nIrX/RAd"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zRzvZ0Ygvz9s75 for ; Thu, 25 Jan 2018 22:14:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751718AbeAYLO3 (ORCPT ); Thu, 25 Jan 2018 06:14:29 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:34726 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751658AbeAYLO0 (ORCPT ); Thu, 25 Jan 2018 06:14:26 -0500 Received: by mail-wr0-f196.google.com with SMTP id 36so7270682wrh.1; Thu, 25 Jan 2018 03:14:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SXO3PgkdrxDVWhrxcOfIJmEqt65bT/gKQzh9BBXSP6c=; b=nIrX/RAd6qCJ4uv02cFngr1tI07j7s5BKiejgWXOmo00AiHumJuzcTm2OLvXNk553B LB+lqqUDWb/ky7dcfUx8ve5ectuAd6+og0q9/KNpPD7jLTYoo90l8dT4U4QAtJ7/ZLEc JMP1h0lbNJybgYUV5E3DWs3pk1ZAiR1Iia8ufodw4OElHo74m2hFAfyLeGYKntsAsjiA nf47B9tHVo8IqqjbA1jHrBUs69IfeqETVVjsRB1HVW+mA83V/Kz74giIQ9WqK8T03ALO 1H7VbsMNTLsVmYLnCe7PyP0jwTeu5afStIWF5hz1CPAFexqrJfwYi9mc9fUv1Kq/ADQ7 3ECg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SXO3PgkdrxDVWhrxcOfIJmEqt65bT/gKQzh9BBXSP6c=; b=etf8IWaNNmD9RCsV09mN9TO3OdnRKlxCeuh+30BvRtAJ65Em8NkvOK/2hnAnA8i6ML okUlTmqW6khFUqhzo3m/i3IpQJd+TWH7ba4U8vmj6Pe1oMTNV6xKaRoSiEOOpBoVa+4Y pWwzHaNssYfqZMjotdayh4DBDZ/xs4vQvgzwYkI827uiRrhsD72cYOVfUDLoAmJJUSOw 2X47UQfg6aqrwpwiGpNJQj12xuzXPUmuobB9bolHh3NK9pkOPTQ7qJWCU7T+yWeQEzY9 H7YwTnvQQeVbWCTGy3AbKgOG1JvlSWMniItyaPJ5DGddpWbZeA0YhOHCbbDjQzfraKBg eoqg== X-Gm-Message-State: AKwxytfgg7lx3lMw7McnCgbHaSITi51v7Z91Mrlc7qataClciVv2YVCk 5qs0r9cm6NhAugkjMt5nb11JWd6V X-Google-Smtp-Source: AH8x226dMyKnY6T/1ypcAxslV5eQ0JCj5pT6JjvQVcnznW3A61wvw7t4hZJISvujH4/Z1wkDDSyUCQ== X-Received: by 10.223.129.227 with SMTP id 90mr8402651wra.148.1516878864493; Thu, 25 Jan 2018 03:14:24 -0800 (PST) Received: from sunsetshimmer.lan ([2a02:8108:17c0:1500:f666:aee7:edff:2dfc]) by smtp.gmail.com with ESMTPSA id x127sm1030318wmb.36.2018.01.25.03.14.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jan 2018 03:14:23 -0800 (PST) From: Tobias Schramm To: kvalo@qca.qualcomm.com, ath10k@lists.infradead.org, linux-wireless@vger.kernel.org, bhelgaas@google.com, linux-pci@vger.kernel.org Cc: Tobias Schramm Subject: [PATCH v3 2/2] ath10k: Add support for Ubiquiti rebranded QCA988X v2 Date: Thu, 25 Jan 2018 12:13:40 +0100 Message-Id: <20180125111340.17553-3-tobleminer@gmail.com> X-Mailer: git-send-email 2.16.0 In-Reply-To: <20180125111340.17553-1-tobleminer@gmail.com> References: <20180125111340.17553-1-tobleminer@gmail.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org 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 --- drivers/net/wireless/ath/ath10k/core.c | 24 ++++++++++++++++++++++++ drivers/net/wireless/ath/ath10k/hw.h | 1 + drivers/net/wireless/ath/ath10k/pci.c | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index b29fdbd21ead..9fb38f2c1d6e 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c @@ -52,6 +52,30 @@ MODULE_PARM_DESC(cryptmode, "Crypto mode: 0-hardware, 1-software"); MODULE_PARM_DESC(rawmode, "Use raw 802.11 frame datapath"); static const struct ath10k_hw_params ath10k_hw_params_list[] = { + { + .id = QCA988X_HW_2_0_VERSION, + .dev_id = QCA988X_2_0_DEVICE_ID_UBNT, + .name = "qca988x hw2.0", + .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, + }, { .id = QCA988X_HW_2_0_VERSION, .dev_id = QCA988X_2_0_DEVICE_ID, diff --git a/drivers/net/wireless/ath/ath10k/hw.h b/drivers/net/wireless/ath/ath10k/hw.h index 05f26e5858ad..5ae3b56acc19 100644 --- a/drivers/net/wireless/ath/ath10k/hw.h +++ b/drivers/net/wireless/ath/ath10k/hw.h @@ -22,6 +22,7 @@ #define ATH10K_FW_DIR "ath10k" +#define QCA988X_2_0_DEVICE_ID_UBNT (0x11ac) #define QCA988X_2_0_DEVICE_ID (0x003c) #define QCA6164_2_1_DEVICE_ID (0x0041) #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 ffea348b2190..e28e2f5f09c5 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -52,6 +52,7 @@ MODULE_PARM_DESC(reset_mode, "0: auto, 1: warm only (default: 0)"); #define ATH10K_PCI_NUM_WARM_RESET_ATTEMPTS 3 static const struct pci_device_id ath10k_pci_id_table[] = { + { PCI_VDEVICE(UBIQUITI, QCA988X_2_0_DEVICE_ID_UBNT) }, /* PCI-E QCA988X V2 (Ubiquiti branded) */ { 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, QCA6174_2_1_DEVICE_ID) }, /* PCI-E QCA6174 V2.1 */ @@ -68,6 +69,7 @@ static const struct ath10k_pci_supp_chip ath10k_pci_supp_chips[] = { * hacks. ath10k doesn't have them and these devices crash horribly * 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 }, { QCA6164_2_1_DEVICE_ID, QCA6174_HW_2_1_CHIP_ID_REV }, @@ -1977,6 +1979,7 @@ static int ath10k_pci_get_num_banks(struct ath10k *ar) struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); switch (ar_pci->pdev->device) { + case QCA988X_2_0_DEVICE_ID_UBNT: case QCA988X_2_0_DEVICE_ID: case QCA99X0_2_0_DEVICE_ID: case QCA9888_2_0_DEVICE_ID: @@ -3208,6 +3211,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr); switch (pci_dev->device) { + case QCA988X_2_0_DEVICE_ID_UBNT: case QCA988X_2_0_DEVICE_ID: hw_rev = ATH10K_HW_QCA988X; pci_ps = false;