From patchwork Fri Sep 15 14:04: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: 814293 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="DHIV2a9T"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxzt1jHrz9s7m for ; Sat, 16 Sep 2017 00:07:22 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751459AbdIOOEu (ORCPT ); Fri, 15 Sep 2017 10:04:50 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:37809 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751364AbdIOOEq (ORCPT ); Fri, 15 Sep 2017 10:04:46 -0400 Received: by mail-wm0-f67.google.com with SMTP id f4so2877910wmh.4; Fri, 15 Sep 2017 07:04:45 -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=DHIV2a9TdiWH89jWBKI6sRjXAfqJgVe5qYzlKSZf0hZO77U3hfHFvjgkfIatLK547Y IYWDXFZpkEqpTcNsTNZrbW+2X9oJ8Lh1W3CpzXP9A1zZ0MY1kBZ265Pag1WF7edMy6Xy P+eXosvsTFMwYycJ/cuvBTfKMKL6LnmGAa51VFJ5LY4LkU6d5xJiu1QTAKpJVbn4Jjon 3j0rkBPnFtN6+FnXy86XoX9vB2fu7L9tUYCD//kRakcmf0j/1kEyBNIVOuvnyi5Jyleg Q2bbIhjcOqNzqih/ew3zUXwvEMuKHtX86oDyYwyltw5Gsk7Rnl5ZAdEMTKlGD500EyYU /khA== 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=K+2aqRcSobLpB6Thz84dx9mnmIQv0B5gKZSxCqspNcXHI+6lie8+eWnMF1Cb25vNpA TsnzuBWZzF5as5zUlWeQ6kHeWbO/u+VsjMcSPI95LE+7/Xp3C2Fe7lrcoL20yyRecmXA mWzJLyOeTa/stXDi5Op87cnTsCgcmV01CRKRKxDtaZgdTNotL16a+ISbFsgNOkFmvi5w mAZzs/+/vbZyilIFuNXric4zeePWDrz0XPhoHFooBEbe/jRQHANaKvDHIP6HGlwL9fOF FSjpBU0MrNvFhvPWkmyUSJrV02Kb3nRZZ3oEqxk/Wy9FqwMxuRVPCY4PGLXG0eqAYD9q nVzA== X-Gm-Message-State: AHPjjUjdk47dJjB4hZZARPxhaoGT4LuAIOb5GwwnySRzD0QbPguOfXLB 68nuN+VivOkmdvQXdb4/Agg= X-Google-Smtp-Source: AOwi7QAl2xippvS5p8vsv7LTu8pczrn78LKP+GFjl6fUtAGFUh9arHyp+CJyMv/45ePzYEMy+yl89w== X-Received: by 10.28.185.195 with SMTP id j186mr2831376wmf.97.1505484285041; Fri, 15 Sep 2017 07:04:45 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.04.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:04:44 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 1/9] clk: at91: pmc: Wait for clocks when resuming Date: Fri, 15 Sep 2017 16:04:03 +0200 Message-Id: <20170915140411.31716-2-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 Acked-by: Ludovic Desroches Acked-by: Nicolas Ferre --- 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 15 14:04: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: 814292 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="A6B2EtRF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxzd1T3cz9s7m for ; Sat, 16 Sep 2017 00:07:09 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751513AbdIOOEz (ORCPT ); Fri, 15 Sep 2017 10:04:55 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33654 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751501AbdIOOEw (ORCPT ); Fri, 15 Sep 2017 10:04:52 -0400 Received: by mail-wm0-f68.google.com with SMTP id 187so2895423wmn.0; Fri, 15 Sep 2017 07:04:51 -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=d2QPQyjMsXWSkJdc6MMuWv4m8CSK75I6LdWz80n+/Ss=; b=A6B2EtRFbbGmJntQM3/J5U2AOEYnWzhULhQGdWDo2Q59QYVhbMquu23ZQ37xcJZisW 4DsUhgwDclx3vc3d5FQcbDCbgsjxT4FIpdisQLpkWLw7/0U9uvGQjuMxTXS9BsK9SitL fR66liVy6ftVlmz6ejuhq4QeHaDLtwTILnZ6sxtvkjd02zUK0NNXHI2YUu/jKBI/ocJc XKQF/AWb0+Yfhw63xgJM+bICkXmahdnTyDfDaLRq4EOTVC+4vSDl1DxKb/1QDhBSpKk/ X44scVjApUaGqGDkvfV1OEHmLe448hVezH3+/dCya96apgw4SQZXmejbCHogAN0fKqYU 9Ftg== 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=d2QPQyjMsXWSkJdc6MMuWv4m8CSK75I6LdWz80n+/Ss=; b=VQsLTvfNi0hxjm3AuFD904FcRJNnfEi0ENu90BzL+EVJAjzXobkkcGT0Xp4v5OF6Rk IWbnUAoZ1wDrB2F1dTnZr5osVF7W2ULUQzWFzsNYVfFwq+i6J7l08CKldAD09n2waVdx D3iFjIxFto+8scNQ96p+lCkYtP6Et53xCLqxXjoKeyLVIJ69TlFD+82yBRqhp0O05znA f4oyRCmuMt3nDjWOwN+/zClKt6E8P8CKgwC5Xz4G0fzK8jco/xuhpZOHGJFMndQYbfF7 gBejgPx1GStaoIotoetpXWUnp2PmoL+XiCD0wFdTn6VrjYJH8a0tsaodCwbJHbFdLt5/ G5yA== X-Gm-Message-State: AHPjjUgwg2NMLlhg0nx5s/s2RFJPDcw1g7JxJAhhZlcizLRlWWqScVmT LShmIuN+uKLvKZ+tLkgY7ns= X-Google-Smtp-Source: AOwi7QAw+CSr7pME9R8zS3lvKdo/wRfxxEmzXMqRo3Dclpy5X5gGHIjayhRZSQ+nX2mZReHNoI2fUA== X-Received: by 10.28.187.214 with SMTP id l205mr2720447wmf.9.1505484290916; Fri, 15 Sep 2017 07:04:50 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.04.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:04:50 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 2/9] clk: at91: pmc: Save SCSR during suspend Date: Fri, 15 Sep 2017 16:04:04 +0200 Message-Id: <20170915140411.31716-3-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 15 14:04:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814291 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="juBwY/T+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxzN11X8z9s7m for ; Sat, 16 Sep 2017 00:06:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751563AbdIOOE7 (ORCPT ); Fri, 15 Sep 2017 10:04:59 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:37385 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751509AbdIOOE4 (ORCPT ); Fri, 15 Sep 2017 10:04:56 -0400 Received: by mail-wr0-f196.google.com with SMTP id u48so1368770wrf.4; Fri, 15 Sep 2017 07:04:55 -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=tcS6Herze/XO57KCIuaC04ZS3Cd91y6u2sAFJ0Y0QYc=; b=juBwY/T+1sZCvqvkfvLxBJvFOWd40tjGXaZi1QP6UEZ7XihOq3awXva745BYAnl6S1 za6HmrH7esfL1xNR4UeB5ah0uKbFRip34RxtaFxrRoExUDXLOaZwbICCbZxchKnX/rVQ Cyc6hW18SxyP076+bWcUi1RUiOXq2Hz2SpQn/e/0nat18/M9oqLoDUYekkgJaVfTaHr/ 1RVYpBm8S+GZOr04SRJ58HXaE82/Or13BmUPN9BoFn0+lkNYniU+PtQSGs4xGa89nh3z mCKyfkZMk0Te9OMdGFvtozWmk09YhAZmiNyWLlOKfRPb5+Cjlsm4j3FLyMy/412uVVF/ AHeg== 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=tcS6Herze/XO57KCIuaC04ZS3Cd91y6u2sAFJ0Y0QYc=; b=e0Zd5PucH5v0Trjt6yeE0BSdOJa97wmMQfTQQXt7Or3neOL/Lqhbr56Siq0SEEI/rd r8hPYmnqP01ajK7XfNj7L1lsgkSc6o+FTwNqn9ZMOtajY07sR6suKJ19TULlzUlBy7MF XXzPstVHpkFgOJjKJuX1iyL2mFI868GnCrRL7ix6JVgtl/knX5/1ejXFr7T2MlxkYuMO 5urh2esU5AyB8Tserg4cDSl5nTRcdXhqfunyjkZ91F1SsUnRcLoxasVBPH5L042y4cF8 hDsHT20Bwva/JLoc7GUsToQHXc9hc8tCCSQ8FIghe1ANQ98MdjUXFA8uvzvKKxQq6Ok0 7OxA== X-Gm-Message-State: AHPjjUh08sjOCCyBBK8mwvZYcYV2bg1qMt0jGyB8KR+LfTIvSsUKOzcA 4/3TVnMdXifnCg== X-Google-Smtp-Source: ADKCNb7vZvs7t42OlzdTuEKE7RoeAicJOZpG8jluqnP2AmAADxLIQUkMncYgW6RKRl4mrb33pibNoQ== X-Received: by 10.223.164.13 with SMTP id d13mr23475824wra.48.1505484294860; Fri, 15 Sep 2017 07:04:54 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.04.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:04:54 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 3/9] clk: at91: pmc: Support backup for programmable clocks Date: Fri, 15 Sep 2017 16:04:05 +0200 Message-Id: <20170915140411.31716-4-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 When an AT91 programmable clock is declared in the device tree, register it into the Power Management Controller driver. On entering suspend mode, the driver saves and restores the Programmable Clock registers to support the backup mode for these clocks. Signed-off-by: Romain Izard Acked-by: Nicolas Ferre --- Changes in v2: * register PCKs on clock startup drivers/clk/at91/clk-programmable.c | 2 ++ drivers/clk/at91/pmc.c | 27 +++++++++++++++++++++++++++ drivers/clk/at91/pmc.h | 2 ++ 3 files changed, 31 insertions(+) diff --git a/drivers/clk/at91/clk-programmable.c b/drivers/clk/at91/clk-programmable.c index 85a449cf61e3..0e6aab1252fc 100644 --- a/drivers/clk/at91/clk-programmable.c +++ b/drivers/clk/at91/clk-programmable.c @@ -204,6 +204,8 @@ at91_clk_register_programmable(struct regmap *regmap, if (ret) { kfree(prog); hw = ERR_PTR(ret); + } else { + pmc_register_pck(id); } return hw; diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 07dc2861ad3f..3910b7537152 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -22,6 +22,7 @@ #include "pmc.h" #define PMC_MAX_IDS 128 +#define PMC_MAX_PCKS 8 int of_at91_get_clk_range(struct device_node *np, const char *propname, struct clk_range *range) @@ -50,6 +51,7 @@ EXPORT_SYMBOL_GPL(of_at91_get_clk_range); static struct regmap *pmcreg; static u8 registered_ids[PMC_MAX_IDS]; +static u8 registered_pcks[PMC_MAX_PCKS]; static struct { @@ -66,8 +68,10 @@ static struct u32 pcr[PMC_MAX_IDS]; u32 audio_pll0; u32 audio_pll1; + u32 pckr[PMC_MAX_PCKS]; } pmc_cache; +/* Clock ID 0 is invalid */ void pmc_register_id(u8 id) { int i; @@ -82,6 +86,21 @@ void pmc_register_id(u8 id) } } +/* Programmable Clock 0 is valid */ +void pmc_register_pck(u8 pck) +{ + int i; + + for (i = 0; i < PMC_MAX_PCKS; i++) { + if (registered_pcks[i] == 0) { + registered_pcks[i] = pck + 1; + break; + } + if (registered_pcks[i] == (pck + 1)) + break; + } +} + static int pmc_suspend(void) { int i; @@ -103,6 +122,10 @@ static int pmc_suspend(void) regmap_read(pmcreg, AT91_PMC_PCR, &pmc_cache.pcr[registered_ids[i]]); } + for (i = 0; registered_pcks[i]; i++) { + u8 num = registered_pcks[i] - 1; + regmap_read(pmcreg, AT91_PMC_PCKR(num), &pmc_cache.pckr[num]); + } return 0; } @@ -143,6 +166,10 @@ static void pmc_resume(void) pmc_cache.pcr[registered_ids[i]] | AT91_PMC_PCR_CMD); } + for (i = 0; registered_pcks[i]; i++) { + u8 num = registered_pcks[i] - 1; + regmap_write(pmcreg, AT91_PMC_PCKR(num), pmc_cache.pckr[num]); + } if (pmc_cache.uckr & AT91_PMC_UPLLEN) mask |= AT91_PMC_LOCKU; diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h index 858e8ef7e8db..d22b1fa9ecdc 100644 --- a/drivers/clk/at91/pmc.h +++ b/drivers/clk/at91/pmc.h @@ -31,8 +31,10 @@ int of_at91_get_clk_range(struct device_node *np, const char *propname, #ifdef CONFIG_PM void pmc_register_id(u8 id); +void pmc_register_pck(u8 pck); #else static inline void pmc_register_id(u8 id) {} +static inline void pmc_register_pck(u8 pck) {} #endif #endif /* __PMC_H_ */ From patchwork Fri Sep 15 14:04:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814282 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="YxWca4af"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxxD6rJ9z9t2S for ; Sat, 16 Sep 2017 00:05:04 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751618AbdIOOFD (ORCPT ); Fri, 15 Sep 2017 10:05:03 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:33735 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751501AbdIOOFA (ORCPT ); Fri, 15 Sep 2017 10:05:00 -0400 Received: by mail-wm0-f68.google.com with SMTP id 187so2895938wmn.0; Fri, 15 Sep 2017 07:04:59 -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=YxWca4afXXd++jaVBaAXFaVt91CHnKpKJ9pUKAST9NOd6Sj0u5NWVV0+UPh3wggxJ6 VkXsqPT9nJ+EnFHRSARuMtR5C/p/lQRGB8eBvcfWd0THgyX6EIt0H+xr2tbiGbEilKix pfBA6iD9xDIxFkhE8D6jKCH7uR4CHmWlNqMaGvi+ZECuVV5UlPC/zxfsKMiMKdpoEDrl TSmTxw+qS/Ga6VIyX1jZ4iuBvAXa2x04g5tuOpfFK+53AczufHqa4WqVoHwz1MHHrEBy 4oUVH5Raf81PqXadDFS/gGU+i/FGbHuUh9gBmRkWL5j9ANEjXXK54ib2Ld2GGXQAEvKe Hzuw== 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=KgQbO1zJOPEPh6IZJocP5xPG+irz0lh+I4cVuUHFNAinRboFKOyaV65D0ErBqZFGXz HsxBfIEnrb/dRRBO4QQljMnVMaRGqFlCthvlc0AveLsaVq1SqrNzyH0IXo1edH28iXE+ syUdSvfBYfz8GZuLjhcLRre7RFXH1r4U+7jukFh7Q0JLNONBZ96wCPzWuhW6VCYNQgfV wJuene7JcPD2nXosmWQx36aGpr+0YvBfnKoy98cSs2Sbq0LhLLkKu7+OxBeDWgzRkM1F yA9+bRxT2CBWcILo7wBT+fxUJszmCy6veulx3SUvAV09wNEg8w1r5mayDs6Wi18Y5FSR YWSg== X-Gm-Message-State: AHPjjUhT2PTnu4KJEVuUvo8BagKXtibz+IUOFyJKkogbHsp1yAcPVTK0 g9G3hDr81hq1ccgZGuxZoKA= X-Google-Smtp-Source: AOwi7QCNKS4lV/BQsBWIo0q3kBz4OTpfhHuaC03IOuO/Dq3FfZPOhELHDKF6UrUX3hx59KweFUKstQ== X-Received: by 10.28.130.130 with SMTP id e124mr2671760wmd.75.1505484298568; Fri, 15 Sep 2017 07:04:58 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.04.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:04:58 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 4/9] mtd: nand: atmel: Avoid ECC errors when leaving backup mode Date: Fri, 15 Sep 2017 16:04:06 +0200 Message-Id: <20170915140411.31716-5-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 15 14:04:07 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814283 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="OqgyhTsS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxxQ60lRz9s7m for ; Sat, 16 Sep 2017 00:05:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751701AbdIOOFN (ORCPT ); Fri, 15 Sep 2017 10:05:13 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:38301 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751651AbdIOOFJ (ORCPT ); Fri, 15 Sep 2017 10:05:09 -0400 Received: by mail-wm0-f66.google.com with SMTP id x17so2862548wmd.5; Fri, 15 Sep 2017 07:05:08 -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=OqgyhTsSOUMP1mVjyu/obvgk3bNOtKuna5CRZtg9kBCdhq7TnEgjhGITEIisIEQAW7 Mut/LLFCccw82cWRFBQRWeWN9egZpx86KwadjaGsCrevoyWSCp3nnrpQIIkbnEg5iVgz U6K7wLmk9ApCXK2EyUySCYTAPIuICMYbKpNGC2lqX6+lY/rJL0V1aZWkzZKaz1eYJdQ9 ryBJ+fI+RurDDJoy2zGUcUtN+PqZqmuT1zq4twvNm1r9GKLuMKycO5hzY6m2B7h5M1xl oUekFS6p52VqfHfHPARmjvjiVTDWbhmIRYdNhOYbu96axJ/Uh+UgpoyFKyMSbo1RtoRk /tbw== 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=Qjew6ZqGW5nPoOhOqNiygixGz6O5tEMLZsdJYG2uBexWb0vJ8ncvaDxAHfmXxmkZUv 0cesB6XVQT0cEXz9X1T7SDmDTH7tJnvnqExKIW1dl6sZ7m1Jj7VX8wY3U/SvKw7GGULY hUacfwRfdtAIkRM7BBFvXQ8u6Xa8PnoX5oNLY0RNv3FtP3UOw7iyJaihnZfVrL8drSSw 7YM6v5MBYTzcC4KB+4+MQAq+o9PoTJwYnn/lUQUa/2Oh8FxQBeJ63W2fA/6TwKF/4GGA ZBC359Ynsxd/M/JIU6Fjx/531A2QD3VJc84yHb31zRUEglPexEEuye2TjFt6uym5yLzp eRlg== X-Gm-Message-State: AHPjjUgF2X7qB33UImFXg14EzrKN7VySvHcm7o3aOQILIMImcxVKfImi tEAZ5H1/uDmFF6MRgiyHi/g= X-Google-Smtp-Source: AOwi7QBnCD+VHqUcD6q/tJCH+iN6CxlbVr6SP3fS133oqL63dNXiXTxV1nTYTt8BdvqglV3ugcBYFA== X-Received: by 10.28.30.133 with SMTP id e127mr2668086wme.8.1505484307983; Fri, 15 Sep 2017 07:05:07 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.04.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:05:07 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 5/9] mtd: nand: atmel: Report PMECC failures as errors Date: Fri, 15 Sep 2017 16:04:07 +0200 Message-Id: <20170915140411.31716-6-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 15 14:04:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814289 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="vh9O4Tsy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxyl4LQxz9s7m for ; Sat, 16 Sep 2017 00:06:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751724AbdIOOFT (ORCPT ); Fri, 15 Sep 2017 10:05:19 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:37483 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751705AbdIOOFP (ORCPT ); Fri, 15 Sep 2017 10:05:15 -0400 Received: by mail-wr0-f194.google.com with SMTP id u48so1369328wrf.4; Fri, 15 Sep 2017 07:05:14 -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=vh9O4Tsybr3bhL5ObliPQMU4ynOXM25qIyf623a8YIWFLByJDGLQOkVpjeoIKV+l5k /OcWc4knDbg7ZUchOQwsmDu08RLMR1wGB9JYDbR2YUGmaYSEDzicJyRSLKY372gP5S6j lVLJr+PBNEw+Hat2G/phHQbn3Cf5x7z34WlXDje7GzIlb/RhnXtK2i8ovoSfVtynj4Pf HYb64//DR1sa7+YjItgKGqORNYM3r4504TdZOOFTa5SbkrabyLx3qe8IVU50RIhcoBuG qOzLS/+M2FbE9zHldM3TtrRP3WFpSlM7KJkBIP0muj2hKyeLOuYWIHLyNaHeVHC2hBQ0 rX2w== 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=BdbrfeTAQrT8d5gTm73DRJ7fkMUSWQPTGhh1gWrjF3dyiF4prwTDjgIVn9pUQrhIYn r5AH1ocFjCmWsCjCNqN5/kb1SEpg7E5aCd96cT2uHWUSRQcsMi+9AhdkT8KwDufmCtrL eQWLxcv3EsBqdQKWBOXuPrirGwp9OTTs5SE/6PZBQ91ppYKsgNdFBYqYWjamBhAQKB1d r2TcyXCL45+P0/mZZVtfw+LBUouxtTb7OhTs+KGny9SAbv7CgdmOGbAAhsJk4N4+AfeE OEmmtcTXFd72FBYIRenjlZ7UHshdIlcqFggbmX95CfAeRHYedYOUWYCQ4oNVFrI9/qO8 A2rw== X-Gm-Message-State: AHPjjUghbhmX+8WXK+VU9/rREVm5wsP5/Tx+u4ytsT3PwS8sqUEDUxKh vIdTWyNQbZGSkg== X-Google-Smtp-Source: ADKCNb7xekKSIL47MdNvldeVKMomoc2DB4T5GEPnXy5IO1uEfSOTCKq9skNfzLcZO+c/tsY4GPjtwA== X-Received: by 10.223.186.67 with SMTP id t3mr21517131wrg.22.1505484314064; Fri, 15 Sep 2017 07:05:14 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.05.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:05:13 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 6/9] ehci-atmel: Power down during suspend is normal Date: Fri, 15 Sep 2017 16:04:08 +0200 Message-Id: <20170915140411.31716-7-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 Acked-by: Nicolas Ferre --- 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 15 14:04:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814288 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="NsXItSlw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxyY65Wpz9s7m for ; Sat, 16 Sep 2017 00:06:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751779AbdIOOFY (ORCPT ); Fri, 15 Sep 2017 10:05:24 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:32863 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751722AbdIOOFV (ORCPT ); Fri, 15 Sep 2017 10:05:21 -0400 Received: by mail-wm0-f65.google.com with SMTP id 187so2896767wmn.0; Fri, 15 Sep 2017 07:05:19 -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=NsXItSlwD4A9tvzFll/dkYxjdg2t2OOFp4fV0xrsLEXpOk2gM+OWC5SVSQTN1UCcKP lnvDp6CSCeT7rP5nDeiybbYY8KvzVPJhzHAM7jKI64tKWO9sQKNznUY2AnWEfQjSCC4d kaAXWKdC55/GuqaS9mX2qN4alVr1M+4fiMJLlRpt3g9bsDjM+WDPWz3x+ufHYtpGtVuI eRsJZrOgDNqaowm6slrV754BVBN6K2s4qbsjROKCk9YBnSOvFyaXCEurvOBp6+bg04DB H/r61yqQDHVDB6bLbEz/KOgN/uvvz+H8nmyJ0V1eSdC6OAkSJEV96l1hoi/Gy5RegH33 6sWw== 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=RJXR5JvrHNgWBJqRYaEaDj0lLpmqwqEX7ly78JXfsFXIJYkBLqdkz6dOYIGdTivwrB GfhIvdxRKKWkRJbL+1rQ0xT8PbT3Tyj0UsyRopT/tGYbI0LD7HoFCRnqn5QpIWgN4q2A cDok/+zRfKVMFoDi7Jri0BjlnKaSzEdb9FaqWPpXgTdzN2AAoqv5RrhG0AQFE4fpAFEi 4p4ITVPg83KFxDurNg8xEZ6owCvMULFj8x5XCDKYi+eSTnS66maLIWSLs48fUnPN6GoX VaQLJuwv7+U3/m/I9r/KM057B+8ZKoM/0IoNliG4irUvwrz/VOMpUi/TpPCZdboHrF7w ES6A== X-Gm-Message-State: AHPjjUhsu7Wc1tQIrBbxkEyNqy6ToXC+iH6SQKCKbTPVW62WYUS/5Hhm c0nhNyokD6z7OCIF9NMSUPU= X-Google-Smtp-Source: AOwi7QAzIH6/hvAbIjH5zOvMcSOgiafNuls3LtckCGR5v/XnKDsOaLV8qFkRPKDf0LBNpw65e4vbNg== X-Received: by 10.28.187.214 with SMTP id l205mr2721766wmf.9.1505484319233; Fri, 15 Sep 2017 07:05: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 55sm1399225wrw.60.2017.09.15.07.05.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:05:18 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 7/9] pwm: atmel-tcb: Support backup mode Date: Fri, 15 Sep 2017 16:04:09 +0200 Message-Id: <20170915140411.31716-8-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 Acked-by: Nicolas Ferre --- 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 15 14:04:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814287 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="Vz4eHogN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxyJ3rXhz9s7m for ; Sat, 16 Sep 2017 00:06:00 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751807AbdIOOF3 (ORCPT ); Fri, 15 Sep 2017 10:05:29 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:36110 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751763AbdIOOFZ (ORCPT ); Fri, 15 Sep 2017 10:05:25 -0400 Received: by mail-wm0-f68.google.com with SMTP id r136so2880284wmf.3; Fri, 15 Sep 2017 07:05: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=ODEsLfkb3lvipUolMLb7ScB3ja2VrqHu5R+0EqPP1yQ=; b=Vz4eHogNuFZtrs459jCkrZME/mXSzcY/ntIVWkZYaQacPkTHTx+njTFg+TGvC55/6i fxAGIbXjFhIcmzj0/tIpQRqw2vlkWTX+9tXreC8ftfeMtkQ+h2LVNgTDzRdKsFmA1h0l BoUx8D/ChIvJeCrHFobMw65IwnmDw1G8b8LJIWg9foQhuHm4QZtvlouSzxYIVHIYYoor Siso/gJKctJhI44NEv6Q+WINXYZhpFW5Z7Nd7GWgv0pqGNRgri6O8T9t8B6vYUYvXOk2 6JU/qDokz5guhug6069TrZgeBZ7+jkWj7YyctmMZO3teypn/pzbGdhNt5dtTVsMhXshh uhtQ== 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=AJL12iN+OcWBUrMOT/VIp8pSlHOZ65ancj8UVf7NJq+k2R4clcu9ArD8w6l/gGiYkc M8nFwAJtpwCB15YHfJg698IT66j6jqOwOQJyPPrW+oHKKS+ZjawtEvhc/hGDP4bOgTYf dnAAMAGPZQJEAmhpYucl7z878eJ2f5tuyhnREAOWwtco+5z58LBAt+Ww2444QfowGvwu 3nVb4aBHt77Mm3zDWcYvu69QSpp8TDtuT6zWiniEdd5fE4owexrSSBAmXCOTlG81hhc9 dq8Wg+9dWmbjxeQ1VMVoyN8KLA7V3FKYt1EcpVVL5NePTGRrjBCtZur2PwD2XRZ1x9kS dxlg== X-Gm-Message-State: AHPjjUgtaE6MXHRmBAj0srwQ4MXioYrixqfDi6WnukqVCCfR13JwZxEq yNXY4gq5hAGVfA== X-Google-Smtp-Source: AOwi7QCOef+RXEJBnjjDFj/p05u60boDHKBXpRxZDqyBH0nHdF2araAMSHn2pIOqKXfTYBc49j6e7w== X-Received: by 10.28.60.8 with SMTP id j8mr2670666wma.16.1505484323627; Fri, 15 Sep 2017 07:05: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 55sm1399225wrw.60.2017.09.15.07.05.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:05:23 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 8/9] atmel_flexcom: Support backup mode Date: Fri, 15 Sep 2017 16:04:10 +0200 Message-Id: <20170915140411.31716-9-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 Tested-by: Nicolas Ferre Acked-by: Nicolas Ferre --- 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 15 14:04:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Romain Izard X-Patchwork-Id: 814285 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="bie29Lk4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xtxxx2STqz9s7m for ; Sat, 16 Sep 2017 00:05:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751868AbdIOOFh (ORCPT ); Fri, 15 Sep 2017 10:05:37 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:36801 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751763AbdIOOFd (ORCPT ); Fri, 15 Sep 2017 10:05:33 -0400 Received: by mail-wr0-f196.google.com with SMTP id g50so1369124wra.3; Fri, 15 Sep 2017 07:05:32 -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=GfldR+qnGXYQcdupA0hg9Id/GUmPUGImlAO61011BXc=; b=bie29Lk42PJf8RGHINcDhWT2LnkOZYYx4xl7E3/yBCIi7SOOgYQuoebLYdVmSSoCss waEDs7twJ8urQAKKWd3X905GqpTUITw3J+0Ura40TIlGHu8/pYW4sSdIkQ7oAFcuazfh vaALU4U0km91GqRyDKzjB/ek2Ktwt9LIGm1xMfB1D68qOUnoKWHj42OdVM8c+aXobIVP hPjoAXYPUrxzby2IoNz6ci8ikntqsgxDdt2TlOjYBFzEOQKraAa4ze1tVKuLRKRtwjT5 qGFJ3j+MlRMOY9KR+Du4gIXC47R4Zy739NQyK7D7S6vhBvNeMgAggJf6DwXFhNFe7ZA+ cyvA== 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=GfldR+qnGXYQcdupA0hg9Id/GUmPUGImlAO61011BXc=; b=bim0Xp1Em7TBubOA0aFFYmpH9IYhmkl85PE9laXK0ccwyImxWd+2xgyZG29CXZZ9d4 eDgRR11GHcCYB+LO4T0HyNshELoj0ziF9Ta7NLEb66Vm19A+aHWJApunuwk/+Ba2PWm1 shd42Wc5JsSVsH3OLCcQ1fCJUQUuaK5PdIBKsZQsax26SEll7rettrPUAi7l7TGXDluO NMJ7Q1meyJSdh8tLNSk4JS6PGN9FBj3OTHiZLZ4iGGG86JnxvkWaRb0rEPLBgLZdeY3w YEWRHWX3V4OIfV4ya9acuAxulQrwFbyzC/Jv9cEbooUvnhIZPvBdgLcsTc+TVQNd30Cl hu4g== X-Gm-Message-State: AHPjjUipJRJSHqIUOI+gWKjaEL7HhJDzRq0G7GVb+gYLs3w3mfKocWJF Wcjc3uuXWdZAcQ== X-Google-Smtp-Source: ADKCNb6HbWewqWC1gS5/tQnC1OS5KQB+rS/Vci7LKAHECr0BBp2kmOMsThuyTXmG7HIucY10ZVnKBg== X-Received: by 10.223.150.113 with SMTP id c46mr20173265wra.30.1505484331631; Fri, 15 Sep 2017 07:05:31 -0700 (PDT) Received: from localhost.localdomain (146.187.3.109.rev.sfr.net. [109.3.187.146]) by smtp.gmail.com with ESMTPSA id 55sm1399225wrw.60.2017.09.15.07.05.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2017 07:05:31 -0700 (PDT) From: Romain Izard To: Nicolas Ferre , Alexandre Belloni , Boris Brezillon , Michael Turquette , Stephen Boyd , Ludovic Desroches , 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-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 v2 9/9] tty/serial: atmel: Prevent a warning on suspend Date: Fri, 15 Sep 2017 16:04:11 +0200 Message-Id: <20170915140411.31716-10-romain.izard.pro@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170915140411.31716-1-romain.izard.pro@gmail.com> References: <20170915140411.31716-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 Tested-by: Nicolas Ferre Acked-by: Nicolas Ferre Acked-by: Richard Genoud --- drivers/tty/serial/atmel_serial.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index 7551cab438ff..783af6648be0 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); @@ -2511,6 +2523,7 @@ static int __init atmel_console_setup(struct console *co, char *options) { int ret; struct uart_port *port = &atmel_ports[co->index].uart; + struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); int baud = 115200; int bits = 8; int parity = 'n'; @@ -2528,6 +2541,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);