openbmc.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties
@ 2021-04-12  3:47 Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 1/4] dt-bindings: serial: 8250: deprecate aspeed, sirq-polarity-sense Zev Weiss
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Zev Weiss @ 2021-04-12  3:47 UTC (permalink / raw)
  To: Joel Stanley
  Cc: devicetree, linux-aspeed, Zev Weiss, Andrew Jeffery,
	Greg Kroah-Hartman, openbmc, linux-kernel, Lubomir Rintel,
	Rob Herring, linux-serial, Jiri Slaby, linux-arm-kernel

This series generalizes the aspeed-vuart driver's device tree
properties to cover all the attributes it currently exposes via sysfs.

The aspeed,sirq-polarity-sense property was a bit of a design mistake
in that it ties Aspeed VUART SIRQ polarity to SCU register bits that
aren't really inherently related to it; the first patch in this series
deprecates it (though we hope to eventually remove it).

The rest of the series adds two new properties, aspeed,lpc-io-reg and
aspeed,lpc-interrupts.  The latter allows describing the SIRQ polarity
(along with the interrupt number) directly, providing a simpler
replacement for aspeed,sirq-polarity-sense.

Changes since v5 [4]:
 - corrected stale DT property name in commit message
 - factored aspeed_vuart_map_irq_polarity() out of
   aspeed_vuart_probe()
 - fixed commit message subject line prefixes

Changes since v4 [3]:
 - fixed commit reference formatting in commit message

Changes since v3 [2]:
 - renamed properties to match aspeed,ast2400-kcs-bmc

Changes since v2 [0]:
 - expanded to also handle sirq number and lpc address in addition to
   sirq polarity
 - added default settings if DT properties not specified
 - refactored existing sysfs code slightly, adding range checks
 - cleaned up 'make dt_binding_check' warnings

Changes since v1 [1]:
 - deprecate and retain aspeed,sirq-polarity-sense instead of removing it
 - drop e3c246d4i dts addition from this series


[0] https://lore.kernel.org/openbmc/20210401005702.28271-1-zev@bewilderbeest.net/
[1] https://lore.kernel.org/openbmc/20210330002338.335-1-zev@bewilderbeest.net/
[2] https://lore.kernel.org/openbmc/20210402004716.15961-1-zev@bewilderbeest.net/
[3] https://lore.kernel.org/openbmc/20210402182724.20848-1-zev@bewilderbeest.net/
[4] https://lore.kernel.org/openbmc/20210408011637.5361-1-zev@bewilderbeest.net/


Zev Weiss (4):
  dt-bindings: serial: 8250: deprecate aspeed,sirq-polarity-sense
  serial: 8250_aspeed_vuart: refactor sirq and lpc address setting code
  serial: 8250_aspeed_vuart: add aspeed,lpc-io-reg and
    aspeed,lpc-interrupts DT properties
  dt-bindings: serial: 8250: add aspeed,lpc-io-reg and
    aspeed,lpc-interrupts

 .../devicetree/bindings/serial/8250.yaml      |  28 ++++-
 drivers/tty/serial/8250/8250_aspeed_vuart.c   | 102 ++++++++++++++----
 2 files changed, 109 insertions(+), 21 deletions(-)

-- 
2.31.1


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

* [PATCH v6 1/4] dt-bindings: serial: 8250: deprecate aspeed, sirq-polarity-sense
  2021-04-12  3:47 [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties Zev Weiss
@ 2021-04-12  3:47 ` Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 2/4] serial: 8250_aspeed_vuart: refactor sirq and lpc address setting code Zev Weiss
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Zev Weiss @ 2021-04-12  3:47 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Rob Herring, linux-aspeed, Zev Weiss, -,
	Andrew Jeffery, Greg Kroah-Hartman, openbmc, linux-kernel,
	Lubomir Rintel, Rob Herring, linux-serial, linux-arm-kernel

This property ties SIRQ polarity to SCU register bits that don't
necessarily have any direct relationship to it; the only use of it was
removed in commit c82bf6e133d3 ("ARM: aspeed: g5: Do not set sirq
polarity").

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Reviewed-by: Joel Stanley <joel@jms.id.au>
Acked-by: Rob Herring <robh@kernel.org>
---
 Documentation/devicetree/bindings/serial/8250.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/serial/8250.yaml b/Documentation/devicetree/bindings/serial/8250.yaml
index f54cae9ff7b2..491b9297432d 100644
--- a/Documentation/devicetree/bindings/serial/8250.yaml
+++ b/Documentation/devicetree/bindings/serial/8250.yaml
@@ -188,6 +188,7 @@ properties:
       offset and bit number to identify how the SIRQ polarity should be
       configured. One possible data source is the LPC/eSPI mode bit. Only
       applicable to aspeed,ast2500-vuart.
+    deprecated: true
 
 required:
   - reg
-- 
2.31.1


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

* [PATCH v6 2/4] serial: 8250_aspeed_vuart: refactor sirq and lpc address setting code
  2021-04-12  3:47 [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 1/4] dt-bindings: serial: 8250: deprecate aspeed, sirq-polarity-sense Zev Weiss
@ 2021-04-12  3:47 ` Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 4/4] dt-bindings: serial: 8250: add aspeed, lpc-io-reg and aspeed, lpc-interrupts Zev Weiss
  3 siblings, 0 replies; 7+ messages in thread
From: Zev Weiss @ 2021-04-12  3:47 UTC (permalink / raw)
  To: Joel Stanley
  Cc: linux-aspeed, Zev Weiss, Andrew Jeffery, Greg Kroah-Hartman,
	openbmc, linux-kernel, linux-serial, Jiri Slaby,
	linux-arm-kernel

This splits dedicated aspeed_vuart_set_{sirq,lpc_address}() functions
out of the sysfs store functions in preparation for adding DT
properties that will be poking the same registers.  While we're at it,
these functions now provide some basic bounds-checking on their
arguments.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Reviewed-by: Andrew Jeffery <andrew@aj.id.au>
---
 drivers/tty/serial/8250/8250_aspeed_vuart.c | 51 ++++++++++++++-------
 1 file changed, 35 insertions(+), 16 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_aspeed_vuart.c b/drivers/tty/serial/8250/8250_aspeed_vuart.c
index c33e02cbde93..8433f8dbb186 100644
--- a/drivers/tty/serial/8250/8250_aspeed_vuart.c
+++ b/drivers/tty/serial/8250/8250_aspeed_vuart.c
@@ -72,22 +72,31 @@ static ssize_t lpc_address_show(struct device *dev,
 	return snprintf(buf, PAGE_SIZE - 1, "0x%x\n", addr);
 }
 
+static int aspeed_vuart_set_lpc_address(struct aspeed_vuart *vuart, u32 addr)
+{
+	if (addr > U16_MAX)
+		return -EINVAL;
+
+	writeb(addr >> 8, vuart->regs + ASPEED_VUART_ADDRH);
+	writeb(addr >> 0, vuart->regs + ASPEED_VUART_ADDRL);
+
+	return 0;
+}
+
 static ssize_t lpc_address_store(struct device *dev,
 				 struct device_attribute *attr,
 				 const char *buf, size_t count)
 {
 	struct aspeed_vuart *vuart = dev_get_drvdata(dev);
-	unsigned long val;
+	u32 val;
 	int err;
 
-	err = kstrtoul(buf, 0, &val);
+	err = kstrtou32(buf, 0, &val);
 	if (err)
 		return err;
 
-	writeb(val >> 8, vuart->regs + ASPEED_VUART_ADDRH);
-	writeb(val >> 0, vuart->regs + ASPEED_VUART_ADDRL);
-
-	return count;
+	err = aspeed_vuart_set_lpc_address(vuart, val);
+	return err ? : count;
 }
 
 static DEVICE_ATTR_RW(lpc_address);
@@ -105,27 +114,37 @@ static ssize_t sirq_show(struct device *dev,
 	return snprintf(buf, PAGE_SIZE - 1, "%u\n", reg);
 }
 
+static int aspeed_vuart_set_sirq(struct aspeed_vuart *vuart, u32 sirq)
+{
+	u8 reg;
+
+	if (sirq > (ASPEED_VUART_GCRB_HOST_SIRQ_MASK >> ASPEED_VUART_GCRB_HOST_SIRQ_SHIFT))
+		return -EINVAL;
+
+	sirq <<= ASPEED_VUART_GCRB_HOST_SIRQ_SHIFT;
+	sirq &= ASPEED_VUART_GCRB_HOST_SIRQ_MASK;
+
+	reg = readb(vuart->regs + ASPEED_VUART_GCRB);
+	reg &= ~ASPEED_VUART_GCRB_HOST_SIRQ_MASK;
+	reg |= sirq;
+	writeb(reg, vuart->regs + ASPEED_VUART_GCRB);
+
+	return 0;
+}
+
 static ssize_t sirq_store(struct device *dev, struct device_attribute *attr,
 			  const char *buf, size_t count)
 {
 	struct aspeed_vuart *vuart = dev_get_drvdata(dev);
 	unsigned long val;
 	int err;
-	u8 reg;
 
 	err = kstrtoul(buf, 0, &val);
 	if (err)
 		return err;
 
-	val <<= ASPEED_VUART_GCRB_HOST_SIRQ_SHIFT;
-	val &= ASPEED_VUART_GCRB_HOST_SIRQ_MASK;
-
-	reg = readb(vuart->regs + ASPEED_VUART_GCRB);
-	reg &= ~ASPEED_VUART_GCRB_HOST_SIRQ_MASK;
-	reg |= val;
-	writeb(reg, vuart->regs + ASPEED_VUART_GCRB);
-
-	return count;
+	err = aspeed_vuart_set_sirq(vuart, val);
+	return err ? : count;
 }
 
 static DEVICE_ATTR_RW(sirq);
-- 
2.31.1


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

* [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties
  2021-04-12  3:47 [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 1/4] dt-bindings: serial: 8250: deprecate aspeed, sirq-polarity-sense Zev Weiss
  2021-04-12  3:47 ` [PATCH v6 2/4] serial: 8250_aspeed_vuart: refactor sirq and lpc address setting code Zev Weiss
@ 2021-04-12  3:47 ` Zev Weiss
  2021-04-12 23:37   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed,lpc-interrupts " Andrew Jeffery
  2021-04-15 10:46   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed,lpc-io-reg " Andy Shevchenko
  2021-04-12  3:47 ` [PATCH v6 4/4] dt-bindings: serial: 8250: add aspeed, lpc-io-reg and aspeed, lpc-interrupts Zev Weiss
  3 siblings, 2 replies; 7+ messages in thread
From: Zev Weiss @ 2021-04-12  3:47 UTC (permalink / raw)
  To: Joel Stanley
  Cc: linux-aspeed, Zev Weiss, Andrew Jeffery, Greg Kroah-Hartman,
	openbmc, linux-kernel, linux-serial, Jiri Slaby,
	linux-arm-kernel

These allow describing all the Aspeed VUART attributes currently
available via sysfs.  aspeed,lpc-interrupts provides a replacement for
the deprecated aspeed,sirq-polarity-sense property.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
---
 drivers/tty/serial/8250/8250_aspeed_vuart.c | 51 ++++++++++++++++++++-
 1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_aspeed_vuart.c b/drivers/tty/serial/8250/8250_aspeed_vuart.c
index 8433f8dbb186..3c239d98747f 100644
--- a/drivers/tty/serial/8250/8250_aspeed_vuart.c
+++ b/drivers/tty/serial/8250/8250_aspeed_vuart.c
@@ -28,6 +28,10 @@
 #define ASPEED_VUART_ADDRL		0x28
 #define ASPEED_VUART_ADDRH		0x2c
 
+#define ASPEED_VUART_DEFAULT_LPC_ADDR	0x3f8
+#define ASPEED_VUART_DEFAULT_SIRQ	4
+#define ASPEED_VUART_DEFAULT_SIRQ_POLARITY	IRQ_TYPE_LEVEL_LOW
+
 struct aspeed_vuart {
 	struct device		*dev;
 	void __iomem		*regs;
@@ -386,6 +390,18 @@ static void aspeed_vuart_auto_configure_sirq_polarity(
 	aspeed_vuart_set_sirq_polarity(vuart, (value & reg_mask) == 0);
 }
 
+static int aspeed_vuart_map_irq_polarity(u32 dt)
+{
+	switch (dt) {
+	case IRQ_TYPE_LEVEL_LOW:
+		return 0;
+	case IRQ_TYPE_LEVEL_HIGH:
+		return 1;
+	default:
+		return -EINVAL;
+	}
+}
+
 static int aspeed_vuart_probe(struct platform_device *pdev)
 {
 	struct of_phandle_args sirq_polarity_sense_args;
@@ -393,8 +409,8 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
 	struct aspeed_vuart *vuart;
 	struct device_node *np;
 	struct resource *res;
-	u32 clk, prop;
-	int rc;
+	u32 clk, prop, sirq[2];
+	int rc, sirq_polarity;
 
 	np = pdev->dev.of_node;
 
@@ -501,6 +517,37 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
 		of_node_put(sirq_polarity_sense_args.np);
 	}
 
+	rc = of_property_read_u32(np, "aspeed,lpc-io-reg", &prop);
+	if (rc < 0)
+		prop = ASPEED_VUART_DEFAULT_LPC_ADDR;
+
+	rc = aspeed_vuart_set_lpc_address(vuart, prop);
+	if (rc < 0) {
+		dev_err(&pdev->dev, "invalid value in aspeed,lpc-io-reg property\n");
+		goto err_clk_disable;
+	}
+
+	rc = of_property_read_u32_array(np, "aspeed,lpc-interrupts", sirq, 2);
+	if (rc < 0) {
+		sirq[0] = ASPEED_VUART_DEFAULT_SIRQ;
+		sirq[1] = ASPEED_VUART_DEFAULT_SIRQ_POLARITY;
+	}
+
+	rc = aspeed_vuart_set_sirq(vuart, sirq[0]);
+	if (rc < 0) {
+		dev_err(&pdev->dev, "invalid sirq number in aspeed,lpc-interrupts property\n");
+		goto err_clk_disable;
+	}
+
+	sirq_polarity = aspeed_vuart_map_irq_polarity(sirq[1]);
+	if (sirq_polarity < 0) {
+		dev_err(&pdev->dev, "invalid sirq polarity in aspeed,lpc-interrupts property\n");
+		rc = sirq_polarity;
+		goto err_clk_disable;
+	}
+
+	aspeed_vuart_set_sirq_polarity(vuart, sirq_polarity);
+
 	aspeed_vuart_set_enabled(vuart, true);
 	aspeed_vuart_set_host_tx_discard(vuart, true);
 	platform_set_drvdata(pdev, vuart);
-- 
2.31.1


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

* [PATCH v6 4/4] dt-bindings: serial: 8250: add aspeed, lpc-io-reg and aspeed, lpc-interrupts
  2021-04-12  3:47 [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties Zev Weiss
                   ` (2 preceding siblings ...)
  2021-04-12  3:47 ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties Zev Weiss
@ 2021-04-12  3:47 ` Zev Weiss
  3 siblings, 0 replies; 7+ messages in thread
From: Zev Weiss @ 2021-04-12  3:47 UTC (permalink / raw)
  To: Joel Stanley
  Cc: Rob Herring, linux-aspeed, Zev Weiss, -,
	Andrew Jeffery, Greg Kroah-Hartman, openbmc, linux-kernel,
	Lubomir Rintel, Rob Herring, linux-serial, linux-arm-kernel

These correspond to the existing lpc_address, sirq, and sirq_polarity
sysfs attributes; the second element of aspeed,lpc-interrupts provides
a replacement for the deprecated aspeed,sirq-polarity-sense property.

Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
Reviewed-by: Rob Herring <robh@kernel.org>
---
 .../devicetree/bindings/serial/8250.yaml      | 27 ++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/serial/8250.yaml b/Documentation/devicetree/bindings/serial/8250.yaml
index 491b9297432d..0e82b076e199 100644
--- a/Documentation/devicetree/bindings/serial/8250.yaml
+++ b/Documentation/devicetree/bindings/serial/8250.yaml
@@ -12,8 +12,13 @@ maintainers:
 allOf:
   - $ref: /schemas/serial.yaml#
   - if:
-      required:
-        - aspeed,sirq-polarity-sense
+      anyOf:
+        - required:
+            - aspeed,lpc-io-reg
+        - required:
+            - aspeed,lpc-interrupts
+        - required:
+            - aspeed,sirq-polarity-sense
     then:
       properties:
         compatible:
@@ -190,6 +195,20 @@ properties:
       applicable to aspeed,ast2500-vuart.
     deprecated: true
 
+  aspeed,lpc-io-reg:
+    $ref: '/schemas/types.yaml#/definitions/uint32'
+    description: |
+      The VUART LPC address.  Only applicable to aspeed,ast2500-vuart.
+
+  aspeed,lpc-interrupts:
+    $ref: "/schemas/types.yaml#/definitions/uint32-array"
+    minItems: 2
+    maxItems: 2
+    description: |
+      A 2-cell property describing the VUART SIRQ number and SIRQ
+      polarity (IRQ_TYPE_LEVEL_LOW or IRQ_TYPE_LEVEL_HIGH).  Only
+      applicable to aspeed,ast2500-vuart.
+
 required:
   - reg
   - interrupts
@@ -221,6 +240,7 @@ examples:
     };
   - |
     #include <dt-bindings/clock/aspeed-clock.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
     serial@1e787000 {
         compatible = "aspeed,ast2500-vuart";
         reg = <0x1e787000 0x40>;
@@ -228,7 +248,8 @@ examples:
         interrupts = <8>;
         clocks = <&syscon ASPEED_CLK_APB>;
         no-loopback-test;
-        aspeed,sirq-polarity-sense = <&syscon 0x70 25>;
+        aspeed,lpc-io-reg = <0x3f8>;
+        aspeed,lpc-interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
     };
 
 ...
-- 
2.31.1


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

* Re: [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed,lpc-interrupts DT properties
  2021-04-12  3:47 ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties Zev Weiss
@ 2021-04-12 23:37   ` Andrew Jeffery
  2021-04-15 10:46   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed,lpc-io-reg " Andy Shevchenko
  1 sibling, 0 replies; 7+ messages in thread
From: Andrew Jeffery @ 2021-04-12 23:37 UTC (permalink / raw)
  To: Zev Weiss, Joel Stanley
  Cc: linux-aspeed, Greg Kroah-Hartman, openbmc, linux-kernel,
	linux-serial, Jiri Slaby, linux-arm-kernel



On Mon, 12 Apr 2021, at 13:17, Zev Weiss wrote:
> These allow describing all the Aspeed VUART attributes currently
> available via sysfs.  aspeed,lpc-interrupts provides a replacement for
> the deprecated aspeed,sirq-polarity-sense property.
> 
> Signed-off-by: Zev Weiss <zev@bewilderbeest.net>

Reviewed-by: Andrew Jeffery <andrew@aj.id.au>

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

* Re: [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed,lpc-io-reg and aspeed,lpc-interrupts DT properties
  2021-04-12  3:47 ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties Zev Weiss
  2021-04-12 23:37   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed,lpc-interrupts " Andrew Jeffery
@ 2021-04-15 10:46   ` Andy Shevchenko
  1 sibling, 0 replies; 7+ messages in thread
From: Andy Shevchenko @ 2021-04-15 10:46 UTC (permalink / raw)
  To: Zev Weiss
  Cc: moderated list:ARM/ASPEED MACHINE SUPPORT, Andrew Jeffery,
	Greg Kroah-Hartman, OpenBMC Maillist, Linux Kernel Mailing List,
	open list:SERIAL DRIVERS, Jiri Slaby, linux-arm Mailing List

On Mon, Apr 12, 2021 at 7:05 AM Zev Weiss <zev@bewilderbeest.net> wrote:
>
> These allow describing all the Aspeed VUART attributes currently
> available via sysfs.  aspeed,lpc-interrupts provides a replacement for
> the deprecated aspeed,sirq-polarity-sense property.

One nit-pick below.

In any case it's fine.

> Signed-off-by: Zev Weiss <zev@bewilderbeest.net>
> ---
>  drivers/tty/serial/8250/8250_aspeed_vuart.c | 51 ++++++++++++++++++++-
>  1 file changed, 49 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/8250/8250_aspeed_vuart.c b/drivers/tty/serial/8250/8250_aspeed_vuart.c
> index 8433f8dbb186..3c239d98747f 100644
> --- a/drivers/tty/serial/8250/8250_aspeed_vuart.c
> +++ b/drivers/tty/serial/8250/8250_aspeed_vuart.c
> @@ -28,6 +28,10 @@
>  #define ASPEED_VUART_ADDRL             0x28
>  #define ASPEED_VUART_ADDRH             0x2c
>
> +#define ASPEED_VUART_DEFAULT_LPC_ADDR  0x3f8
> +#define ASPEED_VUART_DEFAULT_SIRQ      4
> +#define ASPEED_VUART_DEFAULT_SIRQ_POLARITY     IRQ_TYPE_LEVEL_LOW
> +
>  struct aspeed_vuart {
>         struct device           *dev;
>         void __iomem            *regs;
> @@ -386,6 +390,18 @@ static void aspeed_vuart_auto_configure_sirq_polarity(
>         aspeed_vuart_set_sirq_polarity(vuart, (value & reg_mask) == 0);
>  }
>
> +static int aspeed_vuart_map_irq_polarity(u32 dt)
> +{
> +       switch (dt) {
> +       case IRQ_TYPE_LEVEL_LOW:
> +               return 0;
> +       case IRQ_TYPE_LEVEL_HIGH:
> +               return 1;
> +       default:
> +               return -EINVAL;
> +       }
> +}
> +
>  static int aspeed_vuart_probe(struct platform_device *pdev)
>  {
>         struct of_phandle_args sirq_polarity_sense_args;
> @@ -393,8 +409,8 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
>         struct aspeed_vuart *vuart;
>         struct device_node *np;
>         struct resource *res;
> -       u32 clk, prop;
> -       int rc;
> +       u32 clk, prop, sirq[2];
> +       int rc, sirq_polarity;
>
>         np = pdev->dev.of_node;
>
> @@ -501,6 +517,37 @@ static int aspeed_vuart_probe(struct platform_device *pdev)
>                 of_node_put(sirq_polarity_sense_args.np);
>         }
>
> +       rc = of_property_read_u32(np, "aspeed,lpc-io-reg", &prop);
> +       if (rc < 0)
> +               prop = ASPEED_VUART_DEFAULT_LPC_ADDR;
> +
> +       rc = aspeed_vuart_set_lpc_address(vuart, prop);
> +       if (rc < 0) {
> +               dev_err(&pdev->dev, "invalid value in aspeed,lpc-io-reg property\n");
> +               goto err_clk_disable;
> +       }
> +
> +       rc = of_property_read_u32_array(np, "aspeed,lpc-interrupts", sirq, 2);
> +       if (rc < 0) {
> +               sirq[0] = ASPEED_VUART_DEFAULT_SIRQ;
> +               sirq[1] = ASPEED_VUART_DEFAULT_SIRQ_POLARITY;
> +       }
> +
> +       rc = aspeed_vuart_set_sirq(vuart, sirq[0]);
> +       if (rc < 0) {
> +               dev_err(&pdev->dev, "invalid sirq number in aspeed,lpc-interrupts property\n");
> +               goto err_clk_disable;
> +       }
> +
> +       sirq_polarity = aspeed_vuart_map_irq_polarity(sirq[1]);
> +       if (sirq_polarity < 0) {
> +               dev_err(&pdev->dev, "invalid sirq polarity in aspeed,lpc-interrupts property\n");

> +               rc = sirq_polarity;
> +               goto err_clk_disable;
> +       }

Why not to use the same pattern as above, i.e.

       rc = aspeed_vuart_map_irq_polarity(sirq[1]);
       if (rc < 0) {
               dev_err(&pdev->dev, "invalid sirq polarity in
aspeed,lpc-interrupts property\n");
               goto err_clk_disable;
       }
       sirq_polarity = rc;

?

> +       aspeed_vuart_set_sirq_polarity(vuart, sirq_polarity);
> +
>         aspeed_vuart_set_enabled(vuart, true);
>         aspeed_vuart_set_host_tx_discard(vuart, true);
>         platform_set_drvdata(pdev, vuart);


-- 
With Best Regards,
Andy Shevchenko

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

end of thread, other threads:[~2021-04-15 10:47 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-12  3:47 [PATCH v6 0/4] serial: 8250_aspeed_vuart: generalized DT properties Zev Weiss
2021-04-12  3:47 ` [PATCH v6 1/4] dt-bindings: serial: 8250: deprecate aspeed, sirq-polarity-sense Zev Weiss
2021-04-12  3:47 ` [PATCH v6 2/4] serial: 8250_aspeed_vuart: refactor sirq and lpc address setting code Zev Weiss
2021-04-12  3:47 ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed, lpc-interrupts DT properties Zev Weiss
2021-04-12 23:37   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed, lpc-io-reg and aspeed,lpc-interrupts " Andrew Jeffery
2021-04-15 10:46   ` [PATCH v6 3/4] serial: 8250_aspeed_vuart: add aspeed,lpc-io-reg " Andy Shevchenko
2021-04-12  3:47 ` [PATCH v6 4/4] dt-bindings: serial: 8250: add aspeed, lpc-io-reg and aspeed, lpc-interrupts Zev Weiss

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).