* [PATCH v2 1/3] memory: omap-gpmc: allow shared wait pins
2022-09-02 9:10 [PATCH v2 0/3] omap-gpmc wait pin additions B. Niedermayr
@ 2022-09-02 9:10 ` B. Niedermayr
2022-09-02 9:10 ` [PATCH v2 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-02 9:10 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 2351f2708da2..579903457415 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -2215,9 +2215,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 v2 2/3] memory: omap-gpmc: add support for wait pin polarity
2022-09-02 9:10 [PATCH v2 0/3] omap-gpmc wait pin additions B. Niedermayr
2022-09-02 9:10 ` [PATCH v2 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
@ 2022-09-02 9:10 ` B. Niedermayr
2022-09-02 9:10 ` [PATCH v2 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity B. Niedermayr
2022-09-05 6:44 ` [PATCH v2 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
3 siblings, 0 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-02 9:10 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 579903457415..be3c35ae9619 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -35,6 +35,8 @@
#include <linux/platform_data/mtd-nand-omap2.h>
+#include "../gpio/gpiolib.h"
+
#define DEVICE_NAME "omap-gpmc"
/* GPMC register offsets */
@@ -1980,6 +1982,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__);
@@ -2210,10 +2217,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) {
@@ -2342,7 +2350,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 v2 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity
2022-09-02 9:10 [PATCH v2 0/3] omap-gpmc wait pin additions B. Niedermayr
2022-09-02 9:10 ` [PATCH v2 1/3] memory: omap-gpmc: allow shared wait pins B. Niedermayr
2022-09-02 9:10 ` [PATCH v2 2/3] memory: omap-gpmc: add support for wait pin polarity B. Niedermayr
@ 2022-09-02 9:10 ` B. Niedermayr
2022-09-05 6:44 ` [PATCH v2 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
3 siblings, 0 replies; 7+ messages in thread
From: B. Niedermayr @ 2022-09-02 9:10 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 v2 0/3] omap-gpmc wait pin additions
2022-09-02 9:10 [PATCH v2 0/3] omap-gpmc wait pin additions B. Niedermayr
` (2 preceding siblings ...)
2022-09-02 9:10 ` [PATCH v2 3/3] dt-bindings: memory-controllers: gpmc-child: Add binding for wait-pin-polarity B. Niedermayr
@ 2022-09-05 6:44 ` Krzysztof Kozlowski
2022-09-05 7:15 ` Niedermayr, BENEDIKT
3 siblings, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2022-09-05 6:44 UTC (permalink / raw)
To: B. Niedermayr, linux-omap, devicetree; +Cc: rogerq, tony, robh+dt
On 02/09/2022 12:10, 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).
>
> Changes since v1:
> * Rebase against recent 6.0.0-rc3 kernel, but the maintainers list
> stays the same!
No... thanks for rebasing yet still you use wrong address email.
>
> ./scripts/get_maintainer.pl drivers/memory/omap-gpmc.c
> Roger Quadros <rogerq@kernel.org> (maintainer:OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT)
> Tony Lindgren <tony@atomide.com> (maintainer:OMAP GENERAL PURPOSE MEMORY CONTROLLER SUPPORT)
> Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> (maintainer:MEMORY CONTROLLER DRIVERS)
Different address email.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2 0/3] omap-gpmc wait pin additions
2022-09-05 6:44 ` [PATCH v2 0/3] omap-gpmc wait pin additions Krzysztof Kozlowski
@ 2022-09-05 7:15 ` Niedermayr, BENEDIKT
0 siblings, 0 replies; 7+ messages in thread
From: Niedermayr, BENEDIKT @ 2022-09-05 7:15 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 Mon, 2022-09-05 at 09:44 +0300, Krzysztof Kozlowski wrote:
> On 02/09/2022 12:10, 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).
> >
> > Changes since v1:
> > * Rebase against recent 6.0.0-rc3 kernel, but the maintainers
> > list
> > stays the same!
>
> No... thanks for rebasing yet still you use wrong address email.
>
> > ./scripts/get_maintainer.pl drivers/memory/omap-gpmc.c
> > Roger Quadros <rogerq@kernel.org> (maintainer:OMAP GENERAL
> > PURPOSE MEMORY CONTROLLER SUPPORT)
> > Tony Lindgren <tony@atomide.com> (maintainer:OMAP GENERAL PURPOSE
> > MEMORY CONTROLLER SUPPORT)
> > Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> > (maintainer:MEMORY CONTROLLER DRIVERS)
>
> Different address email.
>
>
> Best regards,
> Krzysztof
Ok now I see:
krzk@kernel.org has changed to krzysztof.kozlowski@linaro.org
^ permalink raw reply [flat|nested] 7+ messages in thread