From patchwork Fri Oct 21 21:21:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajat Jain X-Patchwork-Id: 9390225 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E8AAF60231 for ; Fri, 21 Oct 2016 21:21:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D412B29DBD for ; Fri, 21 Oct 2016 21:21:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C7BED2A10D; Fri, 21 Oct 2016 21:21:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 277A029DBD for ; Fri, 21 Oct 2016 21:21:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933943AbcJUVVZ (ORCPT ); Fri, 21 Oct 2016 17:21:25 -0400 Received: from mail-pf0-f175.google.com ([209.85.192.175]:34331 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933451AbcJUVVX (ORCPT ); Fri, 21 Oct 2016 17:21:23 -0400 Received: by mail-pf0-f175.google.com with SMTP id r16so63141812pfg.1 for ; Fri, 21 Oct 2016 14:21:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Fg8TpY0IoFv9L0gVAvJ9b02itkZM6KwiWIvdRfWojkI=; b=ArQPMyPi+slPCPg2z/u++K7K+D8zSRzLiCLIyCwP2RL0cfyxWh20qo4b9c2Z2Z281f aSVzzEEh9K1YzuXo+OdoC48hvrqkFWqKRNeYVhBLb7C7wqLzWM5OxPGlTDGqd5q/yj1e /qf0s7XE5lifWw1czMjA/idJsC0s44fT0tOp0Fm3OhqjnXxCz1DBwZvXb7XDgqBJn6mn 3lX4wiX6E7z5BtW6u0905ugq6Ha+PHiGkIvZmnJ/Te2zYLuEEL73RpE5JH6KJtNQzJ2v nr87+tarKt8um4yn6ZuWFLpUTRsAE+EuZb2AMxvGarNyBhOyZhRJYpwqm7YOGStw9CwJ jrUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Fg8TpY0IoFv9L0gVAvJ9b02itkZM6KwiWIvdRfWojkI=; b=Bzxq6AzGpmz370OLN3bMtz2JhpbJhTsIOwoeZow9zV45/E8pww96gh/+MTKKa0jXM0 tVutdxiWtm3ePgY4o9nOk0VUlPuKaAiz4A/PE3QcoY6hvZxMifc3s/GvY79ca1NQZfZh 4/cgDBdM1flGQy2NW9hzim9m6WpfjxN9mNHhKLo7RyDYURBtIbTiGpv8TAYAPVBRmUXC NeANGUabpqu2lwJbndGJwk3GjCpeGlWhcIZjhHUuOB6OgtBG0ZKhUlsXYcP9qMEv5jtL eWDMCjDyXMkRTD4KrzrFL8+qIiobTnWptsrSzNDCjOvN5zdNH4lpYVXCGF9LK1YLCq02 +upA== X-Gm-Message-State: ABUngvcJMAUkNnWBmqHl2TA8jHU2jGpjvHHvuZh7YVU6btks7cAUL7chIEGAG90up6gjUrOy X-Received: by 10.99.115.65 with SMTP id d1mr4177299pgn.56.1477084882094; Fri, 21 Oct 2016 14:21:22 -0700 (PDT) Received: from rajat.mtv.corp.google.com ([172.22.64.13]) by smtp.gmail.com with ESMTPSA id zh13sm7304972pab.4.2016.10.21.14.21.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Oct 2016 14:21:21 -0700 (PDT) From: Rajat Jain To: linux-wireless@vger.kernel.org, devicetree@vger.kernel.org, rajatja@google.com, Xinming Hu , Amitkumar Karwar , Brian Norris , Kalle Valo , Rob Herring Cc: rajatxjain@gmail.com Subject: [PATCH v6] mwifiex: parse device tree node for PCIe Date: Fri, 21 Oct 2016 14:21:09 -0700 Message-Id: <1477084869-15612-1-git-send-email-rajatja@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1477070156-109965-1-git-send-email-rajatja@google.com> References: <1477070156-109965-1-git-send-email-rajatja@google.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Xinming Hu This patch derives device tree node from pcie bus layer framework, and fixes a minor memory leak in mwifiex_pcie_probe() (in failure path). Device tree bindings file has been renamed(marvell-sd8xxx.txt -> marvell-8xxx.txt) to accommodate PCIe changes. Signed-off-by: Xinming Hu Signed-off-by: Amitkumar Karwar Signed-off-by: Rajat Jain Reviewed-by: Brian Norris --- v2: Included vendor and product IDs in compatible strings for PCIe chipsets(Rob Herring) v3: Patch is created using -M option so that it will only include diff of original and renamed files(Rob Herring) Resend v3: Resending the patch because I missed to include device tree mailing while sending v3. v4: Fix error handling, also move-on even if no device tree node is present. v5: Update commit log to include memory leak, return -EINVAL instead of -1. v6: Remove an unnecessary error print, fix typo in commit log .../{marvell-sd8xxx.txt => marvell-8xxx.txt} | 8 +++-- drivers/net/wireless/marvell/mwifiex/pcie.c | 36 +++++++++++++++++++--- drivers/net/wireless/marvell/mwifiex/sta_cmd.c | 3 +- 3 files changed, 39 insertions(+), 8 deletions(-) rename Documentation/devicetree/bindings/net/wireless/{marvell-sd8xxx.txt => marvell-8xxx.txt} (91%) diff --git a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt b/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt similarity index 91% rename from Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt rename to Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt index c421aba..dfe5f8e 100644 --- a/Documentation/devicetree/bindings/net/wireless/marvell-sd8xxx.txt +++ b/Documentation/devicetree/bindings/net/wireless/marvell-8xxx.txt @@ -1,8 +1,8 @@ -Marvell 8897/8997 (sd8897/sd8997) SDIO devices +Marvell 8897/8997 (sd8897/sd8997/pcie8997) SDIO/PCIE devices ------ -This node provides properties for controlling the marvell sdio wireless device. -The node is expected to be specified as a child node to the SDIO controller that +This node provides properties for controlling the marvell sdio/pcie wireless device. +The node is expected to be specified as a child node to the SDIO/PCIE controller that connects the device to the system. Required properties: @@ -10,6 +10,8 @@ Required properties: - compatible : should be one of the following: * "marvell,sd8897" * "marvell,sd8997" + * "pci11ab,2b42" + * "pci1b4b,2b42" Optional properties: diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c index 3c3c4f1..f7c84d3 100644 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c @@ -37,6 +37,22 @@ static struct mwifiex_if_ops pcie_ops; static struct semaphore add_remove_card_sem; +static const struct of_device_id mwifiex_pcie_of_match_table[] = { + { .compatible = "pci11ab,2b42" }, + { .compatible = "pci1b4b,2b42" }, + { } +}; + +static int mwifiex_pcie_probe_of(struct device *dev) +{ + if (!of_match_node(mwifiex_pcie_of_match_table, dev->of_node)) { + dev_err(dev, "required compatible string missing\n"); + return -EINVAL; + } + + return 0; +} + static int mwifiex_map_pci_memory(struct mwifiex_adapter *adapter, struct sk_buff *skb, size_t size, int flags) @@ -178,6 +194,7 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *ent) { struct pcie_service_card *card; + int ret; pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n", pdev->vendor, pdev->device, pdev->revision); @@ -199,13 +216,24 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, card->pcie.can_ext_scan = data->can_ext_scan; } - if (mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops, - MWIFIEX_PCIE)) { - pr_err("%s failed\n", __func__); - return -1; + /* device tree node parsing and platform specific configuration*/ + if (pdev->dev.of_node) { + ret = mwifiex_pcie_probe_of(&pdev->dev); + if (ret) + goto err_free; } + ret = mwifiex_add_card(card, &add_remove_card_sem, &pcie_ops, + MWIFIEX_PCIE); + if (ret) { + pr_err("%s failed\n", __func__); + goto err_free; + } return 0; + +err_free: + kfree(card); + return ret; } /* diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c index 2a162c3..c8dccf5 100644 --- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c @@ -2218,7 +2218,8 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) * The cal-data can be read from device tree and/or * a configuration file and downloaded to firmware. */ - if (priv->adapter->iface_type == MWIFIEX_SDIO && + if ((priv->adapter->iface_type == MWIFIEX_SDIO || + priv->adapter->iface_type == MWIFIEX_PCIE) && adapter->dev->of_node) { adapter->dt_node = adapter->dev->of_node; if (of_property_read_u32(adapter->dt_node,