devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] can: flexcan: add transceiver capabilities
@ 2025-02-21  7:40 Dimitri Fedrau via B4 Relay
  2025-02-21  7:40 ` [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: " Dimitri Fedrau via B4 Relay
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-02-21  7:40 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-can, linux-kernel, devicetree, Dimitri Fedrau,
	Dimitri Fedrau

Currently the flexcan driver does only support adding PHYs by using the
"old" regulator bindings. Add support for CAN transceivers as a PHY. Add
the capability to ensure that the PHY is in operational state when the link
is set to an "up" state.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
Changes in v3:
- Have xceiver-supply or phys properties in bindings
- Switch do dev_err_probe in flexcan_probe when checking error of call
  devm_phy_optional_get
- Link to v2: https://lore.kernel.org/r/20250220-flexcan-add-transceiver-caps-v2-0-a81970f11846@liebherr.com

Changes in v2:
- Rename variable xceiver to transceiver in struct flexcan_priv and in
  flexcan_probe
- Set priv->can.bitrate_max if transceiver is found
- Fix commit messages which claim that transceivers are not supported
- Do not print error on EPROBE_DEFER after calling devm_phy_optional_get in
  flexcan_probe
- Link to v1: https://lore.kernel.org/r/20250211-flexcan-add-transceiver-caps-v1-0-c6abb7817b0f@liebherr.com

---
Dimitri Fedrau (2):
      dt-bindings: can: fsl,flexcan: add transceiver capabilities
      can: flexcan: add transceiver capabilities

 .../devicetree/bindings/net/can/fsl,flexcan.yaml   | 15 ++++++++++++
 drivers/net/can/flexcan/flexcan-core.c             | 27 +++++++++++++++++-----
 drivers/net/can/flexcan/flexcan.h                  |  1 +
 3 files changed, 37 insertions(+), 6 deletions(-)
---
base-commit: 6a24171b9625471abfc90c7b28c4b45bee64b3a4
change-id: 20241209-flexcan-add-transceiver-caps-7cff9400c926

Best regards,
-- 
Dimitri Fedrau <dimitri.fedrau@liebherr.com>



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

* [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: add transceiver capabilities
  2025-02-21  7:40 [PATCH v3 0/2] can: flexcan: add transceiver capabilities Dimitri Fedrau via B4 Relay
@ 2025-02-21  7:40 ` Dimitri Fedrau via B4 Relay
  2025-02-21 16:59   ` Conor Dooley
  2025-02-21  7:40 ` [PATCH v3 2/2] can: flexcan: " Dimitri Fedrau via B4 Relay
  2025-02-21  8:11 ` [PATCH v3 0/2] " Marc Kleine-Budde
  2 siblings, 1 reply; 6+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-02-21  7:40 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-can, linux-kernel, devicetree, Dimitri Fedrau,
	Dimitri Fedrau

From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Currently the flexcan driver does only support adding PHYs by using the
"old" regulator bindings. Add support for CAN transceivers as a PHY.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
 .../devicetree/bindings/net/can/fsl,flexcan.yaml          | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
index 73252fe56fe6c8e9fd19142208bb655dc86d47cd..81125883cf86b9d19616bde378f74bdb6a32f1b2 100644
--- a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
+++ b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
@@ -77,6 +77,9 @@ properties:
   xceiver-supply:
     description: Regulator that powers the CAN transceiver.
 
+  phys:
+    maxItems: 1
+
   big-endian:
     $ref: /schemas/types.yaml#/definitions/flag
     description: |
@@ -171,6 +174,18 @@ allOf:
         interrupts:
           maxItems: 1
         interrupt-names: false
+  - if:
+      required:
+        - xceiver-supply
+    then:
+      properties:
+        phys: false
+  - if:
+      required:
+        - phys
+    then:
+      properties:
+        xceiver-supply: false
 
 additionalProperties: false
 

-- 
2.39.5



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

* [PATCH v3 2/2] can: flexcan: add transceiver capabilities
  2025-02-21  7:40 [PATCH v3 0/2] can: flexcan: add transceiver capabilities Dimitri Fedrau via B4 Relay
  2025-02-21  7:40 ` [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: " Dimitri Fedrau via B4 Relay
@ 2025-02-21  7:40 ` Dimitri Fedrau via B4 Relay
  2025-02-21  8:11 ` [PATCH v3 0/2] " Marc Kleine-Budde
  2 siblings, 0 replies; 6+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-02-21  7:40 UTC (permalink / raw)
  To: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-can, linux-kernel, devicetree, Dimitri Fedrau,
	Dimitri Fedrau

From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Currently the flexcan driver does only support adding PHYs by using the
"old" regulator bindings. Add support for CAN transceivers as a PHY. Add
the capability to ensure that the PHY is in operational state when the link
is set to an "up" state.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
 drivers/net/can/flexcan/flexcan-core.c | 27 +++++++++++++++++++++------
 drivers/net/can/flexcan/flexcan.h      |  1 +
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/net/can/flexcan/flexcan-core.c b/drivers/net/can/flexcan/flexcan-core.c
index b347a1c93536d54efaa5f7d3347bd47c20860b3e..7588cb54a909af065522ddbcb06cc3acb9669893 100644
--- a/drivers/net/can/flexcan/flexcan-core.c
+++ b/drivers/net/can/flexcan/flexcan-core.c
@@ -26,6 +26,7 @@
 #include <linux/pinctrl/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/can/platform/flexcan.h>
+#include <linux/phy/phy.h>
 #include <linux/pm_runtime.h>
 #include <linux/property.h>
 #include <linux/regmap.h>
@@ -644,18 +645,22 @@ static void flexcan_clks_disable(const struct flexcan_priv *priv)
 
 static inline int flexcan_transceiver_enable(const struct flexcan_priv *priv)
 {
-	if (!priv->reg_xceiver)
-		return 0;
+	if (priv->reg_xceiver)
+		return regulator_enable(priv->reg_xceiver);
+	else if (priv->transceiver)
+		return phy_power_on(priv->transceiver);
 
-	return regulator_enable(priv->reg_xceiver);
+	return 0;
 }
 
 static inline int flexcan_transceiver_disable(const struct flexcan_priv *priv)
 {
-	if (!priv->reg_xceiver)
-		return 0;
+	if (priv->reg_xceiver)
+		return regulator_disable(priv->reg_xceiver);
+	else if (priv->transceiver)
+		return phy_power_off(priv->transceiver);
 
-	return regulator_disable(priv->reg_xceiver);
+	return 0;
 }
 
 static int flexcan_chip_enable(struct flexcan_priv *priv)
@@ -2086,6 +2091,7 @@ static int flexcan_probe(struct platform_device *pdev)
 	struct net_device *dev;
 	struct flexcan_priv *priv;
 	struct regulator *reg_xceiver;
+	struct phy *transceiver;
 	struct clk *clk_ipg = NULL, *clk_per = NULL;
 	struct flexcan_regs __iomem *regs;
 	struct flexcan_platform_data *pdata;
@@ -2101,6 +2107,11 @@ static int flexcan_probe(struct platform_device *pdev)
 	else if (IS_ERR(reg_xceiver))
 		return PTR_ERR(reg_xceiver);
 
+	transceiver = devm_phy_optional_get(&pdev->dev, NULL);
+	if (IS_ERR(transceiver))
+		return dev_err_probe(&pdev->dev, PTR_ERR(transceiver),
+				     "failed to get phy\n");
+
 	if (pdev->dev.of_node) {
 		of_property_read_u32(pdev->dev.of_node,
 				     "clock-frequency", &clock_freq);
@@ -2198,6 +2209,10 @@ static int flexcan_probe(struct platform_device *pdev)
 	priv->clk_per = clk_per;
 	priv->clk_src = clk_src;
 	priv->reg_xceiver = reg_xceiver;
+	priv->transceiver = transceiver;
+
+	if (transceiver)
+		priv->can.bitrate_max = transceiver->attrs.max_link_rate;
 
 	if (priv->devtype_data.quirks & FLEXCAN_QUIRK_NR_IRQ_3) {
 		priv->irq_boff = platform_get_irq(pdev, 1);
diff --git a/drivers/net/can/flexcan/flexcan.h b/drivers/net/can/flexcan/flexcan.h
index 2cf886618c9621166173b865f266830b3f6c1fb0..16692a2502eba26575eeeec83dfffdf35f07b034 100644
--- a/drivers/net/can/flexcan/flexcan.h
+++ b/drivers/net/can/flexcan/flexcan.h
@@ -107,6 +107,7 @@ struct flexcan_priv {
 	struct clk *clk_per;
 	struct flexcan_devtype_data devtype_data;
 	struct regulator *reg_xceiver;
+	struct phy *transceiver;
 	struct flexcan_stop_mode stm;
 
 	int irq_boff;

-- 
2.39.5



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

* Re: [PATCH v3 0/2] can: flexcan: add transceiver capabilities
  2025-02-21  7:40 [PATCH v3 0/2] can: flexcan: add transceiver capabilities Dimitri Fedrau via B4 Relay
  2025-02-21  7:40 ` [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: " Dimitri Fedrau via B4 Relay
  2025-02-21  7:40 ` [PATCH v3 2/2] can: flexcan: " Dimitri Fedrau via B4 Relay
@ 2025-02-21  8:11 ` Marc Kleine-Budde
  2 siblings, 0 replies; 6+ messages in thread
From: Marc Kleine-Budde @ 2025-02-21  8:11 UTC (permalink / raw)
  To: Dimitri Fedrau via B4 Relay
  Cc: Vincent Mailhol, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	linux-can, linux-kernel, devicetree, Dimitri Fedrau,
	Dimitri Fedrau

[-- Attachment #1: Type: text/plain, Size: 739 bytes --]

On 21.02.2025 08:40:03, Dimitri Fedrau via B4 Relay wrote:
> Currently the flexcan driver does only support adding PHYs by using the
> "old" regulator bindings. Add support for CAN transceivers as a PHY. Add
> the capability to ensure that the PHY is in operational state when the link
> is set to an "up" state.
> 
> Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Looks good to me! Now we need an Ack for the DT binding changes.

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: add transceiver capabilities
  2025-02-21  7:40 ` [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: " Dimitri Fedrau via B4 Relay
@ 2025-02-21 16:59   ` Conor Dooley
  2025-02-22  7:22     ` Dimitri Fedrau
  0 siblings, 1 reply; 6+ messages in thread
From: Conor Dooley @ 2025-02-21 16:59 UTC (permalink / raw)
  To: dimitri.fedrau
  Cc: Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-can, linux-kernel,
	devicetree, Dimitri Fedrau

[-- Attachment #1: Type: text/plain, Size: 1628 bytes --]

On Fri, Feb 21, 2025 at 08:40:04AM +0100, Dimitri Fedrau via B4 Relay wrote:
> From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> 
> Currently the flexcan driver does only support adding PHYs by using the
> "old" regulator bindings. Add support for CAN transceivers as a PHY.
> 
> Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> ---
>  .../devicetree/bindings/net/can/fsl,flexcan.yaml          | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> index 73252fe56fe6c8e9fd19142208bb655dc86d47cd..81125883cf86b9d19616bde378f74bdb6a32f1b2 100644
> --- a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> +++ b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> @@ -77,6 +77,9 @@ properties:
>    xceiver-supply:
>      description: Regulator that powers the CAN transceiver.
>  
> +  phys:
> +    maxItems: 1
> +
>    big-endian:
>      $ref: /schemas/types.yaml#/definitions/flag
>      description: |
> @@ -171,6 +174,18 @@ allOf:
>          interrupts:
>            maxItems: 1
>          interrupt-names: false
> +  - if:
> +      required:
> +        - xceiver-supply
> +    then:
> +      properties:
> +        phys: false
> +  - if:
> +      required:
> +        - phys
> +    then:
> +      properties:
> +        xceiver-supply: false

The duplication here is not needed, they both will cause errors in the
same situation. With one dropped,
Acked-by: Conor Dooley <conor.dooley@microchip.com>


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

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

* Re: [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: add transceiver capabilities
  2025-02-21 16:59   ` Conor Dooley
@ 2025-02-22  7:22     ` Dimitri Fedrau
  0 siblings, 0 replies; 6+ messages in thread
From: Dimitri Fedrau @ 2025-02-22  7:22 UTC (permalink / raw)
  To: Conor Dooley
  Cc: dimitri.fedrau, Marc Kleine-Budde, Vincent Mailhol, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-can, linux-kernel,
	devicetree

Am Fri, Feb 21, 2025 at 04:59:16PM +0000 schrieb Conor Dooley:
> On Fri, Feb 21, 2025 at 08:40:04AM +0100, Dimitri Fedrau via B4 Relay wrote:
> > From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> > 
> > Currently the flexcan driver does only support adding PHYs by using the
> > "old" regulator bindings. Add support for CAN transceivers as a PHY.
> > 
> > Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> > ---
> >  .../devicetree/bindings/net/can/fsl,flexcan.yaml          | 15 +++++++++++++++
> >  1 file changed, 15 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> > index 73252fe56fe6c8e9fd19142208bb655dc86d47cd..81125883cf86b9d19616bde378f74bdb6a32f1b2 100644
> > --- a/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> > +++ b/Documentation/devicetree/bindings/net/can/fsl,flexcan.yaml
> > @@ -77,6 +77,9 @@ properties:
> >    xceiver-supply:
> >      description: Regulator that powers the CAN transceiver.
> >  
> > +  phys:
> > +    maxItems: 1
> > +
> >    big-endian:
> >      $ref: /schemas/types.yaml#/definitions/flag
> >      description: |
> > @@ -171,6 +174,18 @@ allOf:
> >          interrupts:
> >            maxItems: 1
> >          interrupt-names: false
> > +  - if:
> > +      required:
> > +        - xceiver-supply
> > +    then:
> > +      properties:
> > +        phys: false
> > +  - if:
> > +      required:
> > +        - phys
> > +    then:
> > +      properties:
> > +        xceiver-supply: false
> 
> The duplication here is not needed, they both will cause errors in the
> same situation. With one dropped,
> Acked-by: Conor Dooley <conor.dooley@microchip.com>
> 

Thanks for your help, will drop one and sent out a V4.

Best regards,
Dimitri Fedrau

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

end of thread, other threads:[~2025-02-22  7:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-21  7:40 [PATCH v3 0/2] can: flexcan: add transceiver capabilities Dimitri Fedrau via B4 Relay
2025-02-21  7:40 ` [PATCH v3 1/2] dt-bindings: can: fsl,flexcan: " Dimitri Fedrau via B4 Relay
2025-02-21 16:59   ` Conor Dooley
2025-02-22  7:22     ` Dimitri Fedrau
2025-02-21  7:40 ` [PATCH v3 2/2] can: flexcan: " Dimitri Fedrau via B4 Relay
2025-02-21  8:11 ` [PATCH v3 0/2] " Marc Kleine-Budde

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