From patchwork Fri Sep 8 15:35:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811652 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="i6EOBulN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphHp6nkWz9sBZ for ; Sat, 9 Sep 2017 01:36:21 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932120AbdIHPgT (ORCPT ); Fri, 8 Sep 2017 11:36:19 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:37138 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756543AbdIHPgR (ORCPT ); Fri, 8 Sep 2017 11:36:17 -0400 Received: by mail-wm0-f67.google.com with SMTP id f4so1972209wmh.4; Fri, 08 Sep 2017 08:36:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QpAJytz+aiNN6ugMH0pd0IRk4M6Nw+EoUUnBnzUoU6Q=; b=i6EOBulN8YFDPPcLnFOi2ORTbNpVr5uBBKSVaIhENa2jfTZx0sLc+ugZDHWClO1GwQ bhrAv2RM1KdbKFPEv3g4kBTFJKYR0xZGPC1pOAazcu3m+D7dt9Djf/WHPnjTMvsNobRr XQ1fMPAyTJFzk23gt6Qfz2Pp0XAJJsXzF/oOhAcSuG7t1KLFAzqwg516F+WjudqcbEZw EPvojp4xWi0mPdKhRy6Er9Exko5AhW6RFL5KJ2pX7xR2JHzg3J+Dtb7K1YFRYBbN63wt xMNz9zn8kJ2NF6cwfJczwOcnkmCl/+XVNgYM4hWWkAYgT28Khnfyz+wR3jnLXYszsI/8 +GeA== 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=QpAJytz+aiNN6ugMH0pd0IRk4M6Nw+EoUUnBnzUoU6Q=; b=sys6McGkCExm+l5rmpdcQOwwhaVWFhfgz1BsUi2LqlQlQk4tRmKmz727UlNOPE50Sq azIEkZcFI1Xk6npfzvf2gJduepUnJCU/i7ijic3o4CTvlxTuKErekBrunKPn0zhdjcdJ TOdSyTQzAfers/245cvSC2N3CPlCBLHpdym4ETtL2nFhHMLnuOWo/j47Pi+V0C7WVoGs zfBT0PySYbf2Ej0NQw5zZPn27bT3s6yUfdh9W3s3XR6mgYuqlwaglM116ITa3XdP7b7U yKE1xFUq0Vc2VqZUTGWUkob10VInZj+qUX+Jer8jOS1qXNIpx4qkjtKkobXECutauEcL SfYw== X-Gm-Message-State: AHPjjUgnyS/3sJVOcivs4Kqtt885cFB8O8RxVTQbuCTDEvjnvBcvQfFD xtoRrYD4u0F4QADMoLwWYAY= X-Google-Smtp-Source: ADKCNb4fLcqaI4Bbux5Uj+MvxzRvSdLca1ahW6b+xJ5qnWs3ry78s7WhZ/UvNl37XkVAX6PhlG5ZZA== X-Received: by 10.28.48.71 with SMTP id w68mr213535wmw.3.1504884975148; Fri, 08 Sep 2017 08:36:15 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:14 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 01/10] clk: at91: pmc: Wait for clocks when resuming Date: Fri, 8 Sep 2017 17:35:55 +0200 Message-Id: <20170908153604.28383-2-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org Wait for the syncronization of all clocks when resuming, not only the UPLL clock. Do not use regmap_read_poll_timeout, as it will call BUG() when interrupts are masked, which is the case in here. Signed-off-by: Romain Izard --- drivers/clk/at91/pmc.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 775af473fe11..5c2b26de303e 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -107,10 +107,20 @@ static int pmc_suspend(void) return 0; } +static bool pmc_ready(unsigned int mask) +{ + unsigned int status; + + regmap_read(pmcreg, AT91_PMC_SR, &status); + + return ((status & mask) == mask) ? 1 : 0; +} + static void pmc_resume(void) { - int i, ret = 0; + int i; u32 tmp; + u32 mask = AT91_PMC_MCKRDY | AT91_PMC_LOCKA; regmap_read(pmcreg, AT91_PMC_MCKR, &tmp); if (pmc_cache.mckr != tmp) @@ -134,13 +144,11 @@ static void pmc_resume(void) AT91_PMC_PCR_CMD); } - if (pmc_cache.uckr & AT91_PMC_UPLLEN) { - ret = regmap_read_poll_timeout(pmcreg, AT91_PMC_SR, tmp, - !(tmp & AT91_PMC_LOCKU), - 10, 5000); - if (ret) - pr_crit("USB PLL didn't lock when resuming\n"); - } + if (pmc_cache.uckr & AT91_PMC_UPLLEN) + mask |= AT91_PMC_LOCKU; + + while (!pmc_ready(mask)) + cpu_relax(); } static struct syscore_ops pmc_syscore_ops = { From patchwork Fri Sep 8 15:35:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811668 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="S9+gqD8y"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphXF541Nz9sQl for ; Sat, 9 Sep 2017 01:47:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756501AbdIHPj6 (ORCPT ); Fri, 8 Sep 2017 11:39:58 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:37147 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756546AbdIHPgT (ORCPT ); Fri, 8 Sep 2017 11:36:19 -0400 Received: by mail-wm0-f66.google.com with SMTP id f4so1972259wmh.4; Fri, 08 Sep 2017 08:36:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZgQ0/Qh5f5QbU+VDEqyOpLBz/AqelVRfzse4RDneeD4=; b=S9+gqD8ywuZrkquhxtNxPxC2dF60FByurSqd/JEorJgwWeR0ZdsKn6SfR6Yxo26hdn sw56JQ0fYCOJwlIxGl0vMM9IoUfgSEegnSkyK/6IYfzAMhiFzPdpu8NcvYxHTNmN7xuQ TelqixI+2vm+SY91GQ2dyfnSH19HihwFtRwzWQUFJEj9yNaN4nmHjtDyE3ijmzeb52wn W5W+9OJGYRvAyfs49Qs+LUjgN6M5gdqdDajc/l7jSeTftuKIcS9eRR1dBkw5HLdzXQwn 7x1pKfonOHCJjgQD4gyCGFM9wlKzmW56CoTg9Kn2pwi5WMkpe1gOO3bob3Zua3Hv3aL+ 4hGQ== 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=ZgQ0/Qh5f5QbU+VDEqyOpLBz/AqelVRfzse4RDneeD4=; b=T+X13x7KaQDt0zUxMbha+Q0xuYF/Dn+iQm4jICATxjb3sbLcLWYXTO30nEHFfEvVWa KfVbbX4OJ9MYkQFlAaknteAdbrls+0BYOOsf3C2K9OGvxc2C/Pz8YcvIOWKHTeWan6PA lEMdGdQDMgX7BgyuYMv+rIXtmJuke1eROGxC06NrM1mMQazoNi/uqUDI9uSuraSX7VR/ IeY78jnzw7on/L5h+ClGFZf+OzuqOUUCbWtBpg8H8edeP3lu+LDm1l/plvHiMyYgNj39 rQSnRR8UszmatWhRLUA/opy/57kHiLSfQ2hBj7W4Rd5IWWMbnOMykMLPr4QxUkWIXDIw XjfA== X-Gm-Message-State: AHPjjUg9dKByqWaMxcrXR9ddx9yYXW2jEoXaZ45VHSBS3R4FeUdbIrQW GoLxqV1PyrVClsmh4nPKoKY= X-Google-Smtp-Source: AOwi7QAJUrAv3VmrgsS9GWM3nQ91hzvUf/nafsaJvXRmJOvmW5HVsLSRX5hiHaU2NOmFJYEO3mWLgQ== X-Received: by 10.28.150.69 with SMTP id y66mr1902353wmd.8.1504884977199; Fri, 08 Sep 2017 08:36:17 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:16 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 02/10] clk: at91: pmc: Save SCSR during suspend Date: Fri, 8 Sep 2017 17:35:56 +0200 Message-Id: <20170908153604.28383-3-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org The contents of the System Clock Status Register (SCSR) needs to be restored into the System Clock Enable Register (SCER). As the bootloader will restore some clocks by itself, the issue can be missed as only the USB controller, the LCD controller, the Image Sensor controller and the programmable clocks will be impacted. Fix the obvious typo in the suspend/resume code, as the IMR register does not need to be saved twice. Signed-off-by: Romain Izard Acked-by: Nicolas Ferre --- drivers/clk/at91/pmc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 5c2b26de303e..07dc2861ad3f 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -86,7 +86,7 @@ static int pmc_suspend(void) { int i; - regmap_read(pmcreg, AT91_PMC_IMR, &pmc_cache.scsr); + regmap_read(pmcreg, AT91_PMC_SCSR, &pmc_cache.scsr); regmap_read(pmcreg, AT91_PMC_PCSR, &pmc_cache.pcsr0); regmap_read(pmcreg, AT91_CKGR_UCKR, &pmc_cache.uckr); regmap_read(pmcreg, AT91_CKGR_MOR, &pmc_cache.mor); @@ -129,7 +129,7 @@ static void pmc_resume(void) if (pmc_cache.pllar != tmp) pr_warn("PLLAR was not configured properly by the firmware\n"); - regmap_write(pmcreg, AT91_PMC_IMR, pmc_cache.scsr); + regmap_write(pmcreg, AT91_PMC_SCER, pmc_cache.scsr); regmap_write(pmcreg, AT91_PMC_PCER, pmc_cache.pcsr0); regmap_write(pmcreg, AT91_CKGR_UCKR, pmc_cache.uckr); regmap_write(pmcreg, AT91_CKGR_MOR, pmc_cache.mor); From patchwork Fri Sep 8 15:35:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811667 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fxfysY/l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphXB69vRz9sRW for ; Sat, 9 Sep 2017 01:47:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932354AbdIHPjJ (ORCPT ); Fri, 8 Sep 2017 11:39:09 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:34530 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932183AbdIHPgV (ORCPT ); Fri, 8 Sep 2017 11:36:21 -0400 Received: by mail-wr0-f195.google.com with SMTP id k20so1411538wre.1; Fri, 08 Sep 2017 08:36:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=9beE8Cf39tr6tZRj5PuOk2crYg7vW204uQ0hp5zpIWs=; b=fxfysY/lEXiDbWbCRseZG/7PkmOctGpsH02X2EmNtjvE1Ntn9AYTr+uGo7xnbzFryp HgyQ3bZabNE3bCGFsE74wt6OpRdBwEPrXTwIuayrah9qMjJyXyM8Baubm4WKo/efpmSG SsNLHwCGY2c7StHZKuaG6hTo40ijFHP2zl91Eq2zbaYmfqGA17jwtWpCXmjS93/RM+uv 1t864x/7D4GeuxNC9LtWDhlhecTVYnMRIdNkQs0UkqlxGtuwUx1gudO1z3dH6ZmIB2yc gT65vmgIPB707dRpkkMo2vUr5AWlrc33CQLvNJwI/wbTa/EduonLd9GhHTgI+iaYU0Kn saGA== 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=9beE8Cf39tr6tZRj5PuOk2crYg7vW204uQ0hp5zpIWs=; b=RWQGgYplKAFynQNZVulJdjTsvr+knDXd3HJ/3qOcx+eodyPPljXMdUnhXn6EISyvEt Iv+w1N1qT41uPwMpHEuVDVxjjXgv/VelUy29+u/u0drfxnytGMwdZ7zeBqbnikEgANyh 6W9PXc5bW3AVTokJru3zIv6HDjBXT85BpdaIyMGweIN8Rin+tmikwboJx9bVU23s6D7k 9lgZcmVgXwkk21TI5w77ETgUJqh2QHvxJnmRdQ8o1yGaVBGx/MlP0Pp8q3fDgfnOMn0o vadgqS1vp1kRhXbuTOH0rAovtCaFuLyDd0JwYKd2JQYlCdh9TyTtLpDcRc3Wacl45M1U Oehw== X-Gm-Message-State: AHPjjUgmdBmLZj4qcUz5TKJQXRJdgKQ5gWrkOmfWJIZguExeEJzBp9zl lEevapEeAuRIIg== X-Google-Smtp-Source: ADKCNb4zDKdZlUxvWvNNAbhPe45hRJh6QAn8A+MXH5xh7Zuw4wzc8nzN+7814Q3NAxX9NkX+IzNskw== X-Received: by 10.223.183.133 with SMTP id s5mr2816650wre.145.1504884979413; Fri, 08 Sep 2017 08:36:19 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:18 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard , Romain Izard Subject: [PATCH v1 03/10] clk: at91: pmc: Support backup for programmable clocks Date: Fri, 8 Sep 2017 17:35:57 +0200 Message-Id: <20170908153604.28383-4-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org From: Romain Izard Save and restore the System Clock and Programmable Clock register for the backup use case. Signed-off-by: Romain Izard --- drivers/clk/at91/pmc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 07dc2861ad3f..5421b03553ec 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -66,6 +66,7 @@ static struct u32 pcr[PMC_MAX_IDS]; u32 audio_pll0; u32 audio_pll1; + u32 pckr[3]; } pmc_cache; void pmc_register_id(u8 id) @@ -103,6 +104,8 @@ static int pmc_suspend(void) regmap_read(pmcreg, AT91_PMC_PCR, &pmc_cache.pcr[registered_ids[i]]); } + for (i = 0; i < 3; i++) + regmap_read(pmcreg, AT91_PMC_PCKR(i), &pmc_cache.pckr[i]); return 0; } @@ -143,6 +146,8 @@ static void pmc_resume(void) pmc_cache.pcr[registered_ids[i]] | AT91_PMC_PCR_CMD); } + for (i = 0; i < 3; i++) + regmap_write(pmcreg, AT91_PMC_PCKR(i), pmc_cache.pckr[i]); if (pmc_cache.uckr & AT91_PMC_UPLLEN) mask |= AT91_PMC_LOCKU; From patchwork Fri Sep 8 15:35:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811664 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SYkaLzzz"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphX24qgVz9t3F for ; Sat, 9 Sep 2017 01:46:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756590AbdIHPg0 (ORCPT ); Fri, 8 Sep 2017 11:36:26 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34590 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932217AbdIHPgW (ORCPT ); Fri, 8 Sep 2017 11:36:22 -0400 Received: by mail-wm0-f66.google.com with SMTP id l19so1982886wmi.1; Fri, 08 Sep 2017 08:36:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=owFYxnK787Ud9TRMMs531N3In48svKrtFKwYj7nv/wc=; b=SYkaLzzzj42t5HwnrN5eSgC16ZyBITDEfWmxnYfpJYXZSyoBcKaZ5d34/7pCC4hkVz +dvB8S4lUzjTvaUjo28oZBqpr5A3Xg8hjojPadq+qaP/XcVYYkGxQzd8gHnLhXy2muId Sks6k6SyOTRP/kQKKcc8y2E8Si+F7QFjfB6Klr3knUG/jahcCY4wD6CBX9Di1kjihyxD OaKBH0rfAQmbyp+JJS4PJ4nq0ZyGj/rJxBZn8PWWiZJ3LNnIIJI/djy0YXofMCg+K8oE QF/4ez+ia9TwrFgPpkAE4EBE7GO1U/xH1BqMaAWiAqcc1UP/7geQ+AyTa+cRoWGGjsFC wvrw== 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=owFYxnK787Ud9TRMMs531N3In48svKrtFKwYj7nv/wc=; b=T0jajso9ZrV9B+JELvFTGp9mVWlAIcETj2XqAbkYhH0LlgBccNj0EwlCQ1G7h/N4mK mJfZD3nj5r3ATL0/0t9BS9BXESkn8jFNToDS17OllYb19yqyFeXPpQfSZ4cvJCQ/z+IE e7p+Ur1R9broEVaHnCd8TKMtoWhaUcWjtfRgEzRbK9qiYHQUP4jt+OFj/w7FPnGLayhD b59yzJmOuXVPav8LHJ8UbgJNF9FiXYBolmxVykqL0FlwJKq0nBTsSf0rwfjqdAHigQly T/hkkkc1QfCnw/xuYDCmN5/YvQwjh89ky4tqIf7dweFnhncwEyxexxWfHsevr39ViMLC gxxQ== X-Gm-Message-State: AHPjjUj8ady311g09M/JfRWsbBvDtephaPB5EFmw6rnV51rxnvPaPKhZ N0DG9wYRZ+SKHg== X-Google-Smtp-Source: AOwi7QCmB90PGajvrxgyno2VImub4kajbKyF2GWBVPatSuwFadgLbD+aw60VWHb+Sa34/c73B1k9+g== X-Received: by 10.28.136.11 with SMTP id k11mr97555wmd.133.1504884980591; Fri, 08 Sep 2017 08:36:20 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:20 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 04/10] mtd: nand: atmel: Avoid ECC errors when leaving backup mode Date: Fri, 8 Sep 2017 17:35:58 +0200 Message-Id: <20170908153604.28383-5-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org During backup mode, the contents of all registers will be cleared as the SoC will be completely powered down. For a product that boots on NAND Flash memory, the bootloader will obviously use the related controller to read the Flash and correct any detected error in the memory, before handling back control to the kernel's resuming entry point. In normal devices, it is up to the driver's suspend/resume code to restore the registers in a valid state. But the PMECC is not a regular device in the driver model when used with the legacy device tree binding for the Atmel NAND controller, and suspend/resume code is not called. As in my case the bootloader leaves the PMECC controller in a programmed state, and the controller is only reset at boot or after a NAND access, the first NAND Flash access with the Atmel controller will report uncorrectable ECC errors. To avoid this, systematically reset the PMECC controller before using it. Signed-off-by: Romain Izard --- drivers/mtd/nand/atmel/pmecc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c index 8c210a5776bc..8d1208f38025 100644 --- a/drivers/mtd/nand/atmel/pmecc.c +++ b/drivers/mtd/nand/atmel/pmecc.c @@ -777,6 +777,9 @@ int atmel_pmecc_enable(struct atmel_pmecc_user *user, int op) mutex_lock(&user->pmecc->lock); + writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); + writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); + cfg = user->cache.cfg; if (op == NAND_ECC_WRITE) cfg |= PMECC_CFG_WRITE_OP; @@ -797,10 +800,6 @@ EXPORT_SYMBOL_GPL(atmel_pmecc_enable); void atmel_pmecc_disable(struct atmel_pmecc_user *user) { - struct atmel_pmecc *pmecc = user->pmecc; - - writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); - writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); mutex_unlock(&user->pmecc->lock); } EXPORT_SYMBOL_GPL(atmel_pmecc_disable); @@ -856,10 +855,6 @@ static struct atmel_pmecc *atmel_pmecc_create(struct platform_device *pdev, /* Disable all interrupts before registering the PMECC handler. */ writel(0xffffffff, pmecc->regs.base + ATMEL_PMECC_IDR); - /* Reset the ECC engine */ - writel(PMECC_CTRL_RST, pmecc->regs.base + ATMEL_PMECC_CTRL); - writel(PMECC_CTRL_DISABLE, pmecc->regs.base + ATMEL_PMECC_CTRL); - return pmecc; } From patchwork Fri Sep 8 15:35:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811666 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="P02uprjG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphX92nnYz9t3F for ; Sat, 9 Sep 2017 01:47:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932120AbdIHPih (ORCPT ); Fri, 8 Sep 2017 11:38:37 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:32879 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932354AbdIHPgX (ORCPT ); Fri, 8 Sep 2017 11:36:23 -0400 Received: by mail-wm0-f65.google.com with SMTP id 187so1997765wmn.0; Fri, 08 Sep 2017 08:36:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=aaNnsNahYIjh+1Ks16UeHfn5wML1ytVR6uApSlam0ak=; b=P02uprjGGualMUPxI36GJhMM39AqQfDqCX1oWwcrmnrnYNmjaloAOSgZ9LlHq7Fkz/ Jp4YUtYpo8dhnG/PfSXn35InrHc17S5yRXHcHSQlxuCpl3uIxnKZ8ngozXXYcn6zoEAh kBIw2mhk3khGTsO1Bbpo3GU1UzSBZc1Lg6ZlalVau29gPjphnW1AALuNHrBfmpHq+jg3 Dlw+AhJ0bpZQsdDqc1vKTBw/XsqHCOELUJrVhhixVH+cJreMPDGb2FQTgun0G9D4YV9c 8jiXqhbNqwyKnbpdiwF4A77ioGA03FAkPsC+dG0R3qv9qEfDhGW1OR7/+NQTYX0iuZ3H 8isw== 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=aaNnsNahYIjh+1Ks16UeHfn5wML1ytVR6uApSlam0ak=; b=jxbsIpWNBfPl5fvOg5Mycfp9Re2yDT4bjZQfyQQUTgJl9+xsT4TNsQtGg9ljXxrFwb JsEcuVJJQIWlBi9+wRpk+KasMIc+Qrh9IVmN/ZEU/OLBzd6BIuX+8q4zMu+ULz1SyxmV qyHf1QUP5OLY+4EsRHodgVU5zgUkUfT0QoImh9yX2CKiEGlsYk1U8W1x9nue+MOeEO4h XII5dpvCCTDCmSxq37rYN7TxcCSf1Ed98TYsasUEXjYI5xXf8vI52SrMGqX3tlmri32v 66Hd+HuOfzKMX4d8VNNIxZ/xKbprFkQKSv/TQVZojqtS47zO0nLDyNmenCk3gdym5GT7 bbHQ== X-Gm-Message-State: AHPjjUjFJ2EF1UKUQpdvpFZMsQgxHjjtpZIRiLpXQ8S4dPZcxzxWXmlj ZATVaS0CfZvmUQ== X-Google-Smtp-Source: AOwi7QAPmTBwCM2ylwBS1zB/di7sfuTkXBL3yv9TVmHEUUtM7a0C/wcHzMOvnLgQB8Nsst69REa9ag== X-Received: by 10.28.70.130 with SMTP id t124mr1935806wma.145.1504884981816; Fri, 08 Sep 2017 08:36:21 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:21 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 05/10] mtd: nand: atmel: Report PMECC failures as errors Date: Fri, 8 Sep 2017 17:35:59 +0200 Message-Id: <20170908153604.28383-6-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org It is not normal for the PMECC to fail when trying to fix ECC errors. Report these cases as errors. Signed-off-by: Romain Izard --- drivers/mtd/nand/atmel/pmecc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/atmel/pmecc.c b/drivers/mtd/nand/atmel/pmecc.c index 8d1208f38025..2a23f1ff945f 100644 --- a/drivers/mtd/nand/atmel/pmecc.c +++ b/drivers/mtd/nand/atmel/pmecc.c @@ -687,6 +687,8 @@ static int atmel_pmecc_err_location(struct atmel_pmecc_user *user) * Number of roots does not match the degree of smu * unable to correct error. */ + dev_err(pmecc->dev, + "PMECC: Impossible to calculate error location.\n"); return -EBADMSG; } @@ -729,7 +731,7 @@ int atmel_pmecc_correct_sector(struct atmel_pmecc_user *user, int sector, ptr = ecc + byte - sectorsize; area = "ECC"; } else { - dev_dbg(pmecc->dev, + dev_err(pmecc->dev, "Invalid errpos value (%d, max is %d)\n", errpos, (sectorsize + eccbytes) * 8); return -EINVAL; From patchwork Fri Sep 8 15:36:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811665 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="DXfbSxZE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphX639JKz9sBZ for ; Sat, 9 Sep 2017 01:47:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932413AbdIHPiP (ORCPT ); Fri, 8 Sep 2017 11:38:15 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:35135 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756580AbdIHPgZ (ORCPT ); Fri, 8 Sep 2017 11:36:25 -0400 Received: by mail-wm0-f67.google.com with SMTP id e64so1985717wmi.2; Fri, 08 Sep 2017 08:36:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oXmKn1KofyZwcjnBOUm74XmkxLMf8Z2wlrhdx+nzJUc=; b=DXfbSxZEy8jFYu5s+xHdTtKs2HdQC+F3zoo34yjXTO6AzxoM22A16esdLzhMWRlPVq qKRN9dUfjTM8DnKm2OWn1EAYbmNTf+q9Slu4VaH3ildxXGtRPoN13kq8P/mOcfM3QSlY IJgdZUks9k/6bN3impGPqQQhEYFGPu2cCctlJ60DP/DSWONjGbAOomlJLwcSqbS3q35k zzhDTuue7Oa5Y7AM/Ef8MYueOT4MyoZlVoVq70FKYDl3DhjlU+HHRKWLo3kMurwqjNob kM594mpasowPqzTcP2C0+WWXDLp/e3y7/2PoEuaraLD4cSByAIpnOwFBy//gjE0B4GwM QPug== 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=oXmKn1KofyZwcjnBOUm74XmkxLMf8Z2wlrhdx+nzJUc=; b=VfxhEgdnZjI4jBQHXkOHnsBwk2NIpt0zXimewEAxe0aj3x/VZAjBRlYJxTTHWePqxS ZnHjbZXMcem7o9oo3vOSAT2PPCDV9bS5OeZbT0zTe+PqqNFUc02mDBEUXNtAUVyT1Pb4 QNtLmCol+1mqxWwm/iLWqSLPeiLnHqDHfwuHt8Drb1l/Tc0Oq73LcksjjlPJ9jgQqXHo lFmAljbvePrsh7VCwwwprRqL6clhXyVWNPhAx2jRVk/2irTXCNLo/jZlLm+z+oLD4PTq M/wgl+4CGWodbVh2sP4uE3koCX9/J+d+EIsvAvGkL+HeKcqJv95eYOk6L3w6OZYaaz84 Y12w== X-Gm-Message-State: AHPjjUjaWM199yFaFcYPz0u6648yc0sSuLscJTvASv8/oeJuiYPaHu0r OLrLgwedxB0vn8oY1AD7eTE= X-Google-Smtp-Source: AOwi7QCHfWB3fmhi7W8FyXmwcl10k0C16EtosKFKOuS438wSvuUYxgsrACl579npoeQ0ysjc2d//gA== X-Received: by 10.28.9.137 with SMTP id 131mr1957482wmj.87.1504884983648; Fri, 08 Sep 2017 08:36:23 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:23 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 06/10] ehci-atmel: Power down during suspend is normal Date: Fri, 8 Sep 2017 17:36:00 +0200 Message-Id: <20170908153604.28383-7-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org When an Atmel SoC is suspended with the backup mode, the USB bus will be powered down. As this is expected, do not return an error to the driver core when ehci_resume detects it. Signed-off-by: Romain Izard --- drivers/usb/host/ehci-atmel.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c index 7440722bfbf0..2a8b9bdc0e57 100644 --- a/drivers/usb/host/ehci-atmel.c +++ b/drivers/usb/host/ehci-atmel.c @@ -205,7 +205,8 @@ static int __maybe_unused ehci_atmel_drv_resume(struct device *dev) struct atmel_ehci_priv *atmel_ehci = hcd_to_atmel_ehci_priv(hcd); atmel_start_clock(atmel_ehci); - return ehci_resume(hcd, false); + ehci_resume(hcd, false); + return 0; } #ifdef CONFIG_OF From patchwork Fri Sep 8 15:36:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811662 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="j+4lTOQl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphWz013wz9t2V for ; Sat, 9 Sep 2017 01:46:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932498AbdIHPge (ORCPT ); Fri, 8 Sep 2017 11:36:34 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35142 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756582AbdIHPg1 (ORCPT ); Fri, 8 Sep 2017 11:36:27 -0400 Received: by mail-wm0-f68.google.com with SMTP id e64so1985769wmi.2; Fri, 08 Sep 2017 08:36:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=leYrW6L0ZAgin3ZE6IBF4T1AHRveuovX/Zppbk5tYX0=; b=j+4lTOQltgZ+smEkBmKTjvXaLZqAtgLVsu5bj/O6S/VrHeH+Sfr48Wqo3UCJBp4Ah+ h3Uau5W4dwdo4ubpSbh5ANhgfzhpn2WFAp5MgiuCtXAJXC8/y/eWfcqJxArUx7gAP4X1 iR4xk4ZyMjg4GBeu5opA1oHrmKpK5/E0EZLKWyTrLUKeRnOPcEeODcjtDeYMXu4Csh9J 9F1nIM7Qa0JUPPt4f8aiEW/rt7wP92dsSfZTIoO/fh33FKUGPYy/XZT+b5Jro7BcWGi9 VSNDXo2HpRa6b7Gt86EU5FHtGrzrr/cESaDiNyVt8jKeETXhqWG6lqQy8MnxRYu1OQ9q kufg== 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=leYrW6L0ZAgin3ZE6IBF4T1AHRveuovX/Zppbk5tYX0=; b=fXBsF79Umqxj4kWSsSSMgj1nUW+nsOmLHb6/C/gAa57hL8GU4182Yl2aVPMwBolf3R pm/jf+mHeMWVVeHtOD5NVtzbRaLWktJL7vymU2e0Y/XXZyUL9+6VQ23Cf4NMmsP5PwKp xKUiI6mJDDS3sQHHTbnGhJ+4YKUjebIzm2f4l/IxU+2AlOR2njJeCJwPgOPMVqIfhd2n DB73XY7DOIZKbKbI851V79Lf4eXCfFZQ2ci9feolHo1nOe8NVcQKeNC/l/5DwozAos4V CCrVkY7CjG3Thd4Hr94uUOG4KAfdPnoqIxglNgGZdiSQT1hGHDsI7orcTlvBf0WQvkND PXrQ== X-Gm-Message-State: AHPjjUieWjQ/nvHYaO7F9X/aC3WKPsqvN28xylmjPTenwXdyDUGAR7ks J3baEnzHhdY6KrcSu3OYIko= X-Google-Smtp-Source: AOwi7QCuZrYWjFlTk6VAnjoV4RNmAdRDCKjWHnUIqtUUP0EBxrSoKQSMpXuCu34A1JUFXlARvJVSoQ== X-Received: by 10.28.15.210 with SMTP id 201mr2181914wmp.10.1504884985380; Fri, 08 Sep 2017 08:36:25 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:24 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 07/10] iio:adc:at91-sama5d2: Support backup mode Date: Fri, 8 Sep 2017 17:36:01 +0200 Message-Id: <20170908153604.28383-8-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org Support the backup mode for platform suspend, by restoring the hardware registers on resume. Signed-off-by: Romain Izard --- drivers/iio/adc/at91-sama5d2_adc.c | 71 ++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c index e10dca3ed74b..f9718c863363 100644 --- a/drivers/iio/adc/at91-sama5d2_adc.c +++ b/drivers/iio/adc/at91-sama5d2_adc.c @@ -200,6 +200,7 @@ struct at91_adc_state { u32 conversion_value; struct at91_adc_soc_info soc_info; wait_queue_head_t wq_data_available; + unsigned int current_rate; /* * lock to prevent concurrent 'single conversion' requests through * sysfs. @@ -269,6 +270,8 @@ static void at91_adc_setup_samp_freq(struct at91_adc_state *st, unsigned freq) mr |= AT91_SAMA5D2_MR_PRESCAL(prescal); at91_adc_writel(st, AT91_SAMA5D2_MR, mr); + st->current_rate = freq; + dev_dbg(&indio_dev->dev, "freq: %u, startup: %u, prescal: %u\n", freq, startup, prescal); } @@ -375,7 +378,9 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev, val > st->soc_info.max_sample_rate) return -EINVAL; + mutex_lock(&st->lock); at91_adc_setup_samp_freq(st, val); + mutex_unlock(&st->lock); return 0; } @@ -386,6 +391,21 @@ static const struct iio_info at91_adc_info = { .driver_module = THIS_MODULE, }; +static void at91_adc_init_hw(struct at91_adc_state *st, unsigned int freq) +{ + at91_adc_writel(st, AT91_SAMA5D2_CR, AT91_SAMA5D2_CR_SWRST); + at91_adc_writel(st, AT91_SAMA5D2_IDR, 0xffffffff); + /* + * Transfer field must be set to 2 according to the datasheet and + * allows different analog settings for each channel. + */ + at91_adc_writel(st, AT91_SAMA5D2_MR, + AT91_SAMA5D2_MR_TRANSFER(2) | AT91_SAMA5D2_MR_ANACH); + + at91_adc_setup_samp_freq(st, freq); + +} + static int at91_adc_probe(struct platform_device *pdev) { struct iio_dev *indio_dev; @@ -482,16 +502,7 @@ static int at91_adc_probe(struct platform_device *pdev) goto vref_disable; } - at91_adc_writel(st, AT91_SAMA5D2_CR, AT91_SAMA5D2_CR_SWRST); - at91_adc_writel(st, AT91_SAMA5D2_IDR, 0xffffffff); - /* - * Transfer field must be set to 2 according to the datasheet and - * allows different analog settings for each channel. - */ - at91_adc_writel(st, AT91_SAMA5D2_MR, - AT91_SAMA5D2_MR_TRANSFER(2) | AT91_SAMA5D2_MR_ANACH); - - at91_adc_setup_samp_freq(st, st->soc_info.min_sample_rate); + at91_adc_init_hw(st, st->soc_info.min_sample_rate); ret = clk_prepare_enable(st->per_clk); if (ret) @@ -541,12 +552,52 @@ static const struct of_device_id at91_adc_dt_match[] = { }; MODULE_DEVICE_TABLE(of, at91_adc_dt_match); +#ifdef CONFIG_PM_SLEEP +static int at91_adc_suspend(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct iio_dev *indio_dev = platform_get_drvdata(pdev); + struct at91_adc_state *st = iio_priv(indio_dev); + + clk_disable_unprepare(st->per_clk); + + regulator_disable(st->vref); + regulator_disable(st->reg); + + return 0; +} + +static int at91_adc_resume(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct iio_dev *indio_dev = platform_get_drvdata(pdev); + struct at91_adc_state *st = iio_priv(indio_dev); + int err; + + err = regulator_enable(st->reg); + if (err) + return err; + + err = regulator_enable(st->vref); + if (err) + return err; + + at91_adc_init_hw(st, st->current_rate); + + err = clk_prepare_enable(st->per_clk); + return err; +} +#endif + +static SIMPLE_DEV_PM_OPS(at91_adc_pm_ops, at91_adc_suspend, at91_adc_resume); + static struct platform_driver at91_adc_driver = { .probe = at91_adc_probe, .remove = at91_adc_remove, .driver = { .name = "at91-sama5d2_adc", .of_match_table = at91_adc_dt_match, + .pm = &at91_adc_pm_ops, }, }; module_platform_driver(at91_adc_driver) From patchwork Fri Sep 8 15:36:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811655 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="TY6o7LVn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphMV6HpPz9t2r for ; Sat, 9 Sep 2017 01:38:47 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932424AbdIHPgc (ORCPT ); Fri, 8 Sep 2017 11:36:32 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:37803 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756599AbdIHPg2 (ORCPT ); Fri, 8 Sep 2017 11:36:28 -0400 Received: by mail-wr0-f193.google.com with SMTP id u48so1404646wrf.4; Fri, 08 Sep 2017 08:36:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NDApdviIu3Db8+b8uunR9YuI98yCLIzKvo6HtsMxdgo=; b=TY6o7LVn7upJV/xZG7/pwh21Y5X/pp1AjKZxOFKXBoqLCvSsEg++mumqANjWJwQlPa Al0tsecTQ4AUPovH1tVgSu3XA/DS7Cj1AHpi8w9b8gHtkTIQw3DlWLbkP95jl6ZohY75 VRmSHCK6eW3Ylm7WHLH1iMxrCavEmu9Af/8c9jZ4cgrzkOW+1pFqEp8SoT8XypxuetwB kaXGu2n3DGivupzya66H03ZL9AoFFKoTKiow5W3PJJDmy5gL3eeEdT98I0sX4caY8qSM cR+GNLFlPAa1pzxx1SAO3gG4/4lJq8e83g69oAn7eKkfV9qyhrExHMCRXpINs7Q3M+pg ufdA== 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=NDApdviIu3Db8+b8uunR9YuI98yCLIzKvo6HtsMxdgo=; b=DjqLWZpKd5dq5nBocteimSsM9lYupJ4Wql8GLduTrgY/hHbT10FqZGMBkJfCOcVeG2 OspF5/y5xpuPHoZ4Ms97MW/HovvCwpHkYLGmoXvQWvnDrxWY2fY156i10yUtoM4Lj1Tl FEoNdboJbzi+X80NYXKj1gbk/lw7GZD4mRzbfOe4BwRqkd/cqFx5J3Xlx36ANWrlIxb+ Rhtp0cc02DGLcBg5K3mai/DBBaEnNhqk9KRCwcimn3ljYqua/A2QLfR9vygdSyTuPeTu Ti+XBXzBOB6nmWnsxqdFlw6NSi3q50U0SsdULGrUdNDx2HX4cuYlDRZ3em54OAFeZ2mK hnxQ== X-Gm-Message-State: AHPjjUhyTlcXg8eccqwA6B1Est4g3kvmWkfLX7z1tt/fn5fBsD2WdkaJ PJZy2BUuS4K9RQ== X-Google-Smtp-Source: ADKCNb6DntRxaG+4IaMIUDWaqhFd16uZqFk7iKuRXdfWIoxx3lusMdsQ/dZa6qIH2pU8xyXYNCtgWg== X-Received: by 10.223.153.163 with SMTP id y32mr2616385wrb.8.1504884986460; Fri, 08 Sep 2017 08:36:26 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:25 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 08/10] pwm: atmel-tcb: Support backup mode Date: Fri, 8 Sep 2017 17:36:02 +0200 Message-Id: <20170908153604.28383-9-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org Save and restore registers for the PWM on suspend and resume, which makes hibernation and backup modes possible. Signed-off-by: Romain Izard --- drivers/pwm/pwm-atmel-tcb.c | 63 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c index 75db585a2a94..acd3ce8ecf3f 100644 --- a/drivers/pwm/pwm-atmel-tcb.c +++ b/drivers/pwm/pwm-atmel-tcb.c @@ -37,11 +37,20 @@ struct atmel_tcb_pwm_device { unsigned period; /* PWM period expressed in clk cycles */ }; +struct atmel_tcb_channel { + u32 enabled; + u32 cmr; + u32 ra; + u32 rb; + u32 rc; +}; + struct atmel_tcb_pwm_chip { struct pwm_chip chip; spinlock_t lock; struct atmel_tc *tc; struct atmel_tcb_pwm_device *pwms[NPWM]; + struct atmel_tcb_channel bkup[NPWM / 2]; }; static inline struct atmel_tcb_pwm_chip *to_tcb_chip(struct pwm_chip *chip) @@ -175,12 +184,15 @@ static void atmel_tcb_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm) * Use software trigger to apply the new setting. * If both PWM devices in this group are disabled we stop the clock. */ - if (!(cmr & (ATMEL_TC_ACPC | ATMEL_TC_BCPC))) + if (!(cmr & (ATMEL_TC_ACPC | ATMEL_TC_BCPC))) { __raw_writel(ATMEL_TC_SWTRG | ATMEL_TC_CLKDIS, regs + ATMEL_TC_REG(group, CCR)); - else + tcbpwmc->bkup[group].enabled = 1; + } else { __raw_writel(ATMEL_TC_SWTRG, regs + ATMEL_TC_REG(group, CCR)); + tcbpwmc->bkup[group].enabled = 0; + } spin_unlock(&tcbpwmc->lock); } @@ -263,6 +275,7 @@ static int atmel_tcb_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) /* Use software trigger to apply the new setting */ __raw_writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, regs + ATMEL_TC_REG(group, CCR)); + tcbpwmc->bkup[group].enabled = 1; spin_unlock(&tcbpwmc->lock); return 0; } @@ -445,10 +458,56 @@ static const struct of_device_id atmel_tcb_pwm_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, atmel_tcb_pwm_dt_ids); +#ifdef CONFIG_PM_SLEEP +static int atmel_tcb_pwm_suspend(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct atmel_tcb_pwm_chip *tcbpwm = platform_get_drvdata(pdev); + void __iomem *base = tcbpwm->tc->regs; + int i; + + for (i = 0; i < (NPWM / 2); i++) { + struct atmel_tcb_channel *chan = &tcbpwm->bkup[i]; + + chan->cmr = readl(base + ATMEL_TC_REG(i, CMR)); + chan->ra = readl(base + ATMEL_TC_REG(i, RA)); + chan->rb = readl(base + ATMEL_TC_REG(i, RB)); + chan->rc = readl(base + ATMEL_TC_REG(i, RC)); + } + return 0; +} + +static int atmel_tcb_pwm_resume(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + struct atmel_tcb_pwm_chip *tcbpwm = platform_get_drvdata(pdev); + void __iomem *base = tcbpwm->tc->regs; + int i; + + for (i = 0; i < (NPWM / 2); i++) { + struct atmel_tcb_channel *chan = &tcbpwm->bkup[i]; + + writel(chan->cmr, base + ATMEL_TC_REG(i, CMR)); + writel(chan->ra, base + ATMEL_TC_REG(i, RA)); + writel(chan->rb, base + ATMEL_TC_REG(i, RB)); + writel(chan->rc, base + ATMEL_TC_REG(i, RC)); + if (chan->enabled) { + writel(ATMEL_TC_CLKEN | ATMEL_TC_SWTRG, + base + ATMEL_TC_REG(i, CCR)); + } + } + return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(atmel_tcb_pwm_pm_ops, atmel_tcb_pwm_suspend, + atmel_tcb_pwm_resume); + static struct platform_driver atmel_tcb_pwm_driver = { .driver = { .name = "atmel-tcb-pwm", .of_match_table = atmel_tcb_pwm_dt_ids, + .pm = &atmel_tcb_pwm_pm_ops, }, .probe = atmel_tcb_pwm_probe, .remove = atmel_tcb_pwm_remove, From patchwork Fri Sep 8 15:36:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811661 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="kQlJKNEO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphVr07hfz9sBZ for ; Sat, 9 Sep 2017 01:45:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932547AbdIHPgg (ORCPT ); Fri, 8 Sep 2017 11:36:36 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:35317 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932217AbdIHPga (ORCPT ); Fri, 8 Sep 2017 11:36:30 -0400 Received: by mail-wr0-f194.google.com with SMTP id n64so1409553wrb.2; Fri, 08 Sep 2017 08:36:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ODEsLfkb3lvipUolMLb7ScB3ja2VrqHu5R+0EqPP1yQ=; b=kQlJKNEOAJMGPm/b6tnfxUlVl2kT6QoNOIRe5QWkqQqCxB9FfRN7t+V9bY8rvDE2H1 EFhXSyYLHX8BeOXM0j1GWFn+SvSGFe2zzXYVxnmJZ4S18sDK/W5DHggP6pS0W+RFWgxX 9FH4Q8iOGOjwk3CBvvPOFL89UK6lm7cSpCOLens3ciAbUTHnvW1frRW5ZD631hWQMKk/ qfLnFagoIiAPK4fVSqLaCVNWDs+mBOAco04yxKJLuHeZ7M7mLvPJDyKzbj6fk9B5b4Df 8od2rk4gjn/oh1E3bedRfkgjF8gEKviKh00GNMcDoG7++AT+oyzFbQdm5gC87L0xU0J+ Ro3w== 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=ODEsLfkb3lvipUolMLb7ScB3ja2VrqHu5R+0EqPP1yQ=; b=jY0AjZSnmNSziFraSsyvPCMTZg3wuyWM3cf1WklnszekW06Jzwc05N7buIO0bD6PZ5 wWU1mEekfkVHk8MHYZzl+OwxP3IXMhlUEFro+jnNoj9S/iTVsfzCvrealAmIkh5phbf1 ANlYKrw5wwIcXUl2Lh05lbGuYrS7Vl0n/NUdz4uzoof2xICIWX4csSZm9E+tOQPtNS0d FTa37ZCX0xRrPy3/iskPLG48aco3bb+sE7JqG/D1WoytQhzPPlE4OmN0oNKFMZsNVqEw 3+quDYkVZPZGi7dAfBBYwpEtgu33xzRTEmrB/bl0zs/dAGuMN+Ke16Uw6Pka5an9uxJK cOZA== X-Gm-Message-State: AHPjjUgu9Kz/khYNY8xhSyvZmxG3uZnBdD89v4PE6VhGnOY8yPpAkxJM mgdG7Bm0plFwhg== X-Google-Smtp-Source: ADKCNb7h6mmGG+LclTSLdoGtlEcr/ag/nvgWL/WEteUruwWBbuJoERN9oSXBzzmou6krUjyx1tllDw== X-Received: by 10.223.157.3 with SMTP id k3mr2436226wre.122.1504884988002; Fri, 08 Sep 2017 08:36:28 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:27 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 09/10] atmel_flexcom: Support backup mode Date: Fri, 8 Sep 2017 17:36:03 +0200 Message-Id: <20170908153604.28383-10-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org The controller used by a flexcom module is configured at boot, and left alone after this. As the configuration will be lost after backup mode, restore the state of the flexcom driver on resume. Signed-off-by: Romain Izard --- drivers/mfd/atmel-flexcom.c | 65 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/drivers/mfd/atmel-flexcom.c b/drivers/mfd/atmel-flexcom.c index 064bde9cff5a..ef1235c4a179 100644 --- a/drivers/mfd/atmel-flexcom.c +++ b/drivers/mfd/atmel-flexcom.c @@ -39,34 +39,44 @@ #define FLEX_MR_OPMODE(opmode) (((opmode) << FLEX_MR_OPMODE_OFFSET) & \ FLEX_MR_OPMODE_MASK) +struct atmel_flexcom { + void __iomem *base; + u32 opmode; + struct clk *clk; +}; static int atmel_flexcom_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; - struct clk *clk; struct resource *res; - void __iomem *base; - u32 opmode; + struct atmel_flexcom *afc; int err; + u32 val; + + afc = devm_kzalloc(&pdev->dev, sizeof(*afc), GFP_KERNEL); + if (!afc) + return -ENOMEM; - err = of_property_read_u32(np, "atmel,flexcom-mode", &opmode); + platform_set_drvdata(pdev, afc); + + err = of_property_read_u32(np, "atmel,flexcom-mode", &afc->opmode); if (err) return err; - if (opmode < ATMEL_FLEXCOM_MODE_USART || - opmode > ATMEL_FLEXCOM_MODE_TWI) + if (afc->opmode < ATMEL_FLEXCOM_MODE_USART || + afc->opmode > ATMEL_FLEXCOM_MODE_TWI) return -EINVAL; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(base)) - return PTR_ERR(base); + afc->base = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(afc->base)) + return PTR_ERR(afc->base); - clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(clk)) - return PTR_ERR(clk); + afc->clk = devm_clk_get(&pdev->dev, NULL); + if (IS_ERR(afc->clk)) + return PTR_ERR(afc->clk); - err = clk_prepare_enable(clk); + err = clk_prepare_enable(afc->clk); if (err) return err; @@ -76,9 +86,10 @@ static int atmel_flexcom_probe(struct platform_device *pdev) * inaccessible and are read as zero. Also the external I/O lines of the * Flexcom are muxed to reach the selected device. */ - writel(FLEX_MR_OPMODE(opmode), base + FLEX_MR); + val = FLEX_MR_OPMODE(afc->opmode); + writel(val, afc->base + FLEX_MR); - clk_disable_unprepare(clk); + clk_disable_unprepare(afc->clk); return devm_of_platform_populate(&pdev->dev); } @@ -89,10 +100,34 @@ static const struct of_device_id atmel_flexcom_of_match[] = { }; MODULE_DEVICE_TABLE(of, atmel_flexcom_of_match); +#ifdef CONFIG_PM_SLEEP +static int atmel_flexcom_resume(struct device *dev) +{ + struct atmel_flexcom *afc = dev_get_drvdata(dev); + int err; + u32 val; + + err = clk_prepare_enable(afc->clk); + if (err) + return err; + + val = FLEX_MR_OPMODE(afc->opmode), + writel(val, afc->base + FLEX_MR); + + clk_disable_unprepare(afc->clk); + + return 0; +} +#endif + +static SIMPLE_DEV_PM_OPS(atmel_flexcom_pm_ops, NULL, + atmel_flexcom_resume); + static struct platform_driver atmel_flexcom_driver = { .probe = atmel_flexcom_probe, .driver = { .name = "atmel_flexcom", + .pm = &atmel_flexcom_pm_ops, .of_match_table = atmel_flexcom_of_match, }, }; From patchwork Fri Sep 8 15:36:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 811663 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pwm-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="r3hwv39J"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xphX05ymPz9sDB for ; Sat, 9 Sep 2017 01:46:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756505AbdIHPh1 (ORCPT ); Fri, 8 Sep 2017 11:37:27 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:36295 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932413AbdIHPgb (ORCPT ); Fri, 8 Sep 2017 11:36:31 -0400 Received: by mail-wr0-f196.google.com with SMTP id g50so1407715wra.3; Fri, 08 Sep 2017 08:36:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+UTzhLnF6voZH5hQ1dSzML3l3kABKBZi1KBSzYm72fc=; b=r3hwv39JRwqsiKWhfSuLRkoB2rMQbv2b9qziWnDfCLKSrii1J/3fCEQfcihdgW2WHf Devm9ZXc+0HRzjELE8Y6znBPWcI1NroFWt37/bhkid1wqDx+u/qAwGGR2VNzbTbW3hk5 KUAaflVdpv2YWB059NMMAXrgA007w4p4p0MKduoS41wxY8qPp2g5mCAXapXp3zhgIw8N OvHt0qtz//NfCbeMf7nXDMDC06DvABT0/J7R/Ir1m6J4vzPM5gY9WFwq8aRAU10puwRc J1IR+sbEo4IMs64irA7uLeMazqc3Jcwuy5AixDB6Kz5NETdcXsOZ618CIKqnar971OBT qqSw== 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=+UTzhLnF6voZH5hQ1dSzML3l3kABKBZi1KBSzYm72fc=; b=Vvb8lHOImdFqnowTEvUVf057LhTt29bI+brVZOChlLoNFXCFx/PvdL4n+PAIxoEqyj 9HHWOx+X7GKtti8dJOVvEDfzMIODxfUt2dCcz2WNj8Mubnz8i2zaiuRDhUY7Bh/Lnn1I hOCJrPfLqk3auGVl5r9MRyqFNxpOiFPbYAn00HAuAUA+Om7VQTVehpZycnDIDX1viIPI GJQ2N2Y8ev6QHgxXoA970J4IUuOIq+/O9ZQbliO6w+WSs5/IH7BOI65eV0L4S8bsOk6d 902y58X32bJjEGtbWPxlHX2vdXm9I9qwzpjBrzZja1Tax5H0ypf+VuFAV0HGM66xasrI Ss4A== X-Gm-Message-State: AHPjjUiEdtletgOb7FiURE6D5Q3RW8a0YCVQFAnt1KNTd2ZNZWV5xXRE uH8AVpITIT4QLQ== X-Google-Smtp-Source: ADKCNb7vwAe4LrS7UxyBxEzoK515bJ07MMTL1qcuKyc7SPEoRv4I4NnY9JyXS29BgBwJToPM0PFUNQ== X-Received: by 10.223.145.163 with SMTP id 32mr2377201wri.279.1504884989387; Fri, 08 Sep 2017 08:36:29 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id p199sm1689224wmb.28.2017.09.08.08.36.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 08 Sep 2017 08:36:28 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , Jonathan Cameron , Wenyou Yang , Josh Wu , David Woodhouse , Brian Norris , Marek Vasut , Cyrille Pitchen , Thierry Reding , Richard Genoud , Greg Kroah-Hartman , Alan Stern Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, linux-mtd@lists.infradead.org, linux-pwm@vger.kernel.org, linux-serial@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Romain Izard Subject: [PATCH v1 10/10] tty/serial: atmel: Prevent a warning on suspend Date: Fri, 8 Sep 2017 17:36:04 +0200 Message-Id: <20170908153604.28383-11-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170908153604.28383-1-romain.izard.pro@gmail.com> References: <20170908153604.28383-1-romain.izard.pro@gmail.com> Sender: linux-pwm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org The atmel serial port driver reported the following warning on suspend: atmel_usart f8020000.serial: ttyS1: Unable to drain transmitter As the ATMEL_US_TXEMPTY status bit in ATMEL_US_CSR is always cleared when the transmitter is disabled, we need to know the transmitter's state to return the real fifo state. And as ATMEL_US_CR is write-only, it is necessary to save the state of the transmitter in a local variable, and update the variable when TXEN and TXDIS is written in ATMEL_US_CR. After those changes, atmel_tx_empty can return "empty" on suspend, the warning in uart_suspend_port disappears, and suspending is 20ms shorter for each enabled Atmel serial port. Signed-off-by: Romain Izard --- drivers/tty/serial/atmel_serial.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index 7551cab438ff..195c0d1b594e 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c @@ -171,6 +171,7 @@ struct atmel_uart_port { bool has_hw_timer; struct timer_list uart_timer; + bool tx_stopped; bool suspended; unsigned int pending; unsigned int pending_status; @@ -380,6 +381,10 @@ static int atmel_config_rs485(struct uart_port *port, */ static u_int atmel_tx_empty(struct uart_port *port) { + struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); + + if (atmel_port->tx_stopped) + return TIOCSER_TEMT; return (atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXEMPTY) ? TIOCSER_TEMT : 0; @@ -485,6 +490,7 @@ static void atmel_stop_tx(struct uart_port *port) * is fully transmitted. */ atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS); + atmel_port->tx_stopped = true; /* Disable interrupts */ atmel_uart_writel(port, ATMEL_US_IDR, atmel_port->tx_done_mask); @@ -492,6 +498,7 @@ static void atmel_stop_tx(struct uart_port *port) if ((port->rs485.flags & SER_RS485_ENABLED) && !(port->rs485.flags & SER_RS485_RX_DURING_TX)) atmel_start_rx(port); + } /* @@ -521,6 +528,7 @@ static void atmel_start_tx(struct uart_port *port) /* re-enable the transmitter */ atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); + atmel_port->tx_stopped = false; } /* @@ -1866,6 +1874,7 @@ static int atmel_startup(struct uart_port *port) atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); /* enable xmit & rcvr */ atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); + atmel_port->tx_stopped = false; setup_timer(&atmel_port->uart_timer, atmel_uart_timer_callback, @@ -2122,6 +2131,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, /* disable receiver and transmitter */ atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXDIS | ATMEL_US_RXDIS); + atmel_port->tx_stopped = true; /* mode */ if (port->rs485.flags & SER_RS485_ENABLED) { @@ -2207,6 +2217,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, atmel_uart_writel(port, ATMEL_US_BRGR, quot); atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); + atmel_port->tx_stopped = false; /* restore interrupts */ atmel_uart_writel(port, ATMEL_US_IER, imr); @@ -2450,6 +2461,7 @@ static void atmel_console_write(struct console *co, const char *s, u_int count) /* Make sure that tx path is actually able to send characters */ atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN); + atmel_port->tx_stopped = false; uart_console_write(port, s, count, atmel_console_putchar); @@ -2528,6 +2540,7 @@ static int __init atmel_console_setup(struct console *co, char *options) atmel_uart_writel(port, ATMEL_US_IDR, -1); atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_TXEN | ATMEL_US_RXEN); + atmel_port->tx_stopped = false; if (options) uart_parse_options(options, &baud, &parity, &bits, &flow);