This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DP83822I: Trigger a hard reset using a GPIO

Part Number: DP83822I
Other Parts Discussed in Thread: AM6442, TPS65220

Tool/software:

Dear community,

I'm working on a custom board based on a TI AM6442 SOC with two PHYs DP83822 connected. For power management we use a PMIC TI TPS65220.

The reset (NRESET) of each PHY is routed to a GPIO at the AM6442 (external pull-up to 1.8V). Since reset of the PHYs are high (= no reset) at startup, and the AVD changes during boot (2.5V initial at LDO4 -> 1.8V after PMIC configuration), we must reset the PHYs after changing the power, so that they will reinitialize completely, including the bootstrapping pins.

I looked at some examples and the documentation (ethernet-phy.yaml), but I was not able to trigger a reset, preferably via sysfs.

My device tree node looks like the following:

mdio1_pins_default: mdio1-default-pins {
	bootph-all;
	pinctrl-single,pins = <
		AM64X_IOPAD(0x01fc, PIN_OUTPUT, 4) /* (R2) PRG0_PRU1_GPO19.MDIO0_MDC */
		AM64X_IOPAD(0x01f8, PIN_INPUT, 4) /* (P5) PRG0_PRU1_GPO18.MDIO0_MDIO */
	>;
};
	
cpsw1_rst_default: cpsw1_rst_default_pins {
	pinctrl-single,pins = <
		AM64X_IOPAD (0xBC, PIN_OUTPUT, 7) /* (U8) PRU0_GP_1 / GPIO0_46 */
	>;
};

cpsw2_rst_default: cpsw2_rst_default_pins {
	pinctrl-single,pins = <
		AM64X_IOPAD (0xE8, PIN_OUTPUT, 7) /* (U9) PRU0_GPO_2 / GPIO0_57*/
	>;
};
	    

&cpsw3g_mdio {
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&mdio1_pins_default>, <&cpsw1_rst_default>, <&cpsw2_rst_default>;

	cpsw3g_phy0: ethernet-phy@0 {
		compatible = "ethernet-phy-ieee802.3-c22";
		reg = <0>;
		reset-names = "phy";
		reset-gpios = <&main_gpio0 46 GPIO_ACTIVE_LOW>;
		reset-assert-us = <1000>;
		reset-deassert-us = <2000>;
		rx-internal-delay-ps = <1>; 
        tx-internal-delay-ps = <1>; 
	};

	cpsw3g_phy1: ethernet-phy@1 {
		compatible = "ethernet-phy-ieee802.3-c22";
		reg = <1>;
		reset-names = "phy";
		reset-gpios = <&main_gpio0 57 GPIO_ACTIVE_LOW>;
		reset-assert-us = <1000>;
		reset-deassert-us = <2000>;
		rx-internal-delay-ps = <1>;	
        tx-internal-delay-ps = <1>;
	};
};

So my question is, how can I trigger a complete reset of the PHYs?

Any help is appreciated.

BR Benjamin