Received: by 10.223.185.116 with SMTP id b49csp2289570wrg; Thu, 15 Feb 2018 09:19:21 -0800 (PST) X-Google-Smtp-Source: AH8x227YKNGNZKFs+5EmTQxupc2iJRWjmsDQpfiNLHVHvx6lMgTK2BSxyL45e58Me73+nuIocXNC X-Received: by 10.98.215.12 with SMTP id b12mr3287793pfh.149.1518715161339; Thu, 15 Feb 2018 09:19:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518715161; cv=none; d=google.com; s=arc-20160816; b=QnFC9W5fSEkwJqqTgF0/X8G0NdQQAgcEbc6WFod75DZkR9YQbgL/kEkNEboiOLVg+W Z77pzYwpniK5AnM/bGs+Vpk7N6Qqy6An9+yQYqJ6xL7XiPDn0X0LNjr0jy+OESugKl8r 08QkDUA0e/A+JwT2/Ez0arwT3EeXs98ZH0wf6gSg9bQ3D4ZRiddugXPo94tabDiQdrEF ux51k2pxcpXoBI+2UQ87vuceB16OIDtjmvuXgIf35jbUOp5kLJnvcUuiOrHHCdGlBY0I 6RrhFCoEFjXESp6DsRUZbaWQfX2Ol39Eg6+evwZ/geQyZRVOLzvGRu9+GZzus6zzi9WU 50mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=T3TN3gIULLyQ1D90gtMwRuOod54vjedgKhnIeHX8lJk=; b=jb9Tevc622CuAxvdYSAy1uE95catPFkmLnDpGHLaJQT5JhBhEhNchiADf2bvcuuS1G 9rgzZNFrhD5OqvRCI8VD3BlIoWwKo3zcUO5YMJEzxK2JIgc50U2dxRfkpl+RtwddpHgk y0Q1UReP/MLPyIuphUpORdaLkEK+JLvYXFqF0qxHmy/mcbsJawK0BynEul0MkQbSDMFT ZazBuwqVeaXhqXnemahzy60J+koB++FsbZWRnLfRv9y3/DV1nRtFIiRTgwVxk5zAbHV/ Ai7bA5Y8V0lOhLMyK2WY5OvzcLI7Fj8dQWYZ/FftwR9fvZZ5wpDgFU6qMqBHdPh5NyJX VmuQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q10si1274239pgd.335.2018.02.15.09.19.05; Thu, 15 Feb 2018 09:19:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422854AbeBOPgO (ORCPT + 99 others); Thu, 15 Feb 2018 10:36:14 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:57676 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1422839AbeBOPgJ (ORCPT ); Thu, 15 Feb 2018 10:36:09 -0500 Received: from localhost (LFbn-1-12258-90.w90-92.abo.wanadoo.fr [90.92.71.90]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 0BE6C1159; Thu, 15 Feb 2018 15:36:08 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Martin Kaiser , Guenter Roeck , Wim Van Sebroeck Subject: [PATCH 4.14 145/195] watchdog: imx2_wdt: restore previous timeout after suspend+resume Date: Thu, 15 Feb 2018 16:17:16 +0100 Message-Id: <20180215151713.058774078@linuxfoundation.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20180215151705.738773577@linuxfoundation.org> References: <20180215151705.738773577@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.14-stable review patch. If anyone has any objections, please let me know. ------------------ From: Martin Kaiser commit 0be267255cef64e1c58475baa7b25568355a3816 upstream. When the watchdog device is suspended, its timeout is set to the maximum value. During resume, the previously set timeout should be restored. This does not work at the moment. The suspend function calls imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME); and resume reverts this by calling imx2_wdt_set_timeout(wdog, wdog->timeout); However, imx2_wdt_set_timeout() updates wdog->timeout. Therefore, wdog->timeout is set to IMX2_WDT_MAX_TIME when we enter the resume function. Fix this by adding a new function __imx2_wdt_set_timeout() which only updates the hardware settings. imx2_wdt_set_timeout() now calls __imx2_wdt_set_timeout() and then saves the new timeout to wdog->timeout. During suspend, we call __imx2_wdt_set_timeout() directly so that wdog->timeout won't be updated and we can restore the previous value during resume. This approach makes wdog->timeout different from the actual setting in the hardware which is usually not a good thing. However, the two differ only while we're suspended and no kernel code is running, so it should be ok in this case. Signed-off-by: Martin Kaiser Reviewed-by: Guenter Roeck Signed-off-by: Guenter Roeck Signed-off-by: Wim Van Sebroeck Signed-off-by: Greg Kroah-Hartman --- drivers/watchdog/imx2_wdt.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) --- a/drivers/watchdog/imx2_wdt.c +++ b/drivers/watchdog/imx2_wdt.c @@ -169,15 +169,21 @@ static int imx2_wdt_ping(struct watchdog return 0; } -static int imx2_wdt_set_timeout(struct watchdog_device *wdog, - unsigned int new_timeout) +static void __imx2_wdt_set_timeout(struct watchdog_device *wdog, + unsigned int new_timeout) { struct imx2_wdt_device *wdev = watchdog_get_drvdata(wdog); - wdog->timeout = new_timeout; - regmap_update_bits(wdev->regmap, IMX2_WDT_WCR, IMX2_WDT_WCR_WT, WDOG_SEC_TO_COUNT(new_timeout)); +} + +static int imx2_wdt_set_timeout(struct watchdog_device *wdog, + unsigned int new_timeout) +{ + __imx2_wdt_set_timeout(wdog, new_timeout); + + wdog->timeout = new_timeout; return 0; } @@ -371,7 +377,11 @@ static int imx2_wdt_suspend(struct devic /* The watchdog IP block is running */ if (imx2_wdt_is_running(wdev)) { - imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME); + /* + * Don't update wdog->timeout, we'll restore the current value + * during resume. + */ + __imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME); imx2_wdt_ping(wdog); }