Skip to content

Commit

Permalink
Merge branch 'ti-am65x-cpts-follow-up-dt-bindings-update'
Browse files Browse the repository at this point in the history
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: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed May 8, 2020
2 parents a8c9baf + ef2d136 commit 57ea850
Show file tree
Hide file tree
Showing 6 changed files with 49 additions and 25 deletions.
15 changes: 14 additions & 1 deletion Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ patternProperties:
description:
CPSW MDIO bus.

"^cpts$":
"^cpts@[0-9a-f]+":
type: object
allOf:
- $ref: "ti,k3-am654-cpts.yaml#"
Expand All @@ -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";
Expand Down Expand Up @@ -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>;
};
};
25 changes: 9 additions & 16 deletions Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ description: |+
properties:
$nodename:
pattern: "^cpts(@.*|-[0-9a-f])*$"
pattern: "^cpts@[0-9a-f]+$"

compatible:
oneOf:
Expand All @@ -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:
Expand All @@ -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
Expand All @@ -107,9 +107,11 @@ properties:
- clocks

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

additionalProperties: false
Expand Down Expand Up @@ -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>;
};
4 changes: 3 additions & 1 deletion arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -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>;
Expand Down
4 changes: 3 additions & 1 deletion arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -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>;
Expand Down
24 changes: 18 additions & 6 deletions drivers/net/ethernet/ti/am65-cpsw-nuss.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/ethernet/ti/am65-cpsw-nuss.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/platform_device.h>

struct am65_cpts;

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 57ea850

Please sign in to comment.