devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] omap-gpmc wait pin additions
@ 2022-09-01 12:41 B. Niedermayr
  2022-09-01 12:41 ` [PATCH 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-01 12:41 UTC (permalink / raw)
  To: linux-omap, devicetree; +Cc: rogerq, tony, krzk, robh+dt

From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>

There is currently no possibility for the gpmc to set either the
waitp-pin polarity or use the same wait-pin for different cs-regions.

While the current implementation may fullfill most usecases, it may not
be sufficient for more complex setups (e.g. FPGA/ASIC interfaces), where 
more complex interfacing options where possible.

For example interfacing an ASIC which offers multiple cs-regions but
only one waitpin the current driver and dt-bindings are not sufficient.

While using the same waitpin for different cs-regions worked for older
kernels (4.14) the omap-gpmc.c driver refused to probe (-EBUSY) with
newer kernels (>5.10). 


Benedikt Niedermayr (3):
  memory: omap-gpmc: allow shared wait pins
  memory: omap-gpmc: add support for wait pin polarity
  dt-bindings: memory-controllers: gpmc-child: Add binding for
    wait-pin-polarity

 .../memory-controllers/ti,gpmc-child.yaml     |  7 ++++
 drivers/memory/omap-gpmc.c                    | 38 +++++++++++++++----
 include/linux/platform_data/gpmc-omap.h       |  1 +
 3 files changed, 39 insertions(+), 7 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] memory: omap-gpmc: allow shared wait pins
  2022-09-01 12:41 [PATCH 0/3] omap-gpmc wait pin additions B. Niedermayr
@ 2022-09-01 12:41 ` B. Niedermayr
  2022-09-01 12:41 ` [PATCH 2/3] memory: omap-gpmc: add support for wait pin polarity B. Niedermayr
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-01 12:41 UTC (permalink / raw)
  To: linux-omap, devicetree; +Cc: rogerq, tony, krzk, robh+dt

From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>

Newer kernels refuse to probe when using the same wait pin for
different chipselect regions.

But this may be a usecase when connecting for example FPGA or ASIC
modules to the gpmc, which only got one wait pin installed.

Signed-off-by: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
---
 drivers/memory/omap-gpmc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index d9bf1c2ac319..e3674a15b934 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -2221,9 +2221,13 @@ static int gpmc_probe_generic_child(struct platform_device *pdev,
 							 GPIO_ACTIVE_HIGH,
 							 GPIOD_IN);
 		if (IS_ERR(waitpin_desc)) {
-			dev_err(&pdev->dev, "invalid wait-pin: %d\n", wait_pin);
 			ret = PTR_ERR(waitpin_desc);
-			goto err;
+			if (ret == -EBUSY) {
+				dev_info(&pdev->dev, "shared wait-pin: %d\n", wait_pin);
+			} else {
+				dev_err(&pdev->dev, "invalid wait-pin: %d\n", wait_pin);
+				goto err;
+			}
 		}
 	}
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] memory: omap-gpmc: add support for wait pin polarity
  2022-09-01 12:41 [PATCH 0/3] omap-gpmc wait pin additions B. Niedermayr
  2022-09-01 12:41 ` [PATCH 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
@ 2022-09-01 12:41 ` B. Niedermayr
  2022-09-01 12:41 ` [PATCH 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity B. Niedermayr
  2022-09-01 12:56 ` [PATCH 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
  3 siblings, 0 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-01 12:41 UTC (permalink / raw)
  To: linux-omap, devicetree; +Cc: rogerq, tony, krzk, robh+dt

From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>

Setting the wait pin polarity from the device tree is currently not
possible. The device tree property "gpmc,wait-pin-polarity" can be used
for that. If this property is missing the previous default value
is used instead, which preserves backwards compatibility.

The wait pin polarity is then set via the gpiochip
direction_input callback function.

Signed-off-by: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
---
 drivers/memory/omap-gpmc.c              | 30 ++++++++++++++++++++-----
 include/linux/platform_data/gpmc-omap.h |  1 +
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index e3674a15b934..5d1948179471 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -33,6 +33,8 @@
 
 #include <linux/platform_data/mtd-nand-omap2.h>
 
+#include "../gpio/gpiolib.h"
+
 #define	DEVICE_NAME		"omap-gpmc"
 
 /* GPMC register offsets */
@@ -1985,6 +1987,11 @@ void gpmc_read_settings_dt(struct device_node *np, struct gpmc_settings *p)
 							"gpmc,wait-on-read");
 		p->wait_on_write = of_property_read_bool(np,
 							 "gpmc,wait-on-write");
+		p->wait_pin_polarity = of_property_read_u32(np,
+								 "gpmc,wait-pin-polarity",
+								 &p->wait_pin_polarity);
+		if (p->wait_pin_polarity < 0)
+			p->wait_pin_polarity = GPIO_ACTIVE_HIGH;
 		if (!p->wait_on_read && !p->wait_on_write)
 			pr_debug("%s: rd/wr wait monitoring not enabled!\n",
 				 __func__);
@@ -2216,10 +2223,11 @@ static int gpmc_probe_generic_child(struct platform_device *pdev,
 	if (gpmc_s.wait_on_read || gpmc_s.wait_on_write) {
 		unsigned int wait_pin = gpmc_s.wait_pin;
 
-		waitpin_desc = gpiochip_request_own_desc(&gpmc->gpio_chip,
-							 wait_pin, "WAITPIN",
-							 GPIO_ACTIVE_HIGH,
-							 GPIOD_IN);
+		waitpin_desc =
+			gpiochip_request_own_desc(&gpmc->gpio_chip,
+				wait_pin, "WAITPIN",
+				gpmc_s.wait_pin_polarity ? GPIO_ACTIVE_HIGH : GPIO_ACTIVE_LOW,
+				GPIOD_IN);
 		if (IS_ERR(waitpin_desc)) {
 			ret = PTR_ERR(waitpin_desc);
 			if (ret == -EBUSY) {
@@ -2348,7 +2356,19 @@ static int gpmc_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
 static int gpmc_gpio_direction_input(struct gpio_chip *chip,
 				     unsigned int offset)
 {
-	return 0;	/* we're input only */
+	u32 reg;
+	struct gpio_desc *desc = gpiochip_get_desc(chip, offset);
+
+	offset += 8;
+	reg = gpmc_read_reg(GPMC_CONFIG);
+
+	if (BIT(FLAG_ACTIVE_LOW) & desc->flags)
+		reg &= ~BIT(offset);
+	else
+		reg |= BIT(offset);
+
+	gpmc_write_reg(GPMC_CONFIG, reg);
+	return 0;
 }
 
 static int gpmc_gpio_direction_output(struct gpio_chip *chip,
diff --git a/include/linux/platform_data/gpmc-omap.h b/include/linux/platform_data/gpmc-omap.h
index c9cc4e32435d..bf4f2246f31d 100644
--- a/include/linux/platform_data/gpmc-omap.h
+++ b/include/linux/platform_data/gpmc-omap.h
@@ -149,6 +149,7 @@ struct gpmc_settings {
 	u32 device_width;	/* device bus width (8 or 16 bit) */
 	u32 mux_add_data;	/* multiplex address & data */
 	u32 wait_pin;		/* wait-pin to be used */
+	u32 wait_pin_polarity;	/* wait-pin polarity */
 };
 
 /* Data for each chip select */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity
  2022-09-01 12:41 [PATCH 0/3] omap-gpmc wait pin additions B. Niedermayr
  2022-09-01 12:41 ` [PATCH 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
  2022-09-01 12:41 ` [PATCH 2/3] memory: omap-gpmc: add support for wait pin polarity B. Niedermayr
@ 2022-09-01 12:41 ` B. Niedermayr
  2022-09-01 12:56 ` [PATCH 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
  3 siblings, 0 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-01 12:41 UTC (permalink / raw)
  To: linux-omap, devicetree; +Cc: rogerq, tony, krzk, robh+dt

From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>

Add a new dt-binding for the wait-pin-polarity property

Signed-off-by: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
---
 .../bindings/memory-controllers/ti,gpmc-child.yaml         | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml
index 6e3995bb1630..7c721206f10b 100644
--- a/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml
+++ b/Documentation/devicetree/bindings/memory-controllers/ti,gpmc-child.yaml
@@ -230,6 +230,13 @@ properties:
       Wait-pin used by client. Must be less than "gpmc,num-waitpins".
     $ref: /schemas/types.yaml#/definitions/uint32
 
+  gpmc,wait-pin-polarity:
+    description: |
+      Wait-pin polarity used by the clien. It relates to the pin defined
+      with "gpmc,wait-pin".
+    $ref: /schemas/types.yaml#/definitions/uint32
+    default: 0
+
   gpmc,wait-on-read:
     description: Enables wait monitoring on reads.
     type: boolean
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] omap-gpmc wait pin additions
  2022-09-01 12:41 [PATCH 0/3] omap-gpmc wait pin additions B. Niedermayr
                   ` (2 preceding siblings ...)
  2022-09-01 12:41 ` [PATCH 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity B. Niedermayr
@ 2022-09-01 12:56 ` Krzysztof Kozlowski
  2022-09-01 13:02   ` Niedermayr, BENEDIKT
  3 siblings, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-01 12:56 UTC (permalink / raw)
  To: B. Niedermayr, linux-omap, devicetree; +Cc: rogerq, tony, robh+dt

On 01/09/2022 15:41, B. Niedermayr wrote:
> From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
> 
> There is currently no possibility for the gpmc to set either the
> waitp-pin polarity or use the same wait-pin for different cs-regions.
> 
> While the current implementation may fullfill most usecases, it may not
> be sufficient for more complex setups (e.g. FPGA/ASIC interfaces), where 
> more complex interfacing options where possible.
> 
> For example interfacing an ASIC which offers multiple cs-regions but
> only one waitpin the current driver and dt-bindings are not sufficient.
> 
> While using the same waitpin for different cs-regions worked for older
> kernels (4.14) the omap-gpmc.c driver refused to probe (-EBUSY) with
> newer kernels (>5.10). 

Please base your patches on a recent Linux kernel (judging by CC list
this is something old) - either current RC or linux-next.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] omap-gpmc wait pin additions
  2022-09-01 12:56 ` [PATCH 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
@ 2022-09-01 13:02   ` Niedermayr, BENEDIKT
  2022-09-01 13:11     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 7+ messages in thread
From: Niedermayr, BENEDIKT @ 2022-09-01 13:02 UTC (permalink / raw)
  To: devicetree@vger.kernel.org, krzk@kernel.org,
	linux-omap@vger.kernel.org
  Cc: rogerq@kernel.org, tony@atomide.com, robh+dt@kernel.org

On Thu, 2022-09-01 at 15:56 +0300, Krzysztof Kozlowski wrote:
> On 01/09/2022 15:41, B. Niedermayr wrote:
> > From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
> > 
> > There is currently no possibility for the gpmc to set either the
> > waitp-pin polarity or use the same wait-pin for different cs-
> > regions.
> > 
> > While the current implementation may fullfill most usecases, it may
> > not
> > be sufficient for more complex setups (e.g. FPGA/ASIC interfaces),
> > where 
> > more complex interfacing options where possible.
> > 
> > For example interfacing an ASIC which offers multiple cs-regions
> > but
> > only one waitpin the current driver and dt-bindings are not
> > sufficient.
> > 
> > While using the same waitpin for different cs-regions worked for
> > older
> > kernels (4.14) the omap-gpmc.c driver refused to probe (-EBUSY)
> > with
> > newer kernels (>5.10). 
> 
> Please base your patches on a recent Linux kernel (judging by CC list
> this is something old) - either current RC or linux-next.
> 
> Best regards,
> Krzysztof


... and create a v2 patch series then?

Best regards,

Benedikt


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] omap-gpmc wait pin additions
  2022-09-01 13:02   ` Niedermayr, BENEDIKT
@ 2022-09-01 13:11     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 7+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-01 13:11 UTC (permalink / raw)
  To: Niedermayr, BENEDIKT, devicetree@vger.kernel.org,
	linux-omap@vger.kernel.org
  Cc: rogerq@kernel.org, tony@atomide.com, robh+dt@kernel.org

On 01/09/2022 16:02, Niedermayr, BENEDIKT wrote:
> On Thu, 2022-09-01 at 15:56 +0300, Krzysztof Kozlowski wrote:
>> On 01/09/2022 15:41, B. Niedermayr wrote:
>>> From: Benedikt Niedermayr <benedikt.niedermayr@siemens.com>
>>>
>>> There is currently no possibility for the gpmc to set either the
>>> waitp-pin polarity or use the same wait-pin for different cs-
>>> regions.
>>>
>>> While the current implementation may fullfill most usecases, it may
>>> not
>>> be sufficient for more complex setups (e.g. FPGA/ASIC interfaces),
>>> where 
>>> more complex interfacing options where possible.
>>>
>>> For example interfacing an ASIC which offers multiple cs-regions
>>> but
>>> only one waitpin the current driver and dt-bindings are not
>>> sufficient.
>>>
>>> While using the same waitpin for different cs-regions worked for
>>> older
>>> kernels (4.14) the omap-gpmc.c driver refused to probe (-EBUSY)
>>> with
>>> newer kernels (>5.10). 
>>
>> Please base your patches on a recent Linux kernel (judging by CC list
>> this is something old) - either current RC or linux-next.
>>
>> Best regards,
>> Krzysztof
> 
> 
> ... and create a v2 patch series then?

Just for updating email addresses - no need. If the code was rebased and
tested on something old, then yes, please.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-09-01 13:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-01 12:41 [PATCH 0/3] omap-gpmc wait pin additions B. Niedermayr
2022-09-01 12:41 ` [PATCH 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
2022-09-01 12:41 ` [PATCH 2/3] memory: omap-gpmc: add support for wait pin polarity B. Niedermayr
2022-09-01 12:41 ` [PATCH 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity B. Niedermayr
2022-09-01 12:56 ` [PATCH 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
2022-09-01 13:02   ` Niedermayr, BENEDIKT
2022-09-01 13:11     ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).