Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1665820

[RFT 2/2] pinctrl: samsung: Fix invalid register offset used for Exynos5433 external interrupts

From Krzysztof Kozlowski <krzk@kernel.org>
Newsgroups linux.kernel
Subject [RFT 2/2] pinctrl: samsung: Fix invalid register offset used for Exynos5433 external interrupts
Date 2017-06-14 15:20 +0200
Message-ID <tSgng-5F5-21@gated-at.bofh.it> (permalink)
References <tSgng-5F5-15@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


When setting the pin function for external interrupts, the driver used
wrong IO memory address base.  The pin function register is always under
pctl_base, not the eint_base.

By updating wrong register, the external interrupts for chosen GPIO
would not work at all and some other GPIO might be configured to wrong
value.

Platforms other than Exynos5433 should not be affected as eint_base
equals pctl_base in such case.

Fixes: 8b1bd11c1f8f ("pinctrl: samsung: Add the support the multiple IORESOURCE_MEM for one pin-bank")
Cc: <stable@vger.kernel.org>
Reported-by: Tomasz Figa <tomasz.figa@gmail.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>

---

Tested on Odroid XU3 (so actually this particular case was not
reproduced).
Please kindly test on Exynos5433.
---
 drivers/pinctrl/samsung/pinctrl-exynos.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c
index 96068b40d32a..d95a746f45d7 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos.c
@@ -174,10 +174,10 @@ static int exynos_irq_request_resources(struct irq_data *irqd)
 
 	spin_lock_irqsave(&bank->slock, flags);
 
-	con = readl(bank->eint_base + reg_con);
+	con = readl(bank->pctl_base + reg_con);
 	con &= ~(mask << shift);
 	con |= EXYNOS_EINT_FUNC << shift;
-	writel(con, bank->eint_base + reg_con);
+	writel(con, bank->pctl_base + reg_con);
 
 	spin_unlock_irqrestore(&bank->slock, flags);
 
@@ -206,10 +206,10 @@ static void exynos_irq_release_resources(struct irq_data *irqd)
 
 	spin_lock_irqsave(&bank->slock, flags);
 
-	con = readl(bank->eint_base + reg_con);
+	con = readl(bank->pctl_base + reg_con);
 	con &= ~(mask << shift);
 	con |= FUNC_INPUT << shift;
-	writel(con, bank->eint_base + reg_con);
+	writel(con, bank->pctl_base + reg_con);
 
 	spin_unlock_irqrestore(&bank->slock, flags);
 
-- 
2.9.3

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[RFT 1/2] pinctrl: samsung: Fix NULL pointer exception on external interrupts on S3C24xx Krzysztof Kozlowski <krzk@kernel.org> - 2017-06-14 15:20 +0200
  [RFT 2/2] pinctrl: samsung: Fix invalid register offset used for Exynos5433 external interrupts Krzysztof Kozlowski <krzk@kernel.org> - 2017-06-14 15:20 +0200
    Re: [RFT 2/2] pinctrl: samsung: Fix invalid register offset used  for Exynos5433 external interrupts Sylwester Nawrocki <s.nawrocki@samsung.com> - 2017-06-16 16:10 +0200
  Re: [RFT 1/2] pinctrl: samsung: Fix NULL pointer exception on  external interrupts on S3C24xx Yao Lihua <ylhuajnu@163.com> - 2017-06-15 16:50 +0200
    Re: [RFT 1/2] pinctrl: samsung: Fix NULL pointer exception on  external interrupts on S3C24xx Krzysztof Kozlowski <krzk@kernel.org> - 2017-06-15 17:30 +0200

csiph-web