Received: by 10.192.165.148 with SMTP id m20csp1478140imm; Wed, 2 May 2018 23:22:30 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoSJIkxERAGpgHfA6KgNakknVd9A5eVZ2HpLc7KptuF9s4ksDRQxURVhAH93LYcIpNPfA5i X-Received: by 2002:a17:902:6041:: with SMTP id a1-v6mr22584826plt.59.1525328550127; Wed, 02 May 2018 23:22:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525328550; cv=none; d=google.com; s=arc-20160816; b=znZw/e71W6VFXiFYZwikEjif6CFcQBbKYEU1o8JRwoFPllOs7uO/oiHVMb36fEJA4F yOK4XQZFS+4lmvisYk3hTUzNy4VYnBA35kfy3GtuyM3uYRFb8f3IKFbJqi3cqlWNx+lY AQUxhi3pOIRRGGdgzrEcbZpVfpYwGfGioLm5mRghTBlCKNhX5dPKlQybNbXjkfsRZkBG TnQKgM/K8NEzw8PypEbWp6F3j5UxuFFXbUtNNYXeNnZ10Y6D12O4+7tEDcyvOYZdgoCD ItLwf2f7NdEJUuKBQZtB134gU6YeNt4d0EDPi5V3ARNVrL4e0NMc7a8c8JRJQ5egTm4T FARA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=SgoVemsm5i4W4CseXQfjso607cI1sgr6nqN6tl91Z9w=; b=Alfet4URBPilUSCRCrYDcGS5kZrOyfi5hs5THeK9jgEe0Ds/a4iDegMPJ9YOLixA+c Ssyo9bNqzFih2IlDnzeXPUdBwZr1d/Iy2CP9R2P/AwVdnLJOCAyOkkKXNZhPgLWRD+b6 BN1E0I7OrfCEZlarW12qnu6DmhvhPOZ9twQ4AdJvwl8XCzMIFwF1EQuibR2Hi8H2Xi8f ba0pgU88rNHp/Nhs9zWt9UBB8s5jqGGLM3L/1jL978sRkiQHzqm2uJIa3yaf5b6mXUOk QRK4t0PYRDcUVyEHkvhi7S9cIHXmyhAmY/+reyRIZkHGu3d1Tg8cepOGNPcZUGeXELzd f0dA== 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 3-v6si13470410plh.47.2018.05.02.23.22.15; Wed, 02 May 2018 23:22:30 -0700 (PDT) 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 S1752006AbeECGWG (ORCPT + 99 others); Thu, 3 May 2018 02:22:06 -0400 Received: from regular1.263xmail.com ([211.150.99.136]:49417 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750923AbeECGWD (ORCPT ); Thu, 3 May 2018 02:22:03 -0400 X-Greylist: delayed 438 seconds by postgrey-1.27 at vger.kernel.org; Thu, 03 May 2018 02:22:02 EDT Received: from jeffy.chen?rock-chips.com (unknown [192.168.167.236]) by regular1.263xmail.com (Postfix) with ESMTP id D80E161; Thu, 3 May 2018 14:14:38 +0800 (CST) X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 Received: from localhost (localhost [127.0.0.1]) by smtp.263.net (Postfix) with ESMTPA id 04EEF381; Thu, 3 May 2018 14:14:04 +0800 (CST) X-IP-DOMAINF: 1 X-RL-SENDER: jeffy.chen@rock-chips.com X-FST-TO: linux-kernel@vger.kernel.org X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: jeffy.chen@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-SENDER: cjf@rock-chips.com X-DNS-TYPE: 0 Received: from localhost (unknown [103.29.142.67]) by smtp.263.net (Postfix) whith ESMTP id 137235XK5QU; Thu, 03 May 2018 14:14:27 +0800 (CST) From: Jeffy Chen To: linux-kernel@vger.kernel.org Cc: briannorris@google.com, heiko@sntech.de, Jeffy Chen , linux-rockchip@lists.infradead.org, Linus Walleij , linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH] pinctrl: rockchip: Disable interrupt when changing it's capability Date: Thu, 3 May 2018 14:13:57 +0800 Message-Id: <20180503061357.5697-1-jeffy.chen@rock-chips.com> X-Mailer: git-send-email 2.11.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We saw spurious irq when changing irq's trigger type, for example setting gpio-keys's wakeup irq trigger type. And according to the TRM: "Programming the GPIO registers for interrupt capability, edge-sensitive or level-sensitive interrupts, and interrupt polarity should be completed prior to enabling the interrupts on Port A in order to prevent spurious glitches on the interrupt lines to the interrupt controller." Reported-by: Brian Norris Signed-off-by: Jeffy Chen --- drivers/pinctrl/pinctrl-rockchip.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 3924779f55785..7ff45ec8330d1 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -2727,9 +2727,19 @@ static int rockchip_irq_set_type(struct irq_data *d, unsigned int type) return -EINVAL; } + /** + * According to the TRM, we should keep irq disabled during programming + * interrupt capability to prevent spurious glitches on the interrupt + * lines to the interrupt controller. + */ + data = readl(bank->reg_base + GPIO_INTEN); + writel_relaxed(data & ~mask, gc->reg_base + GPIO_INTEN); + writel_relaxed(level, gc->reg_base + GPIO_INTTYPE_LEVEL); writel_relaxed(polarity, gc->reg_base + GPIO_INT_POLARITY); + writel_relaxed(data, gc->reg_base + GPIO_INTEN); + irq_gc_unlock(gc); raw_spin_unlock_irqrestore(&bank->slock, flags); clk_disable(bank->clk); -- 2.11.0