diff options
author | David S. Miller <davem@davemloft.net> | 2020-05-07 17:51:03 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-05-07 17:51:03 -0700 |
commit | 57ea85069cc5da0e8b8418f901cae706f92774fb (patch) | |
tree | 26a4a94d2c8093706ab7b9f6ae991ce537a9e162 | |
parent | a8c9baf28c484a56a0cb1f92e9f740112d1cc567 (diff) | |
parent | ef2d1363c55a2bae14a20d5c0ce6939c7badf8c6 (diff) |
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: David S. Miller <davem@davemloft.net>
-rw-r--r-- | Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml | 15 | ||||
-rw-r--r-- | Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml | 25 | ||||
-rw-r--r-- | arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi | 4 | ||||
-rw-r--r-- | arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/ti/am65-cpsw-nuss.c | 24 | ||||
-rw-r--r-- | drivers/net/ethernet/ti/am65-cpsw-nuss.h | 2 |
6 files changed, 49 insertions, 25 deletions
diff --git a/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml b/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml index 0c054a2ce5ba..c87395f360a6 100644 --- a/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml +++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpsw-nuss.yaml @@ -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>; + }; }; diff --git a/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml b/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml index df83c320e61b..50e027911dd4 100644 --- a/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml +++ b/Documentation/devicetree/bindings/net/ti,k3-am654-cpts.yaml @@ -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>; - }; diff --git a/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi b/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi index 0e773e0b3f89..ae5f813d0cac 100644 --- a/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi +++ b/arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi @@ -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>; diff --git a/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi b/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi index 37c355e5a833..dc31bd0434cb 100644 --- a/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi +++ b/arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi @@ -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>; diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c index f8c589929308..8cdbb2b9b13a 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c @@ -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); diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.h b/drivers/net/ethernet/ti/am65-cpsw-nuss.h index b1cddfd05a45..8a6382188cb5 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.h +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.h @@ -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; |