Thread (9 messages) flat view 9 messages, 2 authors, 2021-03-29

RE: FEC unbind/bind feature

From: Joakim Zhang <hidden>
Date: 2021-03-26 08:03:53

Hi Andrew,

Thanks for your kindly reply!
-----Original Message-----
From: Andrew Lunn <andrew@lunn.ch>
Sent: 2021年3月25日 20:45
To: Joakim Zhang <redacted>
Cc: Florian Fainelli <f.fainelli@gmail.com>; hkallweit1@gmail.com;
netdev@vger.kernel.org
Subject: Re: FEC unbind/bind feature

On Thu, Mar 25, 2021 at 08:04:58AM +0000, Joakim Zhang wrote:
quoted
Hi Andrew, Florian, Heiner

You are all Ethernet MDIO bus and PHY experts, I have some questions may
need your help, thanks a lot in advance.
quoted
For many board designs, if it has dual MAC instances, they always share one
MDIO bus to save PINs. Such as, i.MX6UL EVK board:

Please wrap your lines at around 75 characters. Standard netiquette rules for
emails apply to all Linux lists.
Ok, thanks.
quoted
&fec1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet1>;
	phy-mode = "rmii";
	phy-handle = <&ethphy0>;
	phy-supply = <&reg_peri_3v3>;
	status = "okay";
};

&fec2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet2>;
	phy-mode = "rmii";
	phy-handle = <&ethphy1>;
	phy-supply = <&reg_peri_3v3>;
	status = "okay";

	mdio {
		#address-cells = <1>;
		#size-cells = <0>;

		ethphy0: ethernet-phy@2 {
			compatible = "ethernet-phy-id0022.1560";
			reg = <2>;
			micrel,led-mode = <1>;
			clocks = <&clks IMX6UL_CLK_ENET_REF>;
			clock-names = "rmii-ref";

		};

		ethphy1: ethernet-phy@1 {
			compatible = "ethernet-phy-id0022.1560";
			reg = <1>;
			micrel,led-mode = <1>;
			clocks = <&clks IMX6UL_CLK_ENET2_REF>;
			clock-names = "rmii-ref";
		};
	};
};

For FEC driver now, there is a patch from Fabio to prevent unbind/bind
feature since dual FEC controllers share one MDIO bus.
(https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit
.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fnext%2Flinux-next.gi
t
quoted
%2Fcommit%2Fdrivers%2Fnet%2Fethernet%2Ffreescale%2Ffec_main.c%3Fh
%3Dne
quoted
xt-20210324%26id%3D272bb0e9e8cdc76e04baeefa0cd43019daa0841b&amp;
data=0
quoted
4%7C01%7Cqiangqing.zhang%40nxp.com%7C4ac266f1ef514bd09e9c08d8ef8b
ee33%
quoted
7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637522731561505308
%7CUnkn
quoted
own%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1h
aWwi
quoted
LCJXVCI6Mn0%3D%7C1000&amp;sdata=dstGAIhwHtLt3YW9D8p8L5cNpxIWL
h3wKzQmLp
quoted
oGGgE%3D&amp;reserved=0) If we unbind fec2 and then fec1 can't work
since MDIO bus is controlled by FEC1, FEC2 can't use it independently.

My question is that if we want to implement unbind/bind feature, what need
we do?

One option is you unbind FEC1 first, and then FEC2.
Yes, you are right. It should be always fine for single FEC controller, and unbind/bind one by one should also be fine for dual FEC controllers which share one MDIO bus. I test on i.MX6UL, i.MX8MM/MP.
quoted
It seems to abstract an independent MDIO bus for dual FEC instances. I
look at the MDIO dt bindings, it seems support such case as it has
"reg"
property. (Documentation/devicetree/bindings/net/mdio.yaml)
You can have fully standalone MDIO bus drivers. You generally do this when the
MDIO bus registers are in their own address space, which you can ioremap()
separately from the MAC registers. Take a look in drivers/net/mdio/.
quoted
From your opinions, do you think it is necessary to improve it?
What is you use case for unbinding/binding the FEC?
Users may want to unbind FEC driver, and then bind to FEC UIO driver, such as for DPDK use case to improve the throughput.

Best Regards,
Joakim Zhang
     Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help