From patchwork Wed Apr 5 10:31:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96807 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195795qgd; Wed, 5 Apr 2017 03:32:50 -0700 (PDT) X-Received: by 10.99.95.77 with SMTP id t74mr29395518pgb.203.1491388370588; Wed, 05 Apr 2017 03:32:50 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i62si20247750pli.318.2017.04.05.03.32.50; Wed, 05 Apr 2017 03:32:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932269AbdDEKcr (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:47 -0400 Received: from mail-pf0-f172.google.com ([209.85.192.172]:33072 "EHLO mail-pf0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933409AbdDEKcb (ORCPT ); Wed, 5 Apr 2017 06:32:31 -0400 Received: by mail-pf0-f172.google.com with SMTP id s16so5597158pfs.0 for ; Wed, 05 Apr 2017 03:32:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cg3yR7bGqv3Lnjpf7dVccuebwulzk+7RQuTL0CiOhJA=; b=ECswQtoKMYWpSC/EsmlHK6a1XHewz3Zj7CDJG2d/9O1IE8S3GUzQhf5MCeDHpjcgd7 AnRn+/F1YLat9F2/p5TfS30qbWW1gkqxopQi91mPuf30OpABYw6k1OdY2gCmzKGHsx4/ lOxeDV/8vSeQluspmZkB+mU0C7m01juR3zh5o= 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:mime-version:content-transfer-encoding; bh=Cg3yR7bGqv3Lnjpf7dVccuebwulzk+7RQuTL0CiOhJA=; b=qFLZLo61y4KdLKIzFW7SDTW/6QnvUISDd2uKtInkYvz89e2AXwcL1eC9C3nZi50Qej NXJV/kUrdDgwSuhyrwCfK7Ku54zLDdNbisaGi4aFQ++nRHSaltmYzQNtFrqEQtB6CiKa cA/DQOM+68SmVporH2YW5SJuqnh1j65EB0CpycDTcd6JZbfkcHUHIo+6c2PIvjaf+CQY ZTngzEmneJ/tbqtvZpKVVV9wX7/YFmb5h/aN39ogloK2lb8bZuxCusGAkIKvD2NdFDhP Qq5Ss/pfIK/lq8LLXMVOGMLRiY15j5s38PHWChC5qhgxZIgWd+0z3pxRTCAk8yhjKOny SI8A== X-Gm-Message-State: AFeK/H0exTIan4BOEw+ols8NzYHi3zKhvo8SkJ8qPxqQdhfeKCAmiOrg+SRy/TqRp/sQYW3Z X-Received: by 10.84.198.164 with SMTP id p33mr35963548pld.127.1491388350266; Wed, 05 Apr 2017 03:32:30 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:29 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Florian Fainelli Subject: [PATCH v2 for-4.9 01/32] ARM: BCM5301X: Add back handler ignoring external imprecise aborts Date: Wed, 5 Apr 2017 16:01:53 +0530 Message-Id: <1491388344-13521-2-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki Since early BCM5301X days we got abort handler that was removed by commit 937b12306ea79 ("ARM: BCM5301X: remove workaround imprecise abort fault handler"). It assumed we need to deal only with pending aborts left by the bootloader. Unfortunately this isn't true for BCM5301X. When probing PCI config space (device enumeration) it is expected to have master aborts on the PCI bus. Most bridges don't forward (or they allow disabling it) these errors onto the AXI/AMBA bus but not the Northstar (BCM5301X) one. iProc PCIe controller on Northstar seems to be some older one, without a control register for errors forwarding. It means we need to workaround this at platform level. All newer platforms are not affected by this issue. Signed-off-by: Rafał Miłecki Signed-off-by: Florian Fainelli (cherry picked from commit 09f3510fb70a46c8921f2cf4a90dbcae460a6820) Signed-off-by: Amit Pundir --- arch/arm/mach-bcm/bcm_5301x.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) -- 2.7.4 diff --git a/arch/arm/mach-bcm/bcm_5301x.c b/arch/arm/mach-bcm/bcm_5301x.c index c8830a2..fe067f6 100644 --- a/arch/arm/mach-bcm/bcm_5301x.c +++ b/arch/arm/mach-bcm/bcm_5301x.c @@ -9,14 +9,42 @@ #include #include +#include +#include + +#define FSR_EXTERNAL (1 << 12) +#define FSR_READ (0 << 10) +#define FSR_IMPRECISE 0x0406 static const char *const bcm5301x_dt_compat[] __initconst = { "brcm,bcm4708", NULL, }; +static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr, + struct pt_regs *regs) +{ + /* + * We want to ignore aborts forwarded from the PCIe bus that are + * expected and shouldn't really be passed by the PCIe controller. + * The biggest disadvantage is the same FSR code may be reported when + * reading non-existing APB register and we shouldn't ignore that. + */ + if (fsr == (FSR_EXTERNAL | FSR_READ | FSR_IMPRECISE)) + return 0; + + return 1; +} + +static void __init bcm5301x_init_early(void) +{ + hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR, + "imprecise external abort"); +} + DT_MACHINE_START(BCM5301X, "BCM5301X") .l2c_aux_val = 0, .l2c_aux_mask = ~0, .dt_compat = bcm5301x_dt_compat, + .init_early = bcm5301x_init_early, MACHINE_END From patchwork Wed Apr 5 10:31:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96809 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195831qgd; Wed, 5 Apr 2017 03:32:55 -0700 (PDT) X-Received: by 10.84.217.68 with SMTP id e4mr34193838plj.99.1491388375302; Wed, 05 Apr 2017 03:32:55 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t21si20220531pgi.166.2017.04.05.03.32.55; Wed, 05 Apr 2017 03:32:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933435AbdDEKcq (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:46 -0400 Received: from mail-pf0-f174.google.com ([209.85.192.174]:36737 "EHLO mail-pf0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933321AbdDEKcd (ORCPT ); Wed, 5 Apr 2017 06:32:33 -0400 Received: by mail-pf0-f174.google.com with SMTP id o126so5581373pfb.3 for ; Wed, 05 Apr 2017 03:32:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Py+GCLqR3xFNratRNn2bXUQKB9Y6ZhkGkM+uC2W0bOE=; b=h7PsVrUfvg8XJjzdHPIch0bSdDiuMMZrTH2gvHGsFCd3oM6RSXKyovuhlhbSYyGJ7Z wHjPEqxokrUbJKLALEPHQhmLICTHVp4GPPf8MbTgaNgaB7NRm5nR2Oif/jkETSzldzI3 KSBKMSKusd7TEW9WzMxwJSwH5C4cGwlpfcDsM= 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:mime-version:content-transfer-encoding; bh=Py+GCLqR3xFNratRNn2bXUQKB9Y6ZhkGkM+uC2W0bOE=; b=ppcRk59beDaqWVA1ahcJjCyhefoRC1QfcBXPPPAdho21yE6GN5uckWswjebfx6U03Q DPzqIWGS4Mgpw4sWqnlIzhL7nGverAQom+vKJy9wJL4W8EmmOlZlEdOfHEh5EgjZkbyr ZGczHrXFPNEqXSpQf2zTjoyq4CAaHWjFbc3Nmf31iK6ZWSg7J1DgWnOWBQ3Fhz5Qv2tg OWL5fmetSGtPulsrbbN7Erm1BqbZ9v1sDqQMH8bdezZ5GLqvgD4RKxh76jtcsCG1CyBL 7w0wI4WNUBlEC19aScxK97ZPeB3fTMljccNQUREBKBDUtjiRkzDh7auzsu2LwfEuupHa u96A== X-Gm-Message-State: AFeK/H2yQDESzjeF1uadrmUB2LuGjuemTFTxPxgRpSKwwtv6YyUHVoTEpBtypqZNLjlrWtfN X-Received: by 10.99.125.68 with SMTP id m4mr28594652pgn.13.1491388352596; Wed, 05 Apr 2017 03:32:32 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:31 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Jon Mason , Florian Fainelli Subject: [PATCH v2 for-4.9 02/32] ARM: dts: BCM5301X: Correct GIC_PPI interrupt flags Date: Wed, 5 Apr 2017 16:01:54 +0530 Message-Id: <1491388344-13521-3-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Jon Mason GIC_PPI flags were misconfigured for the timers, resulting in errors like: [ 0.000000] GIC: PPI11 is secure or misconfigured Changing them to being edge triggered corrects the issue Suggested-by: Rafał Miłecki Signed-off-by: Jon Mason Fixes: d27509f1 ("ARM: BCM5301X: add dts files for BCM4708 SoC") Signed-off-by: Florian Fainelli (cherry picked from commit 0c2bf9f95983fe30aa2f6463cb761cd42c2d521a) Signed-off-by: Amit Pundir --- arch/arm/boot/dts/bcm5301x.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/arch/arm/boot/dts/bcm5301x.dtsi b/arch/arm/boot/dts/bcm5301x.dtsi index ae4b388..4616452 100644 --- a/arch/arm/boot/dts/bcm5301x.dtsi +++ b/arch/arm/boot/dts/bcm5301x.dtsi @@ -66,14 +66,14 @@ timer@20200 { compatible = "arm,cortex-a9-global-timer"; reg = <0x20200 0x100>; - interrupts = ; + interrupts = ; clocks = <&periph_clk>; }; local-timer@20600 { compatible = "arm,cortex-a9-twd-timer"; reg = <0x20600 0x100>; - interrupts = ; + interrupts = ; clocks = <&periph_clk>; }; From patchwork Wed Apr 5 10:31:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96805 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195778qgd; Wed, 5 Apr 2017 03:32:47 -0700 (PDT) X-Received: by 10.84.179.193 with SMTP id b59mr35493411plc.56.1491388367706; Wed, 05 Apr 2017 03:32:47 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i62si20247750pli.318.2017.04.05.03.32.47; Wed, 05 Apr 2017 03:32:47 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933427AbdDEKco (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:44 -0400 Received: from mail-pg0-f47.google.com ([74.125.83.47]:36235 "EHLO mail-pg0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933411AbdDEKcf (ORCPT ); Wed, 5 Apr 2017 06:32:35 -0400 Received: by mail-pg0-f47.google.com with SMTP id g2so5930888pge.3 for ; Wed, 05 Apr 2017 03:32:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XzKt85eBRZBaT5V59QdZF5GUAIOTiV5IoT6DLaJkW/U=; b=bWT/ty3Pdyz/NHAPKnVE2LGcVgGk6LqTw4yUk8tZaIo5Bdb42jIDQTWqWBEGwRldRQ iVRVMNj5gZpfSvtYHtf2FUnYTm09RsrlyMaXTbDsjknhF4WwwhgMTSEPqgUHWoTcjhHt PJSwrsQ6K5sEu7yUbcPicWde2Twu1BprIWPdU= 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:mime-version:content-transfer-encoding; bh=XzKt85eBRZBaT5V59QdZF5GUAIOTiV5IoT6DLaJkW/U=; b=hOm7jivHE0eK8AsD5GaW7OEBtUGdLVK+OecZ9RSY7o8IAqGE5eFfLamWEz/cpAvbY5 WJ1OYATNFU8FKYMU39VOs63Gca3CRokN/8/BqdmTIvokD32+vEJz4XINTYHeTa9ZShyj CNF5sdfc546qguQdyg7+3HB7IuuafGqIXowojppNZJz9sesaDAnj1y93X+sJYtrfFJFX bWBKbWoXfa+/Kar/d0LpwWSpgdOKJqknimkM0dtEgyvtZZ4NkzmyCAx4KJ/fCLEggKWI 1P5gGvFLYavuhG5bgkBI1cGdcD5UcfgEXEc3DCvAW/s+K5x2VrczHlqRyndWrgqw7J5i udoA== X-Gm-Message-State: AFeK/H3G7c2Vn8xMAJUvZvxlsEjjSYEfzwX4UOjSU2uBqTDrToG8leUN00ztjToUnT/CVN1R X-Received: by 10.99.163.2 with SMTP id s2mr29036728pge.43.1491388354514; Wed, 05 Apr 2017 03:32:34 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:33 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Bjorn Helgaas Subject: [PATCH v2 for-4.9 03/32] PCI: iproc: Save host bridge window resource in struct iproc_pcie Date: Wed, 5 Apr 2017 16:01:55 +0530 Message-Id: <1491388344-13521-4-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Bjorn Helgaas The host bridge memory window resource is inserted into the iomem_resource tree and cannot be deallocated until the host bridge itself is removed. Previously, the window was on the stack, which meant the iomem_resource entry pointed into the stack and was corrupted as soon as the probe function returned, which caused memory corruption and errors like this: pcie_iproc_bcma bcma0:8: resource collision: [mem 0x40000000-0x47ffffff] conflicts with PCIe MEM space [mem 0x40000000-0x47ffffff] Move the memory window resource from the stack into struct iproc_pcie so its lifetime matches that of the host bridge. Fixes: c3245a566400 ("PCI: iproc: Request host bridge window resources") Reported-and-tested-by: Rafał Miłecki Signed-off-by: Bjorn Helgaas (cherry picked from commit 6e347b5e05ea2ac4ac467a5a1cfaebb2c7f06f80) Signed-off-by: Amit Pundir --- drivers/pci/host/pcie-iproc-bcma.c | 24 ++++++++++++------------ drivers/pci/host/pcie-iproc-platform.c | 19 ++++++++++--------- drivers/pci/host/pcie-iproc.h | 1 + 3 files changed, 23 insertions(+), 21 deletions(-) -- 2.7.4 diff --git a/drivers/pci/host/pcie-iproc-bcma.c b/drivers/pci/host/pcie-iproc-bcma.c index 8ce0890..46ca8ed 100644 --- a/drivers/pci/host/pcie-iproc-bcma.c +++ b/drivers/pci/host/pcie-iproc-bcma.c @@ -44,8 +44,7 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev) { struct device *dev = &bdev->dev; struct iproc_pcie *pcie; - LIST_HEAD(res); - struct resource res_mem; + LIST_HEAD(resources); int ret; pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL); @@ -62,22 +61,23 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev) pcie->base_addr = bdev->addr; - res_mem.start = bdev->addr_s[0]; - res_mem.end = bdev->addr_s[0] + SZ_128M - 1; - res_mem.name = "PCIe MEM space"; - res_mem.flags = IORESOURCE_MEM; - pci_add_resource(&res, &res_mem); + pcie->mem.start = bdev->addr_s[0]; + pcie->mem.end = bdev->addr_s[0] + SZ_128M - 1; + pcie->mem.name = "PCIe MEM space"; + pcie->mem.flags = IORESOURCE_MEM; + pci_add_resource(&resources, &pcie->mem); pcie->map_irq = iproc_pcie_bcma_map_irq; - ret = iproc_pcie_setup(pcie, &res); - if (ret) + ret = iproc_pcie_setup(pcie, &resources); + if (ret) { dev_err(dev, "PCIe controller setup failed\n"); - - pci_free_resource_list(&res); + pci_free_resource_list(&resources); + return ret; + } bcma_set_drvdata(bdev, pcie); - return ret; + return 0; } static void iproc_pcie_bcma_remove(struct bcma_device *bdev) diff --git a/drivers/pci/host/pcie-iproc-platform.c b/drivers/pci/host/pcie-iproc-platform.c index a3de087..7dcaddc 100644 --- a/drivers/pci/host/pcie-iproc-platform.c +++ b/drivers/pci/host/pcie-iproc-platform.c @@ -46,7 +46,7 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) struct device_node *np = dev->of_node; struct resource reg; resource_size_t iobase = 0; - LIST_HEAD(res); + LIST_HEAD(resources); int ret; of_id = of_match_device(iproc_pcie_of_match_table, dev); @@ -108,23 +108,24 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) pcie->phy = NULL; } - ret = of_pci_get_host_bridge_resources(np, 0, 0xff, &res, &iobase); + ret = of_pci_get_host_bridge_resources(np, 0, 0xff, &resources, + &iobase); if (ret) { - dev_err(dev, - "unable to get PCI host bridge resources\n"); + dev_err(dev, "unable to get PCI host bridge resources\n"); return ret; } pcie->map_irq = of_irq_parse_and_map_pci; - ret = iproc_pcie_setup(pcie, &res); - if (ret) + ret = iproc_pcie_setup(pcie, &resources); + if (ret) { dev_err(dev, "PCIe controller setup failed\n"); - - pci_free_resource_list(&res); + pci_free_resource_list(&resources); + return ret; + } platform_set_drvdata(pdev, pcie); - return ret; + return 0; } static int iproc_pcie_pltfm_remove(struct platform_device *pdev) diff --git a/drivers/pci/host/pcie-iproc.h b/drivers/pci/host/pcie-iproc.h index e84d93c..fa42267 100644 --- a/drivers/pci/host/pcie-iproc.h +++ b/drivers/pci/host/pcie-iproc.h @@ -68,6 +68,7 @@ struct iproc_pcie { #ifdef CONFIG_ARM struct pci_sys_data sysdata; #endif + struct resource mem; struct pci_bus *root_bus; struct phy *phy; int (*map_irq)(const struct pci_dev *, u8, u8); From patchwork Wed Apr 5 10:31:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96810 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195939qgd; Wed, 5 Apr 2017 03:33:14 -0700 (PDT) X-Received: by 10.99.105.133 with SMTP id e127mr28306505pgc.104.1491388394451; Wed, 05 Apr 2017 03:33:14 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s128si20242483pgc.85.2017.04.05.03.33.14; Wed, 05 Apr 2017 03:33:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933086AbdDEKcn (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:43 -0400 Received: from mail-pg0-f47.google.com ([74.125.83.47]:36244 "EHLO mail-pg0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933418AbdDEKch (ORCPT ); Wed, 5 Apr 2017 06:32:37 -0400 Received: by mail-pg0-f47.google.com with SMTP id g2so5931313pge.3 for ; Wed, 05 Apr 2017 03:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=bty6R6DYul67AKn+issoCh5QE2qoeZmvASm1stWPxWQ=; b=IlucN2tJ++NcoAmMqkvt+ocDo43CMOIflHagfy6jBB2R9b/3500R96a3iz1/O+LKWd oaLIYB4Dc/kYQ13gUu9sQc5YcqR8WcyH/9nOhUsAo1x7XvAL8Zlh0W1kZicjD974e5F9 sAUVlIQz3+oZ7/S0YIx7PBIu84JWaUm2wbuaE= 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=bty6R6DYul67AKn+issoCh5QE2qoeZmvASm1stWPxWQ=; b=cRulxABIeycPYQKEPtIUcLm2VfMOrAUEJEbOyG4+JrRgvxbMupLuSC44H7p88PlPxq HbqfG63wjXkZzFeZWRq47NMJQH/qLBiC0TmjyB5yajc7MkrCschNpVRKgWHTVVtcJi8O 5c9x9PO1NR5DiE3OpInvYwMhCs7uVy4kL9KbAe/1SjIPVZ+2QVdUmrfxqSFzUbW/9yq2 VtJMFZXmMDEhPQ0EYoyu6V4hue8QwuwruTZHprkaBMhKL+1PO+XVpmJ/qG2Be7Jt0615 ewBwjdjKwkLChVc744ERmuWF+2oxL8TRV+HZQXX/WkM0xqGN5W7bdI9hJ/l+7wdVfZkm hkpQ== X-Gm-Message-State: AFeK/H3lS0vsGUNgng+xuU7Rg20cTCFt5cngVxVUwr16h1YcONcXfRicmC0Otsh9Bd4+aK9R X-Received: by 10.98.86.152 with SMTP id h24mr29138152pfj.184.1491388356830; Wed, 05 Apr 2017 03:32:36 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:36 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Felix Fietkau , linux-mips@linux-mips.org, James Hogan Subject: [PATCH v2 for-4.9 04/32] MIPS: Lantiq: Fix cascaded IRQ setup Date: Wed, 5 Apr 2017 16:01:56 +0530 Message-Id: <1491388344-13521-5-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Felix Fietkau With the IRQ stack changes integrated, the XRX200 devices started emitting a constant stream of kernel messages like this: [ 565.415310] Spurious IRQ: CAUSE=0x1100c300 This is caused by IP0 getting handled by plat_irq_dispatch() rather than its vectored interrupt handler, which is fixed by commit de856416e714 ("MIPS: IRQ Stack: Fix erroneous jal to plat_irq_dispatch"). Fix plat_irq_dispatch() to handle non-vectored IPI interrupts correctly by setting up IP2-6 as proper chained IRQ handlers and calling do_IRQ for all MIPS CPU interrupts. Signed-off-by: Felix Fietkau Acked-by: John Crispin Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/15077/ [james.hogan@imgtec.com: tweaked commit message] Signed-off-by: James Hogan (cherry picked from commit 6c356eda225e3ee134ed4176b9ae3a76f793f4dd) Signed-off-by: Amit Pundir --- arch/mips/lantiq/irq.c | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) -- 2.7.4 diff --git a/arch/mips/lantiq/irq.c b/arch/mips/lantiq/irq.c index 8ac0e59..0ddf369 100644 --- a/arch/mips/lantiq/irq.c +++ b/arch/mips/lantiq/irq.c @@ -269,6 +269,11 @@ static void ltq_hw5_irqdispatch(void) DEFINE_HWx_IRQDISPATCH(5) #endif +static void ltq_hw_irq_handler(struct irq_desc *desc) +{ + ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2); +} + #ifdef CONFIG_MIPS_MT_SMP void __init arch_init_ipiirq(int irq, struct irqaction *action) { @@ -313,23 +318,19 @@ static struct irqaction irq_call = { asmlinkage void plat_irq_dispatch(void) { unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM; - unsigned int i; - - if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) { - do_IRQ(MIPS_CPU_TIMER_IRQ); - goto out; - } else { - for (i = 0; i < MAX_IM; i++) { - if (pending & (CAUSEF_IP2 << i)) { - ltq_hw_irqdispatch(i); - goto out; - } - } + int irq; + + if (!pending) { + spurious_interrupt(); + return; } - pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status()); -out: - return; + pending >>= CAUSEB_IP; + while (pending) { + irq = fls(pending) - 1; + do_IRQ(MIPS_CPU_IRQ_BASE + irq); + pending &= ~BIT(irq); + } } static int icu_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw) @@ -354,11 +355,6 @@ static const struct irq_domain_ops irq_domain_ops = { .map = icu_map, }; -static struct irqaction cascade = { - .handler = no_action, - .name = "cascade", -}; - int __init icu_of_init(struct device_node *node, struct device_node *parent) { struct device_node *eiu_node; @@ -390,7 +386,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent) mips_cpu_irq_init(); for (i = 0; i < MAX_IM; i++) - setup_irq(i + 2, &cascade); + irq_set_chained_handler(i + 2, ltq_hw_irq_handler); if (cpu_has_vint) { pr_info("Setting up vectored interrupts\n"); From patchwork Wed Apr 5 10:31:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96804 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195760qgd; Wed, 5 Apr 2017 03:32:45 -0700 (PDT) X-Received: by 10.84.210.79 with SMTP id z73mr34769556plh.78.1491388365028; Wed, 05 Apr 2017 03:32:45 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s2si20263584plj.119.2017.04.05.03.32.44; Wed, 05 Apr 2017 03:32:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933420AbdDEKcm (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:42 -0400 Received: from mail-pf0-f177.google.com ([209.85.192.177]:34628 "EHLO mail-pf0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933086AbdDEKcl (ORCPT ); Wed, 5 Apr 2017 06:32:41 -0400 Received: by mail-pf0-f177.google.com with SMTP id 197so5592775pfv.1 for ; Wed, 05 Apr 2017 03:32:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9kzwUdPxD7Tmaremnkx0FnAxJcom5K86C8c5v11yIxg=; b=P7KRl0oKxOoghAY33CuPS96iV6GF5HAId+yrtDMK4HYzegVLx7P1SD1JAB7d8XZ5uF A+ygRavY5Dkzed9dp4Ip7DRCqt0xlZ0UfvDO9QM2kRCsdqMMPfIQ4veFmDcVOsNKC+Bu LNBQWAeA8WN7oxqRKZKN/5VSU6wI7T9jRwpl4= 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:mime-version:content-transfer-encoding; bh=9kzwUdPxD7Tmaremnkx0FnAxJcom5K86C8c5v11yIxg=; b=nDwb21biEoG6LNx55l5AzPzZHIJtICs4yDQ3bZ9BciZA987WTLJPpT72LgCFux0RdQ vNde16uAPa6TIpCrmjPv38uglOGM0DnN83vt0lfgs4xdnZqks2nVrKYjgsyRjQ/kYIIj tTYOAcdUDAm3l9706YLeyIUm1yWTuz6RualvYk8iMxjriu5DaOBpS3j5H+G3rd68MXto /O8AiUWXPI8IAlLbEbrPLkRcmEsu1XMmqav0kdYdqJKU0mcAQIMH09dm54gVkQr+joby /H5Hx5NtDpDZCDrFYx/VwQBKvxbrfFjpFevD7URkkFN5kH6JhdO5hb4VZ+Bqc50BiYFj 2M/Q== X-Gm-Message-State: AFeK/H2soLDbaKo9L7xV84qr4r+m0JfbtEnj1tfnUucab7H5EWjapdDRPSELglYfJPt1aen8 X-Received: by 10.98.27.204 with SMTP id b195mr28647770pfb.154.1491388358915; Wed, 05 Apr 2017 03:32:38 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:38 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?q?Noralf_Tr=C3=B8nnes?= , Wolfram Sang Subject: [PATCH v2 for-4.9 05/32] i2c: bcm2835: Fix hang for writing messages larger than 16 bytes Date: Wed, 5 Apr 2017 16:01:57 +0530 Message-Id: <1491388344-13521-6-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Noralf Trønnes Writing messages larger than the FIFO size results in a hang, rendering the machine unusable. This is because the RXD status flag is set on the first interrupt which results in bcm2835_drain_rxfifo() stealing bytes from the buffer. The controller continues to trigger interrupts waiting for the missing bytes, but bcm2835_fill_txfifo() has none to give. In this situation wait_for_completion_timeout() apparently is unable to stop the madness. The BCM2835 ARM Peripherals datasheet has this to say about the flags: TXD: is set when the FIFO has space for at least one byte of data. RXD: is set when the FIFO contains at least one byte of data. TXW: is set during a write transfer and the FIFO is less than full. RXR: is set during a read transfer and the FIFO is or more full. Implementing the logic from the downstream i2c-bcm2708 driver solved the hang problem. Signed-off-by: Noralf Trønnes Reviewed-by: Eric Anholt Reviewed-by: Martin Sperl Signed-off-by: Wolfram Sang (cherry picked from commit e2474541032db65d02bf88b6a8c2f954654b443f) Signed-off-by: Amit Pundir --- drivers/i2c/busses/i2c-bcm2835.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) -- 2.7.4 diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index d4f3239..f283b71 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -64,6 +64,7 @@ struct bcm2835_i2c_dev { int irq; struct i2c_adapter adapter; struct completion completion; + struct i2c_msg *curr_msg; u32 msg_err; u8 *msg_buf; size_t msg_buf_remaining; @@ -126,14 +127,13 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) return IRQ_HANDLED; } - if (val & BCM2835_I2C_S_RXD) { - bcm2835_drain_rxfifo(i2c_dev); - if (!(val & BCM2835_I2C_S_DONE)) - return IRQ_HANDLED; - } - if (val & BCM2835_I2C_S_DONE) { - if (i2c_dev->msg_buf_remaining) + if (i2c_dev->curr_msg->flags & I2C_M_RD) { + bcm2835_drain_rxfifo(i2c_dev); + val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); + } + + if ((val & BCM2835_I2C_S_RXD) || i2c_dev->msg_buf_remaining) i2c_dev->msg_err = BCM2835_I2C_S_LEN; else i2c_dev->msg_err = 0; @@ -141,11 +141,16 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) return IRQ_HANDLED; } - if (val & BCM2835_I2C_S_TXD) { + if (val & BCM2835_I2C_S_TXW) { bcm2835_fill_txfifo(i2c_dev); return IRQ_HANDLED; } + if (val & BCM2835_I2C_S_RXR) { + bcm2835_drain_rxfifo(i2c_dev); + return IRQ_HANDLED; + } + return IRQ_NONE; } @@ -155,6 +160,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, u32 c; unsigned long time_left; + i2c_dev->curr_msg = msg; i2c_dev->msg_buf = msg->buf; i2c_dev->msg_buf_remaining = msg->len; reinit_completion(&i2c_dev->completion); From patchwork Wed Apr 5 10:31:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96808 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195796qgd; Wed, 5 Apr 2017 03:32:50 -0700 (PDT) X-Received: by 10.98.138.80 with SMTP id y77mr7437085pfd.183.1491388370870; Wed, 05 Apr 2017 03:32:50 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i62si20247750pli.318.2017.04.05.03.32.50; Wed, 05 Apr 2017 03:32:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933238AbdDEKct (ORCPT + 6 others); Wed, 5 Apr 2017 06:32:49 -0400 Received: from mail-pg0-f49.google.com ([74.125.83.49]:36259 "EHLO mail-pg0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933419AbdDEKcm (ORCPT ); Wed, 5 Apr 2017 06:32:42 -0400 Received: by mail-pg0-f49.google.com with SMTP id g2so5932136pge.3 for ; Wed, 05 Apr 2017 03:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yI/p3Ge8PF7RcWpNL9syTFN8sRMSFRYur/RDSmIFjwY=; b=LFXlsXbve2Z7XP1rQxT7484JDqEJWNtAAZgH/Hc3iFyq99fTD0f8cWf8i3ox7RRt+n 5HXR8BGCxrGmil43hhy0WZnoDPzepdgXH1bYSykztI3P869BiaqkuUMUYkeMC1s3dhSQ Tfb+X/6Ftmr+Psu2UR7lqJ/1cntKHa+C5EmWs= 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:mime-version:content-transfer-encoding; bh=yI/p3Ge8PF7RcWpNL9syTFN8sRMSFRYur/RDSmIFjwY=; b=NnaPT3LQi0CXP/DGfAcbBi8QTbNFXYx5erkHvYnymWcvA3gvEFGsCu376Dqs4vcagP br3/Sa1KeCQLVROfezS6GqynKHwYWcnMWLWDnH1AaFjvusCiC/Eb0cEqm4+H+Bmndq+L gK/1Kh8fDe+Krjo6ycqhERhQr0tVPIx2oyNlVxQkuUSAfu1nouoNL8Zg25pROVHAl7Kh R8zCR78/aPk2gV/pLatcloJrZq+3uTt7RvjcHv+jexHeT/mARnRPMmNNQdl/k4htdEp6 vknOssR83+O8so80re3z/6ecyfyj/fhBL1/CEeyVAbonHJk13efdarMIb4U0riehFQRK WoRw== X-Gm-Message-State: AFeK/H2qr8WCYgnE1kjPoE7SMp9kRg50uFAE9x5stBWLVcJmOMzVhzQf5MAXhwG+SB9ZRbEG X-Received: by 10.98.72.199 with SMTP id q68mr28671731pfi.152.1491388361140; Wed, 05 Apr 2017 03:32:41 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:40 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?q?Noralf_Tr=C3=B8nnes?= , Wolfram Sang Subject: [PATCH v2 for-4.9 06/32] i2c: bcm2835: Protect against unexpected TXW/RXR interrupts Date: Wed, 5 Apr 2017 16:01:58 +0530 Message-Id: <1491388344-13521-7-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Noralf Trønnes If an unexpected TXW or RXR interrupt occurs (msg_buf_remaining == 0), the driver has no way to fill/drain the FIFO to stop the interrupts. In this case the controller has to be disabled and the transfer completed to avoid hang. (CLKT | ERR) and DONE interrupts are completed in their own paths, and the controller is disabled in the transfer function after completion. Unite the code paths and do disabling inside the interrupt routine. Clear interrupt status bits in the united completion path instead of trying to do it on every interrupt which isn't necessary. Only CLKT, ERR and DONE can be cleared that way. Add the status value to the error value in case of TXW/RXR errors to distinguish them from the other S_LEN error. Signed-off-by: Noralf Trønnes Reviewed-by: Eric Anholt Signed-off-by: Wolfram Sang (cherry picked from commit d4030d75c7cbb434b2a3e5f6af5065879d2615a5) Signed-off-by: Amit Pundir --- drivers/i2c/busses/i2c-bcm2835.c | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) -- 2.7.4 diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index f283b71..d2ba1a4 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -50,8 +50,6 @@ #define BCM2835_I2C_S_CLKT BIT(9) #define BCM2835_I2C_S_LEN BIT(10) /* Fake bit for SW error reporting */ -#define BCM2835_I2C_BITMSK_S 0x03FF - #define BCM2835_I2C_CDIV_MIN 0x0002 #define BCM2835_I2C_CDIV_MAX 0xFFFE @@ -111,20 +109,26 @@ static void bcm2835_drain_rxfifo(struct bcm2835_i2c_dev *i2c_dev) } } +/* + * Note about I2C_C_CLEAR on error: + * The I2C_C_CLEAR on errors will take some time to resolve -- if you were in + * non-idle state and I2C_C_READ, it sets an abort_rx flag and runs through + * the state machine to send a NACK and a STOP. Since we're setting CLEAR + * without I2CEN, that NACK will be hanging around queued up for next time + * we start the engine. + */ + static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) { struct bcm2835_i2c_dev *i2c_dev = data; u32 val, err; val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S); - val &= BCM2835_I2C_BITMSK_S; - bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, val); err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR); if (err) { i2c_dev->msg_err = err; - complete(&i2c_dev->completion); - return IRQ_HANDLED; + goto complete; } if (val & BCM2835_I2C_S_DONE) { @@ -137,21 +141,38 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data) i2c_dev->msg_err = BCM2835_I2C_S_LEN; else i2c_dev->msg_err = 0; - complete(&i2c_dev->completion); - return IRQ_HANDLED; + goto complete; } if (val & BCM2835_I2C_S_TXW) { + if (!i2c_dev->msg_buf_remaining) { + i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; + goto complete; + } + bcm2835_fill_txfifo(i2c_dev); return IRQ_HANDLED; } if (val & BCM2835_I2C_S_RXR) { + if (!i2c_dev->msg_buf_remaining) { + i2c_dev->msg_err = val | BCM2835_I2C_S_LEN; + goto complete; + } + bcm2835_drain_rxfifo(i2c_dev); return IRQ_HANDLED; } return IRQ_NONE; + +complete: + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_S, BCM2835_I2C_S_CLKT | + BCM2835_I2C_S_ERR | BCM2835_I2C_S_DONE); + complete(&i2c_dev->completion); + + return IRQ_HANDLED; } static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, @@ -181,8 +202,9 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, time_left = wait_for_completion_timeout(&i2c_dev->completion, BCM2835_I2C_TIMEOUT); - bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, BCM2835_I2C_C_CLEAR); if (!time_left) { + bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, + BCM2835_I2C_C_CLEAR); dev_err(i2c_dev->dev, "i2c transfer timed out\n"); return -ETIMEDOUT; } From patchwork Wed Apr 5 10:31:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96811 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp195944qgd; Wed, 5 Apr 2017 03:33:15 -0700 (PDT) X-Received: by 10.99.119.69 with SMTP id s66mr28929571pgc.196.1491388395487; Wed, 05 Apr 2017 03:33:15 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s128si20242483pgc.85.2017.04.05.03.33.15; Wed, 05 Apr 2017 03:33:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753016AbdDEKdO (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:14 -0400 Received: from mail-pg0-f41.google.com ([74.125.83.41]:33801 "EHLO mail-pg0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933163AbdDEKco (ORCPT ); Wed, 5 Apr 2017 06:32:44 -0400 Received: by mail-pg0-f41.google.com with SMTP id 21so6027368pgg.1 for ; Wed, 05 Apr 2017 03:32:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OJiFDfsyOV1PrZSb2b5R31fUn8CXjSJkXlkTLmqQins=; b=KFZmmVNrc4h/zOSCF5JhjO+8C4V8CnTnggptH1YAYGAP5Sd0rV4L3F6VI0Vapuoc7V 9gfyHp8oBMwHK5gKv9Gq5v2nvsKvNzaSkCFHrZAD1FyeU5CmBGxlpafD08xZgD/IXitz zfRm1+5YaW/9pKE6vesbaqUPUi5nr86LM7y+U= 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:mime-version:content-transfer-encoding; bh=OJiFDfsyOV1PrZSb2b5R31fUn8CXjSJkXlkTLmqQins=; b=SI0A4O8IVCERxUqh89TCvgeJZFY2lImU0DlS6eLat/Mg3C7veSsZc4SKKjrIRVOVZG NSdWNr7T+VdXBMF0P+4vgF7FSVcEFMzmKGW7rxL9yqsJbuQcwsrJD+pIkLi2AYBO+JrE od9zc/F72iMKYeZLB9BxWwELLzl5il2lbFhuvx4YWsPUQlCnt7TCozCxnNmi8Rn9UVfV uOkRV+SIKaqp/NyZN84NeQkY4Z3dXLpya/1EtmU89D2+jYGrDlijSRMf3ppP+4cy8YO/ wTYl8L4yJwffldLhdWZprhcdpUnYGe686nwZFLsG3T6oV7zkr6AbWcwrHaosakChevbt wiGg== X-Gm-Message-State: AFeK/H1Hn4TQNjy1g+W02E30GkWyxpsctgaa+nyUnd+W/oj2OHA/v8B9DgBcIpzHkxH14IT2 X-Received: by 10.99.117.66 with SMTP id f2mr29176561pgn.153.1491388363189; Wed, 05 Apr 2017 03:32:43 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:42 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?q?Noralf_Tr=C3=B8nnes?= , Wolfram Sang Subject: [PATCH v2 for-4.9 07/32] i2c: bcm2835: Use dev_dbg logging on transfer errors Date: Wed, 5 Apr 2017 16:01:59 +0530 Message-Id: <1491388344-13521-8-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Noralf Trønnes Writing to an AT24C32 generates on average 2x i2c transfer errors per 32-byte page write. Which amounts to a lot for a 4k write. This is due to the fact that the chip doesn't respond during it's internal write cycle when the at24 driver tries and retries the next write. Only a handful drivers use dev_err() on transfer error, so switch to dev_dbg() instead. Signed-off-by: Noralf Trønnes Reviewed-by: Eric Anholt Signed-off-by: Wolfram Sang (cherry picked from commit 23c9540b3ad1d7473fe40df80074d0fb0bf04869) Signed-off-by: Amit Pundir --- drivers/i2c/busses/i2c-bcm2835.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index d2ba1a4..54d510a 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -216,7 +216,7 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, (msg->flags & I2C_M_IGNORE_NAK)) return 0; - dev_err(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); + dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) return -EREMOTEIO; From patchwork Wed Apr 5 10:32:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96816 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196064qgd; Wed, 5 Apr 2017 03:33:33 -0700 (PDT) X-Received: by 10.98.72.147 with SMTP id q19mr28774119pfi.253.1491388413898; Wed, 05 Apr 2017 03:33:33 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.33; Wed, 05 Apr 2017 03:33:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933410AbdDEKda (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:30 -0400 Received: from mail-pg0-f48.google.com ([74.125.83.48]:35080 "EHLO mail-pg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933059AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f48.google.com with SMTP id 81so6024339pgh.2 for ; Wed, 05 Apr 2017 03:32:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lRttNU9zl7m+OOHtrXYozdnODA3bc/VkKLtfQ5BIhq8=; b=bjqkDJz/2HxfFt8FPl5+gSGjX577SvZDpPLWnwwKjOxHiWPk0u0eF9IO55GOeTwbQA 1w2XRNIkuFLIuh1B+82SAz4UEWsGmwwSz4v8DHUaEpI0CXRIU9y4Hj/kk9BA/cHF9tex JMT86qv17zHdeYYJxQRT2C0UiHxsjrrqnCo9U= 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:mime-version:content-transfer-encoding; bh=lRttNU9zl7m+OOHtrXYozdnODA3bc/VkKLtfQ5BIhq8=; b=iG2fWcjbLgRoWmPKUErPYGPrnjNCgxQDG2IgzOCleTySZFcVA6211oT13M1qp2j0EL zoNRvUEY7SNTPHOB4PlGj6PyqwNNPY868WLtnwDWrwdD4TB2K2RWg9TMeyOUpjK+O0+w p5L4s12V4u4DlGcGhMHpoDUtrG4t5dY4Ap/NCRJ549jw65R8wP2ExkVF/YvMb/Q6q+wC IE4TNPkZByN+yYKpAU7BOdDBn/ofSFjSMxHvaX8T7mvtdfVgkF96dbMG69jxliB6WO9X SAMDSTgdQKQglg3n0tlajgOK/8rLbNIi6cbjEnmhcbby17wetWKvdTbJCiqSje8/c6d6 1UOA== X-Gm-Message-State: AFeK/H2zi9gj6Pj59HdRBUAnmm/feYb+iPeUBedQ7ZO2z+0V7ct5yigXWX6f8HcAD48tXptW X-Received: by 10.98.129.195 with SMTP id t186mr28669383pfd.130.1491388365227; Wed, 05 Apr 2017 03:32:45 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:44 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?q?Noralf_Tr=C3=B8nnes?= , Wolfram Sang Subject: [PATCH v2 for-4.9 08/32] i2c: bcm2835: Can't support I2C_M_IGNORE_NAK Date: Wed, 5 Apr 2017 16:02:00 +0530 Message-Id: <1491388344-13521-9-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Noralf Trønnes The controller can't support this flag, so remove it. Documentation/i2c/i2c-protocol states that all of the message is sent: I2C_M_IGNORE_NAK: Normally message is interrupted immediately if there is [NA] from the client. Setting this flag treats any [NA] as [A], and all of message is sent. >From the BCM2835 ARM Peripherals datasheet: The ERR field is set when the slave fails to acknowledge either its address or a data byte written to it. So when the controller doesn't receive an ack, it sets ERR and raises an interrupt. In other words, the whole message is not sent. Signed-off-by: Noralf Trønnes Reviewed-by: Eric Anholt Signed-off-by: Wolfram Sang (cherry picked from commit 8d2cc5cc6ee5c0fc48a96bb29af55fc700f66fdf) Signed-off-by: Amit Pundir --- drivers/i2c/busses/i2c-bcm2835.c | 4 ---- 1 file changed, 4 deletions(-) -- 2.7.4 diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c index 54d510a..565ef69 100644 --- a/drivers/i2c/busses/i2c-bcm2835.c +++ b/drivers/i2c/busses/i2c-bcm2835.c @@ -212,10 +212,6 @@ static int bcm2835_i2c_xfer_msg(struct bcm2835_i2c_dev *i2c_dev, if (likely(!i2c_dev->msg_err)) return 0; - if ((i2c_dev->msg_err & BCM2835_I2C_S_ERR) && - (msg->flags & I2C_M_IGNORE_NAK)) - return 0; - dev_dbg(i2c_dev->dev, "i2c transfer failed: %x\n", i2c_dev->msg_err); if (i2c_dev->msg_err & BCM2835_I2C_S_ERR) From patchwork Wed Apr 5 10:32:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96815 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196061qgd; Wed, 5 Apr 2017 03:33:33 -0700 (PDT) X-Received: by 10.99.146.7 with SMTP id o7mr28991983pgd.6.1491388413632; Wed, 05 Apr 2017 03:33:33 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.32; Wed, 05 Apr 2017 03:33:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933470AbdDEKdb (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:31 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:33752 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933163AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f45.google.com with SMTP id x125so6038470pgb.0 for ; Wed, 05 Apr 2017 03:32:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=vNWIVuOVGtJ5eowm9iarUdPiM95ki0Bbc3wJlQ3Bh1s=; b=ZIM26njM+j+m2if5rJgTXoAsqYGLDI5RdH5It3hz2MyPktjMLxIU1bNH1vNRA282bj EjtDLj2NHpg4PTL7Thv7nlFVw/W63JY54fxsMpFywTWglQmXX9suWCYMxzW9yYOAv1mT yKCO4fQu5EYCH4SBiefBhEJedkAMNZvfyn0I4= 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=vNWIVuOVGtJ5eowm9iarUdPiM95ki0Bbc3wJlQ3Bh1s=; b=XF/nZamV0N8/0HfArCHVqASRWM05IBx8Gdk6dgKDWkM+dGvuGElVtsb+ZVlLw//i3J Lx2PegMXD1RUA07QWT71fMDT2o27ysoUrbUg7AV8P1rIsd4Sm1180aMAmbopoNSO4ta1 ChgkDsqJlDRmGRzfEPsN7SEWmGFYODBiRxU8AfpH8V+a9UUH6Jjd2lFijTNI8ismFLqq dtbIvRYoL//Hh9sISN3dlhJRcpVEAAH31+hEKVeEfiYKOsSTrIm1I2u7oa3x1lrqBXkk NBUgNthrunupfKIoI6nakjF6YPfALdQbxzpdmHXPEko0bpn9IlQq7Z8GU1ibOoIxRSav hZjA== X-Gm-Message-State: AFeK/H2ELTH3HgNfsHsjJs7VJ7y1TVEYbG/nzyMa/gSKto1SA2sMkHLHYBxqmet37M+PYuMn X-Received: by 10.99.39.70 with SMTP id n67mr29592785pgn.132.1491388367274; Wed, 05 Apr 2017 03:32:47 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:46 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Boris Brezillon , Stephen Boyd Subject: [PATCH v2 for-4.9 09/32] clk: bcm: Support rate change propagation on bcm2835 clocks Date: Wed, 5 Apr 2017 16:02:01 +0530 Message-Id: <1491388344-13521-10-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Boris Brezillon Some peripheral clocks, like the VEC (Video EnCoder) clock need to be set to a precise rate (in our case 108MHz). With the current implementation, where peripheral clocks are not allowed to forward rate change requests to their parents, it is impossible to match this requirement unless the bootloader has configured things correctly, or a specific rate has been assigned through the DT (with the assigned-clk-rates property). Add a new field to struct bcm2835_clock_data to specify which parent clocks accept rate change propagation, and support set rate propagation in bcm2835_clock_determine_rate(). Signed-off-by: Boris Brezillon Reviewed-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit 155e8b3b0ee320ae866b97dd31eba8a1f080a772) Signed-off-by: Amit Pundir --- drivers/clk/bcm/clk-bcm2835.c | 67 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 4 deletions(-) -- 2.7.4 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index 2acaa77..df96fe6 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -436,6 +436,9 @@ struct bcm2835_clock_data { const char *const *parents; int num_mux_parents; + /* Bitmap encoding which parents accept rate change propagation. */ + unsigned int set_rate_parent; + u32 ctl_reg; u32 div_reg; @@ -1017,10 +1020,60 @@ bcm2835_clk_is_pllc(struct clk_hw *hw) return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0; } +static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, + int parent_idx, + unsigned long rate, + u32 *div, + unsigned long *prate) +{ + struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); + struct bcm2835_cprman *cprman = clock->cprman; + const struct bcm2835_clock_data *data = clock->data; + unsigned long best_rate; + u32 curdiv, mindiv, maxdiv; + struct clk_hw *parent; + + parent = clk_hw_get_parent_by_index(hw, parent_idx); + + if (!(BIT(parent_idx) & data->set_rate_parent)) { + *prate = clk_hw_get_rate(parent); + *div = bcm2835_clock_choose_div(hw, rate, *prate, true); + + return bcm2835_clock_rate_from_divisor(clock, *prate, + *div); + } + + if (data->frac_bits) + dev_warn(cprman->dev, + "frac bits are not used when propagating rate change"); + + /* clamp to min divider of 2 if we're dealing with a mash clock */ + mindiv = data->is_mash_clock ? 2 : 1; + maxdiv = BIT(data->int_bits) - 1; + + /* TODO: Be smart, and only test a subset of the available divisors. */ + for (curdiv = mindiv; curdiv <= maxdiv; curdiv++) { + unsigned long tmp_rate; + + tmp_rate = clk_hw_round_rate(parent, rate * curdiv); + tmp_rate /= curdiv; + if (curdiv == mindiv || + (tmp_rate > best_rate && tmp_rate <= rate)) + best_rate = tmp_rate; + + if (best_rate == rate) + break; + } + + *div = curdiv << CM_DIV_FRAC_BITS; + *prate = curdiv * best_rate; + + return best_rate; +} + static int bcm2835_clock_determine_rate(struct clk_hw *hw, struct clk_rate_request *req) { - struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); struct clk_hw *parent, *best_parent = NULL; bool current_parent_is_pllc; unsigned long rate, best_rate = 0; @@ -1048,9 +1101,8 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw, if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc) continue; - prate = clk_hw_get_rate(parent); - div = bcm2835_clock_choose_div(hw, req->rate, prate, true); - rate = bcm2835_clock_rate_from_divisor(clock, prate, div); + rate = bcm2835_clock_choose_div_and_prate(hw, i, req->rate, + &div, &prate); if (rate > best_rate && rate <= req->rate) { best_parent = parent; best_prate = prate; @@ -1262,6 +1314,13 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, init.name = data->name; init.flags = data->flags | CLK_IGNORE_UNUSED; + /* + * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate + * rate changes on at least of the parents. + */ + if (data->set_rate_parent) + init.flags |= CLK_SET_RATE_PARENT; + if (data->is_vpu_clock) { init.ops = &bcm2835_vpu_clock_clk_ops; } else { From patchwork Wed Apr 5 10:32:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96813 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196037qgd; Wed, 5 Apr 2017 03:33:31 -0700 (PDT) X-Received: by 10.98.76.140 with SMTP id e12mr27879497pfj.82.1491388411078; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.30; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933464AbdDEKd3 (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:29 -0400 Received: from mail-pf0-f173.google.com ([209.85.192.173]:36799 "EHLO mail-pf0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933410AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f173.google.com with SMTP id o126so5584493pfb.3 for ; Wed, 05 Apr 2017 03:32:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Y8zOukan2JejQjnNm7LJz+LbfC8C/DLn0s86i/CVMzM=; b=jXtWuysTCKh+oegsqymPUDViLxwgHUjezHAGUm2+LYaiSqsgNSGsoIMx3Cg6Pua4Tz 73aURDrtwICIl7MrEAdCpzfxR2f6U4OV9UGSUooCdQ4qdrl70/xcleoPtaB+u6hB+/nu yiGja9Vp4hG8Y8NaS6nNOjGbPNtL+2LM5Xlps= 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=Y8zOukan2JejQjnNm7LJz+LbfC8C/DLn0s86i/CVMzM=; b=bGfkKFCmLOcAlCD2haphBRhByMIEMnbc4u7LFle+0QfFAjTqnVOfgpDApDlDuKnse9 30zMK6gUnwZJkYKwXnlnvEaU0J4Eks6vikdHkjSfcSscJDSeA5Ahkb9jCHaiZyN4+Fhu J3mRhNcDQuDxLQtyKpJBriC6S3LomDU4AqXB6bkYZDmohnVU+095F04EOZzQF2x/Nkko oP1uL027bBv0nuVLJPgxRZJc4T7vPWp7dIAg/SQrZFyBHQ+FVT4ot/OT1IMp1abti1rK VPU4XKs47Yz1aYDcO073v7C6EdoiVO+goAW2TbPssWshAUi8enSY1zFGTu/M3b2ffaOf gAUg== X-Gm-Message-State: AFeK/H0KCVoEJEZpXcXcLpE0GkPrspLb0IWPsFiEk6+WvBjmwvo+rjqHAiSZhPD+O0nolgC7 X-Received: by 10.84.218.130 with SMTP id r2mr34928668pli.79.1491388369264; Wed, 05 Apr 2017 03:32:49 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:48 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Boris Brezillon , Stephen Boyd Subject: [PATCH v2 for-4.9 10/32] clk: bcm: Allow rate change propagation to PLLH_AUX on VEC clock Date: Wed, 5 Apr 2017 16:02:02 +0530 Message-Id: <1491388344-13521-11-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Boris Brezillon The VEC clock requires needs to be set at exactly 108MHz. Allow rate change propagation on PLLH_AUX to match this requirement wihtout impacting other IPs (PLLH is currently only used by the HDMI encoder, which cannot be enabled when the VEC encoder is enabled). Signed-off-by: Boris Brezillon Reviewed-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit d86d46af84855403c00018be1c3e7bc190f2a6cd) Signed-off-by: Amit Pundir --- drivers/clk/bcm/clk-bcm2835.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index df96fe6..eaf82f4 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -1861,7 +1861,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_VECCTL, .div_reg = CM_VECDIV, .int_bits = 4, - .frac_bits = 0), + .frac_bits = 0, + /* + * Allow rate change propagation only on PLLH_AUX which is + * assigned index 7 in the parent array. + */ + .set_rate_parent = BIT(7)), /* dsi clocks */ [BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK( From patchwork Wed Apr 5 10:32:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96812 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196032qgd; Wed, 5 Apr 2017 03:33:30 -0700 (PDT) X-Received: by 10.84.224.66 with SMTP id a2mr35652121plt.32.1491388410219; Wed, 05 Apr 2017 03:33:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.30; Wed, 05 Apr 2017 03:33:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933472AbdDEKd2 (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:28 -0400 Received: from mail-pf0-f181.google.com ([209.85.192.181]:33153 "EHLO mail-pf0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933464AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f181.google.com with SMTP id s16so5601087pfs.0 for ; Wed, 05 Apr 2017 03:32:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=748spIC5zfHXulxOiBih0Tgm/jI0ve+M+oXVdPAI3to=; b=jpa3CG92axBTonSf/069OJ7wi/8u3TbJS3lzrNeYTW2p5oZEIgq2t6Rq4nCGX2zhho Dbzv+ExmavXoL8ZuUc6QfKSvDymobs1wYTam3+NfFbecyJrCsBgoCZCypK0A33aNhO32 7I64Gwl5Tq03Nwtvr7DPHrWXEu9KLEFNj6iGc= 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=748spIC5zfHXulxOiBih0Tgm/jI0ve+M+oXVdPAI3to=; b=OtA3PQOBVMoVijRDWxbtC1XBthbdNvki4HAKqteROSlI4U5abYz+XbFrikTPaQ2jv2 2kgKaRgdH7CZpfYb4Ozv/1A91effli85qzZIY5/xNKFyBliG32eJdR2L04hZMjWua4Xl DFGOU0u2+/mz6tJ2swaftJZHY9qYbQqalhTuXxLPk1XzsmUVIvULSbDqWdiYfvbWWvFr b31ZgUNYsJQ6Lm/BOg5fTagPlo1xvyELTHA5+4cQSwfRkDtArlsAi3Mo11r43N+pz+Oj W6Fa81C6Ov/IBwGFgbRf7KQonnNh+xHWVwQAq9cccLJZJQOyG6dDcE1j36wT2xqlMW4f eJew== X-Gm-Message-State: AFeK/H3pr9z3xtMRIuQYzMQ9cH4OUjLTTQktgZb4hK19GNOr1XxLzxDQ1UC6RofuvuH7ilU2 X-Received: by 10.84.140.235 with SMTP id 98mr35204597plt.161.1491388371389; Wed, 05 Apr 2017 03:32:51 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:50 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Boris Brezillon , Stephen Boyd Subject: [PATCH v2 for-4.9 11/32] clk: bcm: Fix 'maybe-uninitialized' warning in bcm2835_clock_choose_div_and_prate() Date: Wed, 5 Apr 2017 16:02:03 +0530 Message-Id: <1491388344-13521-12-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Boris Brezillon best_rate is reported as potentially uninitialized by gcc. Signed-off-by: Boris Brezillon Fixes: 155e8b3b0ee3 ("clk: bcm: Support rate change propagation on bcm2835 clocks") Reported-by: Stephen Rothwell Reviewed-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit 2aab7a2055a1705c9e30920d95a596226999eb21) Signed-off-by: Amit Pundir --- drivers/clk/bcm/clk-bcm2835.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index eaf82f4..0d14409 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -1029,7 +1029,7 @@ static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw, struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); struct bcm2835_cprman *cprman = clock->cprman; const struct bcm2835_clock_data *data = clock->data; - unsigned long best_rate; + unsigned long best_rate = 0; u32 curdiv, mindiv, maxdiv; struct clk_hw *parent; From patchwork Wed Apr 5 10:32:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96831 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196378qgd; Wed, 5 Apr 2017 03:34:29 -0700 (PDT) X-Received: by 10.98.137.204 with SMTP id n73mr27855051pfk.5.1491388469639; Wed, 05 Apr 2017 03:34:29 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.29; Wed, 05 Apr 2017 03:34:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933463AbdDEKe2 (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:28 -0400 Received: from mail-pf0-f174.google.com ([209.85.192.174]:33163 "EHLO mail-pf0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933462AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f174.google.com with SMTP id s16so5601553pfs.0 for ; Wed, 05 Apr 2017 03:32:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=2RNM8+/EuIrB0J33Li0qTrRkKmm+73o0TkJ+B7RfUeM=; b=KXUv+lOZPs7B8KLyh9Eir3Ul/2uaRBdSQ5pC/3w984HCoCcJVKQENf1LWRVs1zdJKY OYTuQmHyTQcxzZs850EpTMeI3rdK4MruveA/1SR1lmD5BKMirCy9YUVMXvSqX5BXgInD 2qz2ZVwEw/gXm4HUn3ss2kqlrSVrQnUxn+r/w= 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=2RNM8+/EuIrB0J33Li0qTrRkKmm+73o0TkJ+B7RfUeM=; b=H+jDFMcdtn0ACx0Rt4JXlZEBVIBGz6VfgPp43AEBKt1zT4H2Wh4zMpIkyqoUq4yrFr khw26+szGhz9+LywL/wAT3F+7P6YJRMM8nbn5qcM5sXpSriZTeaOSPYsol1r8tBrzZBw maphB2g4Umln+QutpjJCODu1JSrXGOhzSq9L5GqfOV270/187hY7Gd9QVDH5xrMlkpgb admI3xp6dkxMp7slbVIhrv0hfZkw7qLAPuQ7m/DgQJn+FMXHEMcwlEWK1eailGEnDsSM suuH6cbONZb998ZCz08gmT/rNb/AU/lMfHKAftVbC4k375iNDgseqtiuiRAzOs53iUEG zJuA== X-Gm-Message-State: AFeK/H0uimzyb2pgCzD/EsKPJiwk4ZTu5iI9IZG1HeC10CE980Co2UeezxJfg5OFzVDO4UIA X-Received: by 10.84.160.227 with SMTP id v32mr36132090plg.87.1491388373558; Wed, 05 Apr 2017 03:32:53 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:52 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Eric Anholt , Stephen Boyd Subject: [PATCH v2 for-4.9 12/32] clk: bcm2835: Don't rate change PLLs on behalf of DSI PLL dividers. Date: Wed, 5 Apr 2017 16:02:04 +0530 Message-Id: <1491388344-13521-13-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Eric Anholt Our core PLLs are intended to be configured once and left alone. With the SET_RATE_PARENT, asking to set the PLLD_DSI1 clock rate would change PLLD just to get closer to the requested DSI clock, thus changing PLLD_PER, the UART and ethernet PHY clock rates downstream of it, and breaking ethernet. We *do* want PLLH to change so that PLLH_AUX can be exactly the value we want, though. Thus, we need to have a per-divider policy of whether to pass rate changes up. Signed-off-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit 55486091bd1e1c5ed28c43c0d6b3392468a9adb5) Signed-off-by: Amit Pundir --- drivers/clk/bcm/clk-bcm2835.c | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) -- 2.7.4 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index 0d14409..3d0848d 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -428,6 +428,7 @@ struct bcm2835_pll_divider_data { u32 load_mask; u32 hold_mask; u32 fixed_divider; + u32 flags; }; struct bcm2835_clock_data { @@ -1252,7 +1253,7 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman, init.num_parents = 1; init.name = divider_name; init.ops = &bcm2835_pll_divider_clk_ops; - init.flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED; + init.flags = data->flags | CLK_IGNORE_UNUSED; divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL); if (!divider) @@ -1466,7 +1467,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLA_CORE, .load_mask = CM_PLLA_LOADCORE, .hold_mask = CM_PLLA_HOLDCORE, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLA_PER] = REGISTER_PLL_DIV( .name = "plla_per", .source_pll = "plla", @@ -1474,7 +1476,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLA_PER, .load_mask = CM_PLLA_LOADPER, .hold_mask = CM_PLLA_HOLDPER, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLA_DSI0] = REGISTER_PLL_DIV( .name = "plla_dsi0", .source_pll = "plla", @@ -1490,7 +1493,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLA_CCP2, .load_mask = CM_PLLA_LOADCCP2, .hold_mask = CM_PLLA_HOLDCCP2, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), /* PLLB is used for the ARM's clock. */ [BCM2835_PLLB] = REGISTER_PLL( @@ -1514,7 +1518,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLB_ARM, .load_mask = CM_PLLB_LOADARM, .hold_mask = CM_PLLB_HOLDARM, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), /* * PLLC is the core PLL, used to drive the core VPU clock. @@ -1543,7 +1548,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLC_CORE0, .load_mask = CM_PLLC_LOADCORE0, .hold_mask = CM_PLLC_HOLDCORE0, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLC_CORE1] = REGISTER_PLL_DIV( .name = "pllc_core1", .source_pll = "pllc", @@ -1551,7 +1557,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLC_CORE1, .load_mask = CM_PLLC_LOADCORE1, .hold_mask = CM_PLLC_HOLDCORE1, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLC_CORE2] = REGISTER_PLL_DIV( .name = "pllc_core2", .source_pll = "pllc", @@ -1559,7 +1566,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLC_CORE2, .load_mask = CM_PLLC_LOADCORE2, .hold_mask = CM_PLLC_HOLDCORE2, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLC_PER] = REGISTER_PLL_DIV( .name = "pllc_per", .source_pll = "pllc", @@ -1567,7 +1575,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLC_PER, .load_mask = CM_PLLC_LOADPER, .hold_mask = CM_PLLC_HOLDPER, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), /* * PLLD is the display PLL, used to drive DSI display panels. @@ -1596,7 +1605,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLD_CORE, .load_mask = CM_PLLD_LOADCORE, .hold_mask = CM_PLLD_HOLDCORE, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLD_PER] = REGISTER_PLL_DIV( .name = "plld_per", .source_pll = "plld", @@ -1604,7 +1614,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLD_PER, .load_mask = CM_PLLD_LOADPER, .hold_mask = CM_PLLD_HOLDPER, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLD_DSI0] = REGISTER_PLL_DIV( .name = "plld_dsi0", .source_pll = "plld", @@ -1649,7 +1660,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLH_RCAL, .load_mask = CM_PLLH_LOADRCAL, .hold_mask = 0, - .fixed_divider = 10), + .fixed_divider = 10, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLH_AUX] = REGISTER_PLL_DIV( .name = "pllh_aux", .source_pll = "pllh", @@ -1657,7 +1669,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLH_AUX, .load_mask = CM_PLLH_LOADAUX, .hold_mask = 0, - .fixed_divider = 1), + .fixed_divider = 1, + .flags = CLK_SET_RATE_PARENT), [BCM2835_PLLH_PIX] = REGISTER_PLL_DIV( .name = "pllh_pix", .source_pll = "pllh", @@ -1665,7 +1678,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .a2w_reg = A2W_PLLH_PIX, .load_mask = CM_PLLH_LOADPIX, .hold_mask = 0, - .fixed_divider = 10), + .fixed_divider = 10, + .flags = CLK_SET_RATE_PARENT), /* the clocks */ From patchwork Wed Apr 5 10:32:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96833 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196383qgd; Wed, 5 Apr 2017 03:34:30 -0700 (PDT) X-Received: by 10.84.149.168 with SMTP id m37mr35557709pla.97.1491388470717; Wed, 05 Apr 2017 03:34:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.30; Wed, 05 Apr 2017 03:34:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933475AbdDEKe1 (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:27 -0400 Received: from mail-pg0-f49.google.com ([74.125.83.49]:36318 "EHLO mail-pg0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933463AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f49.google.com with SMTP id g2so5934837pge.3 for ; Wed, 05 Apr 2017 03:32:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=WoH7+NHaqc3j7vfAKZeTXTmdchZnv5OU73TP3NmPGE8=; b=FW7L0TVJxWnrb6zC6ubdu+RgSJONkg0WlsUmmzibHlJfuj4m64fiIm6cFOczPseTUa /jF0BQVeZ20fFFbnKPddSFMneOZhDsT//iJ3WZjOjfRbjuDNeQc6q9M2S7np+utz8P19 BA4YnGBDa9hs7p0CxeLQny6rgVOtDYM5Jq4pw= 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=WoH7+NHaqc3j7vfAKZeTXTmdchZnv5OU73TP3NmPGE8=; b=EioIMHkHHl56GU8mKkpsp1U1SPzKRhdkom36Fpbd6Y+Qe5Bd71S63xbjrIcQSkextf togQ1riS7bUY99UdnusUt/yvf0TN0w58shik0PiUg4wh2ZdYZrAG0Onf8QpWSemR0l3p ee0T2ZX05flsvrf979KcLNvLNguC2ZvGeiDvmgMs87iK1+71wcYB+tidLVRSzZxqxpMQ GAuLQ1rhOc1HX3SfYEtF4J2Cb/LlgJSh3v5pHnXNnf+EzhZExVH6SOPC1ho8KEbIzUko POpIm2gScI+8AVDaMs4D+o0vItM1aL9qEqQDkyZYZ7Ux6+CnmO0apMmCY44YyIdInFG+ KS4w== X-Gm-Message-State: AFeK/H0y0ajMbaUud+vX8bg5hB3bGGdh6FWIH6zOWUeg8z5TrP9tYy7X8lYdwpHtwxPCeScM X-Received: by 10.84.216.24 with SMTP id m24mr34911101pli.96.1491388375624; Wed, 05 Apr 2017 03:32:55 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:55 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Eric Anholt , Stephen Boyd Subject: [PATCH v2 for-4.9 13/32] clk: bcm2835: Register the DSI0/DSI1 pixel clocks. Date: Wed, 5 Apr 2017 16:02:05 +0530 Message-Id: <1491388344-13521-14-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Eric Anholt The DSI pixel clocks are muxed from clocks generated in the analog phy by the DSI driver. In order to set them as parents, we need to do the same name lookup dance on them as we do for our root oscillator. Signed-off-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit 8a39e9fa578229fd4604266c6ebb1a3a77d7994c) Signed-off-by: Amit Pundir --- .../bindings/clock/brcm,bcm2835-cprman.txt | 15 ++- drivers/clk/bcm/clk-bcm2835.c | 121 +++++++++++++++++++-- include/dt-bindings/clock/bcm2835.h | 2 + 3 files changed, 125 insertions(+), 13 deletions(-) -- 2.7.4 diff --git a/Documentation/devicetree/bindings/clock/brcm,bcm2835-cprman.txt b/Documentation/devicetree/bindings/clock/brcm,bcm2835-cprman.txt index e56a1df..dd906db 100644 --- a/Documentation/devicetree/bindings/clock/brcm,bcm2835-cprman.txt +++ b/Documentation/devicetree/bindings/clock/brcm,bcm2835-cprman.txt @@ -16,7 +16,20 @@ Required properties: - #clock-cells: Should be <1>. The permitted clock-specifier values can be found in include/dt-bindings/clock/bcm2835.h - reg: Specifies base physical address and size of the registers -- clocks: The external oscillator clock phandle +- clocks: phandles to the parent clocks used as input to the module, in + the following order: + + - External oscillator + - DSI0 byte clock + - DSI0 DDR2 clock + - DSI0 DDR clock + - DSI1 byte clock + - DSI1 DDR2 clock + - DSI1 DDR clock + + Only external oscillator is required. The DSI clocks may + not be present, in which case their children will be + unusable. Example: diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index 3d0848d..2e7423d 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -297,11 +297,32 @@ #define LOCK_TIMEOUT_NS 100000000 #define BCM2835_MAX_FB_RATE 1750000000u +/* + * Names of clocks used within the driver that need to be replaced + * with an external parent's name. This array is in the order that + * the clocks node in the DT references external clocks. + */ +static const char *const cprman_parent_names[] = { + "xosc", + "dsi0_byte", + "dsi0_ddr2", + "dsi0_ddr", + "dsi1_byte", + "dsi1_ddr2", + "dsi1_ddr", +}; + struct bcm2835_cprman { struct device *dev; void __iomem *regs; spinlock_t regs_lock; /* spinlock for all clocks */ - const char *osc_name; + + /* + * Real names of cprman clock parents looked up through + * of_clk_get_parent_name(), which will be used in the + * parent_names[] arrays for clock registration. + */ + const char *real_parent_names[ARRAY_SIZE(cprman_parent_names)]; /* Must be last */ struct clk_hw_onecell_data onecell; @@ -907,6 +928,9 @@ static long bcm2835_clock_rate_from_divisor(struct bcm2835_clock *clock, const struct bcm2835_clock_data *data = clock->data; u64 temp; + if (data->int_bits == 0 && data->frac_bits == 0) + return parent_rate; + /* * The divisor is a 12.12 fixed point field, but only some of * the bits are populated in any given clock. @@ -930,7 +954,12 @@ static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw, struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw); struct bcm2835_cprman *cprman = clock->cprman; const struct bcm2835_clock_data *data = clock->data; - u32 div = cprman_read(cprman, data->div_reg); + u32 div; + + if (data->int_bits == 0 && data->frac_bits == 0) + return parent_rate; + + div = cprman_read(cprman, data->div_reg); return bcm2835_clock_rate_from_divisor(clock, parent_rate, div); } @@ -1209,7 +1238,7 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman, memset(&init, 0, sizeof(init)); /* All of the PLLs derive from the external oscillator. */ - init.parent_names = &cprman->osc_name; + init.parent_names = &cprman->real_parent_names[0]; init.num_parents = 1; init.name = data->name; init.ops = &bcm2835_pll_clk_ops; @@ -1295,18 +1324,22 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman, struct bcm2835_clock *clock; struct clk_init_data init; const char *parents[1 << CM_SRC_BITS]; - size_t i; + size_t i, j; int ret; /* - * Replace our "xosc" references with the oscillator's - * actual name. + * Replace our strings referencing parent clocks with the + * actual clock-output-name of the parent. */ for (i = 0; i < data->num_mux_parents; i++) { - if (strcmp(data->parents[i], "xosc") == 0) - parents[i] = cprman->osc_name; - else - parents[i] = data->parents[i]; + parents[i] = data->parents[i]; + + for (j = 0; j < ARRAY_SIZE(cprman_parent_names); j++) { + if (strcmp(parents[i], cprman_parent_names[j]) == 0) { + parents[i] = cprman->real_parent_names[j]; + break; + } + } } memset(&init, 0, sizeof(init)); @@ -1433,6 +1466,47 @@ static const char *const bcm2835_clock_vpu_parents[] = { __VA_ARGS__) /* + * DSI parent clocks. The DSI byte/DDR/DDR2 clocks come from the DSI + * analog PHY. The _inv variants are generated internally to cprman, + * but we don't use them so they aren't hooked up. + */ +static const char *const bcm2835_clock_dsi0_parents[] = { + "gnd", + "xosc", + "testdebug0", + "testdebug1", + "dsi0_ddr", + "dsi0_ddr_inv", + "dsi0_ddr2", + "dsi0_ddr2_inv", + "dsi0_byte", + "dsi0_byte_inv", +}; + +static const char *const bcm2835_clock_dsi1_parents[] = { + "gnd", + "xosc", + "testdebug0", + "testdebug1", + "dsi1_ddr", + "dsi1_ddr_inv", + "dsi1_ddr2", + "dsi1_ddr2_inv", + "dsi1_byte", + "dsi1_byte_inv", +}; + +#define REGISTER_DSI0_CLK(...) REGISTER_CLK( \ + .num_mux_parents = ARRAY_SIZE(bcm2835_clock_dsi0_parents), \ + .parents = bcm2835_clock_dsi0_parents, \ + __VA_ARGS__) + +#define REGISTER_DSI1_CLK(...) REGISTER_CLK( \ + .num_mux_parents = ARRAY_SIZE(bcm2835_clock_dsi1_parents), \ + .parents = bcm2835_clock_dsi1_parents, \ + __VA_ARGS__) + +/* * the real definition of all the pll, pll_dividers and clocks * these make use of the above REGISTER_* macros */ @@ -1895,6 +1969,18 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .div_reg = CM_DSI1EDIV, .int_bits = 4, .frac_bits = 8), + [BCM2835_CLOCK_DSI0P] = REGISTER_DSI0_CLK( + .name = "dsi0p", + .ctl_reg = CM_DSI0PCTL, + .div_reg = CM_DSI0PDIV, + .int_bits = 0, + .frac_bits = 0), + [BCM2835_CLOCK_DSI1P] = REGISTER_DSI1_CLK( + .name = "dsi1p", + .ctl_reg = CM_DSI1PCTL, + .div_reg = CM_DSI1PDIV, + .int_bits = 0, + .frac_bits = 0), /* the gates */ @@ -1953,8 +2039,19 @@ static int bcm2835_clk_probe(struct platform_device *pdev) if (IS_ERR(cprman->regs)) return PTR_ERR(cprman->regs); - cprman->osc_name = of_clk_get_parent_name(dev->of_node, 0); - if (!cprman->osc_name) + memcpy(cprman->real_parent_names, cprman_parent_names, + sizeof(cprman_parent_names)); + of_clk_parent_fill(dev->of_node, cprman->real_parent_names, + ARRAY_SIZE(cprman_parent_names)); + + /* + * Make sure the external oscillator has been registered. + * + * The other (DSI) clocks are not present on older device + * trees, which we still need to support for backwards + * compatibility. + */ + if (!cprman->real_parent_names[0]) return -ENODEV; platform_set_drvdata(pdev, cprman); diff --git a/include/dt-bindings/clock/bcm2835.h b/include/dt-bindings/clock/bcm2835.h index 360e00c..a0c812b 100644 --- a/include/dt-bindings/clock/bcm2835.h +++ b/include/dt-bindings/clock/bcm2835.h @@ -64,3 +64,5 @@ #define BCM2835_CLOCK_CAM1 46 #define BCM2835_CLOCK_DSI0E 47 #define BCM2835_CLOCK_DSI1E 48 +#define BCM2835_CLOCK_DSI0P 49 +#define BCM2835_CLOCK_DSI1P 50 From patchwork Wed Apr 5 10:32:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96828 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196363qgd; Wed, 5 Apr 2017 03:34:27 -0700 (PDT) X-Received: by 10.84.149.168 with SMTP id m37mr35557346pla.97.1491388467370; Wed, 05 Apr 2017 03:34:27 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.27; Wed, 05 Apr 2017 03:34:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933534AbdDEKeZ (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:25 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:35131 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933478AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f45.google.com with SMTP id 81so6026537pgh.2 for ; Wed, 05 Apr 2017 03:33:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=j64GvdH77f2NtPDChqPhOWc8qq74IAHuBiWxe0RnM8o=; b=gufv0a423NsmGSL49lUuSLQ8aAji5EGtO+dlBqE3iLegp2tVi7GhmdiT1m+V7pykSg iQDJXRU/Ol/QZS4ma1btHCmpV1rZHR5+2A1tPsi+LWYpqWF0NNVeyCtaM+tJbae3vSPz SE4HvkJzpNEbFh01jGahbChBYhu5fblk08oyc= 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=j64GvdH77f2NtPDChqPhOWc8qq74IAHuBiWxe0RnM8o=; b=RAMq2qWKr/5fJEdy0g/gEiEToQH20OTOnWZXOcj3hats2f2AufBZVOlTBWIEse6S7K rI1bQodpYLc55mJkm50wK43SE41oRFT58ARng7poiQmTRwhD0Qn4EiMcXBi36I7Cr/fP kWzqHN5RMwbDJm+NXBVLutEyp25am6pmNtrXNXapNKFkv2Zf2hN6wg4youWacvvn83rI dUMPLn3XNA9tOlopoCTqWCFbPcRt6cP/bTS4w1s8qD+xhlKpiXuyANlsSZt7gWy/2OvA EtO5QYchq9CP5BPq0sMDaQa+G2Cpeu8hpYD4xHfk5gjVOgdsCTx72twmSXZVwWi3lfEb wSrA== X-Gm-Message-State: AFeK/H3aAf38OrKdcztbJ5yehqaGxHZvcdoZSFmwUpPGjwmnBB7fK2Qm3AhtCJ23YK9vavR1 X-Received: by 10.84.198.164 with SMTP id p33mr35966451pld.127.1491388377669; Wed, 05 Apr 2017 03:32:57 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:57 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Eric Anholt , Stephen Boyd Subject: [PATCH v2 for-4.9 14/32] clk: bcm2835: Add leaf clock measurement support, disabled by default Date: Wed, 5 Apr 2017 16:02:06 +0530 Message-Id: <1491388344-13521-15-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Eric Anholt This proved incredibly useful during debugging of the DSI driver, to see if our clocks were running at rate we requested. Let's leave it here for the next person interacting with clocks on the platform (and so that hopefully we can just hook it up to debugfs some day). Signed-off-by: Eric Anholt Signed-off-by: Stephen Boyd (cherry picked from commit 3f9195811d8d829556c4cd88d3f9e56a80d5ba60) Signed-off-by: Amit Pundir --- drivers/clk/bcm/clk-bcm2835.c | 144 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 119 insertions(+), 25 deletions(-) -- 2.7.4 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c index 2e7423d..0258538 100644 --- a/drivers/clk/bcm/clk-bcm2835.c +++ b/drivers/clk/bcm/clk-bcm2835.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include #include @@ -98,7 +99,8 @@ #define CM_SMIDIV 0x0b4 /* no definition for 0x0b8 and 0x0bc */ #define CM_TCNTCTL 0x0c0 -#define CM_TCNTDIV 0x0c4 +# define CM_TCNT_SRC1_SHIFT 12 +#define CM_TCNTCNT 0x0c4 #define CM_TECCTL 0x0c8 #define CM_TECDIV 0x0cc #define CM_TD0CTL 0x0d0 @@ -338,6 +340,61 @@ static inline u32 cprman_read(struct bcm2835_cprman *cprman, u32 reg) return readl(cprman->regs + reg); } +/* Does a cycle of measuring a clock through the TCNT clock, which may + * source from many other clocks in the system. + */ +static unsigned long bcm2835_measure_tcnt_mux(struct bcm2835_cprman *cprman, + u32 tcnt_mux) +{ + u32 osccount = 19200; /* 1ms */ + u32 count; + ktime_t timeout; + + spin_lock(&cprman->regs_lock); + + cprman_write(cprman, CM_TCNTCTL, CM_KILL); + + cprman_write(cprman, CM_TCNTCTL, + (tcnt_mux & CM_SRC_MASK) | + (tcnt_mux >> CM_SRC_BITS) << CM_TCNT_SRC1_SHIFT); + + cprman_write(cprman, CM_OSCCOUNT, osccount); + + /* do a kind delay at the start */ + mdelay(1); + + /* Finish off whatever is left of OSCCOUNT */ + timeout = ktime_add_ns(ktime_get(), LOCK_TIMEOUT_NS); + while (cprman_read(cprman, CM_OSCCOUNT)) { + if (ktime_after(ktime_get(), timeout)) { + dev_err(cprman->dev, "timeout waiting for OSCCOUNT\n"); + count = 0; + goto out; + } + cpu_relax(); + } + + /* Wait for BUSY to clear. */ + timeout = ktime_add_ns(ktime_get(), LOCK_TIMEOUT_NS); + while (cprman_read(cprman, CM_TCNTCTL) & CM_BUSY) { + if (ktime_after(ktime_get(), timeout)) { + dev_err(cprman->dev, "timeout waiting for !BUSY\n"); + count = 0; + goto out; + } + cpu_relax(); + } + + count = cprman_read(cprman, CM_TCNTCNT); + + cprman_write(cprman, CM_TCNTCTL, 0); + +out: + spin_unlock(&cprman->regs_lock); + + return count * 1000; +} + static int bcm2835_debugfs_regset(struct bcm2835_cprman *cprman, u32 base, struct debugfs_reg32 *regs, size_t nregs, struct dentry *dentry) @@ -473,6 +530,8 @@ struct bcm2835_clock_data { bool is_vpu_clock; bool is_mash_clock; + + u32 tcnt_mux; }; struct bcm2835_gate_data { @@ -1008,6 +1067,17 @@ static int bcm2835_clock_on(struct clk_hw *hw) CM_GATE); spin_unlock(&cprman->regs_lock); + /* Debug code to measure the clock once it's turned on to see + * if it's ticking at the rate we expect. + */ + if (data->tcnt_mux && false) { + dev_info(cprman->dev, + "clk %s: rate %ld, measure %ld\n", + data->name, + clk_hw_get_rate(hw), + bcm2835_measure_tcnt_mux(cprman, data->tcnt_mux)); + } + return 0; } @@ -1765,7 +1835,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_OTPCTL, .div_reg = CM_OTPDIV, .int_bits = 4, - .frac_bits = 0), + .frac_bits = 0, + .tcnt_mux = 6), /* * Used for a 1Mhz clock for the system clocksource, and also used * bythe watchdog timer and the camera pulse generator. @@ -1799,13 +1870,15 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_H264CTL, .div_reg = CM_H264DIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 1), [BCM2835_CLOCK_ISP] = REGISTER_VPU_CLK( .name = "isp", .ctl_reg = CM_ISPCTL, .div_reg = CM_ISPDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 2), /* * Secondary SDRAM clock. Used for low-voltage modes when the PLL @@ -1816,13 +1889,15 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_SDCCTL, .div_reg = CM_SDCDIV, .int_bits = 6, - .frac_bits = 0), + .frac_bits = 0, + .tcnt_mux = 3), [BCM2835_CLOCK_V3D] = REGISTER_VPU_CLK( .name = "v3d", .ctl_reg = CM_V3DCTL, .div_reg = CM_V3DDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 4), /* * VPU clock. This doesn't have an enable bit, since it drives * the bus for everything else, and is special so it doesn't need @@ -1836,7 +1911,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .int_bits = 12, .frac_bits = 8, .flags = CLK_IS_CRITICAL, - .is_vpu_clock = true), + .is_vpu_clock = true, + .tcnt_mux = 5), /* clocks with per parent mux */ [BCM2835_CLOCK_AVEO] = REGISTER_PER_CLK( @@ -1844,19 +1920,22 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_AVEOCTL, .div_reg = CM_AVEODIV, .int_bits = 4, - .frac_bits = 0), + .frac_bits = 0, + .tcnt_mux = 38), [BCM2835_CLOCK_CAM0] = REGISTER_PER_CLK( .name = "cam0", .ctl_reg = CM_CAM0CTL, .div_reg = CM_CAM0DIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 14), [BCM2835_CLOCK_CAM1] = REGISTER_PER_CLK( .name = "cam1", .ctl_reg = CM_CAM1CTL, .div_reg = CM_CAM1DIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 15), [BCM2835_CLOCK_DFT] = REGISTER_PER_CLK( .name = "dft", .ctl_reg = CM_DFTCTL, @@ -1868,7 +1947,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_DPICTL, .div_reg = CM_DPIDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 17), /* Arasan EMMC clock */ [BCM2835_CLOCK_EMMC] = REGISTER_PER_CLK( @@ -1876,7 +1956,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_EMMCCTL, .div_reg = CM_EMMCDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 39), /* General purpose (GPIO) clocks */ [BCM2835_CLOCK_GP0] = REGISTER_PER_CLK( @@ -1885,7 +1966,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .div_reg = CM_GP0DIV, .int_bits = 12, .frac_bits = 12, - .is_mash_clock = true), + .is_mash_clock = true, + .tcnt_mux = 20), [BCM2835_CLOCK_GP1] = REGISTER_PER_CLK( .name = "gp1", .ctl_reg = CM_GP1CTL, @@ -1893,7 +1975,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .int_bits = 12, .frac_bits = 12, .flags = CLK_IS_CRITICAL, - .is_mash_clock = true), + .is_mash_clock = true, + .tcnt_mux = 21), [BCM2835_CLOCK_GP2] = REGISTER_PER_CLK( .name = "gp2", .ctl_reg = CM_GP2CTL, @@ -1908,40 +1991,46 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_HSMCTL, .div_reg = CM_HSMDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 22), [BCM2835_CLOCK_PCM] = REGISTER_PER_CLK( .name = "pcm", .ctl_reg = CM_PCMCTL, .div_reg = CM_PCMDIV, .int_bits = 12, .frac_bits = 12, - .is_mash_clock = true), + .is_mash_clock = true, + .tcnt_mux = 23), [BCM2835_CLOCK_PWM] = REGISTER_PER_CLK( .name = "pwm", .ctl_reg = CM_PWMCTL, .div_reg = CM_PWMDIV, .int_bits = 12, .frac_bits = 12, - .is_mash_clock = true), + .is_mash_clock = true, + .tcnt_mux = 24), [BCM2835_CLOCK_SLIM] = REGISTER_PER_CLK( .name = "slim", .ctl_reg = CM_SLIMCTL, .div_reg = CM_SLIMDIV, .int_bits = 12, .frac_bits = 12, - .is_mash_clock = true), + .is_mash_clock = true, + .tcnt_mux = 25), [BCM2835_CLOCK_SMI] = REGISTER_PER_CLK( .name = "smi", .ctl_reg = CM_SMICTL, .div_reg = CM_SMIDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 27), [BCM2835_CLOCK_UART] = REGISTER_PER_CLK( .name = "uart", .ctl_reg = CM_UARTCTL, .div_reg = CM_UARTDIV, .int_bits = 10, - .frac_bits = 12), + .frac_bits = 12, + .tcnt_mux = 28), /* TV encoder clock. Only operating frequency is 108Mhz. */ [BCM2835_CLOCK_VEC] = REGISTER_PER_CLK( @@ -1954,7 +2043,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { * Allow rate change propagation only on PLLH_AUX which is * assigned index 7 in the parent array. */ - .set_rate_parent = BIT(7)), + .set_rate_parent = BIT(7), + .tcnt_mux = 29), /* dsi clocks */ [BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK( @@ -1962,25 +2052,29 @@ static const struct bcm2835_clk_desc clk_desc_array[] = { .ctl_reg = CM_DSI0ECTL, .div_reg = CM_DSI0EDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 18), [BCM2835_CLOCK_DSI1E] = REGISTER_PER_CLK( .name = "dsi1e", .ctl_reg = CM_DSI1ECTL, .div_reg = CM_DSI1EDIV, .int_bits = 4, - .frac_bits = 8), + .frac_bits = 8, + .tcnt_mux = 19), [BCM2835_CLOCK_DSI0P] = REGISTER_DSI0_CLK( .name = "dsi0p", .ctl_reg = CM_DSI0PCTL, .div_reg = CM_DSI0PDIV, .int_bits = 0, - .frac_bits = 0), + .frac_bits = 0, + .tcnt_mux = 12), [BCM2835_CLOCK_DSI1P] = REGISTER_DSI1_CLK( .name = "dsi1p", .ctl_reg = CM_DSI1PCTL, .div_reg = CM_DSI1PDIV, .int_bits = 0, - .frac_bits = 0), + .frac_bits = 0, + .tcnt_mux = 13), /* the gates */ From patchwork Wed Apr 5 10:32:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96834 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196598qgd; Wed, 5 Apr 2017 03:35:05 -0700 (PDT) X-Received: by 10.99.170.70 with SMTP id x6mr29611564pgo.111.1491388505802; Wed, 05 Apr 2017 03:35:05 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.35.05; Wed, 05 Apr 2017 03:35:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932691AbdDEKec (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:32 -0400 Received: from mail-pg0-f46.google.com ([74.125.83.46]:33865 "EHLO mail-pg0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933466AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f46.google.com with SMTP id 21so6030517pgg.1 for ; Wed, 05 Apr 2017 03:33:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=npA6z32Ekq1KR9faVmOm9RjjDwIR5Sp0t0EtlJQILWc=; b=kHTYY5aDxSJEEGYNVx4hau+R71z8yY9i37t6Gbijn5L+5yXixXBu15VIfvAsI6VuQz 4ALXonKxFc/O6rPdoMGU+CmlO/Kf4kBT8rp6cGn5Fi9nMc4pY1faIcOOu1Sh3C1ZmJAY 4nxVtloSPNeQ1bpqM4DJTfwYWPeCpd7ogERP4= 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=npA6z32Ekq1KR9faVmOm9RjjDwIR5Sp0t0EtlJQILWc=; b=ahP2EGa/w7C3szHnnlp3MqxIMsLyPbz9X7ZfzMInD5kDx+LWU/3/c/BJ49l2w/MXZW RC1yOvhH9TsJvyON83zK+8AWQJFJ68r7W7RlY8zv4pZ4TFl9cS5yNrrxFAEpXan87i5c FEaGX5xsh0KNW5WCyCQCPPvmPATp7iOeT7gd76gtUe7fvvN4nO/DcNwEO8ndTdTTvlGv njXtr7aujlRgCc++tTMOM3LZPXn2KpWJ0mcShRW45a+jUL+7bUUGQqu9v/PqpkPWr1L8 /IAy8CMjm4m4tApi3oDWuCJovYvvmiYeSjw9G9pSkrPe6DALzjUB8c8fSUVRzA/PMcna SL1w== X-Gm-Message-State: AFeK/H37pTQR5mqF8TZUGuQwWqF6HOmib9vheD4hHh+BaZ5iWCUlQ8JKfusNW3d2gCWVovgn X-Received: by 10.99.106.138 with SMTP id f132mr28850858pgc.66.1491388379956; Wed, 05 Apr 2017 03:32:59 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.32.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:32:59 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Matthias Reichl , Martin Sperl , Vinod Koul Subject: [PATCH v2 for-4.9 15/32] dmaengine: bcm2835: Fix cyclic DMA period splitting Date: Wed, 5 Apr 2017 16:02:07 +0530 Message-Id: <1491388344-13521-16-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Matthias Reichl The code responsible for splitting periods into chunks that can be handled by the DMA controller missed to update total_len, the number of bytes processed in the current period, when there are more chunks to follow. Therefore total_len was stuck at 0 and the code didn't work at all. This resulted in a wrong control block layout and audio issues because the cyclic DMA callback wasn't executing on period boundaries. Fix this by adding the missing total_len update. Signed-off-by: Matthias Reichl Signed-off-by: Martin Sperl Tested-by: Clive Messer Reviewed-by: Eric Anholt Signed-off-by: Vinod Koul (cherry picked from commit 2201ac6129fa162ac24da089a034bb0971648ebb) Signed-off-by: Amit Pundir --- drivers/dma/bcm2835-dma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c index e18dc59..6204cc3 100644 --- a/drivers/dma/bcm2835-dma.c +++ b/drivers/dma/bcm2835-dma.c @@ -251,8 +251,11 @@ static void bcm2835_dma_create_cb_set_length( */ /* have we filled in period_length yet? */ - if (*total_len + control_block->length < period_len) + if (*total_len + control_block->length < period_len) { + /* update number of bytes in this period so far */ + *total_len += control_block->length; return; + } /* calculate the length that remains to reach period_length */ control_block->length = period_len - *total_len; From patchwork Wed Apr 5 10:32:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96830 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196376qgd; Wed, 5 Apr 2017 03:34:29 -0700 (PDT) X-Received: by 10.99.55.7 with SMTP id e7mr29690451pga.175.1491388469107; Wed, 05 Apr 2017 03:34:29 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.28; Wed, 05 Apr 2017 03:34:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933478AbdDEKe0 (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:26 -0400 Received: from mail-pf0-f180.google.com ([209.85.192.180]:36852 "EHLO mail-pf0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933481AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f180.google.com with SMTP id o126so5587056pfb.3 for ; Wed, 05 Apr 2017 03:33:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LbXlpECKUS8/0IvUj99Xd1nUAoEFknsi8jtAdkiYLeg=; b=ZsQdw9mi1XPs1nu5tstC0v+wSForHNv7TDxI5q3ge+uaSP7Zwb+cf6lArI1xaPjdP4 2/UZsG/KFqYXNv8cv7+NDnNMFEQqPNkcD7D12WZhdmeauBhSZmIirUYpbwDUpUlFnmss PUTsY3+MXJ9OjkGWTjeVVSDNeCKdBrlyxTUKk= 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=LbXlpECKUS8/0IvUj99Xd1nUAoEFknsi8jtAdkiYLeg=; b=ebVtvPV7flI2VehH14sTLQ2YacLOJ1msHx5LaOR2tgjkNZ1ewh60EcRqvkZkgXAz/3 iRu7Rf+OYGgzlT0tezjrFt5NdftpTt+UZvfLU0tQni54PsvuC+PjPqCobuumfBra8bpw ngzQhM9R5PmvvhLNeihfWOJLYuwZJzEe4JUuMphf3TFUWyF602xwOjd2/3ggwcRD5yd3 wXsKdar2eBoFcW7u8FGWoyOBRJcLKUipZwNS10rF9hBNuty+nmBPWHeJKyeKCLLF9m7/ UPwnVQwb9URRCfkeSBWs4oCa2f5TcivqBgdEdVXhH+cvPfEfYM24jEPqG16Bymag1cnn qu0Q== X-Gm-Message-State: AFeK/H3u47okH3AMNswi9tkS8QxeQ64sm/OW9AOkXsnDO8taifJ/MjZxx0F1jxaOAs3TjVhJ X-Received: by 10.84.248.9 with SMTP id p9mr35217534pll.185.1491388382154; Wed, 05 Apr 2017 03:33:02 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:01 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, John Youn , Felipe Balbi Subject: [PATCH v2 for-4.9 16/32] usb: dwc2: Remove unnecessary kfree Date: Wed, 5 Apr 2017 16:02:08 +0530 Message-Id: <1491388344-13521-17-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: John Youn This shouldn't be freed by the HCD as it is owned by the core and allocated with devm_kzalloc. Signed-off-by: John Youn Signed-off-by: Felipe Balbi (cherry picked from commit cd4b1e34655d46950c065d9284b596cd8d7b28cd) Signed-off-by: Amit Pundir --- drivers/usb/dwc2/hcd.c | 1 - 1 file changed, 1 deletion(-) -- 2.7.4 diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index df5a065..1b6f5e1 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -5184,7 +5184,6 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq) error2: usb_put_hcd(hcd); error1: - kfree(hsotg->core_params); #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS kfree(hsotg->last_frame_num_array); From patchwork Wed Apr 5 10:32:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96829 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196369qgd; Wed, 5 Apr 2017 03:34:28 -0700 (PDT) X-Received: by 10.84.238.139 with SMTP id v11mr34756754plk.189.1491388468116; Wed, 05 Apr 2017 03:34:28 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.27; Wed, 05 Apr 2017 03:34:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933535AbdDEKe0 (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:26 -0400 Received: from mail-pf0-f169.google.com ([209.85.192.169]:36860 "EHLO mail-pf0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933475AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f169.google.com with SMTP id o126so5587386pfb.3 for ; Wed, 05 Apr 2017 03:33:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ReFQDEBKfMl7fxZkhWSQqvrSiHRA2Q5zEjurGWC4ahQ=; b=ksM11rRx9TQi9WgSQC7SP7SiDkxoct2Da9sqwlfUxxnISYM78aA9DTpOKHIXdF2QRW xsbK+kJXI+0WB191/rGIuZrq0abl86VdX+bVOYSk2258ZfT9UGlxMRfsdK9gKEJeQ8yI r4zjV151illqgiA6a0CwGP2VJNXknfhBfh++4= 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:mime-version:content-transfer-encoding; bh=ReFQDEBKfMl7fxZkhWSQqvrSiHRA2Q5zEjurGWC4ahQ=; b=XlUw7sWpAKNGoGWl86qAsmOTvOy5kgVuqNAiNVNRPsZbkaJ/K/zZJAbD+MjCEzmBxq 2hc9B8QWgj7laHHCFKKeOaQfGtBTvq6mJx1EonT2mg2Bneetp6Fpdft0g17tbnzCIkaO IqQLOfX8bR2qTdye+d6/f9eqAjKFqChofv+93bTgQ02q/p4IxJ30KGMCeVZ/wxxpr6e/ +Yqc6xzj4hsybvjZVdCCm1MdfVnUcPAPvxhq5RWCcd7d9juHgkShtXp+kEL2vLzMLFBc oTuGZSXBtNMQb+oMZBzExXUtZFsAImDOBhU6WpGm+ztNr5QkRSKbn4piRVSQAHCici9C xsbg== X-Gm-Message-State: AFeK/H0NQ1uGYSeI3u3GshAyB6eH1cvVMfou6jh6f5mKgMUrIZmpphu0ZuUvtSyQeVKVTmIM X-Received: by 10.84.173.228 with SMTP id p91mr35157950plb.18.1491388384084; Wed, 05 Apr 2017 03:33:04 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:03 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Brian Norris Subject: [PATCH v2 for-4.9 17/32] mtd: bcm47xxpart: fix parsing first block after aligned TRX Date: Wed, 5 Apr 2017 16:02:09 +0530 Message-Id: <1491388344-13521-18-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki After parsing TRX we should skip to the first block placed behind it. Our code was working only with TRX with length not aligned to the blocksize. In other cases (length aligned) it was missing the block places right after TRX. This fixes calculation and simplifies the comment. Signed-off-by: Rafał Miłecki Signed-off-by: Brian Norris (cherry picked from commit bd5d21310133921021d78995ad6346f908483124) Signed-off-by: Amit Pundir --- drivers/mtd/bcm47xxpart.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c index 3779475..283ff7e 100644 --- a/drivers/mtd/bcm47xxpart.c +++ b/drivers/mtd/bcm47xxpart.c @@ -229,12 +229,10 @@ static int bcm47xxpart_parse(struct mtd_info *master, last_trx_part = curr_part - 1; - /* - * We have whole TRX scanned, skip to the next part. Use - * roundown (not roundup), as the loop will increase - * offset in next step. - */ - offset = rounddown(offset + trx->length, blocksize); + /* Jump to the end of TRX */ + offset = roundup(offset + trx->length, blocksize); + /* Next loop iteration will increase the offset */ + offset -= blocksize; continue; } From patchwork Wed Apr 5 10:32:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96814 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196045qgd; Wed, 5 Apr 2017 03:33:31 -0700 (PDT) X-Received: by 10.99.110.202 with SMTP id j193mr28746156pgc.127.1491388411891; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.31; Wed, 05 Apr 2017 03:33:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933467AbdDEKda (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:30 -0400 Received: from mail-pg0-f53.google.com ([74.125.83.53]:33890 "EHLO mail-pg0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933470AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f53.google.com with SMTP id 21so6031737pgg.1 for ; Wed, 05 Apr 2017 03:33:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=svPl+qa3WWfj1THCd0+ysyLD3KrIs6wEKjnI4EF1Qok=; b=T1A9PkIWIRaz4yxGWKjVOGVnPUzGU7HwTdu/rvh5FZCmOrUSMLoF22FIlQVBJbk6vd g8aq2Mik0JKEw0AtqARbwZIf1aUXm44RIY6IpwemmHyxz0bnn1S2GJZFfb5vEP59UljM Y8AmaW9OGSZXMHN4FBy20ZyYvkiSPO9AfMykk= 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:mime-version:content-transfer-encoding; bh=svPl+qa3WWfj1THCd0+ysyLD3KrIs6wEKjnI4EF1Qok=; b=jDz9t3R8zRJPVEA4Y770KmXy09OErgHmrEcq39qEdc1t2ZVbpZhrh5ZAbxpm6EOQsF u2DxhS0rE6NuemBUZj+jXSjQmwVFIsOs8Y6UAvNCHk2F4xmHP47MXJcex875SMnYb3Qr TFg59QGRRtGbo5VVl1ZMCqeTyExX2cJYjH+V1J0uHZb9cTiPdWt1Y//pH0JYRn4wCyuD MgtY57cVQV6g8YwY2Rd18ptPMsckqwtyDuPvzgbKlz77EKmUuI70Ge/PM0/bbgr1AOBt v/dHG5LIch9i1IDHcj3BiDq67CXIS4CVYzd2qjMoYBW6J9aZZf9yvHdbxkx9jB0nrdsF 03xg== X-Gm-Message-State: AFeK/H0HAa36zOM4GG97dWZ+Qqo9mW/HH1S/1EObZUWa+Vk0tGgmtyD1oxm1w/ZJY1k5Gi31 X-Received: by 10.98.211.81 with SMTP id q78mr27713151pfg.97.1491388386191; Wed, 05 Apr 2017 03:33:06 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:05 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , "David S . Miller" Subject: [PATCH v2 for-4.9 18/32] net: add devm version of alloc_etherdev_mqs function Date: Wed, 5 Apr 2017 16:02:10 +0530 Message-Id: <1491388344-13521-19-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki This patch adds devm_alloc_etherdev_mqs function and devm_alloc_etherdev macro. These can be used for simpler netdev allocation without having to care about calling free_netdev. Thanks to this change drivers, their error paths and removal paths may get simpler by a bit. Signed-off-by: Rafał Miłecki Signed-off-by: David S. Miller (cherry picked from commit 40be0dda0725886b623d67868db3219a2e74683b) Signed-off-by: Amit Pundir --- include/linux/etherdevice.h | 5 +++++ net/ethernet/eth.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) -- 2.7.4 diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 6fec9e8..83ae88c 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h @@ -54,6 +54,11 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, #define alloc_etherdev(sizeof_priv) alloc_etherdev_mq(sizeof_priv, 1) #define alloc_etherdev_mq(sizeof_priv, count) alloc_etherdev_mqs(sizeof_priv, count, count) +struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, + unsigned int txqs, + unsigned int rxqs); +#define devm_alloc_etherdev(dev, sizeof_priv) devm_alloc_etherdev_mqs(dev, sizeof_priv, 1, 1) + struct sk_buff **eth_gro_receive(struct sk_buff **head, struct sk_buff *skb); int eth_gro_complete(struct sk_buff *skb, int nhoff); diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 24d7aff..fbf1de9 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -391,6 +391,34 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, } EXPORT_SYMBOL(alloc_etherdev_mqs); +static void devm_free_netdev(struct device *dev, void *res) +{ + free_netdev(*(struct net_device **)res); +} + +struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv, + unsigned int txqs, unsigned int rxqs) +{ + struct net_device **dr; + struct net_device *netdev; + + dr = devres_alloc(devm_free_netdev, sizeof(*dr), GFP_KERNEL); + if (!dr) + return NULL; + + netdev = alloc_etherdev_mqs(sizeof_priv, txqs, rxqs); + if (!netdev) { + devres_free(dr); + return NULL; + } + + *dr = netdev; + devres_add(dev, dr); + + return netdev; +} +EXPORT_SYMBOL(devm_alloc_etherdev_mqs); + ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len) { return scnprintf(buf, PAGE_SIZE, "%*phC\n", len, addr); From patchwork Wed Apr 5 10:32:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96827 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196357qgd; Wed, 5 Apr 2017 03:34:26 -0700 (PDT) X-Received: by 10.98.46.134 with SMTP id u128mr28475565pfu.264.1491388466455; Wed, 05 Apr 2017 03:34:26 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.26; Wed, 05 Apr 2017 03:34:26 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933468AbdDEKeZ (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:25 -0400 Received: from mail-pf0-f171.google.com ([209.85.192.171]:34745 "EHLO mail-pf0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933473AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f171.google.com with SMTP id 197so5598221pfv.1 for ; Wed, 05 Apr 2017 03:33:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vjbPVhUxjZoRmwb6Vl2TXFc9Lu4gLHzkG2m19o3s9EU=; b=gXhtciPQWFWO6oHkGPTLr+TLWRnuOMPm7QiK7nQ7vIIb+1JQBBBVDG7DJwR7gK8kJ9 4YZmMulX+cs4TMoUadhnbL+EnXVXqH412fpPqlThbKQzDkW2Jv7spZoi346Cy+ZPSPXn jX1y9JeCqu3iNOzW4ZS12+JS36J+c2oq+w0uc= 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:mime-version:content-transfer-encoding; bh=vjbPVhUxjZoRmwb6Vl2TXFc9Lu4gLHzkG2m19o3s9EU=; b=TrPaDCwOxIwD/PxCPXXh2rVyEms+7ZlOzagE9yIO3wlElLdD8xwOApTntdFU4ckw/i eIlp9qW2auVsW/xLFCHdQX8yE5mZBROZ6Y843nxVnXGWan9MmKkBFwcyOaVsn1/2X4JD a+9f4y3vvBnRwZq3VFRr5rt2Rd5eqCoK/2USZ7BJtFEEIpIFv6DEw+TjCvc0NNPtK+uj Dvn2SD0L/yzi3oxQz0Y/LTqtwROFDLJVcobCneQoza0+IdG3kx05vfaDWXeBbUPWwNYh GiJVao+Oe0nKcJkO3yb757VGLf9QFww30mOy01gcaRu+TPQU4rNr+bmrWqVBXItCgLDW pRyQ== X-Gm-Message-State: AFeK/H362L9Pks7Jo43FX4laVBJNOGnWcg0WvM0Yszf9OjrnEVrR03VDfyClgIcqIfmoeMAM X-Received: by 10.84.143.195 with SMTP id 61mr35888447plz.46.1491388388314; Wed, 05 Apr 2017 03:33:08 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:07 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , "David S . Miller" Subject: [PATCH v2 for-4.9 19/32] net: bgmac: allocate struct bgmac just once & don't copy it Date: Wed, 5 Apr 2017 16:02:11 +0530 Message-Id: <1491388344-13521-20-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki So far were were allocating struct bgmac in 3 places: platform code, bcma code and shared bgmac_enet_probe function. The reason for this was bgmac_enet_probe: 1) Requiring early-filled struct bgmac 2) Calling alloc_etherdev on its own in order to use netdev_priv later This solution got few drawbacks: 1) Was duplicating allocating code 2) Required copying early-filled struct 3) Resulted in platform/bcma code having access only to unused struct Solve this situation by simply extracting some probe code into the new bgmac_alloc function. Signed-off-by: Rafał Miłecki Reviewed-by: Florian Fainelli Signed-off-by: David S. Miller (cherry picked from commit 34a5102c3235c470a6c77fba16cb971964d9c136) Signed-off-by: Amit Pundir --- drivers/net/ethernet/broadcom/bgmac-bcma.c | 4 +--- drivers/net/ethernet/broadcom/bgmac-platform.c | 2 +- drivers/net/ethernet/broadcom/bgmac.c | 25 +++++++++++++++++-------- drivers/net/ethernet/broadcom/bgmac.h | 3 ++- 4 files changed, 21 insertions(+), 13 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma.c b/drivers/net/ethernet/broadcom/bgmac-bcma.c index c16ec3a..5b0c7a7 100644 --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c @@ -99,12 +99,11 @@ static int bgmac_probe(struct bcma_device *core) u8 *mac; int err; - bgmac = kzalloc(sizeof(*bgmac), GFP_KERNEL); + bgmac = bgmac_alloc(&core->dev); if (!bgmac) return -ENOMEM; bgmac->bcma.core = core; - bgmac->dev = &core->dev; bgmac->dma_dev = core->dma_dev; bgmac->irq = core->irq; @@ -285,7 +284,6 @@ static int bgmac_probe(struct bcma_device *core) err1: bcma_mdio_mii_unregister(bgmac->mii_bus); err: - kfree(bgmac); bcma_set_drvdata(core, NULL); return err; diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c index be52f27..020f487 100644 --- a/drivers/net/ethernet/broadcom/bgmac-platform.c +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c @@ -93,7 +93,7 @@ static int bgmac_probe(struct platform_device *pdev) struct resource *regs; const u8 *mac_addr; - bgmac = devm_kzalloc(&pdev->dev, sizeof(*bgmac), GFP_KERNEL); + bgmac = bgmac_alloc(&pdev->dev); if (!bgmac) return -ENOMEM; diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c index 49f4cafe..537b00b 100644 --- a/drivers/net/ethernet/broadcom/bgmac.c +++ b/drivers/net/ethernet/broadcom/bgmac.c @@ -1459,22 +1459,32 @@ static int bgmac_phy_connect(struct bgmac *bgmac) return 0; } -int bgmac_enet_probe(struct bgmac *info) +struct bgmac *bgmac_alloc(struct device *dev) { struct net_device *net_dev; struct bgmac *bgmac; - int err; /* Allocation and references */ - net_dev = alloc_etherdev(sizeof(*bgmac)); + net_dev = devm_alloc_etherdev(dev, sizeof(*bgmac)); if (!net_dev) - return -ENOMEM; + return NULL; net_dev->netdev_ops = &bgmac_netdev_ops; net_dev->ethtool_ops = &bgmac_ethtool_ops; + bgmac = netdev_priv(net_dev); - memcpy(bgmac, info, sizeof(*bgmac)); + bgmac->dev = dev; bgmac->net_dev = net_dev; + + return bgmac; +} +EXPORT_SYMBOL_GPL(bgmac_alloc); + +int bgmac_enet_probe(struct bgmac *bgmac) +{ + struct net_device *net_dev = bgmac->net_dev; + int err; + net_dev->irq = bgmac->irq; SET_NETDEV_DEV(net_dev, bgmac->dev); @@ -1501,7 +1511,7 @@ int bgmac_enet_probe(struct bgmac *info) err = bgmac_dma_alloc(bgmac); if (err) { dev_err(bgmac->dev, "Unable to alloc memory for DMA\n"); - goto err_netdev_free; + goto err_out; } bgmac->int_mask = BGMAC_IS_ERRMASK | BGMAC_IS_RX | BGMAC_IS_TX_MASK; @@ -1537,8 +1547,7 @@ int bgmac_enet_probe(struct bgmac *info) phy_disconnect(net_dev->phydev); err_dma_free: bgmac_dma_free(bgmac); -err_netdev_free: - free_netdev(net_dev); +err_out: return err; } diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h index 80836b4..69d478a 100644 --- a/drivers/net/ethernet/broadcom/bgmac.h +++ b/drivers/net/ethernet/broadcom/bgmac.h @@ -515,7 +515,8 @@ struct bgmac { u32 set); }; -int bgmac_enet_probe(struct bgmac *info); +struct bgmac *bgmac_alloc(struct device *dev); +int bgmac_enet_probe(struct bgmac *bgmac); void bgmac_enet_remove(struct bgmac *bgmac); struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr); From patchwork Wed Apr 5 10:32:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96819 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196084qgd; Wed, 5 Apr 2017 03:33:36 -0700 (PDT) X-Received: by 10.98.129.195 with SMTP id t186mr28673664pfd.130.1491388416094; Wed, 05 Apr 2017 03:33:36 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.35; Wed, 05 Apr 2017 03:33:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933487AbdDEKdf (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:35 -0400 Received: from mail-pg0-f42.google.com ([74.125.83.42]:36382 "EHLO mail-pg0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933476AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f42.google.com with SMTP id g2so5937790pge.3 for ; Wed, 05 Apr 2017 03:33:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Z7/8MGhk2+RLjIpN9lMQqhZhUFDWMmmEWxzA+0CbQ0k=; b=V0zVRh3fZGAvidQiKFVFfb5FXNAxWhxIvQ65oLftfp5NX5jBFl1H43CE4uYgjIG1Ps bi5lpZ20tp6k3iOzh0oAgJlYYAWNTHjd6jPxuQQ69DKrDO/tjzi1SasUaasSnglezPot LHvjFyBp18nvVi4Z9TIExD170kn/T8/YxoPpc= 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:mime-version:content-transfer-encoding; bh=Z7/8MGhk2+RLjIpN9lMQqhZhUFDWMmmEWxzA+0CbQ0k=; b=t09MRex8HnwXXdjOTpbQuiO4MsfrR1j5U7RaN+61uKAIgrP+ICwutgJhSY6CK8K0n5 TjfKYcyHm5WoLh6tfWEmSvRlVBae43nG2dluYcIHU0xEC63I8vFhxFjiOQHUDltTmhgP fTCh0poegxhdvJ4wjm8tG+n8k20WJM2Vl4oMPE3xHAbMkNi8Um+A0k+410Si4Lll9okE 8Ws2Gju9Y0TuZKxDYfE5Ub4P94cYfzCzE5ZfvFiWTSvcK2oAr/zj7xy4E29ilJsADSB4 U9L4LUMC1hUFsMjdCYnMeU+AjRh1Vh5U7AHRhYoiYt4RkLNAAXqaichTH2mO7++viTB2 mjYg== X-Gm-Message-State: AFeK/H0EDVeZkjdfKBEaWUzwTXhTU3nEjL4bFlM6AK2Wu1T+OjAzZw6OonunMPgdhGxXC4p6 X-Received: by 10.84.248.72 with SMTP id e8mr35019225pln.133.1491388390555; Wed, 05 Apr 2017 03:33:10 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:09 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , "David S . Miller" Subject: [PATCH v2 for-4.9 20/32] net: bgmac: drop struct bcma_mdio we don't need anymore Date: Wed, 5 Apr 2017 16:02:12 +0530 Message-Id: <1491388344-13521-21-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki Adding struct bcma_mdio was a workaround for bcma code not having access to the struct bgmac used in the core code. Now we don't duplicate this struct we can just use it internally in bcma code. This simplifies code & allows access to all bgmac driver details from all places in bcma code. Signed-off-by: Rafał Miłecki Reviewed-by: Florian Fainelli Signed-off-by: David S. Miller (cherry picked from commit aa8863e5d49417094b9457a0d53e8505e95a1863) Signed-off-by: Amit Pundir --- drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c | 98 ++++++++++--------------- drivers/net/ethernet/broadcom/bgmac-bcma.c | 2 +- drivers/net/ethernet/broadcom/bgmac.h | 2 +- 3 files changed, 42 insertions(+), 60 deletions(-) -- 2.7.4 diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c b/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c index 7c19c8e..9d99849 100644 --- a/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c +++ b/drivers/net/ethernet/broadcom/bgmac-bcma-mdio.c @@ -12,11 +12,6 @@ #include #include "bgmac.h" -struct bcma_mdio { - struct bcma_device *core; - u8 phyaddr; -}; - static bool bcma_mdio_wait_value(struct bcma_device *core, u16 reg, u32 mask, u32 value, int timeout) { @@ -37,7 +32,7 @@ static bool bcma_mdio_wait_value(struct bcma_device *core, u16 reg, u32 mask, * PHY ops **************************************************/ -static u16 bcma_mdio_phy_read(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg) +static u16 bcma_mdio_phy_read(struct bgmac *bgmac, u8 phyaddr, u8 reg) { struct bcma_device *core; u16 phy_access_addr; @@ -56,12 +51,12 @@ static u16 bcma_mdio_phy_read(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg) BUILD_BUG_ON(BGMAC_PC_MCT_SHIFT != BCMA_GMAC_CMN_PC_MCT_SHIFT); BUILD_BUG_ON(BGMAC_PC_MTE != BCMA_GMAC_CMN_PC_MTE); - if (bcma_mdio->core->id.id == BCMA_CORE_4706_MAC_GBIT) { - core = bcma_mdio->core->bus->drv_gmac_cmn.core; + if (bgmac->bcma.core->id.id == BCMA_CORE_4706_MAC_GBIT) { + core = bgmac->bcma.core->bus->drv_gmac_cmn.core; phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS; phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL; } else { - core = bcma_mdio->core; + core = bgmac->bcma.core; phy_access_addr = BGMAC_PHY_ACCESS; phy_ctl_addr = BGMAC_PHY_CNTL; } @@ -87,7 +82,7 @@ static u16 bcma_mdio_phy_read(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg) } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphywr */ -static int bcma_mdio_phy_write(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg, +static int bcma_mdio_phy_write(struct bgmac *bgmac, u8 phyaddr, u8 reg, u16 value) { struct bcma_device *core; @@ -95,12 +90,12 @@ static int bcma_mdio_phy_write(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg, u16 phy_ctl_addr; u32 tmp; - if (bcma_mdio->core->id.id == BCMA_CORE_4706_MAC_GBIT) { - core = bcma_mdio->core->bus->drv_gmac_cmn.core; + if (bgmac->bcma.core->id.id == BCMA_CORE_4706_MAC_GBIT) { + core = bgmac->bcma.core->bus->drv_gmac_cmn.core; phy_access_addr = BCMA_GMAC_CMN_PHY_ACCESS; phy_ctl_addr = BCMA_GMAC_CMN_PHY_CTL; } else { - core = bcma_mdio->core; + core = bgmac->bcma.core; phy_access_addr = BGMAC_PHY_ACCESS; phy_ctl_addr = BGMAC_PHY_CNTL; } @@ -110,8 +105,8 @@ static int bcma_mdio_phy_write(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg, tmp |= phyaddr; bcma_write32(core, phy_ctl_addr, tmp); - bcma_write32(bcma_mdio->core, BGMAC_INT_STATUS, BGMAC_IS_MDIO); - if (bcma_read32(bcma_mdio->core, BGMAC_INT_STATUS) & BGMAC_IS_MDIO) + bcma_write32(bgmac->bcma.core, BGMAC_INT_STATUS, BGMAC_IS_MDIO); + if (bcma_read32(bgmac->bcma.core, BGMAC_INT_STATUS) & BGMAC_IS_MDIO) dev_warn(&core->dev, "Error setting MDIO int\n"); tmp = BGMAC_PA_START; @@ -132,39 +127,39 @@ static int bcma_mdio_phy_write(struct bcma_mdio *bcma_mdio, u8 phyaddr, u8 reg, } /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyinit */ -static void bcma_mdio_phy_init(struct bcma_mdio *bcma_mdio) +static void bcma_mdio_phy_init(struct bgmac *bgmac) { - struct bcma_chipinfo *ci = &bcma_mdio->core->bus->chipinfo; + struct bcma_chipinfo *ci = &bgmac->bcma.core->bus->chipinfo; u8 i; if (ci->id == BCMA_CHIP_ID_BCM5356) { for (i = 0; i < 5; i++) { - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x008b); - bcma_mdio_phy_write(bcma_mdio, i, 0x15, 0x0100); - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f); - bcma_mdio_phy_write(bcma_mdio, i, 0x12, 0x2aaa); - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x008b); + bcma_mdio_phy_write(bgmac, i, 0x15, 0x0100); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000f); + bcma_mdio_phy_write(bgmac, i, 0x12, 0x2aaa); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000b); } } if ((ci->id == BCMA_CHIP_ID_BCM5357 && ci->pkg != 10) || (ci->id == BCMA_CHIP_ID_BCM4749 && ci->pkg != 10) || (ci->id == BCMA_CHIP_ID_BCM53572 && ci->pkg != 9)) { - struct bcma_drv_cc *cc = &bcma_mdio->core->bus->drv_cc; + struct bcma_drv_cc *cc = &bgmac->bcma.core->bus->drv_cc; bcma_chipco_chipctl_maskset(cc, 2, ~0xc0000000, 0); bcma_chipco_chipctl_maskset(cc, 4, ~0x80000000, 0); for (i = 0; i < 5; i++) { - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f); - bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x5284); - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b); - bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x0010); - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000f); - bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x5296); - bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x1073); - bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x9073); - bcma_mdio_phy_write(bcma_mdio, i, 0x16, 0x52b6); - bcma_mdio_phy_write(bcma_mdio, i, 0x17, 0x9273); - bcma_mdio_phy_write(bcma_mdio, i, 0x1f, 0x000b); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000f); + bcma_mdio_phy_write(bgmac, i, 0x16, 0x5284); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000b); + bcma_mdio_phy_write(bgmac, i, 0x17, 0x0010); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000f); + bcma_mdio_phy_write(bgmac, i, 0x16, 0x5296); + bcma_mdio_phy_write(bgmac, i, 0x17, 0x1073); + bcma_mdio_phy_write(bgmac, i, 0x17, 0x9073); + bcma_mdio_phy_write(bgmac, i, 0x16, 0x52b6); + bcma_mdio_phy_write(bgmac, i, 0x17, 0x9273); + bcma_mdio_phy_write(bgmac, i, 0x1f, 0x000b); } } } @@ -172,17 +167,17 @@ static void bcma_mdio_phy_init(struct bcma_mdio *bcma_mdio) /* http://bcm-v4.sipsolutions.net/mac-gbit/gmac/chipphyreset */ static int bcma_mdio_phy_reset(struct mii_bus *bus) { - struct bcma_mdio *bcma_mdio = bus->priv; - u8 phyaddr = bcma_mdio->phyaddr; + struct bgmac *bgmac = bus->priv; + u8 phyaddr = bgmac->phyaddr; - if (bcma_mdio->phyaddr == BGMAC_PHY_NOREGS) + if (phyaddr == BGMAC_PHY_NOREGS) return 0; - bcma_mdio_phy_write(bcma_mdio, phyaddr, MII_BMCR, BMCR_RESET); + bcma_mdio_phy_write(bgmac, phyaddr, MII_BMCR, BMCR_RESET); udelay(100); - if (bcma_mdio_phy_read(bcma_mdio, phyaddr, MII_BMCR) & BMCR_RESET) - dev_err(&bcma_mdio->core->dev, "PHY reset failed\n"); - bcma_mdio_phy_init(bcma_mdio); + if (bcma_mdio_phy_read(bgmac, phyaddr, MII_BMCR) & BMCR_RESET) + dev_err(bgmac->dev, "PHY reset failed\n"); + bcma_mdio_phy_init(bgmac); return 0; } @@ -202,16 +197,12 @@ static int bcma_mdio_mii_write(struct mii_bus *bus, int mii_id, int regnum, return bcma_mdio_phy_write(bus->priv, mii_id, regnum, value); } -struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr) +struct mii_bus *bcma_mdio_mii_register(struct bgmac *bgmac) { - struct bcma_mdio *bcma_mdio; + struct bcma_device *core = bgmac->bcma.core; struct mii_bus *mii_bus; int err; - bcma_mdio = kzalloc(sizeof(*bcma_mdio), GFP_KERNEL); - if (!bcma_mdio) - return ERR_PTR(-ENOMEM); - mii_bus = mdiobus_alloc(); if (!mii_bus) { err = -ENOMEM; @@ -221,15 +212,12 @@ struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr) mii_bus->name = "bcma_mdio mii bus"; sprintf(mii_bus->id, "%s-%d-%d", "bcma_mdio", core->bus->num, core->core_unit); - mii_bus->priv = bcma_mdio; + mii_bus->priv = bgmac; mii_bus->read = bcma_mdio_mii_read; mii_bus->write = bcma_mdio_mii_write; mii_bus->reset = bcma_mdio_phy_reset; mii_bus->parent = &core->dev; - mii_bus->phy_mask = ~(1 << phyaddr); - - bcma_mdio->core = core; - bcma_mdio->phyaddr = phyaddr; + mii_bus->phy_mask = ~(1 << bgmac->phyaddr); err = mdiobus_register(mii_bus); if (err) { @@ -242,23 +230,17 @@ struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr) err_free_bus: mdiobus_free(mii_bus); err: - kfree(bcma_mdio); return ERR_PTR(err); } EXPORT_SYMBOL_GPL(bcma_mdio_mii_register); void bcma_mdio_mii_unregister(struct mii_bus *mii_bus) { - struct bcma_mdio *bcma_mdio; - if (!mii_bus) return; - bcma_mdio = mii_bus->priv; - mdiobus_unregister(mii_bus); mdiobus_free(mii_bus); - kfree(bcma_mdio); } EXPORT_SYMBOL_GPL(bcma_mdio_mii_unregister); diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma.c b/drivers/net/ethernet/broadcom/bgmac-bcma.c index 5b0c7a7..e0e4509 100644 --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c @@ -159,7 +159,7 @@ static int bgmac_probe(struct bcma_device *core) if (!bgmac_is_bcm4707_family(core) && !(ci->id == BCMA_CHIP_ID_BCM53573 && core->core_unit == 1)) { - mii_bus = bcma_mdio_mii_register(core, bgmac->phyaddr); + mii_bus = bcma_mdio_mii_register(bgmac); if (IS_ERR(mii_bus)) { err = PTR_ERR(mii_bus); goto err; diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h index 69d478a..780cef2 100644 --- a/drivers/net/ethernet/broadcom/bgmac.h +++ b/drivers/net/ethernet/broadcom/bgmac.h @@ -519,7 +519,7 @@ struct bgmac *bgmac_alloc(struct device *dev); int bgmac_enet_probe(struct bgmac *bgmac); void bgmac_enet_remove(struct bgmac *bgmac); -struct mii_bus *bcma_mdio_mii_register(struct bcma_device *core, u8 phyaddr); +struct mii_bus *bcma_mdio_mii_register(struct bgmac *bgmac); void bcma_mdio_mii_unregister(struct mii_bus *mii_bus); static inline u32 bgmac_read(struct bgmac *bgmac, u16 offset) From patchwork Wed Apr 5 10:32:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96835 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196601qgd; Wed, 5 Apr 2017 03:35:06 -0700 (PDT) X-Received: by 10.99.65.1 with SMTP id o1mr29628909pga.93.1491388506326; Wed, 05 Apr 2017 03:35:06 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.35.06; Wed, 05 Apr 2017 03:35:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933473AbdDEKeb (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:31 -0400 Received: from mail-pf0-f169.google.com ([209.85.192.169]:35871 "EHLO mail-pf0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933479AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f169.google.com with SMTP id o126so5589121pfb.3 for ; Wed, 05 Apr 2017 03:33:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wPWiBRR2YfGVDa/mBMprL/d2J77eMvXTr5UMN/e2Iro=; b=TmmbxGzcrsJoYWmRPvJk6BSAqRlNMPllF3K3mwxtDK2HtRqw/VOmHqRHj7sIhu/QDU XqlDTYIbSj0D8AUtjX5GTLQak5aqcRndPGY7802KqSeRrMHdbGl/v0p4meR8MO489Pr6 a7aqx8O5CpTapoc+NPrFA67XgOUu9JHRLuiVw= 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=wPWiBRR2YfGVDa/mBMprL/d2J77eMvXTr5UMN/e2Iro=; b=IvV9jeV/r2IyoYadoG/u8/u2l9NF6fUEb/WFIVh/XfZL7RKnMtNph0q1CKo992Sr5K fCzRVcbt88B8FiJTjEZ6pJsyv6iv5/3NBFEFszDlFA9z33/x6ArUIBhehmdSEuVV+cAL WovVj4G3B4uvl+rFkVv1rMA2t0VG2Nz2mlcT2LdmbyUw/BGPfTzan7SeaEEATXWtZeos 6iaT/ROUuzdjm9anSIHz0y5YxpbrHU1nPWyCZx8IUL3GAbHJM1LCmiF+X2QKldJKDP6g SWLv3MbRZNWQJB316e5CKeyvwgq9dF9xFpBRzjWC7iAus09thY0XCNV40RzUKAfaKS8y DgQg== X-Gm-Message-State: AFeK/H3sXaL3NUfE9q5NujaHfUHn2a8/PtVfrz0KamIBuxv5CPg47Jb0+BKS+Z1yWm0XYCu8 X-Received: by 10.84.224.198 with SMTP id k6mr34713026pln.15.1491388393080; Wed, 05 Apr 2017 03:33:13 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:12 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Tobias Wolf , Sergei Shtylyov , linux-mips@linux-mips.org, Ralf Baechle Subject: [PATCH v2 for-4.9 21/32] of: Add check to of_scan_flat_dt() before accessing initial_boot_params Date: Wed, 5 Apr 2017 16:02:13 +0530 Message-Id: <1491388344-13521-22-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Tobias Wolf An empty __dtb_start to __dtb_end section might result in initial_boot_params being null for arch/mips/ralink. This showed that the boot process hangs indefinitely in of_scan_flat_dt(). Signed-off-by: Tobias Wolf Cc: Sergei Shtylyov Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/14605/ Signed-off-by: Ralf Baechle (cherry picked from commit 3ec754410cb3e931a6c4920b1a150f21a94a2bf4) Signed-off-by: Amit Pundir --- drivers/of/fdt.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) -- 2.7.4 diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index c89d5d2..6c07f2c 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -738,9 +738,12 @@ int __init of_scan_flat_dt(int (*it)(unsigned long node, const char *pathp; int offset, rc = 0, depth = -1; - for (offset = fdt_next_node(blob, -1, &depth); - offset >= 0 && depth >= 0 && !rc; - offset = fdt_next_node(blob, offset, &depth)) { + if (!blob) + return 0; + + for (offset = fdt_next_node(blob, -1, &depth); + offset >= 0 && depth >= 0 && !rc; + offset = fdt_next_node(blob, offset, &depth)) { pathp = fdt_get_name(blob, offset, NULL); if (*pathp == '/') From patchwork Wed Apr 5 10:32:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96832 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196380qgd; Wed, 5 Apr 2017 03:34:30 -0700 (PDT) X-Received: by 10.99.163.72 with SMTP id v8mr29742223pgn.115.1491388470166; Wed, 05 Apr 2017 03:34:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.29; Wed, 05 Apr 2017 03:34:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932692AbdDEKe2 (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:28 -0400 Received: from mail-pf0-f173.google.com ([209.85.192.173]:34770 "EHLO mail-pf0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933480AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f173.google.com with SMTP id 197so5599439pfv.1 for ; Wed, 05 Apr 2017 03:33:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gWWLtYgR+28iDYGboDx9FD+W2yEYNmZR099TamDo6KQ=; b=iYb7Hdb9Ww5P1Yj6Np3skhetYigPyamREZALdklWVU2dKJI99mg07mVcawe7CWbt7A /1wiJhAQQfWHzGiphuVzugAiE1s7sr1+yIQnZrizjt1oP5o3iTYMYJlvWVYmZplGO9Ks ++/lgF7cBe9SZddzumd1naehh+40o9km7v6Zo= 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=gWWLtYgR+28iDYGboDx9FD+W2yEYNmZR099TamDo6KQ=; b=n3jB99PmP5k3UXzGf7u6pNrTnup6i7u9xxIVcWQ+ofItZIgarrPKYfbVKmdkeYgc8Y 4eUT4Kt3Z4TjaSk3WUsWnXtX9Ahe5l/nLvc6rQM6UH56lw28R/Uncbvt0j02WSJVf2sJ a8rh/YysN7+6ShBm7XE32Rkgtc4UJeYMksEAIiwQbtN8d1GHYeW9Cxhr/pqVPPFwD9YQ JFN7qlrW93/5Aw7j3SuGMOlF3oHI2+N9N2QZ7rqizdyF+cd9pyPRFFCu7ee8xAVeOx4E 71svtUr9yvOxn7T5U1tPJkIugGJ6tcWYL2FGO0TW73xMLGBfdE8TVP78KWSYt3ZPAB3e 5L2w== X-Gm-Message-State: AFeK/H1yAlUawsGHa7ugxnqoaO4Bv4E8FHrnF6tztL/5hTT4Ncj7+JAtSbhTk7XBuBLiGSji X-Received: by 10.84.232.199 with SMTP id x7mr34505825plm.134.1491388395109; Wed, 05 Apr 2017 03:33:15 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:14 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Arnd Bergmann , Kalle Valo Subject: [PATCH v2 for-4.9 22/32] rt2500usb: don't mark register accesses as inline Date: Wed, 5 Apr 2017 16:02:14 +0530 Message-Id: <1491388344-13521-23-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Arnd Bergmann When CONFIG_KASAN is set, we get a rather large stack here: drivers/net/wireless/ralink/rt2x00/rt2500usb.c: In function 'rt2500usb_set_device_state': drivers/net/wireless/ralink/rt2x00/rt2500usb.c:1074:1: error: the frame size of 3032 bytes is larger than 100 bytes [-Werror=frame-larger-than=] If we don't force those functions to be inline, the compiler can figure this out better itself and not inline the functions when doing so would be harmful, reducing the stack size to a merge 256 bytes. Note that there is another problem that manifests in this driver, as a result of the typecheck() macro causing even larger stack frames. Signed-off-by: Arnd Bergmann Signed-off-by: Kalle Valo (cherry picked from commit 7272416609126e8910b7f0d0e3dba008aa87830c) Signed-off-by: Amit Pundir --- drivers/net/wireless/ralink/rt2x00/rt2500usb.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c index 2d64611..5b3aae3 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2500usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2500usb.c @@ -55,7 +55,7 @@ MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption."); * If the csr_mutex is already held then the _lock variants must * be used instead. */ -static inline void rt2500usb_register_read(struct rt2x00_dev *rt2x00dev, +static void rt2500usb_register_read(struct rt2x00_dev *rt2x00dev, const unsigned int offset, u16 *value) { @@ -66,7 +66,7 @@ static inline void rt2500usb_register_read(struct rt2x00_dev *rt2x00dev, *value = le16_to_cpu(reg); } -static inline void rt2500usb_register_read_lock(struct rt2x00_dev *rt2x00dev, +static void rt2500usb_register_read_lock(struct rt2x00_dev *rt2x00dev, const unsigned int offset, u16 *value) { @@ -77,16 +77,7 @@ static inline void rt2500usb_register_read_lock(struct rt2x00_dev *rt2x00dev, *value = le16_to_cpu(reg); } -static inline void rt2500usb_register_multiread(struct rt2x00_dev *rt2x00dev, - const unsigned int offset, - void *value, const u16 length) -{ - rt2x00usb_vendor_request_buff(rt2x00dev, USB_MULTI_READ, - USB_VENDOR_REQUEST_IN, offset, - value, length); -} - -static inline void rt2500usb_register_write(struct rt2x00_dev *rt2x00dev, +static void rt2500usb_register_write(struct rt2x00_dev *rt2x00dev, const unsigned int offset, u16 value) { @@ -96,7 +87,7 @@ static inline void rt2500usb_register_write(struct rt2x00_dev *rt2x00dev, ®, sizeof(reg)); } -static inline void rt2500usb_register_write_lock(struct rt2x00_dev *rt2x00dev, +static void rt2500usb_register_write_lock(struct rt2x00_dev *rt2x00dev, const unsigned int offset, u16 value) { @@ -106,7 +97,7 @@ static inline void rt2500usb_register_write_lock(struct rt2x00_dev *rt2x00dev, ®, sizeof(reg), REGISTER_TIMEOUT); } -static inline void rt2500usb_register_multiwrite(struct rt2x00_dev *rt2x00dev, +static void rt2500usb_register_multiwrite(struct rt2x00_dev *rt2x00dev, const unsigned int offset, void *value, const u16 length) { From patchwork Wed Apr 5 10:32:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96836 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196605qgd; Wed, 5 Apr 2017 03:35:06 -0700 (PDT) X-Received: by 10.84.229.13 with SMTP id b13mr35045422plk.72.1491388506762; Wed, 05 Apr 2017 03:35:06 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.35.06; Wed, 05 Apr 2017 03:35:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933462AbdDEKea (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:30 -0400 Received: from mail-pg0-f50.google.com ([74.125.83.50]:33937 "EHLO mail-pg0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933482AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f50.google.com with SMTP id 21so6033870pgg.1 for ; Wed, 05 Apr 2017 03:33:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=u90ti+p3dk2sh4ycOoEW1lyTgDHSsuGZudJ78Xag5TA=; b=hbO0DNym4+6LEZkZ3Bz/V6IeVo9mMQEMSwHZZbZhvq/AxzFJ0WRWTJahaKr0dbR2Pm HFc9udzLlHQPGLj2mZRzhw1ojHGPbDT+vCb2D3+f+iJd5iyvSliyaljjcRI4nL+XoxBx Ng3dNIYU9iW6qIdFHLhZ4PtdKZ3/DQUMz51r0= 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:mime-version:content-transfer-encoding; bh=u90ti+p3dk2sh4ycOoEW1lyTgDHSsuGZudJ78Xag5TA=; b=OBe7MZgUJDHlzji/28xX2OQHvfKOm86aEoxJ0aUA9z1BYpJxPiUXrFZVQHgiNU6r03 RJL++NwpYO7w45JoX7HVIbNvO1PClKtpmz8MP1F9kH4X1SOwD4Nnc8wFtMjLjjEllK0W 2inThjua4dS5z6ir25RAenUUN3exAznJXuR3PqkY0Ng+MYPSVQEvDv1GjCTV3ip7Rqe7 wxy7m9VN6xmUOnQLOJYrUnYZEM1bYL2SkdDrybCg1pPAFh5DxoXFj3CqOenq/pR5Pxqg viAxbbshoG5h9OPfa11wfYuPJrMTfdLYLIkO+t++SAyi0FcpBkFDg6M3Q/HhHS1PeKyF nkxw== X-Gm-Message-State: AFeK/H2RmHbahlUHP+jzbNryDBoE9rsUDwk/fO0jrtyYZ/sR+JeQ1+0xkwsGCx3cFL1SFeBo X-Received: by 10.84.248.9 with SMTP id p9mr35219133pll.185.1491388397152; Wed, 05 Apr 2017 03:33:17 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:16 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Kalle Valo Subject: [PATCH v2 for-4.9 23/32] brcmfmac: check brcmf_bus_get_memdump result for error Date: Wed, 5 Apr 2017 16:02:15 +0530 Message-Id: <1491388344-13521-24-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki This method may be unsupported (see: USB bus) or may just fail (see: SDIO bus). While at it rework logic in brcmf_sdio_bus_get_memdump function to avoid too many conditional code nesting levels. Signed-off-by: Rafał Miłecki Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit f4737a62033d7f3e0db740c449fc62119da7ab8a) Signed-off-by: Amit Pundir --- .../wireless/broadcom/brcm80211/brcmfmac/debug.c | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c index e64557c..6f8a4b0 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c @@ -32,16 +32,25 @@ static int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data, { void *dump; size_t ramsize; + int err; ramsize = brcmf_bus_get_ramsize(bus); - if (ramsize) { - dump = vzalloc(len + ramsize); - if (!dump) - return -ENOMEM; - memcpy(dump, data, len); - brcmf_bus_get_memdump(bus, dump + len, ramsize); - dev_coredumpv(bus->dev, dump, len + ramsize, GFP_KERNEL); + if (!ramsize) + return -ENOTSUPP; + + dump = vzalloc(len + ramsize); + if (!dump) + return -ENOMEM; + + memcpy(dump, data, len); + err = brcmf_bus_get_memdump(bus, dump + len, ramsize); + if (err) { + vfree(dump); + return err; } + + dev_coredumpv(bus->dev, dump, len + ramsize, GFP_KERNEL); + return 0; } From patchwork Wed Apr 5 10:32:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96820 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196087qgd; Wed, 5 Apr 2017 03:33:36 -0700 (PDT) X-Received: by 10.98.11.218 with SMTP id 87mr27480867pfl.214.1491388416811; Wed, 05 Apr 2017 03:33:36 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.36; Wed, 05 Apr 2017 03:33:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933484AbdDEKde (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:34 -0400 Received: from mail-pf0-f174.google.com ([209.85.192.174]:35893 "EHLO mail-pf0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933486AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f174.google.com with SMTP id o126so5590269pfb.3 for ; Wed, 05 Apr 2017 03:33:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aOn0rH8E18s2UPmSH3X5OOoIuN5ob2pcg0w+Uqx6pPw=; b=GLDL/UaHvSEFXMHnJg8hvOiyZYpInyDE3PZmQATNmBPCiYvMZ5NL7bisZkVRU/zoX0 5IZ5wJe2bifHyTtpY2NF1bSDSFiKyY/69cXwtVxkww+pdX6gHwQV2oNHubuHLjhpmu9/ RXwSvfFfeeRVWJ4TPP1qXFtButNv+xjcK7YyE= 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:mime-version:content-transfer-encoding; bh=aOn0rH8E18s2UPmSH3X5OOoIuN5ob2pcg0w+Uqx6pPw=; b=G/pPWcIOtUJewSgujsNv9WDzxbXwoneTbg/t4Mw4Buvtna4FoK1ZK1iLmjQsW9x8rp 8CeS1zvu/347UrtC5yQhp/GRbZr0JgUtWxA/xxyrH4Fe3ztc+/KiQiOlb/1wbDc1CkmE 8ay+SoyVDhfx7tL8uIQO8/0+46p5P6fLnBu0rJkbh/GasZNuFEDsB/JQImDF40OCmB6V mhtrvp3AE3EIClxoxek1tEse+jc7KH436SShNsDXvJSUShSfUQ7GkLySuFje2l7XL4Ks /D4emb5KaVQvldriOHZNowa54JUNjSyxFgm/Ex9TGES+viAB7lpPd9ZgQoos7n/VfUqE IUJg== X-Gm-Message-State: AFeK/H3JZaYJJwaT9hnblsZlO+6HEGc71u8+RL5fn0e4m/BNjoXHyDbswVevmlGOAK6/NYee X-Received: by 10.98.58.7 with SMTP id h7mr15287946pfa.27.1491388399152; Wed, 05 Apr 2017 03:33:19 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:18 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Kalle Valo Subject: [PATCH v2 for-4.9 24/32] brcmfmac: be more verbose when PSM's watchdog fires Date: Wed, 5 Apr 2017 16:02:16 +0530 Message-Id: <1491388344-13521-25-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki It's important to inform user so he knows things went wrong. He may also want to get memory dump for further debugging purposes. Signed-off-by: Rafał Miłecki Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit 36401cb7ffae731295a6dd1ce2b40d7ad74245f4) Signed-off-by: Amit Pundir --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c index 6f8a4b0..f4644cf 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c @@ -58,10 +58,18 @@ static int brcmf_debug_psm_watchdog_notify(struct brcmf_if *ifp, const struct brcmf_event_msg *evtmsg, void *data) { + int err; + brcmf_dbg(TRACE, "enter: bsscfgidx=%d\n", ifp->bsscfgidx); - return brcmf_debug_create_memdump(ifp->drvr->bus_if, data, - evtmsg->datalen); + brcmf_err("PSM's watchdog has fired!\n"); + + err = brcmf_debug_create_memdump(ifp->drvr->bus_if, data, + evtmsg->datalen); + if (err) + brcmf_err("Failed to get memory dump, %d\n", err); + + return err; } void brcmf_debugfs_init(void) From patchwork Wed Apr 5 10:32:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96818 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196081qgd; Wed, 5 Apr 2017 03:33:35 -0700 (PDT) X-Received: by 10.98.80.209 with SMTP id g78mr28037618pfj.163.1491388415504; Wed, 05 Apr 2017 03:33:35 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.35; Wed, 05 Apr 2017 03:33:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933485AbdDEKdd (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:33 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:35464 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933484AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pf0-f176.google.com with SMTP id i5so5591945pfc.2 for ; Wed, 05 Apr 2017 03:33:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DD6O32VKunMiV1g5HyDlQRPVVld62FXY6h9wIHMkfRQ=; b=ioWKcTkgd/iwgICUp8pCoN/wM1nsRmu/2pOCnUR3mqWpboTaAKnMtTMm0n6hqISkfS IPhrxlPpmw/9xO5m6lm0hZ3J0WsW3Il/IQOGvM3A6zuUwwgA4Lnxm4tjehm+nnhClmAa kTc4hkYzsGaJncgePTx3Q1jnFMEirOr8C7eGA= 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:mime-version:content-transfer-encoding; bh=DD6O32VKunMiV1g5HyDlQRPVVld62FXY6h9wIHMkfRQ=; b=eivBxfT7CFnfX3q4znRtMIyRQ6eLokLFj8wRGKzBYZkf98bDH89bUBU3HCTHtlpfIv 26BDbvieNn5QirbKlWkOqp2ssGhLVasSWeFrTkMBSlcdmQ2T51T+id8LZo09hNCn7JZ9 IJRttJZuoP77E/mL4CWLCODVNglRG9haelybB6d8AkT2iEW5DPMFDDOx3p4i2Gh6W4ez LiPbyE0wqTfOs4MsakR1/jJnT8B05UI2+YLlvOhX8bW3gCGaqwTPxWArZ5vpHfP+HMB7 QzdVdKaAJty5+VYHoybh5Qrv884lGm6X28v4vxwCLqw+YA3m3R7tbfpaW81j7RPaULMB qDcQ== X-Gm-Message-State: AFeK/H1lUAxoy6SRooho13mMhMa/OJtSapUYcfH3QXYQqfJpJ2lBVunRED+2ShBHxLnPflNp X-Received: by 10.98.86.152 with SMTP id h24mr29142038pfj.184.1491388401273; Wed, 05 Apr 2017 03:33:21 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:20 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Kalle Valo Subject: [PATCH v2 for-4.9 25/32] brcmfmac: merge two brcmf_err macros into one Date: Wed, 5 Apr 2017 16:02:17 +0530 Message-Id: <1491388344-13521-26-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki This allows simplifying the code by adding a simple IS_ENABLED check for CONFIG_BRCMDB symbol. Signed-off-by: Rafał Miłecki Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit 9587a01a7ead9efc5032c16e0d9668de58be1186) Signed-off-by: Amit Pundir --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h index 6687812..1fe4aa9 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h @@ -45,20 +45,16 @@ #undef pr_fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +#ifndef CONFIG_BRCM_TRACING /* Macro for error messages. net_ratelimit() is used when driver * debugging is not selected. When debugging the driver error * messages are as important as other tracing or even more so. */ -#ifndef CONFIG_BRCM_TRACING -#ifdef CONFIG_BRCMDBG -#define brcmf_err(fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__) -#else #define brcmf_err(fmt, ...) \ do { \ - if (net_ratelimit()) \ + if (IS_ENABLED(CONFIG_BRCMDBG) || net_ratelimit()) \ pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ } while (0) -#endif #else __printf(2, 3) void __brcmf_err(const char *func, const char *fmt, ...); From patchwork Wed Apr 5 10:32:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96817 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196072qgd; Wed, 5 Apr 2017 03:33:34 -0700 (PDT) X-Received: by 10.84.164.106 with SMTP id m39mr35885881plg.9.1491388414653; Wed, 05 Apr 2017 03:33:34 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.34; Wed, 05 Apr 2017 03:33:34 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933477AbdDEKdd (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:33 -0400 Received: from mail-pg0-f43.google.com ([74.125.83.43]:35234 "EHLO mail-pg0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933485AbdDEKdZ (ORCPT ); Wed, 5 Apr 2017 06:33:25 -0400 Received: by mail-pg0-f43.google.com with SMTP id 81so6031351pgh.2 for ; Wed, 05 Apr 2017 03:33:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fokY1GsduFBds/k77siHsDGemCGdOJb8EJ0OnKUTxh8=; b=X+fWHBMMrk3UBlgI5Y+UYyGvSi+yZSJZ6QOr8avcHywVAZXN8/8rfIi+RrFVTDXpPB muybOYIQMCioHtIzDRNg6foKTuHyb0VR28pAW18lnoRm4d+gI7RpokiGbnlhFId9nCcC ndhhYKkzvF7Zj9ryaaI60muWh89T4FhaV4n0c= 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:mime-version:content-transfer-encoding; bh=fokY1GsduFBds/k77siHsDGemCGdOJb8EJ0OnKUTxh8=; b=Jy74S6x3A1IeZ99z2yXZEKs6yCuUa/DrSDA82rgymEGbfRe5tAnlzoSJhcVisDx22s 437f7RQQPZi9bZMklvI0hiJDHBFvkIfgEjkcFD48jvWz3CkemxAZggEed7pwWfyky3PY WtyEku3OQL0ubVlbYtJNGSQMIKe4LTEVCOIfcIFgb7VHcJJVmOF3ToLAiWL5EcOowMC4 6LTYtTj6rKSdQ9VDtUVLZtRrOv5kq/iTeAzkm2p3PqP31d0fAUXovXqIvvrnv+nynNpx URH+EjNisBcfH4J/07bjwvGSse9aT8kmPSUrm3Dz9Saccpdh5TX7ckz97kiN3P7w9HXw +YSg== X-Gm-Message-State: AFeK/H37fs0iXvC44H+HhIpiryjlkOIe/LIBkGtAgq9votg/KhRtfjiBuFIWA0TcjH9/CZN1 X-Received: by 10.84.212.130 with SMTP id e2mr35818103pli.140.1491388403348; Wed, 05 Apr 2017 03:33:23 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:22 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Kalle Valo Subject: [PATCH v2 for-4.9 26/32] brcmfmac: switch to C function (__brcmf_err) for printing errors Date: Wed, 5 Apr 2017 16:02:18 +0530 Message-Id: <1491388344-13521-27-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki This will allow extending code and using more detailed messages e.g. with the help of dev_err. Signed-off-by: Rafał Miłecki Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit 087fa712a00685dac4bcc64b7c3dc8ae6bee8026) Signed-off-by: Amit Pundir --- .../net/wireless/broadcom/brcm80211/brcmfmac/common.c | 16 ++++++++++++++++ drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 6 +++--- 2 files changed, 19 insertions(+), 3 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c index 3e15d64..2dcca71 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c @@ -218,6 +218,22 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp) return err; } +#ifndef CONFIG_BRCM_TRACING +void __brcmf_err(const char *func, const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + pr_err("%s: %pV", func, &vaf); + + va_end(args); +} +#endif + #if defined(CONFIG_BRCM_TRACING) || defined(CONFIG_BRCMDBG) void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...) { diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h index 1fe4aa9..441a666 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h @@ -45,6 +45,8 @@ #undef pr_fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +__printf(2, 3) +void __brcmf_err(const char *func, const char *fmt, ...); #ifndef CONFIG_BRCM_TRACING /* Macro for error messages. net_ratelimit() is used when driver * debugging is not selected. When debugging the driver error @@ -53,11 +55,9 @@ #define brcmf_err(fmt, ...) \ do { \ if (IS_ENABLED(CONFIG_BRCMDBG) || net_ratelimit()) \ - pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ + __brcmf_err(__func__, fmt, ##__VA_ARGS__); \ } while (0) #else -__printf(2, 3) -void __brcmf_err(const char *func, const char *fmt, ...); #define brcmf_err(fmt, ...) \ __brcmf_err(__func__, fmt, ##__VA_ARGS__) #endif From patchwork Wed Apr 5 10:32:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96825 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196310qgd; Wed, 5 Apr 2017 03:34:17 -0700 (PDT) X-Received: by 10.98.215.23 with SMTP id b23mr28455398pfh.87.1491388457855; Wed, 05 Apr 2017 03:34:17 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.17; Wed, 05 Apr 2017 03:34:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933523AbdDEKeH (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:07 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:35484 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933465AbdDEKd0 (ORCPT ); Wed, 5 Apr 2017 06:33:26 -0400 Received: by mail-pf0-f170.google.com with SMTP id i5so5592852pfc.2 for ; Wed, 05 Apr 2017 03:33:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SNCIiq1yLeT7V6fpfpRTFk3xHM5FIQKHIUTT63v0N58=; b=evsOXqQDYMs44cZveuGWd3Uz4Cw3C0wKh0pMs561CIelg+9520grwITF+KaFaLbAqD 75VU5pwbaR12R4ls+6PhgW6BgDSaR8B/loD1YX2FZIH/S5CIAS7jpFEqB1Uo8qm3VYhX CbrB36npRyCBIJEJOqVMAjYK3yr8QepvrLpD0= 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:mime-version:content-transfer-encoding; bh=SNCIiq1yLeT7V6fpfpRTFk3xHM5FIQKHIUTT63v0N58=; b=a6CoMsvZ+NZ+iz4fHnL1lrzu+N2BAv4M1IaOoX46jdDpU05EFSZNHLDf2HTlqRhXRn BI5pgDnPt6JLCmE9ExZXhon+fkiUfwTXFtd/tVFOCojJb7Jjr5YHKNhWo97rSZn/CVXl LVoLPAVHKUDVbOaRNDHBryScpK+nqZOAEN0QATQclvM8pkboWzIm5mUhco1I+OOdlE2h +7+Iccs2EneUCCu4CJ0iiV7hdmWCyzsusV/+1zrQb2ZF+cMCLBlHlkndKoR5k6mp72FP pHDY2QX8KEoxzC/RxzYn9kH6s+YiPqfeeuath0aoQDB7YYUehXhJZKydhwtUm1sJ7aRS p3Sg== X-Gm-Message-State: AFeK/H2OsggWzeuqQGnRAfaWjgKXMwA9EwtjdYdtuo+TY7+pB8Jo3SqfVBzbq1uBO05zb1nE X-Received: by 10.84.196.164 with SMTP id l33mr35376684pld.0.1491388405431; Wed, 05 Apr 2017 03:33:25 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:24 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= , Kalle Valo Subject: [PATCH v2 for-4.9 27/32] brcmfmac: merge two remaining brcmf_err macros Date: Wed, 5 Apr 2017 16:02:19 +0530 Message-Id: <1491388344-13521-28-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Rafał Miłecki Now we always have __brcmf_err function we can do perfectly fine with just one macro. Signed-off-by: Rafał Miłecki Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit d0630555650a394cf5743268820511f527a561a5) Signed-off-by: Amit Pundir --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h index 441a666..0661261 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h @@ -47,20 +47,16 @@ __printf(2, 3) void __brcmf_err(const char *func, const char *fmt, ...); -#ifndef CONFIG_BRCM_TRACING -/* Macro for error messages. net_ratelimit() is used when driver - * debugging is not selected. When debugging the driver error - * messages are as important as other tracing or even more so. +/* Macro for error messages. When debugging / tracing the driver all error + * messages are important to us. */ #define brcmf_err(fmt, ...) \ do { \ - if (IS_ENABLED(CONFIG_BRCMDBG) || net_ratelimit()) \ + if (IS_ENABLED(CONFIG_BRCMDBG) || \ + IS_ENABLED(CONFIG_BRCM_TRACING) || \ + net_ratelimit()) \ __brcmf_err(__func__, fmt, ##__VA_ARGS__); \ } while (0) -#else -#define brcmf_err(fmt, ...) \ - __brcmf_err(__func__, fmt, ##__VA_ARGS__) -#endif #if defined(DEBUG) || defined(CONFIG_BRCM_TRACING) __printf(3, 4) From patchwork Wed Apr 5 10:32:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96823 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196225qgd; Wed, 5 Apr 2017 03:34:02 -0700 (PDT) X-Received: by 10.98.79.65 with SMTP id d62mr27514722pfb.64.1491388442549; Wed, 05 Apr 2017 03:34:02 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f19si16121799pgk.27.2017.04.05.03.34.02; Wed, 05 Apr 2017 03:34:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933492AbdDEKdj (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:39 -0400 Received: from mail-pg0-f49.google.com ([74.125.83.49]:36446 "EHLO mail-pg0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933469AbdDEKd2 (ORCPT ); Wed, 5 Apr 2017 06:33:28 -0400 Received: by mail-pg0-f49.google.com with SMTP id g2so5940830pge.3 for ; Wed, 05 Apr 2017 03:33:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=PCYY+IhJASKbsIhTOvS70uMqhXXK8MAsIpBq+FYE6VI=; b=i/e6B/nH+DcILdls1+8TkwEjbKDVxTw68cUCCRtiRV24ea3l7ObUkiOb1d5zJ0tFNG deDkL6e9NgqFGVvieNLigEH1QwkyqT3ALJ/KU11P4bA0K+Z8C5Mxoc5OF4rLtw9b3f/e LCmI3CpcqnsJMbGypTLVwhKOJEZ0wRhp/V2Dg= 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=PCYY+IhJASKbsIhTOvS70uMqhXXK8MAsIpBq+FYE6VI=; b=YMZofnNpk90JNzWD16ke9LeXtPUBFdg2McpZfoNeydpnOjaxxR7J96UfHUm07+46zx Lo5TySOO80KI6Hf8HVzAW8zCRU932f4l/pnFJ8qqa4RQuQHMQD/lTMDWyYSSKVOsyLn5 HfjOIT7NBV1u6VviCmcTLNpOpsbxQSzqjQ41d+SKpeFHntE5ws26IjT2UEPIseuZ9vsf oWGC+2YlWmc1nWgG6YPOTuBJFQGK1k6wAl79GoBtanVc9uSOfJkjiF+3OHV8eSEhoU32 HuDj15n4x8vg2YbNOH9qBW5n9CO5nW8Lx6o8BZz303OC/BCMRcf2Wjbr2M+o3PXi12OA ndXw== X-Gm-Message-State: AFeK/H3PmlPvv2X6lhQ5CGhfmvf8GsUQjOmVdHapH9wpdUU3nErYuEe9AkmrTuiq9A4hz+EV X-Received: by 10.98.129.195 with SMTP id t186mr28672961pfd.130.1491388407745; Wed, 05 Apr 2017 03:33:27 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:27 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Stanislaw Gruszka , Vishal Thanki , Kalle Valo Subject: [PATCH v2 for-4.9 28/32] rt2x00usb: do not anchor rx and tx urb's Date: Wed, 5 Apr 2017 16:02:20 +0530 Message-Id: <1491388344-13521-29-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Stanislaw Gruszka We might kill TX or RX urb during rt2x00usb_flush_entry(), what can cause anchor list corruption like shown below: [ 2074.035633] WARNING: CPU: 2 PID: 14480 at lib/list_debug.c:33 __list_add+0xac/0xc0 [ 2074.035634] list_add corruption. prev->next should be next (ffff88020f362c28), but was dead000000000100. (prev=ffff8801d161bb70). [ 2074.035670] Call Trace: [ 2074.035672] [] dump_stack+0x63/0x8c [ 2074.035674] [] __warn+0xd1/0xf0 [ 2074.035676] [] warn_slowpath_fmt+0x5f/0x80 [ 2074.035678] [] ? rt2x00usb_register_write_lock+0x3d/0x60 [rt2800usb] [ 2074.035679] [] __list_add+0xac/0xc0 [ 2074.035681] [] usb_anchor_urb+0x4c/0xa0 [ 2074.035683] [] rt2x00usb_kick_rx_entry+0xaf/0x100 [rt2x00usb] [ 2074.035684] [] rt2x00usb_clear_entry+0x22/0x30 [rt2x00usb] To fix do not anchor TX and RX urb's, it is not needed as during shutdown we kill those urbs in rt2x00usb_free_entries(). Cc: Vishal Thanki Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB") Signed-off-by: Stanislaw Gruszka Signed-off-by: Kalle Valo (cherry picked from commit 93c7018ec16bb83399dd4db61c361a6d6aba0d5a) Signed-off-by: Amit Pundir --- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 4 ---- 1 file changed, 4 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c index 6005e14..efe2501 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c @@ -319,10 +319,8 @@ static bool rt2x00usb_kick_tx_entry(struct queue_entry *entry, void *data) entry->skb->data, length, rt2x00usb_interrupt_txdone, entry); - usb_anchor_urb(entry_priv->urb, rt2x00dev->anchor); status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC); if (status) { - usb_unanchor_urb(entry_priv->urb); if (status == -ENODEV) clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); @@ -410,10 +408,8 @@ static bool rt2x00usb_kick_rx_entry(struct queue_entry *entry, void *data) entry->skb->data, entry->skb->len, rt2x00usb_interrupt_rxdone, entry); - usb_anchor_urb(entry_priv->urb, rt2x00dev->anchor); status = usb_submit_urb(entry_priv->urb, GFP_ATOMIC); if (status) { - usb_unanchor_urb(entry_priv->urb); if (status == -ENODEV) clear_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags); set_bit(ENTRY_DATA_IO_FAILED, &entry->flags); From patchwork Wed Apr 5 10:32:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96821 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196106qgd; Wed, 5 Apr 2017 03:33:40 -0700 (PDT) X-Received: by 10.84.197.3 with SMTP id m3mr35215754pld.89.1491388420245; Wed, 05 Apr 2017 03:33:40 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f16si20271056pli.143.2017.04.05.03.33.40; Wed, 05 Apr 2017 03:33:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933488AbdDEKdh (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:37 -0400 Received: from mail-pf0-f180.google.com ([209.85.192.180]:35502 "EHLO mail-pf0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933059AbdDEKda (ORCPT ); Wed, 5 Apr 2017 06:33:30 -0400 Received: by mail-pf0-f180.google.com with SMTP id i5so5593763pfc.2 for ; Wed, 05 Apr 2017 03:33:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ywNRqkJhRIcGlFeuSPdwGRnCGuD6T4EbwBekAg8Sfrs=; b=XBpUOQA5ENLfp5Iv1R4K4rGrc746klITtsMDJ5T006aYHHME52k4rtPThypPQHlKbt iG/CkYFERJcfcLXoEWOWx6G1zZqtTSeb2dmF+V+Qka2dwaoMULzkR2c637xCqc6mkGBl nAWFeZ4XCnnZY66Q01TX+/Qf8QhUITrzNuHeM= 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=ywNRqkJhRIcGlFeuSPdwGRnCGuD6T4EbwBekAg8Sfrs=; b=iBaU1U0oc5jho3pkmbR4TivDHYCyqnYoXZ3tv7AVmyU2+uX5TfPdPtrtHFjLR4weIy aM3CxPtwUSv1KhzNO1M2gslRLQ33oZlJ5B7HbOq+Hx6v6ouYQS1RItGIyMX4ETkPzlak IwTuIBB19DATajM1FmwJ0Q9kUOJ2Y916jo46P3kXJpW0O9eA2zVWejRGGnIuJWIivasn nmoA+d9hJlkDZWZrbeITt9J1UcTpT3rKQQZrA58CYhNrxn0vgo9L25sXTPfbi+hDfZOp ERkwGt7Ems2theeH0ichq/hvGJQPqt7y6K5p2PpK8E1iKE5wutKpEZ48Dc1r/Bqe1Juz /vhg== X-Gm-Message-State: AFeK/H1ibgSCy0Lr+GLvwvhJVZ5VJ80jsiGE/R9xm9bIbhHK2DU1nwc0KhJ6O84b5rV6Oht/ X-Received: by 10.98.102.88 with SMTP id a85mr29367488pfc.33.1491388409988; Wed, 05 Apr 2017 03:33:29 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:29 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Stanislaw Gruszka , Vishal Thanki , Kalle Valo Subject: [PATCH v2 for-4.9 29/32] rt2x00usb: fix anchor initialization Date: Wed, 5 Apr 2017 16:02:21 +0530 Message-Id: <1491388344-13521-30-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Stanislaw Gruszka If device fail to initialize we can OOPS in rt2x00lib_remove_dev(), due to using uninitialized usb_anchor structure: [ 855.435820] ieee80211 phy3: rt2x00usb_vendor_request: Error - Vendor Request 0x07 failed for offset 0x1000 with error -19 [ 855.435826] ieee80211 phy3: rt2800_probe_rt: Error - Invalid RT chipset 0x0000, rev 0000 detected [ 855.435829] ieee80211 phy3: rt2x00lib_probe_dev: Error - Failed to allocate device [ 855.435845] BUG: unable to handle kernel NULL pointer dereference at 0000000000000028 [ 855.435900] IP: _raw_spin_lock_irq+0xd/0x30 [ 855.435926] PGD 0 [ 855.435953] Oops: 0002 [#1] SMP [ 855.437011] Call Trace: [ 855.437029] ? usb_kill_anchored_urbs+0x27/0xc0 [ 855.437061] rt2x00lib_remove_dev+0x190/0x1c0 [rt2x00lib] [ 855.437097] rt2x00lib_probe_dev+0x246/0x7a0 [rt2x00lib] [ 855.437149] ? ieee80211_roc_setup+0x9e/0xd0 [mac80211] [ 855.437183] ? __kmalloc+0x1af/0x1f0 [ 855.437207] ? rt2x00usb_probe+0x13d/0xc50 [rt2x00usb] [ 855.437240] rt2x00usb_probe+0x155/0xc50 [rt2x00usb] [ 855.437273] rt2800usb_probe+0x15/0x20 [rt2800usb] [ 855.437304] usb_probe_interface+0x159/0x2d0 [ 855.437333] driver_probe_device+0x2bb/0x460 Patch changes initialization sequence to fix the problem. Cc: Vishal Thanki Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB") Signed-off-by: Stanislaw Gruszka Signed-off-by: Kalle Valo (cherry picked from commit 0488a6121dfe6cbd44de15ea3627913b7549a1e9) Signed-off-by: Amit Pundir --- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c index efe2501..662705e 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c @@ -820,10 +820,6 @@ int rt2x00usb_probe(struct usb_interface *usb_intf, if (retval) goto exit_free_device; - retval = rt2x00lib_probe_dev(rt2x00dev); - if (retval) - goto exit_free_reg; - rt2x00dev->anchor = devm_kmalloc(&usb_dev->dev, sizeof(struct usb_anchor), GFP_KERNEL); @@ -831,10 +827,17 @@ int rt2x00usb_probe(struct usb_interface *usb_intf, retval = -ENOMEM; goto exit_free_reg; } - init_usb_anchor(rt2x00dev->anchor); + + retval = rt2x00lib_probe_dev(rt2x00dev); + if (retval) + goto exit_free_anchor; + return 0; +exit_free_anchor: + usb_kill_anchored_urbs(rt2x00dev->anchor); + exit_free_reg: rt2x00usb_free_reg(rt2x00dev); From patchwork Wed Apr 5 10:32:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96826 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196348qgd; Wed, 5 Apr 2017 03:34:25 -0700 (PDT) X-Received: by 10.98.217.140 with SMTP id b12mr28206499pfl.136.1491388465114; Wed, 05 Apr 2017 03:34:25 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si20203815pfi.300.2017.04.05.03.34.24; Wed, 05 Apr 2017 03:34:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933011AbdDEKeH (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:07 -0400 Received: from mail-pg0-f47.google.com ([74.125.83.47]:35265 "EHLO mail-pg0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933163AbdDEKdc (ORCPT ); Wed, 5 Apr 2017 06:33:32 -0400 Received: by mail-pg0-f47.google.com with SMTP id 81so6032925pgh.2 for ; Wed, 05 Apr 2017 03:33:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Wx1vHvIgNYKWT5D1ylzbYtfsrrBH7Yk1egsYxj7/3bw=; b=L/q9prcG816RqPSQ67iWB6SgaBIckpMygaaCQgmc84nLusE0FA1Lcpt4kj6lTOSiPA lVsig4TfSti2U4h044FK8QV3YkwGDIgB9R9dPNuD8n/sNQ0HICx2/c6PkHaTjCXvumf+ B0FdyxpfSFWYDQUI6J9hMto332+9t/oxJqUaI= 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=Wx1vHvIgNYKWT5D1ylzbYtfsrrBH7Yk1egsYxj7/3bw=; b=fkitKmSpLZ6MRCjf4vky9Q/WIHmQVSt98pHjDVv07s5Gtt+wrWqWltnP71b5VggTMB NXUwA+XvGs0jkgWclNSufAcwtDwuLteOKmZrGvwS6Y4jo/UR/Lf3IYsa+CtJhxp45MCg CsUfIItcyXe2ewkC1F9+Eqp2Q9XjD/S+9bstdPZ8MZFcJdQn1j3EBr8Tq4M3v76GRG7o ZlRgR1BsF4bqa01f3UDuVs1egBRmq24zdmw6C7QIbXeMU1AHKO03nAU9LSJkYBiJCYik akI/qNCzLoqtkuHFskoB+P0ORD98GLa9TDF6t1c+NKZz0WTjtGHIlEb6uuiRd8VaasxI sUmw== X-Gm-Message-State: AFeK/H2VKGA5Psl08JaZfK8UUPuMz8CCWID7gAFYzz9LHPT4hX7yF1Gyjma9LfcU+H7M1AFT X-Received: by 10.99.103.5 with SMTP id b5mr29816700pgc.100.1491388412158; Wed, 05 Apr 2017 03:33:32 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:31 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Tobias Klauser , Kalle Valo Subject: [PATCH v2 for-4.9 30/32] brcmfmac: Use net_device_stats from struct net_device Date: Wed, 5 Apr 2017 16:02:22 +0530 Message-Id: <1491388344-13521-31-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Tobias Klauser Instead of using a private copy of struct net_device_stats in struct brcm_if, use stats from struct net_device. Also remove the now unnecessary .ndo_get_stats function. Signed-off-by: Tobias Klauser Acked-by: Arend van Spriel Signed-off-by: Kalle Valo (cherry picked from commit 91b632803ee4e47c5a5c4dc3d8bf5abf9c16107a) Signed-off-by: Amit Pundir --- .../wireless/broadcom/brcm80211/brcmfmac/core.c | 26 +++++++--------------- .../wireless/broadcom/brcm80211/brcmfmac/core.h | 2 -- 2 files changed, 8 insertions(+), 20 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c index 5eaac13..cf1ae5a 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c @@ -243,10 +243,10 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb, done: if (ret) { - ifp->stats.tx_dropped++; + ndev->stats.tx_dropped++; } else { - ifp->stats.tx_packets++; - ifp->stats.tx_bytes += skb->len; + ndev->stats.tx_packets++; + ndev->stats.tx_bytes += skb->len; } /* Return ok: we always eat the packet */ @@ -290,15 +290,15 @@ void brcmf_txflowblock(struct device *dev, bool state) void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb) { if (skb->pkt_type == PACKET_MULTICAST) - ifp->stats.multicast++; + ifp->ndev->stats.multicast++; if (!(ifp->ndev->flags & IFF_UP)) { brcmu_pkt_buf_free_skb(skb); return; } - ifp->stats.rx_bytes += skb->len; - ifp->stats.rx_packets++; + ifp->ndev->stats.rx_bytes += skb->len; + ifp->ndev->stats.rx_packets++; brcmf_dbg(DATA, "rx proto=0x%X\n", ntohs(skb->protocol)); if (in_interrupt()) @@ -321,7 +321,7 @@ static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb, if (ret || !(*ifp) || !(*ifp)->ndev) { if (ret != -ENODATA && *ifp) - (*ifp)->stats.rx_errors++; + (*ifp)->ndev->stats.rx_errors++; brcmu_pkt_buf_free_skb(skb); return -ENODATA; } @@ -382,7 +382,7 @@ void brcmf_txfinalize(struct brcmf_if *ifp, struct sk_buff *txp, bool success) } if (!success) - ifp->stats.tx_errors++; + ifp->ndev->stats.tx_errors++; brcmu_pkt_buf_free_skb(txp); } @@ -405,15 +405,6 @@ void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success) } } -static struct net_device_stats *brcmf_netdev_get_stats(struct net_device *ndev) -{ - struct brcmf_if *ifp = netdev_priv(ndev); - - brcmf_dbg(TRACE, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx); - - return &ifp->stats; -} - static void brcmf_ethtool_get_drvinfo(struct net_device *ndev, struct ethtool_drvinfo *info) { @@ -486,7 +477,6 @@ static int brcmf_netdev_open(struct net_device *ndev) static const struct net_device_ops brcmf_netdev_ops_pri = { .ndo_open = brcmf_netdev_open, .ndo_stop = brcmf_netdev_stop, - .ndo_get_stats = brcmf_netdev_get_stats, .ndo_start_xmit = brcmf_netdev_start_xmit, .ndo_set_mac_address = brcmf_netdev_set_mac_address, .ndo_set_rx_mode = brcmf_netdev_set_multicast_list diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h index c94dcab..397c912 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h @@ -171,7 +171,6 @@ enum brcmf_netif_stop_reason { * @drvr: points to device related information. * @vif: points to cfg80211 specific interface information. * @ndev: associated network device. - * @stats: interface specific network statistics. * @multicast_work: worker object for multicast provisioning. * @ndoffload_work: worker object for neighbor discovery offload configuration. * @fws_desc: interface specific firmware-signalling descriptor. @@ -187,7 +186,6 @@ struct brcmf_if { struct brcmf_pub *drvr; struct brcmf_cfg80211_vif *vif; struct net_device *ndev; - struct net_device_stats stats; struct work_struct multicast_work; struct work_struct ndoffload_work; struct brcmf_fws_mac_descriptor *fws_desc; From patchwork Wed Apr 5 10:32:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96824 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196264qgd; Wed, 5 Apr 2017 03:34:08 -0700 (PDT) X-Received: by 10.84.232.79 with SMTP id f15mr34818717pln.90.1491388448232; Wed, 05 Apr 2017 03:34:08 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j29si20238630pgn.377.2017.04.05.03.34.08; Wed, 05 Apr 2017 03:34:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933498AbdDEKeG (ORCPT + 6 others); Wed, 5 Apr 2017 06:34:06 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:33824 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933486AbdDEKde (ORCPT ); Wed, 5 Apr 2017 06:33:34 -0400 Received: by mail-pf0-f170.google.com with SMTP id 197so5603083pfv.1 for ; Wed, 05 Apr 2017 03:33:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pL8UdHid6fe21wcMh+Y6hAW8vWBXpxHPy2fOfxMRqwQ=; b=V/puuvOAe+HdjIWO2I+hWXGfG8NBPURaIfdgNUSK7K7XWuHCyhZaHQBFbDdcA22Awi yObRTEYwTXfzM/06cQKtJQl0jKdAVWGoI3EqwgmQPS5UJY1gfhhZ8HCUSDuer0VqS30A ghyNcqxN1IEYbrulf8VsJcXVl4QoVASvOPyPk= 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=pL8UdHid6fe21wcMh+Y6hAW8vWBXpxHPy2fOfxMRqwQ=; b=Q014qTIKMKr4qUwUrmorTwte/7lh1sG1pxnY+88ey94HVR8wkMyvT/yQLzfnsxacmN 0uqHgXaw6Fv9SGVSpygkISSBkdV0CSK15E7AmzsepHu/gASQH4gR0WRePQO401hSdMV5 ITbRoczpEUKUvctUaeWEInXMIPj9qzI6X3FlhTEFccGzyMzcnzJHeaIqVxklySsz+C5c gjQTaXaViqseKR36jdQQb5+fBhWbIz42FMm9dfHj6TeYEfOy4bs3Gz36o6dXY5r41W8J DBrS8dTxm5opXkK0SP4sKxBQzCH9SAGYNihlShXFsEM2u0fBBzmFnh9Oh19qx4Ldtui8 r44A== X-Gm-Message-State: AFeK/H2Jpkbq0zBm2tfSMtslRxkE19f4HXxfcXfMug//3x5TOPg/RCEknf2wRW4wk+vAF4OR X-Received: by 10.99.99.1 with SMTP id x1mr29865278pgb.110.1491388414191; Wed, 05 Apr 2017 03:33:34 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:33 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Vishal Thanki , Kalle Valo Subject: [PATCH v2 for-4.9 31/32] rt2x00: Fix incorrect usage of CONFIG_RT2X00_LIB_USB Date: Wed, 5 Apr 2017 16:02:23 +0530 Message-Id: <1491388344-13521-32-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Vishal Thanki In device removal routine, usage of "#ifdef CONFIG_RT2X00_LIB_USB" will not cover the case when it is configured as module. This will omit the entire if-block which does cleanup of URBs and cancellation of pending work. Changing the #ifdef to #if IS_ENABLED() to fix it. Signed-off-by: Vishal Thanki Acked-by: Stanislaw Gruszka Signed-off-by: Kalle Valo (cherry picked from commit a083c8fd277b4122c804f18ec8c84165f345c71c) Signed-off-by: Amit Pundir --- drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.7.4 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c index 4e0c565..b7273be 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c @@ -1422,7 +1422,7 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) cancel_work_sync(&rt2x00dev->intf_work); cancel_delayed_work_sync(&rt2x00dev->autowakeup_work); cancel_work_sync(&rt2x00dev->sleep_work); -#ifdef CONFIG_RT2X00_LIB_USB +#if IS_ENABLED(CONFIG_RT2X00_LIB_USB) if (rt2x00_is_usb(rt2x00dev)) { usb_kill_anchored_urbs(rt2x00dev->anchor); hrtimer_cancel(&rt2x00dev->txstatus_timer); From patchwork Wed Apr 5 10:32:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Pundir X-Patchwork-Id: 96822 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp196189qgd; Wed, 5 Apr 2017 03:33:56 -0700 (PDT) X-Received: by 10.98.111.129 with SMTP id k123mr28735164pfc.18.1491388436724; Wed, 05 Apr 2017 03:33:56 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f19si16121799pgk.27.2017.04.05.03.33.56; Wed, 05 Apr 2017 03:33:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933500AbdDEKdk (ORCPT + 6 others); Wed, 5 Apr 2017 06:33:40 -0400 Received: from mail-pg0-f45.google.com ([74.125.83.45]:34011 "EHLO mail-pg0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933476AbdDEKdh (ORCPT ); Wed, 5 Apr 2017 06:33:37 -0400 Received: by mail-pg0-f45.google.com with SMTP id 21so6037321pgg.1 for ; Wed, 05 Apr 2017 03:33:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iuPu4lRlMjUFwZ+IXyUm+27S2ChXPG77SFpGXF94I7c=; b=bZCuJXzD5W8037jwVvIiOc82H5AGV1xzn+Md6b0a/TNcTwocuwJJzjyNhsjXNkFvcQ 4OOZRl00SIB1HET6D/A3/Vzfg+cHy2Zv4lGUdWX28dZ3dlwNC000PTX9fGvw+3FuNWTO VrTjBx7DYoIsLq00XP4xnoi6JaHdTT51HwR2g= 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=iuPu4lRlMjUFwZ+IXyUm+27S2ChXPG77SFpGXF94I7c=; b=nQHAMd+eOJT6pwOsRiw/LvGfEwH+4mKOYLkNOm1w1DIMsdp03U8Bgun/D9vK+odv4h /a1iAQG0MA4rzPwomJL0LDX1KSb5tNL5YDr89G2Mk/YvVhrG55ioAd1O7vixY1CXAaFF 5eo/acwEvpzSKD1Pjw15zWz2mzFg7uc3LskRFZK46SJ47jsi932bLkLM6kJ7FdpbWhbY ND31t8rQ9IQZs6UKr+hWx0Uuf3IsQotjkFfWbNWxh4VN3cRPpenKfDnpoKFr8JLjucwK tx/3l8mBpLIAmK+bbkPQPkmT9JEC8aISV92CTiNBpWng0gxRedtvKK10HiXSVWPPJvEq iwWQ== X-Gm-Message-State: AFeK/H3q2NwB6FUzjkvZ/+X73WAlr/7Hj04dXGUdn/InKIxgm3JS6cRhhkluS2ueFTlzYNsf X-Received: by 10.98.86.71 with SMTP id k68mr27286726pfb.215.1491388416510; Wed, 05 Apr 2017 03:33:36 -0700 (PDT) Received: from localhost.localdomain ([106.51.240.246]) by smtp.gmail.com with ESMTPSA id a62sm36732075pgc.60.2017.04.05.03.33.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 05 Apr 2017 03:33:35 -0700 (PDT) From: Amit Pundir To: stable@vger.kernel.org Cc: gregkh@linuxfoundation.org, Stanislaw Gruszka , Vishal Thanki , Kalle Valo Subject: [PATCH v2 for-4.9 32/32] rt2x00: avoid introducing a USB dependency in the rt2x00lib module Date: Wed, 5 Apr 2017 16:02:24 +0530 Message-Id: <1491388344-13521-33-git-send-email-amit.pundir@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> References: <1491388344-13521-1-git-send-email-amit.pundir@linaro.org> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Stanislaw Gruszka As reported by Felix: Though protected by an ifdef, introducing an usb symbol dependency in the rt2x00lib module is a major inconvenience for distributions that package kernel modules split into individual packages. Get rid of this unnecessary dependency by calling the usb related function from a more suitable place. Cc: Vishal Thanki Reported-by: Felix Fietkau Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB") Signed-off-by: Stanislaw Gruszka Signed-off-by: Kalle Valo (cherry picked from commit 6232c17438ed01f43665197db5a98a4a4f77ef47) Signed-off-by: Amit Pundir --- drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 23 ++++++++--------------- drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 5 +++++ 2 files changed, 13 insertions(+), 15 deletions(-) -- 2.7.4 diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c index b7273be..c8d9075 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c @@ -1422,21 +1422,6 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) cancel_work_sync(&rt2x00dev->intf_work); cancel_delayed_work_sync(&rt2x00dev->autowakeup_work); cancel_work_sync(&rt2x00dev->sleep_work); -#if IS_ENABLED(CONFIG_RT2X00_LIB_USB) - if (rt2x00_is_usb(rt2x00dev)) { - usb_kill_anchored_urbs(rt2x00dev->anchor); - hrtimer_cancel(&rt2x00dev->txstatus_timer); - cancel_work_sync(&rt2x00dev->rxdone_work); - cancel_work_sync(&rt2x00dev->txdone_work); - } -#endif - if (rt2x00dev->workqueue) - destroy_workqueue(rt2x00dev->workqueue); - - /* - * Free the tx status fifo. - */ - kfifo_free(&rt2x00dev->txstatus_fifo); /* * Kill the tx status tasklet. @@ -1452,6 +1437,14 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) */ rt2x00lib_uninitialize(rt2x00dev); + if (rt2x00dev->workqueue) + destroy_workqueue(rt2x00dev->workqueue); + + /* + * Free the tx status fifo. + */ + kfifo_free(&rt2x00dev->txstatus_fifo); + /* * Free extra components */ diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c index 662705e..631df69 100644 --- a/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00usb.c @@ -740,6 +740,11 @@ void rt2x00usb_uninitialize(struct rt2x00_dev *rt2x00dev) { struct data_queue *queue; + usb_kill_anchored_urbs(rt2x00dev->anchor); + hrtimer_cancel(&rt2x00dev->txstatus_timer); + cancel_work_sync(&rt2x00dev->rxdone_work); + cancel_work_sync(&rt2x00dev->txdone_work); + queue_for_each(rt2x00dev, queue) rt2x00usb_free_entries(queue); }