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

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
......@@ -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>;
};
};
......@@ -42,7 +42,7 @@ description: |+
properties:
$nodename:
pattern: "^cpts(@.*|-[0-9a-f])*$"
pattern: "^cpts@[0-9a-f]+$"
compatible:
oneOf:
......@@ -52,7 +52,7 @@ properties:
reg:
maxItems: 1
description:
The physical base address and size of CPTS IO range
The physical base address and size of CPTS IO range
reg-names:
items:
......@@ -65,27 +65,27 @@ 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:
- $ref: /schemas/types.yaml#/definitions/uint32
maximum: 8
description:
Number of hardware timestamp push inputs (HWx_TS_PUSH)
Number of hardware timestamp push inputs (HWx_TS_PUSH)
ti,cpts-periodic-outputs:
allOf:
- $ref: /schemas/types.yaml#/definitions/uint32
maximum: 8
description:
Number of timestamp Generator function outputs (TS_GENFx)
Number of timestamp Generator function outputs (TS_GENFx)
refclk-mux:
type: object
......@@ -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>;
};
......@@ -248,7 +248,9 @@ davinci_mdio: mdio@f00 {
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>;
......
......@@ -339,7 +339,9 @@ davinci_mdio: mdio@f00 {
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>;
......
......@@ -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);
......
......@@ -9,6 +9,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/platform_device.h>
struct am65_cpts;
......@@ -76,6 +77,7 @@ struct am65_cpsw_pdata {
struct am65_cpsw_common {
struct device *dev;
struct device *mdio_dev;
const struct am65_cpsw_pdata *pdata;
void __iomem *ss_base;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment