From patchwork Fri Oct 9 04:27:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Eggers X-Patchwork-Id: 11824915 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 63D59109B for ; Fri, 9 Oct 2020 04:28:49 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2F0242223C for ; Fri, 9 Oct 2020 04:28:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="nYEAsrp7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2F0242223C Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arri.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=dSN+Wo9jbJy/jObAgPngsKcrPrzWuOQo+1K67q/Qyk0=; b=nYEAsrp7vZ0V0SYQOM0psX76oD GNpJvL3iT7xPUgEsbp3OjTC0Tf5YUv5UXARXX0S0uTo5mRR2VwSb3dCQjwlR+QuekWjwF4F1KDs2I 1u1QNF81xMdGZqbImTjeBSVoadHektcGlX0OdQQyvV9MDbM01sJNYcfW8OJvyXk6P8jvYqT012VCe d2c14LoP+ZS9lbkPq+cH5tyBYKzczkKMINGcdOh3eVaNVU5kk+NAopJ3UzdyWnxUGhmw96DXGxEH5 6GXmzZ2MJhuTPt3EsBceF7723TAWi3tDH5DHEaMACC39BeHHDJSzSuhr4TUhCRrNTWIE/FVyTzs0X kX0hbDNQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQk1F-0006uD-Gs; Fri, 09 Oct 2020 04:28:37 +0000 Received: from mailout11.rmx.de ([94.199.88.76]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQk1B-0006sr-KN for linux-arm-kernel@lists.infradead.org; Fri, 09 Oct 2020 04:28:35 +0000 Received: from kdin01.retarus.com (kdin01.dmz1.retloc [172.19.17.48]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mailout11.rmx.de (Postfix) with ESMTPS id 4C6w6r6QzJz3yRN; Fri, 9 Oct 2020 06:28:20 +0200 (CEST) Received: from mta.arri.de (unknown [217.111.95.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by kdin01.retarus.com (Postfix) with ESMTPS id 4C6w6D0wv2z2xFb; Fri, 9 Oct 2020 06:27:48 +0200 (CEST) Received: from N95HX1G2.wgnetz.xx (192.168.54.16) by mta.arri.de (192.168.100.104) with Microsoft SMTP Server (TLS) id 14.3.408.0; Fri, 9 Oct 2020 06:27:47 +0200 From: Christian Eggers To: Mark Brown , Shawn Guo , "Sascha Hauer" Subject: [PATCH] spi: imx: Revert "spi: imx: enable runtime pm support" Date: Fri, 9 Oct 2020 06:27:38 +0200 Message-ID: <20201009042738.26602-1-ceggers@arri.de> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-Originating-IP: [192.168.54.16] X-RMX-ID: 20201009-062748-4C6w6D0wv2z2xFb-0@kdin01 X-RMX-SOURCE: 217.111.95.66 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201009_002833_886701_DDE9170A X-CRM114-Status: GOOD ( 21.42 ) X-Spam-Score: -0.7 (/) X-Spam-Report: SpamAssassin version 3.4.4 on merlin.infradead.org summary: Content analysis details: (-0.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [94.199.88.76 listed in wl.mailspike.net] -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [94.199.88.76 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Christian Eggers , linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, NXP Linux Team , Pengutronix Kernel Team , Fabio Estevam , linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org This reverts commit 525c9e5a32bd7951eae3f06d9d077fea51718a6c. If CONFIG_PM is disabled, the system completely freezes on probe as nothing enables the clock of the SPI peripheral. Signed-off-by: Christian Eggers Signed-off-by: Sascha Hauer Tested-by: Christian Eggers --- drivers/spi/spi-imx.c | 121 ++++++++++++------------------------------ 1 file changed, 33 insertions(+), 88 deletions(-) diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 38a5f1304cec..fdc25f549378 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c @@ -13,9 +13,7 @@ #include #include #include -#include #include -#include #include #include #include @@ -32,8 +30,6 @@ static bool use_dma = true; module_param(use_dma, bool, 0644); MODULE_PARM_DESC(use_dma, "Enable usage of DMA when available (default)"); -#define MXC_RPM_TIMEOUT 2000 /* 2000ms */ - #define MXC_CSPIRXDATA 0x00 #define MXC_CSPITXDATA 0x04 #define MXC_CSPICTRL 0x08 @@ -1534,16 +1530,20 @@ spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg) struct spi_imx_data *spi_imx = spi_master_get_devdata(master); int ret; - ret = pm_runtime_get_sync(spi_imx->dev); - if (ret < 0) { - dev_err(spi_imx->dev, "failed to enable clock\n"); + ret = clk_enable(spi_imx->clk_per); + if (ret) + return ret; + + ret = clk_enable(spi_imx->clk_ipg); + if (ret) { + clk_disable(spi_imx->clk_per); return ret; } ret = spi_imx->devtype_data->prepare_message(spi_imx, msg); if (ret) { - pm_runtime_mark_last_busy(spi_imx->dev); - pm_runtime_put_autosuspend(spi_imx->dev); + clk_disable(spi_imx->clk_ipg); + clk_disable(spi_imx->clk_per); } return ret; @@ -1554,8 +1554,8 @@ spi_imx_unprepare_message(struct spi_master *master, struct spi_message *msg) { struct spi_imx_data *spi_imx = spi_master_get_devdata(master); - pm_runtime_mark_last_busy(spi_imx->dev); - pm_runtime_put_autosuspend(spi_imx->dev); + clk_disable(spi_imx->clk_ipg); + clk_disable(spi_imx->clk_per); return 0; } @@ -1674,15 +1674,13 @@ static int spi_imx_probe(struct platform_device *pdev) goto out_master_put; } - pm_runtime_enable(spi_imx->dev); - pm_runtime_set_autosuspend_delay(spi_imx->dev, MXC_RPM_TIMEOUT); - pm_runtime_use_autosuspend(spi_imx->dev); + ret = clk_prepare_enable(spi_imx->clk_per); + if (ret) + goto out_master_put; - ret = pm_runtime_get_sync(spi_imx->dev); - if (ret < 0) { - dev_err(spi_imx->dev, "failed to enable clock\n"); - goto out_runtime_pm_put; - } + ret = clk_prepare_enable(spi_imx->clk_ipg); + if (ret) + goto out_put_per; spi_imx->spi_clk = clk_get_rate(spi_imx->clk_per); /* @@ -1692,7 +1690,7 @@ static int spi_imx_probe(struct platform_device *pdev) if (spi_imx->devtype_data->has_dmamode) { ret = spi_imx_sdma_init(&pdev->dev, spi_imx, master); if (ret == -EPROBE_DEFER) - goto out_runtime_pm_put; + goto out_clk_put; if (ret < 0) dev_err(&pdev->dev, "dma setup error %d, use pio\n", @@ -1707,20 +1705,19 @@ static int spi_imx_probe(struct platform_device *pdev) ret = spi_bitbang_start(&spi_imx->bitbang); if (ret) { dev_err(&pdev->dev, "bitbang start failed with %d\n", ret); - goto out_runtime_pm_put; + goto out_clk_put; } dev_info(&pdev->dev, "probed\n"); - pm_runtime_mark_last_busy(spi_imx->dev); - pm_runtime_put_autosuspend(spi_imx->dev); - + clk_disable(spi_imx->clk_ipg); + clk_disable(spi_imx->clk_per); return ret; -out_runtime_pm_put: - pm_runtime_dont_use_autosuspend(spi_imx->dev); - pm_runtime_put_sync(spi_imx->dev); - pm_runtime_disable(spi_imx->dev); +out_clk_put: + clk_disable_unprepare(spi_imx->clk_ipg); +out_put_per: + clk_disable_unprepare(spi_imx->clk_per); out_master_put: spi_master_put(master); @@ -1735,82 +1732,30 @@ static int spi_imx_remove(struct platform_device *pdev) spi_bitbang_stop(&spi_imx->bitbang); - ret = pm_runtime_get_sync(spi_imx->dev); - if (ret < 0) { - dev_err(spi_imx->dev, "failed to enable clock\n"); - return ret; - } - - writel(0, spi_imx->base + MXC_CSPICTRL); - - pm_runtime_dont_use_autosuspend(spi_imx->dev); - pm_runtime_put_sync(spi_imx->dev); - pm_runtime_disable(spi_imx->dev); - - spi_imx_sdma_exit(spi_imx); - spi_master_put(master); - - return 0; -} - -static int __maybe_unused spi_imx_runtime_resume(struct device *dev) -{ - struct spi_master *master = dev_get_drvdata(dev); - struct spi_imx_data *spi_imx; - int ret; - - spi_imx = spi_master_get_devdata(master); - - ret = clk_prepare_enable(spi_imx->clk_per); + ret = clk_enable(spi_imx->clk_per); if (ret) return ret; - ret = clk_prepare_enable(spi_imx->clk_ipg); + ret = clk_enable(spi_imx->clk_ipg); if (ret) { - clk_disable_unprepare(spi_imx->clk_per); + clk_disable(spi_imx->clk_per); return ret; } - return 0; -} - -static int __maybe_unused spi_imx_runtime_suspend(struct device *dev) -{ - struct spi_master *master = dev_get_drvdata(dev); - struct spi_imx_data *spi_imx; - - spi_imx = spi_master_get_devdata(master); - - clk_disable_unprepare(spi_imx->clk_per); + writel(0, spi_imx->base + MXC_CSPICTRL); clk_disable_unprepare(spi_imx->clk_ipg); + clk_disable_unprepare(spi_imx->clk_per); + spi_imx_sdma_exit(spi_imx); + spi_master_put(master); return 0; } -static int __maybe_unused spi_imx_suspend(struct device *dev) -{ - pinctrl_pm_select_sleep_state(dev); - return 0; -} - -static int __maybe_unused spi_imx_resume(struct device *dev) -{ - pinctrl_pm_select_default_state(dev); - return 0; -} - -static const struct dev_pm_ops imx_spi_pm = { - SET_RUNTIME_PM_OPS(spi_imx_runtime_suspend, - spi_imx_runtime_resume, NULL) - SET_SYSTEM_SLEEP_PM_OPS(spi_imx_suspend, spi_imx_resume) -}; - static struct platform_driver spi_imx_driver = { .driver = { .name = DRIVER_NAME, .of_match_table = spi_imx_dt_ids, - .pm = &imx_spi_pm, - }, + }, .id_table = spi_imx_devtype, .probe = spi_imx_probe, .remove = spi_imx_remove,