[PATCH] arm64: dts: rockchip: ROCK3B: Correct clock rates for Ethernet PHYs
Jonas Karlman
jonas at kwiboo.se
Fri Dec 20 09:09:01 PST 2024
Hi Alicja,
On 2024-12-20 17:32, Alicja Michalska wrote:
> Built-in ethernet PHYs did not work on mainline kernel:
>
> fe010000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
> fe010000.ethernet eth0: __stmmac_open: Cannot attach to PHY
Have you used mainline or vendor u-boot when testing?
There is an existing issue with RTL8211F PHYs that they must be reset
before Linux can identify them, see [1] for more details on the issue.
Mainline U-Boot will reset the Ethernet PHYs on this board and that
should allow for Linux to identify and use the Ethernet PHYs.
[1] https://lore.kernel.org/r/47d55aca-bee6-810f-379f-9431649fefa6@kwiboo.se/
>
> According to the board design, they need to be configured as output with
> static TX/RX delay. This patch sets it accordingly.
>
> Signed-off-by: Alicja Michalska <alicja.michalska at 9elements.com>
> ---
> .../boot/dts/rockchip/rk3568-rock-3b.dts | 68 +++++++++++--------
> 1 file changed, 38 insertions(+), 30 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/rockchip/rk3568-rock-3b.dts b/arch/arm64/boot/dts/rockchip/rk3568-rock-3b.dts
> index 3d0c1ccfaa79..5350158302e4 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3568-rock-3b.dts
> +++ b/arch/arm64/boot/dts/rockchip/rk3568-rock-3b.dts
> @@ -183,37 +183,65 @@ &cpu3 {
> &gmac0 {
> assigned-clocks = <&cru SCLK_GMAC0_RX_TX>, <&cru SCLK_GMAC0>;
> assigned-clock-parents = <&cru SCLK_GMAC0_RGMII_SPEED>, <&cru CLK_MAC0_2TOP>;
> - clock_in_out = "input";
> - phy-handle = <&rgmii_phy0>;
> - phy-mode = "rgmii-id";
> + assigned-clock-rates = <0>, <125000000>;
> + clock_in_out = "output";
> phy-supply = <&vcc_3v3>;
> + phy-mode = "rgmii";
> + phy-handle = <&rgmii_phy0>;
> pinctrl-names = "default";
> pinctrl-0 = <&gmac0_miim
> &gmac0_tx_bus2
> &gmac0_rx_bus2
> &gmac0_rgmii_clk
> - &gmac0_rgmii_bus
> - &gmac0_clkinout>;
> + &gmac0_rgmii_bus>;
> + snps,reset-gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
> + snps,reset-active-low;
> + snps,reset-delays-us = <0 20000 100000>;
The snps,reset props is deprecated and reset- props should be used in
the PHY node.
This also changes to use 20/100 ms delay instead of current 20/50ms
delay. If anything it could be changed to 20/80ms, I have only seen
datasheets for rtl8211f mention minimum 10 ms and minimum 30-76 ms.
> +
> + tx_delay = <0x36>;
> + rx_delay = <0x2d>;
Are you having issue with use of rgmii-id on your board?
> +
> status = "okay";
> };
>
> &gmac1 {
> assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
> assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
> - clock_in_out = "input";
> - phy-handle = <&rgmii_phy1>;
> - phy-mode = "rgmii-id";
> + assigned-clock-rates = <0>, <125000000>;
> + clock_in_out = "output";
> phy-supply = <&vcc_3v3>;
> + phy-mode = "rgmii";
> + phy-handle = <&rgmii_phy1>;
> pinctrl-names = "default";
> pinctrl-0 = <&gmac1m1_miim
> &gmac1m1_tx_bus2
> &gmac1m1_rx_bus2
> &gmac1m1_rgmii_clk
> - &gmac1m1_rgmii_bus
> - &gmac1m1_clkinout>;
> + &gmac1m1_rgmii_bus>;
> + snps,reset-gpio = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
> + snps,reset-active-low;
> + snps,reset-delays-us = <0 50000 150000>;
Same here, but now this is 50/150 ms?
> +
> + tx_delay = <0x47>;
> + rx_delay = <0x28>;
Same here, is use of rgmii-id causing issues on your boards?
> +
> status = "okay";
> };
>
> +&mdio0 {
> + rgmii_phy0: ethernet-phy at 0 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0>;
The phy addr used for these boards is 0x1.
> + };
> +};
> +
> +&mdio1 {
> + rgmii_phy1: ethernet-phy at 0 {
> + compatible = "ethernet-phy-ieee802.3-c22";
> + reg = <0>;
Same here.
> + };
> +};
There should be no need to move these nodes, they should already be in
alphabetical order?
> +
> &gpu {
> mali-supply = <&vdd_gpu>;
> status = "okay";
> @@ -512,26 +540,6 @@ &i2s1m0_sdi0
> status = "okay";
> };
>
> -&mdio0 {
> - rgmii_phy0: ethernet-phy at 1 {
> - compatible = "ethernet-phy-ieee802.3-c22";
If you want to use vendor u-boot you can probably change this to
"ethernet-phy-id001c.c916".
> - reg = <1>;
> - reset-assert-us = <20000>;
> - reset-deassert-us = <50000>;
> - reset-gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>;
> - };
> -};
> -
> -&mdio1 {
> - rgmii_phy1: ethernet-phy at 1 {
> - compatible = "ethernet-phy-ieee802.3-c22";
Same here.
Regards,
Jonas
> - reg = <1>;
> - reset-assert-us = <20000>;
> - reset-deassert-us = <50000>;
> - reset-gpios = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
> - };
> -};
> -
> &pcie2x1 {
> pinctrl-names = "default";
> pinctrl-0 = <&pcie20m1_pins>;
More information about the Linux-rockchip
mailing list