From a45cfcc69a2519463db0e18db5b7f9c7739f559d Mon Sep 17 00:00:00 2001 From: Grygorii Strashko Date: Wed, 6 May 2020 21:13:59 +0300 Subject: [PATCH 1/3] net: ethernet: ti: am65-cpsw-nuss: use of_platform_device_create() for mdio The MCU CPSW expected to populate only MDIO device, but follow up patches will add "compatible" property to the MCU CPSW CPTS node which will cause creation of CPTS device and MCU CPSW init failure. Hence, switch to use of_platform_device_create() instead of of_platform_populate() for MDIO device population. Signed-off-by: Grygorii Strashko Signed-off-by: David S. Miller --- drivers/net/ethernet/ti/am65-cpsw-nuss.c | 24 ++++++++++++++++++------ drivers/net/ethernet/ti/am65-cpsw-nuss.h | 2 ++ 2 files changed, 20 insertions(+), 6 deletions(-) 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 #include #include +#include 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; From 4786f4a08d72b7af68cfa258cb7e0abdbf13f002 Mon Sep 17 00:00:00 2001 From: Grygorii Strashko Date: Wed, 6 May 2020 21:14:00 +0300 Subject: [PATCH 2/3] dt-binding: net: ti: am65x-cpts: make reg and compatible required This patch follows K3 CPTS review comments from Rob Herring . - "reg" and "compatible" properties are required now - minor format changes - K3 CPTS example added to K3 MCU CPSW bindings Cc: Rob Herring Signed-off-by: Grygorii Strashko Signed-off-by: David S. Miller --- .../bindings/net/ti,k3-am654-cpsw-nuss.yaml | 15 ++++++++++- .../bindings/net/ti,k3-am654-cpts.yaml | 25 +++++++------------ 2 files changed, 23 insertions(+), 17 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 #include #include + #include + #include mcu_cpsw: ethernet@46000000 { compatible = "ti,am654-cpsw-nuss"; @@ -229,4 +231,15 @@ examples: ti,fifo-depth = ; }; }; + + 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>; - }; From ef2d1363c55a2bae14a20d5c0ce6939c7badf8c6 Mon Sep 17 00:00:00 2001 From: Grygorii Strashko Date: Wed, 6 May 2020 21:14:01 +0300 Subject: [PATCH 3/3] arm64: dts: ti: k3-am65/j721e-mcu: update cpts node Update CPTS node following DT binding update: - add reg and compatible properties - fix node name Signed-off-by: Grygorii Strashko Signed-off-by: David S. Miller --- arch/arm64/boot/dts/ti/k3-am65-mcu.dtsi | 4 +++- arch/arm64/boot/dts/ti/k3-j721e-mcu-wakeup.dtsi | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) 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>;