Commit 57ea8506 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'ti-am65x-cpts-follow-up-dt-bindings-update'

Grygorii Strashko says:

====================
net: ethernet: ti: am65x-cpts: follow up dt bindings update

This series is follow update for  TI A65x/J721E Common platform time sync (CPTS)
driver [1] to implement  DT bindings review comments from
Rob Herring <robh@kernel.org> [2].
 - "reg" and "compatible" properties are made required for CPTS DT nodes which
   also required to change K3 CPSW driver to use of_platform_device_create()
   instead of of_platform_populate() for proper CPTS and MDIO initialization
 - minor DT bindings format changes
 - K3 CPTS example added to K3 MCU CPSW bindings

[1] https://lwn.net/Articles/819313/
[2] https://lwn.net/ml/linux-kernel/20200505040419.GA8509@bogus/


====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a8c9baf2 ef2d1363
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -144,7 +144,7 @@ patternProperties:
    description:
      CPSW MDIO bus.

  "^cpts$":
  "^cpts@[0-9a-f]+":
    type: object
    allOf:
      - $ref: "ti,k3-am654-cpts.yaml#"
@@ -171,6 +171,8 @@ examples:
    #include <dt-bindings/pinctrl/k3.h>
    #include <dt-bindings/soc/ti,sci_pm_domain.h>
    #include <dt-bindings/net/ti-dp83867.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    mcu_cpsw: ethernet@46000000 {
        compatible = "ti,am654-cpsw-nuss";
@@ -229,4 +231,15 @@ examples:
                    ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
              };
        };

        cpts@3d000 {
             compatible = "ti,am65-cpts";
             reg = <0x0 0x3d000 0x0 0x400>;
             clocks = <&k3_clks 18 2>;
             clock-names = "cpts";
             interrupts-extended = <&gic500 GIC_SPI 858 IRQ_TYPE_LEVEL_HIGH>;
             interrupt-names = "cpts";
             ti,cpts-ext-ts-inputs = <4>;
             ti,cpts-periodic-outputs = <2>;
        };
    };
+9 −16
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ description: |+

properties:
  $nodename:
    pattern: "^cpts(@.*|-[0-9a-f])*$"
    pattern: "^cpts@[0-9a-f]+$"

  compatible:
    oneOf:
@@ -65,13 +65,13 @@ properties:
    items:
      - const: cpts

  interrupts-extended:
  interrupts:
    items:
      - description: CPTS events interrupt

  interrupt-names:
    items:
      - const: "cpts"
      - const: cpts

  ti,cpts-ext-ts-inputs:
    allOf:
@@ -107,9 +107,11 @@ properties:
      - clocks

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts-extended
  - interrupts
  - interrupt-names

additionalProperties: false
@@ -140,13 +142,4 @@ examples:
               assigned-clock-parents = <&k3_clks 118 11>;
         };
    };
  - |
    cpts {
             clocks = <&k3_clks 18 2>;
             clock-names = "cpts";
             interrupts-extended = <&gic500 GIC_SPI 858 IRQ_TYPE_LEVEL_HIGH>;
             interrupt-names = "cpts";
             ti,cpts-ext-ts-inputs = <4>;
             ti,cpts-periodic-outputs = <2>;
    };
+3 −1
Original line number Diff line number Diff line
@@ -248,7 +248,9 @@
			bus_freq = <1000000>;
		};

		cpts {
		cpts@3d000 {
			compatible = "ti,am65-cpts";
			reg = <0x0 0x3d000 0x0 0x400>;
			clocks = <&mcu_cpsw_cpts_mux>;
			clock-names = "cpts";
			interrupts-extended = <&gic500 GIC_SPI 570 IRQ_TYPE_LEVEL_HIGH>;
+3 −1
Original line number Diff line number Diff line
@@ -339,7 +339,9 @@
			bus_freq = <1000000>;
		};

		cpts {
		cpts@3d000 {
			compatible = "ti,am65-cpts";
			reg = <0x0 0x3d000 0x0 0x400>;
			clocks = <&k3_clks 18 2>;
			clock-names = "cpts";
			interrupts-extended = <&gic500 GIC_SPI 858 IRQ_TYPE_LEVEL_HIGH>;
+18 −6
Original line number Diff line number Diff line
@@ -2031,10 +2031,21 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
		return ret;
	}

	ret = of_platform_populate(dev->of_node, NULL, NULL, dev);
	/* We do not want to force this, as in some cases may not have child */
	if (ret)
		dev_warn(dev, "populating child nodes err:%d\n", ret);
	node = of_get_child_by_name(dev->of_node, "mdio");
	if (!node) {
		dev_warn(dev, "MDIO node not found\n");
	} else if (of_device_is_available(node)) {
		struct platform_device *mdio_pdev;

		mdio_pdev = of_platform_device_create(node, NULL, dev);
		if (!mdio_pdev) {
			ret = -ENODEV;
			goto err_pm_clear;
		}

		common->mdio_dev =  &mdio_pdev->dev;
	}
	of_node_put(node);

	am65_cpsw_nuss_get_ver(common);

@@ -2090,7 +2101,8 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
	return 0;

err_of_clear:
	of_platform_depopulate(dev);
	of_platform_device_destroy(common->mdio_dev, NULL);
err_pm_clear:
	pm_runtime_put_sync(dev);
	pm_runtime_disable(dev);
	return ret;
@@ -2115,7 +2127,7 @@ static int am65_cpsw_nuss_remove(struct platform_device *pdev)
	 */
	am65_cpsw_nuss_cleanup_ndev(common);

	of_platform_depopulate(dev);
	of_platform_device_destroy(common->mdio_dev, NULL);

	pm_runtime_put_sync(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
Loading