* [PATCH v2 0/2] add NXP LINFlexD UART clock support for S32G2/S32G3
@ 2024-10-14 14:44 Ciprian Costea
2024-10-14 14:45 ` [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions Ciprian Costea
2024-10-14 14:45 ` [PATCH v2 2/2] serial: fsl_linflexuart: add clock support Ciprian Costea
0 siblings, 2 replies; 4+ messages in thread
From: Ciprian Costea @ 2024-10-14 14:44 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Chester Lin
Cc: linux-kernel, linux-serial, devicetree, NXP S32 Linux Team,
Christophe Lizzi, Alberto Ruiz, Enric Balletbo,
Ciprian Marian Costea
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
LINFlexD UART driver is used by S32 SoC family.
Add clocking support as optional in order to not break
existing support for S32V234 SoC.
A separate patch adding clock definitions to
the S32G2/S32G3 based boards devicetree will be sent
for review.
Changes in V2:
- Updated bindings by adding more information related to
required LINFlexD clocks
Ciprian Marian Costea (2):
dt-bindings: linflexuart: add clock definitions
serial: fsl_linflexuart: add clock support
.../bindings/serial/fsl,s32-linflexuart.yaml | 27 ++++++++
drivers/tty/serial/fsl_linflexuart.c | 67 ++++++++++++++-----
2 files changed, 78 insertions(+), 16 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions
2024-10-14 14:44 [PATCH v2 0/2] add NXP LINFlexD UART clock support for S32G2/S32G3 Ciprian Costea
@ 2024-10-14 14:45 ` Ciprian Costea
2024-10-14 15:56 ` Rob Herring (Arm)
2024-10-14 14:45 ` [PATCH v2 2/2] serial: fsl_linflexuart: add clock support Ciprian Costea
1 sibling, 1 reply; 4+ messages in thread
From: Ciprian Costea @ 2024-10-14 14:45 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Chester Lin
Cc: linux-kernel, linux-serial, devicetree, NXP S32 Linux Team,
Christophe Lizzi, Alberto Ruiz, Enric Balletbo,
Ciprian Marian Costea
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add clock definitions for NXP LINFlexD UART bindings
and update the binding examples with S32G2 node.
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
---
.../bindings/serial/fsl,s32-linflexuart.yaml | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.yaml b/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.yaml
index 4171f524a928..7b2ba14297f9 100644
--- a/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.yaml
+++ b/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.yaml
@@ -34,10 +34,24 @@ properties:
interrupts:
maxItems: 1
+ clocks:
+ items:
+ - description:
+ ipg clock drives the access to the LINFlexD
+ iomapped registers
+ - description: lin is the frequency of the baud clock
+
+ clock-names:
+ items:
+ - const: ipg
+ - const: lin
+
required:
- compatible
- reg
- interrupts
+ - clocks
+ - clock-names
unevaluatedProperties: false
@@ -48,3 +62,16 @@ examples:
reg = <0x40053000 0x1000>;
interrupts = <0 59 4>;
};
+
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/interrupt-controller/irq.h>
+
+ serial@401c8000 {
+ compatible = "nxp,s32g2-linflexuart",
+ "fsl,s32v234-linflexuart";
+ reg = <0x401c8000 0x3000>;
+ interrupts = <GIC_SPI 82 IRQ_TYPE_EDGE_RISING>;
+ clocks = <&clks 13>, <&clks 14>;
+ clock-names = "ipg", "lin";
+ };
--
2.45.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] serial: fsl_linflexuart: add clock support
2024-10-14 14:44 [PATCH v2 0/2] add NXP LINFlexD UART clock support for S32G2/S32G3 Ciprian Costea
2024-10-14 14:45 ` [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions Ciprian Costea
@ 2024-10-14 14:45 ` Ciprian Costea
1 sibling, 0 replies; 4+ messages in thread
From: Ciprian Costea @ 2024-10-14 14:45 UTC (permalink / raw)
To: Greg Kroah-Hartman, Jiri Slaby, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Chester Lin
Cc: linux-kernel, linux-serial, devicetree, NXP S32 Linux Team,
Christophe Lizzi, Alberto Ruiz, Enric Balletbo,
Ciprian Marian Costea
From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
Add clocking support to the NXP LINFlexD UART driver.
It is used by S32G2 and S32G3 SoCs.
Clocking support is added as optional in order to not break
existing support for S32V234 SoC.
Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
---
drivers/tty/serial/fsl_linflexuart.c | 67 +++++++++++++++++++++-------
1 file changed, 51 insertions(+), 16 deletions(-)
diff --git a/drivers/tty/serial/fsl_linflexuart.c b/drivers/tty/serial/fsl_linflexuart.c
index e972df4b188d..23aed3bbff6c 100644
--- a/drivers/tty/serial/fsl_linflexuart.c
+++ b/drivers/tty/serial/fsl_linflexuart.c
@@ -3,9 +3,10 @@
* Freescale LINFlexD UART serial port driver
*
* Copyright 2012-2016 Freescale Semiconductor, Inc.
- * Copyright 2017-2019 NXP
+ * Copyright 2017-2019, 2024 NXP
*/
+#include <linux/clk.h>
#include <linux/console.h>
#include <linux/io.h>
#include <linux/irq.h>
@@ -120,6 +121,12 @@
#define PREINIT_DELAY 2000 /* us */
+struct linflex_port {
+ struct uart_port port;
+ struct clk *clk_lin;
+ struct clk *clk_ipg;
+};
+
static const struct of_device_id linflex_dt_ids[] = {
{
.compatible = "fsl,s32v234-linflexuart",
@@ -807,12 +814,13 @@ static struct uart_driver linflex_reg = {
static int linflex_probe(struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
+ struct linflex_port *lfport;
struct uart_port *sport;
struct resource *res;
int ret;
- sport = devm_kzalloc(&pdev->dev, sizeof(*sport), GFP_KERNEL);
- if (!sport)
+ lfport = devm_kzalloc(&pdev->dev, sizeof(*lfport), GFP_KERNEL);
+ if (!lfport)
return -ENOMEM;
ret = of_alias_get_id(np, "serial");
@@ -826,6 +834,7 @@ static int linflex_probe(struct platform_device *pdev)
return -ENOMEM;
}
+ sport = &lfport->port;
sport->line = ret;
sport->membase = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
@@ -844,39 +853,65 @@ static int linflex_probe(struct platform_device *pdev)
sport->flags = UPF_BOOT_AUTOCONF;
sport->has_sysrq = IS_ENABLED(CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE);
- linflex_ports[sport->line] = sport;
+ lfport->clk_lin = devm_clk_get_optional_enabled(&pdev->dev, "lin");
+ if (IS_ERR(lfport->clk_lin))
+ return dev_err_probe(&pdev->dev, PTR_ERR(lfport->clk_lin),
+ "Failed to get linflexuart clk\n");
- platform_set_drvdata(pdev, sport);
+ lfport->clk_ipg = devm_clk_get_optional_enabled(&pdev->dev, "ipg");
+ if (IS_ERR(lfport->clk_ipg))
+ return dev_err_probe(&pdev->dev, PTR_ERR(lfport->clk_ipg),
+ "Failed to get linflexuart ipg clk\n");
+
+ linflex_ports[sport->line] = sport;
+ platform_set_drvdata(pdev, lfport);
return uart_add_one_port(&linflex_reg, sport);
}
static void linflex_remove(struct platform_device *pdev)
{
- struct uart_port *sport = platform_get_drvdata(pdev);
+ struct linflex_port *lfport = platform_get_drvdata(pdev);
- uart_remove_one_port(&linflex_reg, sport);
+ uart_remove_one_port(&linflex_reg, &lfport->port);
}
-#ifdef CONFIG_PM_SLEEP
-static int linflex_suspend(struct device *dev)
+static int __maybe_unused linflex_suspend(struct device *dev)
{
- struct uart_port *sport = dev_get_drvdata(dev);
+ struct linflex_port *lfport = dev_get_drvdata(dev);
+
+ uart_suspend_port(&linflex_reg, &lfport->port);
- uart_suspend_port(&linflex_reg, sport);
+ clk_disable_unprepare(lfport->clk_lin);
+ clk_disable_unprepare(lfport->clk_ipg);
return 0;
}
-static int linflex_resume(struct device *dev)
+static int __maybe_unused linflex_resume(struct device *dev)
{
- struct uart_port *sport = dev_get_drvdata(dev);
+ struct linflex_port *lfport = dev_get_drvdata(dev);
+ int ret;
- uart_resume_port(&linflex_reg, sport);
+ if (lfport->clk_lin) {
+ ret = clk_prepare_enable(lfport->clk_lin);
+ if (ret) {
+ dev_err(dev, "Failed to enable linflexuart clk: %d\n", ret);
+ return ret;
+ }
+ }
- return 0;
+ if (lfport->clk_ipg) {
+ ret = clk_prepare_enable(lfport->clk_ipg);
+ if (ret) {
+ dev_err(dev, "Failed to enable linflexuart ipg clk: %d\n", ret);
+ clk_disable_unprepare(lfport->clk_lin);
+ return ret;
+ }
+ }
+
+ return uart_resume_port(&linflex_reg, &lfport->port);
}
-#endif
static SIMPLE_DEV_PM_OPS(linflex_pm_ops, linflex_suspend, linflex_resume);
--
2.45.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions
2024-10-14 14:45 ` [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions Ciprian Costea
@ 2024-10-14 15:56 ` Rob Herring (Arm)
0 siblings, 0 replies; 4+ messages in thread
From: Rob Herring (Arm) @ 2024-10-14 15:56 UTC (permalink / raw)
To: Ciprian Costea
Cc: Christophe Lizzi, Alberto Ruiz, Chester Lin, linux-serial,
Enric Balletbo, Conor Dooley, linux-kernel, Greg Kroah-Hartman,
Krzysztof Kozlowski, Jiri Slaby, devicetree, NXP S32 Linux Team
On Mon, 14 Oct 2024 17:45:00 +0300, Ciprian Costea wrote:
> From: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
>
> Add clock definitions for NXP LINFlexD UART bindings
> and update the binding examples with S32G2 node.
>
> Signed-off-by: Ciprian Marian Costea <ciprianmarian.costea@oss.nxp.com>
> ---
> .../bindings/serial/fsl,s32-linflexuart.yaml | 27 +++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.example.dtb: serial@40053000: 'clocks' is a required property
from schema $id: http://devicetree.org/schemas/serial/fsl,s32-linflexuart.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.example.dtb: serial@40053000: 'clock-names' is a required property
from schema $id: http://devicetree.org/schemas/serial/fsl,s32-linflexuart.yaml#
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20241014144501.388050-2-ciprianmarian.costea@oss.nxp.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-10-14 15:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-14 14:44 [PATCH v2 0/2] add NXP LINFlexD UART clock support for S32G2/S32G3 Ciprian Costea
2024-10-14 14:45 ` [PATCH v2 1/2] dt-bindings: linflexuart: add clock definitions Ciprian Costea
2024-10-14 15:56 ` Rob Herring (Arm)
2024-10-14 14:45 ` [PATCH v2 2/2] serial: fsl_linflexuart: add clock support Ciprian Costea
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).