Re: [PATCH 3/4] arm64: dts: fsd: Add Ethernet support for FSYS0 Block of FSD SoC

From: Krzysztof Kozlowski
Date: Fri Nov 04 2022 - 08:46:09 EST


On 04/11/2022 08:05, Sriranjani P wrote:
> The FSD SoC contains two instances of Synopsys DWC QoS Ethernet IP, one
> in FSYS0 block and other in PERIC block.
>
> Adds device tree node for Ethernet in FSYS0 Block and enables the same for
> FSD platform.
>
> Cc: Rob Herring <robh+dt@xxxxxxxxxx>
> Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@xxxxxxxxxx>
> Cc: Richard Cochran <richardcochran@xxxxxxxxx>
> Cc: devicetree@xxxxxxxxxxxxxxx
> Signed-off-by: Pankaj Dubey <pankaj.dubey@xxxxxxxxxxx>
> Signed-off-by: Jayati Sahu <jayati.sahu@xxxxxxxxxxx>
> Signed-off-by: Sriranjani P <sriranjani.p@xxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/tesla/fsd-evb.dts | 9 ++++
> arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi | 56 ++++++++++++++++++++++
> arch/arm64/boot/dts/tesla/fsd.dtsi | 38 +++++++++++++++
> 3 files changed, 103 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/tesla/fsd-evb.dts b/arch/arm64/boot/dts/tesla/fsd-evb.dts
> index 1db6ddf03f01..42bf25c680e2 100644
> --- a/arch/arm64/boot/dts/tesla/fsd-evb.dts
> +++ b/arch/arm64/boot/dts/tesla/fsd-evb.dts
> @@ -30,6 +30,15 @@
> };
> };
>
> +&ethernet_0 {
> + status = "okay";
> +
> + fixed-link {
> + speed=<1000>;

Missing spaces around =.

> + full-duplex;
> + };
> +};
> +
> &fin_pll {
> clock-frequency = <24000000>;
> };
> diff --git a/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi b/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi
> index d0abb9aa0e9e..8c7e43085a2b 100644
> --- a/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi
> +++ b/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi
> @@ -64,6 +64,62 @@
> samsung,pin-pud = <FSD_PIN_PULL_NONE>;
> samsung,pin-drv = <FSD_PIN_DRV_LV2>;
> };
> +
> + eth0_tx_clk: eth0-tx-clk-pins {
> + samsung,pins = "gpf0-0";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_DOWN>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_tx_data: eth0-tx-data-pins {
> + samsung,pins = "gpf0-1", "gpf0-2", "gpf0-3", "gpf0-4";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_UP>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_tx_ctrl: eth0-tx-ctrl-pins {
> + samsung,pins = "gpf0-5";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_UP>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_phy_intr: eth0-phy-intr-pins {
> + samsung,pins = "gpf0-6";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_NONE>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV4>;
> + };
> +
> + eth0_rx_clk: eth0-rx-clk-pins {
> + samsung,pins = "gpf1-0";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_UP>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_rx_data: eth0-rx-data-pins {
> + samsung,pins = "gpf1-1", "gpf1-2", "gpf1-3", "gpf1-4";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_UP>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_rx_ctrl: eth0-rx-ctrl-pins {
> + samsung,pins = "gpf1-5";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_UP>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV6>;
> + };
> +
> + eth0_mdio: eth0-mdio-pins {
> + samsung,pins = "gpf1-6", "gpf1-7";
> + samsung,pin-function = <FSD_PIN_FUNC_2>;
> + samsung,pin-pud = <FSD_PIN_PULL_NONE>;
> + samsung,pin-drv = <FSD_PIN_DRV_LV4>;
> + };
> };
>
> &pinctrl_peric {
> diff --git a/arch/arm64/boot/dts/tesla/fsd.dtsi b/arch/arm64/boot/dts/tesla/fsd.dtsi
> index f35bc5a288c2..2495928b71dc 100644
> --- a/arch/arm64/boot/dts/tesla/fsd.dtsi
> +++ b/arch/arm64/boot/dts/tesla/fsd.dtsi
> @@ -32,6 +32,7 @@
> spi0 = &spi_0;
> spi1 = &spi_1;
> spi2 = &spi_2;
> + eth0 = &ethernet_0;

Not every board will have ethernet, so this should be in board DTS.
However other question is - why do you need it?

> };
>
> cpus {
> @@ -860,6 +861,43 @@
> clocks = <&clock_fsys0 UFS0_MPHY_REFCLK_IXTAL26>;
> clock-names = "ref_clk";
> };
> +
> + ethernet_0: ethernet@15300000 {
> + compatible = "tesla,dwc-qos-ethernet-4.21";
> + reg = <0x0 0x15300000 0x0 0x10000>;
> + interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
> + clocks =
> + /* ptp ref clock */

That's not a formatting used in sources. I doubt that they are actually
useful as you copy the name of the clock.

> + <&clock_fsys0 FSYS0_EQOS_TOP0_IPCLKPORT_CLK_PTP_REF_I>,
> + /* aclk clocks */
> + <&clock_fsys0 FSYS0_EQOS_TOP0_IPCLKPORT_ACLK_I>,
> + /* hclk clocks */
> + <&clock_fsys0 FSYS0_EQOS_TOP0_IPCLKPORT_HCLK_I>,
> + /* rgmii clocks */
> + <&clock_fsys0 FSYS0_EQOS_TOP0_IPCLKPORT_RGMII_CLK_I>,
> + /* rxi clocks */
> + <&clock_fsys0 FSYS0_EQOS_TOP0_IPCLKPORT_CLK_RX_I>;
> + clock-names =
> + /* ptp ref clocks */
> + "ptp_ref",
> + /* aclk clocks */
> + "master_bus",
> + /* hclk clocks */
> + "slave_bus",
> + /* rgmii clk */
> + "tx",
> + /* rxi clocks */
> + "rx";
> + pinctrl-names = "default";
> + pinctrl-0 = <&eth0_tx_clk>, <&eth0_tx_data>, <&eth0_tx_ctrl>,
> + <&eth0_phy_intr>, <&eth0_rx_clk>, <&eth0_rx_data>,
> + <&eth0_rx_ctrl>, <&eth0_mdio>;
> + local-mac-address = [45 54 48 30 4d 43];

So all devices in the world will have exactly the same MAC address? I
don't think that's desired :)

> + rx-clock-skew = <&sysreg_fsys0 0x0 0x2>;

Where is the property documented?

Does not look like you tested the DTS against bindings. Please run `make
dtbs_check` (see Documentation/devicetree/bindings/writing-schema.rst
for instructions).

Please confirm that you perform above.

> + iommus = <&smmu_fsys0 0x0 0x1>;
> + status = "disabled";

Status is last.

> + phy-mode = "rgmii";
> + };
> };
> };
>

Best regards,
Krzysztof