Re: Fwd: BUG#200905 pxa_gpio conflicing with others arches

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Nicolas Chauvet <kwizart@xxxxxxxxx> writes:

> Hi,
>
> I'm trying to report an issue to the pxa_gpio maintainer.
> The issue is described here:
> https://bugzilla.kernel.org/show_bug.cgi?id=200905
>
> Basically, the pxa_gpio driver got registered on unrelated hw (here a
> tegra20 device).
> This lead to issue, specially on suspend.
Hi Nicolas,

Okay, I have a patch I'll submit for that in [1], which you can test.

Yet it is abnormal you have compiled in the gpio-pxa driver, as it depends on
either CONFIG_ARCH_PXA or CONFIG_ARCH_MMP, which are not selected for tegra
devices.

Could you reply with your .config attached please ?

Cheers.

-- 
Robert

[1] Patch
---8>---
>From 7284ed6256e75c49532d1b7867af1b3a10e0a569 Mon Sep 17 00:00:00 2001
From: Robert Jarzmik <robert.jarzmik@xxxxxxx>
Date: Thu, 23 Aug 2018 21:14:44 +0200
Subject: [PATCH] gpio: pxa: handle corner case of unprobed device

In the corner case where the gpio driver probe fails, for whatever
reason, the suspend and resume handlers will still be called as they
have to be registered as syscore operations.

Therefore, add a failsafe in these function, and test if a proper probe
succeeded and the driver is functional.

Signed-off-by: Robert Jarzmik <robert.jarzmik@xxxxxxx>
---
 drivers/gpio/gpio-pxa.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
index c18712dabf93..2d09be799ab6 100644
--- a/drivers/gpio/gpio-pxa.c
+++ b/drivers/gpio/gpio-pxa.c
@@ -776,6 +776,9 @@ static int pxa_gpio_suspend(void)
 	struct pxa_gpio_bank *c;
 	int gpio;
 
+	if (!pchip)
+		return 0;
+
 	for_each_gpio_bank(gpio, c, pchip) {
 		c->saved_gplr = readl_relaxed(c->regbase + GPLR_OFFSET);
 		c->saved_gpdr = readl_relaxed(c->regbase + GPDR_OFFSET);
@@ -794,6 +797,9 @@ static void pxa_gpio_resume(void)
 	struct pxa_gpio_bank *c;
 	int gpio;
 
+	if (!pchip)
+		return 0;
+
 	for_each_gpio_bank(gpio, c, pchip) {
 		/* restore level with set/clear */
 		writel_relaxed(c->saved_gplr, c->regbase + GPSR_OFFSET);
-- 
2.11.0




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux