Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp631523ybt; Fri, 19 Jun 2020 09:46:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxvfCobuF7W6cTwLf+5DPMUGY6oTendY+Su3wgNe4/nqGxkkH+P/GZcWYqlLdonHJiy17Kk X-Received: by 2002:a05:6402:144f:: with SMTP id d15mr4207674edx.114.1592585164473; Fri, 19 Jun 2020 09:46:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592585164; cv=none; d=google.com; s=arc-20160816; b=y33SMJEb9B5CcgfeRH9hKyoXzaRfanYboqzmDorGzFt2zHOGsGcpjZxa3R6+4DW4E6 ysW9P5xiV/X79nBVMjld0o8zNyojeVLEewN/n36XDbRq+3Rz4fVpAhZJCwDq05AjMLzH MkAJJCGMi+Uzs+iH/ZfgyWEUu0Zz5WNn9jrCmiz0ujfsEbzw50zSHwLmH0bekDY2dbRh oa9NXdxDlDIUxDCk6MnaAicGIsOVdiei9QkQZaTDpcBt7i+1gz7cxpxiFZUcdjy3XMEJ X890r0X3n0LF6ts2dECV8ypwwjKqcqtCWiWaCg8SJ6+z2WGijqChx+aNLex5vUDC04bQ C8Vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=LhEKgm4lDNa96Sa6im/D0RPOEvWMuvsp0TydH6hLE74=; b=TMEcMY7iQ2KgGD6aMebYITSjRQGhbuZXZ45+ezl0N5QsVsGpLWYVXFCLHBpEsxh38K sFJYhPTy8z1Aka3csLk1+3JPPFLTMzZ8XW1apGNUvEGcMd/OvykXFWf3Nsg6G6jM69RE 5M0DDhv9a3TaPUWlzavx6lIJSjA9RuIWwrO+o1BIaACnZyPFMRWvrEaCI6JkoMIwF+I7 XdLXN1lYKsX+MkvrZs8/3ZSGvGKZ85n2YCsYbJ2PYIsEzcpchfR3FzrUaYvSUwxzHFmE B+0BFrBnmebXmErQ48VSgKZYVW6bFseI1rS1ETKPx78q+ytwr7W45y0Edgm1aGdu7UWM M6gA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=N7A5+iGZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c14si3996131ejx.415.2020.06.19.09.45.42; Fri, 19 Jun 2020 09:46:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=N7A5+iGZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2395526AbgFSQmr (ORCPT + 99 others); Fri, 19 Jun 2020 12:42:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:35452 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388539AbgFSOoM (ORCPT ); Fri, 19 Jun 2020 10:44:12 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 127A021707; Fri, 19 Jun 2020 14:44:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592577852; bh=NTJMUJCxpHMDa8d4wYRp0uqp9B3nj5/p/FcbB5VR9ew=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=N7A5+iGZ8LgAQ5dMvXYmZpwjIw1wrtqiXy5a9msvFR7isRFDoZ14r2pDNAKyQcUnA RbgX1GIMxCKmxBpo2ATn3eHiJOnUZtMRLOAAgrvL9Cg+tQFfszVBvFMJmV7YCXaLys MlFhIoxcxOVd9tx+9auuvlt9VMxt+yHhhGmpmkEI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jonathan Bakker , Krzysztof Kozlowski Subject: [PATCH 4.9 115/128] pinctrl: samsung: Save/restore eint_mask over suspend for EINT_TYPE GPIOs Date: Fri, 19 Jun 2020 16:33:29 +0200 Message-Id: <20200619141626.213304694@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141620.148019466@linuxfoundation.org> References: <20200619141620.148019466@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jonathan Bakker commit f354157a7d184db430c1a564c506434e33b1bec5 upstream. Currently, for EINT_TYPE GPIOs, the CON and FLTCON registers are saved and restored over a suspend/resume cycle. However, the EINT_MASK registers are not. On S5PV210 at the very least, these registers are not retained over suspend, leading to the interrupts remaining masked upon resume and therefore no interrupts being triggered for the device. There should be no effect on any SoCs that do retain these registers as theoretically we would just be re-writing what was already there. Fixes: 7ccbc60cd9c2 ("pinctrl: exynos: Handle suspend/resume of GPIO EINT registers") Cc: Signed-off-by: Jonathan Bakker Signed-off-by: Krzysztof Kozlowski Signed-off-by: Greg Kroah-Hartman --- drivers/pinctrl/samsung/pinctrl-exynos.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/drivers/pinctrl/samsung/pinctrl-exynos.c +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c @@ -289,6 +289,7 @@ struct exynos_eint_gpio_save { u32 eint_con; u32 eint_fltcon0; u32 eint_fltcon1; + u32 eint_mask; }; /* @@ -585,10 +586,13 @@ static void exynos_pinctrl_suspend_bank( + 2 * bank->eint_offset); save->eint_fltcon1 = readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET + 2 * bank->eint_offset + 4); + save->eint_mask = readl(regs + bank->irq_chip->eint_mask + + bank->eint_offset); pr_debug("%s: save con %#010x\n", bank->name, save->eint_con); pr_debug("%s: save fltcon0 %#010x\n", bank->name, save->eint_fltcon0); pr_debug("%s: save fltcon1 %#010x\n", bank->name, save->eint_fltcon1); + pr_debug("%s: save mask %#010x\n", bank->name, save->eint_mask); } static void exynos_pinctrl_suspend(struct samsung_pinctrl_drv_data *drvdata) @@ -617,6 +621,9 @@ static void exynos_pinctrl_resume_bank( pr_debug("%s: fltcon1 %#010x => %#010x\n", bank->name, readl(regs + EXYNOS_GPIO_EFLTCON_OFFSET + 2 * bank->eint_offset + 4), save->eint_fltcon1); + pr_debug("%s: mask %#010x => %#010x\n", bank->name, + readl(regs + bank->irq_chip->eint_mask + + bank->eint_offset), save->eint_mask); writel(save->eint_con, regs + EXYNOS_GPIO_ECON_OFFSET + bank->eint_offset); @@ -624,6 +631,8 @@ static void exynos_pinctrl_resume_bank( + 2 * bank->eint_offset); writel(save->eint_fltcon1, regs + EXYNOS_GPIO_EFLTCON_OFFSET + 2 * bank->eint_offset + 4); + writel(save->eint_mask, regs + bank->irq_chip->eint_mask + + bank->eint_offset); } static void exynos_pinctrl_resume(struct samsung_pinctrl_drv_data *drvdata)